Establecer configuraciones regionales personalizadas en Gnome3 (en Fedora 20)

15

Creé mis propios locales personalizados y los coloqué en los /etc/locale.confque surte efecto con éxito si inicio sesión en una consola virtual (Ctrl + Alt + F2). Sin embargo, en mi sesión de Gnome3 esas variables no están establecidas. Para aplicaciones de terminal, podría ubicarlas en el, .bashrcpero eso no me ayudará con aplicaciones gráficas como Thunderbird y Pidgin.

He intentado seguir estos consejos: la configuración regional en la inicialización de shell no utilizada por la sesión de GNOME e incluso emuló el error en Locale - ArchWiki creando un .pam_environmentarchivo, pero los locales siguen siendo los establecidos por Gnome3. Hay un diálogo de configuración en la configuración de Gnome, pero solo permite establecer un conjunto muy limitado de localecombinaciones predefinidas y no hay forma de personalizarlas.

Los archivos relevantes en mi directorio de inicio:

user@localhost:~$ ls -lah .dmrc .pam_environment .session .xsession .xsessionrc
lrwxrwxrwx. 1 user user 16 12. Jun 08:57 .dmrc -> /etc/locale.conf
lrwxrwxrwx. 1 user user 16 11. Jun 20:23 .pam_environment -> /etc/locale.conf
lrwxrwxrwx. 1 user user 16 12. Jun 09:09 .session -> /etc/locale.conf
lrwxrwxrwx. 1 user user 16 12. Jun 09:07 .xsession -> /etc/locale.conf
lrwxrwxrwx. 1 user user  9 13. Jun 11:22 .xsessionrc -> .xsession
-rw-rw-r--. 1 user user 66 13. Jun 11:13 .profile

user@localhost:~$ cat .profile 
source /etc/locale.conf

Los contenidos de /etc/locale.conf:

LANG="en_US.utf8"
LC_TIME="de_MY.utf8" # NB: de_MY
LC_MONETARY="de_DE.utf8"
LC_PAPER="de_DE.utf8"
LC_NAME="de_DE.utf8"
LC_ADDRESS="de_DE.utf8"
LC_TELEPHONE="de_DE.utf8"
LC_MEASUREMENT="de_DE.utf8"
LC_IDENTIFICATION="de_DE.utf8"

¿Alguien sabe cómo configurar locales personalizados en Gnome3?

Perseidas
fuente

Respuestas:

9

Información de contexto

Probé la solución en Fedora 21 con GNOME Shell 3.14.4, pero creo que también se puede aplicar a otras versiones.

Lo primero que hay que entender es que el entorno de escritorio GNOME anula las definiciones locales de todo el sistema y, por lo tanto, no se ve afectado por ellas /etc/locale.conf. Además, puede haber aplicaciones que tengan su propia configuración regional y no utilicen el sistema o la configuración de GNOME. En esta guía, describiré una forma de personalizar la configuración regional según sus necesidades y GNOME, y el sistema será coherente desde la perspectiva de la configuración regional.


Comprobación del estado del entorno local actual

Configuraciones de todo el sistema

De la Guía del administrador del sistema Fedora 21 :

La configuración regional de todo el sistema se almacena en el /etc/locale.confarchivo, que se lee en el inicio temprano por el demonio systemd . La configuración regional establecida en /etc/locale.confes heredada por cada servicio o usuario, a menos que los programas individuales o usuarios individuales los anulen.

Para ver el estado local actual, podemos ejecutar:

$ localectl status
   System Locale: LANG=en_US.UTF-8
                  LC_NUMERIC=en_US.UTF-8
                  LC_TIME=en_US.UTF-8
                  LC_MONETARY=en_US.UTF-8
                  LC_PAPER=en_US.UTF-8
                  LC_MEASUREMENT=en_US.UTF-8
       VC Keymap: us
      X11 Layout: us

Configuraciones de GNOME

$ gsettings get org.gnome.system.locale region
'en_US.UTF-8'

GNOME tiene solo una configuración. Al echar un vistazo rápido al código fuente de gnome-control-center , parece que cuando set_localed_locale()se llama a la función, establece todas las categorías siguientes (LC_TIME, LC_NUMERIC, LC_MONETARY, LC_MEASUREMENT, LC_PAPER) en la misma configuración regional definida en org.gnome.system.locale region.

Mezclar diferentes configuraciones locales parece imposible sin crear una configuración regional personalizada, pero afortunadamente no es una tarea muy compleja.


Crear configuración regional personalizada

Creo que la forma más fácil de explicar es con un ejemplo. En mi caso particular yo quería tener una configuración regional personalizada, basada principalmente en hebreo ( he_IL ) pero con LC_NAME, LC_MESSAGES de en_US y LC_TIME (con modificaciones first_weekdayy first_workday) de en_GB .

Agarrando archivos de definición de configuración regional

Debería tener una idea de los entornos locales que desea mezclar. Primero necesitamos localizar los archivos de definición relacionados, que se pueden encontrar en /usr/share/i18n/locales/. Volver a mi ejemplo, que necesitaba la siguiente: he_IL , es_ES y es_ES . Configuré una carpeta de trabajo en mi casa y copié los archivos necesarios en ella:

$ cd /usr/share/i18n/locales
$ mkdir -v ~/custom-locale ; cp -v he_IL en_US en_GB ~/custom-locale/

Crear un nuevo archivo de definición

