¿Dónde se configura la variable $ LANG en Mac OS X?


23

he usado wget por primera vez después de instalar Lion OS X, noté que wget se localizó en mi idioma nativo. Corriendo set comando en la terminal mostró que mi LANG La variable representa mi idioma local. ¿Dónde puedo cambiar esto o hacer? wget ignorar esta configuración?

actualizar

Esto es lo que locale me da

LANG="lt_LT.UTF-8"
LC_COLLATE="lt_LT.UTF-8"
LC_CTYPE="lt_LT.UTF-8"
LC_MESSAGES="lt_LT.UTF-8"
LC_MONETARY="lt_LT.UTF-8"
LC_NUMERIC="lt_LT.UTF-8"
LC_TIME="lt_LT.UTF-8"
LC_ALL=

Por lo tanto, todos los resultados de los no parámetros (como las solicitudes y los mensajes de depuración) están en lituano. Ese es mi problema. Me gustaría volver al inglés.

estoy usando zsh como mi shell de inicio de sesión.


¿Cuál es exactamente el problema con wget? Y que hace locale muestre y es lo mismo que espera de su selección de idioma en el Idioma & amp; Texto panel de preferencias del sistema?
bmike

Respuestas:


25

De forma predeterminada, Terminal configura las variables de entorno de configuración regional para que coincidan con el idioma seleccionado actualmente y los formatos de hora / fecha / número que utiliza Terminal, que se seleccionan a través de

Preferencias del sistema & gt; Lenguaje y texto

(Ese es el nombre en Lion. En los sistemas anteriores, el nombre exacto del panel de preferencias puede variar).

Una solución temporal es arrastrar el inglés a la parte superior de la lista de idiomas, luego abrir Terminal y luego mover el lituano a la parte superior. Entonces solo la Terminal estará en inglés. Sin embargo, se restablecerá a lituano si sale y reinicia el terminal.

Un enfoque persistente es decirle a la Terminal que no establezca las variables de entorno del entorno local, desactivando

Terminal & gt; Preferencias & gt; Configuraciones & gt; [perfil] & gt; Avanzado & gt; Establecer variables de entorno de configuración regional en el inicio

Luego, la configuración regional se establecerá de manera predeterminada en "C" sin idioma especificado, y la mayoría de los programas se establecerán de manera predeterminada en inglés.

Tenga en cuenta que desactivar esto significa que algunos programas no sabrán qué codificación de caracteres utiliza Terminal y supondrán que es solo ASCII o ISO-Latin-1. Entonces, si Terminal está usando UTF-8 (el valor predeterminado), esos programas pueden o no comportarse como se desea.

Si esto es sobre todo acerca de wget, Le recomiendo que haga una copia del perfil de configuración predeterminada, desactive la configuración regional en su perfil personalizado y solo use ese perfil cuando lo use wget, para que pueda seguir usando UTF-8 con soporte completo cuando use otros programas, usando la configuración predeterminada.

Como han mencionado otros, también puede anular la configuración regional inicial proporcionada por Terminal en un script de inicio de shell. Para zsh, ponlo en ~ / .zshrc. Para bash, use ~ / .bashrc (y si aún no tiene uno, cree un ~ / .bash_profile que ejecute ~ / .bashrc).

Consulte x-man-page: // 1 / locale para obtener más información sobre cada uno de los valores del entorno de locale.

Sin embargo, si usted fuera meramente unset LANG o establézcalo en "C", que normalmente se aplicaría a todos de sus shells y programas, mientras que la mayoría de las veces probablemente quiera usar UTF-8 y tener la Terminal configurada para que coincida con las variables locales, para obtener el mayor grado de cooperación, fidelidad y funcionalidad.

Por lo tanto, si va a seguir esa ruta, le sugiero que escriba el código para editar, en lugar de reemplazar, los valores iniciales, de modo que conserve la información de codificación ("UTF-8") y simplemente fuerce el idioma al inglés. En lugar de establecer las variables a "C".

Por ejemplo, esto funciona en zsh y bash:

# Replace Lithuanian with English
export LANG=${LANG/lt_LT/en_US}

Cuando LANG="lt_LT.UTF-8", esto lo cambiará a LANG="en_US.UTF-8". No tengo wget Disponible para probar esto, pero esto debería ser suficiente.

