Skip to content

Python ​

Sélecteur pour les applications Python. L'extraction, les catalogues et les formes d'appel se trouvent dans Applications Python. Le guide pas à pas pour une application existante à locale unique est Ajouter l'i18n à une application Python, avec une invite i18n.py et une invite Django / gettext.

Streamlit, FastAPI, Flask, Pyramid, Tkinter, PyQt, PySide et PyWebView appellent l'assistant i18n.py généré (Python 3.10 ou version ultérieure). Django conserve le gettext de Django. Quatre copies exécutables sont fournies dans le dépôt : examples/python-streamlit, examples/python-flask, examples/python-fastapi et examples/python-gettext. Pyramid, Django, Tkinter, Qt et PyWebView ne possèdent pas de répertoire d'exemples distinct.

Quel modèle choisir ​

FrameworkModèle d'initialisationCatalogueExemple
Streamlitui-pythonJSON plat indexé par la chaîne sourcepython-streamlit
FastAPIui-pythonJSON plat indexé par la chaîne sourcepython-fastapi
Flask + Jinja, JSON platui-pythonJSON plat indexé par la chaîne sourcepython-flask
Flask / Jinja gettextui-python-flask.po / .mo sous translations/Utiliser les notes Flask ci-dessous
Pyramidui-python ou ui-python-flaskIdentique à FlaskMême configuration que Flask
Djangoui-python-djangolocale/<lang>/LC_MESSAGES/django.poPas de répertoire d'exemples
GNU gettext existantui-python-gettextJSON plat et .po / .mo, ou gettext uniquementpython-gettext
Tkinterui-pythonJSON plat indexé par la chaîne sourcePas de répertoire d'exemple
PyQt / PySideui-python ou un modèle gettextJSON plat et/ou .poPas de répertoire d'exemples
PyWebView / PyWebKitUn modèle Python pour le shellCatalogues shell, plus marqueurs HTML ou un fichier HTML par localePas de répertoire d'exemples

ui-python, ui-python-gettext et ui-python-flask écrivent i18n.py lorsque ce fichier est manquant. ui-python-django ne le fait pas. Ajoutez --with-readme pour également traduire le README du dépôt : Ajouter l'i18n à votre README et à vos documents Markdown.

Notes sur les frameworks ​

Streamlit ​

streamlit_language_selector() écrit la locale dans l'état de session et la chaîne de requête. Donnez à chaque widget une key fixe. Détails : Locale — Streamlit.

FastAPI ​

Lisez ?lang= ou Accept-Language dans le middleware, appelez set_locale et reset_locale dans finally afin que les requêtes simultanées conservent leur propre locale. Détails : Locale — FastAPI.

Flask et Pyramid ​

L'exemple python-flask utilise du JSON plat. init -t ui-python-flask est la disposition gettext sous translations/ pour une application qui utilise déjà des catalogues de type Flask-Babel. Dans les deux cas, définissez la locale à partir de la requête et injectez _, t, current_locale, ui_languages et direction dans le contexte du modèle. Pyramid utilise le même modèle à portée de requête. Détails : Locale — Flask and Pyramid.

Django ​

Conservez gettext, ngettext et {% blocktrans %}. init -t ui-python-django correspond au répertoire locale/ de Django et au domaine django, et laisse l'exécution de Django en place. Détails : Locale — Django.

gettext existant ​

Laissez _(), gettext() et ngettext() en place. Pointez ui.gettext vers l'arborescence de catalogue actuelle et exécutez extract, puis translate-ui. L'exemple python-gettext est uniquement gettext (flatOutput: false). init -t ui-python-gettext écrit également du JSON plat. Détails : Locale — Existing gettext.

Tkinter, Qt et PyWebView ​

Appelez t() ou _() lors de la création de chaque widget Tkinter, puis reconstruisez le texte visible après set_locale. Les appels PyQt et PySide self.tr("...") sont extraits, et les fichiers Qt .ui contribuent aux éléments <string> sauf si notr="true". Pour PyWebView ou PyWebKit, extrayez le shell Python avec un modèle ci-dessus et extrayez la page HTML avec les marqueurs data-i18n ou avec un document HTML par locale. Détails : Locale — Tkinter, PyQt / PySide et PyWebView.

Publié sous licence MIT.