如何识别未使用的i18n密钥?

我正在研究现有的Rails应用程序,并使用本地化文件en.yml来保存应用程序的大部分文本。 目前,我们没有本地化为任何其他语言,因此只有一个文件,但我们将translate('some.key')放入我们的视图这一事实意味着添加另一种语言将如此简单添加另一个文件 – 比方说, sp.yml

问题是, en.yml已经发展到我怀疑所有密钥都被使用的程度。

除了使用每个键进行translate调用的git grepping之外,是否有一种快速方法来识别应用程序未明确调用的本地化键?

看看这篇关于“国际化您的应用程序的关键问题”的文章 。 您感兴趣的段落是:“ 摆脱未使用的翻译 ”。

具体来说,它建议查看源代码并记录生产应用程序中使用的翻译键,如下所示:

 module I18n module Registry protected def lookup(locale, key, scope = [], options = {}) @log ||= Logger.new(File.join(Rails.root, 'log', 'i18n_registry.log')) @log.info key super end end end I18n::Backend::Simple.send :include, I18n::Registry 

希望有所帮助。

I18n-tasks gem

我刚刚听说过这个gem,其中包括一个显示“可能未使用的翻译”的任务。

https://github.com/glebm/i18n-tasks

获取积极使用的,然后删除其余的。 这就是我使用的。

实际上我将它们设置为active=0但这可能不适合你

更新
结果我不清楚。

有两种方法可以查看:源文件或翻译文件。 如果从源文件中查看,则需要识别正在使用的所有字符串,最后删除所有未使用的字符串。

如果从翻译文件中查看,则需要查看源文件并确定它们是否仍在使用,如问题中所述。

别无他法。

自从我第一次遇到这个问题以来已经很多年了,因为我遇到了同样的问题。 问题并没有变得越来越小,我比以往任何时候都更加沮丧。

这是一个实验项目,它挂钩到翻译查找并增加Redis中的翻译密钥计数器:

https://github.com/paladinsoftware/i18n-counter

这个想法是你可以提取统计数据并进行比较。 (WIP暂时,我很乐意帮助你)

您可能会问:“这不会减慢查找速度吗?”

当然你是对的,但开销几乎不可察觉,看看这个基准。

 require 'benchmark' n = 100000 Benchmark.bm do |x| x.report { ENV['ENABLE_I18N_COUNTER'] = 'true'; n.times do ; I18n.translate('application.contract_not_available.header'); end } x.report { ENV['ENABLE_I18N_COUNTER'] = 'false'; n.times do ; I18n.translate('application.contract_not_available.header'); end } end --------------------------------------------- | Benchmark | Seconds | Sec pr translation | |------------| --------- | ------------------ | | with redis | 48.280000 | 0.0004828 | | without | 9.010000 | 0.0000901 | --------------------------------------------- 

开销约为3毫秒pr查找。 它归结为每页/请求所执行的查找次数。

你可能想试试

 $ ruby script/plugin install http://github.com/o2sources/unused_translations/tree/master $ script/unused_translations config/locales/en.yml 

资料来源: http : //www.railslodge.com/plugins/1547-unused-i18n-translations