Decidí llamar a mi locale hc_IL y tomé he_IL como base. Las siguientes líneas crean un nuevo archivo hc_ILcon el contenido de he_ILy en el camino reemplazan todas las ocurrencias de una cadena he_IL dentro del archivo con hc_IL .

$ cd ~/custom-locale/
$ sed 's/he_IL/hc_IL/g' he_IL > hc_IL

Modificar el nuevo archivo de definición

Ahora podemos personalizar la nueva configuración regional según nuestras necesidades. Abra el archivo recién creado ~/custom-locale/hc_ILcon su editor de texto favorito. Uso vim (tiene el resaltado de sintaxis adecuado para los archivos de definición de configuración regional):

$ vim ~/custom-locale/hc_IL

Para aquellos que aún no han elegido su editor favorito y vim no es su taza de té, pueden usar gedit :)

$ gedit ~/custom-locale/hc_IL

La estructura del archivo no es muy complicada. Esencialmente, se construye a partir de secciones. Desde las páginas man de locale (5) :

La definición de configuración regional tiene una parte para cada categoría de configuración regional. Cada parte se puede copiar desde otro entorno local existente o se puede definir desde cero. Si se debe copiar la categoría, la única palabra clave válida en la definición es copiar seguida del nombre de la configuración regional que se debe copiar.

La noción de copia es muy útil. Ahorra tiempo y el archivo resultante es claro y conciso. Por ejemplo, en lugar de copiar secciones enteras, puede tener:

LC_MESSAGES
copy "en_US"
END LC_MESSAGES

Se puede acceder a la documentación completa en un archivo de definición de configuración regional a través de:

$ man 5 locale

Sin embargo, si solo desea crear una configuración regional personalizada, que es una combinación de las existentes, no es necesario comprender cada detalle.

En mi caso modifiqué las siguientes categorías y palabras clave:

  • IDENTIFICACIÓN_CL

    title      "Custom Hebrew locale"
    source     "mydomain.ws"
    address    "http:////www.mydomain.ws"
    contact    ""
    email      "[email protected]"
    tel        ""
    fax        ""
    language   "Hebrew"
    territory  "Israel"
    revision   "1.0"
    date       "2015-04-21"
    

    Nota: Todas las líneas de " categoría .. " en la sección LC_IDENTIFICATION han sido modificadas durante la creación del archivo usando sed. Entonces ya no necesitamos tocarlos.

  • LC_TIME

    Copié la sección completa de en_GB y modifiqué solo las líneas que indican el primer día de la semana y el primer día de trabajo:

    first_weekday 1
    first_workday 1
    
  • El resto de las categorías las dejé tal como están o reemplacé su contenido con la directiva de copia como en:

    LC_NAME
    copy "en_US"
    END LC_NAME
    

Eso es todo, el archivo de definición está listo. No olvides guardar el archivo :)

Compilar y copiar la nueva configuración regional

La compilación de la nueva configuración regional se realiza utilizando el siguiente comando como root o sudo . Reemplace hc_ILcon su localidad:

$ sudo localedef  -c -v -i hc_IL -f UTF-8 hc_IL.UTF-8

Si la compilación es exitosa, los datos locales compilados se agregan al archivo de almacenamiento /usr/lib/locale/locale-archive.

Copie el nuevo archivo de definición de configuración regional en el directorio de definiciones de configuración regional. Reemplace hc_ILcon su localidad:

$ sudo cp -v hc_IL /usr/share/i18n/locales/

Activando la nueva configuración regional

En este paso, queremos configurar el sistema y GNOME para usar la nueva configuración regional.

Configuraciones de todo el sistema

Edite el /etc/locale.confarchivo como raíz y configure cada línea que comience con LC_su nueva configuración regional. Por ejemplo:

LANG=en_US.UTF-8
LC_NUMERIC=hc_IL.utf8
LC_TIME=hc_IL.utf8
LC_MONETARY=hc_IL.utf8
LC_PAPER=hc_IL.utf8
LC_MEASUREMENT=hc_IL.utf8

Configuraciones de GNOME

Para activar la nueva configuración regional en GNOME, ejecute el siguiente comando. Reemplace hc_ILcon su localidad:

$ gsettings set org.gnome.system.locale region "hc_IL.utf8"

Validar la nueva configuración

El último paso es validar que todo funciona como se esperaba. Para volver a cargar todas las configuraciones, lo más fácil para mí fue reiniciar.

  • Consulte la sección "Verificación del estado del entorno local actual" para verificar que la configuración del sistema sea correcta.
  • Use GNOME Shell y las aplicaciones dependientes de la configuración regional (gráfica y consola) y verifique que se comporten como se espera con la nueva configuración regional. Por ejemplo, si personalizó LC_TIME, puede ejecutar el datecomando para validar el formato de fecha:

    $ date +%x
    21/04/15
    

Nota: Todo fue probado en Fedora 21 con GNOME 3.14. Otras distribuciones de Linux pueden requerir pasos adicionales o diferentes.

Comente si encuentra algún problema con las instrucciones.

dchrome
fuente
Puedo confirmar que esto funciona en Fedora 22 con Cinnamon. Lo más probable es que también funcione con GNOME.
Dee'Kej
1
Estoy seguro de que si se esfuerzan mucho, podrían hacer que la configuración de entornos locales personalizados sea un poco más difícil aún.
5heikki
Amo a GNOME pero esto es ridículo. Al menos, deje un camino para que los usuarios avanzados establezcan su configuración regional de la manera que deseen. Quiero una configuración regional de EE. UU. Para la mayoría de las cosas, pero mi impresora usa papel A4 ...
static_rtti