Rails 5 I18n default_locale和fallback locale

oma*_*oma 7 rails-i18n ruby-on-rails-5

如何在Rails 5.2中设置回退区域设置?

现在,如果在语言环境中找不到属性名称,则会打印''(空白).我希望它能够回归:当发生这种情况时.

Rails 5具体?

# config/application.rb 
config.load_defaults 5.0
config.i18n.default_locale = :nb
Run Code Online (Sandbox Code Playgroud)

运行规格并得到:

#<ActiveRecord::RecordInvalid: Det oppstod en feil: er allerede i bruk>
see the missing part here:
#<ActiveRecord::RecordInvalid: Det oppstod en feil: [MISSING RECORD NAME] er allerede i bruk>

# switch to 
# config.i18n.default_locale = :en
#<ActiveRecord::RecordInvalid: Validation failed: Report date has already been taken> 
Run Code Online (Sandbox Code Playgroud)

更新:

@Nate在下面的答案中得到了回退配置正确(/sf/answers/3741724801/)

但这不是问题.我学到的问题出在我的身上nb.yml.

  • 实验1. 删除nb.yml的全部内容,只留下hello world.Works:它打印属性(关联记录)名称.
  • 实验2. 用官方Rails替换我们的nb.yml nb.yml:https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/nb.yml: Works.我收到了有用的挪威语 - 英语信息Det oppstod feil: Company må eksistere.不漂亮,但很有帮助,我想要的!
  • 实验3.证明.nb.yml再现了这个问题.

两种方法

# A: SHOW attribute name
nb: 
  errors:
    format: "%{attribute} %{message}"

# B: HIDE attribute name
nb:
  errors:
    format: "%{message}"
Run Code Online (Sandbox Code Playgroud)

这导致了另一个问题.

方法B:HIDE让你盲目服务器.规格,日志和控制台将显示,Validation Failed: can't be blank但在UI中看起来不错.

我发布了另一个Q:没有属性名称的Simpleform错误,但在日志,控制台,规范中使用了属性名称

Nat*_*ate 5

Rails 5.2允许您设置config.i18n.fallbacks控制能够使用哪些回退区域设置.将其设置为符号数组,以控制在未找到转换时应使用的语言环境.当设置了多个时,它将逐个遍历数组,直到音译有效(或没有).

在您的情况下,您需要以下内容config/application.rb:

config.i18n.default_locale = :nb
config.i18n.fallbacks = [:en]
Run Code Online (Sandbox Code Playgroud)

这样,如果未指定语言环境,则使用:nb语言环境(您的默认语言环境).然后,只要翻译在任何语言环境中失败,它都会尝试将:en语言环境作为后备.

注意:如果您的后备区域设置都没有您要翻译的密钥的翻译,那么您仍然会收到翻译缺失错误.

有关更完整的答案,这是一个包含多个回退的示例.他们将按照指定的顺序进行检查:

config.i18n.default_locale = :nb
config.i18n.fallbacks = [:en, :es, :de]
Run Code Online (Sandbox Code Playgroud)