Traducir aplicaciones de pygobject a diferentes idiomas - Parte 5

Traducir aplicaciones de pygobject a diferentes idiomas - Parte 5

Continuamos la serie de programación de Pygobject contigo y aquí en este Quinto Parte, aprenderemos a traducir nuestras aplicaciones de pygobject a diferentes idiomas. Traducir sus aplicaciones es importante si va a publicarlo para el mundo, será más fácil de usar para los usuarios finales porque no todo el mundo entiende el inglés.

Traducir el lenguaje de aplicación de Pygobject

Cómo funciona el proceso de traducción

Podemos resumir los pasos de traducir cualquier programa en el escritorio de Linux usando estos pasos:

  1. Extraiga las cadenas traducibles del archivo de Python.
  2. Guardar las cuerdas en un .maceta Archivo que es formato que le permite traducirlo más tarde a otros idiomas.
  3. Empiece a traducir las cuerdas.
  4. Exportar las nuevas cuerdas traducidas a un .correos Archivo que se utilizará automáticamente cuando se cambie el lenguaje del sistema.
  5. Agregue algunos pequeños cambios programáticos al archivo Python principal y al .escritorio archivo.

Y eso es! Después de hacer estos pasos, su aplicación estará lista para su uso para usuarios finales de todo el mundo (aunque ... debe traducir su programa a todos los idiomas de todo el mundo !), Suena fácil, ¿no?? :-)

Primero, para ahorrar algo de tiempo, descargue los archivos del proyecto desde el siguiente enlace y extraiga el archivo en su directorio de inicio.

  1. https: // copia.com/tjyzaangeq6bb7yn

Abre el "configuración.py"Archivo y observe los cambios que hicimos:

Código de traducción
# Aquí importamos el módulo 'Configuración' que nos permite instalar scripts de Python en el sistema local además de realizar algunas otras tareas, puede encontrar la documentación aquí: https: // docs.pitón.org/2/Distutils/Apiref.html de los distutils.Core Import Configuración # Esos módulos nos ayudarán a crear los archivos de traducción para el programa automáticamente. de la llamada de importación de subprocesos desde el globo de importación del sistema operativo del sistema operativo.Path Import Splitext, Split # No lo haga para reemplazar 'myProgram' con el nombre de su programa en cada archivo de este proyecto. data_files = [("lib/myprogram", ["ui.glade "]), # esto va a instalar la" ui ".Archivo Glade "en la ruta/usr/lib/myprogram. ("Compartir/aplicaciones", ["mi programa.escritorio"])] # Este código hace todo lo necesario para crear los archivos de traducción, primero buscará todo el .archivos PO dentro de la carpeta PO, luego definirá la ruta predeterminada para dónde instalar los archivos de traducción (.Mo) En el sistema local, luego creará el directorio en el sistema local para los archivos de traducción de nuestro programa y finalmente va a convertir todo el .PO archivos en .archivos MO usando el comando "msgfmt". po_files = Glob ("Po/*.po ") para po_file en po_files: lang = Splitext (Split (Po_file) [1]) [0] Mo_Path =" Locale//LC_Messages/MyProgram.mes".Formato (lang) # Hacer directores locales llamada ("mkdir -p loce//lc_messages/".format (lang), shell = true) # Generar archivos MO Llame ("msgfmt  -o ".formato (po_file, mo_path), shell = true) locales = map (lambda i: ('share/'+i, [i+'/myprogram.mo ',]), globa (' locale/*/lc_messages ')) # Aquí, el instalador agregará automáticamente el .MO archivos a los archivos de datos para instalarlos más tarde. archivos de información.Extender (locales) Configuración (name = "mi programa", # Nombre del programa. versión = "1.0", # Versión del programa. Descripción = "Una interfaz web fácil de usar para crear y compartir pastas fácilmente", # No necesitas ayuda aquí. autor = "Tecmenta", # Ni aquí. autor_email = "[correo electrónico protegido]",# Ni aquí: D url ="http: // ejemplo.comunicarse", # Si tienes un sitio web para tu programa ... Ponlo aquí. licencia = 'GPLV3', # La licencia del programa. scripts = ['mi programa'], # Este es el nombre del archivo principal de script de Python, en nuestro caso es "myprogram", es el archivo que agregamos en la carpeta "myprogram". # Aquí puede elegir dónde desea instalar sus archivos en el sistema local, el archivo "myprogram" se instalará automáticamente en su lugar correcto más tarde, por lo que solo debe elegir dónde desea instalar los archivos opcionales que usted forma con el script python data_files = data_files) # y esto va a instalar el .Archivo de escritorio en la carpeta/usr/share/aplicaciones, toda la carpeta se instala automáticamente en la carpeta/usr en su partición raíz, no necesita agregar "/usr/a la ruta. 

