Django: una guía rápida para la internacionalización

La traducción de una aplicación a diferentes idiomas y su localización es algo con lo que todos los desarrolladores tienen que lidiar. El material, cuya traducción publicamos hoy, proporciona una breve guía sobre la internacionalización de las aplicaciones de Django.

Parte de lo que se discutirá aquí se aplica a la localización de cualquier proyecto de Python. Tras examinar los conceptos básicos, hablaremos sobre la aceleración de los esfuerzos de internacionalización. En particular, sobre el uso de la plataforma Frase . Se supone que el lector de este material tiene una aplicación Django en funcionamiento y que tiene un paquete instalado (puede instalarlo, por ejemplo, con un comando ). Si no ha usado Django (un popular marco web basado en Python) antes, puede ser útil que le eche un vistazo a esto primero.



gettextpip install gettextguía oficial , y luego volver a este artículo.

Configuración básica del entorno de trabajo.


Entonces, suponga que tiene un proyecto Django mysitey una aplicación llamada polls. La estructura del proyecto debería verse así:

/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        wsgi.py
    polls/
        migrations/
        __init__.py
        admin.py
        models.py
        tests.py
        views.py

El primer paso de nuestro trabajo es verificar si la opción de internacionalización está activada en la configuración del proyecto. Para hacer esto, debe realizar los siguientes cambios en mysite/settings.py:

# mysite/settings.py
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True

Internacionalización de plantillas.


Ahora debe marcar todas las líneas que deben traducirse a diferentes idiomas. Supongamos que tiene el siguiente archivo de plantilla polls/templates/polls/index.html:

<!-- polls/templates/polls/index.html -->
<h1>Welcome to our site!</h1>
<p>Here you find polls.</p>

Este archivo debe procesarse de la siguiente manera:

<!-- polls/templates/polls/index.html -->
{% load i18n %}
<h1>{% trans 'WelcomeHeading' %}</h1>
<p>{% trans 'WelcomeMessage' %}</p>

Aquí importamos un paquete para localización y reemplazamos todo el texto con construcciones de vista trans 'SomeTranslationKeyName'. Además, como alternativa a este enfoque, puede utilizar los textos de traducción utilizados de forma predeterminada en forma de claves de traducción. Con este enfoque, siempre tendrá un buen texto predeterminado si no hay traducción disponible para una determinada clave.

Internacionalización en código Python


Si desea localizar cadenas dentro del código de Python (por ejemplo, en un archivo polls/views.py), debe importar la función en el archivo ugettext. A ella, que es bastante normal, puede asignarle un alias _. Así se verá una versión localizada de una función simple de un archivo views.py:

# polls/views.py
from django.http import HttpResponse
from django.utils.translation import ugettext as _
def index(request):
    output = _('StatusMsg')
    return HttpResponse(output)

Crear archivos de traducción


Ahora necesitamos crear archivos de traducción para cada configuración de idioma que queramos admitir. Para hacer esto, cree un directorio polls/localey pollsejecute el siguiente comando en el directorio :

django-admin makemessage -l de

Aquí depuede reemplazar el código de configuración regional para el idioma que planea agregar a la aplicación. En nuestro ejemplo, la ejecución de este comando conducirá a la creación de un gettextarchivo con los polls/locale/de/LC_MESSAGES/django.posiguientes contenidos:

# polls/locale/de/LC_MESSAGES/django.po
...
#: templates/polls/index.html:3
msgid "WelcomeHeading"
msgstr ""
#: templates/polls/index.html:4
msgid "WelcomeMessage"
msgstr ""

Ahora puede ingresar saltos de línea en este archivo:

# polls/locale/de/LC_MESSAGES/django.po
...
#: templates/polls/index.html:3
msgid "WelcomeHeading"
msgstr "Willkommen auf unserer Seite!"
#: templates/polls/index.html:4
msgid "WelcomeMessage"
msgstr "Hier findet Ihr Umfragen."

