Yerel ayarımı neye ayarlamalıyım ve bunu yapmanın sonuçları nelerdir?


20

Bu soru, Chromium tarayıcısının "Dosyaya Yazdır" için varsayılan kağıt boyutunun ayarlanmasına izin vermediğini sorarak ve ayrıca sohbet sırasında @Gilles ile bir görüşmeyle uyarıldı. @Don_crissti tarafından işaret edildiği ve benim tarafımdan doğrulandığı gibi, yerel ayarın değiştirilmesi (en azından LC_PAPER) hangi kağıt boyutunun seçildiği konusunda bir fark yaratır.

Ne seçeceğimi hiç düşünmemiştim ve en_US.UTF-8makul bir varsayılan seçim gibi göründüğü için hep gitmiştim .

Ancak, sohbet sırasında @Gilles başına ( http://chat.stackexchange.com/transcript/message/17017095#17017095 adresinden başlayan sohbete bakın ). Hulasa:

Gilles: LC_PAPER varsayılan olarak $ LANG

Gilles: LANG = en_US.UTF-8 olmalıdır. Bu kötü bir fikir: LC_COLLATE ayarlıyor ve bu neredeyse her zaman kötü bir şey

Gilles: LC_COLLATE doğru harmanlamayı tanımlamıyor, LANG'ı kaldırmak ve bunun yerine LC_CTYPE ve LC_PAPER'ı ayarlamak için çok kısıtlayıcı (karakter karakterde gidiyor)

Gilles: artı İngilizce dışında bir dilde mesajlar istiyorsanız LC_MESSAGES

Açıkçası, burada farkında olmadığım sorunlar var ve eminim ki birçokları da var. Peki, yerel ayarları ayarlarken hangi konuları göz önünde bulundurmalısınız ve bunları nasıl ayarlamalısınız? Her zaman dpkg-reconfigure localesDebian'da koştum ve iki kez düşünmedim.

Özel soru: Yerel ayarımı en_IN.UTF-8 olarak ayarlamam gerekir mi? Bunu yapmanın sakıncaları var mı?

Ayrıca bkz: LC_COLLATE karakter aralıklarını etkiler mi (etmelidir)?

Yanıtlar:


30

Yerel ayarlar, kültürünüzle ilgili kullanıcı tercihleridir.

Yerel adlar

Bildiğim tüm Unix varyantlarında (ancak birkaç antikada değil), yerel ayar adları aynı kalıbı takip eder:

  • Bir ISO 639-1 küçük harfli iki harfli dil kodu veya dilde iki harfli kod yoksa bir ISO 639-2 üç harfli dil kodu. Örneğin, enİngilizce, deAlmanca, jaJaponca, ukUkraynaca, berBerber,…
  • Tüm diller olmasa da bir çok dilde alt çizgi ve _ardından ISO 3166 büyük harfli iki harfli ülke kodu gelir. Bu nedenle: en_USABD İngilizcesi, en_UKİngiliz İngilizcesi, fr_CAKanada (Québec) Fransızca, de_DEAlmanya de_ATAlmancası, Avusturya Almancası, ja_JPJaponca (Japonya) vb. İçin
  • İsteğe bağlı olarak, bir nokta ., bir adını ve ardından kodlayan karakteri gibi UTF-8, ISO-8859-1, KOI8-U, GB2312, Big5(bunun ne kadar yaygın bilmiyorum), vaka ve noktalama isimleri kodlayan göz ardı edilir, en azından GNU C ile, vb. Örneğin zh_CN.UTF-8, Mandarin Çince (basitleştirilmiş) UTF-8 ile zh_CNkodlanırken, Mandarin Çince GB2312 ile kodlanır ve zh_TWTayvanlı (geleneksel) Çince Big5 ile kodlanır.
  • İsteğe bağlı olarak, bir at işareti ve @ardından bir varyant adı. Varyantların anlamı yerel ayara bağlıdır. Örneğin, birçok Avrupa ülkesinde @europara birimi işaretinin € olduğu ve kodlamanın, eski para birimi işaretiyle süslenmemiş varyantın aksine, bu karakteri (ISO 8859-15 veya ISO 8859-16) içeren bir yerel ayar varyantı vardır. Örneğin, en_IE(İngilizce, İrlanda) latin1 (ISO 8859-1) kodlamasını ve para birimi simgesi olarak £, para birimi simgesi olarak en_IE@eurolatin9 (ISO 8859-15) kodunu ve € değerini kullanır.

Ayrıca, tüm unix benzeri sistemlerde bulunan iki yerel ad vardır: Cve POSIX. Bu adlar eş anlamlıdır ve ortalama bilgisayarlardır, yani bir bilgisayar programı tarafından ayrıştırılan veriler için uygun olan varsayılan ayarlar.

Yerel ayarlar

Aşağıdaki yerel ayar kategorileri POSIX tarafından tanımlanır :

  • LC_CTYPE: terminal uygulamaları tarafından kullanılan karakter kümesi: sınıflandırma verileri (hangi karakterler harf, noktalama işareti, boşluk, geçersiz vb.) ve büyük / küçük harf dönüştürme. Metin yardımcı programları genellikle LC_CTYPEkarakter sınırlarını belirlemeye dikkat eder.
  • LC_COLLATE: harmanlama (sıralama) düzeni. Bu ayar birkaç nedenden dolayı çok sınırlıdır:
    • Çoğu dilde, neyin sıralandığına bağlı olarak karmaşık kurallar bulunur (örneğin, sözlük sözcükleri ve özel adlar aynı sırayı kullanamayabilir) ve tarafından ifade edilemez LC_COLLATE.
    • Yerel ayarları kullanan yazılımlar tarafından gerçekleştirilen uygun sıralama düzeninin önemli olduğu birkaç uygulama vardır. Örneğin, kelime işlemciler bir dosyanın dilini ve kodlamasını dosyanın kendisinde saklar (aksi takdirde dosya farklı yerel ayarlara sahip bir sistemde doğru şekilde işlenmez) ve ortam tarafından belirtilen yerel ayarlarla ilgilenmez.
    • LC_COLLATEözellikle A ve Z arasında bir küçük harf olan a ile y arasındaki küçük harf harflerini içeren A <a <B <… sıralama düzenine neden olduğu için kötü yan etkileri olabilir. Özellikle, bazı uygulamaları kırmak gibi[A-Z] çok yaygın düzenli ifadeler .
  • LC_MESSAGES: bilgi ve hata mesajlarının dili.
  • LC_NUMERIC: sayı biçimlendirme: ondalık ve binlerce ayırıcı.
    Birçok uygulama .ondalık ayırıcı olarak sabit kodlanır. Bu LC_NUMERICçok yararlı ve potansiyel olarak tehlikeli değildir:
    • Ayarlasanız bile, varsayılan biçimi oldukça sık görürsünüz.
    • Bir uygulamanın yerel ayara bağlı çıktı ürettiği ve başka bir uygulamanın .ondalık nokta veya ,alan ayırıcı olmasını beklediği bir duruma girme olasılığınız yüksektir .
  • LC_MONETARY: gibi LC_NUMERIC, ancak yerel para birimi miktarları için.
    Çok az uygulama bunu kullanıyor.
  • LC_TIME: tarih ve saat biçimlendirmesi: hafta içi ve ay adları, 12 veya 24 saatlik saat, tarih bölümlerinin sırası, noktalama işaretleri vb.

Gömülü olmayan Linux'ta bulacağınız GNU libc ek yerel ayar kategorilerini tanımlar:

  • LC_PAPER: varsayılan kağıt boyutu (yükseklik ve genişlik ile tanımlanmıştır).
  • LC_NAME, LC_ADDRESS, LC_TELEPHONE, LC_MEASUREMENT, LC_IDENTIFICATION: Bunları kullanan tüm uygulama bilmiyorum.

Ortam Değişkenleri

Yerel ayarları kullanan uygulamalar, ortam değişkenlerinden belirler.

  • Daha sonra LANGbaşka bir ayar tarafından geçersiz kılınmadıkça ortam değişkeninin değeri kullanılır. Eğer LANGayarlanmazsa, varsayılan yerel olduğunu C.
  • LC_xxxİsimleri ortam değişkenleri olarak kullanılabilir.
  • Eğer LC_ALLayarlanırsa, diğer tüm değerler dikkate alınmaz; bu, LC_ALL=Cnerede çalıştırıldıklarına bakılmaksızın aynı çıktıyı üretmesi gereken çalıştırma uygulamalarını ayarlamak için özellikle yararlıdır .
  • Ek olarak, GNU libc ,LANGUAGELC_MESSAGES (örneğin LANGUAGE=fr_BE:fr_FR:en, Belçika Fransızcası tercih etmek veya kullanılamıyorsa Fransa Fransızcası veya kullanılamıyor İngilizce ise) için geri dönüşleri tanımlamak için kullanır .

Yerel ayarları yükleme

Yerel veriler büyük olabilir, bu nedenle bazı dağıtımlar bunları kullanılabilir bir biçimde göndermez ve bunun yerine ek bir kurulum adımı gerektirir.

  • Debian'da yerel ayarları yüklemek dpkg-reconfigure localesiçin, iletişim kutusundaki listeden çalıştırın ve seçin veya düzenleyip /etc/locale.gençalıştırın locale-gen.
  • Ubuntu'da, yerel ayarları yüklemek locale-geniçin, bağımsız değişken olarak yerel ayarların adlarıyla çalıştırın .

Sen edebilirsiniz kendi yerel tanımlamak .

Öneri

Yararlı ayarlar:

  • LC_CTYPEMetin dosyalarınızı kodladığınız dile ve kodlamaya ayarlayın . Terminallerinizin bu kodlamayı kullandığından emin olun.
    Çoğu dil için yalnızca kodlama önemlidir. Bir kaç istisna var; örneğin bir büyük harf iolduğu Içoğu dilde ama İTürkçe ( tr_TR).
  • LC_MESSAGESMesajları görmek istediğiniz dile ayarlayın .
  • Set LC_PAPERiçin en_USsize US Letter varsayılan kağıt boyutu ve başka her şey (örneğin yaklaşık olmasını istiyorsanız en_GBsize A4 istiyorsanız).
  • İsteğe bağlı olarak, LC_TIMEen sevdiğiniz saat biçimine ayarlayın.

Yukarıda açıklandığı gibi, LC_COLLATEve ayarlarından kaçının LC_NUMERIC. Eğer kullanırsanız LANG, açıkça onları ayarlayarak bu iki kategori geçersiz C.


Merhaba Gilles, detaylı cevap için teşekkürler. Debian'daki varsayılan ayarları geçersiz kılmak için iyi bir yer nerede? Bir A4 kağıt boyutuna ihtiyacım olduğundan, varsayılan değerini geçersiz kılmam gerekiyor LC_PAPER. Ve yeniden başlatmadan sistem genelinde güncelleyebilir miyim?
Faheem Mitha

1
@FaheemMitha Ortam değişkenlerini belirlemenin en iyi dağıtım / kabuk agnostik yolu nedir? Ve bunu sistem çapında ayarlamak istiyorsanız, Debian'da da var /etc/default/locale. Bu dosyalar oturum açtığınızda etkili olur; export LC_PAPER=…o kabuktan başlatılan komutları etkilemek için bir kabukta yapabilirsiniz .
Gilles 'SO- kötü olmayı kes'
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.