5999


公式ドキュメントを参考にしてDjangoでローカライズを行おうとしております。

<https://docs.djangoproject.com/en/1.6/topics/i18n/translation/#the-set-
language-redirect-view>

**urls.py** に

[code]

    (r'^localize/', welcome_translated),
    
[/code]

を追加。

**settings.py** には

[code]

    MIDDLEWARE_CLASSES = (
        'django.middleware.locale.LocaleMiddleware', # localize
    
[/code]

のように追加。

さらにこれらはどちらもTrueにしました。

[code]

    USE_I18N = True
    USE_L10N = True
    
[/code]

更に、今回使うjaの設定方法がドキュメントによって違うので

[code]

    from django.utils.translation import ugettext_lazy as _
    
    LANGUAGES = (
        ('ja', _('Japanese')),
        ('en', _('English')),
    )
    
[/code]

も

[code]

    gettext = lambda s: s
    LANGUAGES = (
        ('ja', gettext('Japanese')),
        ('en', gettext('English')),
    )
    
[/code]

を両方試しました。※違いがわかりません。

**views.py** には、先ほどのurls.pyから呼ばれる最小限の以下のコードを追加しました。

[code]

    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) # これがきちんとログインと出るべき
    
[/code]

直打ちで'ja'をactivateしており、

[code]

    locale/ja/LC_MESSAGES/django.po
    
[/code]

もあり、

[code]

    msgid "login"
    msgstr "ログイン"
    
[/code]

のように設定しています。

しかしながら、Webブラウザでは「login」が表示されてしまいます。  
「ログイン」が出るはずです。

しかし、テンプレートでも

[code]

    {% load i18n %}
    {% trans "title" %}
    
[/code]

とやっても一向に「ログイン」が表示されません。

ドキュメントの例には、

> Calling this function with the value ‘de’ will give you "Willkommen"

とあったので、そもそもdjango.poに自分で設定するものではなく、何らかの形で自動的に変換するものかと思い、

'de'を設定して、「welcome」にしたら、ドイツ語の「Willkommen」が表示されるのかと思いましたが、「welcome」がそのまま表示されてしまいました。  
なぜでしょうか？

ご教授よろしくお願いします。


CC BY-SA 3.0
2015-02-05T10:39:19.483
5994
2015-02-09T15:27:38.700
2015-02-09T15:27:38.700
30
7934
question
python django
Djangoのローカライズがうまくいかない


`django.po` を編集したあとに、

[code]

    $ python manage.py compilemessages
    
[/code]

していますか？これで、`.po` から `.mo` が生成されます。  
さらに `runserver` は手動で再起動する必要があります。


CC BY-SA 3.0
2015-02-05T11:22:06.607
5999
2015-02-05T12:27:38.003
2015-02-05T12:27:38.003
5337
632
5994
answer