0

Ich bin neu in Django und ich liebe es bisher vor allem seine nette Gemeinschaft. Hier ist meine Frage: Ich habe dieses Modell habendjango: Sprachbewusste Drop-Down

class Nationality(models.Model): 
    nationality_fr = models.CharField(max_length=50) 
    nationality_en = models.CharField(max_length=50) 
    show_flag = models.BooleanField() 
    display_order = models.PositiveSmallIntegerField() 

    def __str__(self): 
    return self.nationality_fr 

Ich möchte das ändern __ str __ Funktion zurückzukehren nationality_fr, wenn die Sprache ausgewählt (durch den Benutzer) ist „fr“ und language_de, wenn die gewählte Sprache ist "en". Der Grund, warum ich das brauche, ist, weil ich ein Drop-Down-Fenster für die Auswahl der Nationalitäten für den Benutzer zeige und er/sie sollte die Auswahlmöglichkeiten in seiner/ihrer Sprache sehen. Was ist der beste Weg, damit umzugehen?

Hinweis: Ich weiß, dass es eine nette App für Länder gibt, aber ich sollte in der Lage sein, das für andere Szenarien als dieses Länderszenario zu tun.

+0

Nur aus Neugier, was speichern Sie eigentlich in den zwei Nationalitätenfeldern? (Was ich entziehen, ist, warum verwenden Sie nicht nur die Internationalisierungsmethoden?) – Sayse

+0

Hallo @Sayse, schön von Ihnen wieder zu hören. Ich werde den Namen des Landes in Englisch und Französisch speichern. Können Sie bitte erläutern, wie Sie i18n-Methoden verwenden, um dies zu lösen? –

Antwort

0

Nach einigen Recherchen fand ich die Lösung: django.utils.translation.get_language(). Es gibt die im aktuellen Thread verwendete Sprache zurück und Sie können es in Modellen wie diesem verwenden:

from django.utils import translation 

@property 
def nationality(self): 
    lang = translation.get_language() 
    if lang == "fr": 
     return self.nationality_fr 
    else: 
     return self.nationality_en 

def __str__(self): 
    return self.nationality 
0

Die einfachste Methode ist get_language(), die die Sprache im aktuellen Thread basierend auf settings.LANGUAGE_CODE Einstellung angibt.

from django.utils.translation import get_language 

def __str__(self): 
    if get_language().startswith('fr'): 
     return self.nationality_fr 
    else: 
     return self.nationality_en 

Wenn Sie lassen gesetzt Django die Sprache dynamisch, basierend auf Anfrage Parameter wie URL-Teilzeichen oder Browser-Header verwenden django.utils.translation.get_language_from_request statt (seit Django 1.8). See docs here

+0

Ja ich möchte die Sprache von Anfrage nicht von Einstellungen verwenden. Jetzt ist das Problem, wie würde ich die Anfrage von innerhalb der Modelldefinition bekommen? –