提取 Rails 应用程序中的所有未翻译密钥

Extract all untranslated keys in a Rails application

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

分配给翻译键

我想确保所有密钥在我们发布之前都被翻译成某种语言。在 development/test 环境中,我可以启用 config.action_view.raise_on_missing_translations = true

但是某些部分(例如 devise 和其他一些使用 gem 生成的部分未包含在测试中,并且没有受让人在发布之前真正测试所有页面。

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

我看了下面的gems/projects,不符合我的要求:

附加信息

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

以下是我的处理方式:

首先,确定 reference/complete 是哪个语言环境,假设是 :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)[=19 检查它们是否存在于其他语言环境中=]

示例:

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

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

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

您可以在 https://github.com/dorianmariefr/yaml-compare

找到它

然后将其用作:

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

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

您可以列出未使用的翻译、删除它们或使用 google 翻译自动翻译它们。 gem 甚至支持规范化,并且可以 select 仅使用您想要使用的特定语言。

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