¿Cómo puedo personalizar una configuración regional del sistema?

24

En Sistema Administración Soporte de idiomas Texto. Solo puedo elegir configuraciones regionales estándar, pero me gustaría afinar. Por ejemplo, en Windows podría personalizar cosas como el formato de fecha y hora, unidades de medida, separador decimal, moneda, etc. manualmente. ¿Cómo puedo hacer esto en Ubuntu?

Ivan
fuente

Respuestas:

28

Esta respuesta demostrará cómo personalizar completamente un entorno local, opcionalmente utilizando un entorno local existente como base. El tipo de configuración regional que se utilizará en esta respuesta es el i18ntipo; dicho tipo de configuración regional estará implícito en cada mención de la palabra "configuración regional" en el cuerpo de la respuesta.

Encuentra una guía

Lo primero que necesita para personalizar una configuración regional es conocer el formato de la configuración regional. Este editor de entorno web tiene una descripción completa de cada campo en un entorno local, a pesar de que no puede ser utilizado por cualquiera de forma inmediata. Esta será la guía para usar.

Herramientas necesarias

Las únicas herramientas que necesita para trabajar con configuraciones regionales son

  1. Un editor de texto. Cualquiera servirá, aunque VIM sobresaldrá.
  2. Un convertidor de texto a unicode. Sería de esperar que no tuvieras uno, así que te proporcionaré uno simple. Lea la siguiente subsección para obtenerla.

Le recomiendo que cree un directorio y guarde todo lo relacionado con el trabajo que realizará en la configuración regional.

Convertidor de texto a unicode (encodestr)

NOTA: si está utilizando caracteres no comunes , puede tener problemas con el script que escribo a continuación; es posible que desee echar un vistazo a los scripts alternativos vinculados por nass .

Guarde el siguiente código en un archivo. Su sistema identificará este archivo como un script de Python, lo cual está bien porque es uno. Esta guía asume que llamó el guión encodestr.

#!/usr/bin/python

def encode(string):
    newstring = str()
    for ch in string:
        newstring += "<U%04X>" % ord(ch)
    return newstring

if __name__ == '__main__':
    import sys
    print encode(sys.argv[1])

Después de haberlo guardado, otorgue permiso para la ejecución del archivo; esto será útil. Puede hacer que el uso de Nautilus, o ejecutando desde un terminal el siguiente comando, en el directorio en el que guardó la secuencia de comandos: chmod +x encodestr.

Ahora puede probar esta secuencia de comandos que se ejecutan en el mismo directorio: ./encodestr hello. Debería obtener una salida igual a <U0068><U0065><U006C><U006C><U006F>.

Modificar una configuración regional existente

La modificación de una configuración regional existente es el caso más fácil, ya que lo ideal sería elegir una configuración regional que se adapte a sus necesidades casi por completo, en cuyo caso solo debe realizar pequeñas modificaciones. Para personalizarlo, puede usar la guía para saber cuáles de las secciones son las que desea cambiar y cómo puede cambiarlas. Todas las configuraciones regionales instaladas residen /usr/share/i18n/locales, sin embargo, la guía contiene prácticamente todas las configuraciones regionales creadas.

Sin embargo, lo primero que notará cuando abra una configuración regional es que leerá palabras en inglés tanto como <UXXXX>códigos extraños . Deberá poder crear estos códigos: aquí es donde encodestrviene el script.

Cuando sepa qué secciones debe cambiar, debe conocer cada campo contenido en la sección.

Por ejemplo, la LC_TIMEsección contiene el campo t_fmty muchos otros. Cada campo tiene su propia descripción en la guía .

Ahora que sabe qué campos modificar, use la guía nuevamente para averiguar qué valores acepta el campo.

Por ejemplo, el campo t_fmtacepta texto y las variables strfmt comunes .

Justo cuando sepa qué escribir en los campos que desea modificar, ejecute el texto a través del encodestrscript para obtener su equivalente codificado.

NOTA: no todos los campos deben codificarse; si es necesario, utilice una configuración regional existente como referencia.

Por ejemplo, si desea tener el formato de hora Time: %Ten el t_fmtcampo, ejecute ./encodestr "Time: %T"; esto volverá <U0054><U0069><U006D><U0065><U003A><U0020><U0025><U0054>y, por lo tanto, tendrá la línea t_fmt <U0054><U0069><U006D><U0065><U003A><U0020><U0025><U0054>en su localidad (en su sección respectiva, por supuesto).

Una vez que haya modificado todos los campos que desea, deberá proceder a instalar la configuración regional en el sistema, de modo que pueda usarse. Vaya a la sección de instalación para esto.

Crear un entorno local desde cero

A diferencia de la modificación de uno, el otro método que puede usar para crear su ubicación personalizada es trabajar desde cero. Esto no es muy difícil si, de nuevo, usa la guía . Sin embargo, aquí hay un consejo útil: puede copiar secciones de otras configuraciones regionales sin métodos reales de copiar y pegar . Solo tienes que seguir este formato:

LC_SECTION
copy "locale"
END LC_SECTION

¿Dónde LC_SECTIONestá la sección que desea modificar y localees la configuración regional desde la que desea copiar esa sección?

Por ejemplo, si desea copiar el formato de hora en la configuración regional en inglés, tendrá este texto en su archivo de configuración regional personalizado:

LC_TIME
copy "en_GB"
END LC_TIME

Y eso le ahorra mucho trabajo y asegura que cualquier cambio realizado en el entorno local referenciado se reflejará en el suyo.

Instalar su localidad personalizada

