2015-04-07 116 views
1

我的Web应用程序的默认语言代码是韩语。Django:模板翻译不起作用

我想在客户的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)) 

索引。上壳HTML

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

实现邮件文件

$ django-admin.py makemessages -l en


编辑消息文件上壳

$ django-admin.py compilemessages

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

/var/www/mysite.com/locale/en/LC_MESSAGES/django.po

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

编译消息文件210

重启测试服务器

$ manage.py runserver


检查通过浏览器

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

Expectation : 안녕 

    Result : Hello 

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

+0

我在Chrome浏览器的设置中更改了语言,并通过django_debug_toolbar的标题面板选中了“接受语言”。 –

回答

1

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

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

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

我希望上面的步骤可能是对他人有帮助的。

+0

谢谢,这是我的问题。我还没有意识到必须在settings.py中设置LOCALE_PATHS才能使翻译工作(开发服务器不会打印任何有关丢失路径的警告!) – Escher