4 Haziran 2018 Pazartesi

LC_ALL Ortam Değişkeni - Tüm Localization Değişkenlerini Ezer

Giriş
locale komutu yazısına bakabilirsiniz.
- LANG Ortam Değişkeni yazısına bakabilirsiniz.

Açıklaması şöyle. Genellikle bir script içinde kullanıcının diğer ayaları ile teker teker uğraşmadan her yerelleştirme ayarını hep birlikte bir değere geçirmek için kullanılır
LC_ALL is the environment variable that overrides all the other localisation settings
Örnek
Şöyle yaparız.
export LC_ALL=en_US.UTF-8
Locale İsimleri Nasıldır
Açıklaması şöyle
Locale names are typically of the form language[_territory][.codeset][@modifier]
Burada modifier kısmı biraz belirsiz. Açıklaması şöyle. Yani locale'i aynı tutup önemli bir değişikliği de dahil edebilmek için kullanılıyor
The @modifier setting specifies a variant. A minor addition in the encoding set. As an example :

European countries have long time relied on ISO definitions. Some French, for example (language fr, country FR) would have most probably set their codeset to ISO-8859-1 in the following way :fr_FR.ISO-8859-1


Then comes a new currency, the Euro and the the associated currency symbol could be made available via Alt Gr E while keeping the ISO-8859-15 encoding.fr_FR.ISO-8859-1@euro
Benzer bir açıklama şöyle
For example, in Germany, if you had your locale set to de_DE.UTF-8 in the early 2000s, a banking program that uses the locale information to determine the default currency would probably have chosen DM as the default, but if you change the locale to de_DE.UTF-8@euro, the default might have been .
Localization Değişkenlerinin Öncelik Sırası
Localization değerlerini değiştirmek için bir sürü değişken var. Bunların önem sırası şöyle
1. LANG_ALL - Her şeyi ezer
2. LC_XYZ değişkenleri - Eğer varsa bu değişkenler kullanılır
3. LANG - En düşük sıradaki değişken budur.

Örnek
Elimizde şöyle bir kod olsun. Burada LC_NUMERIC değişkeni LANG'dan önce gelir. Bu yüzden printf Almanca'da ayraç olarak virgül kullanıldığı için 3.14 değerini algılayamaz ve hata verir.
$ export LC_NUMERIC="de_DE.UTF-8"
$ export LANG=C
$ printf "%.2f\n" 3.14
-bash: printf: 3.14: invalid number
3,00
Ancak kodu şöyle değiştirelim. Bu durumda LC_ALL her şey ezecek ve yerelleştirmeyi C yapacaktır. Böylece printf çalışır.
$ export LC_NUMERIC="de_DE.UTF-8"
$ export LC_ALL=C
$ printf "%.2f\n" 3.14
3.14
LC_ALL Ne Zaman Kullanılır
Normalde LC_ALL değişkenine değer atanmaz, sadece LANG ve LC_X değişkenlerine değer atanır. Bence sadece script içinde kullanılmalıdır.

Sıralama - Sorting
Sıralama (sorting) en etkilinden başlayarak şu 3 değişkene göre yapılır.
LC_ALL, LC_COLLATE ve LANG
LC_ALL normalde boş olduğu için LC_COLLATE değişkeni devreye girer.

Örnek - C Kullanımı
Açıklaması şöyle. Yani bu komut aslında string karşılaştırması yapar.
Note that some uniq implementations like GNU uniq will give you the first of a sequence of lines that sort the same (where strcoll() returns 0) as opposed to are byte-to-byte identical (where memcmp() or strcmp() returns 0). To force a byte to byte comparison regardless of the uniq implementation, you can force the locale to C with:
Byte karşılaştırması için şöyle yaparız.
LC_ALL=C uniq your-file

Hiç yorum yok:

Yorum Gönder