我想部署一個英文網站&西班牙語並檢測用戶瀏覽器語言&重定向到正確的語言環境網站。檢測語言和django語言環境-url
我的網站是www.elmalabarista.com
我安裝django-localeurl,但我發現,語言不能正確檢測。
這是我的中間件:
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'multilingual.middleware.DefaultLanguageMiddleware',
'middleware.feedburner.FeedburnerMiddleware',
'lib.threadlocals.ThreadLocalsMiddleware',
'middleware.url.UrlMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'maintenancemode.middleware.MaintenanceModeMiddleware',
'middleware.redirect.RedirectMiddleware',
'openidconsumer.middleware.OpenIDMiddleware',
'django.middleware.doc.XViewMiddleware',
'middleware.ajax_errors.AjaxMiddleware',
'pingback.middleware.PingbackMiddleware',
'localeurl.middleware.LocaleURLMiddleware',
'multilingual.flatpages.middleware.FlatpageFallbackMiddleware',
'django.middleware.common.CommonMiddleware',
)
但總是網站找到我們,儘管事實上我的OS &瀏覽器設置爲西班牙語。
LANGUAGES = (
('en', ugettext('English')),
('es', ugettext('Spanish')),
)
DEFAULT_LANGUAGE = 1
然後,我砍區域設置的URL的中間件和做到這一點:
def process_request(self, request):
locale, path = self.split_locale_from_request(request)
if request.META.has_key('HTTP_ACCEPT_LANGUAGE'):
locale = utils.supported_language(request.META['HTTP_ACCEPT_LANGUAGE'].split(',')[0])
locale_path = utils.locale_path(path, locale)
if locale_path != request.path_info:
if request.META.get("QUERY_STRING", ""):
locale_path = "%s?%s" % (locale_path,
request.META['QUERY_STRING'])
return HttpResponseRedirect(locale_path)
request.path_info = path
if not locale:
locale = settings.LANGUAGE_CODE
translation.activate(locale)
request.LANGUAGE_CODE = translation.get_language()
然而,這種檢測精細的語言,但是重定向「EN」的網址爲「ES」。所以用英語導航是不可能的。
UPDATE:這是最後的代碼爲 「/」 的情況下的定位點(從卡爾邁耶輸入後):
def process_request(self, request):
locale, path = self.split_locale_from_request(request)
if (not locale) or (locale==''):
if request.META.has_key('HTTP_ACCEPT_LANGUAGE'):
locale = utils.supported_language(request.META['HTTP_ACCEPT_LANGUAGE'].split(',')[0])
else:
locale = settings.LANGUAGE_CODE
locale_path = utils.locale_path(path, locale)
if locale_path != request.path_info:
if request.META.get("QUERY_STRING", ""):
locale_path = "%s?%s" % (locale_path, request.META['QUERY_STRING'])
return HttpResponseRedirect(locale_path)
request.path_info = path
translation.activate(locale)
request.LANGUAGE_CODE = translation.get_language()
是的,我想BTOH的混合多國語言:獲取defaul語言形式接受語言的第一次,但在那之後使用URL風格。 我不知道將它存儲在cookie中是否也很重要......但我認爲更好的行爲是你描述的。 – mamcx 2009-10-07 14:54:41
感謝您的意見。我把你的代碼,但修復的情況下,「/」 – mamcx 2009-10-07 17:42:41
這是給我的錯誤。哪個文件我需要改變。它給出錯誤 區域設置,路徑= self.split_locale_from_request(請求) – ha22109 2010-06-10 13:39:32