Les messages de mon terminal sont affichés en russe par défaut, ce qui est mon natif.
Pendant un instant, je veux qu’ils soient en anglais (par exemple, pour coller dans les forums), puis reviennent dans la langue par défaut.
Comment puis-je faire le changement et revenir en utilisant bash?
Plusieurs variables d’environnement sont disponibles pour modifier les paramètres de langue. Vous pouvez afficher vos paramètres régionaux actuels en exécutant la commande locale
. Pour modifier tous les paramètres régionaux en anglais, utilisez LANG=C
. Cette locale C
est toujours disponible sans installer de packs de langue supplémentaires. (Pour changer temporairement les paramètres régionaux non anglais, voir le message de @ mklement .)
Exemples:
Exécutez une commande avec les paramètres de langue par défaut et imprimez les paramètres régionaux en cours:
$ /nonexistent
bash: /nonexistent: Bestand of map bestaat niet
$ locale
LANG=nl_NL.UTF-8
LANGUAGE=
LC_CTYPE="nl_NL.UTF-8"
LC_NUMERIC="nl_NL.UTF-8"
LC_TIME="nl_NL.UTF-8"
LC_COLLATE="nl_NL.UTF-8"
LC_MONETARY="nl_NL.UTF-8"
LC_MESSAGES="nl_NL.UTF-8"
LC_PAPER="nl_NL.UTF-8"
LC_NAME="nl_NL.UTF-8"
LC_ADDRESS="nl_NL.UTF-8"
LC_TELEPHONE="nl_NL.UTF-8"
LC_MEASUREMENT="nl_NL.UTF-8"
LC_IDENTIFICATION="nl_NL.UTF-8"
LC_ALL=
Remplacez temporairement la langue pour un programme et montrez que c'est vraiment temporaire:
$ LANG=C ls /nonexistent
ls: cannot access /nonexistent: No such file or directory
$ ls /nonexistent
ls: kan geen toegang krijgen tot /nonexistent: Bestand of map bestaat niet
Modifiez les paramètres régionaux pour toutes les commandes exécutées dans le shell actuel et incluez à nouveau les preuves:
$ LANG=C
$ ls /nonexistent
ls: cannot access /nonexistent: No such file or directory
$ locale
LANG=C
LANGUAGE=
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=
La réponse utile de Lekensteyn fonctionne très bien si vous souhaitez passer à anglais américain à la demande, comme l'OP l'a demandé, mais si vous souhaitez passer Pour une différente langue à la demande , davantage de travail est nécessaire.
Avant de commencer, vous devez installer les tables de messages avec Sudo apt-get install language-pack-<lang-tag>
, où <lang-tag>
est un simple RTF 5646 sous-étiquette de langue , tel que es
pour l'espagnol.
GNU gettext - Les utilitaires donnent la priorité à la variable d’environnement non standard LANGUAGE
name__[1] sur les variables d'environnement de paramètres régionaux définies par POSIX LC_ALL
, LC_MESSAGES
et LANG
(dans cet ordre).
Étant donné que LANGUAGE
est défini par défaut sur les systèmes Ubuntu[2], à savoir une chaîne de la valeur LANG
qui reflète une balise de langue simple (par exemple, es
pour l'espagnol) ou une balise de région linguistique (par exemple, de_DE
pour la variante allemande de l'allemand), vous devez unset ou remplacer LANGUAGE
afin que les messages d'une langue différente prennent effet.[3]
LANGUAGE
name__ Exemple : passer en espagnol (es
name__) messages ad-hoc:
$ LANGUAGE=es ls NoSuchFile
ls: no se puede acceder a NoSuchFile: No existe el archivo o el directorio
Remarque : une simple étiquette de langue telle que es
est suffisante, mais vous pouvez ajouter un identificateur de région (par exemple, es_AR
pour l'Argentine) et même un suffixe de jeu de caractères. (par exemple, es_AR.UTF-8
).
Toutefois, les messages localisés ne peuvent exister qu'au niveau langue, et la solution de remplacement consiste à utiliser des messages qui correspondent à la partie langue (es
name__, dans ce cas) .
LANGUAGE
et définissez LC_ALL
Cette solution alternative ndefinesLANGUAGE
commence par utiliser la variable d'environnement d'environnement local POSIX LC_ALL
pour définir implicitement 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
Cette solution présente l’avantage de définir all les aspects de localisation sur les paramètres régionaux spécifiés (tels que LC_TIME
pour les formats de date/heure) et de (implicitement) définir LC_MESSAGES
en informe également non - GNU programmes de la langue désirée.
Notez que LC_ALL
exige que le nom de locale exact, full, y compris le suffixe du jeu de caractères, soit effectif (es_ES.UTF-8
) (contrairement à LANGUAGE
name__, pour lequel une simple balise de langage suffit (comme es
name__). Il en va de même pour la définition de LC_MESSSAGES
et de LANG
name__. La spécification d'un nom de paramètres régionaux non installé/non installé entraîne le repli sur les paramètres régionaux POSIX et donc sur l'anglais américain.
[1] Les raisons pour lesquelles la réponse de Lekensteyn fonctionne même sans annuler/annuler LANGUAGE
est un exception: si la valeur (effective) LC_MESSAGES
(généralement définie indirectement via LANG
ou LC_ALL
) est C
ou (son synonyme) POSIX
name__, cette valeur est respectée, quelle que soit la valeur de LANGUAGE
name__, le cas échéant. Inversement, si la valeur (effective) LC_MESSAGES
est différente, spécifique locale, LANGUAGE
est prioritaire.
[2] Ceci s'applique à buntu proprement dit , mais pas nécessairement à autres versions ; Lekensteyn déclare que Kubunt fait pas définit LANGUAGE
name__.
On peut soutenir que LANGUAGE
devrait not être défini par défaut, étant donné qu'en son absence, la valeur LC_MESSAGES
impliquée par la valeur LANG
(qui détermine les paramètres régionaux actuels) est respectée.
[3] Vous pouvez également utiliser cette approche pour basculer vers [US] English en attribuant LANGUAGE=C
ou LANGUAGE=POSIX
(au lieu de LANG=C
/LANG=POSIX
), bien que je ne sache pas exactement si c'est reconnu ou s'il s'agit simplement d'un fallback mécanisme, étant donné que ces valeurs ne commencent pas par une balise language; Peut-être que le meilleur choix serait en_US
.
[4] Il y a un cas Edge où cette approche ne fonctionne pas: essayer d'appeler un exécutable avec un chemin - qu'il soit relatif ou absolu - ne bascule PAS vers le langage spécifié , alors qu’un simple nom de fichier fait:LANGUAGE= LC_ALL=es_ES.UTF-8 /path/to/no_such_utility
ne fonctionne pas not (génère un message dans les paramètres régionaux actuels), alors queLANGUAGE= LC_ALL=es_ES.UTF-8 no_such_utility
fait (affiche un message d'erreur en espagnol).
Si quelqu'un sait pourquoi et s'il y a une bonne raison à cela, faites-le nous savoir.