Failed to set locale, defaulting to C.UTF-8 って出力された

Linux
スポンサーリンク

 

環境

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段階あって、

  1. LC_ALL・・・最強
  2. LC_各項目・・・時点
  3. $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において、アプリやコマンドが処理/出力する言語および時刻や日付、通貨などのフォーマットは、「ロケール」により決定されます。そしてロケールは「ロケール環境変数」によって設定されています。このページでは、ロケール環境変数の種類と、優先

 ⇒シェル変数と環境変数について。分かりやすかったです!

 

ありがとうございましたー

 

 

 

 

 

 

 

コメント