También abra el "mi programa"Archivo y ver los cambios programáticos que hicimos, todos los cambios se explican en los comentarios:

#!/usr/bin/python #-*-codificación: UTF-8-*-## Reemplace su nombre y correo electrónico. # Mi nombre <[email protected]> ## Aquí debe agregar la licencia del archivo, reemplazar "myprogram" con el nombre de su programa. # Licencia: # myProgram es software gratuito: puede redistribuirlo y/o modificarlo # bajo los términos de la Licencia Pública General de GNU publicada por # The Free Software Foundation, ya sea la versión 3 de la licencia o # (a su opción ) Cualquier versión posterior. # # MyProgram se distribuye con la esperanza de que sea útil, # pero sin ninguna garantía; sin siquiera la garantía implícita de # comerciabilidad o aptitud para un propósito particular. Consulte la licencia pública general # GNU para más detalles. # # Debería haber recibido una copia del # de la Licencia Pública General de GNU junto con MyProgram. Si no, ver . de GI.Repositorio Import GTK Import OS, GetText, locale ## Este es el cambio programático que debe agregar al archivo Python, simplemente reemplace "myProgram" con el nombre de su programa. Los módulos "locales" y "getText" se encargarán del resto de la operación. lugar.SetLocale (local.Lc_all, ") getText.bindTextDomain ('myprogram', '/usr/share/locale') getText.textdomain ('myprogram') _ = getText.getText getText.install ("myprogram", "/usr/share/locale") controlador de clases: def operenterminal (self, botón): ## Cuando el usuario hace clic en el primer botón, se abrirá el terminal. sistema operativo.Sistema ("X-terminal-emulador") DEF Closeprogram (self, botón): GTK.main_quit () # nada nuevo aquí ... acabamos de importar la ui '.archivo de glade. constructor = gtk.Constructor () constructor.add_from_file ("/usr/lib/myprogram/ui.glade ") constructor.Connect_signals (handler ()) etiqueta = builder.get_object ("etiqueta1") # Aquí hay otro pequeño cambio, en lugar de configurar el texto en ("Bienvenido a mi programa de prueba!") Debemos agregar un char" _ "ante él para permitir que los scripts responsables sobre el proceso de traducción reconozcan que es una cadena traducible. etiqueta.set_text (_ ("Bienvenido a mi programa de prueba !")) Button = Builder.get_object ("Button2") # y aquí está lo mismo ... Debe hacer esto para todos los textos de su programa, en otro lugar, no se traducen. botón.set_label (_ ("Haga clic en mí para abrir el terminal")) Window = Builder.get_object ("Window1") Ventana.Connect ("Eliminar el evento", GTK.Main_Quit) Ventana.show_all () gtk.principal() 

Ahora ... comencemos a traducir nuestro programa. Primero cree el .maceta Archivo (un archivo que contiene todas las cadenas traducibles en el programa) para que usted
puede comenzar a traducir usando el siguiente comando:

$ CD myprogram $ xgettext --language = python --keyword = _ -o po/myprogram.Pot myprogram 

Esto va a crear el "mi programa.maceta"Archivo dentro del"correos"Carpeta en la carpeta del proyecto principal que contiene el siguiente código:

# Algún título descriptivo. # Copyright (c) año El titular de los derechos de autor del paquete # Este archivo se distribuye bajo la misma licencia que el paquete del paquete. # PRIMER AUTOR <[email protected]>, AÑO. # #, fuzzy msgid "" msgstr "" "Project-ID-Iversion: Versión de paquete \ n" "Report-MSGID-BUGS-TO: \ N" "Cedato de creación de pot: 2014-12-29 21: 28++ 0200 \ n "" PO-revision-cita: anual-mo-da ho: mi+zona \ n "" Último traductor: nombre completo <[email protected]>\ n "" Equipo del idioma: idioma <[email protected]>\ n "" lenguaje: \ n "" Versión mime: 1.0 \ n "" Tipo de contenido: texto/simple; charset = charset \ n "" Content-transfer-coding: 8bit \ n " #: myprogram: 48 msgid" Bienvenido a mi programa de prueba !"msgstr" " #: myprogram: 52 msgid" Haga clic en mí para abrir el terminal "msgstr" " 

