Terminal mesajları / uyarılar / hatalar için dili geçici olarak değiştirin


22

Terminalimdeki mesajlar varsayılan olarak Rusça kullanılarak görüntülenir; bu, benim ana dilimdir.

Bir an için İngilizce olmalarını istiyorum (örneğin, forumlara yapıştırma), sonra varsayılan dile geri dönün.

Anahtarı nasıl kullanabilirim ve bash kullanarak nasıl geri dönebilirim?

Yanıtlar:


23

Dil ayarlarını değiştirmek için kullanılabilecek çeşitli ortam değişkenleri vardır. localeKomutu yürüterek mevcut yerel ayarlarınızı görebilirsiniz . Tüm yerel ayarları İngilizce olarak değiştirmek için kullanın LANG=C. Bu Cyerel ayar, ek dil paketleri kurulmadan daima kullanılabilir. (Ingilizce olmayan yerel ayarlara geçici olarak geçmek için, bkz. @ Mklement0 kullanıcısının gönderisi.)

Örnekler:

Varsayılan dil ayarlarıyla bir komut çalıştırmak ve geçerli yerel ayarları yazdırmak:

$ /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=

Bir programın dilini geçici olarak geçersiz kılar ve bunun gerçekten geçici olduğunu gösterir:

$ 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

Geçerli kabukta yürütülen tüm komutlar için yerel ayarları değiştirin ve tekrar kanıtları ekleyin:

$ 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=

6
Diğer kullanıcılar için bunun işe yaramasını sağlama sorunları var - LANGya LANG_ALLda benim için çalışmıyor, henüz LANGUAGE. Bkz Neden benim için dilini değiştirmeye LANG ortam değişkeni değil kıldı?
gertvdijk

1
@gertvdijk: Bunun için teşekkürler; Bu cevabın ayarlanmadıkça bile çalışmasının nedeni LANGUAGEbir istisnadır : GNU gettext (etkin) değerinin (genellikle dolaylı olarak veya ile ayarlanır ) ya da (onun eş anlamlısı) olması dışındaLANGUAGE değere öncelik verir . Ayrıca , bu cevapta üzülmeyeceğini, varsayılan olarak ayarlandığını ve ayarlanmışsa, belirli bir yerel ayarın diline geçmek için ("C" / "POSIX" yerine) geçersiz kılmanız gerektiğini unutmayın . ne buldun LC_MESSAGESLANGLC_ALLCPOSIXLANGUAGE
mklement0

Cevabınız "C" yerel ayarına geçerken harika olur (gerektiği gibi ABD İngilizcesi mesajlarıyla), ancak LANGUAGEaçıkça ayarlanamadığı veya geçersiz kılmadığı sürece diğer yerler için çalışmaz . Sorunun genel unvanı göz önüne alındığında, insanların bu cevabı İngilizce olmayan bir dile geçmek için bulabilecekleri muhtemeldir, bu nedenle lütfen cevabınıza bu bilgiyi eklemeyi düşünün.
mklement0

@ mklement0 Sorunun kapsamı göz önüne alındığında (İngilizce hata mesajları göndererek), mevcut gönderinin yeterli olduğunu düşünüyorum. İsterseniz detaylarını açıklamak için başka bir cevap ekleyebilirsiniz LANGUAGE:)
Lekensteyn

Önerdiğin gibi kendi cevabımı ekledim . Gelecekteki okuyucuların herhangi bir dile geçmek için buraya gelebileceğini (birkaç kişi aktif olarak belirtmiş olduğu gibi) değerlendirmeme katılıyorsanız , lütfen sorunuza cevabımın bağlantısını ekleyin. Bunun dışında, LANGUAGEörnek çıktınızın nldeğerini, yerel ayarınız olduğunda gerçek varsayılan değer olarak değiştirmenizi öneririm nl_NL.UTF-8.
mklement0

9

OP'nin talep ettiği gibi talep üzerine ABD İngilizcesi'ne geçmek istiyorsanız Lekensteyn'in yararlı cevabı harika , ancak talep üzerine farklı bir dile geçmek istiyorsanız daha fazla çalışmaya ihtiyaç var.

İle başlayan önce mesaj tablolarını yüklemelisiniz sudo apt-get install language-pack-<lang-tag>nerede, <lang-tag>bir olan basit RTF 5646 dil alt etiketi gibi, esİspanyolca için.

Arkaplan bilgisi

GNU gettext merkezli programları standart olmayan öncelik vermek LANGUAGEortam değişkeni [1] POSIX tanımlanan yerel ortam değişkenleri üzerinde LC_ALL, LC_MESSAGESve LANG(bu sırayla).

