1 Ekim 2019 Salı

LANG Ortam Değişkeni - Temel Yerelleştirme Değişkenidir

Giriş
LANG ortamı değişkeninin açıklaması şöyle.
the "LANG" environment variable determines the language in which software programs communicate with the user.
Benim sistemimde LANG'ın değeri şu
tr_TR.UTF-8
Localization Değişkenlerinin Öncelik Sırası
Localization değerlerini değiştirmek için bir sürü değişken var. Bunların öncelik 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
C
Şöyle yaparız.
LANG=C 
en_US (Amerikan İngilizcesi)
Şöyle yaparız.
LANG=en_US
en_IE (İrlanda İngilizcesi)
Şöyle yaparız.
>LANG=en_IE.UTF-8 ls -1 foo*
foopa.png
foo.png
fooqa.png

>LANG=C ls -1 foo* 
foo.png
foopa.png
fooqa.png
Diğer

1. LANG Dışında Bazı Özel Ayarlar Yapmak
LANG değişkeninden memnunuz diyelim ancak örneğin zamanı kendi bölgemizin ayarından daha farklı bir şekilde görmek istiyoruz. Bu durumda LC_XYZ ortam değişkenlerini kullanmak gerekir.

Örnek
Açıklaması şöyle.
For example, I use LANG=en_US.utf8 on my Linux box, but I override LC_TIME=en_GB.utf8 to get 24-hour time in English. This would not be possible to do if LC_ALL were set.
2. Java
Elimizde şöyle bir kod olsun.
import java.io.File;

public class Test {
  public static void main(String[] args) {
    File f = new File("\u2026");
    f.toPath();
  }
}
LANG'ı C yaparsak exception fırlatır.
$ LANG=C java Test
Exception in thread "main" java.nio.file.InvalidPathException: Malformed input...
    at sun.nio.fs.UnixPath.encode(UnixPath.java:147)
    at sun.nio.fs.UnixPath.<init>(UnixPath.java:71)
    at sun.nio.fs.UnixFileSystem.getPath(UnixFileSystem.java:281)
    at java.io.File.toPath(File.java:2234)
    at Test.main(Test.java:6)
LANG'ı  en_US.UTF-8 yaparsak çalışır
$ LANG=en_US.UTF-8 java Test
# No crash!





Hiç yorum yok:

Yorum Gönder