LC_*を設定しますが、LC_ALLは設定しません

LC_*を設定しますが、LC_ALLは設定しません

私はドイツ語(オーストリア)のロケール(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ではないため、システム全体の設定を変更することはできません。

ベストアンサー1

3つのロケールセットがあります1:

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

LANG=de_AT.UTF-8したがって、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_MESSAGES、、、プラス記号(LC_TIME対応する値は端末によって異なる場合があります))を設定します。LC_PAPERLC_CTYPE

プラス記号1個LANGUAGEGNU libcで。聞いたことがないと、あまり見逃したことではありません。

おすすめ記事