La risposta utile di Lekensteyn funziona benissimo se si desidera passare all'inglese americano su richiesta, come richiesto dall'OP, ma se si desidera passare a un'altra lingua su richiesta , è necessario ulteriore lavoro.
Prima di iniziare, è necessario installare le tabelle dei messaggi con sudo apt-get install language-pack-<lang-tag>
, dove si <lang-tag>
trova un semplice sottotag in lingua RTF 5646 , come es
per lo spagnolo.
Informazioni sullo sfondo
GNU gettext utilità basati dare priorità alla non standard LANGUAGE
variabile ambiente [1]
sopra variabili di ambiente POSIX-definiti LC_ALL
, LC_MESSAGES
e LANG
(in questo ordine).
Dato che LANGUAGE
è impostato di default sui sistemi Ubuntu [2] , vale a dire una sottostringa del LANG
valore che riflette un tag di lingua semplice (ad esempio, es
per lo spagnolo) o un tag di lingua-regione (ad esempio, de_DE
per la variante tedesca del tedesco), è necessario annullare l'impostazione o sovrascrivere LANGUAGE
affinché i messaggi di una lingua diversa abbiano effetto. [3]
Opzione 1: impostare LANGUAGE
Esempio : passa ai es
messaggi spagnoli ( ) ad hoc:
$ LANGUAGE=es ls NoSuchFile
ls: no se puede acceder a NoSuchFile: No existe el archivo o el directorio
Nota : un semplice tag di lingua come es
è sufficiente, ma è possibile aggiungere un identificatore di regione (ad es. es_AR
Per l'Argentina) e persino un suffisso per set di caratteri (ad es es_AR.UTF-8
.).
Tuttavia, i messaggi localizzati possono esistere solo a livello di lingua e il fallback consiste nell'utilizzare i messaggi che corrispondono alla parte della lingua ( es
, in questo caso).
Opzione 2: disinserire LANGUAGE
e impostareLC_ALL
Questa soluzione alternativa non-definisce LANGUAGE
prima, e poi utilizza variabile ambiente locale POSIX LC_ALL
per impostare implicitamente LC_MESSAGES
[4] :
$ LANGUAGE= LC_ALL=es_ES.UTF-8 ls NoSuchFile
ls: no se puede acceder a NoSuchFile: No existe el archivo o el directorio
Questa soluzione ha il vantaggio di impostare tutti gli aspetti della localizzazione sulla locale specificata (come LC_TIME
per i formati di data / ora) e di (implicitamente) l'impostazione LC_MESSAGES
informa anche i programmi non- GNU della lingua desiderata.
Nota come LC_ALL
richiede che il nome esatto e completo della locale, incluso il suffisso del set di caratteri, sia efficace ( es_ES.UTF-8
) (a differenza del LANGUAGE
quale è sufficiente un semplice tag di lingua (come es
)). Lo stesso vale per l'impostazione LC_MESSSAGES
e LANG
. La specifica di un nome di locale non valido / non installato provoca il fallback della locale POSIX e quindi dell'inglese americano.
Le note
[1] Le ragioni per cui la risposta di Lekensteyn funziona anche senza annullare / annullare LANGUAGE
è un'eccezione : se il LC_MESSAGES
valore (effettivo) (tipicamente impostato indirettamente tramite LANG
o LC_ALL
) è uno C
o (il suo sinonimo) POSIX
, tale valore viene rispettato, indipendentemente dal valore di LANGUAGE
, se presente. Viceversa, se il LC_MESSAGES
valore (effettivo) è qualsiasi altra, specifica locale, LANGUAGE
ha la precedenza.
[2] Questo vale per Ubuntu , ma non necessariamente per altre versioni ; Lekensteyn afferma che Kubuntu non si imposta LANGUAGE
.
Probabilmente, nonLANGUAGE
dovrebbe essere impostato di default, dato che in sua assenza il valore implicito dal valore (che determina la locale corrente), è rispettato.
LC_MESSAGES
LANG
[3] Puoi anche usare questo approccio per passare all'inglese [US] assegnando uno LANGUAGE=C
o LANGUAGE=POSIX
(in alternativa a, LANG=C
/ LANG=POSIX
), sebbene non sia chiaro se questo sia attivamente riconosciuto o semplicemente un meccanismo di fallback , dato che questi valori don iniziare con un tag di lingua ; forse la scelta migliore sarebbe en_US
.
[4] C'è un bordo caso in cui questo approccio non funziona: Il tentativo di richiamare un eseguibile con un percorso - sia relativo o assoluto - non passa per la lingua specificata, mentre un mero nome fa:
LANGUAGE= LC_ALL=es_ES.UTF-8 /path/to/no_such_utility
lo fa non il lavoro (le uscite di un messaggio nella locale corrente), mentre lo
LANGUAGE= LC_ALL=es_ES.UTF-8 no_such_utility
fa (genera un messaggio di errore spagnolo).
Se qualcuno sa perché e se c'è una buona ragione per questo, fatecelo sapere.
LANG
oLANG_ALL
non funziona per me, loLANGUAGE
è ancora . Vedi Perché l'override della variabile d'ambiente LANG non sta cambiando la lingua per me?