Mac OS Xの$ LANG変数はどこで設定されますか?


24

wgetLion OS Xをインストールしてから初めて使用しましたが、wgetが母国語にローカライズされていることに気付きました。setターミナルでコマンドを実行すると、LANG変数がローカル言語を表していることがわかりました。これをどこで変更したり、wgetこの設定を無視したりできますか?

更新

これlocaleが私に与えるものです:

LANG="lt_LT.UTF-8"
LC_COLLATE="lt_LT.UTF-8"
LC_CTYPE="lt_LT.UTF-8"
LC_MESSAGES="lt_LT.UTF-8"
LC_MONETARY="lt_LT.UTF-8"
LC_NUMERIC="lt_LT.UTF-8"
LC_TIME="lt_LT.UTF-8"
LC_ALL=

したがって、非パラメーター(プロンプトやデバッグメッセージなど)のすべての出力はリトアニア語です。それが私の問題です。英語に戻したいです。

zshログインシェルとして使用しています。


問題はwget何ですか?そして、何がlocale表示され、それは言語とテキストのシステム環境設定ペインで選択した言語から期待されるものと同じですか?
bmike

回答:


26

デフォルトでは、ターミナルは、ターミナルが使用している現在選択されている言語と時刻/日付/数値形式に一致するようにロケール環境変数を設定します。

システム環境設定>言語とテキスト

(これはLionの名前です。以前のシステムでは、設定パネルの正確な名前は異なる場合があります。)

一時的な解決策は、英語を言語リストの一番上にドラッグし、ターミナルを開いて、リトアニア語を一番上に戻すことです。その後、ターミナルのみが英語になります。ただし、ターミナルを終了して再起動すると、リトアニア語にリセットされます。

永続的なアプローチは、ターミナルにロケール環境変数を設定しないように指示することです。

ターミナル>設定>設定> [プロファイル]>詳細>起動時にロケール環境変数を設定

その後、ロケールはデフォルトで言語が指定されていない「C」になり、ほとんどのプログラムはデフォルトで英語になります。

これをオフにすると、一部のプログラムはTerminalが使用している文字エンコーディングを認識せず、ASCIIまたはISO-Latin-1のみであると想定することに注意してください。そのため、ターミナルがUTF-8(デフォルト)を使用している場合、それらのプログラムは必要に応じて動作する場合と動作しない場合があります。

これがほとんどの場合wget、デフォルト設定プロファイルのコピーを作成し、カスタムプロファイルのロケール設定をオフにし、使用時にそのプロファイルのみを使用することをお勧めします。これにより、wgetUTF-8を引き続き完全にサポートできます。他のプログラムを使用する場合、デフォルト設定を使用します。

他の人が述べたように、ターミナルからシェル起動スクリプトで提供される初期ロケール設定を上書きすることもできます。zshの場合は、〜/ .zshrcに配置します。bashの場合は、〜/ .bashrcを使用します(まだ持っていない場合は、〜/ .bashrcを実行する〜/ .bash_profileを作成します)。

各ロケール環境値の詳細については、x-man-page:// 1 / localeを参照してください。

ただし、単にunset LANG「C」に設定した場合、通常はすべてのシェルとプログラムに適用されますが、ほとんどの場合、おそらくUTF-8を使用して、ターミナルに一致するようにロケール変数を設定します。最高レベルの協力、忠実性、機能性を得るために。

したがって、そのルートに行く場合は、エンコード情報(「UTF-8」)を保持し、言語を単に英語にするように、初期値を置き換えるのではなく、編集するコードを作成することをお勧めします。変数を「C」に設定するのではなく。

たとえば、これはzshおよびbashで機能します。

# Replace Lithuanian with English
export LANG=${LANG/lt_LT/en_US}

場合LANG="lt_LT.UTF-8"、これはに変更されLANG="en_US.UTF-8"ます。wgetこれをテストすることはできませんが、これで十分です。

この方法で行うことは、ターミナルで文字エンコードの設定を変更しても、シェル起動スクリプトでそれを上書きしないことを意味します。


