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
21 comentários
  1. Michel Wilhelm Diz

    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….

  2. Gustavo Thomé Diz

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

  3. Silas Vasconcelos Diz

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

  4. Digo Freitas Diz

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

  5. Digo Freitas Diz

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

  6. Digo Freitas Diz

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

  7. João Maia Diz

    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”

    1. Henrique Bastos Diz

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

      1. João Maia Diz

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

  8. joaovrmaia Diz

    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”

    1. Henrique Bastos Diz

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

      1. joaovrmaia Diz

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

      2. Robson Peixoto Diz

        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.

      3. Henrique Bastos Diz

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

      4. Henrique Bastos Diz

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

  9. joaovrmaia Diz

    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”

    1. Henrique Bastos Diz

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

      1. joaovrmaia Diz

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

      2. robsonrspeixoto Diz

        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.

      3. Henrique Bastos Diz

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

Deixe uma resposta

Seu endereço de email não será publicado.