Rails没有正确设置区域设置

时间:2014-03-17 09:47:19

标签: ruby-on-rails rails-i18n

我有Rails应用程序(3.2.12)并且当前在应用程序上运行国际化('en','es','it','de','fr')。

国际化正在应用内进行,除非我退出应用并进入目标网页。例如,着陆页:

http://localhost:3000/?locale=en
http://localhost:3000/?locale=es
http://localhost:3000/?locale=it
etc...

所有默认为西班牙语翻译'es'。当我检查上述每个页面的区域设置时,我发现区域设置已正确设置。所以基本上说英语'en'语言环境显示西班牙语翻译。

我还检查了YAML文件,这些都很好。

此问题与SO最接近的匹配是这个问题:Mixed locales in Rails i18n

我已经在这个SO答案中尝试了解决方案,但它们似乎对我不起作用。

以下是与国际化相关的一些相关代码。

应用程序控制器

class ApplicationController < ActionController::Base
  protect_from_forgery

  before_filter :set_locale

private

  def set_locale
    I18n.locale = params[:locale] || I18n.default_locale
    #default_url_options[:locale] = params[:locale]
    #I18n.locale = params[:locale] || 'en'
  end

  def default_url_options
    { :locale => I18n.locale }
  end
end

application.rb中

 config.i18n.default_locale = :en
 config.i18n.available_locales = ["en", "it", "de", "es", "fr"]
 I18n.config.enforce_available_locales = true

此外,我的应用程序使用Devise和Active_admin。

我知道我在这里做错了什么吗?

1 个答案:

答案 0 :(得分:1)

尝试调试set_locale方法。似乎默认情况下设置了语言环境,例如params[:locale]为nil。

def set_locale
    I18n.locale = params[:locale] || I18n.default_locale
    Rails.logger.debug "locale_params=#{params[:locale]}"
  end