保存用户首选语言和django localeurl
好吧,试了两个小时后,我会问 我有一个应用程序,我有几种语言。如果应用程序的默认语言是浏览器语言,这将很好,但如果用户可以覆盖该语言,这也很好 我的意思是,你的浏览器是英文的,但你是德国人,你点击德国国旗来改变网络语言并记住这一点 我试过了 它工作正常,显示url上的语言,甚至可以设置默认语言为浏览器语言 当我像django locateurl所说的那样创建一个选择框来更改语言时,问题就出现了。select可以工作,但当我移动到另一个页面时,语言将更改为默认语言。不保存新选定的语言 我试过一些声称能解决这个问题的叉子,是原来叉子的一个补丁。。没什么 我读到关于将SessionMiddleware放在localeURLMiddleware之前 没什么 那么,有人用过这个或者用过另一个lib吗保存用户首选语言和django localeurl,django,internationalization,django-localeurl,Django,Internationalization,Django Localeurl,好吧,试了两个小时后,我会问 我有一个应用程序,我有几种语言。如果应用程序的默认语言是浏览器语言,这将很好,但如果用户可以覆盖该语言,这也很好 我的意思是,你的浏览器是英文的,但你是德国人,你点击德国国旗来改变网络语言并记住这一点 我试过了 它工作正常,显示url上的语言,甚至可以设置默认语言为浏览器语言 当我像django locateurl所说的那样创建一个选择框来更改语言时,问题就出现了。select可以工作,但当我移动到另一个页面时,语言将更改为默认语言。不保存新选定的语言 我试过一些声
谢谢。django cms使用中间件来实现这一点。要获得灵感,请看下面的MultilinguarlMiddleware类: 它做了以下工作: 查看URL的第一部分。如果它与支持的语言(如settings.languages)匹配,则使用该语言代码调用translation.activatelanguage。 如果没有,则尝试查看是否设置了request.session.getdjango_语言。 如果没有,则尝试查看是否设置了request.COOKIES.getdjango_语言。
但我实际上建议您开始使用django cms 我最后使用了Django dev 1.4,它内置了i18n URL,因此不需要localeurl。阅读以下文章 简言之,通过对django localeurl主分支的最后一次提交和一些技巧,这是可能的 第一步。从源bitbucket安装django localeurl或从同一位置选择稍后的提交 $pip安装hg+ 第二步。更新django settings.py,如下所示 中间件类应如下所示:顺序至关重要 注意,django的SessionMiddleware是第一个!LocaleURLMiddleware应该先于django的公共中间件 注意,LOCALEURL\u USE\u会话是新的 第三步。将您的语言切换器帖子定向到{%url'localeurl\u change\u locale%}视图,并提供了作为locale参数选择的语言
差不多就是这样。有关将其包含在模板中的提示,请参阅本文。使用注册用户选择的首选语言翻译Django应用程序可以使用中间件完成。通过在user.language字段中查看所选语言,可以轻松本地化Django应用程序 用法: 将语言字段添加到用户模型:
class User(auth_base.AbstractBaseUser, auth.PermissionsMixin):
# ...
language = models.CharField(max_length=10,
choices=settings.LANGUAGES,
default=settings.LANGUAGE_CODE)
从pip安装中间件:
pip安装django用户语言中间件
将其添加到设置中的中间件类列表以侦听请求:
MIDDLEWARE = [ # Or MIDDLEWARE_CLASSES on Django < 1.10
...
'user_language_middleware.UserLanguageMiddleware',
...
]
我希望这可能有助于人们在将来解决这个问题。谢谢,但django cms并不适用于所有项目。。我的应用程序不适合cms,只是一个月经日历。即使你不使用django cms,我仍然建议复制他们的中间件并将其修改为独立的。下面是对你的时间表示感谢的投票。我一年前离开Django:P
MIDDLEWARE = [ # Or MIDDLEWARE_CLASSES on Django < 1.10
...
'user_language_middleware.UserLanguageMiddleware',
...
]