我的网址看起来像这样:
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
这样做吗?
答案 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])