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


65

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_NLnhư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?


Có cách nào để làm điều này tự động dựa trên địa chỉ IP được chỉ định của máy chủ không?
Scoop

Câu trả lời:


72

Chỉnh sửa /etc/default/localevà đặ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.genvà bỏ ghi chú các dòng cho các địa điểm mà bạn muốn bậ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 một 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 wiki Debian .


9
/ var / lib / belocs / list không tồn tại. Bạn cần chỉnh sửa /etc/locale.gen hoặc chạy dpkg-cấu hình lại các ngôn ngữ thay thế.
pss

+1 câu trả lời này để mô tả miền địa phương, nhưng theo nhận xét trước đó, không có tệp nào như / var / lib / belocs / list trên hệ thống của tôi
telent

Tôi đã mất 5 giờ để tìm thấy câu trả lời này, kết quả là hoàn hảo. Hơn nữa, nó cho phép để làm cho bí danh: en_US UTF-8 và it_IT UFT-8 cho phép tôi có miền địa phương của tôi trong UTF-8 theo mặc định, đó là tuyệt vời nếu bạn có mã PHP mà phụ thuộc vào miền địa phương
Cec

Có một lệnh hoặc gói có thể chỉnh sửa và thiết lập nội dung của / etc / default / locale không?
Karl Morrison

Xem câu trả lời dưới đây từ Czar. Bạn có thể làm điều đó như: sed -i 's / ^ # * (en_US.UTF-8) / \ 1 /' /etc/locale.gen
Tobias Gaertner

66

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


Điều đó chỉ tạo ra các địa phương, không đặt mặc định hệ thống.
David Pashley

16
KHÔNG, câu hỏi cuối cùng của các địa điểm cấu hình lại dpkg là chọn miền địa phương mặc định.
pss

2
Tôi đã phải chạy nó với sudonhư trong sudo dpkg-reconfigure locales.
Alex Yursha

Nếu đó là một máy chủ được truy cập thông qua ssh , trang wiki Debian trên các địa điểm khuyên bạn nên để lại ngôn ngữ mặc định được đặt thành NONE.
Paul Rougieux

1
Đây chính xác là những gì tôi cần: cài đặt tất cả các ngôn ngữ chỉ trong một vài lần nhấn phím. Cảm ơn bạn rất nhiều!
aexl

11

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 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-8lập trình (tức là không tương tác) được cài đặt trong một container docker. Ff đã hoàn thành những gì tôi cần nhưng nó sẽ hoạt động tốt trong một vỏ 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 ~/.bashrccho các lọ env có hiệu lực ngay lập tức. Bạn có thể kiểm tra xem miền địa phươ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 mục hỏi đáp 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:


6

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 locale-gen, nghĩa 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.

Chạy dpkg-reconfigure localesvà chọn một số địa phương đã không cập nhật /etc/locale.gennhư tôi mong đợi.

Tuy nhiên, khi tôi sửa đổi tệp đó theo cách thủ công và bỏ ghi chú các địa điểm mà tôi muốn, thì nó locale-genbắt đầu hoạt động bình thườ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-genmà không có --keep-existingtùy chọn sẽ xóa tất cả các địa điểm được tạo thủ công như vậy, tức là mọi miền không được liệt kê (và không bị lỗi) /etc/locale.gen.


3

Đố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 ngôn ngữ mặc định của hệ thống được đặt bên ngoài một cách thích hợp. Ít lỏng lẻo kết thúc theo cách đó.


1
Nếu hệ thống không yêu cầu miền địa phương, setlocalethì sẽ không hoạt động.
Bố già

1

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

Đố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.gentệp nào , bạn có thể thêm một ngôn ngữ mới vào /var/lib/locales/supported.d/localrồi 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-1và bộ UTF-8mã của fr_FRmiền địa phương và cuối cùng gõ:

sudo dpkg-reconfigure locales

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.