Ubah sementara bahasa untuk pesan / peringatan / kesalahan terminal

22

Pesan di terminal saya ditampilkan menggunakan bahasa Rusia secara default, yang merupakan bahasa asli saya.

Untuk sesaat saya ingin mereka menggunakan bahasa Inggris (mis. Menempel di forum), lalu kembali ke bahasa default.

Bagaimana saya bisa melakukan sakelar dan kembali menggunakan bash?

takeshin
sumber

Jawaban:

23

Ada beberapa variabel lingkungan yang tersedia untuk mengubah pengaturan bahasa. Anda dapat melihat pengaturan lokal Anda saat ini dengan menjalankan localeperintah. Untuk mengubah semua pengaturan lokal ke Bahasa Inggris, gunakan LANG=C. Ini Clokal selalu tersedia tanpa menginstal paket bahasa tambahan. (Untuk sementara waktu beralih ke lokal non-Inggris, lihat @ mklement0 .)

Contoh:

Menjalankan perintah dengan pengaturan bahasa default dan mencetak pengaturan lokal saat ini:

$ /nonexistent
bash: /nonexistent: Bestand of map bestaat niet
$ locale
LANG=nl_NL.UTF-8
LANGUAGE=
LC_CTYPE="nl_NL.UTF-8"
LC_NUMERIC="nl_NL.UTF-8"
LC_TIME="nl_NL.UTF-8"
LC_COLLATE="nl_NL.UTF-8"
LC_MONETARY="nl_NL.UTF-8"
LC_MESSAGES="nl_NL.UTF-8"
LC_PAPER="nl_NL.UTF-8"
LC_NAME="nl_NL.UTF-8"
LC_ADDRESS="nl_NL.UTF-8"
LC_TELEPHONE="nl_NL.UTF-8"
LC_MEASUREMENT="nl_NL.UTF-8"
LC_IDENTIFICATION="nl_NL.UTF-8"
LC_ALL=

Mengganti sementara bahasa untuk satu program dan menunjukkan bahwa itu benar-benar sementara:

$ LANG=C ls /nonexistent
ls: cannot access /nonexistent: No such file or directory
$ ls /nonexistent
ls: kan geen toegang krijgen tot /nonexistent: Bestand of map bestaat niet

Ubah lokal untuk semua perintah yang dijalankan di shell saat ini dan sertakan bukti lagi:

$ LANG=C
$ ls /nonexistent
ls: cannot access /nonexistent: No such file or directory
$ locale
LANG=C
LANGUAGE=
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=
Lekensteyn
sumber
6
Untuk pengguna lain yang mengalami masalah dalam menjalankan ini - pengaturan LANGatau LANG_ALLtidak berfungsi untuk saya, belum LANGUAGE. Lihat Mengapa mengganti variabel lingkungan LANG tidak mengubah bahasa untuk saya?
gertvdijk
1
@ gertvdijk: Terima kasih untuk itu; alasan jawaban ini bekerja bahkan tanpa pengaturan LANGUAGEadalah pengecualian : GNU gettext memberikan prioritas pada LANGUAGEnilai kecuali jika nilai (efektif) LC_MESSAGES(biasanya ditetapkan secara tidak langsung melalui LANGatau LC_ALL) adalah salah satu Catau (sinonimnya) POSIX. Juga catatan yang LANGUAGEkebetulan diset dalam jawaban ini, padahal ini diatur secara default, dan jika sudah diatur, Anda harus mengesampingkan itu untuk beralih ke spesifik lokal ini bahasa (sebagai lawan "C" / "POSIX"), yang apa yang kamu temukan.
mklement0
Jawaban Anda berfungsi dengan baik ketika beralih ke lokal "C" (dengan pesan bahasa Inggris AS, seperti yang dipersyaratkan), tetapi tidak akan berfungsi untuk lokal lain kecuali jika LANGUAGEtidak disetel atau diganti secara eksplisit. Mengingat judul generik pertanyaan, kemungkinan orang akan menemukan jawaban ini juga ingin beralih ke bahasa non-Inggris, jadi silakan pertimbangkan untuk menambahkan informasi ini ke jawaban Anda.
mklement0
@ mklement0 Mengingat konteks pertanyaan (memposting pesan kesalahan bahasa Inggris), saya pikir postingan saat ini sudah cukup. Anda dapat menambahkan jawaban lain untuk menjelaskan perincian di sekitar LANGUAGEjika Anda mau :)
Lekensteyn
Saya telah menambahkan jawaban saya sendiri , seperti yang Anda sarankan. Jika Anda setuju dengan penilaian saya bahwa pembaca yang akan datang mungkin datang ke sini mencari untuk beralih ke bahasa apa pun (seperti yang telah ditunjukkan beberapa orang secara aktif), silakan tambahkan tautan ke jawaban saya untuk pertanyaan Anda. Selain itu, saya sarankan untuk mengubah nilai LANGUAGEoutput sampel Anda nl, yang merupakan nilai default aktual ketika lokal Anda berada nl_NL.UTF-8.
mklement0
9

Jawaban yang membantu Lekensteyn ini karya besar jika Anda ingin beralih ke bahasa Inggris AS pada permintaan, sebagai OP yang diminta, tetapi jika Anda ingin beralih ke yang berbeda bahasa pada permintaan , banyak pekerjaan yang diperlukan.

