Biến $ LANG được đặt ở đâu trong Mac OS X?


24

Tôi đã sử dụng wgetlần đầu tiên sau khi cài đặt Lion OS X và tôi nhận thấy rằng wget đã được bản địa hóa thành ngôn ngữ mẹ đẻ của tôi. Chạy setlệnh trong terminal cho thấy LANGbiến của tôi đại diện cho ngôn ngữ địa phương của tôi. Tôi có thể thay đổi điều này ở đâu hoặc wgetbỏ qua cài đặt này?

cập nhật

Đây là những gì localemang lại cho tôi:

LANG="lt_LT.UTF-8"
LC_COLLATE="lt_LT.UTF-8"
LC_CTYPE="lt_LT.UTF-8"
LC_MESSAGES="lt_LT.UTF-8"
LC_MONETARY="lt_LT.UTF-8"
LC_NUMERIC="lt_LT.UTF-8"
LC_TIME="lt_LT.UTF-8"
LC_ALL=

Do đó, tất cả đầu ra của các tham số không (như lời nhắc và thông báo gỡ lỗi) đều bằng tiếng Litva. Đó là vấn đề của tôi. Tôi muốn lấy lại tiếng Anh.

Tôi đang sử dụng zshnhư vỏ đăng nhập của tôi.


Chính xác thì vấn đề là wgetgì? Và những gì localehiển thị và nó có giống như những gì bạn mong đợi từ lựa chọn ngôn ngữ của bạn trong ngăn tùy chọn hệ thống Ngôn ngữ & Văn bản không?
bmike

Câu trả lời:


26

Theo mặc định, Terminal đặt các biến môi trường miền địa phương để khớp với các định dạng ngôn ngữ và thời gian / ngày / số hiện tại mà Terminal đang sử dụng, được chọn thông qua

Tùy chọn hệ thống> Ngôn ngữ và văn bản

(Đó là tên trên Lion. Trên các hệ thống trước đó, tên chính xác của bảng ưu tiên có thể thay đổi.)

Một giải pháp tạm thời là kéo tiếng Anh lên đầu danh sách các ngôn ngữ, sau đó mở Terminal, sau đó di chuyển tiếng Litva trở lại đầu trang. Sau đó, chỉ Terminal sẽ bằng tiếng Anh. Tuy nhiên, nó sẽ thiết lập lại thành tiếng Litva nếu bạn Thoát và khởi động lại Terminal.

Một cách tiếp cận bền bỉ là bảo Terminal không đặt các biến môi trường cục bộ, bằng cách tắt

Thiết bị đầu cuối> Tùy chọn> Cài đặt> [hồ sơ]> Nâng cao> Đặt biến môi trường miền địa phương khi khởi động

Sau đó, miền địa phương sẽ mặc định là "C" không có ngôn ngữ được chỉ định và hầu hết các chương trình sẽ mặc định là tiếng Anh.

Lưu ý rằng tắt tính năng này có nghĩa là một số chương trình sẽ không biết Terminal đang sử dụng mã hóa ký tự nào và sẽ cho rằng đó chỉ là ASCII hoặc ISO-Latin-1. Vì vậy, nếu Terminal đang sử dụng UTF-8 (mặc định), các chương trình đó có thể hoặc không thể hoạt động như mong muốn.

Nếu điều này chủ yếu là về wget, tôi khuyên bạn nên tạo một bản sao của hồ sơ cài đặt mặc định, tắt cài đặt ngôn ngữ trong hồ sơ tùy chỉnh của bạn và chỉ sử dụng cấu hình đó khi sử dụng wgetđể bạn có thể tiếp tục sử dụng UTF-8 với sự hỗ trợ đầy đủ khi sử dụng các chương trình khác, sử dụng các cài đặt mặc định.

Như những người khác đã đề cập, bạn cũng có thể ghi đè cài đặt ngôn ngữ ban đầu do Terminal cung cấp trong tập lệnh khởi động shell. Đối với zsh, đặt nó vào ~ / .zshrc. Đối với bash, hãy sử dụng ~ / .bashrc (và nếu bạn chưa có, hãy tạo một ~ / .bash_profile chạy ~ / .bashrc).

Xem x-man-page: // 1 / locale để biết thêm thông tin về từng giá trị môi trường miền địa phương.

Tuy nhiên, nếu bạn chỉ đơn thuần unset LANGhoặc đặt nó thành "C", điều đó thường áp dụng cho tất cả các chương trình và chương trình của bạn, trong khi hầu hết thời gian bạn có thể muốn sử dụng UTF-8 và Terminal đặt các biến cục bộ khớp với nhau, để có được mức độ hợp tác, độ trung thực và chức năng cao nhất.

Do đó, nếu bạn định đi theo con đường đó, tôi khuyên bạn nên viết mã để chỉnh sửa, thay vì thay thế các giá trị ban đầu, để bạn lưu giữ thông tin mã hóa ("UTF-8") và chỉ buộc ngôn ngữ sang tiếng Anh, thay vì đặt các biến thành "C".

Ví dụ: điều này hoạt động trong zsh và bash:

# Replace Lithuanian with English
export LANG=${LANG/lt_LT/en_US}

Khi nào LANG="lt_LT.UTF-8", điều này sẽ thay đổi nó thành LANG="en_US.UTF-8". Tôi không có wgetsẵn để kiểm tra điều này, nhưng điều này là đủ.

