Tôi nên đặt địa điểm của mình là gì và ý nghĩa của việc làm này là gì?


19

Câu hỏi này đã được kích thích bằng cách đặt câu hỏi Trình duyệt Chromium không cho phép đặt kích thước giấy mặc định cho "In thành tệp" và cũng bằng một cuộc trò chuyện với @Gilles khi trò chuyện. Như được chỉ ra bởi @don_crissti và như được xác minh bởi tôi, việc thay đổi ngôn ngữ (ít nhất LC_PAPER) tạo ra sự khác biệt trong kích thước giấy được chọn.

Tôi chưa bao giờ suy nghĩ nhiều về những gì cần chọn, và đã luôn đi cùng en_US.UTF-8bởi vì nó có vẻ như là một lựa chọn mặc định hợp lý.

Tuy nhiên, mỗi @Gilles khi trò chuyện (xem cuộc trò chuyện bắt đầu tại http://chat.stackexchange.com/transcript/message/17017095#17017095 ). Chất chiết xuất:

Gilles: LC_PAPER mặc định là $ LANG

Gilles: Bạn phải có LANG = en_US.UTF-8. Đó là một ý tưởng tồi: nó đặt LC_COLLATE và đó hầu như luôn là một điều xấu

Gilles: LC_COLLATE không mô tả đối chiếu chính xác, nó quá hạn chế (nó đi theo từng ký tự) loại bỏ LANG và thay vào đó đặt LC_CTYPE và LC_PAPER

Gilles: cộng với LC_MESSAGES nếu bạn muốn tin nhắn bằng ngôn ngữ khác tiếng Anh

Rõ ràng, có những vấn đề ở đây tôi không biết, và tôi chắc chắn nhiều người khác cũng như vậy. Vì vậy, những vấn đề bạn nên xem xét khi thiết lập địa phương, và bạn nên đặt chúng như thế nào? Tôi đã luôn chạy dpkg-reconfigure localestrong Debian và không nghĩ hai lần về nó.

Câu hỏi cụ thể: Tôi có nên đặt ngôn ngữ của mình thành en_IN.UTF-8 không? Có bất kỳ nhược điểm của việc làm như vậy?

Xem thêm: LC_COLLATE có nên ảnh hưởng đến phạm vi ký tự không?

Câu trả lời:


29

Locale thiết lập được sở thích người dùng có liên quan đến văn hóa của bạn.

Tên địa phương

Trên tất cả các biến thể unix hiện tại mà tôi biết (nhưng không phải trên một vài cổ vật), tên miền địa phương theo cùng một mẫu:

  • Một tiêu chuẩn ISO 639-1 chữ thường hai chữ cái mã ngôn ngữ, hoặc một tiêu chuẩn ISO 639-2 ba ký tự mã ngôn ngữ nếu ngôn ngữ không có mã hai chữ cái. Ví dụ: entiếng Anh, detiếng Đức, jatiếng Nhật, uktiếng Ukraina, tiếng berBerber
  • Đối với nhiều người nhưng không phải tất cả các ngôn ngữ, một dấu gạch dưới được _theo sau bởi mã quốc gia gồm hai chữ cái viết hoa ISO 3166 . Do đó: en_USđối với tiếng Anh Mỹ, tiếng Anh Anh, en_UKtiếng fr_CACanada (Québec) tiếng Pháp, de_DEtiếng Đức của Đức, de_ATtiếng Đức của Áo, ja_JPcho tiếng Nhật (của Nhật Bản), v.v.
  • Tùy chọn, một dấu chấm .theo sau là tên của một nhân vật mã hóa như UTF-8, ISO-8859-1, KOI8-U, GB2312, Big5, vv Với GNU libc ít nhất (Tôi không biết làm thế nào rộng rãi này là), trường hợp và cách chấm câu bị bỏ qua trong mã hóa tên. Ví dụ: zh_CN.UTF-8tiếng Trung Quốc (đơn giản hóa) được mã hóa bằng UTF-8, trong khi zh_CNtiếng Trung Quốc được mã hóa bằng GB2312 và tiếng Trung Quốc zh_TW(truyền thống) được mã hóa trong Big5.
  • Tùy chọn, một dấu hiệu @theo sau là tên của một biến thể. Ý nghĩa của các biến thể là phụ thuộc địa phương. Ví dụ, nhiều quốc gia châu Âu có một @eurobiến thể địa phương trong đó ký hiệu tiền tệ là € và mã hóa là một ký tự bao gồm ký tự này (ISO 8859-15 hoặc ISO 8859-16), trái ngược với biến thể không được cung cấp với ký hiệu tiền tệ cũ hơn. Ví dụ: en_IE(tiếng Anh, Ireland) sử dụng mã hóa latin1 (ISO 8859-1) và £ làm ký hiệu tiền tệ trong khi en_IE@eurosử dụng mã hóa latin9 (ISO 8859-15) và € làm ký hiệu tiền tệ.

Ngoài ra, có hai tên miền địa phương tồn tại trên tất cả các hệ thống giống như unix: CPOSIX. Các tên này đồng nghĩa và có nghĩa là máy tính, nghĩa là các cài đặt mặc định phù hợp với dữ liệu được phân tích cú pháp bởi một chương trình máy tính.

Cài đặt ngôn ngữ

Các loại ngôn ngữ sau được định nghĩa bởi POSIX :

  • LC_CTYPE: bộ ký tự được sử dụng bởi các ứng dụng đầu cuối: dữ liệu phân loại (ký tự nào là chữ cái, dấu chấm câu, dấu cách, không hợp lệ, v.v.) và chuyển đổi trường hợp. Tiện ích văn bản thường chú ý LC_CTYPEđể xác định ranh giới ký tự.
  • LC_COLLATE: collation (tức là sắp xếp) thứ tự. Cài đặt này được sử dụng rất hạn chế vì nhiều lý do:
    • Hầu hết các ngôn ngữ có các quy tắc phức tạp phụ thuộc vào nội dung đang được sắp xếp (ví dụ: từ trong từ điển và tên riêng có thể không sử dụng cùng một thứ tự) và không thể được biểu thị bằng LC_COLLATE.
    • Có một số ứng dụng trong đó các vấn đề sắp xếp thứ tự phù hợp được thực hiện bởi phần mềm sử dụng cài đặt ngôn ngữ. Ví dụ: bộ xử lý văn bản lưu trữ ngôn ngữ và mã hóa tệp trong chính tệp đó (nếu không tệp sẽ không được xử lý chính xác trên hệ thống có cài đặt ngôn ngữ khác nhau) và không quan tâm đến cài đặt ngôn ngữ được chỉ định bởi môi trường.
    • LC_COLLATEđặc biệt có thể có các tác dụng phụ khó chịu, đặc biệt là vì nó gây ra thứ tự sắp xếp A <a <B <, điều này làm cho mối quan hệ giữa A và Z. bao gồm các chữ cái viết thường từ a đến y. Đặc biệt, các biểu thức chính quy rất phổ biến như [A-Z]phá vỡ một số ứng dụng .
  • LC_MESSAGES: ngôn ngữ của thông báo lỗi và thông tin.
  • LC_NUMERIC: định dạng số: số thập phân và dấu phân cách hàng nghìn.
    Nhiều ứng dụng mã cứng .như một dấu tách thập phân. Điều này làm cho LC_NUMERICkhông hữu ích và có khả năng nguy hiểm:
    • Ngay cả khi bạn đặt nó, bạn vẫn sẽ thấy định dạng mặc định khá thường xuyên.
    • Bạn có thể gặp phải tình huống trong đó một ứng dụng tạo đầu ra phụ thuộc vào miền địa phương và một ứng dụng khác dự kiến .là dấu thập phân hoặc ,là dấu tách trường.
  • LC_MONETARY: thích LC_NUMERIC, nhưng đối với số lượng nội tệ.
    Rất ít ứng dụng sử dụng cái này.
  • LC_TIME: định dạng ngày và giờ: tên ngày trong tuần và tháng, đồng hồ 12 hoặc 24 giờ, thứ tự các phần ngày, dấu chấm câu, v.v.

GNU libc, mà bạn sẽ tìm thấy trên Linux không nhúng, xác định các danh mục địa phương bổ sung:

  • LC_PAPER: kích thước giấy mặc định (được xác định theo chiều cao và chiều rộng).
  • LC_NAME, LC_ADDRESS, LC_TELEPHONE, LC_MEASUREMENT, LC_IDENTIFICATION: Tôi không biết về bất kỳ ứng dụng sử dụng chúng.

Biến môi trường

Các ứng dụng sử dụng cài đặt ngôn ngữ xác định chúng từ các biến môi trường.

  • Sau đó, giá trị của LANGbiến môi trường được sử dụng trừ khi bị ghi đè bởi cài đặt khác. Nếu LANGkhông được đặt, ngôn ngữ mặc định là C.
  • Các LC_xxxtên có thể được sử dụng như các biến môi trường.
  • Nếu LC_ALLđược đặt, thì tất cả các giá trị khác sẽ bị bỏ qua; điều này chủ yếu hữu ích để thiết lập LC_ALL=Ccác ứng dụng chạy cần tạo ra cùng một đầu ra bất kể chúng chạy ở đâu.
  • Ngoài ra, GNU libc sử dụngLANGUAGE để xác định dự phòng cho LC_MESSAGES(ví dụ: LANGUAGE=fr_BE:fr_FR:enthích tiếng Pháp của Bỉ hoặc nếu tiếng Pháp không có tiếng Pháp hoặc nếu không có tiếng Anh).

Cài đặt địa phương

Dữ liệu bản địa có thể lớn, vì vậy một số bản phân phối không gửi chúng dưới dạng có thể sử dụng được và thay vào đó yêu cầu một bước cài đặt bổ sung.

  • Trên Debian, để cài đặt các ngôn ngữ, hãy chạy dpkg-reconfigure localesvà chọn từ danh sách trong hộp thoại hoặc chỉnh sửa /etc/locale.genrồi chạy locale-gen.
  • Trên Ubuntu, để cài đặt các ngôn ngữ, hãy chạy locale-genvới tên của các miền làm đối số.

Bạn có thể xác định miền địa phương của riêng bạn .

sự giới thiệu

Các cài đặt hữu ích là:

  • Đặt LC_CTYPEthành ngôn ngữ và mã hóa mà bạn mã hóa các tệp văn bản của mình. Đảm bảo rằng các thiết bị đầu cuối của bạn sử dụng mã hóa đó.
    Đối với hầu hết các ngôn ngữ, chỉ có vấn đề mã hóa. Có một vài trường hợp ngoại lệ; ví dụ, một chữ hoa iItrong hầu hết các ngôn ngữ nhưng İở Thổ Nhĩ Kỳ ( tr_TR).
  • Đặt LC_MESSAGESthành ngôn ngữ mà bạn muốn xem tin nhắn.
  • Đặt LC_PAPERthành en_USnếu bạn muốn Thư Hoa Kỳ là khổ giấy mặc định và gần như mọi thứ khác (ví dụ en_GB) nếu bạn muốn A4.
  • Tùy chọn, đặt thành LC_TIMEđịnh dạng thời gian yêu thích của bạn.

Như đã giải thích ở trên, tránh thiết lập LC_COLLATELC_NUMERIC. Nếu bạn sử dụng LANG, ghi đè rõ ràng hai danh mục này bằng cách đặt chúng thành C.


Xin chào Gilles, cảm ơn câu trả lời chi tiết. Đâu là nơi tốt để ghi đè cài đặt mặc định trên Debian? Vì tôi cần một khổ giấy A4, tôi đoán tôi cần ghi đè giá trị mặc định của LC_PAPER. Và tôi có thể cập nhật điều này trên toàn hệ thống mà không cần khởi động lại không?
Faheem Mitha

1
@FaheemMitha Cách phân phối / vỏ bất khả tri tốt nhất để đặt các biến môi trường là gì? Và nếu bạn muốn thiết lập toàn hệ thống, trên Debian, cũng có /etc/default/locale. Các tệp này có hiệu lực khi bạn đăng nhập; bạn có thể làm export LC_PAPER=…trong shell để ảnh hưởng đến các lệnh được khởi chạy từ shell đó.
Gilles 'SO- ngừng trở nên xấu xa'
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.