Ruby on Rails域语言环境

时间:2013-10-15 11:03:38

标签: ruby-on-rails rails-i18n

我有一个包含2种语言的网站。我想为每个语言环境创建一个子域。例如: en.site.com和fr.site.com。
我用Google搜索,但没有运气。我只找到了从查询中提取语言环境名称的解决方案,例如:site.com/en/post/1
我怎么能实现这样的呢?

2 个答案:

答案 0 :(得分:1)

您可以在导轨指南中找到一个示例:http://guides.rubyonrails.org/i18n.html#setting-the-locale-from-the-domain-name

关于域名,但您可以很容易地根据您的需求进行调整。

请注意,子域名会为您的应用带来很多复杂性。 cookies,javascript和ssl对域敏感。确保使用子域与路径是值得的。

答案 1 :(得分:1)

我找到了一个简单的示例,您可以在中等水平轻松地进行操作: https://medium.com/unexpected-token/making-your-website-multi-regional-using-top-level-domains-cdbbdb951b65

该想法是在语言环境和主机之间定义清晰的一对一映射

HOSTS_MAPPING = { 
   'en' => 'en.example.com',
   'fr' => 'fr.example.com'
 }

然后在ApplicationController

中使用新的映射
class ApplicationController < ActionController::Base
  before_action :set_locale

  def set_locale
    I18n.locale = HOSTS_MAPPING.invert[request.host] || I18n.default_locale
  end
end

据说您的主机en.example.com将使用语言环境en