33

我收到来自 Rails 3 的“翻译缺失”错误消息:

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

4

6 回答 6

103

config/application.rb通常进去

    config.i18n.fallbacks = [:de, :fr, :en]

所以你可以声明回退的顺序。

但请注意在某些环境中/*.rb 配置被覆盖。

于 2011-08-30T15:33:33.143 回答
41

当给出:default选项时,如果缺少翻译,将返回其值:

I18n.t :missing, :default => 'Not here'
# => 'Not here'

更多信息在这里

于 2010-11-22T09:56:24.023 回答
18

[答案适用于 Rails 2]

您是否为后端启用了回退?假设它很简单(基于示例中的 yml):

把它放在一个初始化器中:

require "i18n/backend/fallbacks" 
I18n::Backend::Simple.send(:include, I18n::Backend::Fallbacks)

https://github.com/svenfuchs/i18n/wiki/Fallbacks

于 2010-11-26T05:53:08.880 回答
18

在 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
于 2011-10-01T17:38:12.330 回答
13

我相信处理丢失字符串的最佳方法是显示默认语言环境,而不是错误消息。

在 application.rb 中添加这一行以回退到英语语言环境。

config.i18n.fallbacks = [:en]

如果要指定特定于语言环境的后备,可以使用以下内容:

config.i18n.fallbacks = {:de => [:de,:en], :en => [:en,:de]}

另外,请注意,您可以根据您的环境启用和禁用回退。因此,在开发过程中,显示​​错误可能是有意义的,但您可以environments/production.rb使用以下命令启用回退:

config.i18n.fallbacks = true
于 2014-10-12T12:12:06.013 回答
6

对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

于 2020-03-19T17:06:58.077 回答