A cosa dovrei impostare la mia lingua e quali sono le implicazioni per farlo?


19

Questa domanda è stata stimolata ponendo la domanda Il browser Chromium non consente di impostare il formato carta predefinito per "Stampa su file" , nonché tramite una conversazione con @Gilles in chat. Come sottolineato da @don_crissti, e come verificato da me, la modifica delle impostazioni internazionali (almeno LC_PAPER) fa la differenza nel formato carta selezionato.

Non avevo mai pensato molto a cosa scegliere, ed ero sempre andato avanti en_US.UTF-8perché sembrava una scelta di default ragionevole.

Tuttavia, per @Gilles in chat (vedere la conversazione a partire da 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 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 di cui non sono a conoscenza e sono sicuro che anche molti altri lo sono. Quindi, quali problemi dovresti considerare quando imposti le impostazioni locali e come dovresti impostarle? Ho sempre corso dpkg-reconfigure localessu 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?

Vedi anche: (dovrebbe) LC_COLLATE influisce sugli intervalli di caratteri?

Risposte:


29

Le impostazioni locali sono le preferenze dell'utente relative alla tua cultura.

Nomi locali

Su tutte le attuali varianti unix che conosco (ma non su alcuni pezzi d'antiquariato), i nomi delle impostazioni locali seguono lo stesso modello:

  • Un codice di lingua a due lettere minuscolo ISO 639-1 o un codice di lingua a tre lettere ISO 639-2 se la lingua non ha un codice di due lettere. Ad esempio, enper l'inglese, deper il tedesco, japer il giapponese, ukper l'ucraino, berper il berbero, ...
  • Per molte, ma non tutte le lingue, un carattere di sottolineatura _seguito da un codice paese ISO 3166 maiuscolo di due lettere. Pertanto: en_USper l'inglese americano, en_UKper l'inglese britannico, il fr_CAcanadese (Québec) francese, de_DEper il tedesco di Germania, de_ATper il tedesco d'Austria, ja_JPper il giapponese (del Giappone), ecc.
  • Opzionalmente, un punto .seguito dal nome di un personaggio di codifica , come UTF-8, ISO-8859-1, KOI8-U, GB2312, Big5, ecc Con GNU libc almeno (non so quanto sia diffusa questa è), la cassa e la punteggiatura viene ignorato nella codifica nomi. Ad esempio, zh_CN.UTF-8è il cinese mandarino (semplificato) codificato in UTF-8, mentre il zh_CNcinese mandarino è codificato in GB2312 ed zh_TWè cinese taiwanese (tradizionale) codificato in Big5.
  • Facoltativamente, un segno at @seguito dal nome di una variante. Il significato delle varianti dipende dalla locale. Ad esempio, molti paesi europei hanno una @eurovariante di 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 non adornata con il segno di valuta più vecchio. Ad esempio, en_IE(inglese, Irlanda) utilizza la codifica latin1 (ISO 8859-1) e £ come simbolo della valuta mentre en_IE@euroutilizza la codifica latin9 (ISO 8859-15) e € come simbolo della valuta.

Inoltre, esistono due nomi di localizzazione esistenti su tutti i sistemi unix-like: Ce POSIX. Questi nomi sono sinonimi e significano computerese, 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 terminali: dati di classificazione (quali caratteri sono lettere, punteggiatura, spazi, non validi, ecc.) e conversione del caso. Le utilità di testo in genere prestano attenzione LC_CTYPEa determinare i confini dei caratteri.
  • LC_COLLATE: ordine di confronto (es. ordinamento). Questa impostazione è di uso molto limitato per diversi motivi:
    • La maggior parte delle lingue ha regole complesse che dipendono da ciò che viene ordinato (ad es. Parole del dizionario e nomi propri potrebbero non utilizzare lo stesso ordine) e non possono essere espresse da LC_COLLATE.
    • Esistono poche applicazioni in cui conta l'ordinamento corretto eseguite dal software che utilizza le impostazioni locali. Ad esempio, i word processor 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 preoccuperà delle impostazioni locali specificate dall'ambiente.
    • LC_COLLATEpuò avere effetti collaterali negativi, in particolare perché provoca l'ordinamento A <a <B <…, che fa sì che “tra A e Z” includa le lettere minuscole da a a y. In particolare, espressioni regolari molto comuni come [A-Z]rompere alcune applicazioni .
  • LC_MESSAGES: la lingua dei messaggi informativi e di errore.
  • LC_NUMERIC: formattazione numerica: decimale e separatore delle migliaia.
    Molte applicazioni codificano .come separatore decimale. Questo LC_NUMERICnon è molto utile e potenzialmente pericoloso:
    • Anche se lo imposti, vedrai comunque il formato predefinito abbastanza spesso.
    • È probabile che si verifichi una situazione in cui un'applicazione produce output dipendenti dalla locale e un'altra applicazione prevede .il punto decimale o ,un separatore di campo.
  • LC_MONETARY: come LC_NUMERIC, ma per importi in valuta locale.
    Pochissime applicazioni lo usano.
  • LC_TIME: formattazione di data e ora: nomi dei giorni della settimana e del mese, orologio a 12 o 24 ore, parti dell'ordine della data, punteggiatura, ecc.

GNU libc, che troverai su Linux non incorporato, definisce ulteriori categorie locali:

  • LC_PAPER: il formato carta predefinito (definito da altezza e larghezza).
  • LC_NAME, LC_ADDRESS, LC_TELEPHONE, LC_MEASUREMENT, LC_IDENTIFICATION: Non so di qualsiasi applicazione che utilizza questi.

Variabili ambientali

Le applicazioni che utilizzano le impostazioni locali le determinano dalle variabili di ambiente.

  • Quindi LANGviene utilizzato il valore della variabile di ambiente a meno che non venga sovrascritto da un'altra impostazione. Se LANGnon è impostato, l'impostazione internazionale predefinita è C.
  • I LC_xxxnomi possono essere usati come variabili di ambiente.
  • Se LC_ALLè impostato, tutti gli altri valori vengono ignorati; ciò è principalmente utile per impostare LC_ALL=Capplicazioni in esecuzione che devono produrre lo stesso output indipendentemente da dove vengono eseguite.
  • Inoltre, GNU libc utilizzaLANGUAGE per definire i fallback LC_MESSAGES(ad es. LANGUAGE=fr_BE:fr_FR:enPer preferire il francese belga, o se non disponibile Francia francese, o se non disponibile inglese).

Installazione locale

I dati delle impostazioni locali possono essere di grandi dimensioni, quindi alcune distribuzioni non li inviano in una forma utilizzabile e richiedono invece un passaggio di installazione aggiuntivo.

  • Su Debian, per installare le localizzazioni, esegui dpkg-reconfigure localese seleziona dall'elenco nella finestra di dialogo, oppure modifica /etc/locale.gened esegui locale-gen.
  • Su Ubuntu, per installare le versioni locali, esegui locale-geni nomi delle versioni locali come argomenti.

Puoi definire la tua locale .

Raccomandazione

Le impostazioni utili sono:

  • Impostare LC_CTYPEla lingua e la codifica in cui si codificano i file di testo. Assicurarsi che i terminali utilizzino tale codifica.
    Per la maggior parte delle lingue, conta solo la codifica. Ci sono alcune eccezioni; per esempio, un carattere maiuscolo iè Inella maggior parte delle lingue ma İin turco ( tr_TR).
  • Impostare LC_MESSAGESsulla lingua in cui si desidera visualizzare i messaggi.
  • Impostare LC_PAPERsu en_USse si desidera che US Letter abbia il formato carta predefinito e qualsiasi altra cosa (ad esempio en_GB) se si desidera A4.
  • Facoltativamente, imposta LC_TIMEil formato dell'ora preferito.

Come spiegato sopra, evitare l'impostazione LC_COLLATEe LC_NUMERIC. Se lo usi LANG, sostituisci esplicitamente queste due categorie impostandole su C.


Ciao Gilles, grazie per la risposta dettagliata. Dove si trova un buon posto per sovrascrivere le impostazioni predefinite su Debian? Dal momento che ho bisogno di un formato carta A4, suppongo di dover sostituire il valore predefinito di LC_PAPER. E posso aggiornare questo attraverso il sistema senza riavviare?
Faheem Mitha,

1
@FaheemMitha Qual è il miglior modo distro / agnostico di shell per impostare le variabili di ambiente? E se vuoi impostarlo su tutto il sistema, su Debian, c'è anche /etc/default/locale. Questi file diventano effettivi quando accedi; si può fare export LC_PAPER=…in una shell per influenzare i comandi lanciati da quella shell.
Gilles 'SO- smetti di essere malvagio' il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.