Django国际化不起作用(makemessages没有找到.py文件)

时间:2014-01-16 13:54:18

标签: python django internationalization

我正试图用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”时,从(其中是manage.py)

我只得到一个django.po,其中包含来自html文件的文本,而不是来自views.py。我也试过“python manage.py makemessages.py en-l-e html,py”但它不起作用。我在哪里做错了?

1 个答案:

答案 0 :(得分:5)

makemessages在代码中查找非常具体的模式; tra() 其中一种模式。

makemessages command source您可以看到xgettext命令行工具被指示查找: gettext_noopgettext_lazyngettext_lazyugettext_noopugettext_lazyungettext_lazypgettextnpgettext,{{ 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.*,此处。