Olduğu göz önüne alındığında LANGUAGEUbuntu sistemlerinde varsayılan olarak ayarlanır [2] yani için, alt dize arasında LANG(örneğin ya bir basit dil etiketi yansıtan değer esbir dil-bölge etiketi (örn İspanyolca için) ya da de_DEAlmanca Almanya varyantı için), LANGUAGEfarklı bir dilin mesajlarının etkili olabilmesi için ayarını kaldırmanız veya geçersiz kılmanız gerekir . [3]

Seçenek 1: Ayarla LANGUAGE

Örnek : İspanyolca ( es) mesajlarına geçici olarak geç:

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

Not : Basit bir dil etiketi esyeterlidir, ancak bir bölge tanımlayıcısı (örneğin es_ARArjantin için) ve hatta karakter kümesi sonekini (örn es_AR.UTF-8.) Ekleyebilirsiniz .
Bununla birlikte, yerelleştirilmiş mesajlar yalnızca dil düzeyinde olabilir ve geri dönüş, dil kısmıyla eşleşen mesajları kullanmaktır ( esbu durumda).

Seçenek 2: Ayarlayın LANGUAGEve ayarlayınLC_ALL

Bu alternatif çözüm önce tanımsızlaştırır LANGUAGE , sonra LC_ALLda dolaylı olarak LC_MESSAGES[4] ayarlamak için POSIX yerel ayar değişkenini kullanır :

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

Bu çözüm, tüm yerelleştirme yönlerini belirtilen yerel ayarlara (örneğin LC_TIMEtarih / saat biçimleri gibi ) ayarlama ve (dolaylı olarak) ayarının istenen dilin GNU olmayan programlarını LC_MESSAGESda bilgilendirmesi avantajına sahiptir.

Karakter kümesi soneki de dahil olmak üzere tam yerel ayar adının etkili olmasını ( ) (bunun aksine , basit bir dil etiketinin yeterli olduğu gibi ) nasıl LC_ALLgerektirdiğini unutmayın . Aynı ayara geçerlidir ve . Geçersiz / yüklü olmayan bir yerel ayar adı belirtmek, POSIX yerel ayarına ve dolayısıyla ABD İngilizcesine geri dönüşe neden olur.es_ES.UTF-8LANGUAGEesLC_MESSSAGESLANG


Dipnotlar

Lekensteyn cevabı da çalışır [1] nedeni olmayan unsetting / geçersiz LANGUAGEbir edilir durum : (etkin) ise LC_MESSAGESdeğer (genellikle dolaylı olarak ayarlanır LANGya da LC_ALL) olduğunu Cya da (eşanlamlısı) POSIXbağımsız değerinin, bu değer saygı LANGUAGE, varsa. Tersine, eğer (etkin) LC_MESSAGESdeğer başka bir spesifik yerel ise LANGUAGE, öncelik taşır.

[2] Bu uygun Ubuntu için geçerlidir , ancak diğer lezzetler için zorunlu değildir ; Lekensteyn belirten Kubuntu gelmez değil set LANGUAGE.
Muhtemelen, LANGUAGEgerektiği değil, onun yokluğunda verilen, varsayılan olarak ayarlanabilir LC_MESSAGESima değeri LANG(mevcut yerel belirler) değeri serbesttir.

[3] Ayrıca hakkını vererek İngilizce [ABD] geçiş için bu yaklaşımı kullanabilirsiniz LANGUAGE=Cveya LANGUAGE=POSIX(alternatif olarak LANG=C/ LANG=POSIXben anlamış değilim gerçi aktif olarak tanınan ya da sadece bir olsun,) geri dönüş mekanizması bu değerlerin yok olduğu göz önüne alındığında, bir dil etiketiyle başlama ; belki de daha iyi bir seçim olacaktır en_US.

[4] Bir var kenar bir ile yürütülebilir çağırmak için çalışmak: bu yaklaşım iş etmez durumda yolu - - nispi veya mutlak olmadığını bir oysa belirtilen dil DÖNMEDİĞİNE sadece dosya : yapar
LANGUAGE= LC_ALL=es_ES.UTF-8 /path/to/no_such_utilityyapar olmayan bir mesaj çıkış (iş geçerli yerel ayarda) ise
LANGUAGE= LC_ALL=es_ES.UTF-8 no_such_utility, (İspanyolca hata mesajı verir).
Birisi nedenini ve bunun için iyi bir neden olup olmadığını biliyorsa, bize bildirin.


Şapkanın ucu, @ wjandrea'ya bu yazıyı yapılandırmada yardım ettiği için.
mklement0
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.