Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/exercises/es/Ejercicio19.activity/ejercicio19_solucion.py
diff options
context:
space:
mode:
Diffstat (limited to 'exercises/es/Ejercicio19.activity/ejercicio19_solucion.py')
-rw-r--r--exercises/es/Ejercicio19.activity/ejercicio19_solucion.py114
1 files changed, 114 insertions, 0 deletions
diff --git a/exercises/es/Ejercicio19.activity/ejercicio19_solucion.py b/exercises/es/Ejercicio19.activity/ejercicio19_solucion.py
new file mode 100644
index 0000000..f08e8e8
--- /dev/null
+++ b/exercises/es/Ejercicio19.activity/ejercicio19_solucion.py
@@ -0,0 +1,114 @@
+# coding=utf-8
+
+"""Añadir soporte de internacionalización de una actividad de Sugar.
+
+A continuación se muestra una actividad de Sugar simple que muestra una cadena
+diferente cada vez que se pulsa el botón. Usted debe modificarlo para añadir
+soporte de internacionalización para que su interfaz de usuario se puede ver en
+un idioma diferente.
+
+Todos los demás archivos de la actividad (activity.info, setup.py, etc.) se han
+previsto ya, debe modificar el código de este archivo para añadir soporte de
+internacionalización, generar un archivo POT, y luego traducirlo al español.
+
+Tenga en cuenta que las cadenas originales en todas las actividades siempre
+están en Inglés, por convención.
+
+ 1. Agregue una instrucción ‘import’ para el módulo gettext:
+ from gettext import gettext as _
+ 2. Marcar todos las cadenas pertinentes en el programa como traducible usando
+ la función _().
+ 3. Generar un archivo POT mediante la ejecución de ‘./setup.py genpot’ en un
+ terminal (después de cambiar a este directorio).
+ 4. Copie el archivo generado po/Ejercicio19.pot a po/es.po.
+ 5. De cualquier es.po abierto en un editor de texto, o utilizar una
+ herramienta de traducción como gtranslator y traducir las cadenas de
+ español.
+ 6. Ejecutar ‘./setup.py dev’ ​​para añadir la actividad de Sugar en su
+ ordenador.
+ 7. Ejecutar ‘./setup.py build’ para compilar los archivos en archivos legibles
+ por máquina en el directorio ‘locale’.
+ 8. Ejecutar ‘LANG=es sugar-emulator’ para ejecutar el emulador de Sugar en
+ Español y probar la nueva traducción. Toda la actividad debe aparecer en
+ español.
+
+Nota: No es posible utilizar Pootle para este ejercicio porque es un servicio
+en línea y requeriría el código del ejercicio para publicar en Internet.
+"""
+
+from gi.repository import Gtk
+from sugar3.activity import activity, widgets
+from sugar3.graphics.toolbarbox import ToolbarBox
+from gettext import gettext as _
+
+
+class Ejercicio19Actividad(activity.Activity):
+ """Una ventana simple que muestra una etiqueta y un botón."""
+ def __init__(self, handle):
+ super(Ejercicio19Actividad, self).__init__(handle)
+
+ # Cree la caja de herramientas de la actividad normal.
+ toolbar_box = ToolbarBox()
+ self.set_toolbar_box(toolbar_box)
+ toolbar_box.show()
+
+ main_toolbar = toolbar_box.toolbar
+
+ activity_toolbar_button = widgets.ActivityToolbarButton(self)
+ main_toolbar.insert(activity_toolbar_button, 0)
+ activity_toolbar_button.show()
+
+ stop_button = widgets.StopButton(self)
+ stop_button.show()
+ main_toolbar.insert(stop_button, -1)
+
+ # Agregar una caja de la ventana.
+ box = Gtk.Box()
+ box.set_orientation(Gtk.Orientation.VERTICAL)
+ box.set_spacing(8)
+ box.set_border_width(8)
+ box.show()
+ self.set_canvas(box)
+
+ # Establecer una lista de cadenas de texto que se mostrará en la
+ # etiqueta.
+ self._strings = (
+ _('Cadena inicial.'),
+ _('Segunda cadena.'),
+ _('Objeto ‘handle’ es ‘%s’.') % handle,
+ _('Otra cadena.'),
+ )
+ self._next_string = 0
+
+ # Creación y configuración de la etiqueta y el botón.
+ label = Gtk.Label()
+ label.show()
+ box.pack_start(label, True, True, 0)
+
+ button = Gtk.Button(_('Cambiar Etiqueta'))
+ button.show()
+ box.pack_start(button, False, True, 0)
+
+ # Conecte el callback para el botón.
+ button.connect('clicked', self.__button_clicked_cb)
+
+ # Guarde la etiqueta como una variable de objeto que se pueda acceder
+ # desde el callback para el botón y, a continuación, establecer el
+ # texto inicial de la etiqueta.
+ self._label = label
+ self.__rotate_label_text()
+
+ def __button_clicked_cb(self, button):
+ """Callback para cambiar el texto de la etiqueta cuando se hace clic en
+ el botón."""
+ self.__rotate_label_text()
+
+ def __rotate_label_text(self):
+ """Cambie la etiqueta para mostrar la siguiente cadena en la rotación.
+
+ La operación de módulo se utiliza para envolver alrededor de
+ self._next_string cuando se alcanza el índice final de la matriz
+ self._strings.
+ """
+ self._label.set_text(self._strings[self._next_string])
+ self._next_string = (self._next_string + 1) % len(self._strings)