Perlからのロケール設定警告を修正する方法は?


596

を実行するとperl、次の警告が表示されます。

perl:警告:ロケールの設定に失敗しました。
perl:警告:ロケール設定を確認してください:
    LANGUAGE =(未設定)、
    LC_ALL =(未設定)、
    LANG = "en_US.UTF-8"
システムでサポートおよびインストールされています。
perl:警告:標準ロケール( "C")にフォールバックします。

どうすれば修正できますか?


エラーメッセージがあなたに言ったようにロケール設定をチェックしたとき何が起こりましたか?
ブライアン・ド・フォイ2010年

3
ロケールをインストールする代わりに、ロケールを変更することもできます。私のUbuntuボックスでは、これは1人のユーザーのために編集することによって行われます~/.pam_environment
Janus Troelsen

Ubuntuを実行しているODROID-C1での問題は、確かに〜/ .pam_environmentファイルでした。一部の変数は、en_US.UTF-8ではなくes_US.UTF-8でした。ありがとうございました。
f1vefour 2015

Cygwin \ Babunでこれを入手しました。perlの再インストールのみで修正されました。
Lucas Soares

回答:


449

あなたのOSはを知りませんen_US.UTF-8

特定のプラットフォームについては言及していませんが、問題を再現できます。

%uname -a
OSF1 hunter2 V5.1 2650 alpha
%perl -e exit
perl:警告:ロケールの設定に失敗しました。
perl:警告:ロケール設定を確認してください:
    LC_ALL =(未設定)、
    LANG = "en_US.UTF-8"
    システムでサポートおよびインストールされています。
perl:警告:標準ロケール( "C")にフォールバックします。

私の推測では、sshを使用して、新しいデスクトップマシンからこの古いホストに接続しています。/etc/ssh/sshd_configを含むことは一般的です

AcceptEnv LANG LC_*

これにより、クライアントはこれらの環境変数の値を新しいセッションに伝播できます。

警告は、フルロケールを必要としない場合にそれをスケルチする方法についてのヒントを提供します。

%env LANG = C perl -e exit
%

またはbashで:

$ LANG = C perl -e exit
ドル 

恒久的な修正を行うには、次のいずれかを選択します

  1. 古いホストLANGで、シェルの初期化ファイルに環境変数を設定します。
  2. クライアント側でのご使用の環境を変更し、例えば、ではなくssh hunter2、コマンドを使用しますLANG=C ssh hunter2
  3. 管理者権限がある場合SendEnv LANG LC_*は、ローカル /etc/ssh/ssh_configファイルの行をコメントアウトして、sshが環境変数を送信しないようにします。(この回答に感謝します。詳細については、OpenSSHのバグ1285を参照してください。)

22
ありがとう!gitを使用してサーバーに接続すると、このエラーメッセージが表示されました。de_CH.UTF-8(そこではサポートされていませんが、ローカルで使用されていました)を追加した後dpkg-reconfigure locales、メッセージが消えました。
Simon A. Eugster 2012年

82
私はこの問題を古くから受けていました... sshd_configから "AcceptEnv LANG LC_ *"を削除すると、ようやく解決しました。ヒントをありがとう!
madc

2
@Greg Bacon、たとえば/ etc / environmentファイルを作成して、システム全体に環境変数を設定したい場合もないでしょうか?help.ubuntu.com/community/...
fraxture

25
@HermannIngjaldsson、少なくともUbuntu(12.10)では、サーバーを再起動する必要はありませんでした( "AcceptEnv LANG LC_ *"を削除した後)。私はssh config:をリロードしただけで、ほんの一瞬でservice ssh reload、現在のsshセッションが終了することすらありません。
noamtm 2014

3
問題を解決するには、クライアントシステムで「export LC_ALL = C」を追加し、次に「source〜/ .bashrc」を追加します。
EffectiveMatrix

476

Mac OS Lion(10.7)またはCygwin(Windows 10)で解決する方法は次のとおりです。

ホストマシンのbashrcまたはbash_profileに次の行を追加します。

# Setting for the new UTF-8 terminal support in Lion
export LC_CTYPE=en_US.UTF-8
export LC_ALL=en_US.UTF-8