Làm theo cách này có nghĩa là nếu bạn thay đổi tùy chọn mã hóa ký tự trong Terminal, bạn sẽ không ghi đè lên trong tập lệnh khởi động shell của mình.


Hoàn thành tốt; để khái quát hóa LANGlệnh xác định lại: echo ${LANG/*./en_US.}thay thế tên văn hóa hiện tại bằng en_US bất kể nó là gì; làm việc trong bash, ksh, zsh.
mkuity0

7

Nó được đặt ở đây ...

nhập mô tả hình ảnh ở đây

Nếu bạn muốn có nhiều hoặc ít tùy chọn hơn trong kéo xuống, hãy đi tới tab Encodings để xem nhiều tiền thưởng hơn.


3
trên os x it ~ / .bash_profile, không phải bashrc. Mọi người đã rất bối rối bởi điều này khi đọc hướng dẫn trực tuyến.
Enrico Susatyo

Trời ạ - cảm ơn vì đã bắt được nó. Tôi thậm chí đã đi đến trang nguồn mở và kiểm tra xem apple có thay đổi gash bash hay không và vẫn hiểu sai. (chỉnh sửa câu trả lời của tôi - nhờ @the_great_monkey)
bmike

4
Terminal tạo shell đăng nhập, chạy ~ / .bash_profile. Tuy nhiên, hầu hết các tùy chỉnh của người dùng nên được đặt trong ~ / .bashrc để chúng cũng áp dụng cho các shell không đăng nhập (ví dụ: shell phụ) và ~ / .bash_profile nên chạy ~ / .bashrc để nó áp dụng cho các shell đăng nhập. ~ / .bash_profile nói chung hầu như trống rỗng và chỉ chứa mã đặc biệt cho các shell đăng nhập cấp cao nhất mà người dùng không muốn chạy cho các shell phụ.
Chris Trang

1
"Đọc nhanh trang man cho thấy trình bao đặt giá trị này cho mỗi lần đăng nhập" Trang bash man nói điều đó, nhưng Terminal đặt giá trị ban đầu và tôi chưa bao giờ thấy bash đặt chúng nếu chúng chưa được đặt. Nếu tôi tắt tùy chọn "thiết lập môi trường miền địa phương", không có biến nào được đặt và hiển thị ngôn ngữ LANG=và các giá trị khác mặc định "C".
Chris Trang

2

Tôi đã giải quyết vấn đề này bằng cách đặt ngôn ngữ trong tệp .profile của mình, tải bất cứ khi nào tôi khởi động thiết bị đầu cuối.

export LANG="en_US.UTF-8"
export LC_ALL="POSIX"

LC_ALLghi đè LANG, vì vậy lệnh đầu tiên của bạn sẽ không có hiệu lực.
mkuity0

Ngoài ra, POSIXtương đương với Cvà hoàn toàn không đối phó với Unicode.
Sebastian Graf

1

Dựa trên nhiều hơn về Linux, nếu bạn không muốn thay đổi hoàn toàn nội địa hóa của mình bằng LC_LANG, nhưng muốn có các thông báo hệ thống bằng tiếng Anh, bạn chỉ cần đặt

LC_COLLATE=C    (to have standard sorting in ls, etc)
LC_CTYPE=en_US.UTF-8

Đây là LC_MESSAGESbiến điều khiển các thông điệp ngôn ngữ nên được xuất ra (nếu được cài đặt).
mkuity0

0

Sử dụng máy chủ debian bằng tiếng Pháp và máy khách bash macsox, tôi "chỉ" phải thêm cái này vào .bash_profile của tôi trên thư mục người dùng của macosx:

xuất LANG = fr_FR.UTF-8

Giải quyết.


0

Các câu trả lời khác là chính xác, tức là về Terminalcài đặt cho các biến môi trường miền địa phương khi khởi động và sử dụng shell /etc/profile. Tuy nhiên, có một cách khác đáng để hiểu - đặc biệt là nếu "sự cố" xảy ra do sshđăng nhập từ xa .

OpenSSH (như được sử dụng trên Linux, BSD và macOS) có thể gửi các biến môi trường từ môi trường của máy khách đến vỏ mà máy chủ khởi động. Nó chỉ thực hiện điều này nếu máy khách được cấu hình để gửi chúng và máy chủ được cấu hình để chấp nhận chúng. Khách hàng (~/.ssh/config ) sẽ cần phải có:

SendEnv LANG LC_*

và máy chủ (/etc/ssh/sshd_config ) sẽ cần:

AcceptEnv LANG LC_*

Nếu cả hai đều đúng vị trí thì cục bộ của máy khách sẽ được truyền vào shell đăng nhập trên máy chủ ssh:

$ ssh me@my-mac locale
LANG="en_GB.UTF-8"
LC_COLLATE="en_GB.UTF-8"
LC_CTYPE="en_GB.UTF-8"
LC_MESSAGES="en_GB.UTF-8"
LC_MONETARY="en_GB.UTF-8"
LC_NUMERIC="en_GB.UTF-8"
LC_TIME="en_GB.UTF-8"
LC_ALL=

Cài đặt máy chủ được yêu cầu không có ở đó theo mặc định trên Snow Leopard ; nó ở đó trên Sierra . Hãy nhớ khởi động lại máy chủ SSH sau khi sửa đổi /etc/sshd_config!!!

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.