我正在尝试翻译我的django项目中的应用程序名称,我在网上找到了这个代码:
init.py
from django.utils.translation import gettext_noop
gettext_noop("AppName")
模板
{% trans app.name %}
然而在django的当前版本中存在这个代码,所以我想在django 1.3中已经有了这样做的方法,(上面的代码是从2008开始)..请告知如何将名称转换为翻译文件< / p>
{% for app in app_list %}
{% blocktrans with app.name as name %}{{ name }}{% endblocktrans %}
这也告诉我,这应该已经可以了:
django / contrib / admin / sites.py第356行
if app_label in app_dict:
app_dict[app_label]['models'].append(model_dict)
else:
app_dict[app_label] = {
'name': app_label.title(),
'app_url': app_label + '/',
'has_module_perms': has_module_perms,
'models': [model_dict],
}
答案 0 :(得分:0)
关于blocktrans
,你误解了传入的值是如何工作的。如果你有这样的话:
{% blocktrans with foo=bar %}-- {{ foo }} --{% endblocktrans %}
这大致相当于Python中的以下任何一种:
gettext('-- %(foo)s --') % {'foo': bar}
gettext('-- {foo} --').format(foo=bar)
重要的是app.name
不会被翻译。它在翻译后逐字传递。翻译目录中的msgid
将为"-- %(foo)s --"
(因为它将其转换为Python格式以进行翻译查找)。
{% trans app.name %}
可以使用,但它不会将应用名称带到manage.py makemessages
的翻译目录中,因为后者只是扫描代码以静态地计算出那里的内容。如果你在Python代码中执行类似gettext(app.name)
的操作,它将无法确定它应该放在目录中的内容,因为它没有评估代码,只是静态地分析它。
最后的总结是,使用gettext_noop
是使消息显示在翻译目录中的正确方法。 makemessages
并不是为了自己的利益而过于聪明,而是留给你。
与故障单3591相关的是ticket 1668,虽然已经过时,但如果你还没有,你的阅读可能是值得的(你可能已经完成了,因为你遇到了3591)。