Internacionalização¶
Novo na versão 1.1.
Complementarmente às traduções fornecidas pelas mensagens geradas pelo Sphinx, algumas barras e botões de navegação, Sphinx provê mecanismos para facilitar a tradução de documentos. Veja as Opções para internacionalização para detalhes na configuração.
Visualização do fluxo de trabalho de traduções no Sphinx. (A figura foi criada por plantuml.)¶
Detalhes da Internacionalização Sphinx¶
gettext [1] é um padrão para internacionalização e localização (acepção sua localidade). Nativamente mapeia mensagens em um programa para uma frase traduzida. Sphinx usa essas facilidades para todos os documentos.
Inicialmente os mantenedores do projeto, coletam todas as palavras ou frases que serão traduzidas (também referidas como mensagens) para torná-las conhecidas para os tradutores. Sphinx extraí isso através da chamado do comando sphinx-build -b gettext
.
Cada simples elemento do (doctree raíz do documento) irá gerar uma simples mensagem a qual resultará em listas que serão igualmente quebradas em diferentes fragmentos, enquanto grandes parágrafos irão permanecer formatados como no documento original. Isso permite atualizações perfeitas dos documentos, enquanto são mantidos os contextos que os tradutores precisam para traduzir livremente os conteúdos. A tarefa do mantenedor é quebrar em parágrafos não muito longos para que isso seja racional, pois não há nenhuma automação para isso.
Após o Sphinx executar MessageCatalogBuilder
será encontrada uma coleção de arquivos .pot
em seu diretório de saida. Essas mensagens são chamadas de catálogos modelo e só contêm mensagens no seu idioma original.
Esses arquivos são enviados para os tradutores que irão transformá-los em arquivos .po
— chamados catálogos de mensagens — contendo um mapeamento das mensagens originais para palavras-frases na língua estrangeira.
O gettext os compila em um formato binário conhecido como binary catalogs msgfmt por motivos de eficiência. Se você tornar esses arquivos detectáveis com o locale_dirs
para o seu language
, o Sphinx
irá buscá-los automaticamente.
Um exemplo: você tem um documento usage.rst
no seu projeto Sphinx
. O construtor gettext colocará suas mensagens em usage.pot
. Imagine que você tenha as traduções para espanhol [2] armazenadas em usage.po
— para que suas construções sejam traduzidas, é necessário seguir estas instruções:
Compilar catálogo de mensagem em um diretório específico, digamos
locale
o qual irá ficar em./locale/es/LC_MESSAGES/usage.mo
em seu diretório fonte (ondees
is the language code for Spanish.)msgfmt "usage.po" -o "locale/es/LC_MESSAGES/usage.mo"
Assinale
locale_dirs
para["locale/"]
.Execute sua montagem (executar sphinx para construir seu documento) desejada.
Para proteger contra erros, um aviso é emitido se as referências cruzadas no parágrafo traduzido não corresponderem às do original. Isso pode ser desativado globalmente usando a variável de configuração suppress_warnings
. Alternativamente, para desativá-lo apenas para uma mensagem, termine a mensagem com #noqa
assim:
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse
risus tortor, luctus id ultrices at. #noqa
(Escreva \#noqa
caso você queira ter “#noqa” literalmente no texto. Isso não se aplica a blocos de código, onde #noqa
é ignorado porque os blocos de código não contêm referências de qualquer maneira. )
Novo na versão 4.5: O mecanismo #noqa
.
Traduzindo com sphinx-intl¶
Guia Rápido¶
sphinx-intl é uma ferramenta útil para trabalhar com o fluxo de tradução do Sphinx
. Esta seção descreve uma maneira fácil de traduzir com sphinx-intl.
Instale sphinx-intl.
$ pip install sphinx-intl
Adicione configurações ao
conf.py
.locale_dirs = ['locale/'] # path is example but recommended. gettext_compact = False # optional.
Este estudo de caso presume que BUILDDIR está definida para
_build
, quelocale_dirs
está definida comolocale/
egettext_compact
está definida comoFalse
(o documentoSphinx
já está configurado como tal).Extrair mensagens traduzíveis em arquivos pot.
$ make gettext
Os arquivos
pot
gerados serão colocados no diretóriobuild/gettext
.Gere arquivos
po
.Nós vamos usar os arquivos
pot
gerados na etapa acima.$ sphinx-intl update -p _build/gettext -l de -l ja
Uma vez completados, os arquivos
po
gerados serão colocados nos diretórios abaixo:./locale/de/LC_MESSAGES/
./locale/ja/LC_MESSAGES/
Traduzir arquivos
po
.Como mencionado acima, eles estão localizados no diretório
./locale/<lang>/LC_MESSAGES
. Um exemplo de um tal arquivo, doSphinx
,builders.po
, é fornecido abaixo.# a5600c3d2e3d48fc8c261ea0284db79b #: ../../builders.rst:4 msgid "Available builders" msgstr "<FILL HERE BY TARGET LANGUAGE>"
Outro caso, msgid possui múltiplas linhas de texto e contém sintaxe reStructuredText:
# 302558364e1d41c69b3277277e34b184 #: ../../builders.rst:9 msgid "" "These are the built-in Sphinx builders. More builders can be added by " ":ref:`extensions <extensions>`." msgstr "" "FILL HERE BY TARGET LANGUAGE FILL HERE BY TARGET LANGUAGE FILL HERE " "BY TARGET LANGUAGE :ref:`EXTENSIONS <extensions>` FILL HERE."
Preste muita atenção para não quebrar a notação reST. Editores de arquivo po ajudam muito nisso.
Construa documento traduzido.
Você precisa de um parâmetro
language
emconf.py
ou também pode especificar o parâmetro na linha de comando.For BSD/GNU make, run:
$ make -e SPHINXOPTS="-D language='de'" html
Para o Windows cmd.exe, execute:
> set SPHINXOPTS=-D language=de > .\make.bat html
Para o PowerShell, execute:
> Set-Item env:SPHINXOPTS "-D language=de" > .\make.bat html
Parabéns! O documento traduzido está no diretório _build/html
.
Novo na versão 1.3: sphinx-build que é invocado pelo comando make
e irá construir arquivos po
em arquivos mo
.
Se você estiver usando 1.2.x ou anterior, invoque o comando sphinx-intl build antes do comando make.
Traduzindo¶
Atualize seus arquivos po com os novos arquivos pot¶
Se um documento for atualizado, é necessário gerar arquivos pot
atualizados e aplicar as diferenças aos arquivos po
traduzidos. Para aplicar as atualizações de um arquivo pot
ao arquivo po
, use o comando sphinx-intl update.
$ sphinx-intl update -p _build/gettext
Usando o Serviço Transifex para time tradutotes¶
Transifex é um dos diversos serviços que permite tradução colaborativa via interface web. Possui diversos comandos Python base que permite que clientes baixem e devolvam traduções
Instale transifex-client.
Utilizar o comando tx para fazer upload de recursos arquivos pot.
$ pip install transifex-client
Ver também
Create your Transifex account and create new project for your document.
Currently, Transifex does not allow for a translation project to have more than one version of the document, so you’d better include a version number in your project name.
Por exemplo:
- ID Projeto:
sphinx-document-test_1_0
- URL Projeto:
https://www.transifex.com/projects/p/sphinx-document-test_1_0/
Crie arquivos de configuração para o comando tx.
Esse processo irá criar
.tx/config
no diretório corrente, bem como um arquivo~/.transifexrc
que inclui informação de auth.$ tx init Creating .tx folder... Transifex instance [https://www.transifex.com]: ... Please enter your transifex username: <transifex-username> Password: <transifex-password> ... Done.
Upload pot files to Transifex service.
Registrar arquivos pot para arquivo
.tx/config
$ cd /your/document/root $ sphinx-intl update-txconfig-resources --pot-dir _build/locale \ --transifex-project-name sphinx-document-test_1_0
e upload arquivos pot:
$ tx push -s Pushing translations for resource sphinx-document-test_1_0.builders: Pushing source file (locale/pot/builders.pot) Resource does not exist. Creating... ... Done.
Forward the translation on Transifex.
Puxe arquivos
PO
traduzidos e gere o HTML traduzido.’Obtenha catálogos traduzidos e crie arquivos
mo
. Por exemplo, para construir arquivosmo
para o alemão (de):$ cd /your/document/root $ tx pull -l de Pulling translations for resource sphinx-document-test_1_0.builders (...) -> de: locale/de/LC_MESSAGES/builders.po ... Done.
Invoque make html (para BSD/GNU make):
$ make -e SPHINXOPTS="-D language='de'" html
Isso é tudo, Pessoal!
Dica
Traduzindo localmente e no Transifex
If you want to push all language’s po files, you can be done by using tx push -t command. Watch out! This operation overwrites translations in Transifex.
Em outras palavras, caso tenha atualizado cada um deles via serviço transifex e arquivos locais po, pode ser necessário muito esforço para integrá-los.
Contribuindo para tradução Referência Sphinx¶
A maneira que recomendamos para novos contribuidores para traduzir o Sphinx é juntar-se a equipe e tradução do seu idioma do Transifex.
Existe uma página de tradução do sphinx para a documentação do Sphinx (master).
Login to Transifex service.
Ir para sphinx translation page`_.
Clique
Request language
e preencha o formulário.Wait acceptance by Transifex sphinx translation maintainers.
(After acceptance) Translate on Transifex.
Detalhes aqui: https://docs.transifex.com/getting-started-1/translators
Notas de Rodapé