Имам наличните си езици в 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"),
)
Обърнете внимание на мястото, добавено преди думата английски.