代码之家  ›  专栏  ›  技术社区  ›  oma

Rails 5 i18n默认_Locale和Fallback Locale

  •  7
  • oma  · 技术社区  · 5 年前

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

    现在,如果在区域设置中找不到属性名,它将打印“”(空白)。我希望它在发生这种情况时能退回到:恩。

    Rails 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 .

    • 实验1。 删除nb.yml的全部内容,只留下hello world。 作品 :打印属性(关联记录)名称。
    • 实验2。 将我们的Nb.yml替换为正式的Rails Nb.yml: https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/nb.yml : 作品 . 我收到有用的挪威英语留言 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}"
    

    这导致了另一个问题。

    接近 B:躲起来 让你看不见服务器端。规格、日志和控制台将显示 Validation Failed: can't be blank 但它在用户界面中看起来很好。

    我发布了另一个问题: Simpleform errors without attribute name, but using attribute name in logs, console, specs

    1 回复  |  直到 5 年前
        1
  •  5
  •   Nate    5 年前

    Rails 5.2允许您设置 config.i18n.fallbacks 控制可以使用的回退区域设置。将其设置为符号数组,以控制在找不到翻译时应使用的区域设置。当设置了multiple时,它一个接一个地遍历数组,直到音译生效(或不生效)。

    在您的情况下,您需要在 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]