zshを使用している場合は、zshrcを編集します。

# Setting for the new UTF-8 terminal support in Lion
LC_CTYPE=en_US.UTF-8
LC_ALL=en_US.UTF-8

6
おかげで、私はこの問題の解決策を長い間検索してきましたが、Ubuntuサーバーの構成に問題があるといつも思っていました。解決策はなかったようです(すべてのdkpg-reconfigureもの(
Teemu

5
LC_ALL他のすべての変数を上書きするため、ではなく、のLANG=de_AT.UTF-8ような個々の変数を設定しますLC_MESSAGES=en_US.UTF-8。変数が設定されていない場合は、にフォールバックしLANGます。あなたもできます。unset LC_CTYPE強制的ににフォールバックしLANGます。
David

4
それらの行を.bashrcに配置することはできませんでしたが、bash_profileはそれを解決しました!ファイルを作成する必要がありました。
Hermann Ingjaldsson 2013年

5
これらの行を入れて~/.bashrc解決しました...次に、リロードする必要がありsource ~/.bashrcます... Thnks <3
Enissay

5
おかげで、この仕事をZSHに微細かつOH-MY-zshのプラグインのMac OS Xエルキャピタンの下で、〜/ .zshrcの下部にある:LC_CTYPE = EN_US.UTF-8 LC_ALL = EN_US.UTF-8
ヴァレリオ・スキアヴォーニ

207

debootstrapを使用してrootfsを作成している場合は、ロケールを生成する必要があります。これを実行するには、次のコマンドを実行します。

# (optional) enable missing locales
sudo nano /etc/locale.gen

# then regenerate
sudo locale-gen

このヒントは、https://help.ubuntu.com/community/Xenからのものです


28
これは私にとって本当の修正です。
Afriza N. Arief 2013年

6
locale-genは引数を取りません(少なくともDebianでは安定しています)。代わりに、/ etc / locale.genを編集して必要なロケールのコメントを外し、sudo locale-genを実行します
Sam Watkins

2
修正済みUbuntu Server
Paschalis、2015

5
Debianでは、$ echo en_US UTF-8 >> /etc/locale.gen最初に行う必要がある場合があります。
2015年

1
Gentooでは(少なくとも)、locale-gen引数を取らない。から読む/etc/locale.gen
ピストス2016

142

使用する:

export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export LC_CTYPE=en_US.UTF-8

Debianで動作します。理由はわかりませんが、locale-genには結果がありませんでした。

重要!これは一時的な解決策です。セッションごとに実行する必要があります。


13
これは私のために働いた。.bashrcファイルに入れました。
Anirudh Ramanathan 2014

2
私も働いた。Perlの警告で設定されていないように見える2つの設定(LANGUAGEとLC_ALL)を設定するだけでした
laurent

2
Debianでは、local-genでコメント化されていないロケールのみを処理し/etc/local.genます。echo en_US UTF-8 >> /etc/locale.gen最初に行う必要がある場合があります。
2015年

これは私のためにElementary OS Freaya(Ubuntuベース)で機能しました
valkirilov

1
LC_ C TYPEは可能性がありますか?
ミクセル2016

139

これは通常、Linuxボックスでロケールを適切に設定していないことを意味します。

DebianまたはUbuntuでは、それはあなたがする必要があることを意味します

$ sudo locale-gen
$ sudo dpkg-reconfigure locales

man locale-genも参照してください。


30
ここでは問題を修正していません
Somatik 2012

6
dpkg-reconfigureロケール-私の問題を修正しました、debian 7.1
newUserNameHere

4
dpkg-reconfigureロケール自体が失敗し、最初に修正しようとしているのと同じperlロケールのエラーメッセージが表示されます!!!!
matteo 2014

10
私が最初に欠落しているロケールを追加する必要がありましたが、これは、Ubuntuの14.04で私のために働いたsudo locale-gen es_UY.UTF-8
アルフ

2
@matteo初めて、エラーを修正する前。もう一度お試しください。修正する必要があります。
Zero3、2015

92

macOSおよびMac OS Xユーザーのみ

Gitの使用中に同じ警告が表示されました

この警告を解決するにはオプションをオフにしSet locale environment variable on startup、端末を再起動します。以下のスクリーンショットは私の端末設定を表しています。

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


3
うわー、とてもシンプルで問題が解決しました!ありがとう!
Michal

3
私は他のすべてを試しましたが、これは私のためにそれをしました。iTermを使用していますが、同じ文字エンコードオプションがあります。
Michael Morrison、

2
残念ながら、これはZSHを壊します(タブは機能しなくなりました)
クリスチャン

1
これは完全にMac OSのトリックです。ちなみに、これはmacOS Sierraにアップグレードした直後に起こりました。そして、これは私のためにこの問題を修正しました。
Paulo Malvar 2016年

1
これで問題が解決しました。SierraからMac OS X High Sierraにアップデートした後、それは私に起こり始めました。
Lucian Irimie

36

Ubuntuでの簡単な修正です。ロケールを最初から生成し、コマンドラインから次のコマンドを実行する必要があります。

sudo locale-gen en_US en_US.UTF-8
sudo dpkg-reconfigure locales

これにより、ロケールが作成され、それらが再構成されます。


これを使用しても問題なく動作しましたpt_BR pt_BR.UTF-8-ありがとう。
Marcos Freitas 2017年

29

/etc/environmentDebianとUbuntuでの問題を修正するために以下を追加します(もちろん、使用するロケールに合わせて変更します)。

LANGUAGE=en_US.UTF-8
LC_ALL=en_US.UTF-8
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8

7
..でのロケールの設定/etc/environmentは非推奨であり、代わりにで設定する必要があるという警告が表示されました/etc/default/locale。どちらも今のところ機能しているようです。
joscarsson 14

する必要がありますLC_CTYPE
aexl

25

私は今これを使っています:

$ cat /etc/environment
...
LC_ALL=en_US.UTF-8
LANG=en_US.UTF-8

次に、SSHセッションからログアウトして、再度ログインします。

古い答え:

これだけが私を助けました:

$ locale
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE=en_US.UTF-8
LC_NUMERIC=ru_RU.UTF-8
LC_TIME=ru_RU.UTF-8
LC_COLLATE="en_US.UTF-8"
LC_MONETARY=ru_RU.UTF-8
LC_MESSAGES="en_US.UTF-8"
LC_PAPER=ru_RU.UTF-8
LC_NAME=ru_RU.UTF-8
LC_ADDRESS=ru_RU.UTF-8
LC_TELEPHONE=ru_RU.UTF-8
LC_MEASUREMENT=ru_RU.UTF-8
LC_IDENTIFICATION=ru_RU.UTF-8
LC_ALL=

$ sudo su

# export LANGUAGE=en_US.UTF-8
# export LANG=en_US.UTF-8
# export LC_ALL=en_US.UTF-8

# locale-gen en_US.UTF-8
Generating locales...
  en_US.UTF-8... up-to-date
Generation complete.

# dpkg-reconfigure locales
Generating locales...
  en_AG.UTF-8... done
  en_AU.UTF-8... done
  en_BW.UTF-8... done
  en_CA.UTF-8... done
  en_DK.UTF-8... done
  en_GB.UTF-8... done
  en_HK.UTF-8... done
  en_IE.UTF-8... done
  en_IN.UTF-8... done
  en_NG.UTF-8... done
  en_NZ.UTF-8... done
  en_PH.UTF-8... done
  en_SG.UTF-8... done
  en_US.UTF-8... up-to-date
  en_ZA.UTF-8... done
  en_ZM.UTF-8... done
  en_ZW.UTF-8... done
Generation complete.

# exit

$ locale
LANG=en_US.UTF-8
LANGUAGE=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8

これはUbuntu 15.04ではうまくいきました。
Goke Obasa 2016年

22

Debianで多くの検索を行った後、これでうまくいきました。

最初:

sudo apt-get purge locales

次に:

sudo aptitude install locales

そして有名な:

sudo dpkg-reconfigure locales

これにより、システムのロケールが取り除かれ、ロケールが再インストールされ、libc6が2.19から2.13にダウングレードされます。これが問題です。次に、ロケールを再度構成します。


4
dpkg-reconfigure locales必要なのはこれだけです sudoあなたがsudoタイプの男なら、またはrootとしてそれをやってください。次に、シェル環境にあるものに従ってロケールを選択します。
mknaf 2014年

6
dpkg-reconfigureロケールは必要なすべてのものである必要があります。それを100回試し、インターネットを見回した後、それがあなたが見たすべてであり、問​​題がまだ解決しない場合は、上記を試してください。その後、戻ってこれに賛成票を投じます。:)
tkjef 2014年

1
最後に、この問題に対する非ハックの答え、間違いなく受け入れられるべきです!
php_nub_qq

17

これは簡単な答えです。再起動後に未設定でないロケールを設定します。まずbashファイルを開いて編集します。

nano .bashrc

次の行をファイルに追加します。

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

bashをリロードして変更をアクティブ化します。

source ~/.bashrc

試験結果 :

locale

Raspbianとubuntuサーバー16.04で私のために動作する唯一のもの:)
Liso

