我在Ruby on Rails 4中有一个多语言应用程序。为此,我使用以下域:
我希望能够链接到另一个相应语言环境中的相应路径。例如,如果我在www.exempel.se/denna-bloggpost,我希望能够轻松地链接到(英语/西班牙语/法语)到例如www.example.com/this-here-blog-post和es.example.com/este-posto-de-bloggo(对不起,不会说西班牙语:))。
我理解这是通过link_to 'Spanish', locale => :es
完成的,但这会给我一个不是我想要的网址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 %>
答案 0 :(得分:1)
为了创建这样的动态映射,您必须在应用程序配置中定义类似的内容:
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
答案 1 :(得分:1)
您可以使用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 %>
答案 2 :(得分:0)
这个问题已被多次回答。我认为最简单的方法是
<%= link_to "ру", request.params.merge( locale: 'ru' ) %>