Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/exercises/es/Ejercicio19.activity/ejercicio19_solucion.py
blob: f08e8e8ef0d91742dd3884677225344ae0f9639a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
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)