web-dev-qa-db-ja.com

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

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

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

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

22
takeshin

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

例:

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

$ /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=
23
Lekensteyn

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

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

背景情報

GNU gettext -basedユーティリティは、非標準のLANGUAGE環境変数を優先します[1] POSIX定義のロケール環境変数LC_ALLLC_MESSAGES、およびLANGを(この順序で)。

LANGUAGEがUbuntuシステムでデフォルトで設定されている場合[2]、つまり、単純な言語タグ(たとえば、スペイン語のLANG)または言語領域タグ(たとえば、ドイツ語のドイツ語バリアントのde_DE)を反映するes値のsubstring 、異なる言語のメッセージを有効にするには、LANGUAGEを設定解除またはオーバーライドする必要があります。[3]

オプション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)。
ただし、ローカライズされたメッセージはlanguageレベルでのみ存在する場合があり、フォールバックはlanguage部分に一致するメッセージを使用することです( es、この場合)。

オプション2:LANGUAGEの設定を解除し、LC_ALLを設定します

この代替ソリューションundefinesLANGUAGE最初に、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など)にallローカライズアスペクトを設定し、(暗黙的に)LC_MESSAGESを設定することでnon-目的の言語のGNUプログラム。

LC_ALLexact、fullロケール名(charsetサフィックスを含む)を有効にする方法(es_ES.UTF-8)に注意してください(LANGUAGEとは異なり、単純な言語タグで十分です(es))。 LC_MESSSAGESLANGの設定にも同じことが当てはまります。無効な/インストールされていないロケール名を指定すると、POSIXロケールにフォールバックするため、米国英語になります。


脚注

[1] Lekensteynの答えが機能する理由は、withoutunset/override LANGUAGEでもexceptionです:(有効な)LC_MESSAGES値(通常は間接的に設定) LANGまたはLC_ALLによる)は、Cまたは(その同義語)POSIXのいずれかであり、その値は、もしあればLANGUAGEの値に関係なく尊重されます。逆に、(有効な)LC_MESSAGES値が他のspecificロケールの場合、LANGUAGEが優先されます。

[2]これは buntu固有 に適用されますが、必ずしも その他のフレーバー ;には適用されません。 Lekensteynは、 KubuntLANGUAGEを設定しないnotを行うと述べています。
間違いなく、LANGUAGEはデフォルトでnotに設定する必要があります。これがない場合、LANG値(現在のロケールを決定する)によって暗示されるLC_MESSAGES値が尊重されます。

[3]このアプローチを使用して、LANGUAGE=CまたはLANGUAGE=POSIXを(LANG=C/LANG=POSIXの代わりとして)割り当てることにより、[US]英語に切り替えることもできますが、それが積極的に認識されるのか、単にfallbackメカニズム。これらの値がlanguageタグで始まらない場合。たぶん、より良い選択はen_USでしょう。

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

8
mklement0