ฉันใช้ Arch Linux และฉันได้ปฏิบัติตามคำแนะนำในวิกิเกี่ยวกับการตั้งค่าภาษาของฉัน
เกือบโปรแกรมที่ทำงานทุกบ่นเกี่ยวกับสถานที่เกิดเหตุ - 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 จะแทนที่ตัวแปร LC_ * อื่น ๆ ทั้งหมดหากมีการตั้งค่าและไม่เป็นโมฆะ ในระบบของฉันมันถูกตั้งค่า แต่มันเป็นโมฆะดังนั้นจึงควรละเว้นและควรใช้ค่าอื่นแทน นั่นไม่ใช่สิ่งที่เกิดขึ้นมันก็ดูเหมือนว่าการใช้งานจะเรียก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
?