Questa domanda è stata stimolata dalla domanda
Il browser Chromium non consente di impostare il formato carta predefinito per "Stampa su file" e anche da una conversazione con @Gilles in chat. Come sottolineato da @don_crissti, e come verificato da me, cambiando la localizzazione (almeno LC_PAPER
) fa la differenza nel formato carta selezionato.
Non avevo mai pensato molto a cosa selezionare e avevo sempre scelto en_US.UTF-8
perché sembrava una scelta predefinita ragionevole.
Tuttavia, per @Gilles in chat (vedi conversazione che inizia su http://chat.stackexchange.com/transcript/message/17017095#17017095). Estratti:
Gilles:per impostazione predefinita LC_PAPER è $LANG
Gilles:Devi avere LANG=en_US.UTF-8. È una cattiva idea:imposta
LC_COLLATE ed è quasi sempre una brutta cosa
Gilles:LC_COLLATE non descrive le regole di confronto corrette, è troppo
restrittivo (va di carattere per carattere) rimuove LANG e invece
imposta LC_CTYPE e LC_PAPER
Gilles:più LC_MESSAGES se desideri messaggi in una lingua diversa dall'
inglese
Chiaramente, ci sono problemi qui di cui non sono a conoscenza e sono sicuro che lo sono anche molti altri. Quindi, quali problemi dovresti considerare quando imposti le impostazioni locali e come dovresti impostarle? Ho sempre eseguito dpkg-reconfigure locales
in Debian, e non ci ho pensato due volte.
Domanda specifica:devo impostare la mia locale su en_IN.UTF-8? Ci sono degli svantaggi nel farlo?
Risposta accettata:
Le impostazioni internazionali sono preferenze dell'utente relative alla tua cultura.
Nomi locali
Su tutte le attuali varianti Unix che conosco (ma non su alcuni oggetti d'antiquariato), i nomi delle impostazioni locali seguono lo stesso schema:
- Un codice lingua ISO 639-1 minuscolo a due lettere o un codice lingua ISO 639-2 a tre lettere se la lingua non ha un codice a due lettere. Ad esempio,
en
per l'inglese,de
per il tedesco,ja
per il giapponese,uk
per l'ucraino,ber
per berbero, … - Per molte, ma non tutte, le lingue, un carattere di sottolineatura
_
seguito da un codice paese di due lettere maiuscolo ISO 3166. Quindi:en_US
per l'inglese americano,en_UK
per l'inglese britannico,fr_CA
Francese canadese (Québec),de_DE
per il tedesco della Germania,de_AT
per il tedesco d'Austria,ja_JP
per giapponese (del Giappone), ecc. - Facoltativamente, un punto
.
seguito dal nome di una codifica di caratteri comeUTF-8
,ISO-8859-1
,KOI8-U
,GB2312
,Big5
, ecc. Almeno con GNU libc (non so quanto sia diffuso), maiuscole e minuscole e la punteggiatura vengono ignorate nei nomi di codifica. Ad esempio,zh_CN.UTF-8
è cinese mandarino (semplificato) codificato in UTF-8, mentrezh_CN
è cinese mandarino codificato in GB2312 ezh_TW
è il cinese taiwanese (tradizionale) codificato in Big5. - Facoltativamente, una chiocciola
@
seguito dal nome di una variante. Il significato delle varianti dipende dalla localizzazione. Ad esempio, molti paesi europei hanno un@euro
variante locale in cui il segno di valuta è € e dove la codifica è quella che include questo carattere (ISO 8859-15 o ISO 8859-16), al contrario della variante disadorna con il segno di valuta più vecchio. Ad esempio,en_IE
(Inglese, Irlanda) utilizza la codifica latin1 (ISO 8859-1) e £ come simbolo di valuta mentre[email protected]
utilizza la codifica latin9 (ISO 8859-15) e € come simbolo di valuta.
Inoltre, ci sono due nomi di locale che esistono su tutti i sistemi simili a Unix:C
e POSIX
. Questi nomi sono sinonimi e significano computeresi, ovvero impostazioni predefinite appropriate per i dati analizzati da un programma per computer.
Impostazioni locali
Le seguenti categorie locali sono definite da POSIX:
LC_CTYPE
:il set di caratteri utilizzato dalle applicazioni del terminale:dati di classificazione (quali caratteri sono lettere, punteggiatura, spazi, non validi, ecc.) e conversione maiuscolo. Le utilità di testo in genere tengono conto diLC_CTYPE
per determinare i confini dei caratteri.LC_COLLATE
:ordine di confronto (cioè ordinamento). Questa impostazione è di uso molto limitato per diversi motivi:- La maggior parte delle lingue ha regole complesse che dipendono da cosa viene ordinato (ad es. parole del dizionario e nomi propri potrebbero non usare lo stesso ordine) e non possono essere espresse da
LC_COLLATE
. - Ci sono poche applicazioni in cui l'ordinamento corretto è importante che vengono eseguite da software che utilizzano le impostazioni locali. Ad esempio, gli elaboratori di testi memorizzano la lingua e la codifica di un file nel file stesso (altrimenti il file non verrebbe elaborato correttamente su un sistema con impostazioni locali diverse) e non si preoccupano delle impostazioni locali specificate dall'ambiente.
LC_COLLATE
può avere spiacevoli effetti collaterali, in particolare perché provoca l'ordinamento A [A-Z] interrompere alcune applicazioni.
- La maggior parte delle lingue ha regole complesse che dipendono da cosa viene ordinato (ad es. parole del dizionario e nomi propri potrebbero non usare lo stesso ordine) e non possono essere espresse da
LC_MESSAGES
:la lingua dei messaggi informativi e di errore.LC_NUMERIC
:formattazione dei numeri:separatore decimale e delle migliaia.
Molte applicazioni codificano come hard-code.
come separatore decimale. Questo rendeLC_NUMERIC
poco utile e potenzialmente pericoloso:- Anche se lo imposti, vedrai comunque il formato predefinito abbastanza spesso.
- È probabile che ti trovi in una situazione in cui un'applicazione produce un output dipendente dalla locale e un'altra si aspetta
.
essere il punto decimale, o,
essere un separatore di campo.
LC_MONETARY
:comeLC_NUMERIC
, ma per importi in valuta locale.
Pochissime applicazioni lo utilizzano.LC_TIME
:formattazione di data e ora:nomi dei giorni della settimana e dei mesi, formato 12 o 24 ore, ordine delle parti della data, punteggiatura, ecc.
GNU libc, che troverai su Linux non incorporato, definisce categorie di locale aggiuntive:
LC_PAPER
:il formato carta predefinito (definito da altezza e larghezza).LC_NAME
,LC_ADDRESS
,LC_TELEPHONE
,LC_MEASUREMENT
,LC_IDENTIFICATION
:Non conosco nessuna applicazione che li utilizzi.
Variabili d'ambiente
Le applicazioni che utilizzano le impostazioni locali le determinano dalle variabili di ambiente.
- Quindi il valore del
LANG
viene utilizzata la variabile di ambiente a meno che non venga sovrascritta da un'altra impostazione. SeLANG
non è impostato, la lingua predefinita èC
. - Il
LC_xxx
i nomi possono essere usati come variabili di ambiente. - Se
LC_ALL
è impostato, tutti gli altri valori vengono ignorati; questo è utile principalmente per impostareLC_ALL=C
eseguire applicazioni che devono produrre lo stesso output indipendentemente da dove vengono eseguite. - Inoltre, GNU libc usa
LANGUAGE
per definire i fallback perLC_MESSAGES
(es.LANGUAGE=fr_BE:fr_FR:en
preferire il francese belga, o se non disponibile il francese francese, o se non disponibile l'inglese).
Installazione delle localizzazioni
I dati sulle impostazioni locali possono essere di grandi dimensioni, quindi alcune distribuzioni non li spediscono in una forma utilizzabile e richiedono invece un passaggio di installazione aggiuntivo.
- Su Debian, per installare le localizzazioni, eseguire
dpkg-reconfigure locales
e seleziona dall'elenco nella finestra di dialogo, oppure modifica/etc/locale.gen
e quindi eseguilocale-gen
. - Su Ubuntu, per installare le localizzazioni, esegui
locale-gen
con i nomi delle localizzazioni come argomenti.
Puoi definire la tua lingua.
Raccomandamento
Le impostazioni utili sono:
- Imposta
LC_CTYPE
alla lingua e alla codifica in cui codifichi i tuoi file di testo. Assicurati che i tuoi terminali utilizzino tale codifica.
Per la maggior parte delle lingue, solo la codifica conta. Ci sono alcune eccezioni; ad esempio, unai
maiuscola èI
nella maggior parte delle lingue tranneİ
in turco (tr_TR
). - Imposta
LC_MESSAGES
nella lingua in cui desideri visualizzare i messaggi. - Imposta
LC_PAPER
aen_US
se vuoi che US Letter sia il formato carta predefinito e qualsiasi altra cosa (ad es.en_GB
) se vuoi A4. - Facoltativamente, imposta
LC_TIME
nel tuo formato orario preferito.
Come spiegato sopra, evita di impostare LC_COLLATE
e LC_NUMERIC
. Se usi LANG
, sovrascrivi esplicitamente queste due categorie impostandole su C
.