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 esper lo spagnolo.
Informazioni sullo sfondo
GNU gettext utilità basati dare priorità alla non standard LANGUAGEvariabile ambiente [1]
sopra variabili di ambiente POSIX-definiti LC_ALL, LC_MESSAGESe LANG(in questo ordine).
Dato che LANGUAGEè impostato di default sui sistemi Ubuntu [2] , vale a dire una sottostringa del LANGvalore che riflette un tag di lingua semplice (ad esempio, esper lo spagnolo) o un tag di lingua-regione (ad esempio, de_DEper la variante tedesca del tedesco), è necessario annullare l'impostazione o sovrascrivere LANGUAGEaffinché i messaggi di una lingua diversa abbiano effetto. [3]
Opzione 1: impostare LANGUAGE
Esempio : passa ai esmessaggi 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_ARPer 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 LANGUAGEe impostareLC_ALL
Questa soluzione alternativa non-definisce LANGUAGE prima, e poi utilizza variabile ambiente locale POSIX LC_ALLper 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_TIMEper i formati di data / ora) e di (implicitamente) l'impostazione LC_MESSAGESinforma anche i programmi non- GNU della lingua desiderata.
Nota come LC_ALLrichiede che il nome esatto e completo della locale, incluso il suffisso del set di caratteri, sia efficace ( es_ES.UTF-8) (a differenza del LANGUAGEquale è sufficiente un semplice tag di lingua (come es)). Lo stesso vale per l'impostazione LC_MESSSAGESe 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_MESSAGESvalore (effettivo) (tipicamente impostato indirettamente tramite LANGo LC_ALL) è uno Co (il suo sinonimo) POSIX, tale valore viene rispettato, indipendentemente dal valore di LANGUAGE, se presente. Viceversa, se il LC_MESSAGESvalore (effettivo) è qualsiasi altra, specifica locale, LANGUAGEha 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_MESSAGESLANG
[3] Puoi anche usare questo approccio per passare all'inglese [US] assegnando uno LANGUAGE=Co 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_utilitylo fa non il lavoro (le uscite di un messaggio nella locale corrente), mentre lo
LANGUAGE= LC_ALL=es_ES.UTF-8 no_such_utilityfa (genera un messaggio di errore spagnolo).
Se qualcuno sa perché e se c'è una buona ragione per questo, fatecelo sapere.
LANGoLANG_ALLnon funziona per me, loLANGUAGEè ancora . Vedi Perché l'override della variabile d'ambiente LANG non sta cambiando la lingua per me?