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

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

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

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

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

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

Olá,

Você precisa fazer login no sistema para comentar.

Entrar

Comentários

Total de Comentários: 0