我正在尝试使用 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' %}
....
从根目录(manage.py在哪里)当我执行“python manage.py makemessages.py en-l”时,我只得到一个django.po,其中包含来自html文件的文本,而不是来自views.py。我也尝试过“python manage.py makemessages.py en-l-e html,py”,但它不起作用。我哪里做错了?
最佳答案
makemessages
在代码中查找非常具体的模式; tra()
不是这些模式之一。
来自 makemessages
command source您可以看到 xgettext 命令行工具被指示查找:
gettext_noop
、gettext_lazy
、ngettext_lazy
、ugettext_noop
、ugettext_lazy
、ungettext_lazy
、pgettext
、npgettext
、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.*
方法或 _()
,此处。
关于python - Django 国际化不起作用(makemessages 找不到 .py 文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21163710/