ロケールを何に設定する必要がありますか?また、その意味は何ですか?


19

この質問は、Chromiumブラウザでは "Print to File"のデフォルトの用紙サイズの設定が許可されていないという質問 と、チャットでの@Gillesとの会話によって刺激されました。@don_crisstiが指摘し、私が確認したように、ロケールを(少なくともLC_PAPER)変更すると、選択する用紙サイズが異なります。

何を選択すればよいか考えたことは一度もありませんでしたしen_US.UTF-8、それが妥当なデフォルトの選択のように思えたので、常に行っていました。

ただし、チャットの@Gillesごと(http://chat.stackexchange.com/transcript/message/17017095#17017095から始まる会話を参照)。抽出物:

ジル:LC_PAPERのデフォルトは$ LANG

ジル:LANG = en_US.UTF-8が必要です。それは悪い考えです:LC_COLLATEを設定し、それはほとんど常に悪いことです

Gilles:LC_COLLATEは正しい照合を記述せず、制限が多すぎます(文字ごとに移動します)LANGを削除し、代わりにLC_CTYPEおよびLC_PAPERを設定します

ジル:英語以外の言語のメッセージが必要な場合はLC_MESSAGESに加えて

明らかに、私が気づいていない問題がここにあり、他の多くの人も同様であると確信しています。それでは、ロケールを設定する際にどのような問題を考慮する必要があり、どのように設定するべきですか?私はいつもdpkg-reconfigure localesDebianで走っているだけで、それについて二度と考えていません。

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

参照:LC_COLLATEは文字範囲に影響しますか?

回答:


29

ロケール設定は、文化に関連するユーザー設定です。

ロケール名

私が知っているすべての現在のUNIXバリアント(少数のアンティークではない)では、ロケール名は同じパターンに従います。

  • アンISO 639-1小文字2文字の言語コード、またはISO 639-2言語は何の2文字のコードを持っていない場合は3文字の言語コード。たとえば、en英語、deドイツ語、ja日本語、ukウクライナ語、berベルベル語、…
  • すべてではありませんが多くの言語では、アンダースコアの_後にISO 3166の大文字の2文字の国コードが続きます。このように:en_US英語(米国)のため、en_UKイギリス英語のため、fr_CAカナダ(ケベック)、フランス語、de_DEドイツのドイツ語のため、de_ATオーストリアのドイツ語のため、ja_JP(日本の)日本人のための、など
  • 必要に応じて、ドットは.の名前が続く文字エンコーディングなどUTF-8ISO-8859-1KOI8-UGB2312Big5(私はこれがどのように広まっ知りません)、ケースや句読点は名前をコードでは無視され、少なくともGNUのlibcのでは、など。たとえばzh_CN.UTF-8、UTF-8でエンコードされた中国語(簡体字)zh_CN、GB2312でzh_TWエンコードされた中国語(中国語)、およびBig5でエンコードされた台湾語(繁体字)中国語です。
  • オプションで、アットマークの@後にバリアントの名前が続きます。バリアントの意味はロケールに依存します。たとえば、多くのヨーロッパ諸国には@euro、通貨記号が€で、エンコードがこの文字を含むロケールバリアント(ISO 8859-15またはISO 8859-16)があります。古い通貨記号が付いた装飾されていないバリアントとは対照的です。たとえば、en_IE(英語、アイルランド)はlatin1(ISO 8859-1)エンコードと£を通貨記号としてen_IE@euro使用し、latin9(ISO 8859-15)エンコードと€は通貨記号として使用します。

さらに、すべてのUnixライクシステムに存在する2つのロケール名:Cとがあり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:数値の形式:10進数と3桁ごとの区切り。
    多くのアプリケーション.は、小数点としてハードコードします。これはLC_NUMERICあまり有用ではなく、潜在的に危険です。
    • 設定しても、かなり頻繁にデフォルトのフォーマットが表示されます。
    • あるアプリケーションがロケール依存の出力を生成し、別のアプリケーション.が小数点または,フィールド区切り文字を想定している状況になる可能性があります。
  • LC_MONETARY:に似てLC_NUMERICいますが、現地通貨の金額用です。
    これを使用するアプリケーションはほとんどありません。
  • LC_TIME:日付と時刻の形式:曜日名と月名、12時間制または24時間制、日付部分の順序、句読点など

組み込みLinuxにないGNU libcは、追加のロケールカテゴリを定義します。

  • LC_PAPER:デフォルトの用紙サイズ(高さと幅で定義)。
  • LC_NAMELC_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テキストファイルをエンコードする言語とエンコードに設定します。端末がそのエンコードを使用していることを確認してください。
    ほとんどの言語では、エンコーディングのみが重要です。いくつかの例外があります。たとえば、大文字iIほとんどの言語で使用さİれますが、トルコ語(tr_TR)で使用されます。
  • LC_MESSAGESメッセージを表示する言語に設定します。
  • US Letterをデフォルトの用紙サイズにしたい場合に設定LC_PAPERen_USen_GBA4が必要な場合は他のほぼすべて(たとえば)に設定します。
  • オプションで、LC_TIMEお気に入りの時間形式に設定します。

上記で説明したように、LC_COLLATEとの設定は避けてくださいLC_NUMERIC。を使用する場合LANG、これらの2つのカテゴリをに設定して明示的にオーバーライドしますC


こんにちはGilles、詳細な回答をありがとう。Debianのデフォルト設定を上書きするのに適した場所はどこですか?A4用紙サイズが必要なので、デフォルト値のをオーバーライドする必要があると思いますLC_PAPER。そして、再起動せずにシステム全体でこれを更新できますか?
ファヒムミタ14

1
@FaheemMitha 環境変数を設定する最良のディストリビューション/シェルに依存しない方法は何ですか?また、Debianでシステム全体に設定する場合もあり/etc/default/localeます。これらのファイルはログイン時に有効になります。export LC_PAPER=…シェルで実行して、そのシェルから起動されたコマンドに影響を与えることができます。
ジル 'SO-悪であるのをやめる' 14
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.