如何在Rails 5.2中设置后备区域设置?
现在,如果在语言环境中找不到属性名称,它将打印出“(空白)”作为属性名称。我希望在发生这种情况时回退到:en。
具体到5条?
# config/application.rb
config.load_defaults 5.0
config.i18n.default_locale = :nb
运行规格并获取:
#<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>
更新:
@Nate在下面的回答(https://stackoverflow.com/a/53453211/252799)中正确配置了后备配置
那不是问题。我了解到,问题出在我的nb.yml
中。
Det oppstod feil: Company må eksistere
。不漂亮,但是很有帮助,我想要的!两种方法
# A: SHOW attribute name
nb:
errors:
format: "%{attribute} %{message}"
# B: HIDE attribute name
nb:
errors:
format: "%{message}"
这会导致另一个问题。
方法 B:隐藏使您在服务器端视而不见。规格,日志和控制台将显示Validation Failed: can't be blank
,但在用户界面中看起来不错。
我发布了另一个问题:Simpleform errors without attribute name, but using attribute name in logs, console, specs
答案 0 :(得分:5)
Rails 5.2允许您设置config.i18n.fallbacks
来控制可以使用的后备语言环境。将其设置为符号数组,以控制未找到翻译时应使用的语言环境。设置多个时,它将逐个遍历数组,直到音译有效(或无效)为止。
在您的情况下,您需要在config/application.rb
中添加以下内容:
config.i18n.default_locale = :nb
config.i18n.fallbacks = [:en]
这样,如果未指定语言环境,它将使用:nb
语言环境(您的默认语言环境)。然后,只要翻译在任何语言环境中失败,它将尝试使用:en
语言环境作为后备。
注意:如果您的所有后备语言环境都没有针对您要翻译的键进行翻译,则仍然会出现翻译丢失错误。
要获得更完整的答案,请参阅以下示例,该示例具有多个后备。将按照指定的顺序对其进行检查:
config.i18n.default_locale = :nb
config.i18n.fallbacks = [:en, :es, :de]
答案 1 :(得分:0)
在Rails(6.0.3.1)上使用Spree(4.1.5)+ spree_i18n(3.3.2),我希望该网站使用西班牙语,并且由于缺少翻译而回落到英语。这对我有用:
# config/application.rb
config.after_initialize do
config.i18n.default_locale = :es
config.i18n.locale = :en
end
config.i18n.fallbacks = true
config.after_initialize
块是必需的,否则它将不起作用(spree_i18n会在初始化时弄乱语言环境)。实际上,由于spree_i18n sets it to true在初始化时,实际上不需要最后一行config.i18n.fallbacks
。但是无论如何,我还是把它留在那里,所以我知道发生了什么(此外,在以后的版本中,狂欢可能会停止覆盖此问题,因为在开发中,不要使用后备版本可能会很有用,这样会使丢失的翻译更加可见)。