msgfmt
( parte das ferramentas gettext acabará por criá-las.
Então, para responder a última parte da pergunta, sim, os arquivos MO são dependentes da máquina.
Criando arquivos MO de maneira difícil
Agora sobre como criá-los, no layout padrão gettext você geralmente terá todos os arquivos PO no mesmo diretório, um por idioma e nomeado após o código ISO-639 de duas ou três letras de cada idioma:
po/
po/ca.po
po/de.po
...
Se você quiser criá-los manualmente, terá que percorrer cada arquivo nesse diretório e invocar msgfmt
manualmente, por exemplo,
$ msgfmt -c po/ca.po -o build/locale/LC_MESSAGES/ca/myapp.mo
Mas você não quer fazer isso quando já existe uma forma estabelecida e ferramentas automatizadas criadas especialmente para a operação de criação de arquivos MO.
Além disso, essas ferramentas cuidam de outras tarefas associadas, como extrair traduções do código e juntá-las em um arquivo POT para que os tradutores façam seu trabalho.
Criando arquivos MO de maneira inteligente
Se você estiver usando Python, recomendo muito usar o pacote python-distutils-extra (instalar pde), que automatiza e oculta a complexidade, bastando especificar o seguinte no arquivo setup.py
que você usará para criar, instalar e distribuir seu aplicativo. O mesmo exemplo que @dobey já apontava em sua resposta:
DistUtilsExtra.auto.setup(
name='myapp',
version='0.1',
#license='GPL-3',
#author='Your Name',
#author_email='[email protected]',
#description='UI for managing …',
#long_description='Here a longer description',
#url='https://launchpad.net/myapp'
)
Isso cuidará de tudo para você.
Se você quiser testar as traduções antes de enviá-las, use o prático comando build_i18n
em python-distutils-extra:
$ python setup.py build_i18n
Isso criará todos os arquivos PO na sua pasta /po
e os colocará em build
(ele será criado se não existir) no mesmo layout que o gettext espera quando eles são instalados em um sistema.
Você pode testar sua inscrição com traduções por:
* Copiando o conteúdo de /build
para /usr/share/locale
ou
* Apontando seu aplicativo para o diretório de criação usando a função gettext.bindtextdomain()
:
gettext.bindtextdomain(domain='myapp', localedir='/home/me/dev/myapp/build')
Sendo ainda mais inteligente
Fique no ombro dos gigantes. Basta criar um aplicativo de teste com Rapidamente e copiar como as traduções estão configuradas em setup.py
, que basicamente se resume a usar o módulo DistutilsExtra
no modo auto
, conforme descrito acima.
Você também pode usar o aplicativo de teste para gerar traduções e aprender como a geração funciona.
Embalagem
O tarball que você coloca como parte de uma versão não deve incluir os arquivos .mo. Ou seja, você não precisa criá-los manualmente. Isso precisa acontecer quando alguém cria o conteúdo do tarball para instalar manualmente ou, por exemplo, quando um pacote binário Debian está sendo criado.
Olhando para a sua árvore fonte, sugiro novamente usar um sistema de compilação como o python-distutils-extra, que também ajudará na embalagem. Aproximadamente, você precisará:
- Crie um arquivo
setup.py
com conteúdo semelhante aos sugeridos acima - Crie os arquivos de controle de empacotamento em debian /. Usando o p-d-e, seu arquivo
debian/rules
pode se tornar muito simples e consistir em apenas algumas linhas.
Na verdade, talvez você queira usar o Quickly para criar o arnés para o sistema de criação e empacotamento do seu aplicativo e, em seguida, substituir o código-fonte gerado pelo Quickly pelo aplicativo de teste pelo código do aplicativo.