Вопрос

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

После перенаправления param [: locale] не передается как ожидалось, и я получаю локали по умолчанию.Есть ли «рельсы-путь», чтобы перенаправить с ранее выбранными медами?Думаю, что можно пройти каждый раз для 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
.

Это было полезно?

Решение

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

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

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

localhost:3000/?locale=pl
localhost:3000/?locale=en
....
.

Другие советы

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

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
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top