2011-12-28 17 views
14

私は既存のRailsアプリケーションで作業しており、ローカライズファイルen.ymlを使用して、ほとんどのアプリケーションのテキストを保持しています。現時点では他の言語にはローカライズされていないため、1つのファイルしかありませんが、translate('some.key')というビューに別の言語を追加すると、別のファイルを追加するなどの簡単な操作が行われます。たとえば、sp.yml未使用のi18nキーはどのように識別できますか?

問題は、en.ymlがすべてのキーが使用されているとは思えないほどに成長しているということです。

git greppingtranslateの各キーを使用してコールすると、アプリで明示的に呼び出されていないローカリゼーションキーを簡単に特定できますか?

答えて

0

アクティブに使用されているものを取得し、残りを削除します。それが私が使うものです。

実は私はactive=0にそれらを設定するが、それはあなたのため

を動作しない場合があります更新
は、私は不明であったが判明します。

これを見るには、ソースファイルまたは翻訳ファイルから2つの方法があります。ソースファイルを見る場合は、使用中のすべての文字列を識別し、最後に未使用の文字列をすべて削除する必要があります。

翻訳ファイルを見る場合は、質問に記載されているように、ソースを見て、それらがまだ使用されているかどうかを判断する必要があります。

他の方法はありません。

+0

あなたは何を意味するのか分かりません。私はファイル内の行について話しています。あなたはデータベースの行について話していますか? –

+0

レールに関する経験はありませんが、私が知っているほとんどのi18nソリューションでは、すべての翻訳可能な文字列をエクスポートする方法があります。すべての翻訳可能な文字列をエクスポートしてから、すべての文字列をループし、使用されていない文字列をチェックします(エクスポートを参照)。 –

+0

2つのローカリゼーションファイルを比較する方法は問いません。私はどのローカリゼーションキーがアプリケーションのコードで使用されているかを確認する方法を尋ねています。 –

11

この記事について "Key issues internationalizing your app"を見てみましょう。興味のある段落は「未使用の翻訳を取り除くこと」です。

次のように具体的には、あなたのソースコードを見ているともキーが本番アプリに慣れる何翻訳ログインをお勧めします。

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

国際化 - タスクの宝石

私は「潜在的に未使用の翻訳」を表示するタスクを含んでこの宝石、について聞きました。

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

+3

潜在的に使用されないという意味では、検出が難しい場合に誤検出が起こる可能性があります。 'I18n.t(method_returning_the_key)'。 'config/i18n-tasks.yml'でそのようなキーを無視することは可能です。 – glebm

+1

@glebm - 説明をありがとう。ちなみに、あなたの宝石のこのような言及はどうでしたか? –

+1

私はSO :)の名前を検索しました – glebm

0

私は正確に同じ問題を抱えていたように私が最初にこの質問に到着したので、それは何年もされています。問題は小さくならず、私はこれまで以上に挫折しています。

は、ここでは翻訳のルックアップにフックやRedisので翻訳キーカウンタをインクリメントし、実験的なプロジェクトです:

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

アイデアは、あなたが統計を引っ張ると比較することができるということです。 (現時点ではWIP、私はhelp ofcを愛するでしょう)

あなたは質問するかもしれません: "ルックアップを遅くしませんか?"

あなたは当然ですが、オーバーヘッドはほとんど目立たないので、このベンチマークをチェックしてください。

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 msの参照がオーバーヘッドです。それはあなたがページ/リクエストごとに行うルックアップの数になります。

関連する問題