Traducir aplicaciones de PyGObject a diferentes idiomas-Parte 5

Continuamos la serie de programación PyGObject con usted y aquí, en esta quinta parte, aprenderemos cómo traducir nuestras aplicaciones PyGObject a diferentes idiomas. Traducir sus aplicaciones es importante si va a publicarlas para el mundo, será más fácil de usar para los usuarios finales porque no todos entienden inglés.

Traducción del lenguaje de la aplicación PyGObject

Cómo funciona el proceso de traducción

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

  1. Extraiga las cadenas traducibles del archivo Python.
  2. Guarde las cadenas en un archivo .pot que es un formato que le permite traducirlo más tarde a otros idiomas.
  3. Empiece a traducir las cadenas.
  4. Exporte las nuevas cadenas traducidas a un archivo .po que se usará automáticamente cuando se cambie el idioma del sistema.
  5. Agregue algunos pequeños cambios programáticos al archivo principal de Python y al archivo .desktop .

¡Y eso es todo! Después de seguir estos pasos, su aplicación estará lista para ser utilizada por usuarios finales de todo el mundo (¡tendrá que traducir su programa a todos los idiomas del mundo!). Suena fácil, ¿no? 🙂

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

  1. https://copy.com/TjyZAaNgeQ6BB7yn

Abra el archivo “ setup.py ” y observe los cambios que hicimos:

Código de traducción Código de traducción # Aquí importamos el módulo de ‘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.python.org/2/distutils/apiref.html de distutils.core import setup # Esos módulos nos ayudarán a crear los archivos de traducción para el programa automáticamente. from subprocess import call from glob import glob from os.path import splitext, split # NO FOTGET REEMPLAZAR ‘myprogram’ CON EL NOMBRE DE SU PROGRAMA EN CADA ARCHIVO DE ESTE PROYECTO. data_files = [(“lib/myprogram”, [“ui.glade”]), # Esto instalará el archivo “ui.glade” en la ruta/usr/lib/myprogram. (“share/applications”, [“ myprogram.desktop “])] # Este código hace todo lo necesario para crear los archivos de traducción, primero buscará todos los archivos .po dentro de la carpeta po, luego definirá la ruta predeterminada para 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 convertirá todos los archivos. po 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.mo” .format (lang ) # Hacer llamada a directorios de locale (“mkdir-p locale//LC_MESSAGES/”. Format (lang), shell = True) # Generar llamada a archivos mo (“msgfmt -o “. Format (po_file, mo_path ), shell = True) locales = map (lambda i: (‘share/’ + i, [i + ‘/myprogram.mo’,]), glob (‘locale/*/LC_MESSAGES’)) # Aquí, el instalador agregue automáticamente los archivos .mo a los archivos de datos para instalarlos más tarde. data_files.extend (locales) setup (name = “ myprogram “, # Nombre del programa. version = “ 1.0 “, # Versión del programa. description = “ Una interfaz web fácil de usar para crear y compartir pastas fácilmente “, # No necesitas ayuda aquí. author =” TecMint “, # Tampoco aquí. author_email = “ [correo electrónico protegido] “, # Tampoco aquí: D url = “ http://example.com “, # Si tiene un sitio web para su programa … Ponlo aquí. license = ‘ GPLv3 ‘, # La licencia del programa. scripts = [‘ myprogram ‘], # Este es el nombre del archivo de script principal 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 adelante, por lo que solo tiene que elegir dónde desea instalar los archivos opcionales que da forma con el script de Python dat a_files = data_files) # Y esto va a instalar el archivo .desktop en la carpeta/usr/share/applications, toda la carpeta se instala automáticamente en la carpeta/usr en su partición raíz, no necesita agregar “/usr/al camino. freestar.config.enabled_slots.push

Abra también el archivo “ myprogram ” y vea los cambios programáticos que hicimos, todos los cambios se explican en los comentarios:

#!/usr/bin/python #-*-coding: utf-8-*-## Reemplaza tu nombre y correo electrónico. # My Name <[email protected]> ## Aquí debe agregar la licencia del archivo, reemplace “MyProgram” con el nombre de su programa. # Licencia: # MyProgram es software libre: puede redistribuirlo y/o modificarlo # según los términos de la Licencia Pública General GNU publicada por # la Free Software Foundation, ya sea la versión 3 de la Licencia, o # (a su elección ) cualquier versión posterior. # # MyProgram se distribuye con la esperanza de que sea útil, # pero SIN NINGUNA GARANTÍA; incluso sin la garantía implícita de # COMERCIABILIDAD o APTITUD PARA UN PROPÓSITO PARTICULAR. Consulte la Licencia pública general # GNU para obtener más detalles. # # Debería haber recibido una copia de la Licencia Pública General GNU # junto con MyProgram. De lo contrario, consulte <http://www.gnu.org/licenses/>. from gi.repository import Gtk import os, gettext, locale ## Este es el cambio programático que necesita agregar al archivo Python, simplemente reemplace “myprogram” con el nombre de su programa. Los módulos “locale” y “gettext” se encargarán del resto de la operación. locale.setlocale (locale.LC_ALL, ”) gettext.bindtextdomain (‘myprogram’, ‘/usr/share/locale’) gettext.textdomain (‘myprogram’) _ = gettext.gettext gettext.install (“myprogram”, “/usr/share/locale “) Class Handler: def openterminal (self, button): ## Cuando el usuario hace clic en el primer botón, se abre la terminal. os.system (“x-terminal-emulator”) def closeprogram (self, button): Gtk.main_quit () # Nada nuevo aquí .. Acabamos de importar el archivo ‘ui.glade’. builder = Gtk.Builder () builder.add_from_file (“/usr/lib/myprogram/ui.glade”) builder.connect_signals (Handler ()) label = builder.get_object (“label1”) # Aquí hay otro pequeño cambio, en lugar de Si configuramos el texto en (“¡Bienvenido a mi programa de prueba!”), debemos agregar un carácter “_” antes para permitir que los scripts responsables del proceso de traducción reconozcan que es una cadena traducible. label.set_text (_ (“¡Bienvenido a mi programa de prueba!”)) button = builder.get_object (“button2”) # Y aquí está lo mismo … Debes hacer esto para todos los textos en tu programa, en otros lugares, ganaron no ser traducido. button.set_label (_ (“Haga clic en mí para abrir la Terminal”)) window = builder.get_object (“window1”) window.connect (“delete-event”, Gtk.main_quit) window.show_all () Gtk.main ( )

