【问题标题】:Locale not set in Application Controller应用程序控制器中未设置区域设置
【发布时间】:2014-04-19 02:05:02
【问题描述】:

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

好的,我想设置 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

【问题讨论】:

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


    【解决方案1】:

    您能试试看这是否适合您吗?

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

    更新:

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

    【讨论】:

    • 您好,rodeleon,感谢您的回复。我试过了,但它并没有改变任何东西。问题是在我在 set_locale 中设置之前,语言环境是在其他地方设置的。这意味着:如果用户没有使用浏览器语言首选项访问该站点,但可以说 de - 他/她将看到主页英语而不是德语。一旦他/她点击一个链接,它将使用我之前在 set_locale 中设置的语言环境。
    • 这只是延迟了一步......我想设置语言环境 - 我不希望更早设置语言环境。根据我正在做的文档。它只是不这样做。
    • 您能否更新答案并粘贴 extract_locale_from_accept_language_header 的代码?你确定你没有设置错误的语言环境吗?
    • 语言环境设置正确 - 这就是为什么一旦点击页面上的链接就会切换。如果您查看日志输出 - 在 POINT A 和 POINT B 之间设置区域设置 - 不是由我设置的。这就是问题所在。它在其他地方设置 - 然后我设置它,但此时为时已晚。一旦用户点击一个链接 - 使用我定义的语言环境。
    • 否,在您粘贴的日志中,您看到 Parameters: {"locale"=>"en"} 并不意味着语言环境设置为英文,而是请求作为参数发送语言环境:en。这可能是因为正在传递 url(mysite.com/?locale=en) 或者您在视图中有将语言环境设置为英语的内容。
    猜你喜欢
    • 1970-01-01
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-22
    • 2016-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多