Cuando la traducción esté lista, debe compilar todo ejecutando el siguiente comando:

$ django-admin compilemessages

Ejecute este comando nuevamente, en el directorio polls.

Para verificar rápidamente la operatividad de la traducción, debe cambiar el código de idioma en el archivo mysite/settings.py. Por ejemplo, así:

# mysite/settings.py
LANGUAGE_CODE = 'de'

Si ahora abre la aplicación en un navegador, debe traducirse al alemán.

Acelere la localización de aplicaciones usando Frase


Si usa Frase para organizar el trabajo en la localización de aplicaciones, ¡realmente no necesita crear y editar manualmente archivos * .po! Solo necesita crear y transferir las claves WelcomeHeadingy WelcomeMessageen la Frase y usar la función de exportación para descargar los archivos * .po.

Si tiene instalada nuestra herramienta de línea de comandos Phrase Client, su trabajo se simplifica aún más. Es suficiente crear un archivo de configuración en el directorio raíz del proyecto .phraseapp.ymlcon los siguientes contenidos:

# .phraseapp.yml
phraseapp:
  access_token: <your access token>
  project_id: <your project's id on PhraseApp>
  file_format: po
  pull:
    targets:
        file: "polls/locale/<locale_code>/LC_MESSAGES/django.po

Luego debe ejecutar el siguiente comando en el directorio raíz del proyecto:

phraseapp pull && django-admin compilemessages

Gracias a esto, se actualizarán todas las traducciones del proyecto.

Además, el uso de nuestro editor en contexto en su proyecto Django puede simplificar aún más el trabajo . Para hacer esto, simplemente instale django-phraseusando pip:

pip install django-phrase

Luego solo edite las plantillas cuando trabaje con las que planea usar In-Context-Editor:

<!-- polls/templates/polls/index.html -->
{% load i18n %}
{% load phrase_i18n %}
{% phrase_javascript %}
<h1>{% trans 'WelcomeHeading' %}</h1>
<p>{% trans 'WelcomeMessage' %}</p>

Tenga en cuenta que la carga phrase_i18ndebe hacerse después i18n.

Finalmente, agregue lo siguiente al archivo de configuración:

# mysite/settings.py
PHRASE_ENABLED = True
PHRASE_PROJECT_ID = 'YOUR_PROJECT_ID'
PHRASE_PREFIX = '{{__'
PHRASE_SUFFIX = '__}}'

Después de eso, todo estará listo para funcionar.

Selección de local


Por lo general, los desarrolladores de aplicaciones establecen configuraciones regionales basadas en la configuración del navegador del usuario. Para hacer esto, debe llevar el archivo mysite/settings.pyal siguiente formulario:

# mysite/settings.py
from django.utils.translation import ugettext_lazy as _
...
MIDDLEWARE_CLASSES = (
    ...,
    'django.middleware.locale.LocaleMiddleware',
    ...,
)
...
LANGUAGE_CODE = 'en-us'
LANGUAGES = (
    ('en-us', _('English')),
    ('de', _('German')),
)

Con este enfoque, si el usuario tiene una configuración regional German, verá una opción de traducción de. De lo contrario, se utilizará la traducción predeterminada en-us. Puede verificar el funcionamiento correcto de este mecanismo usando curl:

curl http://localhost:8000/polls -H "Accept-Language: de"

Este comando debería devolver algo como lo siguiente:

<h1>Willkommen auf unserer Seite!</h1>
<p>Hier findet Ihr Umfragen.</p>

Resumen


En este artículo, examinamos los conceptos básicos de la internacionalización de las aplicaciones de Django. Aquí hablamos sobre el servicio de frases, que puede acelerar y simplificar el trabajo. Esperamos que lo que haya aprendido le sea útil.

¡Queridos lectores! ¿Cómo aborda la internacionalización de sus proyectos de Python?


All Articles