【发布时间】:2012-12-29 14:01:12
【问题描述】:
我正在建立一个新的小项目,在 Django 1.4.3(英语和荷兰语)中尝试 i18n。但我认为我错过了一步,因为它没有翻译字符串。
谁能告诉我我需要做什么才能获得翻译后的字符串?如何调试?
settings.py:
gettext = lambda s: s
LANGUAGES = (
('nl', gettext('Dutch')),
('en', gettext('English')),
)
LOCALE_PATH= (
'/var/www/test/locale',
)
# django.middleware.locale.LocaleMiddleware is also included @ MIDDLEWARE_CLASSES
urls.py 文件:
urlpatterns = i18n_patterns('',
#home
url(r'^$','bday.views.home',name="index"),
)
views.py 在项目中:
from django.utils.translation import ugettext as _
def home(request):
text=_("Welcome!")
return HttpResponse("LANG[{}], TEXT[{}]".format( request.LANGUAGE_CODE, text ) )
/var/www/test/locale/nl/LC_MESSAGES/django.po
#: bday/views.py:16
msgid "Welcome!"
msgstr "Welkon in Nederlands"
/var/www/test/locale/en/LC_MESSAGES/django.po
#: bday/views.py:16
msgid "Welcome!"
msgstr "Welcome in English"
消息确实被编译了,我明白了:
./manage.py compilemessages
processing file django.po in /var/www/test/locale/nl/LC_MESSAGES
processing file django.po in /var/www/test/locale/en/LC_MESSAGES
但在我的应用中,我得到:
$ curl "http://www.host.com:8000/nl/"
LANG[nl], TEXT[Welcome!]
$ curl "http://www.host.com:8000/en/"
LANG[en], TEXT[Welcome!]
【问题讨论】:
-
您需要使用 django.utils.translation.activate 设置实际语言
-
感谢您的回复。我认为这是由 urlconf 自动完成的。将其添加到代码中(直接在导入之后)不会改变任何内容。
-
$ mv locale{,old}/ $ mkdir locale $ ./manage.py makemessages -l en $ vim locale/en/LC_MESSAGES/django.po $ ./manage.py compilemessages 没有变化
标签: django internationalization gettext