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
PythonPasso 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'
PythonPasso 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'
PythonAgora 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})
PythonO 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"))
PythonGerando 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
BashEste 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>
BashPara 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 %}
BashIsso 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'),
)
PythonCom 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
BashIsso 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
BashTestando 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'
BashCom 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>
BashIsso 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>
BashIsso 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',
]
BashO 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:
- Organize seus arquivos de tradução: Mantenha os arquivos
.po
organizados e atualizados para garantir que todas as strings estejam devidamente traduzidas. - 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.
- 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.
- 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.