posts - 431,  comments - 344,  trackbacks - 0
本来估计能找到类似Mete中verbose_name_plural属性去更改app显示名称的,可以只找到一个app_label。但是由于django源码中是这样写的:
    app_dict[app_label] = {
           'name': app_label.title(),
           'app_url': app_label,
           'has_module_perms': has_module_perms,
           'models': [model_dict],
   }
这里的app_label.title()不明白从哪来的title方法,但由于app_url的值也是根据app_label生成的。所以这样就会出现如下问题:
假如我的app名字叫books,原来生成的连接为/projectname/books/,而在Meta中设置app_label="书籍"以后,连接就变为/projectname/书籍/。
所以这种方法行不通,然而查看到admin模板中的index.html中的代码为:
<a href="{{ app.app_url }}" class="section">{% blocktrans with app.name as name %}{{ name }}{% endblocktrans %}</a>
所以可以考虑i18n去翻译app的名称,添加资源文件project/locale/zh_CN/LC_MESSAGES/django.po
尝试以后还是不行(注:我这里的django版本为1.0),这里我使用trans标签测试i18n是起作用的。估计是blocktrans有问题(有待查看)。
改为一下形式就可以了:
<a href="{{ app.app_url }}" class="section">{% trans app.name %}</a>
当然自己一个filter也可以的,测试玩玩。代码如下:

from django import template
from django.utils.translation import gettext as _
register = template.Library()
@register.filter
def transto(value):
    return _(value)


修改上面的代码为:
<a href="{{ app.app_url }}" class="section">{{ app.name|transto }}</a>

现在一切ok了。
posted on 2008-12-12 22:22 周锐 阅读(3299) 评论(7)  编辑  收藏 所属分类: Python