No commit activity in last 3 years
No release in over 3 years
A routing-filter additional filter that add locale unless XML or JSON, or root_url with default locale
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 0.4
~> 1.2
~> 1.0
~> 0.9
~> 2.6
~> 0.8

Runtime

>= 3.0.9
>= 0.5.0
 Project Readme

Routing Filter, Locale Unless API build status

Deprecated with Rails 4+

Since Rails 4+, the router changed and there's more flexible way to do this:

In your congfig/routes.rb:

  • put all in the locale scope (except the root)
  • add route for locale's only path
scope "(:locale)", locale: /([a-zA-Z]{2}[-_])?[a-zA-Z]{2}/ do
end

get '/en', to: redirect('/')
get '/:locale' => 'home#index', locale: /([a-zA-Z]{2}[-_])?[a-zA-Z]{2}/
root to: 'home#index'

In your app/application_controller.rb

  • Set the locale from the params
  • Add the locale as default URL option
before_filter :set_locale

def default_url_options(options={})
  formats = %w( xml json )
  { locale: formats.include?(params[:format].to_s) ? nil : I18n.locale }
end

private

def set_locale
  I18n.locale = params[:locale] || I18n.default_locale
end

For Rails 3.2 and under

RoutingFilterLocaleUnlessAPI is a extension filter to Sven Fuchs’s routing-filter

http://github.com/svenfuchs/routing-filter

RoutingFilterLocaleUnlessAPI filter extracts segments matching /:locale from the beginning of the recognized path and exposes the locale parameter as params[:locale]. When a path is generated the filter adds the segments to the path accordingly if the locale parameter is passed to the url helper.

It will not add the locale parameter as a url fragment if:

  • the format is XML or JSON (or any defined API format)
  • with the root url and default locale

Documentation

The RDoc provides additional information for contributors and/or extenders.

All of the documentation is open source and a work in progress. If you find it lacking or confusing, you can help improve it by submitting requests and patches to the routing_filter_locale_unless_api issue tracker.

Requirements

Tested with Ruby 1.8.7, 1.9.2, 1.9.3, Ruby-head, REE and JRuby

actionpack >= 3.0.9
i18n >= 0.5.0
routing-filter >= 0.2.3

Installation

in your Gemfile

gem 'routing_filter_locale_unless_api'

then in config/routes.rb

Rails.application.routes.draw do
  filter :locale_unless_api
end

Usage

incoming url: /fr/products
filtered url: /products
params: params[:locale] = 'fr'

products_path(:locale => 'fr')
generated_path: /fr/products

products_path(:locale => 'fr', :format => 'xml')
generated_path: /products.xml

root_path(:locale => 'en')
generated_path: /

root_path(:locale => 'fr')
generated_path: /fr

More example visible in the tests cases

Configuration

You can customize the API formats with

Rails.application.routes.draw do
  filter :locale_unless_api, :api_formats => %w( xml json xls )
end

Also see

License

MIT License. Copyright 2011 Sébastien Grosjean, sponsored by BookingSync, Vacation Rental's Booking Calendar Software