Linux 上の LC_* ロケール文字列は正確には何を意味するのでしょうか?

Linux 上の LC_* ロケール文字列は正確には何を意味するのでしょうか?

Linuxのコマンドプロンプトで入力すると

locale

変数の長いリストLC_*(LC_TIMEなど) が表示されます。変数の値は、次のリストの変数の値のようになります。

en_US.8859-1
de_DE@euro
fr_FR.utf-8

個々の部分は具体的に何を意味するのでしょうか?

@euroはと同一であり.8859-15、通常、最後の部分は実際の文字セット (バイトから実際のシンボルへのマッピング) を意味することはわかっています。しかし、最初の 2 つのコードは正確に何を「行う」のでしょうか。システムのどのプロパティに影響するのでしょうか。たとえば (作業に使用できる例をいくつか示します)、、、en_US.8859-15およびの違いは何でしょうか。すべてまったく同じ文字セットを持っているため、選択したエディターで開くすべてのテキストファイルは同じように表示されます。では、ある「文字セット前のコード」から別の「文字セット前のコード」に切り替えると ( から など)、何が起こるのでしょうか。de_DE.8859-15de_CH.8859-15en_CU.8859-15de_CHen_US

違いをわかりやすく一覧にした表はありますか?

答え1

2つの部分はISO-639 言語コード最初の部分は言語そのもので、2番目の部分は(通常は)国コードどのローカルバリアントかを指定します。

LANG翻訳機能を持つほぼすべてのプログラムで、 を変更すると効果を確認できます。 はプログラムLC_COLLATEの結果に影響しsort、およびLC_DATEの出力に影響します。 一部のロケール設定では、それらを使用するものがインストールされていない可能性があります (可能性も高くなります)。datels -l

ほとんどのシステムでは、 のみがLC_LANG設定され、他のすべての設定はそれを継承することになります。

locale(7)のマニュアルページからの次の引用は関連している:

LC_COLLATE
これは、ローカルアルファベットの文字列を比較するために使用される関数 strcoll(3) および strxfrm(3) の動作を変更するために使用されます。たとえば、ドイツ語のシャープ s は "ss" としてソートされます。
LC_CTYPE
これにより、isupper(3)やtoupper(3)などの文字処理および分類関数、およびmblen(3)やwctomb(3)などのマルチバイト文字関数の動作が変更されます。
LC_通貨
localeconv(3) によって返される情報を変更します。この情報は、小数点と小数点のコンマなどの詳細とともに、数値が通常どのように印刷されるかを記述します。この情報は関数 strfmon(3) によって内部的に使用されます。
LC_メッセージ
メッセージの表示言語と、肯定または否定の回答の形式を変更します。GNU C ライブラリには、これらの情報の使用を容易にする gettext(3)、ngettext(3)、rpmatch(3) 関数が含まれています。また、カテゴリが "C" 以外の有効なロケールに設定されている場合、GNU gettext ファミリの関数は環境変数 LANGUAGE (コロンで区切られたロケールのリストを含む) に従います。
LC_数値
printf(3) および scanf(3) 関数ファミリーがロケール設定を使用するよう指示されている場合に使用する情報を変更します。この情報は localeconv(3) 関数でも読み取ることができます。
LC_TIME
strftime(3)関数の動作を変更して、現在の時刻をローカルで受け入れられる形式で表示します。たとえば、ヨーロッパのほとんどの国では、米国で使用される12時間制ではなく、24時間制が使用されています。
LC_ALL上記のすべて。

関連情報