Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 未在应用程序控制器中设置区域设置_Ruby On Rails_Ruby On Rails 4_Internationalization_Rails I18n_I18n Gem - Fatal编程技术网

Ruby on rails 未在应用程序控制器中设置区域设置

Ruby 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

在过去的几个小时里,我一直在尝试一切可能的方法,谷歌搜索、重新设计、测试等等,但不知怎么的,它还是无法工作

好的,我想设置I18n.locale——相当简单

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

应用程序\u 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
        ....
我尝试了以下方法: -已删除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