2010-04-14 9 views
13

Ich habe ein Problem mit Django-Übersetzungen.django Internationalisierung und Übersetzungen Ausgabe

Problem 1 - Ich aktualisierte Zeichenfolge in django.po-Datei, aber die Änderung wird nicht auf der Webseite angezeigt.

Problem 2 - Ich habe meine eigene Locale-Datei mit django-admin.py Makemessages -l et erstellt, fügte die Übersetzung Zeichenfolge in Datei, aber sie auch nicht auf der Seite erscheinen.

Ich glaube nicht, dass dies ein Problem darstellt, weil die Übersetzungen von django.po Datei auf der Website erscheinen, nur die Änderungen und die Übersetzungen aus meiner eigenen erzeugten Datei, die nicht erscheinen.

Edit: Mein settings.py enthält diese:

gettext = lambda s: s 
LANGUAGE_CODE = 'et' 

LANGUAGES = (
      ('et', gettext('Estonian')), 
      ) 

sind meine eigenen locale Dateien in

/path/to/project/locale/et/LC_MESSAGES/ 

und die Dateien sind

django.mo und django.po

Die Datei, auf die ich in Problem 1 Bezug nehme, ist django own et transaltion, die ich geändert.

+0

Sind Sie bereit das Dokument über [i18n] (http://docs.djangoproject.com/en/1.1/topics/i18n/internationalization/#topics-i18n-internationalization)? Ich vermute, aber aktivieren Sie i18n-Tag in Vorlagen? Sind Sie sicher, dass Ihre .po-Datei im richtigen Pfad ist? Können Sie weitere Informationen schreiben? – diegueus9

+0

Nun ja. i18n ist in Vorlagen mit {% load i18n%} aktiviert. Da die Datei django.po im richtigen Pfad ist (Problem 1), denke ich nicht, dass es das Problem ist, entweder i18n zu aktivieren oder zu laden. Da wie gesagt - vorhandene Übersetzungen werden in Template geladen. Aber woher weiß ich, ob das Problem 2 Locale-Dateien an der richtigen Stelle sind? Sie sind an der Stelle, wo sie erzeugt wurden von django-admin.py makemessages -l et –

+0

lesen Sie diese: http://docs.djangoproject.com/en/1/1/topics/i18n/localization/#message-files die Pfad wird sein: Ihr_Projekt/locale/et/LC_MESSAGES/django.po. – diegueus9

Antwort

25

Nun, ich habe diesen gleichen Fehler vor ein paar Minuten. Ich löste es, indem ich das "#, fuzzy" -Tag über die Übersetzungszeichenfolgen in meinen django.po-Dateien löschte. Es scheint, dass übersetzter Text nicht geliefert wird, wenn er dieses Tag hat, also überzeuge dich, den Text zu übersetzen und dann diese Zeile zu löschen. Hier

ist ein Beispiel für einen übersetzten Text nicht Server auf einer po-Datei:

 #: course/models.py:13 
    #, fuzzy 
    msgid "code" 
    msgstr "código" 

Also, nur die Flagge löschen und lassen Sie es wie folgt aus:

 #: course/models.py:13 
    msgid "code" 
    msgstr "código" 

Ich hoffe, diese Arbeit für Sie. Viel Glück!

Referenz: http://share-experiences.com/blog/what-fuzzy-means-python-django-gettext/

PD: Ich weiß, dass Sie dieses Problem vor ein paar Monaten bekam, aber ich lasse diese Antwort auf Grund, dass wir Sie noch nie gehört, wenn Sie dieses Problem gelöst habe.

+4

zog ich auch ein paar meiner Haare wegen dieser "Fuzzies" :) –

+1

Nun, das hat nicht für mich funktioniert. Django arbeitet momentan auf eine mysteriöse Art und Weise :( – shailenTJ

+0

Ugh! Ich habe gerade eine halbe Stunde damit verbracht, es herauszufinden und es war so verdammt unscharf. – 3cheesewheel

-2

Auf die Einstellung USE_I18N prüfen. More info. Wie auch immer, ich denke standardmäßig ist es True ...

7

Übersetzungsdateien (PO) werden nur einmal in den Speicher geladen, Änderungen an den PO-Dateien werden nicht von Django übernommen. Um die neuen Übersetzungsdateien zu laden, müssen Sie Django neu starten (zB stop/start runserver, Apache oder NGINX).

+0

Dass du den django Server neu starten musst, ist auch meine Erfahrung, aber es ist seltsam, dass es nirgends in der Dokumentation erwähnt wird. – qff

12

Hatte ein ähnliches/ähnliches Problem mit Übersetzungen nicht angezeigt. die LOCALE_PATHS Einstellung das Problem behoben:

# settings.py 
USE_I18N = True 
USE_L10N = True 

LOCALE_PATHS = (
    '/path/to/djangoapp/locale', 
) 
+0

Hmm yeah django hat 4 große Upgrades erhalten, seit ich die Frage gepostet habe. Locale-Pfade sind in der Tat eine der Korrekturen für Übersetzungen Problem und sie wurden in Django 1.4 hinzugefügt ich denke. –

+2

Noch besser würde ich empfehlen 'os.path.join (BASE_DIR, 'locale'),'. ** Do not ** Verwenden Sie relative Pfade, obwohl sie in Dev arbeiten, sie funktionieren möglicherweise nicht live, abhängig vom Server usw. Ich habe das auf die harte Tour gelernt. – Wtower

0

Stellen Sie sicher, verwenden ugettext_lazy und ugettext nicht

0

Wenn Sie gettext.translation werden mit den Übersetzungen zu bekommen, i.e:

text_de = gettext.translation('django', locale_dir, ['de'], fallback=True).ugettext('Welcome to my site') 

... und Ihre Übersetzung arbeitet auf dem Entwicklungsserver, aber nicht auf die Produktion, dass locale_dir beachten Sie zu Ihrem lokalen Verzeichnis verweisen. Es könnte sich irgendwo anders auf einem der Systeme befinden. Verbrachte wie 2 Stunden es zu finden.

1

Ein weiterer Grund dafür, dass Django-Übersetzungen nicht funktionieren, besteht darin, die .po-Datei mit einer anderen Python-Version zu kompilieren, als sie für die Ausführung Ihrer Anwendung verwendet wird. Stellen Sie sicher, dass Sie dieselbe Version verwenden.

Verwandte Themen