我正试图用I18N将我的Django网站国际化。当我做makemessages。没有得到view.py文本的位。我做了以下事情:
# my flow
PROJECT
- LOCALE
- MYSITE
- urls.py
- settings.py
- APP1
- views.py
- APP2
- APP3
manage.py
# settings.py
LANGUAGES = (
('it', 'Italiano'),
('en', 'English'),
)
LANGUAGE_CODE = 'it'
USE_I18N = True
LOCALE_PATHS = ('home/project/locale/',)
MIDDLEWARE_CLASSES = ( ...
'django.middleware.locale.LocaleMiddleware',
)
TEMPLATE_CONTEXT_PROCESSORS = (...,
'django.core.context_processors.i18n',
)
# views.py
from django.utils.translation import ugettext as tra
text = tra("this is a text")
...
# template.html
...
{% trans 'Dashboard' %}
....
当我执行“python manage.py makemessages.py en-l”时,从我只得到一个django.po,其中包含来自html文件的文本,而不是来自views.py。我也试过“python manage.py makemessages.py en-l-e html,py”但它不起作用。我在哪里做错了?
答案 0 :(得分:5)
makemessages
在代码中查找非常具体的模式; tra()
不其中一种模式。
从makemessages
command source您可以看到xgettext
命令行工具被指示查找:
gettext_noop
,gettext_lazy
,ngettext_lazy
,ugettext_noop
,ugettext_lazy
,ungettext_lazy
,pgettext
,npgettext
,{{ 1}}和pgettext_lazy
(除npgettext_lazy
可调用之外)。
将您的_()
代码更改为:
views.py
遵循广泛的from django.utils.translation import ugettext as _
text = _("this is a text")
约定,或使用:
gettext
最好坚持原始from django.utils.translation import ugettext
text = ugettext("this is a text")
方法或translation.*
,此处。