วิธีการติดตั้ง / เปลี่ยนภาษาบนเดเบียน


65

ฉันเขียนเว็บแอปพลิเคชันซึ่งส่วนติดต่อผู้ใช้เป็นภาษาดัตช์ ฉันใช้รูทีนวันที่และเวลาของระบบเพื่อจัดรูปแบบสตริงวันที่ในแอปพลิเคชัน อย่างไรก็ตามสตริงวันที่ซึ่งรูปแบบของระบบเป็นภาษาอังกฤษ แต่ฉันต้องการให้เป็นภาษาดัตช์ดังนั้นฉันจึงต้องตั้งค่าภาษาของระบบ ฉันจะทำสิ่งนั้นกับ Debian ได้อย่างไร ฉันพยายามตั้งค่าLC_ALL=nl_NLแต่ดูเหมือนจะไม่มีผลกระทบใด ๆ :

$ date
Sat Aug 15 14:31:31 UTC 2009
$ LC_ALL=nl_NL date
Sat Aug 15 14:31:36 UTC 2009

ฉันจำได้ว่าการตั้งค่า LC_ALL บนระบบเดสก์ท็อป Ubuntu ของฉันทำงานได้ดี ฉันจำเป็นต้องติดตั้งแพคเกจพิเศษเพื่อให้งานนี้หรือฉันทำผิดทั้งหมด?


มีวิธีการทำเช่นนี้โดยอัตโนมัติตามที่อยู่ IP ที่กำหนดของเซิร์ฟเวอร์หรือไม่
Scoop

คำตอบ:


72

แก้ไข/etc/default/localeและตั้งค่าเนื้อหาเป็น:

LANG="nl_NL.UTF-8"

คุณสามารถตรวจสอบสถานที่ที่คุณสร้างขึ้นโดยใช้:

# locale -a

คุณสามารถสร้างได้มากขึ้นโดยการแก้ไข/etc/locale.genและยกเลิกหมายเหตุสำหรับบรรทัดสำหรับสถานที่ที่คุณต้องการเปิดใช้งาน จากนั้นคุณสามารถสร้างพวกเขาโดยการเรียกใช้:

# locale-gen

คุณสามารถค้นหารายการตำแหน่งที่ตั้งที่สนับสนุนใน /usr/share/i18n/SUPPORTED

มีข้อมูลเพิ่มเติมที่มีอยู่บนคือวิกิพีเดีย Debian


9
/ var / lib / belocs / list ไม่มีอยู่ คุณต้องแก้ไข /etc/locale.gen หรือรันโลแคล dpkg-reconfigure แทน
pgs

+1 คำตอบสำหรับการอธิบาย locale-gen นี้ แต่ตามความคิดเห็นก่อนหน้านี้ไม่มีไฟล์เช่น / var / lib / belocs / รายการในระบบของฉัน
telent

ฉันใช้เวลา 5 ชั่วโมงในการหาคำตอบนี้ซึ่งจบลงด้วยความสมบูรณ์แบบ นอกจากนี้ยังอนุญาตให้สร้างชื่อแทน: en_US UTF-8 และ it_IT UFT-8 อนุญาตให้ฉันมีตำแหน่งของฉันเป็น UTF-8 ซึ่งเป็นค่าเริ่มต้นซึ่งดีมากถ้าคุณมีรหัส PHP ที่ขึ้นอยู่กับตำแหน่งที่ตั้ง
Cec

มีคำสั่งหรือแพ็คเกจที่สามารถแก้ไขและกำหนดเนื้อหาของ / etc / default / locale ได้หรือไม่?
Karl Morrison

ดูคำตอบด้านล่างจาก Czar คุณสามารถทำได้เช่น: sed -i 's / ^ # * (en_US.UTF-8) / \ 1 /' /etc/locale.gen
Tobias Gaertner

66

คุณอาจต้องติดตั้งlocalesแพคเกจ นี่จะถามคุณว่าจะสร้างตำแหน่งที่ตั้งใด หากติดตั้งไว้แล้วdpkg-reconfigure localesจะช่วยให้คุณสร้างสถานที่ได้มากขึ้น


ที่สร้างสถานที่เท่านั้นไม่ได้ตั้งค่าเริ่มต้นของระบบ
David Pashley

16
ไม่คำถามสุดท้ายของ dpkg-reconfigure locale คือการเลือกภาษาเริ่มต้น
pgs

2
ผมต้องวิ่งด้วยในขณะที่sudo sudo dpkg-reconfigure locales
Alex Yursha

ถ้าเป็นเซิร์ฟเวอร์เข้าถึงได้ผ่านทาง SSH หน้าวิกิพีเดีย Debian ในสถานที่NONEแนะนำให้ออกจากสถานที่เกิดเหตุออกจากเริ่มต้นที่กำหนดให้
Paul Rougieux

1
นี่คือสิ่งที่ฉันต้องการ: ติดตั้งโลแคลทั้งหมดด้วยการกดแป้นไม่กี่ครั้ง ขอบคุณมาก!
aexl

11

