【问题标题】:Why my translation key is ignored为什么我的翻译键被忽略
【发布时间】:2025-12-10 08:35:02
【问题描述】:

我正在使用带有 spree 3.2.0.rc3 的 rails 5.0.2。我的翻译文件中有这个键:

ru:
  spree:
    shipment_states:
      canceled: 'отменен'
      canceled_test: 'test'

在开发过程中,我发现 I18n::MissingTranslationData 异常并显示消息:'translation missing: ru.spree.shipment_states.canceled'。我可以从异常页面上的控制台看到,我的翻译实际上已加载(添加了 'canceled_test' 键),但由于某种原因,'canceled' 键被忽略:

>> (I18n.t '.')[:spree][:shipment_states]
=> {:backorder=>"задерживается", :canceled=>nil, :partial=>"частично", :pending=>"ожидает", :ready=>"готов", :shipped=>"отправлен", :canceled_test=>"test"}

为什么?我该如何调试?

【问题讨论】:

    标签: ruby-on-rails internationalization spree rails-i18n


    【解决方案1】:

    检查您的 application.rb 是否存在一行:

    config.i18n.default_locale = :ru
    

    然后尝试将所有状态添加到“shipment_states”。就我而言,获得了以下代码:

    ru:
      spree:
        shipment_states:
          backorder: 'Задерживается'
          canceled: 'Отменен'
          partial: 'Доставлен частично'
          pending: 'Ожидает подтверждения'
          ready: 'Готов к отправке'
          shipped: 'Отправлен'
    

    【讨论】:

    • 我在一个单独的初始化程序中设置了默认语言环境,正如 application.rb 中的注释所推荐的那样。我确定我的翻译文件已加载(我添加了一个新密钥 'canceled_test',它仅存在于 :ru 语言环境中,我可以在 (I18n.t '.')[:spree] 的输出中看到它[:shipment_states]。似乎有些东西用 nil 覆盖了“已取消”的键值:\
    • 我不知道为什么会发生这个错误,而且你不是唯一一个有类似问题的人 (*.com/questions/41540081/…),但我只是从官方存储库文件:github.com/spree/spree/blob/master/core/config/locales/en.yml 并进行更改。当我只更改“取消”部分时,我遇到了和你一样的错误。
    • 好的,我去看看
    最近更新 更多