Tato otázka byla stimulována položením otázky
Prohlížeč Chromium neumožňuje nastavení výchozí velikosti papíru pro „Tisk do souboru“ a také konverzací s @Gilles na chatu. Jak poukázal @don_crissti a jak jsem ověřil, změna národního prostředí (alespoň LC_PAPER
) je rozdíl ve výběru velikosti papíru.
Nikdy jsem moc nepřemýšlel nad tím, co vybrat, a vždy jsem zvolil en_US.UTF-8
protože to vypadalo jako rozumná výchozí volba.
Nicméně za @Gilles na chatu (viz konverzace začínající na http://chat.stackexchange.com/transcript/message/17017095#17017095). Výtažky:
Gilles:Výchozí nastavení LC_PAPER je $LANG
Gilles:Musíte mít LANG=en_US.UTF-8. To je špatný nápad:nastavuje to
LC_COLLATE a to je téměř vždy špatnéGilles:LC_COLLATE nepopisuje správné řazení, je příliš
omezující (jde znak po znaku) odstraňte LANG a místo toho
nastavte LC_CTYPE a LC_PAPERGilles:plus LC_MESSAGES, pokud chcete zprávy v jiném jazyce než
angličtina
Je zřejmé, že zde existují problémy, o kterých nevím, a jsem si jistý, že mnoho dalších také. Jaké problémy byste tedy měli zvážit při nastavování národních prostředí a jak byste je měli nastavit? Vždy jsem spouštěl pouze dpkg-reconfigure locales
v Debianu a nepřemýšleli jsme o tom dvakrát.
Konkrétní otázka:Mám nastavit své národní prostředí na en_IN.UTF-8? Má to nějaké nevýhody?
Přijatá odpověď:
Nastavení národního prostředí jsou uživatelské preference, které se vztahují k vaší kultuře.
Názvy národního prostředí
Na všech současných unixových variantách, které znám (ale ne na několika starožitnostech), se názvy lokalit řídí stejným vzorem:
- Malý dvoupísmenný kód jazyka podle normy ISO 639-1 nebo třípísmenný kód jazyka podle normy ISO 639-2, pokud jazyk nemá žádný dvoupísmenný kód. Například
en
pro angličtinude
pro němčinuja
pro japonštinuuk
pro ukrajinštinuber
pro Berbra, … - U mnoha, ale ne u všech jazyků, podtržítko
_
následovaný velkým dvoupísmenným kódem země ISO 3166. Tedy:en_US
pro americkou angličtinu,en_UK
pro britskou angličtinufr_CA
kanadská (Québec) francouzština,de_DE
pro němčinude_AT
pro rakouskou němčinuja_JP
pro japonštinu (Japonska) atd. - Volitelně tečka
.
následovaný názvem kódování znaků, napříkladUTF-8
,ISO-8859-1
,KOI8-U
,GB2312
,Big5
, atd. Alespoň u GNU libc (nevím, jak je to rozšířené), jsou malá a velká písmena a interpunkce v kódování jmen ignorována. Napříkladzh_CN.UTF-8
je mandarínská (zjednodušená) čínština zakódovaná v UTF-8, zatímcozh_CN
je mandarínská čínština zakódovaná v GB2312 azh_TW
je tchajwanská (tradiční) čínština zakódovaná v Big5. - Volitelně zavináč
@
následovaný názvem varianty. Význam variant je závislý na lokalitě. Například mnoho evropských zemí má@euro
varianta národního prostředí, kde je znak měny € a kde kódování obsahuje tento znak (ISO 8859-15 nebo ISO 8859-16), na rozdíl od nepřikrášlené varianty se starším znakem měny. Napříkladen_IE
(Angličtina, Irsko) používá kódování latin1 (ISO 8859-1) a £ jako symbol měny, zatímco[email protected]
používá kódování latin9 (ISO 8859-15) a jako symbol měny €.
Kromě toho existují dva názvy národních prostředí, které existují na všech unixových systémech:C
a POSIX
. Tyto názvy jsou synonyma a znamenají počítačový jazyk, tj. výchozí nastavení, která jsou vhodná pro data analyzovaná počítačovým programem.
Místní nastavení
Následující kategorie lokalit jsou definovány POSIX:
LC_CTYPE
:znaková sada používaná terminálovými aplikacemi:klasifikační data (které znaky jsou písmena, interpunkce, mezery, neplatné atd.) a převod velkých a malých písmen. Textové nástroje obvykle dbají naLC_CTYPE
k určení hranic postav.LC_COLLATE
:řazení (tj. řazení) pořadí. Toto nastavení má velmi omezené použití z několika důvodů:- Většina jazyků má složitá pravidla, která závisí na tom, co se třídí (např. slova ve slovníku a vlastní jména nemusí mít stejné pořadí) a nelze je vyjádřit pomocí
LC_COLLATE
. - Existuje několik aplikací, kde záleží na správném pořadí řazení, které provádí software, který používá nastavení národního prostředí. Například textové procesory ukládají jazyk a kódování souboru do samotného souboru (jinak by soubor nebyl zpracován správně v systému s odlišným nastavením národního prostředí) a nezajímají se o nastavení národního prostředí určeného prostředím.
LC_COLLATE
může mít nepříjemné vedlejší účinky, zejména proto, že způsobuje řazení A [A-Z] přerušit některé aplikace.
- Většina jazyků má složitá pravidla, která závisí na tom, co se třídí (např. slova ve slovníku a vlastní jména nemusí mít stejné pořadí) a nelze je vyjádřit pomocí
LC_MESSAGES
:jazyk informačních a chybových zpráv.LC_NUMERIC
:formátování čísel:oddělovač desetinných míst a tisíců.
Mnoho aplikací má pevný kód.
jako oddělovač desetinných míst. Tím se vytvoříLC_NUMERIC
nepříliš užitečné a potenciálně nebezpečné:- I když jej nastavíte, stále poměrně často uvidíte výchozí formát.
- Pravděpodobně se dostanete do situace, kdy jedna aplikace produkuje výstup závislý na národním prostředí a jiná aplikace očekává
.
být desetinnou čárkou nebo,
být oddělovačem polí.
LC_MONETARY
:jakoLC_NUMERIC
, ale pro částky v místní měně.
Velmi málo aplikací to používá.LC_TIME
:formátování data a času:názvy dnů v týdnu a měsíců, 12 nebo 24hodinový formát času, pořadí částí data, interpunkce atd.
GNU libc, kterou najdete na neembedded Linuxu, definuje další kategorie lokalit:
LC_PAPER
:výchozí velikost papíru (definovaná výškou a šířkou).LC_NAME
,LC_ADDRESS
,LC_TELEPHONE
,LC_MEASUREMENT
,LC_IDENTIFICATION
:Nevím o žádné aplikaci, která by je používala.
Proměnné prostředí
Aplikace, které používají nastavení národního prostředí, je určují z proměnných prostředí.
- Poté hodnotu
LANG
Proměnná prostředí se používá, pokud není přepsána jiným nastavením. PokudLANG
není nastaveno, výchozí národní prostředí jeC
. LC_xxx
jména lze použít jako proměnné prostředí.- Pokud
LC_ALL
je nastaveno, pak jsou všechny ostatní hodnoty ignorovány; to je užitečné především pro nastaveníLC_ALL=C
spouštějte aplikace, které potřebují produkovat stejný výstup bez ohledu na to, kde jsou spuštěny. - Kromě toho GNU libc používá
LANGUAGE
k definování záložních reklam proLC_MESSAGES
(např.LANGUAGE=fr_BE:fr_FR:en
preferovat belgickou francouzštinu, nebo pokud není k dispozici Francii francouzštinu, nebo pokud není k dispozici angličtina).
Instalace národních prostředí
Místní data mohou být velká, takže některé distribuce je nedodávají v použitelné formě a místo toho vyžadují další instalační krok.
- Pokud chcete v Debianu nainstalovat národní prostředí, spusťte
dpkg-reconfigure locales
a vyberte ze seznamu v dialogovém okně nebo upravte/etc/locale.gen
a poté spusťtelocale-gen
. - Pokud chcete v Ubuntu nainstalovat národní prostředí, spusťte
locale-gen
s názvy národních prostředí jako argumenty.
Můžete definovat své vlastní národní prostředí.
Doporučení
Užitečná nastavení jsou:
- Nastavte
LC_CTYPE
na jazyk a kódování, do kterého kódujete textové soubory. Ujistěte se, že vaše terminály toto kódování používají.
U většiny jazyků záleží pouze na kódování. Existuje několik výjimek; například velkéi
jeI
ve většině jazyků kroměİ
v turečtině (tr_TR
). - Nastavte
LC_MESSAGES
do jazyka, ve kterém chcete zprávy zobrazovat. - Nastavte
LC_PAPER
doen_US
pokud chcete, aby výchozí velikost papíru byla US Letter a téměř cokoliv jiného (např.en_GB
), pokud chcete A4. - Volitelně nastavte
LC_TIME
na váš oblíbený formát času.
Jak je vysvětleno výše, vyhněte se nastavení LC_COLLATE
a LC_NUMERIC
. Pokud používáte LANG
, explicitně přepíše tyto dvě kategorie jejich nastavením na C
.