13

Ubuntuの場合、これを使用します。

#export LANGUAGE=en_US.UTF-8
#export LC_ALL=en_US.UTF-8
#export LANG=en_US.UTF-8
#export LC_TYPE=en_US.UTF-8

私のために働いた。


また、ファイル内のすべてのコンテンツを削除し/etc/default/locale、変数の定義のみを入れて(exportという単語を削除して)、サーバーを再起動することで、私にとってもうまく
いきました

12

あなたが使用している場合はMac OS Xのv10 SP1のサーバーのLinuxに接続するために上記(ヨセミテ)または、次の手順を試すことができます。

  1. ファイル/ etc / ssh / sshd-configを元のままにします

  2. 〜/ .bash_profileを付けます

    export LANG="en_US"
    export LC_ALL=$LANG.UTF-8
  3. 走る

    dpkg-reconfigure locales

    そして「en_US.UTF-8」を選択します


10
sudo nano /etc/locale.gen

使用するロケールのコメントを外します(例:)en_US.UTF-8 UTF-8

次に実行します:

sudo /usr/sbin/locale-gen

出典:http : //people.debian.org/~schultmc/locales.html


私が米国で働いている会社は、国際的な顧客を持つgitサーバーをホストしています。GBの観衆は、sshを介したgitクローンにはロケールの違いが原因で問題が発生すると不満を述べました。これはサーバーに適用され、この問題を修正しました。
Therealstubot 2018

