Internacionalização com Django
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 arquivo
settings.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 comando
django-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 comando
django-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 e EN. Utilizei bibliotecas nativas do Django para fazer 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 msgtr. 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"
#: mysite_app/templates/home.html:21
msgid ""
"Para tornar um projeto Django traduzível, você deve adicionar um número "
"mínimo de ganchos ao seu código e modelos"
msgstr ""
"Para tornar um projeto Django traduzível, você deve adicionar um número "
"mínimo de ganchos ao seu código e modelos"
no arquivo locale/en/LC_MESSAGES
Aqui já traduz do português para inglês. msgid é mensagem original (pt-br) e msgstr é tradução.
#: mysite_app/templates/home.html:19
msgid "Testando Biblioteca para Tradução de Site"
msgstr "Testing Library for Site Translation"
#: mysite_app/templates/home.html:21
msgid ""
"Para tornar um projeto Django traduzível, você deve adicionar um número "
"mínimo de ganchos ao seu código e modelos"
msgstr ""
"To make a Django project translatable, you must add a number "
"minimum hooks to your code and templates"
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
core/urls.py
from django.contrib import admin
from django.urls import path, include
from django.conf.urls.i18n import i18n_patterns
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.
Olá,
Você precisa fazer login no sistema para comentar.
Entrar