この質問は、質問をすることによって刺激されました。
Chromiumブラウザでは、「ファイルに印刷」のデフォルトの用紙サイズを設定できません。また、チャットで@Gillesと会話することもできます。 @don_crisstiが指摘し、私が確認したように、ロケールを変更します(少なくともLC_PAPER
)選択する用紙サイズに違いがあります。
私は何を選択するかについてあまり考えたことがなく、常にen_US.UTF-8
を使用していました。 妥当なデフォルトの選択のように思えたからです。
ただし、チャットの@Gillesごとに(http://chat.stackexchange.com/transcript/message/17017095#17017095で始まる会話を参照)。抜粋:
Gilles:LC_PAPERのデフォルトは$ LANG
Gilles:LANG=en_US.UTF-8が必要です。それは悪い考えです。それは
LC_COLLATEを設定し、それはほとんどの場合悪いことですGilles:LC_COLLATEは正しい照合を記述していません。制限が多すぎて(文字ごとに)LANGを削除し、代わりに
LC_CTYPEとLC_PAPERを設定しますGilles:さらに
以外の言語のメッセージが必要な場合はLC_MESSAGES
英語
明らかに、ここには私が気付いていない問題があり、他にも多くの問題があると確信しています。では、ロケールを設定するときにどのような問題を考慮する必要があり、どのように設定する必要がありますか?私はいつもdpkg-reconfigure locales
を実行しました Debianで、それについて二度考えなかった。
特定の質問:ロケールをen_IN.UTF-8に設定する必要がありますか?そうすることの欠点はありますか?
承認された回答:
ロケール設定は、文化に関連するユーザー設定です。
ロケール名
私が知っている現在のすべてのUNIXバリアント(一部のアンティークではありません)では、ロケール名は同じパターンに従います:
- ISO 639-1の小文字の2文字の言語コード、または言語に2文字のコードがない場合はISO639-23文字の言語コード。たとえば、
en
英語の場合、de
ドイツ語の場合、ja
日本語の場合、uk
ウクライナ語の場合、ber
Berberの場合、… - すべてではありませんが多くの言語では、アンダースコア
_
その後にISO3166の大文字の2文字の国コードが続きます。したがって:en_US
米国英語の場合、en_UK
イギリス英語の場合、fr_CA
カナダ(ケベック)フランス語、de_DE
ドイツのドイツ語の場合、de_AT
オーストリアのドイツ語の場合、ja_JP
(日本の)日本人向けなど - オプションで、ドット
.
その後にUTF-8
などの文字エンコードの名前が続きます 、ISO-8859-1
、KOI8-U
、GB2312
、Big5
、など。少なくともGNU libcでは(これがどれほど普及しているかはわかりませんが)、名前のエンコードでは大文字と小文字および句読点は無視されます。例:zh_CN.UTF-8
zh_CN
は、UTF-8でエンコードされた北京語(簡体字)中国語です。 はGB2312でエンコードされた北京語で、zh_TW
Big5でエンコードされた台湾語(繁体字)中国語です。 - オプションで、アットマーク
@
バリアントの名前が続きます。バリアントの意味はロケールによって異なります。たとえば、多くのヨーロッパ諸国には@euro
があります 通貨記号が€で、エンコーディングがこの文字を含むロケールバリアント(ISO8859-15またはISO8859-16)であり、古い通貨記号の装飾されていないバリアントとは対照的です。たとえば、en_IE
(英語、アイルランド)は、latin1(ISO 8859-1)エンコーディングを使用し、通貨記号として£を使用しますが、[email protected]
latin9(ISO 8859-15)エンコーディングを使用し、通貨記号として€を使用します。
さらに、すべてのUNIXライクなシステムに存在する2つのロケール名があります:C
およびPOSIX
。これらの名前は同義語であり、コンピュータを意味します。つまり、コンピュータプログラムによって解析されるデータに適したデフォルト設定です。
ロケール設定
次のロケールカテゴリはPOSIXによって定義されています:
-
LC_CTYPE
:端末アプリケーションで使用される文字セット:分類データ(文字、句読点、スペース、無効など)および大文字小文字の変換。テキストユーティリティは通常、LC_CTYPE
に注意します 文字の境界を決定します。 -
LC_COLLATE
:照合(つまり並べ替え)の順序。この設定は、いくつかの理由で非常に限定的に使用されます。- ほとんどの言語には、並べ替え対象に依存する複雑なルールがあり(たとえば、辞書の単語と固有名詞は同じ順序を使用しない場合があります)、
LC_COLLATE
で表現することはできません。 。 - ロケール設定を使用するソフトウェアによって実行される適切なソート順が重要なアプリケーションはほとんどありません。たとえば、ワードプロセッサは、ファイルの言語とエンコーディングをファイル自体に保存し(そうでない場合、異なるロケール設定のシステムではファイルが正しく処理されません)、環境によって指定されたロケール設定を気にしません。
-
LC_COLLATE
特に、ソート順A [A-Z]のような非常に一般的な正規表現 一部のアプリケーションを壊します。
- ほとんどの言語には、並べ替え対象に依存する複雑なルールがあり(たとえば、辞書の単語と固有名詞は同じ順序を使用しない場合があります)、
-
LC_MESSAGES
:情報メッセージとエラーメッセージの言語。 -
LC_NUMERIC
:数値の書式設定:小数と千単位の区切り文字。
多くのアプリケーションは.
小数点として。これにより、LC_NUMERIC
あまり有用ではなく、潜在的に危険です:- 設定しても、デフォルトの形式が頻繁に表示されます。
- あるアプリケーションがロケールに依存する出力を生成し、別のアプリケーションが
.
小数点、または,
になります フィールドセパレータになります。
-
LC_MONETARY
:LC_NUMERIC
のように 、ただし現地通貨の金額について。
これを使用するアプリケーションはほとんどありません。 -
LC_TIME
:日付と時刻の形式:曜日と月の名前、12時間制または24時間制、日付部分の順序、句読点など。
組み込みLinuxにないGNUlibcは、追加のロケールカテゴリを定義します:
-
LC_PAPER
:デフォルトの用紙サイズ(高さと幅で定義)。 -
LC_NAME
、LC_ADDRESS
、LC_TELEPHONE
、LC_MEASUREMENT
、LC_IDENTIFICATION
:これらを使用するアプリケーションを知りません。
環境変数
ロケール設定を使用するアプリケーションは、環境変数からロケール設定を決定します。
- 次に、
LANG
の値 別の設定で上書きされない限り、環境変数が使用されます。LANG
の場合 が設定されていない場合、デフォルトのロケールはC
です。 。 -
LC_xxx
名前は環境変数として使用できます。 -
LC_ALL
の場合 が設定されている場合、他のすべての値は無視されます。これは主にLC_ALL=C
を設定するのに役立ちます 実行場所に関係なく、同じ出力を生成する必要があるアプリケーションを実行します。 - さらに、GNUlibcは
LANGUAGE
を使用しますLC_MESSAGES
のフォールバックを定義します (例:LANGUAGE=fr_BE:fr_FR:en
ベルギーフランス語を好む場合、または利用できない場合はフランスフランス語、利用できない場合は英語)
ロケールのインストール
ロケールデータは大きくなる可能性があるため、一部のディストリビューションでは使用可能な形式で出荷されず、代わりに追加のインストール手順が必要になります。
- Debianでロケールをインストールするには、
dpkg-reconfigure locales
を実行します ダイアログボックスのリストから選択するか、/etc/locale.gen
を編集します 次に、locale-gen
を実行します 。 - Ubuntuでロケールをインストールするには、
locale-gen
を実行します ロケールの名前を引数として使用します。
独自のロケールを定義できます。
推奨事項
便利な設定は次のとおりです。
-
LC_CTYPE
を設定します テキストファイルをエンコードする言語とエンコーディングに合わせてください。端末がそのエンコーディングを使用していることを確認してください。
ほとんどの言語では、エンコーディングのみが重要です。いくつかの例外があります。たとえば、大文字のi
I
です ほとんどの言語で、ただしİ
トルコ語(tr_TR
。 -
LC_MESSAGES
を設定します メッセージを表示する言語に変更します。 -
LC_PAPER
を設定しますen_US
へ US Letterをデフォルトの用紙サイズにしたい場合、およびその他のサイズ(en_GB
など) )A4が必要な場合。 - オプションで、
LC_TIME
を設定します お気に入りの時間形式に変更します。
上で説明したように、LC_COLLATE
の設定は避けてください およびLC_NUMERIC
。 LANG
を使用する場合 、これら2つのカテゴリをC
に設定して、明示的にオーバーライドします 。