区域设置未在Application Controller中设置

时间:2014-04-19 02:05:02

标签: ruby-on-rails ruby-on-rails-4 internationalization rails-i18n i18n-gem

我花了最后几个小时尝试一切可能使这项工作,谷歌搜索,重新设计,测试等 - 但不知何故不能使它工作。

好吧,我想设置I18n.locale - 相当简单。

基本上我实现了指南中的内容:

http://guides.rubyonrails.org/i18n.html

Application_controller.rb

before_action :set_locale

def set_locale
  I18n.locale = params[:locale] || I18n.default_locale
end

事实上,我看起来像这样:

class ApplicationController < ActionController::Base
   logger.info "Point A..."
   before_action :set_locale

def set_locale
  logger.info "Point B..."
  I18n.locale = extract_locale_from_accept_language_header
end

 private
    def extract_locale_from_accept_language_header
        ....

这个问题是在我第一次访问页面之前设置语言环境之前设置了语言环境。如果尚未设置语言环境,我想首先阅读用户的浏览器设置。使用户有机会访问其本地化站点。如果他们随后更改了语言环境(更改语言 - 罚款,则设置语言环境,这是他们使用的内容,直到他们决定再次切换)。

我在上面的代码中放了两行,这是输出:

Point A...
Processing by StaticPagesController#home as HTML
  Parameters: {"locale"=>"en"}
Point B...

我尝试了以下内容: - 删除了application.rb中的默认语言环境:#config.i18n.default_locale =:en - 禁用所有可能干扰的宝石(每次重启服务器)

任何帮助将不胜感激。谢谢,G

1 个答案:

答案 0 :(得分:0)

你能试试看看这对你有用吗?

def set_locale 
  @locale = extract_locale_from_accept_language_header
  I18n.locale = @locale 
end

更新:

经过大量评论和粘贴日志之后,看起来您正在通过路线获取区域设置。这就是您在日志区域设置中看到的原因:en。但您实际想要做的是不同的,根据标题而不是网址设置区域设置。从路径文件中删除区域设置引用,看看它是否适合您。