
ロケールがどのように機能するかを理解したいと思います。特に私が読んだので"-bash: 警告: setlocale: LC_ALL: ロケールを変更できません (en_US.UTF-8)"そしてhttps://askubuntu.com/questions/114759/warning-setlocale-lc-all-cannot-change-locale
私のLinux Mintでそれを行っlocale-gen fr_FR.*
た後、LC_ALL=fr_FR.UTF-8
「bash:warning:setlocale:LC_ALL:can Change locale(fr_FR.UTF-8)」が出力されました。ただし、locale
後で「LC_NAME = fr_FR.UTF-8」などが表示されるため、ロケール変数が変更されます。 「ロケールを変更できません」というメッセージが表示されるのはなぜですか?
私はLC_NAME=qq_QQ.UTF-8
(存在しませんか?ロケール)結果は同じです。警告、locale
出力が更新されました。
bash端末が起動する前に新しい割り当てが作成された場合にのみ警告が表示されます。これにより、bash -c "LC_NAME=fr_FR.UTF-8"
警告は生成されませんでした。
コマンドは以下から来ます。https://askubuntu.com/questions/114759/warning-setlocale-lc-all-cannot-change-locale sudo update-locale LANG=fr_FR
警告を削除することはできません。
現在、bashセッションが/etc/defaults/locale
別のファイルを保持していると思われるので、locale-gen
これはうまくいきません。正しいですか?strace
出力が複雑すぎて読み取れません。まだ見つかりませんでした/etc/defaults/locale
。
次に追加:
システムLinux Mint 20.2(Ubuntuベース)。 IIRClocale-gen name.*
のどこかでその行を読み、出力結果がname
正確にdone
。今回の回答とマニュアルページを読んだ後、実行locale-gen
でname.*をコメントアウトし、コメントアウトを解除してやり直してみました。実行結果は以前と同じです。/etc/locale.gen
sudo locale-gen
name.UTF-8
sudo locale-gen
locale-gen name.*
答え1
あなたの警告は、あなたが要求したロケールが実際にまだコンパイルされていないことを示します。したがって、以下を使用する必要があります。
sudo dpkg-reconfigure locales
コンパイルするロケールを選択します。
またはファイルを編集してください。
/etc/locale.gen
必要なロケールのコメントを外し、次を実行します。
sudo locale-gen
それらを生成します。
ロケール変数とは何ですか?
ロケール環境変数は、Cライブラリ()に特別な意味を与える一般的な環境変数ですglibc
。特にsetlocale(LC_ALL, "");
、これらの変数は、プログラムが呼び出しまたは同様の手段を介してローカライズ・サポートの活動化を要求するときに使用されます。この時点で、Cライブラリは/usr/lib/locale/
。
これらのローカライズされた設定はユーティリティでlocaledef
使用されます。/usr/share/locale
Debian、Ubuntu、および関連ディストリビューションでは。localedef
locale-gen
なぜlocale-gen fr_FR.*
動作しないのですか?
locale-gen
コマンドラインで引数を使用しません。/etc/locale.gen
生成するロケールを決定するためにのみ読みます。そのため、/etc/locale.gen
ファイル内のコメントされていないロケールによっては、locale-gen fr_FR.*
コマンドが期待した効果を得ることができない場合があります。
このupdate-locale
コマンドは、アップデートに使用するためのパッケージマネージャスクリプト用のツールです/etc/default/locale
。コンパイルされる実際のロケールにはまったく影響しません。