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

Programação, Python 1 Comment

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.

Ubuntu e Locale

Linux, Ubuntu No Comments

Para se alterar o locale padrão do sistema, basta seguir esses passos:

  • Adicione o seguinte texto “en_US.ISO-8859-1 ISO-8859-1″ no final do arquivo “/var/lib/locales/supported.d/local”
  • Troque o valor da variável “LANG” no arquivo “/etc/default/locale” por “en_US.ISO-8859-1″
  • Execute o commando “sudo locale-gen –purge”

Após estes passos, basta reiniciar o sistema!