2012-04-15 35 views
1

我有我的网址是这样的:Rails 3.2,更改语言环境时如何刷新当前的URL区域设置?

http://0.0.0.0:3000/en/experiments 

当我改变了语言环境,所有的字符串会转换细, 但是,该网址的语言环境不改变

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' 

这里是个e家控制器:

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' 

这样,我怎么能刷新URL以反映新的语言环境, 不应redirect_to :back这样做呢?

回答

0

我会建议使用类似routing-filter的东西,而不是这个问题的自定义解决方案。此外,调用参数“ID”似乎奇怪。更好的名字是“locale”,不是吗?

+0

谢谢,我会检查路由过滤器,是的,它能够更好地使用语言环境参数名称:-) – simo 2012-04-15 16:47:33

+0

路由过滤器并没有解决这个问题,我需要一个方式来刷新本地权利,我选择了不同的区域设置后,目前,只有当我设置一个新的本地+访问另一个链接时,本地URL更改... – simo 2012-04-15 18:21:47

0

你在应用程序控制器中试过这个吗?

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

有了这段代码,你不能因为你重定向到:back这是旧的区域设置的url。更改地区,并保持当前的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]) 
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