繁体   English   中英

Rails 4 i18n,如何翻译子域用于语言环境的路由

[英]Rails 4 i18n, how to translate routes where subdomain is used for the locale

我正在使用子域来确定Rails 4网站中的区域设置。 我有一个完全按照我想要的方式使用区域设置切换器,但现在我需要翻译路线,我不确定最好的方法。

我查看了https://github.com/kwi/i18n_routing i18n路由gem,但这不适用于子域,它似乎通过添加/ locale来改变路径,这不是我需要的。

其他宝石似乎与Rails 4过时了。

编辑

基本上我希望能够使用相同的视图助手,但是更改URL以使用所选子域反映的任何语言。 这只是路线翻译。

我有语言特定的模板,我可以生成语言的导航模板,但我真的不想担心改变erb路径和url erb标签

结束编辑

来自routes.rb的示例

scope module: 'countries', shallow: true do

  get 'south_american', to: 'south_america#index', as: :south_america
  scope module: 'south_america' do
    get 'south-america-weather', to: 'weather#index', as: :south_america_weather
    get 'south-america-gps-maps', to: 'gps#index', as: :south_america_gps
    get 'south-america-accommodation', to: 'hotels#index', as: :south_america_hotels
    get 'south-america-vacations', to: 'vacations#index', as: :south_america_vacations
    get 'south-america-facts', to: 'facts#index', as: :south_america_facts
  end

以south_america_hotels_path为例,将生成一个url

南美 - 住宿

这很好,但我怎么翻译这个,以便当我在西班牙子域名south_america_hotels_path时将生成以下网址

酒店预订烯sudamerica

UPDATE

另外,如果一个url而不仅仅是一个路径,这将如何生成south_america_hotels_url

en.some_site /南美,住宿

当我在西班牙的子域上时,我会得到

es.some_site /酒店预订烯sudamerica

对于涉及的不同语言环境等等。

我很乐意使用yml文件进行url的翻译或在routes.rb文件中定义其他路由,或者是一个选项,但我更喜欢在routes.rb中定义url,但我无法找到提供相同语言特定URL的方法:作为基于子域的路径/ url选项。

针对先前的答复进行更新和进一步澄清。

更改网址不是一个选项,他们需要匹配现有的网址。 我只需要知道如何从视图助手的角度转换它们,而不必更改视图助手。

编辑:

这个宝石是我推荐的方法。 支持多种语言而无需重新加载路由(我的例子没有)。 你必须改变很少的东西,但它比下面的代码更加一致。 路线翻译

原始答案(不工作):

这对我有用,你可以尝试一下,在你的路线中,例如你可以把:

 AppName::Application.routes.draw do get "/#{I18n.t("index")}", :to => "pages#index", :as => "index" get "/#{I18n.t("contact")}", :to => "pages#contact", :as => "contact" end 

这将在您运行应用程序时获取默认语言环境中的路由,但是在运行时,当您更改语言环境时,您需要重新绘制路由以获取新语言环境的路由。

 I18n.locale = :es #different locale AppName::Application.reload_routes! 

假设你的default_locale是:en ,这个例子将采用以下的第一个路由:

 en: index: "index-in-english" contact: "contact-in-english" 

当应用程序重新加载路由时,它将从您的新语言环境中获取翻译,在此示例中

 es: index: "index-in-spanish" contact: "contact-in-spanish" 

通过这种方式,它将呈现页面#index和页面#contact,它只会改变路径,您不必触摸代码。 希望这对你有所帮助

根据我的经验,域名不应该是决定语言环境的唯一因素。 如果你只是将当前的语言环境放入一个cookie中,那么用户可以选择最终!

现在转到你问题的翻译部分。 我认为你应该改变你使用路由的方式。

如果您将国家视为资源,将行动视为不同的部分,您将使您的生活更轻松。 模型to_param方法可以帮助您:

resource :country do
  get :weather, on: :member
  ...
end

这将导致像south-america/weather这样的网址,但从我的角度来看,这在可读性和搜索引擎优化方面甚至更好。 谷歌曾经很喜欢路径。

对于路径的不同翻译,您可以遍历域并为每个段提供翻译: http//guides.rubyonrails.org/routing.html#translated-paths

要在Rails 4+应用程序中翻译路线,请查看route_translator gem。 它允许转换路由并提供许多配置选项,例如向生成的路径添加区域设置部分,或支持基于子域的应用程序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM