Androidアプリの国際化対応のメモです。
下の手順で実施しました。
まずはres/valuesフォルダ以下にstrings.xmlを作成して下のように文字列リソースを作成しました。
<resources> <string name="app_name">メモ帳</string> <string name="yes">はい</string> <string name="no">いいえ</string> </resources>
下のように直接記入していた文字列はstrings.xmlのリソースを使うようにしました。
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/test" android:title="削除" // → @string/deleteに置き換え android:icon="@drawable/ic_baseline_list_24" /> </menu>
kotlin上の文字列は下のようにgetStringでリソースから取得するようにしました。
editText.setText(getString(R.string.delete))
getStringはActivityやFragmentで使えるメソッドなのでそれ以外ではContextを経由して文字列を取得しました。
context.resources.getString(R.string.delete)
◯日のように数字が入る場合は%dを使ってあとから数字を入れられるようにしました。
文字列の場合は%sになります。
<resources> <string name="days">%d日間</string> <string name="day_of_week">%s曜日</string> </resources>
Kotlin上では下のように第2引数に数字を入れる事で%dに数字が入ります。
context.resources.getString(R.string.days, 3)
一通りリソース化をしたら次は各言語用のstrings.xmlを作成します。
strings.xmlは各言語用のフォルダであるvalues-en以下に作成していきます。
翻訳作業はTranslations Editorで行いました。
下のようにキーごとの翻訳が見れるので抜け漏れが発生しにくくなります。
Translations Editorはstrings.xmlを開いた時の右上のOpen editorボタンから開く事が可能です。
画像ファイルについてもres/drawable-enのように各言語用のフォルダを作成して配置していくようです。
今後必要になれば使っていきたいと思います。
アプリのメタデータ翻訳ですがFastlaneを使っていたのでそっちで管理しました。
fastlane/metadata/android以下に各言語のフォルダを作ってそちらに各言語のタイトルやスクリーンショットを入れていきました。