3 Stimmen

Datenbank-Lokalisierung in Django

Ich verwende .mo Dateien für die Lokalisierung in Django. Außerdem speichere ich in meiner Datenbank einige übersetzte Texte in verschiedenen Feldern, wie zum Beispiel:

name_en, name_es, name_de (sie sind alle Spalten in jeder Zeile).

Was ist die beste Methode, um das richtige Feld in einer Vorlage auszuwählen?

d.h.: {{ name.some_method }} wird die korrekte Übersetzung auf der Grundlage der aktuellen Lokalisierung erstellt.

Danke,

Meit

3voto

Edgars Roze Punkte 116

Sie sollten sich ansehen http://goodcode.io/articles/django-multilanguage/ Hier ist eine einfache Lösung, die für Ihren Anwendungsfall geeignet und leicht zu implementieren und zu verstehen ist.

1voto

Etienne Punkte 11992

Sie sollten sich ansehen Django Transmeta Es funktioniert auf die gleiche Weise wie das, was Sie getan haben (DB-Felder mit Sprachcode), aber es ist eine vollständigere Lösung. Es ist bereits mit der Vorlage Zeug, etc.

Sie können prüfen Modell Internationalisierung y Django-Pakete für weitere Informationen und Ideen in diesem Bereich.

0voto

FallenAngel Punkte 17178

Ich sehe zwei Methoden, um dies zu tun, eine in Ihrer Ansicht und die andere in der Vorlage...

  1. Im Blick:

Wahrscheinlich bewahren Sie die Informationen über die Benutzersprache irgendwo so auf,

user_lang = 'es'
obj = Somemodel.objects.get(pk=123434)
obj.local_name = getattr(obj, 'name_%s'%user_lang)

Also, Sie halten lokale Übersetzung in einer bestimmten Variable der Instanz und in Ihrer Vorlage können Sie verwenden, ist als:

{{obj.local_name}}

Dies kann jedoch kostspielig sein, wenn Sie der Vorlage ein Queryset anstelle einer einzelnen Instanz übergeben möchten. Bei einer solchen Verwendung müssen Sie diesen Wert für jedes Objekt in Ihrem Queryset auswerten.

  1. In der Vorlage:

Das ist eine komplexere Art, das Problem in der Vorlage zu lösen...

Definieren Sie eine Template-Tag und übergeben Sie object_id und lokale Sprachinformationen und holen Sie den übersetzten Text mit einer ähnlichen getattr Funktion. Wenn Sie diese Funktion jedoch für mehr als ein Modell verwenden möchten, müssen Sie wahrscheinlich eine Informationen zum Inhaltstyp auch für Ihr Template-Tag, wie z. B:

{% get_translation <object_id> <content_type_id> <local_language> %}

Und in Ihrer Vorlage Tag-Funktion, tun etwas wie:

from django.contrib.contenttypes.models import ContentType

....
cont_obj = Content_type.objects.get_for_id(<cotent_type_id>) #get the related model 
obj = cont_obj.get_object_for_this_type(pk=<object_id>) # get your object 
return getattr(obj, 'name_%s'%<local_language>)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X