【发布时间】:2013-05-08 07:39:47
【问题描述】:
根据我在 Django 文档中阅读的内容,这就是 LocaleMiddleware 所做的:
LocaleMiddleware 尝试通过以下算法确定用户的语言偏好:
首先,它在请求的 URL 中查找语言前缀。这是 仅在您使用 i18n_patterns 函数时执行 根 URLconf。有关更多信息,请参阅国际化:在 URL 模式中 有关语言前缀以及如何国际化 URL 的信息 模式。
如果失败,它会在当前用户的 会话。
如果失败,它会寻找一个 cookie。
使用的 cookie 的名称由 LANGUAGE_COOKIE_NAME 设置 环境。 (默认名称是 django_language。)
如果失败,它会查看 Accept-Language HTTP 标头。这个标题 由您的浏览器发送并告诉服务器您使用哪种语言 喜欢,按优先顺序排列。 Django 尝试标题中的每种语言 直到找到一个有可用翻译的。
否则,它将使用全局 LANGUAGE_CODE 设置。
我希望我的 django 项目检测用户国家并在选择默认语言时使用它?
如何做到这一点:
我有两个想法:
编写一个新的中间件,在 LocaleMiddleware 之前执行,如果没有 cookie LANGUAGE_COOKIE_NAME 使用 django GeoLocation 设置它,则在此中间件中执行
替换 LocaleMiddleware 而不是寻找 Accept-Language HTTP 标头来使用 django GeoLocation
你怎么看?
或者可能有其他更简单的方法?
编辑:我将有一个更改语言的选项,问题仅在于您第一次打开网站(任何页面,而不仅仅是首页)时。我现在正在考虑将 django_language 设置为默认网站语言 /bg/(如果没有这样的设置),并且还使用国际 urls /en/、/bg/。还必须有一个语言切换选项。这样搜索引擎就没有问题了,我根本不会使用地理定位。
编辑:还有一个问题是这里(在保加利亚)大多数浏览器标题都设置为更喜欢英语,这不是一个好的选择:(
【问题讨论】:
标签: django internationalization geolocation