Django:模板翻译不起作用

时间:2015-04-07 11:36:50

标签: django internationalization django-i18n

我的网络应用程序的默认语言代码是韩语。

当客户的Accept-languageen-us时,我想将其翻译成英文。

我更喜欢使用模板翻译,而不是使用python代码或i18n_urlpatterns

这是我的代码。


Django版

    1.7.7

settings.py

    ...

    def ABS_PATH(*args):
        return os.path.join(PROJECT_DIR, *args)    

    LANGUAGE_CODE = 'ko'
    ugettext = lambda s: s
    LANGUAGES = (
        ('en', ugettext('English')),
        ('ko', ugettext('Korean')),
    )
    LOCALE_PATHS = (
        ABS_PATH('locale'),     # /var/www/mysite.com/locale
    )
    USE_I18N = True
    USE_L10N = True

    ...

    MIDDLEWARE_CLASSES = (
        'django.contrib.sessions.middleware.SessionMiddleware',
        'django.middleware.locale.LocaleMiddleware',
        'django.middleware.common.CommonMiddleware',
        ...
    )

    # `TEMPLATE_CONTEXT_PROCESSORS` have `django.core.context_processors.i18n` as default.

views.py

    def home(request):
        return render_to_response('index.html', locals(), context_instance=RequestContext(request))

的index.html

    {% load i18n %}
    ...
    {% trans "Hello" %}
    ...

在shell上创建消息文件

$ django-admin.py makemessages -l en


编辑消息文件 /var/www/mysite.com/locale/en/LC_MESSAGES/django.po

    #: .../index.html:14
    msgid "Hello"
    msgstr "안녕"

在shell上编译消息文件

$ django-admin.py compilemessages

Check file at /var/www/mysite.com/locale/en/LC_MESSAGES/django.mo


重新启动测试服务器

$ manage.py runserver


通过浏览器检查

Accept-language : en-US,en;q=0.8,ko;q=0.6

    Expectation : 안녕

    Result : Hello

当客户浏览器的Accept-language标题是en-us时,我该怎么做才能显示英文模板?

1 个答案:

答案 0 :(得分:1)

对不起,这是我的错。我多么愚蠢..

ABS_PATH('locale')返回/var/www/mysite.com/mysite/locale

ABS_PATH('locale')更改为/var/www/mysite.com/locale解决了问题

我希望以上步骤对其他人有所帮助。