Changement de langue avec une URL dans Ruby on Rails 3

J'ai un site en français et en anglais. Je veux que l'utilisateur soit en mesure de changer de langue à la volée lorsqu'ils cliquent sur un lien dans l'en-tête. Assez simple.

J'ai suivi le Ruby on Rails 3, guide, et j'ai ceci:

class ApplicationController < ActionController::Base
before_filter :set_locale
def set_locale
    I18n.locale = params[:locale] || I18n.default_locale
end

protect_from_forgery

  def default_url_options(options={})
  logger.debug "default_url_options is passed options: #{options.inspect}\n"
  { :locale => I18n.locale }
   end
end

Mes itinéraires ressembler à ceci:

scope "(:locale)", :locale => /en|fr/ do

match 'home' => 'home#index'
match 'home/ajax_twitter' => 'home#ajax_twitter'
match 'equipe' => 'equipe#index'
match 'equipe/sylvain' => 'equipe#sylvain'
match 'equipe/benoit' => 'equipe#benoit'
match 'equipe/stephane' => 'equipe#stephane'
match 'equipe/suemarie' => 'equipe#suemarie'
match 'equipe/regis' => 'equipe#regis'
match 'equipe/fred' => 'equipe#fred'

match 'equipe/callback' => 'equipe#callback'
match 'equipe/auth' => 'equipe#auth'
match 'equipe/ajax_contact' => 'equipe#ajax_contact'

match 'linkedinauth/callback' => 'linkedinAuth#callback'
match 'linkedinauth/init_auth' => 'linkedinAuth#init_auth'

match 'mission' => 'mission#index'
match 'service' => 'service#index'
match 'developmen' => 'developmen#index'

match 'contact' => 'contact#index'

match 'mandats' => 'mandats#index'
end

match '/:locale' => "home#index"

Et à mon avis je fais ceci:

<% if I18n.locale == I18n.default_locale %>
  <%= link_to "English", '/en'%>

<% else %>
  <%= link_to "Français", '/fr'%>

<%end%>

Tous fonctionne bien dans la page d'accueil, mais si j'essaie de passer de la langue alors que je suis dans un contrôleur spécifique, je le renvoi à la page d'accueil. J'ai essayé d'ajouter ceci:

<% if I18n.locale == I18n.default_locale %>
  <%= link_to "English", '/en/' + params[:controller]%>

<% else %>
  <%= link_to "Français", '/fr/' + params[:controller]%>

<%end%>

Cela résout le contrôleur, mais si nous sommes dans un domaine spécifique de l'action et de changement de langue à nouveau, je serai de retour à l'index de ce contrôleur.

Ma question: Quelle est la meilleure façon de traiter ce problème?

Je suppose que je pourrais mettre en place quelque chose dans le ApplicationController (filtre) pour vérifier si un contrôleur /action /id est transmis et l'ajouter à la locale. Ou puis-je le faire dans les itinéraires.rb?

InformationsquelleAutor Cygnusx1 | 2011-12-05