diff options
Diffstat (limited to 'exercises/es/Ejercicio19.activity/ejercicio19_solucion.py')
-rw-r--r-- | exercises/es/Ejercicio19.activity/ejercicio19_solucion.py | 114 |
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) |