Di mana variabel $ LANG diatur di Mac OS X?


24

Saya telah menggunakan wgetuntuk pertama kalinya setelah menginstal Lion OS X dan saya perhatikan bahwa wget dilokalkan ke bahasa ibu saya. Menjalankan setperintah di terminal menunjukkan bahwa LANGvariabel saya mewakili bahasa lokal saya. Di mana saya dapat mengubah ini atau wgetmengabaikan pengaturan ini?

memperbarui

Inilah yang localememberi saya:

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=

Karenanya semua output dari non-parameter (seperti prompt dan pesan debug) adalah dalam bahasa Lituania. Itu masalah saya. Saya ingin mengembalikannya ke Bahasa Inggris.

Saya menggunakan zshsebagai shell login saya.


Sebenarnya apa masalahnya wget? Dan apa yang localeditampilkan dan apakah itu sama dengan apa yang Anda harapkan dari pilihan bahasa Anda di panel preferensi sistem Bahasa & Teks ?
bmike

Jawaban:


26

Secara default, Terminal menetapkan variabel lingkungan lokal agar sesuai dengan bahasa yang dipilih saat ini dan format waktu / tanggal / angka yang digunakan Terminal, yang dipilih melalui

Preferensi Sistem> Bahasa dan Teks

(Itulah nama di Lion. Pada sistem sebelumnya nama yang tepat dari panel preferensi dapat bervariasi.)

Solusi sementara adalah menyeret Inggris ke atas daftar bahasa, lalu buka Terminal, lalu pindahkan Lithuania kembali ke atas. Maka hanya Terminal yang akan menggunakan bahasa Inggris. Namun, itu akan diatur ulang ke Lithuania jika Anda Keluar dan memulai ulang Terminal.

Pendekatan gigih adalah memberi tahu Terminal untuk tidak mengatur variabel lingkungan lokal, dengan mematikan

Terminal> Preferensi> Pengaturan> [profil]> Tingkat Lanjut> Setel variabel lingkungan lokal saat startup

Kemudian lokal akan default ke "C" tanpa bahasa yang ditentukan, dan sebagian besar program kemudian akan default ke bahasa Inggris.

Perhatikan bahwa mematikan ini berarti bahwa beberapa program tidak akan mengetahui yang menggunakan Terminal pengkodean karakter dan akan menganggap bahwa itu ASCII atau ISO-Latin-1 saja. Jadi jika Terminal menggunakan UTF-8 (default), program-program itu mungkin atau mungkin tidak berperilaku seperti yang diinginkan.

Jika ini sebagian besar tentang wget, saya sarankan Anda membuat salinan profil pengaturan default, matikan pengaturan lokal di profil khusus Anda, dan hanya gunakan profil itu saat menggunakan wget, sehingga Anda dapat terus menggunakan UTF-8 dengan dukungan penuh saat menggunakan program lain, menggunakan pengaturan default.

Seperti yang disebutkan orang lain, Anda juga dapat mengganti pengaturan lokal awal yang disediakan oleh Terminal dalam skrip startup shell. Untuk zsh, masukkan ke ~ / .zshrc. Untuk bash, gunakan ~ / .bashrc (dan jika Anda belum memilikinya, buat ~ / .bash_profile yang menjalankan ~ / .bashrc).

Lihat halaman x-man: // 1 / lokal untuk informasi lebih lanjut tentang masing-masing nilai lingkungan lokal.

Namun, jika Anda hanya ingin unset LANGmengaturnya menjadi "C", itu biasanya berlaku untuk semua shell dan program Anda, sedangkan sebagian besar waktu Anda mungkin ingin menggunakan UTF-8 dan meminta Terminal mengatur variabel lokal untuk dicocokkan, untuk mendapatkan tingkat kerja sama, kesetiaan, dan fungsionalitas tertinggi.

Oleh karena itu, jika Anda akan pergi rute itu, saya sarankan Anda menulis kode untuk mengedit, daripada mengganti, nilai awal, sehingga Anda menyimpan informasi pengodean ("UTF-8") dan hanya memaksa bahasa ke bahasa Inggris, daripada mengatur variabel ke "C".

Misalnya, ini berfungsi dalam zsh dan bash:

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

Kapan LANG="lt_LT.UTF-8", ini akan mengubahnya menjadi LANG="en_US.UTF-8". Saya tidak punya wgettersedia untuk menguji ini, tetapi ini sudah cukup.

