如何使用rails i18n后备功能

问题描述 投票:27回答:5

我有这个问题

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

ruby-on-rails ruby-on-rails-3 internationalization rails-i18n fallback
5个回答
30
投票

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

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

更多信息here


97
投票

我通常在config / application.rb中设置

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

所以你可以减速后退的顺序。

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


18
投票

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

把它放在初始化器中:

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

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


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

10
投票

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

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

config.i18n.fallbacks = [:en]

如果要指定特定于语言环境的回退,可以使用以下命令:

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

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

config.i18n.fallbacks = true
© www.soinside.com 2019 - 2024. All rights reserved.