私はArch Linuxを使用していますが、wikiの指示に従ってロケールを設定しました。
実行するほぼすべてのプログラムは、ロケールについてさえ文句を言いますlocale
。次のようになります。
% locale
locale: Cannot set LC_ALL to default locale: No such file or directory
LANG=
LC_CTYPE=en_US.UTF-8
LC_NUMERIC=en-US
LC_TIME=en-US
LC_COLLATE="POSIX"
LC_MONETARY=en-US
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT=en-US
LC_IDENTIFICATION="POSIX"
LC_ALL=
または:
% perl
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = (unset),
LC_ALL = (unset),
LC_TIME = "en-US",
LC_NUMERIC = "en-US",
LC_MONETARY = "en-US",
LC_MEASUREMENT = "en-US",
LC_CTYPE = "en_US.UTF-8",
LANG = (unset)
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C")
少しわかりにくいのは、/etc/locale.gen
いくつかの例があることです。すべてのUTF-8行には「something.UTF-8」があり、実行中locale-gen
は実行en_US.UTF-8... done
中のlocale -a
ショーが表示されますが、利用可能なロケールショーが表示されるはずですen_US.utf8
。私は、両方の形式のさまざまな組み合わせを試してみた/etc/locale-gen
とLOCALE=
して/etc/rc.conf
、何も問題は解決していません。
追加情報:
% locale -a
C
POSIX
en_US
en_US.iso88591
en_US.utf8
Bruce Edigerの設定LANG=C
と提案の提案LC_ALL=en_US.UTF-8
(実際、設定はLC_ALL
修正されましたが、設定LANG
は重要ではありませんでした)が、何が起こっているのか知りたいです。SUSによると、LC_ALLは、nullではなく設定されている場合、他のすべてのLC_ *変数をオーバーライドします。私のシステムでは設定されていますが、nullであるため、無視する必要があり、代わりに他の値を使用する必要があります。それは起こっていることではありません。他の呼び出しが適切な文字列を返す場合でも、アプリケーションはを呼び出しsetlocale
てLC_ALL
、NULL
戻ってきて、エラーを生成しているようsetlocale
です。
ここでのトップであるltrace
のは、locale
(スクロール右関数の戻り値を参照するため)
% ltrace locale
(0, 0, 0, -1, 0x7f5c1ae44510) = 0x7f5c1ae47140
__libc_start_main(0x401d70, 1, 0x7fff7c8cfbf8, 0x404610, 0x4046a0 <unfinished ...>
setlocale(0, "") = "en_US.UTF-8"
setlocale(5, "") = "en_US.UTF-8"
textdomain("libc") = "libc"
argp_parse(0x607280, 1, 0x7fff7c8cfbf8, 0, 0x7fff7c8cfad4) = 0
setlocale(6, "") = NULL
dcgettext(0, 0x405aa8, 5, 0, 0) = 0x405aa8
error(0, 2, 0x405aa8, 1, 0locale: Cannot set LC_ALL to default locale: No such file or directory)
.utf8
にLOCALE
してLC_*
、どうやら.UTF-8
ここにも動作します... EN-USについて:それは(せずに表示されない.utf8
)にlocale -a
?
export LANG=C
とexport LC_ALL=en_US.UTF-8
何が起こるか見てください。私のArch LinuxラップトップはLOCALE="en_US.UTF-8"
/etc/rc.confにあり、ラップトップがどこにLANG = Cを設定しているかわかりません。
/etc/locale.conf
か?(アンダースコアではLANG=en-US
なく)誤って(ハイフンで)書いたようですLANG=en_US
。
/etc/locale.gen
も便利です。
locale -a
か?