Apa yang harus saya atur lokal saya dan apa implikasi melakukannya?

19

Pertanyaan ini dirangsang dengan mengajukan pertanyaan. Browser Chromium tidak mengizinkan pengaturan ukuran kertas default untuk "Cetak ke File" , dan juga dengan percakapan dengan @Gilles saat mengobrol. Seperti yang ditunjukkan oleh @don_crissti, dan sebagaimana diverifikasi oleh saya, mengubah lokal (setidaknya LC_PAPER) membuat perbedaan dalam ukuran kertas apa yang dipilih.

Saya tidak pernah memikirkan apa yang harus dipilih, dan selalu pergi en_US.UTF-8karena sepertinya pilihan default yang masuk akal.

Namun, per @Gilles saat mengobrol (lihat percakapan mulai di http://chat.stackexchange.com/transcript/message/17017095#17017095 ). Ekstrak:

Gilles: LC_PAPER default ke $ LANG

Gilles: Anda harus memiliki LANG = en_US.UTF-8. Itu ide yang buruk: ia menetapkan LC_COLLATE dan itu hampir selalu merupakan hal yang buruk

Gilles: LC_COLLATE tidak mendeskripsikan susunan yang benar, itu terlalu membatasi (ia pergi karakter demi karakter) menghapus LANG dan sebaliknya mengatur LC_CTYPE dan LC_PAPER

Gilles: ditambah LC_MESSAGES jika Anda ingin pesan dalam bahasa selain bahasa Inggris

Jelas, ada masalah di sini yang tidak saya sadari, dan saya yakin banyak yang lain juga. Jadi, masalah apa yang harus Anda pertimbangkan ketika mengatur lokal, dan bagaimana Anda mengaturnya? Saya selalu menjalankan dpkg-reconfigure localesdi Debian, dan tidak berpikir dua kali tentang itu.

Pertanyaan spesifik: Haruskah saya mengatur lokal saya ke en_IN.UTF-8? Apakah ada kelemahan melakukannya?

Lihat juga: Apakah (harus) LC_COLLATE memengaruhi rentang karakter?

Faheem Mitha
sumber

Jawaban:

29

Pengaturan lokal adalah preferensi pengguna yang terkait dengan budaya Anda.

Nama lokal

Pada semua varian unix saat ini yang saya tahu (tetapi tidak pada beberapa barang antik), nama lokal mengikuti pola yang sama:

  • Sebuah ISO 639-1 huruf kecil dua huruf kode bahasa, atau ISO 639-2 tiga huruf kode bahasa jika bahasa tidak memiliki kode dua huruf. Misalnya, enuntuk bahasa Inggris, deuntuk Jerman, jauntuk Jepang, ukuntuk Ukraina, beruntuk Berber, ...
  • Untuk banyak tetapi tidak semua bahasa, garis bawah _diikuti dengan kode negara dua huruf ISO 3166 huruf besar. Jadi: en_USuntuk bahasa Inggris AS, en_UKuntuk Inggris Inggris, fr_CAKanada (Québec) Prancis, de_DEuntuk Jerman Jerman, de_ATJerman Jerman, ja_JPuntuk Jepang (Jepang), dll.
  • Opsional, titik .diikuti dengan nama sebuah karakter encoding seperti UTF-8, ISO-8859-1, KOI8-U, GB2312, Big5, dll Dengan GNU libc setidaknya (saya tidak tahu seberapa luas ini), kasus dan tanda baca diabaikan dalam pengkodean nama. Sebagai contoh, zh_CN.UTF-8adalah Mandarin (disederhanakan) Mandarin dikodekan dalam UTF-8, sedangkan zh_CNMandarin Mandarin dikodekan dalam GB2312, dan Cina zh_TWTaiwan (tradisional) dikodekan dalam Big5.
  • Secara opsional, tanda saat @diikuti dengan nama varian. Arti varian tergantung pada lokal. Sebagai contoh, banyak negara Eropa memiliki @eurovarian lokal di mana tanda mata uangnya adalah € dan di mana pengkodeannya adalah salah satu yang menyertakan karakter ini (ISO 8859-15 atau ISO 8859-16), sebagai lawan varian tanpa hiasan dengan tanda mata uang yang lebih tua. Misalnya, en_IE(Inggris, Irlandia) menggunakan pengkodean latin1 (ISO 8859-1) dan £ sebagai simbol mata uang sementara en_IE@euromenggunakan pengkodean latin9 (ISO 8859-15) dan € sebagai simbol mata uang.

Selain itu, ada dua nama lokal yang ada di semua sistem seperti-unix: Cdan POSIX. Nama-nama ini sinonim dan berarti komputer, yaitu pengaturan default yang sesuai untuk data yang diuraikan oleh program komputer.

Pengaturan lokal

Kategori lokal berikut ini didefinisikan oleh POSIX :

  • LC_CTYPE: set karakter yang digunakan oleh aplikasi terminal: data klasifikasi (yang karakternya adalah huruf, tanda baca, spasi, tidak valid, dll.) dan konversi kasus. Utilitas teks biasanya mengindahkan LC_CTYPEuntuk menentukan batas karakter.
  • LC_COLLATE: pesanan collation (sorting). Pengaturan ini sangat terbatas digunakan karena beberapa alasan:
    • Sebagian besar bahasa memiliki aturan rumit yang bergantung pada apa yang sedang disortir (mis. Kata kamus dan nama yang tepat mungkin tidak menggunakan urutan yang sama) dan tidak dapat diungkapkan oleh LC_COLLATE.
    • Ada beberapa aplikasi di mana masalah urutan yang tepat dilakukan oleh perangkat lunak yang menggunakan pengaturan lokal. Misalnya, pengolah kata menyimpan bahasa dan penyandian file dalam file itu sendiri (jika tidak file tidak akan diproses dengan benar pada sistem dengan pengaturan lokal yang berbeda) dan tidak peduli tentang pengaturan lokal yang ditentukan oleh lingkungan.
    • LC_COLLATEdapat memiliki efek samping yang buruk, khususnya karena menyebabkan urutan sortir A <a <B <…, yang menjadikan “antara A dan Z” termasuk huruf kecil a hingga y. Secara khusus, ekspresi reguler yang sangat umum seperti [A-Z]memecah beberapa aplikasi .
  • LC_MESSAGES: bahasa informasi dan pesan kesalahan.
  • LC_NUMERIC: pemformatan angka: desimal dan pemisah ribuan.
    Banyak aplikasi hard-code .sebagai pemisah desimal. Ini membuat LC_NUMERICtidak terlalu berguna dan berpotensi berbahaya:
    • Bahkan jika Anda mengaturnya, Anda masih akan sering melihat format default.
    • Anda cenderung masuk ke situasi di mana satu aplikasi menghasilkan output yang bergantung pada lokal dan aplikasi lain mengharapkan .menjadi titik desimal, atau ,menjadi pemisah bidang.
  • LC_MONETARY: seperti LC_NUMERIC, tetapi untuk jumlah mata uang lokal.
    Sangat sedikit aplikasi yang menggunakan ini.
  • LC_TIME: format tanggal dan waktu: nama hari kerja dan bulan, jam 12 atau 24 jam, urutan bagian tanggal, tanda baca, dll.

GNU libc, yang akan Anda temukan di Linux yang tidak tertanam, mendefinisikan kategori lokal tambahan:

  • LC_PAPER: ukuran kertas standar (ditentukan oleh tinggi dan lebar).
  • LC_NAME, LC_ADDRESS, LC_TELEPHONE, LC_MEASUREMENT, LC_IDENTIFICATION: Saya tidak tahu dari setiap aplikasi yang menggunakan ini.

Variabel lingkungan

Aplikasi yang menggunakan pengaturan lokal menentukan mereka dari variabel lingkungan.

  • Kemudian nilai LANGvariabel lingkungan digunakan kecuali ditimpa oleh pengaturan lain. Jika LANGtidak disetel, lokal default adalah C.
  • LC_xxxNama - nama dapat digunakan sebagai variabel lingkungan.
  • Jika LC_ALLdiatur, maka semua nilai lainnya diabaikan; ini sangat berguna untuk mengatur LC_ALL=Caplikasi yang dijalankan yang perlu menghasilkan output yang sama di mana pun mereka dijalankan.
  • Selain itu, libc GNU digunakanLANGUAGE untuk mendefinisikan fallback untuk LC_MESSAGES(misalnya LANGUAGE=fr_BE:fr_FR:enuntuk memilih Bahasa Prancis Belgia, atau jika Prancis Perancis tidak tersedia, atau jika Bahasa Inggris tidak tersedia).

Menginstal lokal

Data lokal dapat berukuran besar, sehingga beberapa distribusi tidak mengirimkannya dalam bentuk yang dapat digunakan dan sebagai gantinya memerlukan langkah instalasi tambahan.

  • Pada Debian, untuk menginstal lokal, jalankan dpkg-reconfigure localesdan pilih dari daftar di kotak dialog, atau edit /etc/locale.gendan kemudian jalankan locale-gen.
  • Di Ubuntu, untuk menginstal lokal, jalankan locale-gendengan nama-nama lokal sebagai argumen.

Anda dapat menentukan lokal Anda sendiri .

Rekomendasi

Pengaturan yang bermanfaat adalah:

  • Setel LC_CTYPEke bahasa dan penyandian tempat Anda menyandikan file teks Anda. Pastikan terminal Anda menggunakan penyandian itu.
    Untuk sebagian besar bahasa, hanya masalah penyandian. Ada beberapa pengecualian; misalnya, huruf besar iadalah Idalam kebanyakan bahasa tetapi İdi Turki (tr_TR ).
  • Setel LC_MESSAGESke bahasa tempat Anda ingin melihat pesan.
  • Setel LC_PAPERke en_USjika Anda ingin Surat US menjadi ukuran kertas standar dan hal lainnya (mis. en_GB) Jika Anda menginginkan A4.
  • Secara opsional, atur LC_TIMEke format waktu favorit Anda.

Seperti dijelaskan di atas, hindari pengaturan LC_COLLATEdan LC_NUMERIC. Jika Anda menggunakan LANG, timpa kedua kategori ini secara eksplisit dengan mengaturnya C.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Hai Gilles, terima kasih atas jawaban terinci. Di mana tempat yang bagus untuk mengganti pengaturan default di Debian? Karena saya memerlukan ukuran kertas A4, saya kira saya perlu mengganti nilai default LC_PAPER. Dan dapatkah saya memperbarui ini di seluruh sistem tanpa me-reboot?
Faheem Mitha
1
@FaheemMitha Apa cara distro / shell-agnostic terbaik untuk mengatur variabel lingkungan? Dan jika Anda ingin mengaturnya di seluruh sistem, pada Debian, ada juga /etc/default/locale. File-file ini berlaku ketika Anda login; Anda dapat melakukannya export LC_PAPER=…di shell untuk mempengaruhi perintah yang diluncurkan dari shell itu.
Gilles 'SANGAT berhenti menjadi jahat'