端末メッセージ/警告/エラーの言語を一時的に変更する


22

私の端末のメッセージは、デフォルトではロシア語を使用して表示されます。これは私のネイティブ言語です。

少しの間、それらを英語にしたい(例えば、フォーラムに貼り付けたい)後、デフォルトの言語に切り替えます。

どのように切り替えてbashを使用して元に戻すことができますか?

回答:


23

言語設定の変更に使用できる環境変数はいくつかあります。localeコマンドを実行すると、現在のロケール設定を表示できます。すべてのロケール設定を英語に変更するには、を使用しますLANG=C。このCロケールは、追加の言語パックをインストールせずに常に使用可能です。(一時的に英語以外のロケールに変更するには、@ mklement0の投稿を参照してください。)

例:

デフォルトの言語設定でコマンドを実行し、現在のロケール設定を印刷します。

$ /nonexistent
bash: /nonexistent: Bestand of map bestaat niet
$ locale
LANG=nl_NL.UTF-8
LANGUAGE=
LC_CTYPE="nl_NL.UTF-8"
LC_NUMERIC="nl_NL.UTF-8"
LC_TIME="nl_NL.UTF-8"
LC_COLLATE="nl_NL.UTF-8"
LC_MONETARY="nl_NL.UTF-8"
LC_MESSAGES="nl_NL.UTF-8"
LC_PAPER="nl_NL.UTF-8"
LC_NAME="nl_NL.UTF-8"
LC_ADDRESS="nl_NL.UTF-8"
LC_TELEPHONE="nl_NL.UTF-8"
LC_MEASUREMENT="nl_NL.UTF-8"
LC_IDENTIFICATION="nl_NL.UTF-8"
LC_ALL=

1つのプログラムの言語を一時的にオーバーライドし、実際に一時的であることを示します。

$ LANG=C ls /nonexistent
ls: cannot access /nonexistent: No such file or directory
$ ls /nonexistent
ls: kan geen toegang krijgen tot /nonexistent: Bestand of map bestaat niet

現在のシェルで実行されるすべてのコマンドのロケールを変更し、証明を再度含めます。

$ LANG=C
$ ls /nonexistent
ls: cannot access /nonexistent: No such file or directory
$ locale
LANG=C
LANGUAGE=
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=

6
これを機能させるのに問題がある他のユーザーのために- 私のために設定するLANGLANG_ALL、まだ動作していませんLANGUAGE。参照してくださいなぜ私のために言語を変更LANG環境変数をオーバーライドしていないのですか?
gertvdijk

1
@gertvdijk:それをありがとう。設定なしでもこの答えが機能する理由LANGUAGE例外です:GNU gettextは、(有効な)値(通常、またはを介して間接的に設定される)がor(その同義語)であるLANGUAGE場合を除き、値優先します。また、この回答では未設定であることに注意してください。デフォルトで設定されていますが、設定されている場合は、それをオーバーライドして特定のロケールの言語(「C」/「POSIX」ではなく)に切り替える必要があります。あなたが見つけたもの。LC_MESSAGESLANGLC_ALLCPOSIXLANGUAGE
mklement0

あなたの答えは、「C」ロケール(必要に応じて米国英語のメッセージ)に切り替えるとうまく機能しますが、LANGUAGE明示的に設定解除またはオーバーライドしない限り、他のロケールでは機能しません。質問の一般的なタイトルを考えると、人々は英語以外の言語への切り替えを探しているこの回答を見つける可能性が高いため、この情報を回答に追加することを検討してください。
mklement0

@ mklement0質問のコンテキスト(英語のエラーメッセージの投稿)を考えると、現在の投稿で十分だと思います。LANGUAGE必要に応じて、詳細を説明する別の回答を追加できます:)
Lekensteyn

あなたが提案したように、私は自分の答えを追加しました。(複数の人がすでに積極的に指摘しているように)将来の読者が任意の言語に切り替えるためにここに来るかもしれないという私の評価に同意する場合は、質問への私の回答へのリンクを追加してください。それとは別にLANGUAGE、サンプル出力のの値をに変更することをお勧めしますnl。これは、ロケールがの場合の実際のデフォルト値ですnl_NL.UTF-8
mklement0

9

Lekensteynの有用な回答は、OPが要求したように、オンデマンドで米国英語に切り替えたい場合に最適ですが、オンデマンドで別の言語に切り替えたい場合は、さらに作業が必要です。