Hacerlo de esta manera significa que si cambia la preferencia de codificación de caracteres en la Terminal, no la anulará en su script de inicio de shell.


Bien hecho; para generalizar el LANG comando de redefinición: echo ${LANG/*./en_US.} reemplaza el nombre de la cultura actual con en_US independientemente de lo que sea; trabaja en bash, ksh, zsh.
mklement0

7

Se establece aquí ...

enter image description here

Si desea más o menos opciones en el menú desplegable, diríjase a la Codificaciones pestaña para ver aún más de la recompensa.


3
en os x es ~ / .bash_profile, no bashrc. La gente se confundió mucho al leer tutoriales en línea.
Enrico Susatyo

Dios mío, gracias por atrapar eso. Incluso fui a la página de código abierto y verifiqué si Apple hizo cambios a gnu bash y aún así me salió mal. (editando mi respuesta - gracias @ the_great_monkey)
bmike

4
El terminal crea shells de inicio de sesión, que ejecutan ~ / .bash_profile. Sin embargo, la mayoría de las personalizaciones de los usuarios deben colocarse en ~ / .bashrc para que también se apliquen a shells que no son de inicio de sesión (por ejemplo, sub-shells), y ~ / .bash_profile debe ejecutar ~ / .bashrc para que se aplique a shells de inicio de sesión. ~ / .bash_profile generalmente está en su mayoría vacío y solo contiene código específicamente para shells de inicio de sesión de nivel superior que el usuario no desea ejecutar para subshells.
Chris Page

1
"una lectura rápida de la página man muestra que el shell establece este valor en cada registro" La página man de bash dice eso, pero Terminal establece el valor inicial, y nunca he visto que bash los haya configurado si aún no estaban configurados. Si desactivo la preferencia "establecer entorno local ...", ninguna de las variables está configurada, y la configuración regional muestra LANG= y los otros valores todos por defecto a "C".
Chris Page

2

Resolví este problema configurando el idioma en mi archivo .profile, que se carga cada vez que inicio un terminal.

export LANG="en_US.UTF-8"
export LC_ALL="POSIX"

LC_ALL anula LANG, por lo que su primer comando no tendrá efecto.
mklement0

1

Basado más en la experiencia de Linux, si no desea cambiar su localización completamente con LC_LANG, pero le gustaría tener mensajes del sistema en inglés, deberías ponerte

LC_COLLATE=C    (to have standard sorting in ls, etc)
LC_CTYPE=en_US.UTF-8

Es el LC_MESSAGES variable que controla en qué idioma se deben enviar los mensajes (si están instalados).
mklement0

0

Usando un servidor debian en francés y un cliente bash macsox, tuve que agregar esto a mi .bash_profile en el directorio de usuarios de macosx:

export LANG = fr_FR.UTF-8

Resuelto


0

Las otras respuestas son correctas, es decir, sobre la Terminal configuración para establecer las variables de entorno local en el inicio y usando la concha /etc/profile. Sin embargo, hay otra forma que vale la pena entender, especialmente si el "problema" se experimenta debido a un control remoto. ssh iniciar sesión.

OpenSSH (como se usa en Linux, BSD y macOS) puede enviar variables de entorno desde el entorno del cliente al shell que inicia el servidor. Solo hace esto si el cliente está configurado para enviarlos y el servidor está configurado para aceptarlos. El cliente ( ~/.ssh/config ) necesitaría tener:

SendEnv LANG LC_*

y el servidor ( /etc/ssh/sshd_config ) necesitaría:

AcceptEnv LANG LC_*

Si ambos están en su lugar, el local del cliente se propaga al shell de inicio de sesión en el servidor ssh:

$ ssh me@my-mac locale
LANG="en_GB.UTF-8"
LC_COLLATE="en_GB.UTF-8"
LC_CTYPE="en_GB.UTF-8"
LC_MESSAGES="en_GB.UTF-8"
LC_MONETARY="en_GB.UTF-8"
LC_NUMERIC="en_GB.UTF-8"
LC_TIME="en_GB.UTF-8"
LC_ALL=

La configuración requerida del servidor no está allí por defecto en Leopardo de nieve ; está ahí en Sierra . Recuerde reiniciar el servidor SSH después de modificar /etc/sshd_config !!!

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.