JupyterLab i18next: ¿Cómo extraer cadenas traducibles de los cuadernos de JupyterLab?
Me gustaría ofrecer mis cuadernos de JupyterLab en varios idiomas (de-de, en-us).
Para hacerlo, marqué algunas cadenas.
import gettext
domain = 'my_application_name'
localedir = '.'
translate = gettext.translation(domain, localedir, fallback=True)
_ = translate.gettext # using _ as name for the translation function is kind of standard in python
# do not confuse with private markers or underscore library
# https://github.com/serkanyersen/underscore.py
print(_('Hello World'))
print(_('another translation key'))
Luego descargué xgettext.exe
para Windows desde https://github.com/mlocati/gettext-iconv-windows/releases/download/v0.21-v1.16/gettext0.21-iconv1.16-static-64.zip
e intenté extraer las cadenas con el siguiente comando de consola:
xgettext.exe my_notebook.ipynb
Obtuve la advertencia:
xgettext.exe: warning: file 'my_notebook.ipynb' extension 'ipynb' is unknown; will try C
y no se generó ningún archivo de salida.
==> ¿Cuál es la forma recomendada para extraer cadenas traducibles de los cuadernos de JupyterLab?
Preferiría una solución en la que no se requiera un binario adicional (como xgettext.exe) en Windows.
¿JupyterLab proporciona alguna característica/extensión de traducción (no para la interfaz de usuario, sino para los cuadernos)?
Como posible solución alternativa, el cuaderno podría convertirse primero en un archivo de Python con nbconvert y luego pasarse a xgettext.exe. Sin embargo, eso parece ser demasiado complicado. Debería haber una solución más elegante.
(La extracción de cadenas traducibles de archivos de Python sí funciona en Windows, por ejemplo:
xgettext.exe my_python_file.py
)
El flujo de trabajo aproximado para las traducciones parece ser:
- Marcar todas las cadenas que deben ser traducidas
- Generar un archivo de plantilla de traducción a partir de las cadenas (“lista maestra” o archivo Portable Object Template – POT)
- Traducir el archivo de plantilla de traducción
- Aplicar el archivo de traducción
Relacionado:
https://github.com/jupyterlab/jupyterlab/issues/11753
https://docs.python.org/3/library/i18n.html
https://www.mattlayman.com/blog/2015/i18n/
davy.ai
Actualmente, no hay una solución incorporada en JupyterLab para la internacionalización de cuadernos. Sin embargo, existen algunas extensiones de terceros disponibles que agregan esta funcionalidad. Una de estas extensiones es jupyterlab-i18n, que te permite crear, gestionar y aplicar traducciones a tus cuadernos desde dentro de JupyterLab.
Para usar jupyterlab-i18n, puedes seguir los siguientes pasos:
jupyterlab-i18n
usandopip
:_()
como se muestra en el ejemplo en la pregunta.Genera la plantilla del archivo de traducción (archivo
.pot
) ejecutando el siguiente comando:Esto creará un archivo
.pot
en el directorio./translations
. Este archivo contiene una lista de todas las cadenas traducibles en tu cuaderno.Traduce el archivo
.pot
a los idiomas deseados utilizando una herramienta como Poedit o Lokalize.Aplica la traducción a tu cuaderno ejecutando el siguiente comando:
Esto creará una versión traducida de tu cuaderno (
my_notebook_de_DE.ipynb
) en el directorio./translations
, con todas las cadenas traducidas reemplazadas.Ten en cuenta que el comando
jupyter lab babel
utiliza la biblioteca Babel internamente para extraer, gestionar y aplicar traducciones a tus cuadernos. Es posible que necesites instalar la biblioteca Babel por separado si aún no está instalada.