我对我的网站进行了国际化。 我使用了https://github.com/enriclluelles/route_translator
每个链接都在运行,具体取决于当前的区域设置
我有两个这样的按钮:EN | FR
您可以单击它以更改区域设置。它的工作原理如下:
if I18n.locale == :fr
link_to('en', root_en_path)
else
link_to('fr', root_fr_path)
end
唯一的问题是,如果我在我网站的某个页面上并且我更改了语言环境,它将返回到root_path
我想要的是保持同一页面。
例如:我有一个how_it_works页面
如果我在/fr/how_it_works
,我希望EN
按钮链接到/en/how_it_works
我被告知要将区域设置作为参数传递,但我不希望这样,因为我不想拥有像/fr/how_it_works?locale=en
这样的大链接,而且我确信这是一个糟糕的设计
答案 0 :(得分:1)
您给出的建议是最好的方法,不会,您不会按照自己的想法使用查询参数。
Rails.application.routes.draw do
scope ':locale', constraints: { locale: /(en|fr)/ } do
#define all your scopeable routes within here
end
end
这样,您可以访问/en/how-it-works
或/fr/how-it-works
。在ApplicationController中,您可以执行before action :set_locale
,将区域设置设置为params[:locale]
。
希望更清楚并解决您的问题。
<强>更新强>
无法找到实现这一目标的更好方法,但这是我可以立即解决的方法:
url_params = params.to_h
if I18n.locale == :fr
link_to('en', url_params.merge(locale: :en))
else
link_to('fr', url_params.merge(locale: :fr)
end
答案 1 :(得分:1)
感谢good主为我带来解决方案!我刚刚遇到你们有同样的问题,所以这就是我用过的。
<%= link_to(options = {controller: controller_name, action: action_name, locale: :en} , class: "navbar-item") do %>
<%= image_tag "gb.svg", size: "24x24" %>
<% end %>
用于显示指向同一页面的链接,但是更改区域设置并将图像用作链接。
答案 2 :(得分:0)
解决方案:
if I18n.locale == :fr
en_uri = request.fullpath.gsub('/fr', '/en')
good_link = en_uri[0, 3] == '/en' ? en_uri : root_en_path
link_to('en', good_link)
else
fr_uri = request.fullpath.gsub('/en', '/fr')
good_link = fr_uri[0, 3] == '/fr' ? fr_uri : root_fr_path
link_to('fr', good_link)
end
答案 3 :(得分:0)
我使用类似的设置,并且遇到了这个(旧)问题。 Matheus的回答帮助我整理了思路,对我来说解决方案很简单
['277', '40.52', '-36.59', '0.11', '-0.50', '-1.62', '30.17']
['277', '40.52', '-36.49', '0.18', '-0.04', '-1.66', '30.14']
['277', '40.51', '-36.39', '0.14', '-0.07', '-1.64', '30.15']
请注意,这是有效的,因为我在route.rb中使用了“范围”:
<%= link_to "fr", controller: controller_name, action: action_name, locale: "fr" %>
这样,每个请求都会传递区域设置,并且获取它很容易
scope "(:locale)", locale: /en|fr/ do
...
end
我想与其他可能分享的人分享。再次,内置的滑轨可以用几行就可以完成令人惊奇的事情。
快乐鳕鱼。
答案 4 :(得分:-1)
那又如何呢? :
<%= link_to "English", current_page_params.merge(locale: :en) %>
详细了解:https://gorails.com/episodes/rails-link-to-current-page-with-params