TL;DR
- ちゃんと翻訳しよう
- 翻訳しないstringなら、
<string name="foo" translatable="false">
の様に1つずつtranslatable属性を付け、「翻訳不要」であることを明示する- 誤って翻訳してしまっていないかもチェックしてくれる
- Lintチェック自体を無視するのはやめよう
- ただし、ケースバイケースで特定のファイルだけ無視したりするのはアリだと思う。
Android Lint
単にコンパイルしただけでは気付かないプログラムの誤りをチェックしてくれるツールがLintです。
Androidアプリの開発環境(Android StudioやらAndroidのgradleプラグインやら)では、リリースビルド時にLintチェックも行い、Errorレベルの項目に引っかかったらビルドに失敗するようになっています。
つまり、Androidアプリ開発におけるお節介焼きお姉さんがAndroid Lintです。1
Android LintについてはDroidKaigi 2016の@Nkzn氏のセッションで詳しく触れています。
https://droidkaigi.github.io/2016/timetable.html#session-2016-02-18-13-00-13-50-b
MissingTranslation
Android Lintのチェック項目のうち、stringリソースが翻訳済みかどうかをチェックする項目がMissingTranslationです。
逆に翻訳後のものしかない(values-ja/
にはあるけどvalues/
に無い)といった場合もチェックしてくれます。
MissingTranslationはErrorレベルですので、これに引っかかるとリリースビルド出来ません。
リリースビルド時のエラーメッセージで、「ビルドスクリプトでcheckReleaseBuilds false
やabortOnError false
を付けると無視できるよ」と表示されますが、やっちゃいけません。2
一時的ならかまわないでしょうが、MissingTranslation以外のチェック項目も全部無視されてしまいます。
translatable="false"で翻訳不要であることを明示する
翻訳しなくていいものはtranslatable
属性でfalseを指定しましょう。
<resources>
<string name="foo" translatable="false">bar</string>
</resources>
誤って翻訳してしまっている場合もエラーにしてくれます。
例えば、デフォルトロケールのstringがtranslatable="false"
になってるのにvalues-ja/
で翻訳したstringを書いてしまっていると検知してくれます。
<resources>
<string name="foo">ほげ</string><!-- 不要なstring -->
</resources>
ファイルまるごと無視する
translatable
属性を1つずつ指定するほうがちゃんとLintチェックしてくれるので便利なのですが、翻訳しないものが多い場合はちと面倒です。
翻訳不要なstringを1つのファイルにまとめてあったりしていれば、ファイルまるごとLintチェックで無視してしまうのも手です。
tools:ignore
属性で無視するLintルールを指定できます。
ただし、誤って翻訳してしまっている場合の検知が出来なくなってしまうデメリットがあります。
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
tools:ignore="MissingTranslation">
<string name="api_url">http://foo.bar/api/</string>
</resources>
その他
tools:ignore
属性はstringの1つずつにも指定できますが、translatable
属性の方が便利です。
プロトタイプ作るだけだったりで厳密なチェックが邪魔なようなら、lint.xmlやbuild.gradleのlintOptionsでMissingTranslationをまるごと無視したり、checkReleaseBuilds false
やabortOnError false
でlintチェック自体しないようにする事もできます。
MissingTranslationの検知レベルをWarningsなどに下げてしまうというのもあります。(※この辺は未検証)
参考
- http://tools.android.com/recent/non-translatablestrings
- http://tools.android.com/tips/lint/suppressing-lint-warnings
- http://www.kaede-software.com/2012/02/_lint.html
- http://kokufu.blogspot.jp/2014/10/androidstudio-missingtranslation.html