/ / Django - Verhindert die Übersetzung verfügbarer Sprachennamen in der Vorlage - django, django-i18n

Django - Verhindern der Übersetzung verfügbarer Sprachnamen in Vorlage - django, django-i18n

Ich habe meine verfügbaren Sprachen in settings.py

LANGUAGE_CODE = "en"
LANGUAGES = (
("fr", _("French")),
("en", _("English")),
)

Wenn ich in meiner Vorlage eine Schleife mache, denke ich, dass es das isterwartetes Verhalten, das mir Django über {{lang.1}} die übersetzten Namen gibt. Aber ich möchte nicht, dass Lang-Namen übersetzt werden, also habe ich meine Einstellungen geändert.

LANGUAGES = (
("fr", "Francais"),
("en", "English"),
)

Ich bekomme immer noch Langnamen übersetzt. Haben sie eine Idee? Übersetzt das Vorlagen-Tag {% get_available_languages ​​as languages%} die Listenelemente automatisch? Wenn ja, wie kann ich nicht übersetzte Sprachnamen verwenden, während ich in verfügbaren Sprachen eine Schleife übersetze?

---- BEARBEITEN ---

Ich habe den Code des get_available_languages ​​template-Tags von django überprüft. Ich denke es wird hier übersetzt:

class GetAvailableLanguagesNode(Node):
def __init__(self, variable):
self.variable = variable

def render(self, context):
context[self.variable] = [(k, translation.ugettext(v)) for k, v in settings.LANGUAGES]
return ""

Vielleicht muss ich mein eigenes Template-Tag schreiben ...

Antworten:

1 für die Antwort № 1

Keine Hacks, diesmal

Entsprechend der Übersetzungsdokumentation Sie können die verfügbaren Sprachwerkzeuge entweder in der Vorlage oder im Python-Code verwenden.

In der Vorlage verwenden Sie die get_language_info Vorlagen-Tag:

{% get_language_info for "pl" as lang %}

Language code: {{ lang.code }}<br />
Name of language: {{ lang.name_local }}<br />
Name in English: {{ lang.name }}<br />
Bi-directional: {{ lang.bidi }}
Name in the active language: {{ lang.name_translated }}

die mit anderen Tags kombiniert werden kann und einen Mechanismus aufbaut, der es Ihnen ermöglicht Sprachen wechseln:

{% for lang_code, lang_name in languages %}
{% if lang_code != LANGUAGE_CODE %}
{% get_language_info for lang_code as lang_info %}
{% language lang_code %}
{% url request.resolver_match.url_name as no_slug %}
{% url request.resolver_match.url_name slug=object.slug as yes_slug %}
<p>Link to: {% firstof yes_slug no_slug %} Local name: {{ lang_info.name_local }}</p>
{% endlanguage %}
{% endif %}
{% endfor %}

Im Dieser Thread das gleiche Ergebnis wird in der Ansicht erzielt.

Ansonsten können Sie verwenden get_language_info in Ihrem Code wie folgt:

>>>from django.utils.translation import get_language_info
>>>li = get_language_info("en")
>>>print(li)
{"bidi": False, "code": "en", "name": "English", "name_local": "English"}

und verwenden Sie es im Kontext des folgendes Beispiel:

from django.utils import translation

def welcome_translated(language):
cur_language = translation.get_language()
try:
translation.activate(language)
text = translation.ugettext("welcome")
finally:
translation.activate(cur_language)
return text

wenn ich schreibe ("en", "test"), funktioniert es zum Beispiel und gibt "test" als erwartet

Vielen Dank! Diese Idee brachte folgendes vor Lösung hacken:

LANGUAGES = (
("fr", "Francais"),
("en", " English"),
)

Beachten Sie das Leerzeichen vor dem Wort Englisch.