Yerel ortam değişkeni nasıl değiştirilir?


18

Ben yarattı en_US.utf8 , et_EE.iso88591 ve ru_RU.utf8 yerelleştirme dosyalarını. Yerel ayar değişkenlerinden herhangi birini ru_RU.utf8 veya en_US.utf8 olarak değiştirmeye çalışırsam , bunun herhangi bir etkisi yoktur:

# locale -a
C
en_US.utf8
et_EE
et_EE.iso88591
POSIX
ru_RU.utf8
# LC_TIME=ru_RU.utf8
# locale | grep LC_TIME
LC_TIME="et_EE.iso88591"
# LC_TIME="ru_RU.utf8"
# locale | grep LC_TIME
LC_TIME="et_EE.iso88591"
# 

Ancak, LANG = değişkeni değiştirirsem, LANGUAGE = ve LC_ALL = dışındaki tüm değişkenler LANG = değişkeninin değerini alır . Her yerel ayar değişkenini ayrı olarak değiştirmenin bir yolu var mı? Ayrıca, yerel değişkenlerin düzenli kabuk değişkenleri değil, daha çok yerel ayar yardımcı programına parametreler gibi olduğunu düzeltir miyim ?

Yanıtlar:


15

Herhangi bir yerel ayar kategorisini bağımsız olarak ayarlayabilirsiniz. LANGyalnızca açıkça ayarlanmamış kategoriler için geçerlidir.

LANGve LC_xxxsıradan ortam değişkenleridir. Bunlar localeyardımcı programın ayarları değildir : localeprogram herhangi bir yerel ayarlamaya dahil değildir, mevcut ve mevcut yerel ayarları bildirmek için sadece küçük bir yardımcı programdır.

Yazdığınızda LC_TIME=ru_RU.utf8, bu bir ortam değişkeni değil, yalnızca kabuk değişkeni olarak ayarlanır. Kabuk değişkenleri kabuğun içindedir, diğer programlar tarafından görülmez. Ortam değişkenleri ise kabuğun başladığı programlar tarafından miras alınır. Değişkeni ortama da aktarmanız gerekir:

$ LC_TIME=ru_RU.utf8
$ locale | grep LC_TIME
LC_TIME="et_EE.iso88591"
$ export LC_TIME
$ locale | grep LC_TIME
LC_TIME="ru_RU.utf8"

veya doğrudan

$ export LC_TIME=ru_RU.utf8
$ locale | grep LC_TIME
LC_TIME="ru_RU.utf8"

"LANG ve LC_xxx sıradan ortam değişkenleridir" Bunu nasıl bilirsiniz LANGve LC_xxxortam değişkenleridir? Sadece benim test gösterileri LANGve LANGUAGEve LC_MESSAGESve LC_ALLdiğer benzeri değişkenler ise çevre değişkenleri, LC_CTYPEve LC_MONETARYçevre değişkenleri (ayrıca, bunlar kabuk değişkenleri değildir) değil mi?
rony_t

@rony_t Uygulamaların ve kütüphanelerin kaynak kodlarına bakabilir, belgelerine bakabilir veya onlarla deney yapabilirsiniz. Örneğin, rekabet etmektedir env LC_TIME=en_GB dateile env LC_TIME=fr_FR dateve env PATH="$PATH" date(açıkçası, sisteminizde mevcut yerel ayarları almak). Açıkçası, her değişken belirli bir işlemin ortamında ayarlanmış olabilir veya olmayabilir. Hangi testi yaptın? Kullandığınız uygulamanın LC_CTYPE(oldukça yaygın) ve LC_MONETARY(oldukça nadir) temelde farklı davrandığından emin misiniz ?
Gilles 'SO- kötü olmayı bırak'

