Django: Eine Kurzanleitung zur Internationalisierung

Die Übersetzung einer Anwendung in verschiedene Sprachen und ihre Lokalisierung ist etwas, mit dem sich alle Entwickler befassen müssen. Das Material, dessen Übersetzung wir heute veröffentlichen, bietet einen kurzen Leitfaden zur Internationalisierung von Django-Anwendungen.

Ein Teil dessen, was hier besprochen wird, gilt für die Lokalisierung von Python-Projekten. Nachdem wir die Grundlagen untersucht haben, werden wir über die Beschleunigung der Internationalisierungsbemühungen sprechen. Insbesondere zur Verwendung der Phrase- Plattform . Es wird davon ausgegangen, dass der Leser dieses Materials über eine funktionierende Django-Anwendung verfügt und dass ein Paket installiert ist (Sie können es beispielsweise mit einem Befehl installieren ). Wenn Sie Django (ein beliebtes Python-basiertes Webframework) noch nicht verwendet haben, ist es möglicherweise hilfreich, dies zuerst zu überprüfen.



gettextpip install gettextoffizieller Leitfaden , und kehren Sie dann zu diesem Artikel zurück.

Grundlegende Einstellungen für die Arbeitsumgebung


Angenommen, Sie haben ein Django-Projekt mysiteund eine Anwendung namens polls. Die Projektstruktur sollte ungefähr so ​​aussehen:

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

Der erste Schritt unserer Arbeit besteht darin, zu überprüfen, ob die Internationalisierungsoption in der Projektkonfiguration aktiviert ist. Dazu müssen Sie folgende Änderungen vornehmen mysite/settings.py:

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

Internationalisierung von Vorlagen


Jetzt müssen Sie alle Zeilen markieren, die in verschiedene Sprachen übersetzt werden sollen. Angenommen, Sie haben die folgende Vorlagendatei polls/templates/polls/index.html:

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

Diese Datei muss wie folgt verarbeitet werden:

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

Hier haben wir ein Paket zur Lokalisierung importiert und den gesamten Text durch Ansichtskonstrukte ersetzt trans 'SomeTranslationKeyName'. Alternativ können Sie alternativ zu diesem Ansatz die Standardübersetzungstexte in Form von Übersetzungsschlüsseln verwenden. Mit diesem Ansatz haben Sie immer einen guten Standardtext, wenn für einen bestimmten Schlüssel keine Übersetzung verfügbar ist.

Internationalisierung im Python-Code


Wenn Sie Zeichenfolgen in Python-Code lokalisieren möchten (z. B. in einer Datei polls/views.py), müssen Sie die Funktion in die Datei importieren ugettext. Sie können ihr einen Alias ​​zuweisen, was ganz normal ist _. So sieht eine lokalisierte Version einer einfachen Funktion aus einer Datei aus 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)

Übersetzungsdateien erstellen


Jetzt müssen wir Übersetzungsdateien für jede Spracheinstellung erstellen, die wir unterstützen möchten. Erstellen Sie dazu ein Verzeichnis polls/localeund pollsführen Sie den folgenden Befehl im Verzeichnis aus :

django-admin makemessage -l de

Hier können deSie den Gebietsschema-Code für die Sprache ersetzen, die Sie der Anwendung hinzufügen möchten. In unserem Beispiel führt die Ausführung dieses Befehls zur Erstellung einer gettext-Datei mit den polls/locale/de/LC_MESSAGES/django.pofolgenden Inhalten:

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

Jetzt können Sie Zeilenvorschübe in diese Datei eingeben:

# 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."

Wenn die Übersetzung fertig ist, müssen Sie alles kompilieren, indem Sie den folgenden Befehl ausführen:

$ django-admin compilemessages

Führen Sie diesen Befehl erneut im Verzeichnis aus polls.

Um die Funktionsfähigkeit der Übersetzung schnell zu überprüfen, müssen Sie den Sprachcode in der Datei ändern mysite/settings.py. Zum Beispiel so:

# mysite/settings.py
LANGUAGE_CODE = 'de'

Wenn Sie die Anwendung jetzt in einem Browser öffnen, muss sie ins Deutsche übersetzt werden.

Beschleunigen Sie die Anwendungslokalisierung mithilfe von Phrase


Wenn Sie Phrase verwenden, um die Arbeit an der Lokalisierung von Anwendungen zu organisieren, müssen Sie * .po-Dateien nicht manuell erstellen und bearbeiten! Sie müssen nur die Schlüssel WelcomeHeadingund WelcomeMessagein der Phrase erstellen und übertragen und die Exportfunktion verwenden, um die * .po-Dateien herunterzuladen.

Wenn Sie unser Befehlszeilentool installiert haben Phrase Client, wird Ihre Arbeit noch weiter vereinfacht. Es reicht aus, eine Konfigurationsdatei im Stammverzeichnis des Projekts .phraseapp.ymlmit folgendem Inhalt zu erstellen :

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

Anschließend müssen Sie den folgenden Befehl im Stammverzeichnis des Projekts ausführen:

phraseapp pull && django-admin compilemessages

Dank dessen werden alle Übersetzungen des Projekts aktualisiert.

Darüber hinaus kann die Verwendung unseres In-Context-Editors in Ihrem Django-Projekt die Arbeit noch weiter vereinfachen . Installieren Sie django-phrasedazu einfach Folgendes pip:

pip install django-phrase

Bearbeiten Sie dann einfach die Vorlagen, mit denen Sie arbeiten möchten In-Context-Editor:

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

Bitte beachten Sie, dass das Laden danach phrase_i18nerfolgen sollte i18n.

Fügen Sie abschließend der Konfigurationsdatei Folgendes hinzu:

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

Danach ist alles bereit zu gehen.

Gebietsschemaauswahl


In der Regel legen Anwendungsentwickler Gebietsschemas basierend auf den Browsereinstellungen des Benutzers fest. Dazu müssen Sie die Datei mysite/settings.pyin das folgende Formular bringen:

# 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')),
)

Wenn der Benutzer bei diesem Ansatz ein Gebietsschema hat German, wird ihm eine Übersetzungsoption angezeigt de. Andernfalls wird die Standardübersetzung verwendet en-us. Sie können den korrekten Betrieb dieses Mechanismus überprüfen, indem Sie curl:

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

Dieser Befehl sollte ungefähr Folgendes zurückgeben:

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

Zusammenfassung


In diesem Artikel haben wir die Grundlagen der Internationalisierung von Django-Anwendungen untersucht. Hier haben wir über den Phrase-Service gesprochen, der die Arbeit beschleunigen und vereinfachen kann. Wir hoffen, dass das, was Sie gelernt haben, für Sie nützlich ist.

Liebe Leser! Wie gehen Sie mit der Internationalisierung Ihrer Python-Projekte um?


All Articles