国际化
(国际化主要是程序员的工作,在代码和模板中留下msg)
在代码中
from django.utils.translation import ugettext as _
result = _(u'Invalid Captcha')
在模板中
在模板中翻译字符串,可能是填充模板,也可能时Ajax接口返回结果.可使用Django templates的这两个tags: trans
和 blocktrans
. 其中blocktrans
用于混合了字符串和变量的翻译
例如:
<title>{% trans 'This is the title' %}</title>
本地化
(本地化主要是翻译人员的工作)
在app的根目录或整个工程的根目录运行以下两个命令:
Makemessages
django-admin.py makemessages -l zh_CN
这个命令会在locale/zh_CN/LC_MESSAGES/
下创建两个文件:django.mo
(编译好的二进制文件)和 django.po
Compilemessages
django-admin.py compilemessages
1. 如果在代码或模板中增加或山除了相关的国际代码,则重新运行makemessages
和 compilemessages
, 但如果只改了django.po
中的翻译,则只运行 compilemessages
2. 当某个msgid
被标记为fuzzy
时,是因为msgmerge
工具认为这个和之前的相似,msgfmt
会把这个msgid
略过,即这个翻译不会生效. 解决办法: 手动删掉fuzzy
,重新compilemessages
和国际化相关的settings
USE_I18N = True/False
LANGUAGE_CODE =