对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