Saltar al contenido principal

Django

Nuestro objetivo es hacer una internet más unida sin barreras linguísticas

En un mundo cada vez más conectado, la barrera del idioma no debería ser un obstáculo para compartir conocimiento y construir comunidades globales. Con Translate Projects, puedes globalizar fácilmente tus proyectos, haciendo que tu contenido sea accesible para personas de todo el mundo.

Configuración inicial Django

Implementación de traducciones

Configurar i18n

  • Debes de tener configurado el paquete django.conf.i18n
settings.py
#Idioma por defecto
LANGUAGE_CODE = 'es'

#Idiomas a traducir
# importar `gettext_lazy` para evitar error de la traducción
from django.utils.translation import gettext_lazy as _

LANGUAGES = [
('es', _('Spanish')),
('en', _('English')),
# ('hi', _('Hindi')),
# ('fr', _('French')),
# ('de', _('German')),
# ('zh', _('Chinese')),
# ('ko', _('Korean')),
# ('ja', _('Japanese')),
# ('ru', _('Russian')),
# ('it', _('Italian')),
]

#Habilitar el paquete `django.conf.i18n`
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True

TRANSLATE_PROJECTS_API_KEY = '#'
TRANSLATE_PROJECTS_EXCLUDE_DIRS = ["env/*"]
Importante
  • No olvides ingorar la carpeta de tu entorno de desarrollo, por ejemplo env/
  • Debes de tener configurado el paquete django.conf.locale

Creamos la carpeta locale donde se almacenara el resultado de nuestras traducciones

Terminal
mkdir locale

Asi quedaremos con la siguiente estructura de directorios

settings.py
├── db.sqlite3
├── django_tutorial
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── locale # ruta de nuestras traducciones
└── manage.py

Añadimos la ruta de nuestras traducciones a nuestra lista de rutas en nuestro archivo yourproject/settings.py principal.

settings.py

# importar `os`
import os

LOCALE_PATHS = [
os.path.join(BASE_DIR, 'locale'),
]
  • Añadimos el middleware de lozalización django.middleware.locale
settings.py
MIDDLEWARE = [
Tus otros middlewares...,
'django.middleware.locale.LocaleMiddleware',
]
  • Debes de tener configurado el paquete django.conf.urls.i18n

Debemos añadir la ruta i18n/ a nuestra lista de rutas en nuestro archivo yourproject/urls.py principal.

urls.py
from django.conf.urls.i18n import i18n_patterns
from django.urls import path, include

urlpatterns = [
path('admin/', admin.site.urls),
path('i18n/', include('django.conf.urls.i18n')),
]

Configurar ruta de nuestras plantillas

Creamos la carpeta templates donde se almacenara nuestras plantillas

Terminal
mkdir templates

Asi quedaremos con la siguiente estructura de directorios

settings.py
.
├── db.sqlite3
├── django_tutorial
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── locale
├── manage.py
└── templates # ruta de nuestras plantillas

Dentro de esta carpeta añadiremos nuestras planillas html de nuestro proyecto.

settings.py
# importar `os`
import os
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')], #Ruta de nuestras plantillas
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]

Automatizar traducciones

Debemos de instalar el paquete translate-projects-django en nuestro proyecto.

pip install translate-projects-django

Registrar paquete en settings.py

settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.sites',
Tus otros paquetes...,
'translate_projects_django', #añadir el paquete
]
Crear cuenta

🚀 Automatiza y optimiza tus traducciones

Para aprovechar al máximo Translate Projects, necesitas una API Key. Regístrate sin compromiso.

  • No pedimos tarjeta de crédito para probar Translate Projects

Beneficios al obtener tu API Key

  • Administración Inteligente: Sincroniza y gestiona automáticamente las traducciones de tus proyectos.
  • Panel Administrativo Exclusivo: Personaliza y supervisa todas tus traducciones desde una interfaz centralizada.
  • Soporte Prioritario: Recibe asistencia técnica rápida y especializada cuando la necesites.
  • Traducciones Precisas: Nuestra tecnología entiende el contexto de tu código para ofrecer traducciones exactas.
  • 30.000 Eniacs de Bienvenida: Prueba todas las funciones sin compromiso con tokens internos que potencian tus traducciones.

¡Regístrate ahora y obtén tu API Key para desbloquear todo el potencial de Translate Projects!

Crear cuenta ahora→

