Este site usa cookies e tecnologias afins que nos ajudam a oferecer uma melhor experiência. Ao clicar no botão "Aceitar" ou continuar sua navegação você concorda com o uso de cookies.

Aceitar
Internacionalização e Localização | Disponibilizando seu projeto Django em vários idiomas

django

Internacionalização e Localização | Disponibilizando seu projeto Django em vários idiomas

Elias
Escrito por Elias
Junte-se a mais de X pessoas

Entre para nossa lista e receba conteúdos exclusivos e com prioridade

Você desenvolveu uma aplicação Django incrível, e está pronto para lançá-la no mundo. Mas, antes de apertar o botão “Publicar”, surge uma questão: e se o seu público for global?

As pessoas ao redor do mundo falam diferentes idiomas, têm diferentes formatos de data, hora, moeda… Enfim, seu projeto precisa ser internacionalizado para atender a essa demanda.

A boa notícia é que o Django já vem preparado para te ajudar com isso. Com alguns ajustes, você pode garantir que sua aplicação estará disponível em vários idiomas e ajustará automaticamente os formatos de data, hora e números de acordo com a localização do usuário.

Neste artigo, vamos explorar as melhores práticas e ferramentas do Django para internacionalização (i18n) e localização (l10n), mostrando como configurar seu projeto para suportar múltiplos idiomas e formatos regionais.

Vamos cobrir desde o básico da configuração até detalhes sobre tradução de templates, URLs e o uso de middleware para seleção automática de idioma. Tudo isso, claro, com exemplos de código prático e explicações claras.

O que é Internacionalização e Localização?

Antes de começarmos com as configurações, vamos esclarecer rapidamente dois termos que são frequentemente usados, mas que às vezes geram confusão: internacionalização (i18n) e localização (l10n).

  • Internacionalização (i18n) é o processo de preparar uma aplicação para suportar múltiplos idiomas e formatos regionais, sem precisar reescrever a aplicação do zero. Basicamente, você prepara o terreno para que a localização seja possível.
  • Localização (l10n) é a adaptação da sua aplicação para um idioma ou região específicos. Isso inclui tradução de textos, formatação de datas, horas, moedas e até ajustes culturais (como o formato de endereços ou a ordem de nomes).

Então, se você quer que seu projeto Django seja acessível para usuários em diferentes países, precisa garantir que ele esteja bem internacionalizado e localizado.

Configurando Internacionalização no Django

O primeiro passo para habilitar a internacionalização no Django é ajustar algumas configurações no arquivo settings.py. O Django já tem suporte embutido para i18n e l10n, então a configuração é bastante simples.

Passo 1: Ativando a Internacionalização

No arquivo settings.py, você encontrará algumas configurações importantes para i18n e l10n. Certifique-se de que as opções abaixo estão definidas corretamente:

# Habilita a internacionalização
USE_I18N = True

# Habilita a localização (formatos de data, hora, moeda, etc.)
USE_L10N = True

# Define se a aplicação deve ajustar automaticamente o fuso horário
USE_TZ = True
Python

Passo 2: Definindo o Idioma Padrão

Agora, você precisa definir o idioma padrão da sua aplicação, aquele que será usado caso o idioma do usuário não seja suportado. No Django, isso é feito com a configuração LANGUAGE_CODE. Para um site em português, por exemplo:

LANGUAGE_CODE = 'pt-br'
Python

Passo 3: Definindo o Time Zone

Se o seu projeto lida com dados de datas e horas, é importante definir o fuso horário correto para a aplicação. Isso é feito com a configuração TIME_ZONE. Um exemplo para o Brasil:

TIME_ZONE = 'America/Sao_Paulo'
Python

Agora que configuramos o básico da internacionalização no Django, vamos ver como traduzir textos e trabalhar com múltiplos idiomas.

Usando o Sistema de Tradução do Django

O Django possui um sistema de tradução muito eficiente, que permite que você marque partes do seu código para tradução, e depois gere arquivos de tradução que podem ser editados por tradutores ou por você mesmo.

Marcando Strings para Tradução

No Django, você pode marcar qualquer string que apareça no código para tradução usando a função gettext ou gettext_lazy. A função gettext traduz a string imediatamente, enquanto gettext_lazy adia a tradução até que seja necessária (útil em casos onde a tradução pode mudar com base no contexto, como nos modelos).

Aqui está um exemplo simples de como marcar uma string para tradução em uma view:

from django.utils.translation import gettext as _

def minha_view(request):
    mensagem = _("Bem-vindo ao meu site!")
    return render(request, 'minha_template.html', {'mensagem': mensagem})
Python

O gettext retorna a string traduzida com base no idioma atual do usuário.

Marcando Strings no Modelo

Se você estiver traduzindo campos de um modelo, é uma boa prática usar gettext_lazy, pois a tradução pode ser adiada até o momento em que for exibida:

from django.utils.translation import gettext_lazy as _
from django.db import models

class Produto(models.Model):
    nome = models.CharField(max_length=100, verbose_name=_("Nome do Produto"))
    descricao = models.TextField(verbose_name=_("Descrição"))
Python

Gerando Arquivos de Tradução

Uma vez que suas strings estão marcadas para tradução, você precisa gerar os arquivos .po que armazenam as traduções. O Django oferece um comando para isso:

django-admin makemessages -l es
Bash

