我试图为Django 1.6.8不支持的几种非洲语言添加网站翻译。我不需要管理员使用这些语言,但我确实需要支持他们。
我的网站已经有25种语言的翻译,由Django正式支持的语言,他们按子域划分,所以de.mysite.com是德语。我使用子域中间件来设置基于子域的语言环境,如下所示:
class SubDomainLanguage(object):
def process_request(self, request):
prefix = None
try:
prefix = request.META['HTTP_HOST'].split('.')[0]
if prefix == 'no':
prefix = 'nb'
request.session['django_language'] = prefix
except KeyError:
pass
if not prefix:
request.session['django_language'] = 'en'
各种网络搜索让我觉得我已经接近添加对这些语言的支持,但是访问yo.mysite.com会给我这个网站的英文版本,所以有些东西可以帮助我。缺少(de.mysite.com是德语,按预期)。
Yoruba翻译存在于locale / yo / LC_MESSAGES / django.mo和django.po中,而python manage.py compilemessages工作正常。
以下是我的settings.py文件中的相关行:
from django.conf import global_settings
from django.utils.translation import gettext_noop
MIDDLEWARE_CLASSES = (
...
'subdomainmiddleware.SubDomainLanguage',
'django.middleware.locale.LocaleMiddleware',
...
)
global_settings.LANGUAGES += ('ak', gettext_noop('Akan'))
global_settings.LANGUAGES += ('ig', gettext_noop('Igbo'))
global_settings.LANGUAGES += ('rw', gettext_noop('Rwanda'))
global_settings.LANGUAGES += ('sn', gettext_noop('Shona'))
global_settings.LANGUAGES += ('yo', gettext_noop('Yoruba'))
global_settings.LANGUAGES += ('zu', gettext_noop('Zulu'))
EXTRA_LANG_INFO = {
'ak': {
'bidi': False,
'code': 'ak',
'name': 'Akan',
'name_local': u'Akan'
},
'ig': {
'bidi': False,
'code': 'ig',
'name': 'Igbo',
'name_local': u'Asụsụ Igbo'
},
'rw': {
'bidi': False,
'code': 'rw',
'name': 'Rwanda',
'name_local': u'Kinyarwanda'
},
'sn': {
'bidi': False,
'code': 'sn',
'name': 'Shona',
'name_local': u'chiShona'
},
'yo': {
'bidi': False,
'code': 'yo',
'name': 'Yoruba',
'name_local': u'èdè Yorùbá'
},
'zu': {
'bidi': False,
'code': 'zu',
'name': 'Zulu',
'name_local': u'isiZulu'
},
}
import django.conf.locale
LANG_INFO = dict(django.conf.locale.LANG_INFO.items() + EXTRA_LANG_INFO.items())
django.conf.locale.LANG_INFO = LANG_INFO
可能缺少什么?或者可能是错误的顺序?