【问题标题】:Extract all untranslated keys in a Rails application提取 Rails 应用程序中所有未翻译的键
【发布时间】:2016-07-07 00:28:00
【问题描述】:

我有一个需要国际化的应用程序。 目前几乎所有的字符串都使用t('.whatever')分配给翻译键。

我想确保在发布之前将所有密钥翻译成某种语言。在开发/测试环境中我可以启用config.action_view.raise_on_missing_translations = true

但是像devise 和其他一些使用gem 生成的部分没有包含在测试中,并且没有被授权者在发布之前对所有页面进行测试。

我更喜欢一种解决方案,它提取所有键并将它们添加到locales/xxx.yml,最好使用一些逻辑来排序和添加丢失的键。

我查看了以下不符合我要求的宝石/项目:

其他信息

我们的密钥是英文,我们的默认语言是:de,但我们需要将所有内容翻译成[:de, :en, :fr, :it]

【问题讨论】:

  • 你看过I18n-tasks吗?您可以使用他们的 RSpec 测试来确保在发布之前将所有密钥翻译成您的所有语言。

标签: ruby-on-rails ruby-on-rails-4 internationalization


【解决方案1】:

您也可以使用yaml-compare(我制作的工具)找到丢失的密钥。

你可以在https://github.com/dorianmariefr/yaml-compare找到它

然后将其用作:

yaml-compare config/locales/de.yml config.locales/en.yml de en

【讨论】:

    【解决方案2】:

    我推荐使用 gem i18n-taskshttps://github.com/glebm/i18n-tasks

    您可以列出未使用的翻译、删除它们或使用谷歌翻译自动翻译它们。这个 gem 甚至支持规范化,并且可以只选择您想要使用的特定语言。

    我建议将gem 'i18n-tasks'添加到:开发组。

    【讨论】:

      【解决方案3】:

      下面是我的做法:

      首先,确定参考/完整的语言环境,假设它是:de

      然后启动 rails 控制台(或创建 rake 任务),并按如下方式初始化 I18n 后端:

      I18n.backend.send(:init_translations)

      I18n.backend.send(:translations)

      让您可以访问所有语言环境的所有翻译,例如

      {
        en: {
          hello: 'Hello World'
        },
        de: {
          hello: 'Hallo Welt'
        }
      }
      

      现在选择您的参考语言环境,即I18n.backend.send(:translations)[:de],然后遍历:de 哈希中的所有翻译键,并使用I18n.backend.exists?(locale, translation_key)检查它们是否存在于其他语言环境中

      例子:

      I18n.backend.exists?(:en, [:errors, :messages, :improbable_phone]) I18n.backend.exists?(:en, 'errors.messages.improbable_phone')

      如果密钥不存在,我会使用“## TRANSLATION MISSING##”之类的存根将其添加到哈希中,最后将哈希作为 YAML 文件写入磁盘。

      【讨论】:

      • FWIW: send 在最近的 Rails 版本中不再需要。您可以拨打translations。作为奖励,如果您使用do_init: true 调用翻译。不需要额外的init_translations 电话。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多