Autonomia & Tecnologia

Cuidados importantes ao configurar i18n no Django

21

A Babilônia caiu não foi por acaso. Internacionalização (aka i18n) é trabalhoso por natureza, e quando você esbarra em sutilezas de configuração pode ser irritante.

Esta semana eu decidi finalmente adaptar o site do Small Acts Manifesto para outros idiomas, e no processo acabei caindo numa cilada de coincidências.

Para que você não cometa o mesmo erro, criei uma receitinha de bolo para configurar o projeto.

Começe pelo settings.py:

É simples, mas temos alguns pontos de atenção:

  • O LANGUAGES é uma tupla de tuplas. O primeiro elemento das tuplas é o language code. Para português brasileiro o valor é pt-br, tudo minúsculo separado por hífen.
  • LOCALE_PATHS é escrito no plural e aceita vários diretórios, portanto é uma tupla contendo strings.
  • Se você não sabe o que é o PROJECT_DIR, veja nesta palestra.

Crie os arquivos .po

Cada idioma tem um “código fonte” da tradução.

O Django varre todo o código fonte e reúne as strings marcadas para tradução com o comando:

Atenção, o parâmetro deve ser pt_BR, com pt em minúsculo e BR em maiúsculo, separados por underscore. Esse formato é o locale name e este valor será usado para criar o diretório que conterá o arquivo django.po.

Usando as traduções

Depois de definir as traduções editando os arquivos .po, basta empacotar a tradução, compilando os .po em .mo para os idiomas disponíveis:

Ao longo do projeto você vai usar várias vezes o makemessages e o compilemessages.

Se você for realizar traduções colaborativas, o Transifex pode ajudar bastante e é grátis para projetos open source.

Mas e a cilada?

Quando eu implementei conteúdo em português tudo funcionava bem no ambiente de desenvolvimento, mas no ambiente de stage o site só exibia o idioma padrão que é o inglês. Clássico caso de works on my machine. Como pode?

O problema era que eu estava desenvolvendo no Mac e o site está hospedado em Linux.

Por desatenção, eu executei o makemessages -l pt_br, em minúsculo.

Na minha máquina tudo funcionava, porque o filesystem do Mac não é case sensitive por padrão, logo conseguia encontrar o diretório. Já no Linux, era como se não existisse dicionário disponível em português.

Qual a moral da história?

Use vagrant mesmo em um site ridiculamente pequeno, e compartilhe seus tropeços para que outros possam rir de você, com você. 😛

[]’s, HB!

você pode gostar também
  • Excelente post… meu problema era exatamente com a geração dos arquivos…
    Não me liguei no pt_BR e minha pasta estava com pt-br….

  • Gustavo Thomé

    Muito obrigado!!! Me ajudou muito!!!!

  • Silas Vasconcelos

    Noss, já passei pela mesmo coisa, mesma coisa, mesmo!

  • Digo Freitas

    Não sei porque diabos antes não ia, usando seu comando foi. Valeu!

  • Digo Freitas

    Não sei porque diabos antes não ia, usando seu comando foi. Valeu!

  • Digo Freitas

    Não sei porque diabos antes não ia, usando seu comando foi. Valeu!

  • eu mudei a configuração do meu mac por conta disso depois de algumas imagens quebrando no servidor pq estavam com esse problema do “case sensitive”

    • Pelo que pesquisei, “existem programas que não funcionam direito” com HFS case sensitive. Como foi sua experiência?

      • até agora ta tranquilo… o home brew avisa que não é seguro mas não tive problemas até agora.

  • joaovrmaia

    eu mudei a configuração do meu mac por conta disso depois de algumas imagens quebrando no servidor pq estavam com esse problema do “case sensitive”

    • Pelo que pesquisei, “existem programas que não funcionam direito” com HFS case sensitive. Como foi sua experiência?

      • joaovrmaia

        até agora ta tranquilo… o home brew avisa que não é seguro mas não tive problemas até agora.

      • Robson Peixoto

        Recomendo criar um volume com HFS+ e colocar o seu código lá.
        Essa falta de padrão, usando pt-br e pt_BR, é de lascar.

      • Pois é… eu acho que podia ter uma verificação no comando do Django, já que esses formatos são estabelecidos globalmente.

      • Pois é… eu acho que podia ter uma verificação no comando do Django, já que esses formatos são estabelecidos globalmente.

  • joaovrmaia

    eu mudei a configuração do meu mac por conta disso depois de algumas imagens quebrando no servidor pq estavam com esse problema do “case sensitive”

    • Pelo que pesquisei, “existem programas que não funcionam direito” com HFS case sensitive. Como foi sua experiência?

      • joaovrmaia

        até agora ta tranquilo… o home brew avisa que não é seguro mas não tive problemas até agora.

      • robsonrspeixoto

        Recomendo criar um volume com HFS+ e colocar o seu código lá.
        Essa falta de padrão, usando pt-br e pt_BR, é de lascar.

      • Pois é… eu acho que podia ter uma verificação no comando do Django, já que esses formatos são estabelecidos globalmente.