Как я могу определить неиспользуемые ключи i18n? - PullRequest
16 голосов
/ 28 декабря 2011

Я работаю над существующим приложением Rails и использую файл локализации en.yml для хранения большей части текста приложения. На данный момент мы не локализуем на другие языки, так что есть только один файл, но тот факт, что мы добавляем translate('some.key') в наши представления, означает, что добавить другой язык будет так же просто, как добавить другой файл - скажем, , sp.yml

Проблема в том, что en.yml вырос до такой степени, что я сомневаюсь, что все ключи используются.

Помимо git grepping для translate вызовов с использованием каждого ключа, существует ли быстрый способ определения ключей локализации, которые не были явно вызваны приложением?

Ответы [ 5 ]

13 голосов
/ 18 апреля 2012

Посмотрите на эту статью о "Ключевые вопросы интернационализации вашего приложения" . Интересующий вас абзац: « избавление от неиспользованных переводов ».

В частности, рекомендуется просмотреть исходный код, а также записать, какие ключи перевода используются в вашем производственном приложении, следующим образом:

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

Надеюсь, это поможет.

6 голосов
/ 12 сентября 2013

I18n-tasks gem

Я только что слышал об этом драгоценном камне, который включает в себя задачу, показывающую "потенциально неиспользуемые переводы".

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

0 голосов
/ 28 сентября 2017

Прошло много лет с тех пор, как я впервые пришел к этому вопросу, поскольку у меня была точно такая же проблема.Проблема не стала меньше, я больше разочарован, чем когда-либо.

Вот экспериментальный проект, он подключается к поиску перевода и увеличивает счетчик ключа перевода в Redis:

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

Идея в том, что вы можете получить статистику и сравнить.(На данный момент, я бы хотел помочь)

Вы можете спросить: «Разве это не замедлит поиск?»

И вы правы, конечно, но накладные расходыедва заметный, проверьте этот тест.

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 мс при поиске.Это сводится к количеству поисков, выполненных вами на странице / запросе.

0 голосов
/ 23 февраля 2012

Возможно, вы захотите попробовать

$ 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

0 голосов
/ 29 декабря 2011

Получите те, которые активно используются, затем удалите остальные. Вот что я использую.

На самом деле я установил их на active=0, но это может не сработать для вас

Обновление
Оказывается, мне было неясно.

Есть два способа посмотреть на это: из исходных файлов или из файлов перевода. Если вы посмотрите из исходных файлов, вам нужно определить все используемые строки и, наконец, удалить все неиспользуемые строки.

Если вы посмотрите из файлов перевода, вам нужно посмотреть на источник и определить, используются ли они по-прежнему, как вы упомянули в вопросе.

Другого пути нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...