Los pasos que voy a mostrar a continuación pueden no ser óptimos, pero funcionan.

  1. Compila tu localidad. ¡No entres en pánico! Esto no lleva tiempo. Simplemente ejecute el comando sudo localedef -i custom -f UTF-8 custom.UTF-8 -c -vdonde customestá el nombre de su localidad.

  2. Copie su configuración regional en el /usr/share/i18n/locales/directorio. Definitivamente necesitará privilegios de sudo para hacer esto, y puede hacerlo con el comando sudo cp locale /usr/share/i18n/locales/donde localeestá el nombre de archivo de su configuración regional personalizada.

  3. Especifique su ubicación en /var/lib/locales/supported.d/. Por ejemplo, cree un nombre de archivo /var/lib/locales/supported.d/asdy agregue la línea custom UTF-8, donde personalizado es el nombre de su configuración regional.

  4. Ejecuta el comando mágico. En realidad no sé qué hace exactamente este comando, pero es crucial. Ejecutar sudo locale-gen. Es muy probable que genere referencias a las configuraciones regionales disponibles donde sea necesario.

  5. Dígale a su sistema que use la configuración regional. Si desea que la configuración regional se use en todo el sistema, modifique el /etc/environmentarchivo. De lo contrario, puede modificar su ~/.profilearchivo o cualquier otro que se origine en el inicio. Si no sabe lo que significa esto último, no se preocupe, solo use el ~/.profilearchivo. Para saber lo que tiene que escribir, primero ejecute el localecomando. Se debe emitir una lista con otros productos como LANGUAGE, LC_MESSAGES, LC_CTYPEy muchos otros. Escribirá, para cada una de las secciones que desee (enumeradas por el comando anterior), en líneas separadas, aquí es SECTION="locale"donde se SECTIONencuentra la sección y localeel nombre de su configuración regional personalizada.

Por ejemplo, si desea utilizar el formato de hora de los Países Bajos, pero el idioma inglés, escriba:

LANGUAGE="en_GB:en"
LC_TIME="nl_NL"

NOTA: Si desea utilizar una configuración regional para cada configuración regional, escriba LC_ALL="locale"dónde localeestá el nombre de su configuración regional personalizada. Si desea utilizar una configuración regional para todo menos para el idioma, puede escribir LANG="locale"y (en otra línea, por supuesto) LANGUAGE="locale":XXdónde XXestá el código de 2 letras para el idioma que desea.

Por ejemplo, si desea usar el idioma holandés y el idioma inglés, puede usar:

LANG="nl_NL"
LANGUAGE="nl_NL:en"

Has terminado

La próxima vez que inicie sesión, su configuración regional debe estar en uso. Puede probar esto ejecutando el localecomando nuevamente.

¡Comente sobre inconsistencias o declaraciones falsas en esta guía!

Severo Raz
fuente
Hola, el código de Python que usas no funciona en todos los casos. Para los caracteres griegos πμ, genera <U00CF><U0080><U00CE><U00BC>, en lugar de los caracteres esperados <U03C0><U03BC>. Aquí hay un enlace que funciona.
nass
¡Gracias por tu contribución! He incluido su comentario en el texto donde venció :)
Severo Raz
He tenido que añadir custom UTF-8a /usr/share/i18n/SUPPORTEDantes de que pudiera funcionar sudo locale-gen. De lo contrario, no estaría en la lista.
Wilbert
Copié su método de conversión de cadenas en mi colección de scripts de shell: github.com/budhajeewa/shell-scripts/commit/… . ¡Gracias!
budhajeewa
Si alguien está buscando una función para hacer el reverso del método en esta respuesta (la necesitaba para leer los valores hexadecimales existentes en los archivos locales), escribí un script PHP para eso. github.com/budhajeewa/shell-scripts/commit/… . Si alguien puede escribirlo en Python, avíseme. Me gustaría agregar eso a mi colección.
budhajeewa
8

No estoy seguro de qué tipo de personalización desea, pero puede establecer algunas variables de configuración regional utilizando su ~/.locale. Por ejemplo, para recibir mensajes en inglés pero en alemán y los me gusta que uso

export LC_ALL=""
export LANG="en_GB.utf8"
export LC_CTYPE="de_DE.utf8"
export LC_NUMERIC="de_DE.utf8"
export LC_TIME="de_DE.utf8"
export LC_COLLATE="de_DE.utf8"
export LC_MONETARY="de_DE.utf8"
export LC_MESSAGES="en_GB.utf8"
export LC_PAPER="de_DE.utf8"
export LC_NAME="en_GB.utf8"
export LC_ADDRESS="de_DE.utf8"
export LC_TELEPHONE="de_DE.utf8"
export LC_MEASUREMENT="de_DE.utf8"
export LC_IDENTIFICATION="de_DE.utf8"

También es posible generar configuraciones regionales personalizadas. Consulte, por ejemplo, esta guía para las fechas.

Carsten Thiel
fuente
1
No, quiero una personalización de nivel inferior. Por ejemplo: mensajes en inglés, unidades métricas, fecha / hora checa modificada (DD.MM.YYYY HH: mm en lugar de DMYYYY H.MM), un punto como separador decimal (hay una coma para esto en el idioma checo) y € como la moneda (hay moneda Kč en la localidad checa).
Ivan
Veo. ¿Toma en_USpara LC_NUMERICy de_DEpara LC_MONETARYy LC_MEASUREMENTle da otros efectos secundarios? Vea también el nuevo enlace para generar una localización personal.
Carsten Thiel el
1
las instrucciones detrás del enlace parecen responder maravillosamente a la pregunta, ¿tal vez podría replicar los bits más importantes aquí, en caso de que el enlace no sea accesible algún día?
Stefano Palazzo