10

/etc/default/localeログアウト、ログインでロケールを適切に設定してから、通常のコマンドを実行する必要があります

root@host:~# echo -e 'LANG=en_US.UTF-8\nLC_ALL=en_US.UTF-8' > /etc/default/locale
root@host:~# exit
local-user@local:~$ ssh root@host
root@host:~# locale-gen en_US.UTF-8
root@host:~# dpkg-reconfigure locales

4
これらの手順は私のために働いた(Ubuntuサーバー14.04)。主なポイントは、ログアウトして再度ログインすることでした。
liberborn

9
perl: warning: Falling back to the standard locale ("C").
locale: Cannot set LC_ALL to default locale: No such file or directory

解決:

これを試してください(uk_UA.UTF-8が現在のロケールです。たとえば、en_US.UTF-8などのロケールを記述してください)。

sudo locale-gen uk_UA.UTF-8

この。

sudo dpkg-reconfigure locales

これを実行して再インストールした後、これで私の問題が解決されたことに感謝します。
madprops 2016

8

私にとっては、.bashrcファイルを編集してこのエラーを修正し、エクスポートを追加します。最初のコメントの後に追加します。

言語サポートを追加します。

export LANGUAGE=en_US.UTF-8
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export LC_TYPE=en_US.UTF-8

親切なRegads、


6

正しいロケールを追加~/.bashrc~/.bash_profile/etc/environmentなどの問題を解決する、それはからの設定を上書きして、しかし、それは、推奨されていない/etc/default/locale、最高の状態で混乱して、最悪で一貫して適用されていないロケールにつながる可能性があります。

