Python
Seletor para aplicações Python. A extração, os catálogos e os formatos de chamada estão em Aplicações Python. O passo a passo para uma aplicação existente de localidade única está em Adicionar i18n a uma aplicação Python, com um prompt do i18n.py e um prompt do Django / gettext.
Streamlit, FastAPI, Flask, Pyramid, Tkinter, PyQt, PySide e PyWebView chamam o auxiliar i18n.py gerado (Python 3.10 ou mais recente). O Django mantém o gettext do Django. Quatro cópias executáveis são fornecidas no repositório: examples/python-streamlit, examples/python-flask, examples/python-fastapi e examples/python-gettext. Pyramid, Django, Tkinter, Qt e PyWebView não possuem um diretório de exemplo separado.
Qual modelo
| Framework | Template de inicialização | Catálogo | Exemplo |
|---|---|---|---|
| Streamlit | ui-python | JSON plano indexado pela string de origem | python-streamlit |
| FastAPI | ui-python | JSON plano indexado pela string de origem | python-fastapi |
| Flask + Jinja, JSON plano | ui-python | JSON plano indexado pela string de origem | python-flask |
| Flask / Jinja gettext | ui-python-flask | .po / .mo em translations/ | Use as notas do Flask abaixo |
| Pyramid | ui-python ou ui-python-flask | O mesmo que o Flask | A mesma configuração do Flask |
| Django | ui-python-django | locale/<lang>/LC_MESSAGES/django.po | Sem diretório de exemplo |
| GNU gettext existente | ui-python-gettext | JSON simples e .po / .mo, ou apenas gettext | python-gettext |
| Tkinter | ui-python | JSON plano indexado pela string de origem | Nenhum diretório de exemplo |
| PyQt / PySide | ui-python ou um modelo gettext | JSON simples e/ou .po | Sem diretório de exemplo |
| PyWebView / PyWebKit | Um modelo Python para o shell | Catálogos de shell, além de marcadores HTML ou um arquivo HTML por localidade | Sem diretório de exemplo |
ui-python, ui-python-gettext e ui-python-flask gravam i18n.py quando esse arquivo não existe. ui-python-django não. Adicione --with-readme para traduzir também o README do repositório: Adicionar i18n ao seu README e aos seus documentos Markdown.
Notas sobre os frameworks
Streamlit
streamlit_language_selector() grava a localidade no estado da sessão e na string de consulta. Dê a cada widget uma key fixa. Detalhes: Locale — Streamlit.
FastAPI
Leia ?lang= ou Accept-Language no middleware, chame set_locale e reset_locale em finally para que solicitações simultâneas mantenham sua própria localidade. Detalhes: Locale — FastAPI.
Flask e Pyramid
O exemplo python-flask usa JSON simples. init -t ui-python-flask é o layout gettext em translations/ para um aplicativo que já usa catálogos no estilo Flask-Babel. De qualquer forma, defina a localidade a partir da requisição e injete _, t, current_locale, ui_languages e direction no contexto do template. O Pyramid usa o mesmo padrão de escopo de requisição. Detalhes: Locale — Flask and Pyramid.
Django
Mantenha gettext, ngettext e {% blocktrans %}. init -t ui-python-django corresponde ao diretório locale/ do Django e ao domínio django, e mantém o runtime do Django no lugar. Detalhes: Locale — Django.
gettext existente
Deixe _(), gettext() e ngettext() no lugar. Aponte ui.gettext para a árvore de catálogo atual e execute extract, depois translate-ui. O exemplo python-gettext é apenas gettext (flatOutput: false). init -t ui-python-gettext também grava JSON simples. Detalhes: Locale — Existing gettext.
Tkinter, Qt e PyWebView
Chame t() ou _() ao criar cada widget Tkinter, depois reconstrua o texto visível após set_locale. As chamadas self.tr("...") do PyQt e PySide são extraídas, e os arquivos .ui do Qt contribuem com elementos <string>, a menos que notr="true". Para PyWebView ou PyWebKit, extraia o shell Python com um template acima e extraia a página HTML com marcadores data-i18n ou com um documento HTML por localidade. Detalhes: Locale — Tkinter, PyQt / PySide e PyWebView.