Ahora para comenzar a traducir las cadenas ... cree un archivo separado para cada idioma que desee traducir su programa al usar el "ISO-639-1"Lengues códigos dentro del"correos"Carpeta, por ejemplo, si desea traducir su programa a Arábica, Crea un archivo llamado "Arkansas.correos"Y copie el contenido del"mi programa.maceta"Archivo.

Si quieres traducir tu programa a Alemán, crear un "Delaware.correos"Archivo y copie el contenido del"mi programa.maceta"Archivo ... Y así, debe crear un archivo para cada idioma que desee traducir su programa a.

Ahora trabajaremos en el "Arkansas.correos"Archivo, copie el contenido del"mi programa.maceta"Archivo y colóquelo dentro de ese archivo y edite lo siguiente:

  1. Algún título descriptivo: Puede ingresar el título de su proyecto aquí si lo desea.
  2. Año el titular de los derechos de autor del paquete: Reemplácelo con el año en que ha creado el proyecto.
  3. PAQUETE: reemplácelo con el nombre del paquete.
  4. PRIMER AUTOR <[email protected]>, AÑO: Reemplace esto con su nombre real, correo electrónico y el año en que tradujo el archivo.
  5. Versión de paquete: Reemplácelo con la versión del paquete desde el archivo de Debian/Control.
  6. Año-mo-da ho: MI+Zone: no necesita explicación, puede cambiarlo a cualquier fecha que desee.
  7. NOMBRE COMPLETO <[email protected]>: también reemplácelo su nombre y correo electrónico.
  8. Equipo de idioma: Reemplácelo con el nombre del idioma al que está traduciendo, por ejemplo "árabe" o "francés".
  9. Idioma: Aquí, debe insertar el código ISO-639-1 para el idioma al que está traduciendo, por ejemplo "AR", "FR", "DE" ... etc., puede encontrar una lista completa aquí.
  10. Charlatán: Este paso es importante, reemplace esta cadena con "UTF-8" (sin las citas) que admite la mayoría de los idiomas.

Ahora empieza a traducir! Agregue su traducción para cada cadena después de las cotizaciones en "msgstr". Guarda el archivo y cierra. Un buen archivo de traducción para el
El idioma árabe como ejemplo debería verse así:

# Mi programa # Copyright (c) 2014 # Este archivo se distribuye bajo la misma licencia que el paquete myprogram. # Hanny Helal <[email protected]<, 2014. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: 1.0 \ n"" Report-msgid-bugs-to: \ n "" Pot-Creation-Date: 2014-12-29 21: 28+0200\ n "" Po-revision-Feat: 2014-12-29 22: 28+0200\ n "" último traductor: METRO.Hanny Sabbagh \ n "" Language-Team: Arábica <[email protected]<\ n "" Lenguaje: Arkansas\n "" Versión mime: 1.0\ n "" Tipo de contenido: texto/simple; Charset = UTF-8\ n "" Contenido de transferencia de contenido: 8 bits\ n " #: myprogram: 48 msgid"Bienvenido a mi programa de prueba !"msgstr"أهلًا ofrice!" #: myprogram: 52 msgid"Haga clic en mí para abrir la terminal"msgstr"اضغط عليّ لفتح الطرفية" 

No hay nada más que hacer, solo empaqueta el programa usando el siguiente comando:

$ DEBUILD -US -UC 

Ahora intente instalar el nuevo paquete creado usando el siguiente comando.

$ sudo dpkg -i myProgram_1.0_ de todos.debutante 

Y cambiar el lenguaje del sistema usando el "Ayuda de idioma"Programa o uso de cualquier otro programa para Arábica (o el idioma al que ha traducido su archivo):

Ayuda de idioma

Después de seleccionar, su programa se traducirá al idioma árabe.

Traducido al árabe

Aquí termina nuestra serie sobre la programación de Pygobject para el escritorio de Linux, por supuesto, hay muchas otras cosas que puede aprender de la documentación oficial y la referencia de la API de Python GI ..

¿Qué piensas de la serie?? Lo encontraste util? ¿Pudiste crear tu primera aplicación siguiendo esta serie?? Compártanos tus pensamientos!