"bash: 警告: setlocale: LC_ALL: ロケールを変更できません" - 誤解を招くか?どういう意味ですか?

ロケールがどのように機能するかを理解したいと思います。特に私が読んだので"-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.gensudo locale-genname.UTF-8sudo locale-genlocale-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/localeDebian、Ubuntu、および関連ディストリビューションでは。localedeflocale-gen

なぜlocale-gen fr_FR.*動作しないのですか?

locale-genコマンドラインで引数を使用しません。/etc/locale.gen生成するロケールを決定するためにのみ読みます。そのため、/etc/locale.genファイル内のコメントされていないロケールによっては、locale-gen fr_FR.*コマンドが期待した効果を得ることができない場合があります。

このupdate-localeコマンドは、アップデートに使用するためのパッケージマネージャスクリプト用のツールです/etc/default/locale。コンパイルされる実際のロケールにはまったく影響しません。

おすすめ記事