it-swarm-vi.tech

Làm cách nào để cài đặt / thay đổi ngôn ngữ trên Debian?

Tôi đã viết một ứng dụng web có giao diện người dùng bằng tiếng Hà Lan. Tôi sử dụng các thói quen ngày và thời gian của hệ thống để định dạng chuỗi ngày trong ứng dụng. Tuy nhiên, chuỗi ngày định dạng hệ thống bằng tiếng Anh nhưng tôi muốn chúng bằng tiếng Hà Lan, vì vậy tôi cần đặt ngôn ngữ của hệ thống. Làm thế nào để tôi làm điều đó trên Debian? Tôi đã thử cài đặt LC_ALL=nl_NL nhưng dường như không có tác dụng gì:

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

Tôi nhớ rằng cài đặt LC_ALL trên hệ thống máy tính để bàn Ubuntu của tôi hoạt động tốt. Tôi có cần phải cài đặt các gói bổ sung để thực hiện công việc này không, hoặc tôi đang làm nó hoàn toàn sai?

67
Hongli Lai

Biên tập /etc/default/locale và đặt nội dung thành:

LANG="nl_NL.UTF-8"

Bạn có thể kiểm tra những địa điểm mà bạn hiện đang tạo bằng cách sử dụng:

# locale -a

Bạn có thể tạo thêm bằng cách chỉnh sửa /etc/locale.gen và bỏ ghi chú các dòng cho các địa điểm mà bạn muốn kích hoạt. Sau đó, bạn có thể tạo chúng bằng cách chạy:

# locale-gen

Bạn có thể tìm thấy danh sách các địa điểm được hỗ trợ trong /usr/share/i18n/SUPPORTED

Có nhiều thông tin hơn trên Debian wiki .

77
David Pashley

Bạn có thể cần cài đặt gói locales. Điều này sẽ hỏi bạn những địa phương để tạo. Nếu nó đã được cài đặt, thì dpkg-reconfigure locales sẽ cho phép bạn tạo thêm địa phương.

68
pgs

Câu trả lời ở đây không đầy đủ như với hầu hết các nơi khác. Sau khi ghép các thông tin từ một vài nơi, điều làm việc cho tôi là (1) đảm bảo rằng miền địa phương tôi muốn có sẵn (tạo nó nếu không) sau đó (2) đặt các biến môi trường liên quan đến miền địa phương thành miền địa phương mong muốn.

Trong trường hợp của tôi, tôi cần en_US.UTF-8 được lập trình (tức là không tương tác) được cài đặt trong thùng chứa docker. Ff đã hoàn thành những gì tôi cần nhưng nó sẽ hoạt động tốt trong Shell tương tác.

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

Trên cùng một Shell, bạn sẽ cần phải làm source ~/.bashrc để các lọ env có hiệu lực ngay lập tức. Bạn có thể kiểm tra xem ngôn ngữ đã được cấu hình đúng chưa bằng cách gọi 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

Có rất nhiều câu hỏi và trả lời về chủ đề này nhưng chỉ có một số ít thực sự hữu ích. Tín dụng có tín dụng đến hạn:

17
Czar

Không có câu trả lời nào trong số này làm việc cho tôi, trên một thùng chứa LXC được cài đặt với:

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

Tôi luôn nhận được đầu ra sau từ locale-gen, tức là không tạo bất kỳ ngôn ngữ nào (không được liệt kê):

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

Đang chạy dpkg-reconfigure locales và chọn một số địa phương không cập nhật /etc/locale.gen như tôi mong đợi.

Tuy nhiên, khi tôi sửa đổi tệp đó theo cách thủ công và không ghi chú các địa điểm mà tôi muốn, thì locale-gen bắt đầu hoạt động đúng:

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

Tôi cũng có thể tạo các địa phương theo cách thủ công như thế này:

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

Nhưng đây không phải là một giải pháp lâu dài: Tôi thấy rằng việc chạy locale-gen không có --keep-existing tùy chọn sẽ xóa tất cả các ngôn ngữ được tạo thủ công như vậy, tức là mọi ngôn ngữ không được liệt kê (và không ghi chú) trong /etc/locale.gen.

6
qris

Đối với một ứng dụng web, có thể tốt hơn là sử dụng setlocale () bên trong chương trình, thay vì yêu cầu hệ thống mặc định miền địa phương được đặt bên ngoài thích hợp. Ít lỏng lẻo kết thúc theo cách đó.

3
SamB

Đối với những người, như tôi, trên Ubuntu 14.04 LTS, bằng cách nào đó, không có /etc/locale.gen tập tin, bạn có thể thêm một miền địa phương mới trong /var/lib/locales/supported.d/local và sau đó chạy:

Sudo dpkg-reconfigure locales

Bạn cũng có thể thêm ngôn ngữ (ví dụ) tiếng Pháp theo cách này (thay vì chỉnh sửa /var/lib/locales/supported.d/local):

Sudo locale-gen fr_FR fr_FR.UTF-8

để thêm và tạo ISO-8859-1UTF-8 bộ mã của fr_FR miền địa phương và cuối cùng gõ:

Sudo dpkg-reconfigure locales

hoàn thành công việc

1
SebMa

Nhưng trước tiên bạn cần cài đặt gói ngôn ngữ cần thiết. Trên VPS tiếng Đức của tôi không có gói ngôn ngữ tiếng Anh được cài đặt sẵn. Vì vậy, trước tiên bạn kiểm tra xem bạn đã cài đặt nó chưa:

aptitude install language-pack-en
1
valentt