Para vocês que desenvolvem em Python e Django preocupando-se
com internacionalização, já devem ter feito a seguinte pergunta: Quando
usar gettext
e gettext_lazy
?
Acredito que antes de responder esta pergunta, temos que responder outra
questão pertinente: Devo utilizar gettext
ou ugettext
?
Essas duas funções seguem o mesmo princípio dos métodos mágicos
__str__
e __unicode__
. Onde gettext
retornará um texto traduzido
como uma string “comum”, e ugettext
retornará um texto traduzido
como uma string Unicode.
Como nosso idioma nativo abusa do uso de caracteres especiais, aconselho
sempre que possível a utilização do ugettext
. Na verdade, é uma
forma de garantir sucesso na tradução de qualquer idioma sem quebrar a
cabeça com encoding (já que o Unicode tem uma ampla tabela de
caracteres).
Além disso, passe a mensagem como Unicode para a função sempre que necessário:
texto_traduzido = ugettext(u'Descrição do produto em estoque')
A principal diferença entre ugettext
e ugettext_lazy
é que o
último é literalmente um preguiçoso. Ele faz uma referência para a
string (e não necessariamente para a tradução), fazendo com que a
operação seja executada apenas quando a renderização da string é
necessária (ao contrário de ugettext
que é processado assim que a
expressão é interpretada).
Confuso? Talvez o Marinho Brandão possa ser mais claro:
A função “ugettext_lazy()“ é preguiçosa. Isso significa que a tradução é feita somente quando ela é requisitada, o que é
relativamente melhor para o caso de classes de modelo, pois elas
são constantemente utilizadas sem que a tradução de um termo seja
necessário de fato.Por outro lado a função “ugettext()“ traduz a string
instantaneamente, o que é melhor para casos como o de formulários
dinâmicos e views, pois eles não são usados de maneira tão constante
quanto classes de modelo.
Então… utilize ugettext_lazy
nos campos e meta-informações dos
modelos (onde a tradução pode ser feita sob demanda), e ugettext
em
métodos, funções e views (onde a tradução tem quer ser “instantânea”).
Até a próxima…