提取 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,不符合我的要求:
- LocaleApp - 完全搞砸了我的语言环境:(
- i18n-missing_translations 没有显示默认语言缺少的翻译键
附加信息
我们的密钥是英语,我们的默认语言是 :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-tasks
。 https://github.com/glebm/i18n-tasks
您可以列出未使用的翻译、删除它们或使用 google 翻译自动翻译它们。 gem 甚至支持规范化,并且可以 select 仅使用您想要使用的特定语言。
我建议将 gem 'i18n-tasks'
添加到 :development 组。
我有一个应用程序需要国际化。
目前几乎所有字符串都使用 t('.whatever')
.
我想确保所有密钥在我们发布之前都被翻译成某种语言。在 development/test 环境中,我可以启用 config.action_view.raise_on_missing_translations = true
。
但是某些部分(例如 devise
和其他一些使用 gem 生成的部分未包含在测试中,并且没有受让人在发布之前真正测试所有页面。
我更喜欢一个解决方案,它提取所有键并将它们添加到 locales/xxx.yml
,最好使用一些逻辑来排序和添加丢失的键。
我看了下面的gems/projects,不符合我的要求:
- LocaleApp - 完全搞砸了我的语言环境:(
- i18n-missing_translations 没有显示默认语言缺少的翻译键
附加信息
我们的密钥是英语,我们的默认语言是 :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-tasks
。 https://github.com/glebm/i18n-tasks
您可以列出未使用的翻译、删除它们或使用 google 翻译自动翻译它们。 gem 甚至支持规范化,并且可以 select 仅使用您想要使用的特定语言。
我建议将 gem 'i18n-tasks'
添加到 :development 组。