Rails 3.2,如何在更改语言环境时刷新当前的URL语言环境?

时间:2012-04-15 04:41:52

标签: ruby-on-rails-3 ruby-on-rails-3.1

我的网址看起来像这样:

http://0.0.0.0:3000/en/experiments

当我更改语言环境时,所有字符串都可以正常翻译, 但是,url语言环境不会更改为

http://0.0.0.0:3000/ar/experiments,除非我按任意链接,否则会刷新

这是我的routes.rb:

scope "(:locale)", :locale => /en|ar/ do
    resources :experiments
    resources :users
    resources :class_rooms
  end

match 'lang' => 'home#set_lang'

这是家庭控制器:

def set_lang
    I18n.locale = params[:id]
    redirect_to :back
end

视点链接:

= link_to "Arabic", :controller => 'home', :action => 'set_lang', :id => 'ar'
= link_to "English", :controller => 'home', :action => 'set_lang', :id => 'en'

那么,如何刷新网址以反映新的区域设置, 不应redirect_to :back这样做吗?

4 个答案:

答案 0 :(得分:1)

我知道这个问题是2岁,但是嘿。我有完全相同的问题,我解决了。

前提是您已将其包含在application_controller.rb

def default_url_options(options = {})
   {locale: I18n.locale}.merge options
end

您不需要任何控制器或操作。相反,只需这样做:

= link_to 'Arabic', locale: :ar
= link_to 'English', locale: :en

答案 1 :(得分:0)

我建议使用类似routing-filter的内容而不是自定义解决方案。此外,调用参数“id”似乎很奇怪。一个更好的名称是“locale”,不是吗?

答案 2 :(得分:0)

您是否在应用程序控制器中尝试过此操作?

# pass in language as a default url parameter
def default_url_options(options = {})
   {locale: I18n.locale}
end

答案 3 :(得分:0)

使用此代码,您不能,因为您正在重定向到:back,这是具有旧语言环境的URL。

def set_lang
    I18n.locale = params[:id]
    redirect_to :back
end

更改区域设置并保留当前网址的一种方法是执行类似这样的操作

 - I18n.available_locales.each do |locale|
   = link_to t(locale, :scope => [:languages]), params.merge(:locale => locale), :id => locale, :title => t(locale, :scope => [:languages]), :alt => t(locale, :scope => [:languages])