Terminalde, bir yürütülen printenvBash ortam değişkenleri listelemek için komut, sadece LANGve LANGUAGEve LC_MESSAGESve LC_ALLortam değişkenleri olarak sıralandı. Ayrıca komutunu infaz set -o posixemri ile takip edilen setortam değişkenleri ve Bash kabuk değişkenlerini almak ve sadece LANGve LANGUAGEve LC_MESSAGESve LC_ALLsıralandı. Bu yollarla Yani LANGve LANGUAGEve LC_MESSAGESve LC_ALLortam değişkenleri ve yerel değişkenlerin geri kalanı değildir ve ayrıca kabuk değişkenleri değillerdir.
rony_t

@rony_t sayılı O anlamına gelir Eğer ortam değişkenleri belirledik LANG, LANGUAGE, LC_MESSAGESve LC_ALL. (Ya bunu açıkça yaptınız ya da dağıtımınız ya da sistem yöneticiniz sizin için yaptı.) Herhangi bir (sözdizimsel olarak geçerli) adla bir ortam değişkeni ayarlayabilirsiniz! Ancak bazı isimler bazı uygulamalar için anlamlıdır ve bazı isimler değildir. LC_MESSAGES, LC_CTYPE, LC_TIMEVe benzeri hata mesajlarının dili, karakter kodlaması, zaman biçiminde umurumda uygulamaların kullandığı ve benzeri edilir.
Gilles 'SO- kötü olmayı bırak'

@rony_t Bu arada yapılandırmanız çok garip. Ayar LC_ALL, diğer tüm ayarları geçersiz kılar, bu nedenle diğer yerel ayar değişkenlerinin değeri önemli değildir. Normalde bir programı belirli bir yerel ayarı kullanmaya zorlamak için geçici olarak kullanılır, normal ortamınızda olması mantıklı değildir.
Gilles 'SO- kötü olmayı bırak'

6

Fedora / CentOS / RHEL tabanlı dağıtımların altında, locale -abu sistem dosyasında komutu çalıştırdığınızda yerel ayarı görüntülenen yerel ayarlardan biriyle değiştirebileceğinizi düşünüyorum :

/etc/sysconfig/i18n

Örneğin benim Fedora 14 sistemimde:

$ more /etc/sysconfig/i18n 
LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"

GNOME altında yardım uygulamasını çalıştırabilirsiniz:

system-config-language

Bu GUI'yi getiriyor:

             ss lang.  gui'nin

Debian / Ubuntu dağıtımları için biraz farklı olduğunu düşünüyorum. Bu dosya olduğuna inanıyorum:

/etc/default/locale

Ortam değişkenleri olduğuna inanıyorum, ancak uygulamaların bunları nasıl kullandıklarından tam olarak emin değilim.

Referanslar


4

En azından RedHat 6'da, LC_ALL ayarlanırsa, LC_ALL tüm diğer LC_ * ortam değişkenlerine göre öncelikli olduğundan diğer LC_ * ortam değişkenlerinin ayarının herhangi bir etkisi olmayacağını unutmayın.

[root@nbu76 bin]# LC_TIME=en_US.UTF-8
[root@nbu76 bin]# export LC_TIME
[root@nbu76 bin]# locale
LANG=en_US.UTF-8
LC_CTYPE="en_IE"
LC_NUMERIC="en_IE"
LC_TIME="en_IE"
...
LC_ALL=en_IE
[root@nbu76 bin]# unset LC_ALL
[root@nbu76 bin]# locale
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
LC_NUMERIC="en_US.UTF-8"
LC_TIME=en_US.UTF-8
...
LC_ALL=
[root@nbu76 bin]# export LC_TIME=en_IE
[root@nbu76 bin]# locale
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
LC_NUMERIC="en_US.UTF-8"
LC_TIME=en_IE
....
LC_ALL=

1

Debian sistemlerinde, dpkg-reconfigure localesana dili ayarlamak ve diğerlerini kullanılabilir hale getirmek için çalışma yapılabilir; ortam değişkeninin yedek dillere update-localeayarlanması için çalıştırılabilir .LANGUAGE/etc/default/locale


2
dpkg-reconfigure locales, değillocale
lauriys
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.