保存用户首选语言和django localeurl

保存用户首选语言和django localeurl,django,internationalization,django-localeurl,Django,Internationalization,Django Localeurl,好吧,试了两个小时后,我会问 我有一个应用程序,我有几种语言。如果应用程序的默认语言是浏览器语言,这将很好,但如果用户可以覆盖该语言,这也很好 我的意思是,你的浏览器是英文的,但你是德国人,你点击德国国旗来改变网络语言并记住这一点 我试过了 它工作正常,显示url上的语言,甚至可以设置默认语言为浏览器语言 当我像django locateurl所说的那样创建一个选择框来更改语言时,问题就出现了。select可以工作,但当我移动到另一个页面时,语言将更改为默认语言。不保存新选定的语言 我试过一些声

好吧,试了两个小时后,我会问

我有一个应用程序,我有几种语言。如果应用程序的默认语言是浏览器语言,这将很好,但如果用户可以覆盖该语言,这也很好

我的意思是,你的浏览器是英文的,但你是德国人,你点击德国国旗来改变网络语言并记住这一点

我试过了

它工作正常,显示url上的语言,甚至可以设置默认语言为浏览器语言

当我像django locateurl所说的那样创建一个选择框来更改语言时,问题就出现了。select可以工作,但当我移动到另一个页面时,语言将更改为默认语言。不保存新选定的语言

我试过一些声称能解决这个问题的叉子,是原来叉子的一个补丁。。没什么

我读到关于将SessionMiddleware放在localeURLMiddleware之前

没什么

那么,有人用过这个或者用过另一个lib吗


谢谢。

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',
    ...
]