開始する前にsudo apt-get install language-pack-<lang-tag>、でメッセージテーブルをインストールする必要があります。ここで、<lang-tag>はスペイン語などの単純なRTF 5646言語サブタグesです。

背景情報

GNUはのgettextベースのユーティリティは非標準に優先順位を与えるLANGUAGE環境変数[1] POSIX定義ロケール環境変数上LC_ALLLC_MESSAGESおよびLANG(この順序で)。

LANGUAGEUbuntuシステムではデフォルトで設定されている[2]、つまり、単純な言語タグ(スペイン語など)または言語地域タグ(ドイツ語のドイツ語版など)を反映する値の部分文字列に設定されている場合、別の言語のメッセージを有効にするには、設定解除またはオーバーライドする必要があります。[3]LANGesde_DELANGUAGE

オプション1:設定 LANGUAGE

esアドホックスペイン語()メッセージに切り替えます:

$ LANGUAGE=es ls NoSuchFile
ls: no se puede acceder a NoSuchFile: No existe el archivo o el directorio

:などの単純な言語タグesで十分ですが、地域識別子(es_ARアルゼンチンなど)、および文字セットの接尾辞(例、es_AR.UTF-8)を追加することもできます。
ただし、ローカライズされたメッセージは言語レベルでのみ存在する可能性があり、フォールバックは言語部分(esこの場合は)に一致するメッセージを使用することです。

オプション2:LANGUAGE設定解除および設定LC_ALL

この代替ソリューションでは、まず定義を解除し LANGUAGE、次にPOSIXロケール環境変数LC_ALLを使用して暗黙的に設定しますLC_MESSAGES[4]

$ LANGUAGE= LC_ALL=es_ES.UTF-8 ls NoSuchFile
ls: no se puede acceder a NoSuchFile: No existe el archivo o el directorio

このソリューションには、すべてのローカリゼーションの側面を指定されたロケール(LC_TIME日付/時刻形式など)に設定し、(暗黙的に)設定することで、GNU 以外のプログラムに目的の言語をLC_MESSAGES通知するという利点があります。

注どのようにLC_ALL必要となる正確な、完全な(有効であるために、文字セットの接尾辞を含め、ロケール名をes_ES.UTF-8()とは異なりLANGUAGE、単純な言語タグが十分であるため、(のようなes))。設定LC_MESSSAGESとにも同じことが当てはまりますLANG。無効な/インストールされていないロケール名を指定すると、POSIXロケールにフォールバックするため、米国英語になります。


脚注

[1] Lekensteynの答えがあっても機能することの理由なしに上書き/設定解除は、LANGUAGEある例外:(有効な)場合LC_MESSAGESの値(典型的に介して間接的に設定LANG又はLC_ALL)のいずれかであるCか、(その同義語)POSIX、その値に関係なくの値の、尊重されLANGUAGE、もしあれば。逆に、(有効な)LC_MESSAGES値が他の特定のロケールである場合LANGUAGEは、優先されます。

[2]これはUbuntu固有に適用されますが、必ずしも他のフレーバーに適用されるわけではありません。Lekensteynは、Kubuntuは設定しないと述べてますLANGUAGE
おそらく、デフォルトでは設定しないLANGUAGEください。値が存在しない場合(現在のロケールを決定する)、その値によって暗示される値が尊重されるためです。 LC_MESSAGESLANG

[3]あなたはまた、いずれかの割り当てることによって、英語[米国]に切り替えるには、このアプローチを使用することができますLANGUAGE=CLANGUAGE=POSIX(、の代替としてLANG=C/ LANG=POSIXIは不明だけれどもそれは積極的に認識または単にされているかどうか、)フォールバックメカニズムこれらの値はドンことを考えると、 ' 言語タグから始めないでください。たぶん、より良い選択でしょうen_US

[4] このアプローチが機能しないエッジケースがあります:パスで実行可能ファイルを呼び出しようとすると-相対または絶対-指定された言語に切り替わりませんが、単なるファイル名
LANGUAGE= LC_ALL=es_ES.UTF-8 /path/to/no_such_utility機能しませ:メッセージを出力します(現在のロケールでは)、そうではあり
LANGUAGE= LC_ALL=es_ES.UTF-8 no_such_utilityません(スペイン語のエラーメッセージを出力します)。
理由と、これに正当な理由があるかどうかを誰かが知っている場合は、お知らせください。


この投稿の構造化に協力してくれた@ wjandreaに感謝します。
mklement0
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.