La risposta utile di Lekensteyn funziona alla grande se vuoi passare a US English su richiesta, come richiesto dall'OP, ma se desideri passare a una diversa lingua su richiesta strong>, è necessario ulteriore lavoro.
Prima di iniziare, devi installare le tabelle dei messaggi con sudo apt-get install language-pack-<lang-tag>
, dove <lang-tag>
è una semplice lingua RTF 5646 subtag , ad esempio es
per lo spagnolo.
Informazioni di base
GNU gettext utilità basate sul sistema danno la precedenza alla non standard LANGUAGE
variabile d'ambiente [1]
su variabili dell'ambiente locale definite da POSIX LC_ALL
, LC_MESSAGES
e LANG
(in quest'ordine).
Dato che LANGUAGE
è impostato di default sui sistemi Ubuntu [2] , cioè su una sottostringa del valore LANG
che riflette un semplice tag di linguaggio (ad esempio, es
per lo spagnolo) o un tag della regione della lingua (ad esempio de_DE
per la variante tedesca del tedesco), è necessario annullare o sovrascrivere LANGUAGE
affinché i messaggi di una lingua diversa abbiano effetto. > [3]
Opzione 1: imposta LANGUAGE
Esempio : passa ai messaggi di spagnolo ( es
) ad-hoc:
$ LANGUAGE=es ls NoSuchFile
ls: no se puede acceder a NoSuchFile: No existe el archivo o el directorio
Nota strong>: è sufficiente un semplice tag di lingua come es
, ma puoi aggiungere un identificatore di regione (ad es. es_AR
per l'Argentina) e persino un suffisso charset (ad esempio es_AR.UTF-8
).
Tuttavia, i messaggi localizzati possono esistere solo al livello lingua e il fallback consiste nell'utilizzare i messaggi che corrispondono alla parte lingua ( es
, in questo caso).
Opzione 2: Annulla LANGUAGE
e imposta LC_ALL
Questa soluzione alternativa non definisce prima LANGUAGE
, quindi utilizza la variabile d'ambiente locale POSIX LC_ALL
per impostare in modo implicito 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 gli aspetti di localizzazione tutti nelle impostazioni internazionali specificate (come LC_TIME
per i formati di data / ora) e con (implicitamente) l'impostazione LC_MESSAGES
informa anche programmi -GNU della lingua desiderata.
Nota come LC_ALL
richiede che il nome della locale esatto, completo , incluso il suffisso charset, sia efficace ( es_ES.UTF-8
) (a differenza di LANGUAGE
, per il quale è sufficiente un tag di lingua semplice ( come es
)). Lo stesso vale per l'impostazione di LC_MESSSAGES
e LANG
. La specifica di un nome di locale non valido / non installato causa il fallback delle impostazioni locali POSIX e quindi l'inglese americano.
Note
[1] Le ragioni per le quali la risposta di Lekensteyn funziona anche senza disabilitando / sovrascrivendo LANGUAGE
è una eccezione : se il valore (efficace) LC_MESSAGES
(tipicamente impostato indirettamente tramite LANG
o LC_ALL
) è o C
o (suo sinonimo) POSIX
, quel valore è rispettato, indipendentemente dal valore di LANGUAGE
, se presente. Viceversa, se il valore (efficace) LC_MESSAGES
è qualsiasi altra localizzazione specifica , LANGUAGE
ha la precedenza.
[2] Questo vale per Ubuntu corretto , ma non necessariamente per altri sapori ; Lekensteyn afferma che Kubuntu fa non imposta LANGUAGE
.
Probabilmente, LANGUAGE
dovrebbe non essere impostato di default, dato che in sua assenza il valore LC_MESSAGES
implicito dal valore LANG
(che determina la locale corrente), viene rispettato.
[3] Puoi anche usare questo approccio per passare a [US] inglese assegnando LANGUAGE=C
o LANGUAGE=POSIX
(in alternativa a LANG=C
/ LANG=POSIX
), sebbene non sia chiaro se sia attivo riconosciuto o semplicemente un meccanismo fallback , dato che questi valori non iniziano con un tag lingua ; forse la scelta migliore sarebbe en_US
.
[4] C'è un caso edge in cui questo approccio non funziona: il tentativo di richiamare un eseguibile con un percorso - relativo o assoluto - NON passa alla lingua specificata , mentre un mere nome file fa:
LANGUAGE= LC_ALL=es_ES.UTF-8 /path/to/no_such_utility
fa non funziona (emette un messaggio nelle impostazioni locali correnti), mentre
LANGUAGE= LC_ALL=es_ES.UTF-8 no_such_utility
fa (uscite un messaggio di errore in spagnolo).
Se qualcuno sa perché e se c'è una buona ragione per questo, fatecelo sapere.