Do czego powinienem ustawić swój język i jakie są tego konsekwencje?

19

To pytanie zostało pobudzone przez zadanie pytania Przeglądarka Chromium nie pozwala ustawić domyślnego rozmiaru papieru dla „Drukuj do pliku” , a także przez rozmowę z @Gilles na czacie. Jak wskazał @don_crissti i jak to zweryfikowałem, zmiana ustawień regionalnych (przynajmniej LC_PAPER) robi różnicę w wyborze rozmiaru papieru.

Nigdy nie zastanawiałem się nad tym, co wybrać, i zawsze szedłem, en_US.UTF-8ponieważ wydawało się to rozsądnym wyborem domyślnym.

Jednak na @Gilles na czacie (patrz rozmowa rozpoczynająca się na stronie http://chat.stackexchange.com/transcript/message/17017095#17017095 ). Wyciągi:

Gilles: LC_PAPER ma domyślną wartość $ LANG

Gilles: Musisz mieć LANG = en_US.UTF-8. To zły pomysł: ustawia LC_COLLATE i prawie zawsze jest to zła rzecz

Gilles: LC_COLLATE nie opisuje poprawnego sortowania, jest zbyt restrykcyjny (przechodzi znak po znaku) usuwa LANG i zamiast tego ustawia LC_CTYPE i LC_PAPER

Gilles: plus LC_MESSAGES, jeśli chcesz wiadomości w języku innym niż angielski

Oczywiście są tutaj problemy, których nie jestem świadomy i jestem pewien, że wiele innych również. Jakie problemy należy wziąć pod uwagę przy ustawianiu ustawień regionalnych i jak je ustawić? Zawsze po prostu działałem dpkg-reconfigure localesw Debianie i nie zastanawiałem się nad tym dwa razy.

Pytanie szczegółowe: Czy powinienem ustawić lokalizację na en_IN.UTF-8? Czy mają to jakieś wady?

Zobacz także: Czy (powinien) LC_COLLATE wpływa na zakresy znaków?

Faheem Mitha
źródło

Odpowiedzi:

29

Ustawienia regionalne to preferencje użytkownika związane z Twoją kulturą.

Nazwy ustawień regionalnych

We wszystkich obecnych wariantach unixa, które znam (ale nie na kilku antykach), nazwy ustawień regionalnych mają ten sam wzór:

  • ISO 639-1 małe dwuliterowy kod języka, albo ISO 639-2 trzyliterowy kod języka, jeśli język nie ma dwuliterowy kod. Na przykład enw języku angielskim, deniemieckim, jajapońskim, ukukraińskim, berberberyjskim…
  • W wielu, ale nie we wszystkich językach, podkreślenie, _po którym następuje dwuliterowy kod kraju zgodny z ISO 3166 . Tak więc: en_USdla amerykańskiego angielskiego, en_UKbrytyjskiego angielskiego, fr_CAkanadyjskiego (Quebec) francuskiego, de_DEniemieckiego niemieckiego, de_ATniemieckiego austriackiego, ja_JPjapońskiego (japońskiego) itp.
  • Ewentualnie, kropka .następnie nazwa kodowania znaków , takich jak UTF-8, ISO-8859-1, KOI8-U, GB2312, Big5, itd. Z LIBC co najmniej (nie wiem jak to jest powszechne), przypadek i interpunkcja jest ignorowana w kodowania nazw. Na przykład zh_CN.UTF-8jest chińskim mandaryńskim (uproszczonym) zakodowanym w UTF-8, a zh_CNchińskim mandaryńskim zakodowanym w GB2312, a zh_TWchińskim tajwańskim (tradycyjnym) zakodowanym w Big5.
  • Opcjonalnie znak at, @po którym następuje nazwa wariantu. Znaczenie wariantów zależy od ustawień regionalnych. Na przykład wiele krajów europejskich ma @eurowariant lokalny, w którym znak waluty to €, a kodowanie obejmuje ten znak (ISO 8859-15 lub ISO 8859-16), w przeciwieństwie do nie ozdobionego wariantu ze starszym znakiem waluty. Na przykład en_IE(angielski, Irlandia) używa kodowania latin1 (ISO 8859-1) i £ jako symbolu waluty, podczas gdy en_IE@euroużywa kodowania latin9 (ISO 8859-15) i € jako symbolu waluty.

Ponadto istnieją dwie nazwy ustawień narodowych, które istnieją we wszystkich systemach uniksopodobnych: Ci POSIX. Nazwy te są synonimami i oznaczają „computerese”, tj. Ustawienia domyślne odpowiednie dla danych analizowanych przez program komputerowy.

Ustawienia regionalne

Następujące kategorie ustawień narodowych są zdefiniowane przez POSIX :

  • LC_CTYPE: zestaw znaków używany przez aplikacje terminalowe: dane klasyfikacyjne (które to znaki to litery, znaki interpunkcyjne, spacje, niepoprawne itp.) i konwersja wielkości liter. Narzędzia tekstowe zwykle zwracają uwagę LC_CTYPEna granice znaków.
  • LC_COLLATE: porządek sortowania (tzn. sortowania). To ustawienie jest bardzo ograniczone z kilku powodów:
    • Większość języków ma skomplikowane reguły, które zależą od tego, co jest sortowane (np. Słowa słownikowe i nazwy własne mogą nie mieć tej samej kolejności) i nie mogą być wyrażone przez LC_COLLATE.
    • Istnieje kilka aplikacji, w których istotne znaczenie ma porządek sortowania, które wykonuje oprogramowanie korzystające z ustawień regionalnych. Na przykład edytory tekstu przechowują język i kodowanie pliku w samym pliku (w przeciwnym razie plik nie zostałby poprawnie przetworzony w systemie z różnymi ustawieniami regionalnymi) i nie dbają o ustawienia regionalne określone przez środowisko.
    • LC_COLLATEmoże mieć nieprzyjemne skutki uboczne, w szczególności dlatego, że powoduje porządek sortowania A <a <B <…, co powoduje, że „między A i Z” obejmuje małe litery od a do y. W szczególności bardzo popularne wyrażenia regularne, takie jak [A-Z]uszkodzenie niektórych aplikacji .
  • LC_MESSAGES: język komunikatów informacyjnych i komunikatów o błędach.
  • LC_NUMERIC: formatowanie liczb: separator dziesiętny i tysiące.
    Wiele aplikacji koduje na stałe .jako separator dziesiętny. To sprawia, że LC_NUMERICniezbyt przydatne i potencjalnie niebezpieczne:
    • Nawet jeśli go ustawisz, nadal dość często zobaczysz domyślny format.
    • Prawdopodobnie wpadniesz w sytuację, w której jedna aplikacja generuje dane wyjściowe zależne od ustawień regionalnych, a inna aplikacja oczekuje, .że będzie kropką dziesiętną lub ,separatorem pól.
  • LC_MONETARY: jak LC_NUMERIC, ale dla kwot w lokalnej walucie.
    Korzysta z tego bardzo niewiele aplikacji.
  • LC_TIME: formatowanie daty i godziny: nazwy dnia tygodnia i miesiąca, zegar 12 lub 24-godzinny, kolejność części daty, interpunkcja itp.

GNU libc, które można znaleźć w niewbudowanym systemie Linux, definiuje dodatkowe kategorie ustawień regionalnych:

  • LC_PAPER: domyślny rozmiar papieru (określony przez wysokość i szerokość).
  • LC_NAME, LC_ADDRESS, LC_TELEPHONE, LC_MEASUREMENT, LC_IDENTIFICATION: Nie wiem z dowolnej aplikacji, która korzysta z nich.

Zmienne środowiska

Aplikacje korzystające z ustawień regionalnych określają je na podstawie zmiennych środowiskowych.

  • Następnie LANGużywana jest wartość zmiennej środowiskowej, chyba że zostanie zastąpiona innym ustawieniem. Jeśli LANGnie jest ustawiony, domyślnymi ustawieniami narodowymi są C.
  • Te LC_xxxnazwy mogą być używane jako zmienne środowiskowe.
  • Jeśli LC_ALLjest ustawiony, wszystkie inne wartości są ignorowane; przydaje się to przede wszystkim do ustawiania LC_ALL=Curuchomionych aplikacji, które muszą generować takie same dane wyjściowe, niezależnie od tego, gdzie są uruchamiane.
  • Ponadto GNU libc używaLANGUAGE do definiowania błędów zastępczych LC_MESSAGES(np. LANGUAGE=fr_BE:fr_FR:enPreferuje francuski francuski lub jeśli jest niedostępny francuski francuski lub jeśli jest niedostępny angielski).

Instalowanie ustawień regionalnych

Dane regionalne mogą być duże, więc niektóre dystrybucje nie wysyłają ich w użytecznej formie i zamiast tego wymagają dodatkowego kroku instalacji.

  • W systemie Debian, aby zainstalować ustawienia regionalne, uruchom dpkg-reconfigure localesi wybierz z listy w oknie dialogowym lub edytuj, /etc/locale.gena następnie uruchom locale-gen.
  • W systemie Ubuntu, aby zainstalować ustawienia narodowe, uruchom locale-genz nazwami ustawień narodowych jako argumentami.

Możesz zdefiniować własne ustawienia regionalne .

Rekomendacje

Przydatne ustawienia to:

  • Ustaw LC_CTYPEjęzyk i kodowanie, w którym kodujesz pliki tekstowe. Upewnij się, że terminale używają tego kodowania.
    W przypadku większości języków liczy się tylko kodowanie. Jest kilka wyjątków; na przykład wielkie litery iIw większości języków, ale İw języku tureckim ( tr_TR).
  • Ustaw LC_MESSAGESjęzyk, w którym chcesz widzieć wiadomości.
  • Ustaw LC_PAPERsię en_USjeśli chcesz US Letter być domyślny rozmiar papieru, a po prostu o coś innego (np en_GB) Jeśli chcesz A4.
  • Opcjonalnie LC_TIMEmożesz ustawić swój ulubiony format czasu.

Jak wyjaśniono powyżej, unikaj ustawiania LC_COLLATEi LC_NUMERIC. Jeśli używasz LANG, wyraźnie zastąp te dwie kategorie, ustawiając je na C.

Gilles „SO- przestań być zły”
źródło
Cześć Gilles, dziękuję za szczegółową odpowiedź. Gdzie jest dobre miejsce do zastąpienia domyślnych ustawień Debiana? Ponieważ potrzebuję rozmiaru papieru A4, myślę, że muszę zastąpić domyślną wartość LC_PAPER. Czy mogę to zaktualizować w całym systemie bez ponownego uruchamiania?
Faheem Mitha,
1
@FaheemMitha Jaki jest najlepszy sposób na ustawienie zmiennych środowiskowych niezależnie od dystrybucji / powłoki? A jeśli chcesz ustawić system na Debiana, jest też /etc/default/locale. Pliki te obowiązują po zalogowaniu; możesz zrobić export LC_PAPER=…w powłoce, aby wpływać na polecenia uruchamiane z tej powłoki.
Gilles 'SO - przestań być zły'