Androidで特定の言語コードがISO639-1のコードと違う問題に対する対処方法

More than 1 year has passed since last update.

タイトルのとおりですが、Androidではインドネシア語、ヘブライ語、イディッシュ語の言語コードがISO639-1のコードと違います。

例えばインドネシア語のstrings.xmlを作ろうとした時 values-id ではなく values-in ディレクトリを作らなければなりません。Railsなんかでi18n対応した場合は id を使うので混乱しやすく、注意が必要です。

また、コード上で言語を切り替える時は変換が必要になります。以下のように愚直にやるしかなさそうです。

private String convertOldISOCodes(@NonNull String language) {

language = language.toLowerCase.intern();
switch (language) {
case "he": // ヘブライ語
return "iw";
case "yi": // イディッシュ語
return "ji";
case "id": // インドネシア語
return "in";
default:
return language;
}
}