Прозрачная вещь с I18n и параметром локали перенаправлений (RoR) меняется - PullRequest
0 голосов
/ 24 февраля 2012

Я пытался реализовать функцию «изменить язык» в своем приложении. Я просмотрел официальное руководство http://guides.rubyonrails.org/i18n.html и все было ясно для меня. К сожалению, я не знаю, как исправить одну проблему. Например, когда я получаю доступ к форме входа по ссылке /en/login, все в порядке, пока я не нажму на форму отправки.

После перенаправления параметр [: locale] не прошел как ожидалось, и я получаю локали по умолчанию. Есть ли какой-нибудь "Rails-way" соултинг для перенаправления с ранее выбранными локалями? Я полагаю, что каждый раз можно передавать параметр redirect_to, но это проблематично для каждого контроллера.

Мои маршруты:

    scope "(:locale)", :locale => /pl|en/ do
      devise_for :users
      resources :pages
      get "/login"    => "sessions#new"
      post "/users/sign_in"    => "sessions#create"
      delete "/users/sign_out" => "sessions#destroy"
      root :to => "pages#index"
      resources :websites
    end
      match '/:locale' => 'pages#index'

Контроллер приложения:

    class ApplicationController < ActionController::Base
      protect_from_forgery
      before_filter :set_locale

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

    end

Ответы [ 2 ]

2 голосов
/ 25 февраля 2012

, как рекомендует то же руководство, вы можете добавить

class ApplicationController < ActionController::Base
def default_url_options(options={}) 
    { :locale => I18n.locale } 
end

Это перенаправит вашего пользователя на соответствующую локализованную корневую страницу

localhost:3000/?locale=pl
localhost:3000/?locale=en
....
1 голос
/ 24 февраля 2012

Попробуйте это

before_filter :check_for_previous_locale_in_cookie

def check_for_previous_locale_in_cookie       
      I18n.locale = cookies[:last_seen_locale].blank? ? cookies[:last_seen_locale] : (cookies[:last_seen_locale] = params[:locale] || I18n.default_locale )        
end
...