Saya telah menghasilkan file lokalisasi en_US.utf8 , et_EE.iso88591 dan ru_RU.utf8 . Sekarang jika saya mencoba mengubah variabel lokal apa pun menjadi ru_RU.utf8 atau en_US.utf8 , maka ini tidak berpengaruh:
# 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"
#
Namun, jika saya mengubah variabel LANG = , maka semua variabel lain kecuali LANGUAGE = dan LC_ALL = mengambil nilai LANG = variabel. Apakah ada cara untuk memodifikasi setiap variabel lokal secara terpisah? Selain itu, apakah saya benar bahwa variabel lokal bukan variabel shell biasa, tetapi lebih seperti parameter untuk utilitas lokal ?
sumber
LANG
danLC_xxx
merupakan variabel lingkungan? pengujian saya menunjukkan bahwa hanyaLANG
danLANGUAGE
danLC_MESSAGES
danLC_ALL
merupakan variabel lingkungan, sedangkan variabel lain sukaLC_CTYPE
danLC_MONETARY
bukan variabel lingkungan (juga, mereka bukan variabel shell)?env LC_TIME=en_GB date
denganenv LC_TIME=fr_FR date
danenv PATH="$PATH" date
(jelas, pilih lokal yang ada di sistem Anda). Jelas, setiap variabel dapat diatur atau tidak dalam lingkungan proses yang diberikan. Pengujian apa yang Anda lakukan? Apakah Anda yakin aplikasi yang Anda gunakan berperilaku berbeda berdasarkanLC_CTYPE
(cukup umum) danLC_MONETARY
(sangat jarang)?printenv
perintah untuk daftar variabel lingkungan bash, dan hanyaLANG
danLANGUAGE
danLC_MESSAGES
danLC_ALL
terdaftar sebagai variabel lingkungan. Saya juga dieksekusi perintahset -o posix
diikuti dengan perintahset
untuk mendapatkan variabel lingkungan dan variabel shell bash, dan hanyaLANG
danLANGUAGE
danLC_MESSAGES
danLC_ALL
telah dicatatkan. Jadi ini berarti bahwaLANG
danLANGUAGE
danLC_MESSAGES
danLC_ALL
merupakan variabel lingkungan dan variabel lokal lainnya tidak, dan juga mereka bukan variabel shell.LANG
,LANGUAGE
,LC_MESSAGES
danLC_ALL
. (Entah Anda melakukan ini secara eksplisit atau distribusi Anda atau administrator sistem Anda melakukannya untuk Anda.) Anda dapat mengatur variabel lingkungan dengan nama apa pun (valid secara sintaksis)! Tetapi beberapa nama bermakna untuk beberapa aplikasi, dan beberapa nama tidak.LC_MESSAGES
,LC_CTYPE
,LC_TIME
Dan sebagainya digunakan oleh aplikasi yang peduli tentang bahasa pesan kesalahan, pengkodean karakter, format waktu, dan sebagainya.LC_ALL
mengabaikan semua pengaturan lainnya, sehingga nilai variabel lokal lainnya tidak masalah. Biasanya hanya digunakan sementara untuk memaksa program menggunakan lokal yang diberikan, tidak masuk akal untuk memilikinya di lingkungan normal Anda.Di bawah distro berbasis Fedora / CentOS / RHEL saya percaya Anda dapat mengubah lokal ke salah satu lokal yang ditampilkan ketika Anda menjalankan
locale -a
perintah di file sistem ini:Misalnya pada sistem Fedora 14 saya:
Di bawah GNOME Anda dapat menjalankan aplikasi bantuan:
Yang memunculkan GUI ini:
Saya pikir ini sedikit berbeda untuk distro Debian / Ubuntu. Saya yakin ini file ini:
Saya percaya mereka adalah variabel lingkungan tetapi tidak sepenuhnya yakin bagaimana aplikasi memanfaatkannya.
Referensi
sumber
Pada RedHat 6 setidaknya, perhatikan bahwa jika LC_ALL diatur, maka pengaturan variabel lingkungan LC_ * lainnya tidak akan berpengaruh, karena LC_ALL lebih diutamakan daripada semua variabel lingkungan LC_ * lainnya.
sumber
Dalam sistem Debian, seseorang dapat menjalankan
dpkg-reconfigure locales
untuk mengatur bahasa utama dan membuat yang lain tersedia; maka seseorang dapat menjalankanupdate-locale
untuk mengaturLANGUAGE
variabel lingkungan/etc/default/locale
untuk memiliki bahasa fallback.sumber
dpkg-reconfigure locales
, tidaklocale