Mac OS X'te $ LANG değişkeni nerede ayarlanır?


24

wgetLion OS X'i kurduktan sonra ilk kez kullandım ve wget'in kendi dilime yerelleştirildiğini fark ettim. setTerminalde çalışan komut LANGdeğişkenimin yerel dilimi temsil ettiğini gösterdi . Bunu nerede değiştirebilir veya wgetbu ayarı yok sayabilirim?

güncelleştirme

İşte localebana ne veriyor:

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=

Bu nedenle, parametre dışı (çıktılar ve hata ayıklama mesajları gibi) çıktıları Litvancadır. Bu benim sorunum. İngilizceye geri almak istiyorum.

zshGiriş kabuğum olarak kullanıyorum .


Sorun tam olarak nedir wget? Ve ne localegösterir ve bu Dil ve Metin sistemi tercih panelindeki dil seçiminizden beklediğinizle aynı mıdır?
bmike

Yanıtlar:


26

Varsayılan olarak, Terminal yerel ortam değişkenlerini seçili dil ve Terminal'in kullandığı saat / tarih / sayı biçimleriyle eşleşecek şekilde ayarlar.

Sistem Tercihleri> Dil ve Metin

(Bu, Lion'daki isimdir. Önceki sistemlerde tercih panelinin tam adı değişebilir.)

Geçici bir çözüm, ingilizce'yi dil listesinin en üstüne sürüklemek, sonra Terminal'i açmak, sonra da Litvanyalı'yı en üste taşımaktır. O zaman sadece Terminal İngilizce olacaktır. Ancak, Terminal'den çıkıp yeniden başlatırsanız Litvanca'ya sıfırlanır.

Kalıcı bir yaklaşım, Terminal'e yerel ortam değişkenlerini ayarlamamasını söyleyerek kapatmaktır.

Terminal> Tercihler> Ayarlar> [profil]> Gelişmiş> Başlangıçta yerel ortam değişkenlerini ayarla

Ardından, yerel ayar dil belirtilmemiş olarak varsayılan "C" olur ve programların çoğu İngilizce olarak varsayılandır.

Bunu devre dışı bırakmanın bazı programların, Terminal'in hangi karakter kodlamasını kullandığının farkında olmayacağı ve yalnızca ASCII veya ISO-Latin-1 olduğunu varsaydığı anlamına gelir. Öyleyse Terminal UTF-8 kullanıyorsa (varsayılan), bu programlar istenildiği gibi olabilir veya olmayabilir.

Bu çoğunlukla wgetsöz konusu ise, varsayılan ayar profilinin bir kopyasını almanızı, özel profilinizdeki yerel ayarları kapatmanızı ve yalnızca bu profili wgetkullanırken UTF-8 kullanmaya devam edebilmeniz için kullanmanızı öneririz. Diğer programları kullanırken, varsayılan ayarları kullanarak.

Diğerlerinin de belirttiği gibi, Terminal tarafından sağlanan başlangıç ​​yerel ayarlarını bir kabuk başlangıç ​​komut dosyasında geçersiz kılabilirsiniz. Zsh için ~ / .zshrc içine koyun. Bash için ~ / .bashrc kullanın (ve zaten bir tane yoksa ~ / .bashrc çalıştıran bir ~ / .bash_profile oluşturun).

Yerel ortam değerlerinin her biri hakkında daha fazla bilgi için x-man-page: // 1 / yerel ayar bölümüne bakın.

Ancak, yalnızca unset LANG"C" ye ayarlamanız veya "C" ye ayarlamanız durumunda, bu normalde tüm kabukları ve programları için geçerli olacaktır , oysa çoğu zaman UTF-8 kullanmak ve Terminal'in yerel değişkenleri eşleşecek şekilde ayarlamasını isteyebilirsiniz. en üst düzeyde işbirliği, sadakat ve işlevsellik elde etmek.

Bu nedenle, bu rotaya gidecekseniz, kodlama bilgilerini ("UTF-8") korumak ve sadece İngilizce'yi zorlamak için başlangıç ​​değerlerini değiştirmek yerine kodunuzu düzenlemenizi öneririm. değişkenleri "C" ye ayarlamak yerine.

Örneğin, bu zsh ve bash'de çalışır:

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

Ne zaman LANG="lt_LT.UTF-8", bu onu değiştirecek LANG="en_US.UTF-8". Bunu wgettest etmek için elimde mevcut değil , ama bu yeterli olmalı.

Bu şekilde yapmak, Terminal'deki karakter kodlaması tercihini değiştirirseniz, kabuk başlangıç ​​komut dosyanızdaki geçersiz kılmayacaksınız demektir.


Güzel yapılır; LANGyeniden tanımlama komutunu genelleştirmek için : echo ${LANG/*./en_US.}mevcut kültür adını en_US , ne olduğuna bakılmaksızın değiştirir ; çalışır bash, ksh, zsh.
mklement0

7

Burada ayarlandı ...

görüntü tanımını buraya girin

Aşağı açılan menüde daha fazla veya daha az seçenek istiyorsanız, daha fazla ödül görmek için Kodlamalar sekmesine gidin.


3
os x üzerinde ~ / .bash_profile, bashrc değil. Çevrimiçi dersleri okurken insanlar bununla çok karıştı.
Enrico Susatyo

Allah kahretsin - onu yakaladığın için teşekkürler. Hatta açık kaynak sayfasına bile gittim ve elmanın gnu bash'ta değişiklik yapıp yapmadığını ve hala yanlış olduğunu kontrol ettim. (cevabımı düzenleme - teşekkürler @the_great_monkey)
bmike

4
Terminal ~ / .bash_profile komutunu çalıştıran giriş kabukları oluşturur. Bununla birlikte, çoğu kullanıcı özelleştirmesi ~ / .bashrc içine yerleştirilmeli, böylece oturum açma kabukları (örneğin, alt kabukları) için de uygulanmalı ve ~ / .bash_profile ~ / .bashrc komutunu çalıştırmalı, bu nedenle oturum açma kabukları için geçerlidir. ~ / .bash_profile genellikle çoğunlukla boştur ve yalnızca kullanıcının alt kabukları için çalıştırmak istemediği özel olarak üst düzey oturum açma kabukları için kod içerir.
Chris Page

1
"man sayfasının hızlı okunması, kabuğun her günlüğe bu değeri koyduğunu gösterir" Bash man sayfası bunu söyler; "Yerel ortamı ayarla ..." tercihini kapatırsam, değişkenlerin hiçbiri ayarlanmaz ve yerel ayarlar LANG=ve diğer değerleri varsayılan olarak gösterir "C".
Chris Sayfa

2

Bu sorunu, bir terminal başlattığımda yüklenen .profile dosyamdaki dili ayarlayarak çözdüm.

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

LC_ALLgeçersiz kıldığından LANG, ilk komutunuzun etkisi olmaz.
mklement0

Ayrıca, POSIXeşdeğerdir Cve bu Unicode ile baş edemez.
Sebastian Graf

1

Linux deneyimlerine daha fazla dayanarak, lokalizasyonunuzu LC_LANG ile tamamen değiştirmek istemiyorsanız, ancak sadece sistem mesajlarının ingilizce olmasını istiyorsanız, hemen ayarlayın

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

LC_MESSAGESHangi dilde mesajların çıkması gerektiğini kontrol eden değişken (eğer varsa).
mklement0

0

Fransızca ve macsox bash istemcisinde bir debian sunucusu kullanarak, "sadece" macosx kullanıcı dizinindeki .bash_profile dosyasına eklemek zorunda kaldı:

dışa aktar LANG = fr_FR.UTF-8

Çözüldü.


0

Diğer cevaplar doğrudur, yani başlangıçta ve kabuğun kullanımı sırasında ayarlanmış yerel ortam değişkenleriTerminal ayarı hakkında . Ancak, anlaşılmaya değer başka bir yol daha var - özellikle de uzaktan giriş nedeniyle "sorun" yaşanıyorsa ./etc/profilessh

OpenSSH (Linux, BSD ve macOS'ta kullanıldığı gibi), ortam değişkenlerini müşterinin ortamından sunucunun başlattığı kabuğa gönderebilir. Bunu yalnızca istemci gönderecek şekilde yapılandırılmışsa ve sunucu bunları kabul edecek şekilde yapılandırılmışsa yapar. İstemcinin ( ~/.ssh/config) olması gerekirdi:

SendEnv LANG LC_*

ve sunucunun ( /etc/ssh/sshd_config) ihtiyacı:

AcceptEnv LANG LC_*

Bu ikisi de yerinde ise, müşterinin yerel ssh sunucusundaki giriş kabuğuna yayılır:

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

Gerekli sunucu ayarı Snow Leopard'da varsayılan olarak yoktur ; Sierra'da orada . Değiştirdikten sonra SSH sunucusunu yeniden başlatmayı unutmayın /etc/sshd_config!!!

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.