環境
Rocky Linux 8
事象
dnf check
や
dnf info
した際に
Failed to set locale, defaulting to C.UTF-8
っていうメッセージが出力される。↓
# dnf check
Failed to set locale, defaulting to C.UTF-8
#
原因
ロケールの設定が悪い。
デフォルトは、「C.UTF-8」ですよー。
と言われてる(怒られてる)。
「C.UTF-8」っていうのは、「C」と「UTF-8」に分解すると、
- 「C」・・・アメリカ英語
- 「UTF-8」・・・文字コードがUTF-8
ってこと。
locale
コマンドで、(localじゃなくlocale)確認すると、
# locale
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=ja_JP.UTF-8
LC_CTYPE="ja_JP.UTF-8"
LC_NUMERIC="ja_JP.UTF-8"
LC_TIME="ja_JP.UTF-8"
LC_COLLATE="ja_JP.UTF-8"
LC_MONETARY="ja_JP.UTF-8"
LC_MESSAGES="ja_JP.UTF-8"
LC_PAPER="ja_JP.UTF-8"
LC_NAME="ja_JP.UTF-8"
LC_ADDRESS="ja_JP.UTF-8"
LC_TELEPHONE="ja_JP.UTF-8"
LC_MEASUREMENT="ja_JP.UTF-8"
LC_IDENTIFICATION="ja_JP.UTF-8"
LC_ALL=
上記の状況から、以下2点が分かる。
- LC_ALLが設定されていない
- ja_JP.UTF-8 が見つからないので設定できないよーとのエラー
対応
選択肢は以下の2つ。
- ロケールをC(アメリカ英語)にしてしまう
- 日本語パックをインストールする
全部のロケールをC(アメリカ英語)にする場合
export LANG=C
ちなみにLANGじゃなくて
LC_ALL にロケールを設定すると、すべてパターンでここで設定したロケールを優先して使う。
ので、それを理解した上で、ロケール統一するならここに設定してしまう。
ロケール設定の優先順位は3段階あって、
- LC_ALL・・・最強
- LC_各項目・・・時点
- $LANG・・・最弱。だがここで設定するパターンが最も多いと思う
なので、アメリカ英語に全統一するなら、
強力なやり方:
export LC_ALL=C
一般的なやり方:
export LANG=C
恒久的に対応するなら、~/.bash_profileに記述する。
(.bashrcでも動くが、環境変数は.bash_profileにしときたい。その辺はここがめちゃわかりやすい)
LANG=Cの「C」とは、システムのデフォルトを使うよということ
Cがなんでアメリカ英語なのよ?
とちょびっとだけ思ったが、システムのデフォルトの言語(=アメリカ英語)を使う、ということなんですな。
LANG=Cにすると、日本時間じゃなくなる?…なんてことにはならない
すべてということは、LC_TIME → 日時もアメリカになってしまうのか?
と思ったが、これは、表示だけの問題なので、日時がアメリカ時間にずれるということはない。
時刻の設定とロケールは関係ないです。時刻の設定に関係するのは、タイムゾーンです。
出典:teratail
ということ。
実際に試してみた。
$ date
2022年 5月 27日 金曜日 10:52:23 JST
↓
$ export LC_TIME="C"
↓
$ date
Fri May 27 10:53:23 JST 2022
日本語パックをインストールする場合
dnf install langpacks-ja.noarch
今回はこれで対応した。
日本語にしたほうがチームのメンバーの分かりやすいやろし。
その他参考にした記事
yumコマンドでFailed to set locale, defaulting to Cとなった時の対応方法 - Qiita
環境Dockerで作成したコンテナCentOS Linux release 7.7.1908 (Core)CUI : Xfcexfce4-terminal 0.8.7.4事象 : yum…
「ロケール環境変数」の種類と優先順位まとめ【LC_ALL・LC_*・LANG・LANGUAGE】
Linuxにおいて、アプリやコマンドが処理/出力する言語および時刻や日付、通貨などのフォーマットは、「ロケール」により決定されます。そしてロケールは「ロケール環境変数」によって設定されています。このページでは、ロケール環境変数の種類と、優先
⇒シェル変数と環境変数について。分かりやすかったです!
ありがとうございましたー
コメント