我正在为新加坡、马来西亚、台湾和中国的客户建立一个Rails 4网站。
一个说中文的马来西亚人的区域代码是“zh-MY”。
我想保留一个基本的“zh-CN”(简体中文)语言环境文件,并让“zh-MY”回退到“zh-CN”。
仅有“zh”是不正确的,因为台湾使用的是“zh-TW”(繁体中文),与“zh-CN”存在很大的差异。
所以这里是我的“config/application.rb”文件,按照Rails指南的要求。
一个说中文的马来西亚人的区域代码是“zh-MY”。
我想保留一个基本的“zh-CN”(简体中文)语言环境文件,并让“zh-MY”回退到“zh-CN”。
仅有“zh”是不正确的,因为台湾使用的是“zh-TW”(繁体中文),与“zh-CN”存在很大的差异。
所以这里是我的“config/application.rb”文件,按照Rails指南的要求。
require File.expand_path('../boot', __FILE__)
require 'rails/all'
require "i18n/backend/fallbacks"
module MyAwesomeApp
class Application < Rails::Application
I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)
# all translations from config/locales/**/*.rb,yml are auto loaded.
config.i18n.load_path += Dir[Rails.root.join('config', 'locales', '**', '*.{rb,yml}')]
# The default locale is :en
config.i18n.default_locale = :en
# See http://guides.rubyonrails.org/i18n.html#localized-views for a discussion of
# how language codes fall-back.
config.i18n.available_locales = [:en, :'zh-CN', :'zh-TW', :'en-SG', :'en-MY', :'zh-MY']
I18n.fallbacks.map(:'zh-MY' => :'zh-CN')
end
end
但这根本不起作用。
当我实际将语言环境设置为 :zh-MY
时,它并没有回退到:zh-CN
,而是回退到了:en
我错过了什么?
更新:
如果我运行 puts "I18n.fallbacks #{I18n.fallbacks}"
,它会输出 I18n.fallbacks {}
。显然,I18n.fallbacks.map
失败了。
更新:
根据评论中的建议,在检查完I18n.fallbacks
之后,我立即查看了 I18n.fallbacks[:'zh-MY']
,它返回了 [:"zh-MY", :zh, :"zh-CN", :en]
更新:
在我的application controller
中添加了一个 binding.pry
,检查了语言环境等,并观察到以下信息:
[1] pry(#<ServicesController>)> I18n.locale
=> :"zh-MY"
[2] pry(#<ServicesController>)> I18n.fallbacks
=> {:en=>[:en], :"zh-MY"=>[:"zh-MY", :zh, :en]}
在 Rails 应用程序启动和控制器的 set_locale
方法被调用之间,I18n.fallbacks
被重置为默认值。
available_locales
进行设置。 - Dave SagI18n.fallbacks[:'zh-MY']
中得到什么? - prusswanI18n.fallbacks
是{}
,但I18n.fallbacks[:'zh-MY']
返回[:"zh-MY", :zh, :"zh-CN", :en]
。 - Dave Sag