2014/10/05
AndroidStudio でビルドしたら MissingTranslation エラーが出た時の対処方法
Error:(4) Error: "app_name" is not translated in "ja" (Japanese) [MissingTranslation] |
「app_name を日本語に翻訳していないよ」というエラーなので、意味はわかります。
しかし、これはあえてなんです。全部の文言を日本語に翻訳するのは現実的ではありません。
せめて Warning にしておいてくれればいいのに。
きっと、これを Error にしたのは実際には Translation をあまり使わない英語圏の人たちなんでしょうねぇ。
というわけで、回避する方法を調べました。
個別に回避する方法1
以下のように string タグへ個別に translatable="false" をつけていきます。1 2 3 4 5 6 7 8 9 | <? xml version = "1.0" encoding = "utf-8" ?> < resources > < string name = "app_name" translatable = "false" >Test App</ string > <!-- 省略 --> </ resources > |
ある意味、正攻法と言える方法です。
しかし、多言語展開すると「日本語には翻訳するけどフランス語には翻訳しない」等、単純にいかないことも多そうです。
その場合、フランス語(翻訳しない言語)にも同じ文言を書くのが正しい方法なのだと思いますが、数が増えてくると無駄が多くなり、修正も大変になってきます。
なお、この方法は「本来翻訳しないはずのものを翻訳しちゃった」場合に Warning を出してくれます。
個別に回避する方法2
以下のように string タグへ個別に ignore 属性をつけていきます。res/values/string.xml
1 2 3 4 5 6 7 8 9 10 | <? xml version = "1.0" encoding = "utf-8" ?> < resources < string name = "app_name" tools:ignore = "MissingTranslation" >Test App</ string > <!-- 省略 --> </ resources > |
この方法は translatable を使った方法と同じように見えますが、「本来翻訳しないはずのものを翻訳しちゃった」場合に何の警告も出してくれないので、translatable を使った方が良いでしょう。
まとめて回避する方法1
以下のように ignore 属性をつける場所を親の resources タグにします。res/values/string.xml
1 2 3 4 5 6 7 8 9 10 | <? xml version = "1.0" encoding = "utf-8" ?> < resources tools:ignore = "MissingTranslation" > < string name = "app_name" >Test App</ string > <!-- 省略 --> </ resources > |
これで、各ファイル毎にまとめて回避できるようになります。
string_no_translate.xml とか別ファイルにしてグループ分けすると便利かもしれません。
それでも多言語展開した時の問題は残るわけですが。
まとめて回避する方法2
どうせ個々やグループ化で回避しても意味が無いのであれば、本当に全体を回避してしまうのも手かもしれません1。以下のように、build.gradle に追記します。
app/build.gradle
1 2 3 4 5 6 7 8 9 10 | android { compileSdkVersion 20 buildToolsVersion '20.0.0' lintOptions { disable 'MissingTranslation' } // 省略 } |
まとめて回避する方法3
以下のように lint.xml をモジュール直下に配置する方法でも回避可能です。app/lint.xml
1 2 3 4 5 6 7 | <? xml version = "1.0" encoding = "UTF-8" ?> < lint > < issue id = "MissingTranslation" severity = "ignore" /> </ lint > |
この方法、本来ならば severity を warning 等に変えることで、警告レベルを変更できるはずですが、現在のところ2どう指定しても ignore になってしまうようです。