Melakukannya dengan cara ini berarti bahwa jika Anda mengubah preferensi pengkodean karakter di Terminal, Anda tidak akan menimpanya dalam skrip startup shell Anda.


Dilakukan dengan baik; untuk menggeneralisasi LANGperintah redefinisi: echo ${LANG/*./en_US.}mengganti nama budaya saat ini dengan en_US terlepas dari apa itu; bekerja di bash, ksh, zsh.
mklement0

7

Sudah diatur di sini ...

masukkan deskripsi gambar di sini

Jika Anda ingin lebih banyak atau lebih sedikit opsi di pulldown, buka tab Encodings untuk melihat lebih banyak dari karunia.


3
pada os x itu ~ / .bash_profile, bukan bashrc. Orang menjadi sangat bingung dengan ini ketika membaca tutorial online.
Enrico Susatyo

Astaga - terima kasih sudah menangkapnya. Saya bahkan pergi ke halaman open source dan memeriksa apakah apel membuat perubahan pada gnu bash dan masih salah. (mengedit jawaban saya - terima kasih @the_great_monkey)
bmike

4
Terminal membuat shell login, yang menjalankan ~ / .bash_profile. Namun, sebagian besar penyesuaian pengguna harus ditempatkan di ~ / .bashrc sehingga mereka juga berlaku untuk shell non-login (mis., Sub-shell), dan ~ / .bash_profile harus dijalankan ~ / .bashrc sehingga berlaku untuk shell login. ~ / .bash_profile umumnya kosong dan hanya berisi kode khusus untuk shell login tingkat atas yang tidak ingin dijalankan oleh pengguna untuk sub-shell.
Chris Page

1
"Cepat membaca halaman manual menunjukkan bahwa shell menetapkan nilai ini setiap login" Halaman bash man mengatakan itu, tetapi Terminal menetapkan nilai awal, dan aku belum pernah melihat bash mengaturnya jika belum ditetapkan. Jika saya mematikan preferensi "set lokal lingkungan ...", tidak ada variabel yang ditetapkan, dan lokal menunjukkan LANG=dan nilai-nilai lainnya semua default "C".
Chris Page

2

Saya memecahkan masalah ini dengan mengatur bahasa di file profil saya. Yang memuat setiap kali saya memulai terminal.

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

LC_ALLmenimpa LANG, jadi perintah pertama Anda tidak akan berpengaruh.
mklement0

Juga, POSIXsama dengan Cdan yang tidak mengatasi Unicode sama sekali.
Sebastian Graf

1

Lebih didasarkan pada pengalaman Linux, jika Anda tidak ingin mengubah lokalisasi Anda sepenuhnya dengan LC_LANG, tetapi ingin hanya memiliki pesan sistem dalam bahasa Inggris, Anda hanya perlu mengatur

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

Ini adalah LC_MESSAGESvariabel yang mengontrol dalam pesan bahasa apa yang harus dikeluarkan (jika dipasang).
mklement0

0

Menggunakan server debian dalam bahasa perancis dan klien macsox bash, saya "hanya" harus menambahkan ini ke .bash_profile saya di direktori pengguna macosx:

ekspor LANG = fr_FR.UTF-8

Terpecahkan.


0

Jawaban lainnya benar, yaitu tentang Terminalpengaturan untuk menetapkan variabel lingkungan lokal saat startup dan menggunakan shell /etc/profile. Namun, ada cara lain yang layak dipahami - terutama jika "masalah" dialami karena sshlogin jarak jauh .

OpenSSH (seperti yang digunakan pada Linux, BSD dan macOS) dapat mengirim variabel lingkungan dari lingkungan klien ke shell yang dimulai oleh server. Ini hanya melakukan ini jika klien dikonfigurasi untuk mengirim mereka dan server dikonfigurasi untuk menerimanya. Klien ( ~/.ssh/config) perlu memiliki:

SendEnv LANG LC_*

dan server ( /etc/ssh/sshd_config) perlu:

AcceptEnv LANG LC_*

Jika keduanya ada di tempat maka lokal klien disebarkan ke shell login di server 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=

Pengaturan server yang diperlukan tidak ada di sana secara default di Snow Leopard ; itu ada di Sierra . Ingatlah untuk memulai kembali server SSH setelah memodifikasi /etc/sshd_config!!!

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.