2017-12-30 5 views
1

Ich möchte lernen, wie man eine OpenSource-E-Commerce-Site baut. Zu diesem Zweck verwende ich das 'Django'-Framework mit der Erweiterung' Oscar '.Übersetzen 'Django-Oscar'

Ich lese das ganze Tutorial hier: https://django-oscar.readthedocs.io/en/releases-1.5/index.html, wo es ein Tutorial gibt. Ich folgte ihm (muss sagen, dass es Schritte fehlt). Dieser Teil sagt, dass, um eine Seite zu übersetzen Sie zwei Ordner und einen symbolischen Link erstellen müssen:

mkdir locale i18n 
ln -s $PATH_TO_OSCAR i18n/oscar 

Dann Sie für jede Sprache übersetzen:

./manage.py makemessages --symlinks --locale=<language code> 

Das ist richtig aber außer das, müssen Sie .po Dateien kompilieren, um die endgültige Übertragung in locale Ordner (.mo Dateien) zu erhalten. Danach müssen Sie die Traductions in settings.py des Projekts (oder der App) einfügen. Dies wird mit dem folgenden Code getan:

  • Im Terminal (aus Stammverzeichnis des Projektes): $ django-admin.py compilemessages
  • In settings.py add:

    TON = [ ('de', _ ('Deutsch ')), (' en‘, _ ('Englisch')), ('es', _ ('Spanisch')), ]

(Hinweis: Dies ist mein Fall, wo ich das Geschäft in Deutsch, Spanisch und Englisch übersetzen möchte)

Danach mache ich meinen Server und nur diese drei Sprachen erscheinen in der Select Language Box, aber wenn ich drücken Sie die Taste, um die Seite zu übersetzen, es gibt die Standardsprache (Englisch) jedes Mal, diese Petition in jeder Übersetzung bekommen:

"POST /i18n/setlang/ HTTP/1.1" 302 0 
"GET/HTTP/1.1" 200 8379 

gibt es einen Schritt ich das Überspringen oder alles, was ich falsch tue ?

Vielen Dank im Voraus.

Antwort

1

Ich habe eine teilweise (fast vollständige) Lösung. Aufgrund der Sprachen, die ich verwenden möchte, sind sehr verbreitet, habe ich Django Übersetzungs-Middleware direkt verwendet, ohne den einen Oscar zu verwenden. Also, meine Lösung ist 10 zu bearbeiten, indem Sie in MIDDLEWARE (oder in MIDDLEWARE_CLASES abhängig von Django Version) die Django Internacionalization Middleware: django.middleware.locale.LocaleMiddleware.

Danach, ohne Import ugettext (from django.utils.translation import ugettext as _), können Sie Sprachen hinzufügen wie folgt:

LANGUAGES = [ 
    ('es', 'Spanish'), 
    ('de', 'German'), 
    ('en', 'English'), 
    ('pt-br', 'Brazilian'), 
    #... and so on 
] 

Diese Lösung keine symbolischen Links oder zusätzliche Ordner erstellen muss.