5 python django translation gettext
来自Django文档:
如果您定义自定义
LANGUAGES设置,可以将语言标记为翻译字符串(如上面显示的默认值) - 但使用"虚拟"gettext()功能,而不是使用"虚拟" 功能django.utils.translation.您永远不应该django.utils.translation从您的设置文件中导入 ,因为该模块本身取决于设置,这将导致循环导入.解决方案是使用"虚拟"gettext()功能.这是一个示例设置文件:
gettext = lambda s: s LANGUAGES = (('de', gettext('German')),('en', gettext('English')),)通过这种安排,
django-admin.py makemessages仍然可以找到并标记这些字符串以进行转换,但转换不会在运行时发生 - 因此您必须记住在运行时gettext()使用的任何代码中 包装真实语言LANGUAGES.
将语言包装成真实意味着什么gettext()?如何在代码中调用它?
根据最新的文档,您可以ugettext_lazy在设置中使用而不会导致循环导入:
from django.utils.translation import ugettext_lazy as _
LANGUAGES = [
('de', _('German')),
('en', _('English')),
]
Run Code Online (Sandbox Code Playgroud)
正如它所说:当您实际使用语言名称或向用户显示它们时,对语言名称调用 gettext() :
from django.utils.translation import ugettext
for lang_code, lang_name in settings.LANGUAGES:
translated_name = ugettext(lang_name)
...
Run Code Online (Sandbox Code Playgroud)
(通常应该使用 ugettext 而不是 gettext,因为 Django 中的所有文本都是 unicode。)
要在模板中执行等效操作,只需使用 {% blocktrans %} 标记,该标记仅在幕后调用 ugettext:
{% for lang in LANGUAGES %}
{% blocktrans %}{{ lang.1 }}{% endblocktrans %}
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4649 次 |
| 最近记录: |