0

我试图在我的应用程序中实现“更改语言”功能。我浏览了官方指南http://guides.rubyonrails.org/i18n.html,一切对我来说都很清楚。不幸的是,我不知道如何解决一个问题。例如,当我通过链接访问登录表单时,/en/login一切都很好,直到我点击提交表单。

重定向后 param[:locale] 未按预期传递,我得到默认语言环境。是否有任何“Rails-way”灵魂可以重定向到先前选择的语言环境?我想可以将每个 time 参数传递给,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
4

2 回答 2

2

正如同一指南推荐的那样,您可以添加

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

它会将您的用户重定向到正确的本地化根页面

localhost:3000/?locale=pl
localhost:3000/?locale=en
....
于 2012-02-25T04:31:49.400 回答
1

试试这个

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
于 2012-02-24T14:02:33.700 回答