RAILS: 由于缺少 I18n 翻译导致未定义的方法 `map'
RAILS: undefined method `map' caused by missing I18n translation
我将 RAILS 4 new.html.erb
中的 datetime
字段的格式从 :string
更改为 datetime
并导致如下错误:
undefined method `map' for "translation missing: zh-CN.date.order":String
导致上述错误的视图代码为:
<%= f.input :start_time, :label => t("Start Time"), required: true, :as => :datetime, :ampm => true, :minute_step => 10, :start_year => Date.today.year - 1, :end_year => Date.today.year + 1, :format => 'YYYY/MM/DD/HH/MM', :use_month_numbers => true, :include_blank => true %>
爆炸的RAILS
源代码在actionview/helpers/date_helper.rb
:
def translated_date_order
date_order = I18n.translate(:'date.order', :locale => @options[:locale], :default => [])
date_order = date_order.map { |element| element.to_sym } #<<<<<<===blows up
forbidden_elements = date_order - [:year, :month, :day]
if forbidden_elements.any?
raise StandardError,
"#{@options[:locale]}.date.order only accepts :year, :month and :day"
end
date_order
end
我在 /config/locale/
下有一个文件 zh-CN.yml
,它正在为除这个以外的其他文件提供翻译。
zh-CN.yml
的更新部分:
zh-CN:
#maint_recordx
Mfg Batches : '订单批次一览'
New Batch : '新批次'
Update Batch : '更新批次'
Edit Batch : '更新批次'
...........
在被同样的错误困扰后,我发现 Rails 设置了以下键:
:'date.order'
到值:
["year", "month", "day"]
默认 :en
语言环境
您可以通过 运行 在 rails 控制台中为默认 rails 安装执行以下代码片段来确认这一点:
date_order = I18n.translate(:'date.order', :locale => :en, :default => [])
请注意,我刚刚将 @options[:locale]
切换为默认 :en
值
您引用的 rails 帮助程序需要一个包含 date_order 值的数组,如果得不到数组就会崩溃。
在我的例子中,我不正确地配置了 I18n::Backend::ActiveRecord gem,因此它干扰了 I18n 返回的值。您可能遇到类似的问题,导致无法返回 :'date.order'
键的正确值。
编辑:
为了解决这个问题,您可能只需要安装 gem 'rails-i18n'
。它将处理为支持的语言环境返回正确的日期格式。在我的例子中,我的 es.yml 语言环境文件中有一个自定义配置返回了不正确的日期格式。
宾果!!!您只需将缺少的关键翻译添加到您的本地翻译中。
我通过添加
解决了它
en:
date:
order: ["day", "month", "year"]
至
config/locales/en.yml
我将 RAILS 4 new.html.erb
中的 datetime
字段的格式从 :string
更改为 datetime
并导致如下错误:
undefined method `map' for "translation missing: zh-CN.date.order":String
导致上述错误的视图代码为:
<%= f.input :start_time, :label => t("Start Time"), required: true, :as => :datetime, :ampm => true, :minute_step => 10, :start_year => Date.today.year - 1, :end_year => Date.today.year + 1, :format => 'YYYY/MM/DD/HH/MM', :use_month_numbers => true, :include_blank => true %>
爆炸的RAILS
源代码在actionview/helpers/date_helper.rb
:
def translated_date_order
date_order = I18n.translate(:'date.order', :locale => @options[:locale], :default => [])
date_order = date_order.map { |element| element.to_sym } #<<<<<<===blows up
forbidden_elements = date_order - [:year, :month, :day]
if forbidden_elements.any?
raise StandardError,
"#{@options[:locale]}.date.order only accepts :year, :month and :day"
end
date_order
end
我在 /config/locale/
下有一个文件 zh-CN.yml
,它正在为除这个以外的其他文件提供翻译。
zh-CN.yml
的更新部分:
zh-CN:
#maint_recordx
Mfg Batches : '订单批次一览'
New Batch : '新批次'
Update Batch : '更新批次'
Edit Batch : '更新批次'
...........
在被同样的错误困扰后,我发现 Rails 设置了以下键:
:'date.order'
到值:
["year", "month", "day"]
默认 :en
语言环境
您可以通过 运行 在 rails 控制台中为默认 rails 安装执行以下代码片段来确认这一点:
date_order = I18n.translate(:'date.order', :locale => :en, :default => [])
请注意,我刚刚将 @options[:locale]
切换为默认 :en
值
您引用的 rails 帮助程序需要一个包含 date_order 值的数组,如果得不到数组就会崩溃。
在我的例子中,我不正确地配置了 I18n::Backend::ActiveRecord gem,因此它干扰了 I18n 返回的值。您可能遇到类似的问题,导致无法返回 :'date.order'
键的正确值。
编辑:
为了解决这个问题,您可能只需要安装 gem 'rails-i18n'
。它将处理为支持的语言环境返回正确的日期格式。在我的例子中,我的 es.yml 语言环境文件中有一个自定义配置返回了不正确的日期格式。
宾果!!!您只需将缺少的关键翻译添加到您的本地翻译中。 我通过添加
解决了它en:
date:
order: ["day", "month", "year"]
至
config/locales/en.yml