Djangoのローカライズがうまくいかない
公式ドキュメントを参考にしてDjangoでローカライズを行おうとしております。
https://docs.djangoproject.com/en/1.6/topics/i18n/translation/#the-set-language-redirect-view
urls.pyに
(r'^localize/', welcome_translated),
を追加。
settings.pyには
MIDDLEWARE_CLASSES = (
'django.middleware.locale.LocaleMiddleware', # localize
のように追加。
さらにこれらはどちらもTrueにしました。
USE_I18N = True
USE_L10N = True
更に、今回使うjaの設定方法がドキュメントによって違うので
from django.utils.translation import ugettext_lazy as _
LANGUAGES = (
('ja', _('Japanese')),
('en', _('English')),
)
も
gettext = lambda s: s
LANGUAGES = (
('ja', gettext('Japanese')),
('en', gettext('English')),
)
を両方試しました。※違いがわかりません。
views.pyには、先ほどのurls.pyから呼ばれる最小限の以下のコードを追加しました。
from django.http import HttpResponse
from django.utils.translation import get_language, activate, ugettext_lazy as _
def welcome_translated(request):
language = 'ja'
cur_language = get_language()
try:
activate(language)
text = _("login")
finally:
activate(cur_language)
return HttpResponse(text) # これがきちんとログインと出るべき
直打ちで'ja'をactivateしており、
locale/ja/LC_MESSAGES/django.po
もあり、
msgid "login"
msgstr "ログイン"
のように設定しています。
しかしながら、Webブラウザでは「login」が表示されてしまいます。
「ログイン」が出るはずです。
しかし、テンプレートでも
{% load i18n %}
{% trans "title" %}
とやっても一向に「ログイン」が表示されません。
ドキュメントの例には、
Calling this function with the value ‘de’ will give you "Willkommen"
とあったので、そもそもdjango.poに自分で設定するものではなく、何らかの形で自動的に変換するものかと思い、
'de'を設定して、「welcome」にしたら、ドイツ語の「Willkommen」が表示されるのかと思いましたが、「welcome」がそのまま表示されてしまいました。
なぜでしょうか?
ご教授よろしくお願いします。