Hay varias variables de entorno disponibles para cambiar la configuración del idioma. Puede ver su configuración regional actual ejecutando el localecomando. Para cambiar todas las configuraciones regionales a inglés, use LANG=C. Esta Cconfiguración regional siempre está disponible sin instalar paquetes de idiomas adicionales. (Para cambiar temporalmente a configuraciones regionales que no estén en inglés, consulte la publicación de @ mklement0 ).
Ejemplos:
Ejecutar un comando con la configuración de idioma predeterminada e imprimir la configuración regional actual:
$ /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=
Anule temporalmente el idioma de un programa y demuestre que es realmente temporal:
$ 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
Cambie la configuración regional para todos los comandos ejecutados en el shell actual e incluya pruebas nuevamente:
$ 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=
@gertvdijk: Gracias por eso; La razón por la que esta respuesta funciona incluso sin establecer LANGUAGEes una excepción : GNU gettext da prioridad al LANGUAGEvalor, excepto si el LC_MESSAGESvalor ( efectivo) (típicamente establecido indirectamente a través de LANGo LC_ALL) es uno Co (su sinónimo) POSIX. También señalan que LANGUAGEpasa a ser desactivada en esta respuesta, mientras que se establece de forma predeterminada, y si se establece, debe invalidar que para cambiar a una de entorno local específico lenguaje (en contraposición a "C" / "POSIX"), la cual es lo que encontraste
mklement0
Su respuesta funciona muy bien al cambiar a la configuración regional "C" (con mensajes en inglés de EE. UU., Como se requiere), pero no funcionará para otras configuraciones regionales a menos que LANGUAGEse anule o se anule explícitamente. Dado el título genérico de la pregunta, es probable que las personas encuentren esta respuesta buscando cambiar también a un idioma que no sea inglés, así que considere agregar esta información a su respuesta.
mklement0
@ mklement0 Dado el contexto de la pregunta (publicar mensajes de error en inglés), creo que la publicación actual es suficiente. Puede agregar otra respuesta para explicar los detalles LANGUAGEsi lo desea :)
Lekensteyn
Agregué mi propia respuesta , como usted sugirió. Si está de acuerdo con mi evaluación de que los futuros lectores pueden venir aquí buscando cambiar a cualquier idioma (como varias personas ya lo han indicado activamente), agregue un enlace a mi respuesta a su pregunta. Aparte de eso, sugiero cambiar el valor de LANGUAGEen su salida de muestra a nl, que es el valor predeterminado real cuando su configuración regional es nl_NL.UTF-8.
mklement0
9
La útil respuesta de Lekensteyn funciona muy bien si desea cambiar al inglés de EE. UU. A pedido, como lo solicitó el OP, pero si desea cambiar a un idioma diferente a pedido , se necesita más trabajo.
Antes de comenzar, debe instalar tablas de mensajes con sudo apt-get install language-pack-<lang-tag>, donde <lang-tag>hay una subetiqueta de idioma RTF 5646 simple , como espara español.
Información de fondo
GNU gettext servicios públicos basados dando prioridad a los no estándar LANGUAGEvariable de entorno [1]
sobre las variables de entorno de configuración regional definidos POSIX LC_ALL, LC_MESSAGESy LANG(en ese orden).
Dado que LANGUAGEse establece de manera predeterminada en los sistemas Ubuntu [2] , es decir, en una subcadena del LANGvalor que refleja una etiqueta de idioma simple (por ejemplo, espara español) o una etiqueta de región de idioma (por ejemplo, de_DEpara la variante alemana de alemán), debe desarmar o anular LANGUAGEpara que los mensajes de un idioma diferente surtan efecto. [3]
Opción 1: establecer LANGUAGE
Ejemplo : cambiar a esmensajes en español ( ) ad-hoc:
$ LANGUAGE=es ls NoSuchFile
ls: no se puede acceder a NoSuchFile: No existe el archivo o el directorio
Nota : Una etiqueta de idioma simple como eses suficiente, pero puede agregar un identificador de región (por ejemplo, es_ARpara Argentina) e incluso un sufijo de conjunto de caracteres (por ejemplo, es_AR.UTF-8).
Sin embargo, los mensajes localizados solo pueden existir a nivel de idioma , y la alternativa es usar mensajes que coincidan con la parte del idioma ( es, en este caso).
Opción 2: desarmar LANGUAGEy configurarLC_ALL
Esta solución alternativa no se defineLANGUAGE primero y luego usa la variable de entorno local POSIX LC_ALLpara establecer implícitamente 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
Esta solución tiene la ventaja de configurar todos los aspectos de localización en la configuración regional especificada (como LC_TIMEpara los formatos de fecha / hora) y mediante la configuración (implícitamente) LC_MESSAGEStambién informa a los programas que no son GNU del idioma deseado.
Tenga en cuenta cómo se LC_ALLrequiere que el nombre de configuración regional exacto y completo , incluido el sufijo charset, sea efectivo ( es_ES.UTF-8) (a diferencia de LANGUAGE, para lo cual una etiqueta de idioma simple es suficiente (like es)). Lo mismo se aplica a la configuración LC_MESSSAGESy LANG. La especificación de un nombre de configuración regional no válido / no instalado provoca el retroceso a la configuración regional POSIX y, por lo tanto, al inglés de EE. UU.
Notas al pie
[1] Las razones por las que la respuesta de Lekensteyn funciona incluso sin desarmar / anular LANGUAGEes una excepción : si el LC_MESSAGESvalor (efectivo) indirecto (típicamente establecido vía LANGo LC_ALL) es uno Co (su sinónimo) POSIX, ese valor se respeta, independientemente del valor de LANGUAGE, Si alguna. Por el contrario, si el LC_MESSAGESvalor (efectivo) es cualquier otro lugar específico , LANGUAGEtiene prioridad.
[2] Esto se aplica a Ubuntu propiamente dicho , pero no necesariamente a otros sabores ; Lekensteyn afirma que Kubuntu no se establece LANGUAGE.
Podría decirse LANGUAGEque no debe establecerse de manera predeterminada, dado que, en su ausencia , se respeta el LC_MESSAGESvalor implícito por el LANGvalor (que determina el entorno local actual).
[3] También puede usar este enfoque para cambiar al inglés de [EE. UU.] Asignando uno LANGUAGE=Co LANGUAGE=POSIX(como alternativa a, LANG=C/ LANG=POSIX), aunque no estoy claro si eso se reconoce activamente o simplemente un mecanismo alternativo , dado que estos valores no no comience con una etiqueta de idioma ; Quizás la mejor opción sería en_US.
[4] Hay un borde caso en que este enfoque no funciona: intentar invocar un archivo ejecutable con un camino - ya sea relativa o absoluta - no se conecta con el idioma elegido, mientras que un mero nombre de archivo hace: LANGUAGE= LC_ALL=es_ES.UTF-8 /path/to/no_such_utilityhace no trabajo (salidas de un mensaje en el entorno local actual), mientras que LANGUAGE= LC_ALL=es_ES.UTF-8 no_such_utilitysí (genera un mensaje de error en español).
Si alguien sabe por qué y si hay una buena razón para esto, háganoslo saber.
LANG
oLANG_ALL
no me funciona, todavía loLANGUAGE
es. Consulte ¿Por qué anular la variable de entorno LANG no cambia el idioma para mí?LANGUAGE
es una excepción : GNU gettext da prioridad alLANGUAGE
valor, excepto si elLC_MESSAGES
valor ( efectivo) (típicamente establecido indirectamente a través deLANG
oLC_ALL
) es unoC
o (su sinónimo)POSIX
. También señalan queLANGUAGE
pasa a ser desactivada en esta respuesta, mientras que se establece de forma predeterminada, y si se establece, debe invalidar que para cambiar a una de entorno local específico lenguaje (en contraposición a "C" / "POSIX"), la cual es lo que encontrasteLANGUAGE
se anule o se anule explícitamente. Dado el título genérico de la pregunta, es probable que las personas encuentren esta respuesta buscando cambiar también a un idioma que no sea inglés, así que considere agregar esta información a su respuesta.LANGUAGE
si lo desea :)LANGUAGE
en su salida de muestra anl
, que es el valor predeterminado real cuando su configuración regional esnl_NL.UTF-8
.La útil respuesta de Lekensteyn funciona muy bien si desea cambiar al inglés de EE. UU. A pedido, como lo solicitó el OP, pero si desea cambiar a un idioma diferente a pedido , se necesita más trabajo.
Antes de comenzar, debe instalar tablas de mensajes con
sudo apt-get install language-pack-<lang-tag>
, donde<lang-tag>
hay una subetiqueta de idioma RTF 5646 simple , comoes
para español.Información de fondo
GNU gettext servicios públicos basados dando prioridad a los no estándar
LANGUAGE
variable de entorno [1] sobre las variables de entorno de configuración regional definidos POSIXLC_ALL
,LC_MESSAGES
yLANG
(en ese orden).Dado que
LANGUAGE
se establece de manera predeterminada en los sistemas Ubuntu [2] , es decir, en una subcadena delLANG
valor que refleja una etiqueta de idioma simple (por ejemplo,es
para español) o una etiqueta de región de idioma (por ejemplo,de_DE
para la variante alemana de alemán), debe desarmar o anularLANGUAGE
para que los mensajes de un idioma diferente surtan efecto. [3]Opción 1: establecer
LANGUAGE
Ejemplo : cambiar a
es
mensajes en español ( ) ad-hoc:Nota : Una etiqueta de idioma simple como
es
es suficiente, pero puede agregar un identificador de región (por ejemplo,es_AR
para Argentina) e incluso un sufijo de conjunto de caracteres (por ejemplo,es_AR.UTF-8
).Sin embargo, los mensajes localizados solo pueden existir a nivel de idioma , y la alternativa es usar mensajes que coincidan con la parte del idioma (
es
, en este caso).Opción 2: desarmar
LANGUAGE
y configurarLC_ALL
Esta solución alternativa no se define
LANGUAGE
primero y luego usa la variable de entorno local POSIXLC_ALL
para establecer implícitamenteLC_MESSAGES
[4] :Esta solución tiene la ventaja de configurar todos los aspectos de localización en la configuración regional especificada (como
LC_TIME
para los formatos de fecha / hora) y mediante la configuración (implícitamente)LC_MESSAGES
también informa a los programas que no son GNU del idioma deseado.Tenga en cuenta cómo se
LC_ALL
requiere que el nombre de configuración regional exacto y completo , incluido el sufijo charset, sea efectivo (es_ES.UTF-8
) (a diferencia deLANGUAGE
, para lo cual una etiqueta de idioma simple es suficiente (likees
)). Lo mismo se aplica a la configuraciónLC_MESSSAGES
yLANG
. La especificación de un nombre de configuración regional no válido / no instalado provoca el retroceso a la configuración regional POSIX y, por lo tanto, al inglés de EE. UU.Notas al pie
[1] Las razones por las que la respuesta de Lekensteyn funciona incluso sin desarmar / anular
LANGUAGE
es una excepción : si elLC_MESSAGES
valor (efectivo) indirecto (típicamente establecido víaLANG
oLC_ALL
) es unoC
o (su sinónimo)POSIX
, ese valor se respeta, independientemente del valor deLANGUAGE
, Si alguna. Por el contrario, si elLC_MESSAGES
valor (efectivo) es cualquier otro lugar específico ,LANGUAGE
tiene prioridad.[2] Esto se aplica a Ubuntu propiamente dicho , pero no necesariamente a otros sabores ; Lekensteyn afirma que Kubuntu no se establece
LANGUAGE
.Podría decirse
LANGUAGE
que no debe establecerse de manera predeterminada, dado que, en su ausencia , se respeta elLC_MESSAGES
valor implícito por elLANG
valor (que determina el entorno local actual).[3] También puede usar este enfoque para cambiar al inglés de [EE. UU.] Asignando uno
LANGUAGE=C
oLANGUAGE=POSIX
(como alternativa a,LANG=C
/LANG=POSIX
), aunque no estoy claro si eso se reconoce activamente o simplemente un mecanismo alternativo , dado que estos valores no no comience con una etiqueta de idioma ; Quizás la mejor opción seríaen_US
.[4] Hay un borde caso en que este enfoque no funciona: intentar invocar un archivo ejecutable con un camino - ya sea relativa o absoluta - no se conecta con el idioma elegido, mientras que un mero nombre de archivo hace:
LANGUAGE= LC_ALL=es_ES.UTF-8 /path/to/no_such_utility
hace no trabajo (salidas de un mensaje en el entorno local actual), mientras queLANGUAGE= LC_ALL=es_ES.UTF-8 no_such_utility
sí (genera un mensaje de error en español).Si alguien sabe por qué y si hay una buena razón para esto, háganoslo saber.
fuente