2 votos

Hacer que la aplicación detecte automáticamente el idioma del sistema

  1. ¿Qué debe hacer una aplicación desarrollada bajo un sistema Linux como Ubuntu para detectar automáticamente el idioma del sistema? Hay aplicaciones, como Liferea, que cambian automáticamente su idioma para adaptarse al del sistema, sin alterar ninguna preferencia del propio programa: enter image description here ¿Debería ser éste el comportamiento "por defecto" de todos los programas?

  2. ¿Debería haber una opción en el programa para que el usuario pueda elegir el idioma a pesar de todo?

  3. ¿Todas estas traducciones vienen junto con el propio programa? ¿Y si el usuario ha establecido un idioma del sistema que no está disponible en las traducciones del programa?

  4. ¿Esto es específico de Ubuntu o de la mayoría de los Linux-distros?

2voto

Ian B. Puntos 2791

Sé que el desarrollo de aplicaciones con Quickly y Launchpad admiten traducciones para hacer esto. No soy un experto, así que revisa estos enlaces además de mi respuesta:

http://www.gnu.org/software/gettext/

https://help.launchpad.net/Translations

Mi aplicación importa el módulo gettext que me permite marcar las cadenas que se mostrarán al usuario en el programa. Cuando mi programa se envía a Launchpad a través de Quickly, Launchpad está configurado para escanear automáticamente el código fuente y generar archivos de plantilla de traducción especiales para las cadenas marcadas. Los usuarios de Kind Launchpad (o el desarrollador), pueden entonces utilizar la plantilla para generar traducciones para cada cadena e idioma que deseen. Estos archivos de traducción pueden ser sincronizados con su rama de código fuente y fusionados antes de su publicación. En tiempo de ejecución, el módulo gettext reemplaza las cadenas marcadas con la traducción apropiada basada en la configuración regional de su sistema.

Para resumir, he aquí una lista del proceso:

  • importar gettext en su programa
  • Marcar las cadenas que deben ser traducidas
  • Configurar las traducciones en Launchpad
  • Traducir las plantillas y sincronizarlas con la fuente

Aquí está la cabecera de mi programa donde importo gettext a través de locale (¡nótese que Quickly añade todo esto por mí! locale y bindtextdomain se añaden porque se pone en /opt/extras.ubuntu.com creo):

import locale
from locale import gettext as _
locale.bindtextdomain('drawers', '/opt/extras.ubuntu.com/drawers/share/locale')
locale.textdomain('drawers')

Ahora sólo marco el texto a traducir con _("text to be translated") a lo largo de mi programa.

0voto

David Planella Puntos 9529

En el futuro, aunque estén relacionadas, sugeriría abrir preguntas separadas para cada una. En cualquier caso, intentaré responderlas:

¿Qué debe hacer una aplicación desarrollada en un sistema Linux como Ubuntu para detectar automáticamente el idioma del sistema?

Simplemente hay que inicializar gettext en su aplicación. Gettext es la tecnología estándar de internacionalización y localización que utilizan Ubuntu y la gran mayoría de otras distros basadas en Linux (si consideramos a Android como una distro, entonces sería la única excepción).

En el caso más básico, y utilizando Python

import gettext
from gettext import gettext as _
locale.bindtextdomain('yourapp', '/usr/share/locale')
locale.textdomain('yourapp')

Notas:

  • En Python, para soportar /opt tendrá que utilizar el locale en lugar de gettext (a efectos prácticos son equivalentes)
  • Hay enlaces de gettext para casi cualquier lenguaje de programación, no sólo para Python.

¿Debería ser éste el comportamiento "por defecto" de todos los programas?

Sí.

¿Debería haber una opción en el programa para que el usuario pueda elegir el idioma a pesar de todo?

No. Si quieres tener esa opción, estás por tu cuenta y tendrás que implementarla tú mismo. La convención es que sólo hay un idioma por usuario y se cambia en un solo lugar, afectando a todas las aplicaciones del sistema.

¿Todas estas traducciones vienen junto con el propio programa?

Sí, se envían junto con la aplicación como binarios .mo archivos, uno por cada idioma traducido.

¿Qué pasa si el usuario ha establecido un idioma del sistema que no está disponible en las traducciones del programa?

Entonces, el valor por defecto de gettext es utilizar el inglés como recurso.

¿Esto es específico de Ubuntu o de la mayoría de los Linux-distros?

Este es el comportamiento estándar de las distribuciones de Linux.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: