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 № 1Keine 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.