2013-05-27 12 views
9

Ich habe Schwierigkeiten bei der Internationalisierung meiner App, daher stelle ich hier ein minimales Beispiel vor, bei dem meine Implementierung fehlschlägt.Django Internationalisierung minimales Beispiel

Betrachten Sie die folgenden Schritte für eine Website in django mit internationalen Unterstützung produzieren:

im Terminal zu Ihrem Lieblingsordner gehen und:

django-admin.py startproject mysite 
cd mysite/ 
mkdir locale 
python manage.py startapp main 
# (1) modify mysite/urls.py 
# (2) modify main/views.py 
# (3) modify mysite/settings.py 
django-admin.py makemessages -l de 
# (4) modify locale/de/LC_MESSAGES/django.po 
django-admin.py compilemessages -l de 
python manage.py runserver 

wo:

## (1) mysite/urls.py 
urlpatterns = patterns('', 
url(r'^$', 'main.views.home'), 
) 

## (2) main/views.py 
from django.http import HttpResponse 
from django.utils.translation import ugettext as _ 

def home(request): 
    return HttpResponse(_('Hello')) 

## (3) mysite/settings.py 
LANGUAGE_CODE = 'de' 

from django.conf import global_settings 
TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS + \ 
    ('django.core.context_processors.i18n',) # ensures all django processors are used. 

## (4) locale/de/LC_MESSAGES/django.po 
#: main/views.py:6 
msgid "Hello" 
msgstr "Hallo" 

Ich gehe davon aus Die Website hat eine und nur eine Sprache, also habe ich nicht die Middleware-Locale vonaktiviert:

Wenn Sie jedes einzelne Benutzer festlegen lassen wollen, welche Sprache er oder sie vorzieht, LocaleMiddleware verwenden. LocaleMiddleware ermöglicht die Auswahl der Sprache anhand von Daten aus der Anfrage. Es passt den Inhalt für jeden Benutzer an.

Diese Implementierung erzeugt nicht die gewünschte Übersetzung von "Hallo" zu "Hallo". Was mache ich falsch?

+0

Wenn Sie auf das Django Admin-Panel zugreifen, ist es auf Deutsch? Haben Sie versucht, 'LOCALE_PATHS' zu setzen? https://docs.djangoproject.com/de/dev/ref/settings/#locale-paths –

+0

@ andrea.ge: von was ich von django Dokumentation verstanden habe, sollten diese die minimalen Schritte zur Übersetzung sein ... Ich habe es versucht LOCAL_PATHS, ohne Erfolg, und ich habe nicht versucht, admin, weil es eine DB erfordert, die ich nicht verwende ... –

+0

Auf welchen Pfad haben Sie 'LOCALE_PATHS' gesetzt? –

Antwort

10

Django sammelt Übersetzungen in diesen drei Möglichkeiten, hier erklärt: https://docs.djangoproject.com/en/dev/topics/i18n/translation/#how-django-discovers-translations

Die Verzeichnisse aufgelistet in LOCALE_PATHS die höchste Priorität haben, mit denen, erscheinen zuerst eine höhere Priorität haben als die, die später erscheinen.

Dann sucht und verwendet es, wenn es ein Gebietsschema-Verzeichnis in jeder der installierten Apps in INSTALLED_APPS aufgeführt ist. Die zuerst erscheinenden haben eine höhere Priorität als die später erscheinenden.

Schließlich wird die von Django bereitgestellte Basisübersetzung in django/conf/locale als Fallback verwendet.

Da Ihre Übersetzungsdatei ist in keiner dieser Orte, die Sie es festlegen müssen manuell LOCALE_PATHS mit wie hier erklärt: https://docs.djangoproject.com/en/dev/ref/settings/#std:setting-LOCALE_PATHS

+0

Vielen Dank und Zeit für die Lösung des Problems! –

+1

das ist, was es für mich repariert: in settings.py fügen Sie hinzu LOCALE_PATHS = ('/ mysite/locale',) – max4ever

21

1º Internationalisierung in settings.py Enable:

USE_I18N = True 

2e Einstellungen:

from django.utils.translation import ugettext_lazy as _

3e Legen Sie die Sprachen, die Sie in settings.py verwenden werden:

LANGUAGES = (
    ('en', _('English')), 
    ('pt-br', _('Portuguese')), 
    ('it', _('Italian')), 
    ('fr', _('French')), 
    ('es', _('Spanish')), 
) 

die LOCALE_PATH in den Einstellungen konfigurieren 3º.py zu:

LOCALE_PATHS = (
    os.path.join(BASE_DIR, 'conf/locale'), 
) 

4º Im Inneren der Pfad, den Sie in LOCALE_PATH konfiguriert, um die Ordner erstellen, zB:

$ cd django_project_folder 
$ mkdir conf 
$ mkdir conf/locale 

den Befehl 5º Run:

django-admin.py makemessages -a 

Es wird eine Datei erstellen .po in einem Unterordner jeder Sprache, die in settings.py eingestellt wurde. LANGUAGES. Machen Sie die Übersetzungen jedes Satzes in der Datei.

Ps: Läuft über den gesamten Quellbaum des aktuellen Verzeichnisses und zieht alle Zeichen heraus, die für die Übersetzung markiert sind.

Für Test, bevor Lauf, legte den Tag

{% trans "Welcome to my project!" %} 

in Ihrem index.html und den Befehl makemessages erneut ausführen. Sie werden sehen, innerhalb de .po einen neuen String-Dateien:

msgid "Welcome to my Project" 
msgstr "" 

6º Nun führen Sie den Befehl:

django-admin compilemessages 

Es werden alle msgstr von .po-Datei sammeln und in einer .mo kompilieren Datei

das Projekt 7º starten und Test

8ª plus: Wenn Sie möchten, dass in URL zeigen, welche Sprache der Benutzer verwenden Sie Ihre url.py konfigurieren können, um zeigen:

urlpatterns += i18n_patterns(
    # your urls here, 
) 
+0

Nach dem Hinzufügen von URL-Muster in urls.py beginnt es Seite nicht gefunden Fehler zu zeigen. –

+0

Das gleiche Problem für mich. Ich öffnete [eine Frage] (https://stackoverflow.com/questions/44502117/url-rendered-as-home-page-after-internationalization) – J0ANMM

Verwandte Themen