Arch Linux kullanıyorum ve viki üzerindeki yerel ayarları belirleme hakkındaki talimatları izledim .
Neredeyse çalışan her program yerelden - hatta şikayet ediyor locale
. Bu gibi görünüyor:
% 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=
veya:
% 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")
Biraz kafa karıştırıcı olan şey, /etc/locale.gen
bunun birkaç örneğinin olması; tüm UTF-8 satırlarında "bir şey.UTF-8" bulunur ve çalışırken locale-gen
gösterir en_US.UTF-8... done
, ancak locale -a
kullanılabilir yerel gösterileri göstermesi beklenir en_US.utf8
. Ben her iki biçimlerinin çeşitli kombinasyonları denedim /etc/locale-gen
ve LOCALE=
içinde /etc/rc.conf
, ama hiçbir şey problem belirlemiştir.
Ek bilgi:
% locale -a
C
POSIX
en_US
en_US.iso88591
en_US.utf8
Bruce Ediger'in ayar önerisi LANG=C
ve LC_ALL=en_US.UTF-8
çalışması önerdi (aslında ayar LC_ALL
düzeltildi, ayar LANG
önemli değildi), ama neler olduğunu bilmek istiyorum. Göre SUS o null adlı ayarlayabilir ve değilse, LC_ALL tüm diğer LC_ * değişkenleri geçersiz kılar. Sistemimde ayarlandı, ancak boş, bu nedenle göz ardı edilmeli ve bunun yerine başka değerler kullanılmalı. Olan bu değil , başka bir çağrının iyi bir dize döndürmesi durumunda bile uygulamaların çağrıda setlocale
bulunduğu LC_ALL
, NULL
geri döndüğü ve hata ürettiği anlaşılıyor setlocale
.
İşte bir üst kısmıdır ltrace
ait locale
(işlev dönüş değerleri görmek için kaydırma hakkı)
% 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
içinde LOCALE
ve LC_*
fakat görünüşe .UTF-8
şöyle tr için ... burada da çalışır: o (olmadan görünmüyor .utf8
olarak) locale -a
?
export LANG=C
ve export LC_ALL=en_US.UTF-8
ne olduğunu gör. Arch linux dizüstü bilgisayarımda LOCALE="en_US.UTF-8"
/etc/rc.conf dosyası var ve dizüstü bilgisayarımın LANG = C değerini nerede belirlediğini bulamıyorum.
/etc/locale.conf
? Yanlışlıkla LANG=en-US
(kısa çizgi ile) yerine (kısa çizgi ile) yazmış gibisiniz LANG=en_US
.
/etc/locale.gen
de faydalı olacaktır.
locale -a
?