我的网络应用程序的默认语言代码是韩语。
当客户的Accept-language
为en-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
时,我该怎么做才能显示英文模板?
答案 0 :(得分:1)
对不起,这是我的错。我多么愚蠢..
ABS_PATH('locale')
返回/var/www/mysite.com/mysite/locale
将ABS_PATH('locale')
更改为/var/www/mysite.com/locale
解决了问题
我希望以上步骤对其他人有所帮助。