代わりに、/etc/default/locale次のように直接編集する必要があります。

LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE=en_US

変更は次回ログインしたときに有効になります。次の/etc/default/localeようにソースすることにより、既存のシェルで新しいロケールを取得できます。

$ . /etc/default/locale

1
このステップの後にシステムを再起動する必要があります
Ghanshyam Bagul

あなたは、単に「/etc/locale.gen」で目的のロケールにコメントすることができ、次に実行しますlocale-gen
デイブEveritt

5

MacOS High Sierra上のiTerm2.appからDigitalOceanまたはその他のクラウドホスティングプロバイダーに接続していて、一部のコマンドでこのエラーが発生する場合:

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
    LANGUAGE = (unset),
    LC_ALL = (unset),
    LC_CTYPE = "UTF-8",
    LANG = "en_US.UTF-8"
  are supported and installed on your system.
perl: warning: Falling back to a fallback locale ("en_US.UTF-8").

これで問題が解決しました:

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

私はこのスレッドが古いことを知っていますが、多分誰かがこれが役に立つと思うでしょう。これがいらいらすることがあるのを知っています。


うん、iterm2ではこの設定でした!ありがとう!
Brian Olsen、

4

受け入れられた答えに従ってください:

LANG = C ssh hunter2。

LC_ALL = C ssh hunter2

クライアント側で私のためにトリックをしました。


OSX 10.10.3で動作しましたが、「LANG = C」だけでは不十分でした。アレックス、ありがとう!
クリスチャン

4

zsh ohmyzshでこれをに追加しました.zshrc

 # You may need to manually set your language environment
 LANGUAGE=en_US.UTF-8
 LANG=en_US.UTF-8
 LC_CTYPE=en_US.UTF-8
 LC_ALL=en_US.UTF-8

行を削除することにより export LANG=en_US.UTF-8

新しいタブを再度開いてSSHで接続し、私のために働いた:)


3

に追加LC_ALL="en_GB.utf8"/etc/environmentて再起動します。それで全部です。


2

いつものように、悪魔は細部に...

のMac OS X v10.7.5(ライオン)、いくつか修正するDjangoの私の中で、エラーを~/.bash_profileIとしましセット:

export LANG=en_EN.UTF-8
export LC_COLLATE=$LANG
export LC_CTYPE=$LANG
export LC_MESSAGES=$LANG
export LC_MONETARY=$LANG
export LC_NUMERIC=$LANG
export LC_TIME=$LANG
export LC_ALL=$LANG

そして、長い間、Perlを使用しているときにその警告を受けました。

悪い!後で気づいたように、私のシステムはen_US.UTF-8!から変更するだけで修正しました

export LANG=en_EN.UTF-8

export LANG=en_US.UTF-8


2

以前のすべての答えは間違っています。メッセージは明確です-ロケールがありません。解決策は、適切なロケールを追加することです。/etc/locale.genファイルを編集して、不足していると報告されているロケールの前にある#記号を削除して、次のコマンドを発行します。

$ sudo locale-gen

これは実際に/etc/locale.genで指定されたロケールを生成するため、メッセージは表示されません。


これは単に答え、私のために古代のDebian(6)に取り組みました。残りはすべて非常に複雑で、少し軌道がずれています。
Dave Everitt

2

私の場合、debian8.6では、次の設定を変更する必要がありました。

/etc/ssh/ssh_config ために #AcceptEnv LANG LC_*

そしての sshd_configために#SendEnv LANG LC_*

次に、sshサービスを再起動します。

やっとやった

locale-gen en_US.UTF-8 そして dpkg-reconfigure locales


2

不足しているロケールを.bash_profileに追加します

echo "export LANGUAGE=en_US.UTF-8
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8">>~/.bash_profile

次に、.bash_profileを入手します

source ~/.bash_profile


1

sshデフォルトでLCロケール変数を上書きします。を参照してください/etc/ssh/sshd_config

AcceptEnv LANG LC_*

したがって、ローカルシェルでこれらの変数を設定する必要があるかもしれません。


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