Idiomas y diálogos
Idiomas
Sección titulada «Idiomas»pyzed.i18n guarda un catálogo de textos por idioma. Las vistas buscan los textos con
pz.t, así que cambiar el idioma desde un handler vuelve a dibujar toda la app en el nuevo.
import pyzed as pzfrom pyzed import i18n
i18n.add("en", {"greeting": "Hello, {name}!", "files": {"one": "{count} file", "other": "{count} files"}})i18n.add("es", {"greeting": "¡Hola, {name}!", "files": {"one": "{count} archivo", "other": "{count} archivos"}})i18n.set_language(i18n.system_language()) # o "es", "pt_BR"...
class Hola(pz.App): def view(self): return pz.column([ pz.text(pz.t("greeting", name="Kev")), pz.text(pz.t("files", count=3)), pz.button("English", on_press=lambda: i18n.set_language("en")), ])- Los marcadores como
{name}se rellenan con los argumentos por nombre. - Un texto con formas
one/other(y opcionalmentezero) es un plural;count=elige la forma. - Las tablas anidadas se vuelven claves con puntos:
{"menu": {"open": "Abrir"}}espz.t("menu.open"). - Si falta un texto se prueba de
"es_AR"a"es", luego el idioma de respaldo ("en", veri18n.set_fallback) y por último se devuelve la clave.
Los catálogos pueden estar en archivos, uno por idioma, junto a tu app:
locales/├── en.json {"greeting": "Hello, {name}!"}└── es.toml greeting = "¡Hola, {name}!"i18n.load("locales") # ["en", "es"]Los componentes de Pyzed (los diálogos de abajo, el menú del dock) también se traducen. Inglés
y español vienen incluidos; sus claves empiezan por pyzed. (pyzed.ok, pyzed.cancel…),
así que i18n.add("fr", {"pyzed": {"ok": "OK", "cancel": "Annuler"}}) añade francés.
Diálogos
Sección titulada «Diálogos»pyzed.ui trae diálogos listos. Guarda en tu estado cuál está abierto y envuelve la vista con
ui.dialog_layer, que oscurece la ventana y centra el diálogo:

from pyzed import ui
class Archivos(pz.App): preguntando = False
def eliminar(self): ... self.preguntando = False
def view(self): dialogo = None if self.preguntando: dialogo = ui.confirm("¿Eliminar 3 archivos?", self.eliminar, lambda: setattr(self, "preguntando", False), danger=True) return ui.dialog_layer(self.vista_principal(), dialogo, on_dismiss=lambda: setattr(self, "preguntando", False))| Diálogo | Qué hace |
|---|---|
ui.alert(mensaje, on_close, kind=) |
Un mensaje con un botón Aceptar; kind añade un icono de info, éxito, aviso o error. |
ui.confirm(mensaje, on_confirm, on_cancel, danger=) |
Una pregunta de sí o no; danger=True hace el botón un Eliminar rojo. |
ui.prompt(titulo, valor, on_input, on_submit, on_cancel) |
Pide una línea de texto (Enter acepta). |
ui.choice(mensaje, [(texto, on_press), ...], on_cancel) |
Tus propios botones; el último es el principal. |
ui.unsaved_changes(nombre, on_save, on_discard, on_cancel) |
«¿Guardar los cambios antes de cerrar?» |
Para cualquier otra cosa, ui.modal(contenido, title=, footer=[...]) es la misma superficie
con tu propio contenido. Ver examples/dialogs.py.