LC_ALLを設定せずにLC_ *を設定します


14

ドイツ語(オーストリア)ロケール(A4用紙サイズ、24時間制、yyyy-mm-dd)が必要ですが、英語のユーザーインターフェイス(翻訳が苦手なのは好きではありません)。これを実現する正しい方法は、LC_変数を次のように設定することだと考えました.bashrc(間違っている場合は修正してください)。

LC_MESSAGES=en_US.UTF-8
LC_$everythingelse=de_AT.UTF-8

すべての値を設定するのではなく、LC_ $ everythingelseを設定するよりエレガントな方法はありますか?LC_ALLの設定は、LC_MESSAGESよりも優先されるため、オプションではありません。

$ export LC_ALL=de_AT.UTF_8
$ export LC_MESSAGES=en_US.UTF_8
$ echo $LC_MESSAGES
en_US.UTF_8
$ locale | grep LC_MESSAGES
LC_MESSAGES="de_AT.UTF_8"

PS:それは共有マシンであり、私はsudoerではないので、システム全体の設定を変更することはオプションではありません。

回答:


16

ロケール設定¹には3つのセットがあります¹:

  • LANG、カテゴリの値を指定していない場合のフォールバック設定。ユーザーがロケールを簡単な方法で示すことを目的としています。
  • LC_xxxカテゴリごとに(xxxすることができMESSAGESTIMEなど)。
  • LC_ALLすべての設定を上書きします。通常C、さまざまなコマンドが既知の形式で出力を生成するように、既知のロケール(通常はデフォルトロケール)で動作するために、アプリケーションがすべての設定をオーバーライドする方法です。

したがってLANG=de_AT.UTF-8、and を設定できますLC_MESSAGES=CCデフォルトのロケールであり、未翻訳を意味します。en_US通常Cはメッセージの場合と同じです)。

ただし、デフォルトを変更することをお勧めしません。2つのカテゴリがあります。多くのプログラムが動作しないためです。

  • LC_COLLATE文字の照合順序です。文字列のソート方法ではなく、文字のソート方法のみを示すため、あまり有用ではありません。文字列のソート方法を知っているツールは使用しませんLC_COLLATE。さらに、多くのツールは「[a-z]26個のASCII小文字すべてに一致し、他のASCII文字には一致しない」などのことを想定していますが、ほとんどのデフォルト以外のロケールではそうではありません(try echo B | LC_COLLATE=en_US grep '[a-z]')。
  • LC_NUMERIC数字の表示方法を示します。特に、多くの言語では、小数点としてでは,なく浮動小数点数を使用します.。しかし、数値を解析するほとんどのプログラムは、a .を予期し,、aをフィールド区切り文字として扱います。

だから私はお勧めします

  • 明示的にLC_COLLATE=C LC_NUMERIC=_C
  • または残しLANG解除のみ(便利なカテゴリの値が設定されLC_MESSAGESLC_TIMELC_PAPER、プラスLC_CTYPE(値は端末によって異なる場合がありますが))。

¹ プラスLANGUAGEのGNU libcのと。あなたがそれについて聞いていなかったなら、あなたは多くを見逃していない。


詳細な回答と説明をありがとう!ただし、ドイツ語キーボードのテンキーに,.(残念ながら)の代わりがあるため、ローカライズされたLC_NUMERICを試してみます。そのため、数字をドットで入力するのは不便です(ほとんどのアプリは非標準のLC_NUMERICでうまく動作するようです)。LC_COLLATEの例を完全に理解していない:私のシステムでは、あなたが与えた例一致しませB
ハインジ


10

manページのロケール(7)は言います:

デフォルトのロケール[...]は、次の手順を使用して決定されます。

  1. NULL以外の環境変数LC_ALLがある場合、LC_ALLの値が使用されます。

  2. 上記のカテゴリ[LC_ *]のいずれかと同じ名前の環境変数が存在し、nullでない場合、その値はそのカテゴリに使用されます。

  3. NULL以外の環境変数LANGがある場合、LANGの値が使用されます。

そのため、LANGをLC_ALLの優先順位の低い類似物として使用できます。LANGの値をde_ATLC_MESSAGESに設定しますen_US

$ env LC_MESSAGES=en_US.UTF-8 LANG=de_AT.UTF-8 locale | egrep '(MESSAGES|PAPER)'
LC_MESSAGES=en_US.UTF-8
LC_PAPER="de_AT.UTF-8"
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.