2025/01/08 | AI
with openai
La internacionalización es una parte crucial de cualquier aplicación web que desee llegar a audiencias globales, y Django facilita este proceso con su potente sistema de traducción. Sin embargo, gestionar traducciones manualmente en los archivos .po
puede ser una tarea tediosa y propensa a errores. Aquí es donde entra Django-Rosetta, una herramienta que simplifica la edición de traducciones directamente desde una interfaz gráfica amigable.
En esta publicación, aprenderás cómo instalar y configurar Django-Rosetta para gestionar traducciones en tu proyecto. Te guiaremos paso a paso, mencionando los archivos específicos de Django que debes editar para integrarlo correctamente. Al final, tendrás una herramienta poderosa para trabajar con traducciones en varios idiomas sin salir del navegador.
Django-Rosetta es un paquete de terceros que actúa como una interfaz gráfica para editar archivos .po
de traducción. Permite a desarrolladores y traductores trabajar directamente desde el navegador, sin necesidad de manipular los archivos manualmente en un editor de texto. Esto hace que el proceso de traducción sea más eficiente y accesible.
Para configurar Django-Rosetta correctamente, trabajaremos con los siguientes archivos clave de tu proyecto Django:
settings.py
: Configuraremos los idiomas disponibles, la ruta donde se almacenarán las traducciones y activaremos Django-Rosetta en INSTALLED_APPS
.urls.py
: Añadiremos las rutas necesarias para acceder a la interfaz de Django-Rosetta.locale/
: Es el directorio donde se almacenarán los archivos de traducción para los diferentes idiomas.Con estos tres elementos, tu proyecto estará listo para soportar múltiples idiomas y gestionar traducciones con facilidad.
En las siguientes secciones, exploraremos cada paso en detalle, desde la instalación hasta la configuración, y finalizaremos con una demostración de cómo usar Django-Rosetta para traducir cadenas en tu aplicación. ¡Comencemos!
Instalar django-rosetta:
pip install django-rosetta
Añade las urls de rosetta en urls.py (dentro de lo que tengamos no, sino seguido "tal como se ve":
from django.contrib import admin
from django.conf import settings
from django.urls import path, include
from django.conf.urls.i18n import i18n_patterns
from django.http import HttpResponseRedirect
# Redirige desde la raíz ('/') al idioma predeterminado
urlpatterns = [
path('', lambda request: HttpResponseRedirect(f'/{settings.LANGUAGE_CODE.split("-")[0]}/')),
path('admin/', admin.site.urls),
]
# Incluye las rutas de Rosetta si está en INSTALLED_APPS
if 'rosetta' in settings.INSTALLED_APPS:
urlpatterns += [
path('rosetta/', include('rosetta.urls')),
]
# Prefijos de idioma para todas las rutas definidas con i18n_patterns
urlpatterns += i18n_patterns(
path('i18n/', include('django.conf.urls.i18n')), # Para cambiar idioma
path('', include('applications.home.urls')), # Ruta de la aplicación principal
)
Añadir en INSTALLED_APPS rosetta:
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rosetta'
]
Añade la siguiente linea para habilitar el cambio de idioma... ¡Eso de clicar EN o ES!
MIDDLEWARE = [
...,
'django.middleware.locale.LocaleMiddleware',
...,
]
Añadir en templates:
TEMPLATES = [
{
...
'OPTIONS': {
'context_processors': [
...
'django.template.context_processors.i18n',
...
],
},
},
]
Configuramos los idiomas tanto el principal para django como para el multidioma:
# Idioma predeterminado (opcional)
LANGUAGE_CODE = 'es-es'
# Zona horaria predeterminada
TIME_ZONE = 'Europe/Madrid'
# Activar internacionalización
USE_I18N = True
USE_L10N = True
USE_TZ = True
# Idiomas disponibles
LANGUAGES = [
('es', 'Español'),
('en', 'English'),
('eu', 'Euskara'),
]
# Ruta donde estarán los archivos de traducción
LOCALE_PATHS = [
BASE_DIR / 'locale/',
]
Marca las palabras o frases traducir utilizando "trans":
<a href="#">{% trans 'Home' %}</a>
<a href="#">{% trans 'About' %}</a>
Crea una carpeta llamada locale a la altura de manage.py
Ejecuta el siguiente comando para crear los archivos .po
necesarios para cada idioma:
django-admin makemessages -l es
django-admin makemessages -l en
django-admin makemessages -l eu
Compila las traducciones para que django las pueda utilizar:
django-admin compilemessages
Se crearán los siguientes archivos:
Entran en el enlace para crear las traducciones (en mi caso en local pero puede estar en producción con el dominio):
http//localhost:8000/rosetta
Crea las traducciones de los {% trans "..." %} indicados en el template:
Añade en el menú el selector de idiomas. En este caso ES, EN y EUS:
{% load i18n %}
{% get_current_language as CURRENT_LANGUAGE %}
{% get_available_languages as AVAILABLE_LANGUAGES %}
{% get_language_info_list for AVAILABLE_LANGUAGES as languages %}
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle"
style="text-transform:uppercase; background-color: #250f64; color:white; border-radius:25px;"
href="#" data-bs-toggle="dropdown" aria-expanded="false">
{{ CURRENT_LANGUAGE }}
</a>
<ul class="dropdown-menu" style="z-index:500;">
{% for language in languages %}
<li>
<a class="dropdown-item" style="text-transform:uppercase; color: #250f64;"
href="/{{ language.code }}/{{ request.get_full_path|slice:'4:' }}">
{{ language.code }}
</a>
</li>
{% endfor %}
</ul>
</li>
¡Ya debería funcionar el sistema de idiomas en la web!
¿Qué tal funciona? Si necesitas ayuda no dudes en contactar. ; )