i18n-tasksで外部の(gemの)localeファイルを利用する


結論

https://github.com/glebm/i18n-tasks/blob/master/templates/config/i18n-tasks.yml
ここで、externalとなっているところがあって、

# - "<%#= %x[bundle show vagrant].chomp %>/templates/locales/%{locale}.yml"

このように#とその中でもコメント(<%#=)してあるので、以下のようにコメントアウト(<%=)すると動きます。

- "<%= %x[bundle show vagrant].chomp %>/templates/locales/%{locale}.yml"

bundle show vagrantのvagrantや/templatesなどの部分は自分が取り込みたいgemなどの外部のパスに適宜変更してください。また、bundle showは各開発者で異なるgemのパスを柔軟に特定するためにこうなっているだけで、必須ではないです。(大抵は使うことになると思いますが)

以下、まあまあどうでもよい説明

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

というものがあって、Railsを利用している人は結構使っているかと思います。これを使うと多言語対応のlocaleファイルに対するチェックを行えます。

コード上ではその多言語対応されたワードを利用しようとしているがlocalファイル(ja.ymlなど)には存在しないものはi18n-tasks missingで検査できますし、逆にlocalファイルにはあるけど、コード上では使っていないものはi18n-tasks unusedで検査できます。

自分は今回ActiveAdminを利用しようとして以下のエラーが出るようになってしまいました。

% bundle exec i18n-tasks missing
Missing translations (1) | i18n-tasks v0.9.31
+--------+------------------------+-----------------------------------+
| Locale | Key                    | Value in other locales or source  |
+--------+------------------------+-----------------------------------+
|  all   | active_admin.dashboard | app/admin/dashboard.rb:2 (1 more) |
+--------+------------------------+-----------------------------------+

で、どう対応したかと言うと結論の通りexternalを使いました。

初めは上手く行かなくて1時間くらい悩みましたが、<%=を間違えて<%と書いていました。これだと評価された値が出力されないので、駄目ですね・・・

というわけでこれで何とかなりました。

ちなみにあくまで、上記はexternalなlocalファイルを取り込む、というだけであって、unusedには対応していません。

This data is not considered unused and is never written to.

https://github.com/glebm/i18n-tasks/blob/master/templates/config/i18n-tasks.yml

って書いてありますね。externalのファイルはunusedを考慮しないし、書き込みもされないと。

特定の物をunusedの検査対象外としたい場合はignore_unusedを使いましょう。