Link 到其他语言环境中的相应路径 (rails)

Link to corresponding path in other locale (rails)

我在 Rails 4 上的 Ruby 中有一个多语言应用程序。为此,我使用以下域:

我希望能够link到另一个相应语言环境中的相应路径。例如,如果我在 www.exempel.se/denna-bloggpost,我希望能够轻松地 link 到 (English/Spanish/French) 到例如www.example.com/this-here-blog-post 和 es.example.com/este-posto-de-bloggo(抱歉,不会说西班牙语 :))。

我知道这是用 link_to 'Spanish', locale => :es 完成的,但这给了我 url www.exempel.se/denna-bloggpost?locale=es 这不是我想要的。我希望访问 es.example.com/esto-posto-de-bloggo

似乎 default_url_options 与此有关,但我无法使其工作。

我该如何解决这个问题?

编辑 (2017-03-30):我还需要这个部分的 hreflang 解决方案。

我正在使用 route_translator gem.

我已经看到了几个解决方案,但它们都包含 ?locale=en 的解决方案,或者只是为了简化(比如,只适用于一个控制器)。我所希望的是一个可以做这样的事情的解决方案:

<% I18n.available_locales.each |locale| do %>
 <% I18n.t(this route e.g. /denna-bloggpost) #=> /este-posto-de-bloggo, /this-blog-post, /le-post-du-blog %>
<% end %>

为了创建这样的动态映射,您可能必须在应用程序配置中定义如下内容:

APP_CONFIG = {
  # ...
  base_urls: {
    se: 'exempel.se',
    en: 'example.com',
    fr: 'fr.example.com',
    es: 'es.example.com'
  }
  # ...
}

(当然不一定非得是这种格式,这只是一个例子。)

在语言环境切换菜单中,您可以这样定义您的链接:

link_to("French", "#{APP_CONFIG[:base_urls][:fr]}#{request.env['PATH_INFO']}")

为了在您的应用程序中实际 设置 语言环境,您可以在 ApplicationController:

中放置类似这样的内容
class ApplicationController
  before_action :set_locale

  def set_locale
    I18n.locale = APP_CONFIG[:base_urls].key(request.host) || I18n.default_locale
  end
end

有关详细信息,请参阅此处:http://guides.rubyonrails.org/i18n.html#managing-the-locale-across-requests

您可以使用 route_translator 为您生成的特定于区域设置的路由。 运行 rake routes 看看这些是什么。然后:

# Create links for every other locale
<% (I18n.available_locales - I18n.locale).each |locale| do %>
  # Example URL helper here - replace with your own!
  <%= Rails.application.routes.url_helpers.send("posts_#{locale}_url",
 'denna-bloggpost') %>
<% end %>

这个问题已被多次以多种方式解决。然而我认为最简单的方法是

<%= link_to "ру", request.params.merge( locale: 'ru' ) %>