2017-11-02 3 views
0

Ich arbeite in einer Django 1.9/python 3.5-Anwendung und versuche, Djangos Übersetzungsprogramm zu verwenden. Ich habe ein Locale-Verzeichnis, das ein 'es' -Verzeichnis für spanische Übersetzungen hat, in denen ich eine .po-Datei erstellt habe. Ich habe es eingerichtet, um ein paar Übersetzungen zu haben, nur um es zu testen.Django Translations funktioniert nicht

msgid "Sign In" 
msgstr "Registrarse" 

msgid "Create an Account" 
msgstr "Crea una cuenta" 

Ich habe meine Einstellung Datei korrekt als auch konfiguriert

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.locale.LocaleMiddleware', 
    'django.middleware.common.CommonMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    'django.middleware.clickjacking.XFrameOptionsMiddleware', 
    'webapp.middleware.LanguageSwitchMiddleware', 
) 

TEMPLATES = [ 
    { 
     'BACKEND': 'django.template.backends.django.DjangoTemplates', 
     'APP_DIRS': True, 
     'DIRS': [os.path.join(BASE_DIR, 'templates'), ], 
     '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', 
       'webapp.context_processors.detail_context', 
       'django.template.context_processors.i18n' 
      ], 
     }, 
    }, 
] 

# Internationalization 
# https://docs.djangoproject.com/en/dev/topics/i18n/ 
LOCALE_PATHS = (
    os.path.join(PROJECT_ROOT, 'locale/'), 
) 

from django.utils.translation import ugettext_lazy as _ 

LANGUAGES = (
    ('en', _('English')), # first language is the default used by modeltranslations 
    ('es', _('Spanish')), 
) 

LANGUAGE_CODE = 'en-us' 

TIME_ZONE = 'America/Chicago' 

USE_I18N = True 

In meiner Vorlage verwende ich die Django ‚trans‘ Template-Tag für die Worte anmelden und ein Konto erstellen. Ein Auswahlfeld bearbeitet den Content-Language-HTTP-Antwortheader von der Anwendung, die ich getestet habe, und es wird erfolgreich ausgeführt. Die Header signieren, und create und account, übersetzen nicht ins Spanische. Gibt es einen Schritt, den ich vermisse?

HTML

{% load i18n %} 

<ul class="list-inline-xxs"> 

    {% if customer %} 
     <li> 
      Welcome, 
      <a href='{% url "customer:dashboard" %}'> 
       {{ customer.first_name }} 
      </a> 
     </li> 
     <li> 
      <a href='{% url "customer:logout" %}'> 
       {% trans 'Logout' %} 
      </a> 
     </li> 
    {% else %} 
     <li> 
      <a href='{% url "customer:login" %}'> 
       {% trans 'Sign In' %} 
      </a> 
     </li> 
     <li> 
      <a href='{% url "subscription:customer-subscribe" %}'> 
       {% trans 'Create an Account' %} 
      </a> 
     </li> 
    {% endif %} 

</ul> 
+0

Alles sieht gut aus. Was hast du in webapp.middleware.LanguageSwitchMiddleware? –

Antwort

1

I have a locale directory which has an 'es' directory for spanish translations that I created a .po file in.

Das ^^^ Linie, die Sie manuell Übersetzungsdateien erstellen lässt. Lassen Sie Django create translation files für Sie:

django-admin makemessages -a 

Dann in Ihre Übersetzungen setzen, die Datei speichern und kompilieren mit

django-admin compilemessages 

Ihre Anwendung neu starten und es sollte funktionieren.

Ich habe zusammen ein einfaches Beispiel, wie Übersetzungen mit Django zu tun: https://github.com/DusanMadar/Django-multilang-demo

EDIT

Wie django django-admin makemessages -h schlägt --ignore PATTERN, -i PATTERN ist, was Sie von Drittanbietern Verzeichnisse verwenden müssen zu ignorieren. So etwas wie django-admin makemessages -a -i 3rdparty_dir

+0

Ich habe es nicht, aber ich habe es nur hinzugefügt, um die Vorlage Konfiguration, und es funktioniert immer noch nicht: (. Ich werde die Frage mit meinen Vorlagen und Middleware-Konfiguration zu aktualisieren. – JBT

+0

Ich habe meine Antwort bearbeitet – dm295

+0

Ahh ich sehe möglicherweise, weil ich sie nicht kompiliert habe, um eine .mo Akte zu erhalten. Wenn ich den django admin Befehl laufen lasse, um die Nachrichten zu kompilieren, erhalte ich diesen Fehler: Kann msgfmt nicht finden. Stellen Sie sicher, dass Sie GNU gettext Werkzeuge 0.15 oder neueres installiert haben – JBT