1

我的网址如下所示:

http://0.0.0.0:3000/en/experiments

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

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

这是我的路线.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'

那么,如何刷新 url 以反映新的语言环境,不应该redirect_to :back这样做吗?

4

4 回答 4

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
于 2014-07-02T08:47:45.070 回答
0

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

# pass in language as a default url parameter
def default_url_options(options = {})
   {locale: I18n.locale}
end
于 2012-05-14T08:31:02.657 回答
0

我建议使用类似路由过滤器的东西,而不是使用自定义解决方案来解决这个问题。此外,调用参数“id”似乎很奇怪。一个更好的名字是“locale”,不是吗?

于 2012-04-15T14:39:23.470 回答
0

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

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

更改语言环境并保留当前 URL 的一种方法是执行以下操作

 - 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])
于 2012-11-18T14:48:36.270 回答