Django国际化与地理定位
根据我在Django文档中所读到的内容,LocaleMiddleware就是这样做的: LocaleMiddleware尝试通过以下算法确定用户的语言偏好: 首先,它在请求的URL中查找语言前缀。这是 仅当您在应用程序中使用i18n_patterns函数时执行 根URLconf。有关更多信息,请参见URL模式中的国际化 有关语言前缀和如何国际化URL的信息 模式 否则,它将在当前用户的 会议 如果做不到这一点,它会寻找一块饼干 使用的cookie的名称由语言\u cookie\u name设置 背景(默认名称为django_语言。) 否则,它将查看Accept Language HTTP头。此标题 由浏览器发送,并告诉服务器您使用哪种语言 优先权,按优先顺序排列。Django尝试标头中的每种语言 直到它找到一个可用的翻译 否则,它将使用全局语言代码设置 我想让我的django项目检测用户国家,并在选择默认语言时使用它 如何做到这一点: 我有两个想法:Django国际化与地理定位,django,internationalization,geolocation,Django,Internationalization,Geolocation,根据我在Django文档中所读到的内容,LocaleMiddleware就是这样做的: LocaleMiddleware尝试通过以下算法确定用户的语言偏好: 首先,它在请求的URL中查找语言前缀。这是 仅当您在应用程序中使用i18n_patterns函数时执行 根URLconf。有关更多信息,请参见URL模式中的国际化 有关语言前缀和如何国际化URL的信息 模式 否则,它将在当前用户的 会议 如果做不到这一点,它会寻找一块饼干 使用的cookie的名称由语言\u cookie\u name设置
- 编写一个新的中间件,在LocaleMiddleware之前执行,如果没有cookie语言\u cookie\u名称,则在该中间件中使用django GeoLocation进行设置
- 替换LocaleMiddleware,而不是寻找Accept Language HTTP头来使用django GeoLocation
编辑:我将有一个改变语言的选项,问题是只有当你第一次打开网站(任何页面,而不仅仅是首页)时。我现在正在考虑将django_语言设置为默认网站语言/bg/(如果没有这样的设置),并使用国际URL/en/,/bg/。还必须有一个语言切换选项。这样搜索引擎就不会有问题,我也不会使用地理定位
编辑:还有一个问题,在保加利亚,大多数浏览器的标题都设置为更喜欢英语,这不是一个好的选择:(实际上,总体来说这不是一个很好的主意。你应该很少想为客户端设置语言,这就是为什么大多数网站使用可选的语言形式。(标记按钮或可能是下拉选择)
LocaleMiddleware
沿着分层路径运行,最有可能选择正确的翻译(如果可用)。正确的解决方案是向客户提供一个表单来设置或切换他们的首选项。如果处理表单,您可以填充django_语言
会话键
此外,如果强制使用语言设置,爬虫程序也不会正确地刮取页面。我发现这一点非常有用: 将强制django使用默认语言的settings.LANGUAGE\u代码而不使用equest.META['HTTP\u ACCEPT\u LANGUAGE']的中间件
class ForceDefaultLanguageMiddleware(object):
"""
Ignore Accept-Language HTTP headers
This will force the I18N machinery to always choose settings.LANGUAGE_CODE
as the default initial language, unless another one is set via sessions or cookies
Should be installed *before* any middleware that checks request.META['HTTP_ACCEPT_LANGUAGE'],
namely django.middleware.locale.LocaleMiddleware
"""
def process_request(self, request):
if request.META.has_key('HTTP_ACCEPT_LANGUAGE'):
del request.META['HTTP_ACCEPT_LANGUAGE']
来源:我有一个更改语言的选项,只有当你第一次打开网站时才有问题。我现在正在考虑将django_语言设置为默认网站语言/bg/(如果没有这样的设置)也可以使用国际URL/en/,/bg/。还必须有一个语言切换选项。这样搜索引擎就不会有问题,我也不会使用地理位置。还有一个问题是,在保加利亚,大多数浏览器的标题都设置为更喜欢英语,这不是一个好的选项:(