我在settings.py中有可用的语言
LANGUAGE_CODE = 'en'
LANGUAGES = (
('fr', _('French')),
('en', _('English')),
)
当我在我的模板中循环时,我认为这是django通过{{lang.1}}给我翻译名称的预期行为。但我不想翻译lang名称,所以我更改了我的settings.py如下:
LANGUAGES = (
('fr', 'Francais'),
('en', 'English'),
)
我仍在翻译lang名字。你有好主意吗? {%get_available_languages as languages%}模板标签会自动翻译列表项吗?如果是这样,我如何在使用可用语言循环时使用未翻译的语言名称?
----编辑---
我已经检查了django的get_available_languages模板标签的代码。 我认为它在这里翻译:
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 ''
也许我必须编写自己的模板标签......
答案 0 :(得分:2)
没有黑客,这一次
根据translation documentation,您可以在模板或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 }}
可以与其他标签结合使用,并建立一种机制,允许您change languages:
{% 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 %}
在this thread中,在视图中实现了相同的结果。
否则,您可以在代码中使用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'),例如它可以工作并将'test'作为 预期
谢谢!这个想法提出了以下解决方案 hack:
LANGUAGES = (
('fr', 'Francais'),
('en', ' English'),
)
注意在英文单词之前添加的空格。
答案 1 :(得分:0)
我遇到了同样的问题(希望将语言名称翻译成自己的译文),并在将其传递给模板之前在视图中重新定义了语言变量:
from django.utils.translation import get_language_info
languages = [(lang[0], get_language_info(lang[0])['name_local'] for lang in settings.LANGUAGES]
基本上可以快速翻译自己的翻译中的语言代码和名称,即:
[('en', 'English'), ('fr', 'Français')]
我想同一行将在自定义模板标签中完成这项工作。希望对您有帮助!