Ahora … Empecemos a traducir nuestro programa. Primero cree el archivo .pot (un archivo que contiene todas las cadenas traducibles en el programa) para que pueda comenzar a traducir usando el siguiente comando:

$ cd myprogram $ xgettext–language = Python–keyword = _-o po/myprogram.pot myprogram

Esto creará el archivo “ myprogram.pot ” dentro de la carpeta “ po ” en la carpeta principal del proyecto que contiene el siguiente código:

# ALGUNO TÍTULO DESCRIPTIVO. # Copyright (C) AÑO DEL 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-Version: PACKAGE VERSION n” “Report-Msgid-Bugs-To: n” “Fecha de creación de POT: 2014-12-29 21: 28+ 0200 n “” PO-Fecha de revisión: AÑO-MES-DA HO: MI + ZONA n “” Último traductor: NOMBRE COMPLETO <[email protected]> n “” Equipo de idioma: IDIOMA <[email protected ]> n “” Idioma: n “” Versión MIME: 1.0 n “” Tipo de contenido: texto/plano; juego de caracteres = CHARSET n “” Codificación de transferencia de contenido: 8 bits n “#: myprogram: 48 msgstr “¡Bienvenido a mi programa de prueba!” msgstr “” #: myprogram: 52 msgid “Haga clic en mí para abrir la Terminal” msgstr “”

Ahora para comenzar a traducir las cadenas. Cree un archivo separado para cada idioma al que desee traducir su programa. los códigos de idioma “ ISO-639-1 ” dentro de la carpeta “ po “, por ejemplo, si desea traducir su programa al árabe , cree un archivo llamado “ ar.po ” y copie el contenido del archivo “ myprogram.pot ” en él.

Si desea traduzca su programa al alemán , cree un archivo “ de.po ” y copie el contenido del archivo “ myprogram.pot ” en él. . y, por tanto, debe crear un archivo para cada idioma al que desee traducir su programa.

Ahora, trabajaremos en el archivo “ ar.po “, copie el contenido del archivo “ myprogram.pot ” 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 DEL TITULAR DE LOS DERECHOS DE AUTOR DEL PAQUETE : reemplácelo con el año en que creó el proyecto.
  3. PAQUETE : reemplácelo con el nombre del paquete.
  4. PRIMER AUTOR <[protegido por correo electrónico]>, AÑO : reemplácelo con su nombre real, correo electrónico y el año en que tradujo el archivo.
  5. VERSIÓN DEL PAQUETE : reemplácelo con la versión del paquete del archivo debian/control.
  6. YEAR-MO-DA HO: MI + ZONE : no necesita explicación, puede cambiarlo a cualquier fecha que desee.
  7. NOMBRE COMPLETO <[email protected]> : reemplácelo también con 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 inserte el código ISO-639-1 para el idioma al que está traduciendo, por ejemplo, “ar”, “fr”, “de” … etc, puede encuentre una lista completa aquí.
  10. CHARSET : este paso es importante, reemplace esta cadena con “UTF-8” (sin las comillas) que es compatible con la mayoría de los idiomas.

¡Ahora empieza a traducir! Agregue su traducción para cada cadena después de las comillas en “ msgstr “. Guarda el archivo y cierra. Un buen archivo de traducción para 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 “” Fecha de creación del POT: 29/12/2014 21: 28 + 0200 n “” Fecha-de-revisión del PO: 29/12/2014 22: 28 + 0200 n “” Último traductor: M.Hanny Sabbagh n “” Equipo de idioma: Árabe <[correo electrónico protegido] < n “” Idioma: ar n “” Versión MIME: 1.0 n “” Tipo de contenido: texto/plano; conjunto de caracteres = UTF-8 n “” Codificación de transferencia de contenido: 8 bits n “#: myprogram: 48 msgid” ¡Bienvenido a mi programa de prueba! “msgstr” أهلًا بك إلى برنامجي الاختباري! “#: myprogram: 52 msgid” Haz clic en mí para abrir la Terminal “msgstr” اضغط عليّ لفتح الطرفية

No hay nada más que hacer, simplemente empaquete 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_all.deb

Y cambia el lan del sistema calibre usando el programa “ Soporte de idiomas ” o usando cualquier otro programa al árabe (o el idioma al que ha traducido su archivo):

 Soporte de idiomas Compatibilidad con idiomas

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

Traducido al á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é opinas de la serie? Lo encontraste util? ¿Pudiste crear tu primera aplicación siguiendo esta serie? ¡Comparta sus pensamientos!