Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
8
Help us understand the problem. What is going on with this article?
@mstssk

Android LintのMissingTranslationに対応する

More than 1 year has passed since last update.

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 falseabortOnError falseを付けると無視できるよ」と表示されますが、やっちゃいけません。2
一時的ならかまわないでしょうが、MissingTranslation以外のチェック項目も全部無視されてしまいます。

translatable="false"で翻訳不要であることを明示する

翻訳しなくていいものはtranslatable属性でfalseを指定しましょう。

values/strings.xml
<resources>
    <string name="foo" translatable="false">bar</string>
</resources>

誤って翻訳してしまっている場合もエラーにしてくれます。
例えば、デフォルトロケールのstringがtranslatable="false"になってるのにvalues-ja/で翻訳したstringを書いてしまっていると検知してくれます。

values-ja/strings.xml
<resources>
    <string name="foo">ほげ</string><!-- 不要なstring -->
</resources>

ファイルまるごと無視する

translatable属性を1つずつ指定するほうがちゃんとLintチェックしてくれるので便利なのですが、翻訳しないものが多い場合はちと面倒です。
翻訳不要なstringを1つのファイルにまとめてあったりしていれば、ファイルまるごとLintチェックで無視してしまうのも手です。
tools:ignore属性で無視するLintルールを指定できます。
ただし、誤って翻訳してしまっている場合の検知が出来なくなってしまうデメリットがあります。

values/string_no_trans.xml
<?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 falseabortOnError falseでlintチェック自体しないようにする事もできます。
MissingTranslationの検知レベルをWarningsなどに下げてしまうというのもあります。(※この辺は未検証)

参考


  1. 擬人化はまだか。 

  2. そのメッセージの前の部分に「ちゃんとlint引っかかった箇所を直すか〜」と書いてあるんですが、わかりやすくビルドスクリプトのサンプル記述がある後半に目が行ってしまう。 

8
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
mstssk
viibar
動画マーケティング・メディア事業、および動画制作の業務効率化ツール開発

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
8
Help us understand the problem. What is going on with this article?