本システムは、非常に広い範囲で国際化されており、現地の状況に合わせて柔軟に変更できます。言い換えれば、国際化(I18N)によって具体的なローカライズ(L10N)が可能になっています。I18NとL10Nという略語は、語の最初と最後の文字の間に、省略されている文字数を挟み込んだ表記です。
設定は、ファイル/etc/sysconfig/languageの変数LC_で定義します。これは、単なる現地語サポートだけでなく、Messages (メッセージ) (言語)、Character Set (文字セット)、Sort Order (ソート順)、Time and Date (時刻と日付)、Numbers (数字)およびMoney (通貨)の各カテゴリも指します。これらのカテゴリはそれぞれ、独自の変数を使用して直接定義することも、ファイルlanguageにあるマスタ変数を使用して間接的に定義することも可能です(man localeコマンドでmanページを参照)。
これらの変数は、プレフィクスRC_を付けずにシェルに渡され、前述のカテゴリを表します。関連するシェルプロファイルについては後で説明します。現在の設定は、コマンドlocaleを使用して表示できます。
この変数は、すでに参照された変数の値を上書きします。
前述の変数がまったく設定されていない場合、これがフォールバックとなります。デフォルトでは、RC_LANGだけが設定されます。これにより、ユーザが独自の変数を入力しやすくなります。
yesまたはno変数。noに設定すると、rootが常にPOSIX環境で動作します。
変数は、YaSTのsysconfigエディタで設定できます(セクション 7.3.1, YaSTのsysconfigエディターを使ってシステム設定を変更するを参照してください)。このような変数の値には、言語コード、国コード、エンコーディング、および修飾子が入っています。個々のコンポーネントは特殊文字で接続されます。
LANG=<language>[[_<COUNTRY>].<Encoding>[@<Modifier>]]
言語コードと国コードは必ず一緒に設定する必要があります。言語の設定は、http://www.evertype.com/standards/iso639/iso639-en.htmlおよびhttp://www.loc.gov/standards/iso639-2/で入手できる、ISO 639規格に従います。国コードは、http://www.din.de/gremien/nas/nabd/iso3166ma/codlstp1/en_listp1.htmlで入手できる、ISO 3166にリストされています。
使用可能な説明ファイルが/usr/lib/localeに存在する場合のみ、値を設定する意味があります。追加の記述ファイルは、/usr/share/i18n のファイルを使用し、コマンド localedef を実行して作成できます。記述ファイルは、glibc-i18ndataパッケージに含まれています。en_US.UTF-8の説明ファイル(英語および米国)は以下のように作成します。
localedef -i en_US -f UTF-8 en_US.UTF-8
インストール時にAmerican Englishを選択すると、これがデフォルトの設定になります。他の言語を選択した場合、その言語が有効になりますが、文字コードはUTF-8が使用されます。
これにより、言語が英語、国が米国、文字セットがISO-8859-1に設定されます。この文字セットは、ユーロ記号をサポートしませんが、UTF-8がサポートされていない、更新前のプログラムを使用する方が便利なこともあります。文字セット(この状況ではISO-8859-1)を定義する文字列は、Emacsのようなプログラムによって評価されます。
上記の例では、ユーロ記号が言語設定に明示的に組み込まれています。厳密に言うと、この設定は今では古くなっています。UTF-8もユーロ記号を扱うからです。この設定が役立つのは、アプリケーションがUTF-8ではなく、ISO-8859-15しかサポートしない場合だけです。
SuSEconfigは、/etc/sysconfig/languageにある変数を読み込み、必要な変更を/etc/SuSEconfig/profileと/etc/SuSEconfig/csh.cshrcに書き込みます。/etc/SuSEconfig/profileは/etc/profileによって読み込まれます。 つまり、ソースとして使用されます。/etc/SuSEconfig/csh.cshrcは/etc/csh.cshrcのソースとして使用されます。これにより、設定はシステム全体に渡って使用できるようになります。
ユーザは、同様に~/.bashrcファイルを編集して、システムのデフォルトを上書きすることができます。たとえば、システム設定のen_USをプログラムメッセージに使用しない場合は、LC_MESSAGES=es_ES を指定してメッセージが英語の代わりにスペイン語で表示されるようにします。
ロケールシステムのデフォルトが不十分な場合、Bashスクリプトの構文に従って~/.i18nの設定を変更してください。~/.i18n内のエントリは、/etc/sysconfig/languageのシステムデフォルトを上書きします。同じ変数名をRC_ネームスペースプレフィクスなしで使用します。たとえば、RC_LANGではなく、LANGを使用します。
LANG=cs_CZ.UTF-8 LC_COLLATE=C
カテゴリMessagesのファイルは、フォールバックを確保するため、対応する言語ディレクトリ(たとえば、en)にのみ格納されることになっています。たとえばLANGをen_USに設定したが、messageファイルが/usr/share/locale/en_US/LC_MESSAGESに存在しない場合は、/usr/share/locale/en/LC_MESSAGESにフォールバックされます。
フォールバックチェーンも定義できます。たとえば、ブルターニュ語、次いでフランス語、またはガリシア語、次いでスペイン語、次いでポルトガル語の順にフォールバックするには、次のように設定します。
LANGUAGE="br_FR:fr_FR"
LANGUAGE="gl_ES:es_ES:pt_PT"
必要に応じて、次のようにノルウェー語の方言であるニーノシクやブークモールをノルウェー語の代わりに使用できます(noへのフォールバックを追加します)。
LANG="nn_NO"
LANGUAGE="nn_NO:nb_NO:no"
または
LANG="nb_NO"
LANGUAGE="nb_NO:nn_NO:no"
ノルウェー語では、LC_TIMEの扱いも違うので注意してください。
生じる可能性のある1つの問題は、数字の桁を区切るための文字が正しく認識されないことです。このことは、LANGがdeのような2文字の言語コードにのみ設定されているのに、glibcが使用している定義ファイル/usr/share/lib/de_DE/LC_NUMERICに存在している場合に生じます。それで、区切り文字の定義がシステムに認識されるようにするには、LC_NUMERICをde_DEに設定する必要があります。
『The GNU C Library Reference Manual』のLocales and Internationalization
の章。glibc-infoパッケージに格納されています。
『UTF-8 and Unicode FAQ for Unix/Linux』、Markus Kuhn 著。 Web ページhttp://www.cl.cam.ac.uk/~mgk25/unicode.html (現在のアドレス)を参照してください。
Unicode-Howto(Bruno Haible著):/usr/share/doc/howto/en/html/Unicode-HOWTO.html。