Tag

Goにおける言語とロケールのマッチング (Language and Locale Matching in Go)

Goにおける言語とロケールのマッチング #

Language and Locale Matching in Go By Marcel van Lohuizen

はじめに #

ウェブサイトのような、ユーザーインターフェースで複数の言語をサポートするアプリケーションを考えてみましょう。 ユーザーが望む言語のリストがある場合、アプリケーションはどの言語を表示すべきか決めなければなりません。 このとき、アプリケーションがサポートする言語とユーザーが好む言語の間で最適な組み合わせを選ばなければなりません。 この記事ではなぜこの決定が難しいか、そしてどうやってGoがそれを手助けできるかを説明します。

言語タグ #

言語タグ、あるいはロケール識別子、は使用されている言語と方言をコンピュータが理解できる形でにした識別子です。 もっともよく知られたものとしては IETF BCP 47 という標準で、Goのライブラリもこの標準に準じています。 BCP 47 で定義されている言語タグと、それらが表す言語や方言をいくつか例を挙げてみましょう。

タグ 説明
en 英語
en-US アメリカ英語
cmn 標準中国語
zh 中国語(通常は標準語)
nl オランダ語
nl-BE フラマン語
es-419 ラテンアメリカスペイン語
az, az-Latn ともにラテン文字で書かれたアゼルバイジャン語
az-Arab アラビア文字で書かれたアゼルバイジャン語

言語タグは一般的に言語コード(上記での“en”, “cmn”, “zh”, “nl”, “az”)が来た後に付加的な文字に関する副タグ(“-Arab”)や 地域に関する副タグ(“-US”, “-BE”, “-419”)、変数の副タグ(オックスフォード英語大辞典でのスペルのための “-oxendict”)、あるいは 拡張副タグ(電話帳順のための “-u-co-phonebk”)が続きます。 もっとも一般的な形式は副タグが省略された形、たとえば “az-Latn-AZ” であれば “az” です。

言語タグがもっとも使われる場所は、システムがサポートしている言語の一覧からユーザーが好みの言語を選択するときでしょう。 たとえば、(アフリカーンス語が選択できない場合に)アフリカーンス語を望んでいるユーザーに対しシステムはオランダ語を表示するという決定をする場合です。 このような対応は言語間の包含性に関するデータを参照するというプロセスが関わってきます。 この対応から得られたタグは、その後言語特有のリソース、例えば翻訳、並び順、タイトルなどの大文字小文字を自動で変えるアルゴリズムなどを 取得するために使われます。これらの処理はまた別の対応を必要とします。たとえば、ポルトガル語には決まった並び順がないため、 並び順を処理するパッケージはデフォルトのもの、すなわち「ルート」の言語の並び順にフォールバックすることになるでしょう。

...