Pergunta

Eu tenho um aplicativo escrito em wxPython que eu quero fazer multilíngue. Nossas opções são

  1. usando gettext http://docs.python.org/library/gettext.html
  2. seprating fora todo o texto da interface do usuário para um arquivo messages.py, e usá-lo para traduzir o texto

Estou muito inclinado para 2º e vejo nenhum benefício em ir maneira gettext, usando 2º maneira que eu posso ter todas as minhas mensagens em um lugar não no código, então se eu precisar alterar uma mensagem, necessidade código não ser alterado, em caso de gettext eu posso ter confundindo msg-constantes como eu vou ser apenas embalar o orginal msg em vez de convertê-lo para uma constante em messages.py

basicamente em vez de

wx.MessageBox(_("Hi stackoverflow!"))

Eu acho

wx.MessageBox(messages.GREET_SO)

é melhor, por isso não há qualquer vantagem em forma gettext e desvantagens segundo caminho? e há um terceiro caminho?

edit: Também línguas gettext arquivos parece estar muito ligado ao código, e o que acontece se eu quiser duas mensagens mesmo em Inglês, mas diferentes no exemplo francês suponha francês tem tradução mais sutil para diferentes scnerarios para Inglês é ok

experiência: Eu já passaram 2 maneira, e devo dizer que cada aplicação deve tentar extrair o texto da interface do usuário a partir do código, ele dá uma chance para refatorar, ver onde UI está rastejando em modelo e em que o texto UI pode ser melhorado, gettext em comparação é mecânico, não dá qualquer entrada para o codificador, e eu acho que seria mais difícil de manter.

e ao criar um nome para o texto por exemplo PRINT_PROGRESS_MSG, dá a chance de ver que em muitos lugares, mesmo msg está sendo usado de forma ligeiramente diferente e pode ser fundidos em um único nome, que mais tarde vai ajudar quando eu preciso mudar msg apenas uma vez.

Conclusão: Eu ainda não estou certo de qualquer vantagem para uso gettext e estou usando meu arquivo próprias mensagens. mas eu selecionei a resposta que, pelo menos, explicou alguns pontos por gettext pode ser benéfico. A solução final IMO é que leva o melhor de ambas as maneiras ou seja o meu próprio identificador de mensagem envolto por gettext por exemplo

wx.MessageBox(_("GREET_SO"))
Foi útil?

Solução

Gettext é o caminho a percorrer, no seu exemplo você também pode usar gettext para "evitar armazenar as traduções no código":

wx.MessageBox(messages.GREET_SO)

pode ser o mesmo com gettext como:

wx.MessageBox(_("GREET_SO")) or wx.MessageBox(_("messages.GREET_SO"))

Gettext é muito bonito o padrão para aplicações em vários idiomas, e eu tenho certeza que você vai se beneficiar de usá-lo no futuro. Exemplo, você pode usar Poedit (ou outro aplicativo semelhante) para traduções atribuir a seus colaboradores ou colaboradores e mais tarde na bandeira uma ou várias mensagens como não devidamente traduzido. Além disso, se há falta / entradas extras poedit irá avisá-lo. Não se engane, gettext é a maneira confiável única comprovada para manter traduções.

Outras dicas

Existem algumas vantagens de gettext:

  1. Uma das maiores vantagens é: quando se utiliza poedit para fazer as traduções você pode se beneficiar do banco de dados de tradução. Basicamente poedit ca varredura de seu disco rígido e encontrar arquivos que já foram traduzidos e fará sugestões quando você traduzir o seu arquivo.
  2. Quando você dá o código para outras pessoas para traduzir eles já deve saber o caminho gettext da tradução, enquanto você tem que explicar-lhes o seu modo de tradução.
  3. Você tem o texto no contexto do código, por isso deve ser mais fácil de traduzir, quando você ver o código em torno da tradução
  4. Considere texto como: print _('%d files of %d files selected') % (num, numTotal) e situações ainda mais complicadas. Aqui ele realmente ajuda ter o código em torno de ...

Para a web (este é PHP, mas a idéia é a mesma coisa), eu sempre criar vários arquivos de idioma em um diretório específico. en.php, fr.php, et cetera. Esses arquivos contêm definições de todo o texto de saída, na linguagem dada. A preferência do usuário para a linguagem determina que esses arquivos são incluídos, assim, que a linguagem aparecerá no monitor. Por exemplo ...

em en.php: TEXT_I_AM = "eu sou"

em fr.php: TEXT_I_AM = "Je suis"

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top