Ruby on rails 未在应用程序控制器中设置区域设置
在过去的几个小时里,我一直在尝试一切可能的方法,谷歌搜索、重新设计、测试等等,但不知怎么的,它还是无法工作 好的,我想设置I18n.locale——相当简单 基本上我实现了指南上写的内容: 应用程序\u controller.rbRuby on rails 未在应用程序控制器中设置区域设置,ruby-on-rails,ruby-on-rails-4,internationalization,rails-i18n,i18n-gem,Ruby On Rails,Ruby On Rails 4,Internationalization,Rails I18n,I18n Gem,在过去的几个小时里,我一直在尝试一切可能的方法,谷歌搜索、重新设计、测试等等,但不知怎么的,它还是无法工作 好的,我想设置I18n.locale——相当简单 基本上我实现了指南上写的内容: 应用程序\u controller.rb before_action :set_locale def set_locale I18n.locale = params[:locale] || I18n.default_locale end 事实上,我的看起来是这样的: class Applicatio
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
....
我尝试了以下方法:
-已删除application.rb中的默认区域设置:#config.i18n.default_locale=:en
-禁用所有可能干扰的gem(每次重新启动服务器)
任何帮助都将不胜感激。谢谢,G你能试试看这是否适合你吗
def set_locale
@locale = extract_locale_from_accept_language_header
I18n.locale = @locale
end
更新:
在粘贴了大量注释和日志之后,您似乎通过路由获得了区域设置。这就是为什么您会在日志区域设置中看到:en。但实际需要做的是不同的,根据标题而不是url设置语言环境。从routes文件中删除区域设置引用,看看这是否适合您。Hi rodeleon,谢谢您的回复。我试过了,但没什么改变。问题是,在我在set_locale中设置区域设置之前,该区域设置已在其他位置设置。。。。这意味着:如果用户不使用浏览器语言首选项en访问网站,但让我们假设de-他/她将看到英语而不是德语的主页。一旦他/她点击一个链接,它就会使用我之前在set_locale中设置的区域设置。它只是延迟了一步。。。我想设置区域设置-我不想让区域设置提前设置。根据文件,我就是这么做的。你能更新答案并粘贴从接受语言标题中提取语言的代码吗?您确定没有设置错误的区域设置吗?区域设置设置正确-这就是为什么单击页面上的链接后它会切换。如果您查看日志输出-在点A和点B之间,区域设置是设置的-不是由我设置的。这就是问题所在。它设置在其他地方-然后我设置它,但在这一点上已经太晚了。用户单击链接后,将使用我定义的区域设置。否,在您看到参数时粘贴的日志中:{“locale”=>“en”}并不意味着区域设置设置为英语,而是请求作为参数locale:en发送。这可能是因为您正在传递url(mysite.com/?locale=en),或者您的视图中存在将语言环境设置为英语的内容。
def set_locale
@locale = extract_locale_from_accept_language_header
I18n.locale = @locale
end