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:

 

  1. Defina os Idiomas Suportados: No arquivo settings.py, defina LANGUAGES para listar os códigos de idioma que sua aplicação suportará.

 

  1. Ative o Middleware de Localização: Inclua 'django.middleware.locale.LocaleMiddleware' na sua lista MIDDLEWARE.

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

  3. Crie Arquivos de Mensagem: Use o comando django-admin makemessages -l <language_code> para gerar arquivos .po para cada idioma.

  4. Traduza as Strings: Abra os arquivos .po gerados e traduza as strings marcadas.

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

Comentários

Total de Comentários: 0