Edited at

Android StudioのTranslations Editor

More than 1 year has passed since last update.

string.xmlの管理方法のベストプラクティスってどっかにないですかねー。

Translations EditorとはAndroid Studioにある地味な機能のひとつで、string.xmlで右クリックすると開くことができます。

これで指定したファイルの文字列リソースを一覧で見ることができます。

Translations Editorの名前の通り、編集することもできます。新しい文字列キーの追加、ロケールの追加、さらには翻訳の発注ができるという謎の機能があります。

エディタとしてみた場合、


  • エスケープな必要な文字('など)は自動でエスケープする

  • 改行のある文章を見たままで編集できる


  • Untranslatableのチェックを入れれば、translatable="false"を指定してくれる

  • 対応するローカライズ文字列がないキーを赤色で表示


  • translatable="false"が指定されているキーに翻訳テキストがあると赤色で表示

と一通りの機能は揃っています。



  • %1$dなどの書式文字を指定した場合に、全ての言語リソースで統一されているかは考慮しない

  • 新しい文字列キー、ロケールの追加はできるけど削除はできない

あくまでxmlファイルをビジュアライズしているだけなので、削除系の機能はないです。また、実際的には翻訳の必要な文字列リソースと、そうでないリソースは混在しないようにファイルを分けた方が良いと思います。

Android Lintの設定を特に変えていない場合、ローカライズ文字列がないとリリースビルドでエラーになりしますが、Lintを走らせなくてもぱっと見で問題のある翻訳が分かります。


外部貼り付け機能

翻訳データってギリギリまでこなかったり、翻訳ミスがあったり、逆にギリギリになってテキストの追加があったりと、頻繁に更新される可能性があります。いちいちstring.xmlに落とし込んでチェックするのは手間です。読めない言語だと間違えても気付けないので辛いです。

個人的にTranslations Editorで一番便利なのは、まるっと選択してコピペすると、タブで区切られたテキストで出力できる ことだと思っています。(Windows版限定の機能っぽい?OSXだと使えない…)

タブ区切りなので、表計算ソフトに貼り付けるとこんな感じになります。

注意しなければならないのは、エスケープや改行です。これの元のstring.xmlは以下のようになっているのですが、

<resources>

<string name="app_name">My Application</string>
<string name="hogehoge">hogehoge</string>
<string name="button_ok" translatable="false">OK</string>
<string name="escaped_string" translatable="false">test \" and \'</string>
</resources>

コピペした際に\\nは消え去ります。とりあえず、その辺はまあ、考えないでおきます。

あとはこんな感じの表を作ります。

これでテキストのマスターデータを管理すると結構楽な気がします。大体の表計算ソフトはRTL言語を混ぜても普通に動くので便利です。

Translations Editorに対して貼り付け操作を行うことはできないので、string.xmlの部分はこんな感じで数式で生成するなりする必要があります。

エスケープ文字や改行文字の問題を数式だけで解消しようと思うとちょっと骨が折れるので、適当なスクリプト言語で自動生成するのがより良いと思います。

Xcode向けのlocalized.stringsを生成して一元管理できるとなお良い気がしますが、そういう事例がどっかに転がってないですかねー。