Rails: 更改语言环境并保留页面参数

25 浏览
0 Comments

Rails: 更改语言环境并保留页面参数

我有一个带有指向不同语言的链接的导航栏:

<%= link_to t('header.english'), locale: "en" %>

问题是当用户尝试在包含额外参数的页面上切换语言时。在此时改变语言环境会重新加载页面并删除所有额外的参数。

那么,我该如何将当前页面的所有参数传递给语言切换链接呢?

例如,当打开/page/new?param1=1¶m2=2时,用户切换语言后,/page/new?locale=en被打开,并且所有额外的参数都从URL中删除。

0
0 Comments

Rails: 更改语言环境并保留页面参数

问题的原因是在创建语言切换链接时,没有将当前的参数传递给link_to方法。解决方法是修改导航栏链接的代码,如下所示:

<%= link_to t('header.english'), params.merge(locale: "en") %>

这样做会暴露很多可能不希望暴露的参数,因为params也包括POST数据。

抱歉,上面的评论是正确的,这不是一个好的解决方法。应该明确地添加参数。

0
0 Comments

问题的原因是需要在所有请求中保持locale参数不变。解决方法是在application_controller.rb文件中添加default_url_options方法,代码如下:

# app/controllers/application_controller.rb
def default_url_options(options={})
  { locale: I18n.locale }
end

这个方法会将locale参数设置为I18n.locale,从而保持在所有请求中不变。这个方法是从Rails指南中获取的。

这个解决方法是非常有效的,可以解决问题并保持locale参数在所有请求中不变。一个用户表示这个方法完全解决了他的问题,并对此表示感谢。

0