Ruby on rails - 更改区域设置但保留在当前页面上



我对我的网站进行了国际化。我用了 https://github.com/enriclluelles/route_translator

每个链接都在工作,具体取决于当前区域设置

我有 2 个这样的按钮:EN |法国

您可以单击它来更改区域设置。它的工作原理是这样的:

  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这样的大链接,我确信这是一个糟糕的设计

给你的建议将是最好的方法,不,你不会像你想象的那样使用查询参数。

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 .在应用程序控制器中,您可以执行一个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

感谢上帝给我带来解决方案!我刚刚遇到了你们同样的问题,所以这是我使用的。

<%= link_to(options = {controller: controller_name, action: action_name, locale: :en} , class: "navbar-item") do %>
    <%= image_tag "gb.svg", size: "24x24" %>
<% end %>

用于显示指向同一页面的链接,但是更改区域设置并使用图像作为链接。

经过一番研究,我找到了一种基本的方法。我最初以为这个东西已经在route_translator年实现了,但显然没有。

解决方案:

  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

我使用了类似的设置,并遇到了这个(旧)问题。马修斯的回答帮助我整理了我的想法,对我来说,解决方案很简单

<%= link_to "fr", controller: controller_name, action: action_name, locale: "fr"  %>
<小时 />

请注意,这是有效的,因为我在routes.rb中使用了"scope":

scope "(:locale)", locale: /en|fr/ do
  ...
end

这样,每个请求都会传递语言环境,并且获取它很容易

  I18n.locale = params[:locale]

我想分享给其他可能来的人。再一次,内置导轨具有用几条线路做惊人事情的能力。

快乐的鳕鱼 .

怎么样?

<%= link_to "English", current_page_params.merge(locale: :en) %>

查看更多相关信息 : https://gorails.com/episodes/rails-link-to-current-page-with-params

最新更新