/ / Django - Предотвратяване на превод на налични имена на езици в шаблон - django, django-i18n

Django - Предотвратяване на превод на наличните езикови имена в шаблона - django, django-i18n

Имам наличните си езици в settings.py

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

Когато аз цикъл в моя шаблон, мисля, че еочаквано поведение, което django ми дава преведените имена чрез {{lang.1}}. Но не искам имената на lang да бъдат преведени, затова промених настройките си както по-долу:

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

Все още получавам преведени имена на езици. Имате ли идея? Шаблонът за {% get_available_languages ​​като езици%} автоматично превежда елементите от списъка? Ако е така, как мога да използвам преведени имена на езици, докато прелиствам на наличните езици?

---- РЕДАКТИРАНЕ ---

Проверих кода на етикета get_available_languages ​​на django. Мисля, че е преведено тук:

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 ""

Може би трябва да напиша свой собствен маркер на шаблон ...

Отговори:

1 за отговор № 1

Няма хакове, този път

Според документация за превод можете да използвате наличните езикови инструменти или в шаблона или в кода на python.

В шаблона използвайте get_language_info шаблонен маркер:

{% 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 }}

които могат да се комбинират с други тагове и да се изгради механизъм, който ви позволява промяна на езиците:

{% 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 %}

в тази тема същият резултат се постига и в изгледа.

В противен случай можете да използвате get_language_info в кода си, както следва:

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

и да го използвате в контекста на следващия пример:

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

ако пиша ("en", "test"), например работи и дава "тест" като очакван

Благодаря ти! Тази идея доведе до следното решение хак:

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

Обърнете внимание на мястото, добавено преди думата английски.