Este comando cria um arquivo .po na pasta locale/es/LC_MESSAGES/, onde es representa o código do idioma espanhol.

Tradução de Templates

Além de marcar strings no código, você também precisará traduzir textos que estão nos templates HTML da sua aplicação.

Usando {% trans %} e {% blocktrans %}

No Django, você pode usar a tag {% trans %} para traduzir texto diretamente nos templates:

<p>{% trans "Bem-vindo ao meu site!" %}</p>
Bash

Para blocos de texto maiores ou com variáveis dinâmicas, você pode usar {% blocktrans %}:

{% blocktrans %}
    Olá {{ usuario.nome }}, seja bem-vindo ao meu site!
{% endblocktrans %}
Bash

Isso garante que todo o bloco seja traduzido corretamente, incluindo variáveis dinâmicas.

Tradução de URLs

No Django, também é possível configurar URLs para que elas respeitem o idioma do usuário. Para isso, usamos a função i18n_patterns no arquivo urls.py.

Aqui está um exemplo de como configurar URLs que são traduzidas com base no idioma selecionado:

from django.conf.urls.i18n import i18n_patterns
from django.urls import path
from . import views

urlpatterns = i18n_patterns(
    path('about/', views.sobre, name='sobre'),
    path('contact/', views.contato, name='contato'),
)
Python

Com isso, as URLs serão automaticamente ajustadas para o idioma do usuário.

Gerenciando Arquivos de Tradução

À medida que seu projeto cresce, você precisará manter os arquivos de tradução atualizados. Para isso, o Django oferece comandos para gerenciar esses arquivos de forma prática.

Atualizando Arquivos de Tradução

Sempre que adicionar novas strings ao seu projeto, você precisará atualizar os arquivos .po. Isso é feito com o comando:

django-admin makemessages -a
Bash

Isso atualiza todos os arquivos .po com as novas strings que foram marcadas para tradução.

Compilando Arquivos de Tradução

Depois de editar os arquivos .po, você precisa compilá-los para gerar os arquivos .mo, que o Django usa para aplicar as traduções. Isso é feito com o seguinte comando:

django-admin compilemessages
Bash

Testando a Internacionalização

Depois de configurar suas traduções, você precisará testá-las. Isso pode ser feito facilmente alterando o idioma do projeto temporariamente para ver como as traduções aparecem.

Alterando o Idioma Temporariamente

Uma forma simples de testar as traduções é mudando o idioma da aplicação no arquivo settings.py:

LANGUAGE_CODE = 'es'
Bash

Com isso, você verá como a aplicação se comporta no idioma espanhol, por exemplo.

Localização de Formatos de Data, Hora e Moeda

Além de traduzir texto, você também precisará adaptar a formatação de datas, horas, moedas e outros valores numéricos para o local do usuário.

Formatando Datas e Horas

O Django ajusta automaticamente os formatos de data e hora com base no idioma do usuário. No entanto, você pode forçar formatações específicas usando o filtro date nos templates:

<p>{% now "j F Y" %}</p>
Bash

Isso exibirá a data atual formatada de acordo com o idioma ativo.

Formatando Moedas e Números

Para formatar números e moedas, você pode usar o filtro localize do Django:

<p>{{ preco|localize }}</p>
Bash

Isso ajustará a exibição do valor preco com base no formato numérico do país do usuário.

Aplicando Middleware de Tradução

O LocaleMiddleware é responsável por detectar automaticamente o idioma do usuário e aplicar as traduções corretas.

Configurando o LocaleMiddleware

Para garantir que o idioma seja detectado corretamente, adicione o LocaleMiddleware à sua lista de middlewares no settings.py:

MIDDLEWARE = [
    # Outros middlewares...
    'django.middleware.locale.LocaleMiddleware',
]
Bash

O LocaleMiddleware tenta detectar o idioma baseado em vários fatores, como cookies, sessões e cabeçalhos HTTP.

Melhores Práticas para Internacionalização e Localização no Django

Aqui estão algumas dicas para garantir que sua aplicação seja internacionalizada e localizada de forma eficiente:

  1. Organize seus arquivos de tradução: Mantenha os arquivos .po organizados e atualizados para garantir que todas as strings estejam devidamente traduzidas.
  2. Teste em diferentes idiomas: Teste sua aplicação em todos os idiomas suportados antes de lançá-la. Isso ajuda a evitar erros de tradução ou formatação.
  3. Evite traduzir código: Traduza apenas strings visíveis para o usuário final. Não tente traduzir mensagens de log ou variáveis internas do código.
  4. Considere a performance: Quando trabalhar com vários idiomas, lembre-se de testar a performance da aplicação. Cache pode ser uma solução útil para evitar problemas de performance relacionados a múltiplas traduções.

Conclusão

A internacionalização e localização são passos essenciais para tornar sua aplicação Django acessível para usuários em diferentes partes do mundo.

Ao seguir as melhores práticas discutidas aqui, você garantirá que seu projeto esteja bem preparado para lidar com múltiplos idiomas e formatos regionais.

Neste artigo, cobrimos desde a configuração básica de i18n/l10n no Django, até a tradução de templates, URLs e como lidar com diferentes formatos de data, hora e moeda.

Além disso, vimos como usar o LocaleMiddleware para detectar automaticamente o idioma do usuário e como manter suas traduções organizadas e atualizadas.