Sebelum mulai, Anda harus menginstal tabel pesan dengan sudo apt-get install language-pack-<lang-tag>, di mana <lang-tag>merupakan RTF 5646 bahasa sub tag sederhana , seperti esuntuk Spanyol.

Info latar belakang

GNU gettext utilitas berbasis mendahulukan tidak standar LANGUAGEvariabel lingkungan [1] lebih variabel lingkungan lokal POSIX-didefinisikan LC_ALL, LC_MESSAGESdan LANG(dalam urutan itu).

Mengingat bahwa LANGUAGEdiatur secara default pada sistem Ubuntu [2] , yaitu untuk substring dari LANGnilai yang mencerminkan baik tag bahasa sederhana (misalnya, esuntuk Spanyol) atau tag wilayah-bahasa (misalnya, de_DEuntuk varian Jerman Jerman), Anda harus menghapus atau mengganti LANGUAGEagar pesan bahasa yang berbeda berlaku. [3]

Opsi 1: Setel LANGUAGE

Contoh : Beralih ke espesan Spanyol ( ) ad-hoc:

$ LANGUAGE=es ls NoSuchFile
ls: no se puede acceder a NoSuchFile: No existe el archivo o el directorio

Catatan : Tag bahasa sederhana seperti essudah mencukupi, tetapi Anda dapat menambahkan pengidentifikasi wilayah (mis., es_ARUntuk Argentina), dan bahkan akhiran rangkaian karakter (mis., es_AR.UTF-8).
Namun, pesan yang dilokalkan mungkin hanya ada di tingkat bahasa , dan fallback adalah dengan menggunakan pesan yang cocok dengan bagian bahasa ( es, dalam kasus ini).

Opsi 2: Hapus LANGUAGEdan aturLC_ALL

Solusi alternatif ini tidak mendefinisikan LANGUAGE terlebih dahulu, dan kemudian menggunakan variabel lingkungan lokal POSIX LC_ALLuntuk secara implisit mengatur LC_MESSAGES[4] :

$ LANGUAGE= LC_ALL=es_ES.UTF-8 ls NoSuchFile
ls: no se puede acceder a NoSuchFile: No existe el archivo o el directorio

Solusi ini memiliki keuntungan mengatur semua aspek lokalisasi ke lokal yang ditentukan (seperti LC_TIMEuntuk format tanggal / waktu) dan dengan pengaturan (secara implisit) LC_MESSAGESjuga menginformasikan program-program non- GNU dari bahasa yang diinginkan.

Perhatikan bagaimana LC_ALLmengharuskan tepat, nama lokal lengkap , termasuk akhiran charset, untuk menjadi efektif ( es_ES.UTF-8) (tidak seperti LANGUAGE, yang tag bahasa sederhana cukup (seperti es)). Hal yang sama berlaku untuk pengaturan LC_MESSSAGESdan LANG. Menentukan nama lokal yang tidak valid / tidak diinstal menyebabkan fallback ke lokal POSIX dan oleh karena itu bahasa Inggris AS.


Catatan kaki

[1] Alasan mengapa jawaban Lekensteyn bekerja bahkan tanpa membuka / mengesampingkan LANGUAGEadalah pengecualian : jika nilai (efektif) LC_MESSAGES(biasanya ditetapkan secara tidak langsung melalui LANGatau LC_ALL) adalah salah satu Catau (sinonimnya) POSIX, nilai itu dihormati, terlepas dari nilai LANGUAGE, jika ada. Sebaliknya, jika nilai (efektif) LC_MESSAGESadalah yang lain, lokal spesifik , LANGUAGEdiutamakan.

[2] Ini berlaku untuk Ubuntu yang tepat , tetapi tidak harus untuk rasa lainnya ; Lekensteyn menyatakan bahwa Kubuntu tidak tidak diatur LANGUAGE.
Diperdebatkan, LANGUAGEharus tidak diatur secara default, mengingat bahwa dalam ketiadaan yang LC_MESSAGESnilai tersirat oleh LANGnilai (yang menentukan lokal saat ini), dihormati.

[3] Anda juga dapat menggunakan pendekatan ini untuk beralih ke Bahasa Inggris [AS] dengan menetapkan salah satu LANGUAGE=Catau LANGUAGE=POSIX(sebagai alternatif untuk, LANG=C/ LANG=POSIX), meskipun saya tidak jelas apakah itu diakui secara aktif atau hanya mekanisme mundur , mengingat bahwa nilai-nilai ini tidak dapat memulai dengan tag bahasa ; mungkin pilihan yang lebih baik en_US.

[4] Ada tepi kasus di mana pendekatan ini tidak bekerja: Mencoba untuk memohon dieksekusi dengan path - apakah relatif atau absolut - TIDAK beralih ke bahasa tertentu, sedangkan nama file hanya melakukan:
LANGUAGE= LC_ALL=es_ES.UTF-8 /path/to/no_such_utilitytidak tidak bekerja (output pesan di lokal saat ini), sedangkan
LANGUAGE= LC_ALL=es_ES.UTF-8 no_such_utilitytidak (menampilkan pesan kesalahan Spanyol).
Jika ada yang tahu mengapa dan apakah ada alasan bagus untuk ini, beri tahu kami.

mklement0
sumber
Kiat topi untuk @ wjandrea atas bantuannya dalam penataan pos ini.
mklement0