Añadir api key

Es muy sencillo solo debes de añadir tu API key en la configuración de tu proyecto.

settings.py
TRANSLATE_PROJECTS_API_KEY = '#' #<- Tu API key

Ejecutar las traducciones

Abrimos nuestra consola de comandos y ejecutamos el comando translate para que nuestras traducciones se ejecuten.

Terminal
python manage.py translate

Si todo está correcto, deberías ver algo como esto:

Ejecutar traducciones

Si necesitas traductir a un solo idioma específico, puedes hacerlo con la opción --locale de la siguiente manera:

Terminal
python manage.py translate --locale es

Las traducciones se almacenarán en la carpeta locale.

Terminal
.
├── db.sqlite3
├── django_tutorial
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── locale
│ ├── en
│ │ └── LC_MESSAGES
│ │ ├── django.po
│ │ └── django.po
│ └── es
│ └── LC_MESSAGES
│ ├── django.mo
│ └── django.po
├── manage.py
└── templates
Soporte

Estamos aquí para ayudarte

Si tienes alguna pregunta, necesitas ayuda o quieres contribuir, no dudes en contactarme. Estoy a tu disposición para apoyarte en lo que necesites.

Apoya el Proyecto

Si este proyecto te ha sido útil, te invito a invitarme un café. Tu apoyo me ayuda a seguir mejorando y creando contenido de valor. ¡Gracias por estar aquí! ☕

Buy me a coffee

¿Como añadir traducciones?

Añadir traducciones en nuestras plantillas es muy sencillo y rápido.

  • Vamos a crear una plantilla básica
Terminal
touch templates/base.html

Explicare parte por parte la estructura de nuestra plantilla y depsues dejare del archivo completo.

templates/base.html
#{{ importamos `i18n` para poder usar las traducciones}}
{% load i18n %}

<!DOCTYPE html>

#{{ obtenemos el idioma actual y los idiomas disponibles}}
{% get_current_language as LANGUAGE_CODE %}
{% get_available_languages as LANGUAGES %}

#{{ definimos el idioma actual}}
<html lang="{{ LANGUAGE_CODE }}">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{% block title %}Translate Projects{% endblock %}</title>
</head>
<body>
  • Añadimos el formulario para cambiar el idioma
templates/base.html
<body>

{% comment %} Formulario basico para cambiar idioma {% endcomment %}
<form method="post" action="{% url 'set_language' %}">
{% csrf_token %}

{% for code, name in LANGUAGES %}
<input
type="radio"
name="language"
value="{{ code }}"
{% if code == LANGUAGE_CODE %}checked{% endif %}
>
{{ name }}

{% endfor %}
<input type="submit" value="Submit">
</form>
  • Añadimos los textos que necesitamos traducir con la función trans.
templates/base.html
    {% comment %} Traducciones {% endcomment %}
<h1>{% trans "Mi primera traducción" %}</h1>

<h2>{% trans "Este es un texto traducido, siguenos en YouTube!" %}</h2>
</body>
</html>

Ejemplo completo

  • Vamos a añadir lo siguiente a nuestra plantilla
templates/base.html
{% load i18n %}
<!DOCTYPE html>
{% get_current_language as LANGUAGE_CODE %}
{% get_available_languages as LANGUAGES %}

<html lang="{{ LANGUAGE_CODE }}">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{% block title %}Translate Projects{% endblock %}</title>
</head>
<body>

{% comment %} Formulario basico para cambiar idioma {% endcomment %}
<form method="post" action="{% url 'set_language' %}">
{% csrf_token %}

{% for code, name in LANGUAGES %}
<input
type="radio"
name="language"
value="{{ code }}"
{% if code == LANGUAGE_CODE %}checked{% endif %}
>
{{ name }}

{% endfor %}
<input type="submit" value="Submit">
</form>

{% comment %} Traducciones {% endcomment %}
<h1>{% trans "Mi primera traducción" %}</h1>

<h2>{% trans "Este es un texto traducido, siguenos en YouTube!" %}</h2>

</body>
</html>

Ejecutamos la creación de traducciones

Ejecutamos la creación de traducciones para que nuestras traducciones se realicen.

Terminal
python manage.py translate

Si todo está correcto, deberías ver algo como esto nuevamente.

Ejecutar traducciones

Resultado de nuestras traducciones

Este seria nuestro resultado de nuestra web

Resultado traducciones