Turbogears 2 + i18n + formatação de datas e números

8:39 am Programação, Python

Para setar a linguagem padrão da sua aplicação utilizando o turbogears basta editar o arquivo development.ini e incluir a seguinte linha após [app:main]:

lang = pt_BR

Depois execute os seguintes comandos:

python setup.py extract_messages
python setup.py init_catalog -l pt_BR
python setup.py compile_catalog

O primeiro comando extrai todas as mensages que devem ser traduzidas (dos templates e dos códigos python). O segundo comando cria um arquivo de tradução para a linguagem pt_BR. Após esse passo, você deve editar o arquivo gerado para traduzir as mensagens. O terceiro comando compila as mensagens traduzidas.

Agora para formatar datas e números no formato da linguagem padrão (ou da linguagem selecionada pelo usuário) basta criar o arquivo lib/i18nHelpers.py:

import tg.i18n
import babel.numbers
import babel.dates

__all__ = ["format_currency", "format_datetime"]

def get_lang(lang):
    if lang:
        return lang
    return tg.i18n.get_lang()[0]

def format_currency(number, currency = "", locale = None, *args, **kargs):
    return babel.numbers.format_currency(number, currency, locale = get_lang(locale), *args, **kargs)

def format_datetime(datetime, *args, **kargs):
    return babel.dates.format_datetime(datetime, locale = get_lang(locale), *args, **kargs)

E importar essas funções no arquivo lib/helpers.py.

No seu template basta fazer algo assim:

R$ ${h.format_currency(xyz.valor)}

Não mapei todas as funções que o Babel disponibiliza, mas basta fazer como foi feito com essas duas funções.

One Response

  1. Jorge Vargas Says:

    Have you seen the Format class in babel? it kind of does what you are trying to do with those helpers.

Leave a Comment

Your comment

You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Please note: Comment moderation is enabled and may delay your comment. There is no need to resubmit your comment.

css.php