คำตอบที่นี่ไม่สมบูรณ์เหมือนกับที่อื่น ๆ หลังจากรวบรวมข้อมูลจากหลาย ๆ ที่แล้วสิ่งที่ใช้ได้ผลสำหรับฉันคือ (1) ตรวจสอบให้แน่ใจว่าสถานที่ที่ฉันต้องการพร้อมใช้งาน (สร้างถ้าไม่มี) จากนั้น (2) ตั้งค่าตัวแปรสภาพแวดล้อมที่เกี่ยวข้องกับสถานที่ที่ต้องการ

ในกรณีของฉันฉันต้องการen_US.UTF-8โปรแกรม (เช่นไม่โต้ตอบ) ติดตั้งในภาชนะนักเทียบท่า ff บรรลุสิ่งที่ฉันต้องการ แต่มันก็ใช้ได้ดีในเชลล์เชิงโต้ตอบ

apt-get update

# Install locales package
apt-get install -y locales

# Uncomment en_US.UTF-8 for inclusion in generation
sed -i 's/^# *\(en_US.UTF-8\)/\1/' /etc/locale.gen

# Generate locale
locale-gen

# Export env vars
echo "export LC_ALL=en_US.UTF-8" >> ~/.bashrc
echo "export LANG=en_US.UTF-8" >> ~/.bashrc
echo "export LANGUAGE=en_US.UTF-8" >> ~/.bashrc

บนเชลล์เดียวกันคุณจะต้องทำให้source ~/.bashrcenv vars มีผลทันที 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

มีคำถามและคำตอบมากมายเกี่ยวกับเรื่องนี้ แต่มีเพียงไม่กี่ข้อเท่านั้นที่เป็นประโยชน์ เครดิตที่เครดิตครบกำหนด:


6

คำตอบเหล่านี้ไม่เหมาะกับฉันบนคอนเทนเนอร์ LXC ที่ติดตั้งด้วย:

lxc-create -n sse-master -t download -n sse-master -- \
    -d debian -r jessie --arch i386

ฉันได้รับผลลัพธ์ต่อไปนี้เสมอจากlocale-genไม่ใช่สร้างสถานที่ใด ๆ (ไม่มีในรายการ):

$ sudo locale-gen
Generating locales (this might take a while)...
Generation complete.

การเรียกใช้dpkg-reconfigure localesและการเลือกตำแหน่งที่ตั้งบางแห่งไม่ได้อัปเดต/etc/locale.genตามที่คาดไว้

อย่างไรก็ตามเมื่อฉันแก้ไขไฟล์ด้วยตนเองและไม่ใส่เครื่องหมายบอกตำแหน่งที่ฉันต้องการจากนั้นก็locale-genเริ่มทำงานอย่างถูกต้อง:

$ sudo locale-gen
Generating locales (this might take a while)...
  en_GB.UTF-8... done
  en_US.UTF-8... done
Generation complete.

ฉันยังสามารถสร้างสถานที่ด้วยตนเองเช่นนี้:

sudo localedef -i en_US -f UTF-8 en_US.UTF-8
sudo localedef -i en_GB -f UTF-8 en_GB.UTF-8

แต่นี้ไม่ได้แก้ปัญหาอย่างถาวร: ผมพบว่าการทำงานlocale-genโดยไม่มี--keep-existingตัวเลือกที่จะลบสถานที่ตนเองสร้างขึ้นทั้งหมดเช่นเช่นทุกภาษาของไม่ได้ระบุไว้ (และ uncommented) /etc/locale.genใน


3

สำหรับเว็บแอปพลิเคชันอาจเป็นการดีกว่าถ้าจะใช้setlocale () ภายในโปรแกรมแทนที่จะต้องการให้ตั้งค่าโลแคลเริ่มต้นของระบบอย่างเหมาะสมภายนอก ปลายหลวมน้อยลงแบบนั้น


1
หากระบบไม่ได้มีสถานที่ที่ต้องการกว่าsetlocaleจะไม่ทำงาน
เจ้าพ่อ

1

แต่ก่อนอื่นคุณต้องติดตั้งชุดภาษาที่จำเป็น VPS ที่ใช้ภาษาเยอรมันของฉันไม่มีชุดภาษาอังกฤษที่ติดตั้งไว้ล่วงหน้า ดังนั้นก่อนอื่นคุณต้องตรวจสอบว่าคุณได้ทำการติดตั้ง:

aptitude install language-pack-en

1

สำหรับผู้ที่ชอบฉันบน Ubuntu 14.04 LTS มีบางอย่างไม่มี/etc/locale.genไฟล์คุณสามารถเพิ่มสถานที่ใหม่ใน/var/lib/locales/supported.d/localแล้วเรียกใช้:

sudo dpkg-reconfigure locales

คุณสามารถเพิ่มภาษาฝรั่งเศส (ตัวอย่าง) สถานที่ด้วยวิธีนี้ (แทนที่จะแก้ไข/var/lib/locales/supported.d/local):

sudo locale-gen fr_FR fr_FR.UTF-8

เพื่อเพิ่มและสร้างISO-8859-1และUTF-8รหัสชุดของfr_FRสถานที่และในที่สุดพิมพ์:

sudo dpkg-reconfigure locales

เพื่อจบงาน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.