ロケールを何に設定する必要がありますか?これはどのような影響を及ぼしますか?

ロケールを何に設定する必要がありますか?これはどのような影響を及ぼしますか?

この質問は、次の質問から来ました。 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 localesDebianで実行してきましたが、それについてあまり考えていませんでした。

具体的な質問:ロケールをen_IN.UTF-8に設定する必要がありますか?これには欠点がありますか?

また見なさい:LC_COLLATE(必ず)が文字範囲に影響しますか?

答え1

ロケール設定は、あなたの文化に関連するユーザーの好みです。

ロケール名

私が知っている現在のUnixの亜種(いくつかのアンティークではない)では、ロケール名は同じパターンに従います。

  • 一つISO 639-1小文字の2桁の言語コード、またはISO 639-2言語に2文字のコードがない場合は、3文字の言語コードが使用されます。たとえば、en英語、ドイツ語deja日本語、ukウクライナ語、berベルベル語...
  • すべての言語ではありませんが、多くの言語では下線_の後に下線が続きます。ISO 3166大文字の2桁の国コード。例:en_USアメリカ英語、en_UK英国英語、fr_CAカナダ(ケベック)フランス語、de_DEドイツ語ドイツ語、de_ATオーストリアドイツ語、ja_JP日本語(日本語)など。
  • オプションで、ドット.の後に名前が続きます。文字エンコーディングUTF-8少なくともGNU libc(ISO-8859-1これがどれくらい一般的なのかわかりません)では、名前をエンコードするときに大文字KOI8-UGB2312小文字が無視されます。Big5たとえば、簡体字zh_CN.UTF-8中国語はUTF-8でエンコードされ、zh_CN中国語はGB2312でエンコードされ、台湾語zh_TW(繁体字)中国語はBig5でエンコードされます。
  • (オプション)at 記号@の後にバリアント名が続きます。バリエーションの意味はロケールによって異なります。たとえば、ヨーロッパの多くの国では、@euro通貨記号が€で、エンコードが通常の通貨記号バリアントではなく、対応する文字(ISO 8859-15またはISO 8859-16)を含むロケールバリアントがあります。たとえばen_IE、(英語、アイルランド)は、latin1(ISO 8859-1)エンコーディングと£を通貨記号として使用し、en_IE@eurolatin9(ISO 8859-15)エンコーディングと€を通貨記号として使用します。

Cさらに、すべてのUNIXシリーズシステムには2つのロケール名がありますPOSIX。これらの名前は同義語であり、コンピュータ用語でコンピュータプログラムから解析されるデータに適したデフォルト設定を意味します。

地域設定

次のロケールカテゴリは、次のように定義されます。POSIX:

  • LC_CTYPE:端末アプリケーションで使用される文字セット:カテゴリデータ(文字、句読点、スペース、無効な文字など)と大文字と小文字の変換。テキストユーティリティは通常、LC_CTYPE文字の境界を決定することに注意を払います。
  • LC_COLLATE:照合順序(つまりソート)の順序。この設定は、次のようなさまざまな理由で非常に制限的に使用されます。
    • ほとんどの言語には、順序に依存する複雑な規則があります(辞書の単語と識別名は同じ順序を使用しない可能性があります)、表現的には使用できませんLC_COLLATE
    • 正しいソート順序を必要とするアプリケーションはほとんどなく、これらの操作はロケールを使用するソフトウェアによって実行されます。たとえば、ワードプロセッサはファイル自体にファイルの言語とエンコーディングを保存します(そうしないと、ファイルが別のロケールを使用しているシステムでは正しく処理されません)、環境で指定されたロケールを気にしません。
    • LC_COLLATE特に、ソート順A < a < B < ...が発生し、「AとZの間」に小文字aからyまで含まれるため、不快な副作用がある可能性があります。特に非常に一般的な正規表現[A-Z]いくつかのアプリケーションを壊すようなものです。
  • LC_MESSAGES:情報とエラーメッセージの言語。
  • LC_NUMERIC:数値形式:小数点と千単位の区切り記号。
    多くのアプリケーションには、.小数点区切り文字がハードコードされています。これはLC_NUMERICそれほど有用ではなく、潜在的に危険になる可能性があります。
    • 設定しても、デフォルトのフォーマットが表示されることがよくあります。
    • .あるアプリケーションではロケール依存出力を生成し、他のアプリケーションでは小数点またはフィールド区切り文字の出力を期待する,状況が発生する可能性があります。
  • LC_MONETARYA:似てLC_NUMERICいますが、現地通貨の金額に対応しています。
    これを使用するアプリケーションはほとんどありません。
  • LC_TIME:日付と時刻の形式:曜日と月の名前、12時間制または24時間制、日付部分順、句読点など

追加のロケールカテゴリを定義する非埋め込みLinuxでGNU libcを見つけることができます。

  • LC_PAPER:デフォルトの用紙サイズ(高さと幅で定義)。
  • LC_NAME、、、、、:これを使用するアプリケーションがあるかどうかわかりませんLC_ADDRESSLC_TELEPHONELC_MEASUREMENTLC_IDENTIFICATION

環境変数

ロケールを使用するアプリケーションは、環境変数に基づいてロケールを決定します。

  • LANGこれにより、他の設定で上書きされない限り、環境変数の値が使用されます。設定しない場合、LANGデフォルトのロケールはですC
  • このLC_xxx名前は環境変数として使用できます。
  • 設定すると、LC_ALL他のすべての値は無視されます。これはLC_ALL=C、実行位置に関係なく同じ出力を生成する必要があるアプリケーションを設定するのに役立ちます。
  • また、GNU libc使用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メッセージを表示する言語を設定してください。
  • デフォルトの用紙サイズとして使用するにはUS Letterに設定し、LC_PAPERA4として使用するには別のサイズ(たとえば)に設定します。en_USen_GB
  • (オプション)LC_TIME希望の時間形式に設定します。

上記のようにLC_COLLATELC_NUMERIC。を使用する場合は、両方のLANGカテゴリをに設定して明示的に上書きしますC

関連情報