国際化対応の言語情報の持ち方について
国際化対応(internationalization)や多言語対応での言語情報の持ち方について考察しました。
TLTR
ブラウザのAccept-Languageに従って、ja
やen
の形式を使い、リージョン情報が必要な場合のみzh-TW
のように記述する。
ブラウザの場合
ブラウザの国際化対応では多くの場合Accept-Languageの仕様に従ったライブラリが多い。railsやlaravelもこのAccept-Languageの仕様に従っている。
Accept-LanguageはRFC 7231 で定められている通り、言語を表す2~3文字の基本言語タグと、任意で追加のサブタグを’-‘で区切って続ける。
基本的にはja
やen
の2文字の基本言語タグが使われ、中国語などの地域によって言語が違うもの(簡体字と繁体字)はzh-CH
やzh-TW
と、リージョンの情報が追加される。
iOSの場合
iOSはISO 639に従っているのでlanguageCodeとしてはja
、en
の2文字を返す。iOSにはpreferredLanguagesというものがあり、これはlanguage - region
またはlanguage - script - region
を返すので、en-US
やzh-Hans-US
みたいな値が返ってくる
Androidの場合
Androidの場合はIETF BCP 47(現在は RFC 5646 とRFC 4647に従っている。
これもブラウザの仕様に近く、基本的にはja
やen
の2文字の基本言語タグが使われ、中国語などの地域によって言語が違うもの(簡体字と繁体字)はzh-CH
やzh-TW
と、リージョンの情報が追加される。ただし、zh-Hant-US
みたいな表現もとりうる。