Internacionalização com Django: Um Guia Prático
A internacionalização de aplicações web é essencial em um mundo globalizado. O Django, um framework web Python de alto nível, oferece excelentes ferramentas para criar sites multilíngues. Neste blog, exploraremos como configurar e usar o sistema de tradução do Django, conhecido como Django translate, e como instalar o gettext-iconv, uma ferramenta necessária para o processo de tradução.
Instalação do Gettext
O gettext é uma ferramenta importante que permite a tradução de programas. Para instalar o gettext-iconv, siga os passos abaixo de acordo com o seu sistema operacional:
-
Para Linux:
sudo apt install gettext
-
Para Windows: Visite o site de mlocati para instruções detalhadas sobre como instalar o gettext-iconv no Windows.
Configurando o Django para Tradução
Antes de começar a traduzir sua aplicação, você precisa configurar o Django para suportar múltiplos idiomas. Aqui estão os passos básicos:
-
Defina os Idiomas Suportados
No arquivosettings.py
, definaLANGUAGES
para listar os códigos de idioma que sua aplicação suportará. -
Ative o Middleware de Localização
Inclua'django.middleware.locale.LocaleMiddleware'
na sua listaMIDDLEWARE
. -
Use as Tags de Tradução no Seu Código
Em seus templates e arquivos Python, use as tags{% trans 'texto' %}
e{% blocktrans %}texto{% endblocktrans %}
para marcar strings para tradução. -
Crie Arquivos de Mensagem
Use o comandodjango-admin makemessages -l <language_code>
para gerar arquivos.po
para cada idioma. -
Traduza as Strings
Abra os arquivos.po
gerados e traduza as strings marcadas. -
Compile as Mensagens
Após a tradução, compile os arquivos com o comandodjango-admin compilemessages
.
Testando as Traduções
Para testar suas traduções, você pode alterar o idioma do navegador ou usar a visualização de idiomas do Django para alternar entre os idiomas suportados. Certifique-se de que todas as strings marcadas para tradução estejam aparecendo corretamente no idioma selecionado.
Para aplicar no seu projeto Django pode seguir esse tutorial.
Conteúdo que você vai ver:
- ✅ Ambiente Virtual Linux/Windows
- ✅ Criando o Projeto
- ✅ Criando App
- ✅ Arquivos Static
- ✅ Configuração no Settings
- ✅ Template e Bootstrap Configuração
Django Internacionalização PT-BR para EN
Configuração do projeto Django para internacionalização. No caso, fiz do PT-BR para EN. Utilizei bibliotecas nativas do Django para essa configuração.
MakeMessages
Esse comando vai criar os arquivos .po
do conteúdo de todo projeto que tem as tags:
{% trans “TEXTO” %}
django-admin makemessages --all --ignore=env
No arquivo locale/br/LC_MESSAGES
, copia msgid
igual para msgstr
. A linguagem padrão do nosso projeto é pt-br, então não muda.
#: mysite_app/templates/home.html:19
msgid "Testando Biblioteca para Tradução de Site"
msgstr "Testando Biblioteca para Tradução de Site"
No arquivo locale/en/LC_MESSAGES
, aqui já traduz do português para inglês. msgid
é a mensagem original (pt-br) e msgstr
é a tradução.
#: mysite_app/templates/home.html:19
msgid "Testando Biblioteca para Tradução de Site"
msgstr "Testing Library for Site Translation"
Depois que traduzir, precisa compilar essas mensagens:
django-admin compilemessages --ignore=env
Em core/urls.py
from django.conf.urls.i18n import i18n_patterns
urlpatterns = [
*i18n_patterns(*urlpatterns, prefix_default_language=False),
]
Para Testar:
python manage.py runserver
Alterar idioma no botão (template).
Criar um arquivo na pasta do seu projeto: core/language.py
from urllib.parse import urlparse
from django.conf import settings
from django.http import HttpResponseRedirect
from django.urls.base import resolve, reverse
from django.urls.exceptions import Resolver404
from django.utils import translation
def set_language(request, language):
for lang, _ in settings.LANGUAGES:
translation.activate(lang)
try:
view = resolve(urlparse(request.META.get("HTTP_REFERER")).path)
except Resolver404:
view = None
if view:
break
if view:
translation.activate(language)
next_url = reverse(view.url_name, args=view.args, kwargs=view.kwargs)
response = HttpResponseRedirect(next_url)
response.set_cookie(settings.LANGUAGE_COOKIE_NAME, language)
else:
response = HttpResponseRedirect("/")
return response
Em core/urls.py
from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
from core.language import set_language # new
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('mysite_app.urls')),
]
urlpatterns = [
*i18n_patterns(*urlpatterns, prefix_default_language=False),
path("set_language/<str:language>", set_language, name="set-language"), # new
]
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
No template myapp_app/home.html
<div class="container">
<a href="{% url 'set-language' 'pt-br' %}">BR</a> <!-- Adiciona -->
<a href="{% url 'set-language' 'en' %}">EN</a> <!-- Adiciona -->
<h1>{% trans 'Testando Biblioteca para Tradução de Site' %}</h1>
<p>{% trans 'Para tornar um projeto Django traduzível, você deve adicionar um número mínimo de ganchos ao seu código e modelos' %}</p>
</div>
Conclusão
A internacionalização é um passo crucial para alcançar um público mais amplo. Com o Django, esse processo é simplificado, permitindo que desenvolvedores criem aplicações acessíveis a usuários de diferentes idiomas com facilidade. Lembre-se de que a chave para um site multilíngue bem-sucedido é uma tradução cuidadosa e testes abrangentes.
19 de Maio de 2024 às 17:54