うまくできました。LANG再定義コマンドを一般化するには:echo ${LANG/*./en_US.}現在のカルチャ名をen_US 、それが何であるかに関係なく置き換えます。で動作しますbashkshzsh
mklement0

7

ここに設定されています...

ここに画像の説明を入力してください

プルダウンのオプションを増やしたり減らしたりする場合は、[ エンコード ]タブに移動して、さらに多くの報奨金を表示します。


3
OS Xでは、bashrcではなく〜/ .bash_profileです。オンラインチュートリアルを読んでいるとき、人々はこれに非常に混乱しました。
エンリコスサティョー

まあそれをキャッチ-それをキャッチしてくれてありがとう。オープンソースのページに行って、Appleがgnu bashに変更を加えてもまだ間違っているかどうかをチェックしました。(私の答えを編集-ありがとう@the_great_monkey)
bmike

4
ターミナルは、〜/ .bash_profileを実行するログインシェルを作成します。ただし、ほとんどのユーザーカスタマイズは、非ログインシェル(サブシェルなど)にも適用されるように〜/ .bashrcに配置する必要があり、〜/ .bash_profileは〜/ .bashrcを実行してログインシェルに適用する必要があります。通常、〜/ .bash_profileはほとんど空で、ユーザーがサブシェルで実行したくないトップレベルのログインシェル専用のコードのみが含まれています。
クリスページ

1
「manページを簡単に読むと、シェルがログインするたびにこの値を設定することがわかります」bashのmanページにはそれが記載されていますが、Terminalは初期値を設定します。「ロケール環境の設定…」設定をオフにすると、変数は設定されず、ロケールが表示さLANG=れ、その他の値はすべてデフォルトになり"C"ます。
クリスページ

2

ターミナルを起動するたびにロードされる.profileファイルに言語を設定することで、この問題を解決しました。

export LANG="en_US.UTF-8"
export LC_ALL="POSIX"

LC_ALLオーバーライドLANGするため、最初のコマンドは効果がありません。
mklement0

また、POSIXと同等でCあり、Unicodeにはまったく対応していません。
セバスチャングラフ

1

Linuxの経験に基づいて、LC_LANGでローカライズを完全に変更したくないが、英語のシステムメッセージだけが必要な場合は、設定するだけです。

LC_COLLATE=C    (to have standard sorting in ls, etc)
LC_CTYPE=en_US.UTF-8

LC_MESSAGES出力する言語メッセージを制御する変数です(インストールされている場合)。
mklement0

0

フランス語のdebianサーバーとmacsox bashクライアントを使用して、これをmacosxのユーザーディレクトリの.bash_profileに追加する必要がありました。

LANG = fr_FR.UTF-8をエクスポート

解決しました。


0

他の答えは正しいです。すなわち、起動時およびシェルの使用時にロケール環境変数をTerminal設定するための設定についてです。ただし、理解する価値のある別の方法があります。特に、リモートログインが原因で「問題」が発生する場合です。/etc/profilessh

OpenSSH(Linux、BSD、およびmacOSで使用)は、クライアントの環境からサーバーが起動するシェルに環境変数を送信できます。クライアントがそれらを送信するように構成され、サーバーがそれらを受け入れるように構成されている場合にのみ、これを行います。クライアント(~/.ssh/config)には次のものが必要です。

SendEnv LANG LC_*

サーバー(/etc/ssh/sshd_config)には次のものが必要です。

AcceptEnv LANG LC_*

両方が適切に配置されている場合、クライアントのローカルはsshサーバーのログインシェルに伝播されます。

$ ssh me@my-mac locale
LANG="en_GB.UTF-8"
LC_COLLATE="en_GB.UTF-8"
LC_CTYPE="en_GB.UTF-8"
LC_MESSAGES="en_GB.UTF-8"
LC_MONETARY="en_GB.UTF-8"
LC_NUMERIC="en_GB.UTF-8"
LC_TIME="en_GB.UTF-8"
LC_ALL=

必要なサーバー設定は、Snow Leopardのデフォルトではありません。それは上があるシエラ。変更した後は、必ずSSHサーバーを再起動してください/etc/sshd_config!!!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.