我有这个问题
activerecord:
notices:
messages:
success:
create: "Something was created"
models:
user:
success:
create: "Thanks for registration"
I18n.t("activerecord.notices.models.user.success.create")
# => "Thanks for registration"
I18n.t("activerecord.notices.models.book.success.create")
# => "translation missing: de, activerecord, notices, models, book, success, create"
我不知道为什么这本书模型没有得到后备按摩。我已设置config.i18n.fallbacks = true
。我正在使用Rails 3
答案 0 :(得分:96)
我通常在config / application.rb中设置
config.i18n.fallbacks =[:de, :fr, :en]
所以你可以减速后退的顺序。
但请注意某些环境/ * .rb配置会被覆盖。
答案 1 :(得分:28)
答案 2 :(得分:18)
您是否为后端启用了后备?假设它很简单(基于示例中的yml):
把它放在初始化器中:
require "i18n/backend/fallbacks"
I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)
答案 3 :(得分:16)
在rails 3+中,这在config / environments文件中设置:
# Enable locale fallbacks for I18n (makes lookups for any locale fall back to
# the I18n.default_locale when a translation can not be found)
config.i18n.fallbacks = true
答案 4 :(得分:9)
我认为处理缺少字符串的最佳方法是显示默认语言环境,而不是错误消息。
在application.rb中添加此行以回退到英语区域设置。
config.i18n.fallbacks = [:en]
如果要指定特定于语言环境的回退,可以使用以下命令:
config.i18n.fallbacks = {:de => [:de,:en], :en => [:en,:de]}
另请注意,您可以根据您的环境启用和停用回退。
因此,在开发时,显示错误可能有意义,您可以使用以下内容在environments/production.rb
中启用回退:
config.i18n.fallbacks = true
答案 5 :(得分:2)
I18n后备功能存在误解。
此功能导致当缺少翻译例外时(在这种情况下,当 I18n 找不到与"activerecord.notices.models.book.success.create"
相关的值时会发生键输入当前语言的语言环境文件)。 I18n 将在预定义的后备语言列表中查找生成缺少翻译例外的键的值,如果找到了 I18n ,则将返回该值,但如果在其他任何区域设置文件中均未找到该值,则 I18n 将返回缺少翻译例外的情况。
因此,当您定义config.i18n.fallbacks = true
时,这并不意味着当发生缺少翻译例外时,在这种情况下:
I18n.t("activerecord.models.book.success.create")
# => "translation missing: de, activerecord, notices, models, book, success, create"
I18n 将在您的语言环境文件中查找类似的键以返回其值,可能是:
I18n.t("activerecord.models.user.success.create")
# => "Thanks for registration"
会发生什么情况, I18n 将使用您的默认后备语言查找发生缺少翻译例外的特定语言。
用法的一个很好的例子是:
# using :"en-US" as a default locale:
I18n.default_locale = :"en-US"
I18n.fallbacks[:es] # => [:es, :"en-US", :en]
语言环境文件:
es:
activerecord:
notices:
messages:
success:
create: "Algo fue creado"
models:
user:
success:
create: "Gracias por registrarte"
en-US:
activerecord:
...
models:
books:
success:
create: "The model was created"
致电英语网站:
I18n.t("activerecord.models.books.success.create")
# => "The model was created"
致电西班牙语网站:
#with config.i18n.fallbacks = false
I18n.t("activerecord.models.books.success.create")
# => "translation missing: es, activerecord, models, book, success, create"
#with config.i18n.fallbacks = true
I18n.t("activerecord.models.books.success.create")
# => "The model was created"
有关更多信息,请检查:https://github.com/ruby-i18n/i18n