从我的Django文档阅读,这是LocaleMiddleware做什么:Django的国际化与地理位置
LocaleMiddleware试图通过下面这个算法来确定用户的语言首选项:
首先,它查找语言前缀在请求的URL中。这是 仅在您的 根URLconf中使用i18n_patterns功能时才执行。请参阅国际化:有关URL模式的更多 有关语言前缀的信息以及如何国际化URL 模式。
如果失败,它会在当前用户的 会话中查找django_language键。
如果没有,它会寻找一个cookie。
使用的cookie的名称由LANGUAGE_COOKIE_NAME 设置设置。 (默认名称是django_language。)
如果失败,它将查看Accept-Language HTTP标头。这个头文件 由您的浏览器发送,并通过优先顺序告诉服务器您偏好哪种语言(s)。 Django尝试使用标题 中的每种语言,直到找到包含可用翻译的语言。
失败的是,它使用全局LANGUAGE_CODE设置。
我想让我的django项目检测用户国家并在选择默认语言时使用它?
如何做到这一点:
我心里有两个想法:
写一个新的中间件要LocaleMiddleware之前在这个中间件执行,如果没有的cookie LANGUAGE_COOKIE_NAME使用设置它Django的GeoLocation中
更换LocaleMiddleware和,而不是寻找的Accept-Language HTTP标头使用Django GeoLocation中
您怎么看?
或者可能还有另一种更简单的方法?
编辑:我将有一个更改语言的选项,问题是只有当您第一次打开网站(任何页面,而不仅仅是首页)时。我现在正在考虑为默认网站语言/ bg /(如果没有这样的设置)设置django_language,并且还使用国际urls/en /,/ bg /。也必须有语言切换选项。这样,搜索引擎就没有问题,我根本不会使用地理定位。
编辑:也有,这里(保加利亚)这个问题大多数浏览器标题设置为喜欢英语这是不是一个好的选择:(
我将可以选择更改语言,问题仅在您第一次打开网站时出现。我现在正在考虑为默认网站语言/ bg /(如果没有这样的设置)设置django_language,并且还使用国际urls/en /,/ bg /。也必须有语言切换选项。这样,搜索引擎就没有问题,我根本不会使用地理定位。 – 2013-05-08 08:24:50
也有这个问题,在这里(在保加利亚)大多数浏览器标题设置为更喜欢英语语言,这不是一个好的选择:( – 2013-05-08 08:32:41