我有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。
我知道我在这里做错了什么吗?
答案 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