0

在过去的几个小时里,我一直在尽一切可能使这项工作,谷歌搜索,重新设计,测试等 - 但不知何故无法让它发挥作用。

好的,我想设置 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 - 禁用了所有可能干扰的 gem(每次都重新启动服务器)

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

4

1 回答 1

0

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

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

更新:

经过大量评论和您粘贴的日志后,看起来您正在通过路由获取语言环境。这就是您在日志语言环境中看到的原因: en 。但是您真正想要做的是不同的,根据标头而不是 url 设置语言环境。从路由文件中删除语言环境引用,看看是否适合您。

于 2014-04-19T02:16:38.963 回答