好的,经过两个小时的尝试,我会问......
我有一个应用程序,我有几种语言。如果应用程序的默认语言是浏览器语言会很好,但如果用户可以覆盖该语言也会很好。
我的意思是,您的浏览器是英文的,但您是德语,并且您点击德国国旗更改网络语言并记住它。
我尝试了django-localeurl
它工作正常,它会显示网址上的语言,甚至可以设置默认语言是浏览器语言。
当我创建一个改变语言的选择框时,问题就出现了,就像django-locateurl所说的那样。选择有效但当我移动到另一个页面时,语言将更改为默认语言。不保存新选择的语言。
我尝试了一些声称可以解决这个问题的问题,一个原始补丁。没什么。
我读过有关在localeURLMiddleware之前放置SessionMiddleware,......
没有
那么,任何人都有这个工作或使用过另一个lib吗?
感谢。
答案 0 :(得分:2)
我结束使用Django-dev(1.4),它内置了i18n网址,因此不需要localeurl。
答案 1 :(得分:2)
阅读以下文章。
http://barseghyanartur.blogspot.nl/2013/09/make-django-localeurl-rembember-your.html
简而言之,最后一次提交django-localeurl主分支和一些技巧是可能的。
步骤1.从源码(bitbucket)安装django-localeurl或从同一地点选择稍后的提交。
$ pip install hg + https://bitbucket.org/carljm/django-localeurl@764caf7a412d77aca8cc929988f333ee808719e6#egg=django-localeurl
步骤2.更新django settings.py,如下所示。
中间件类应如下所示(顺序至关重要)。
请注意,django的SessionMiddleware
首先出现!而LocaleURLMiddleware
应该出现在django的CommonMiddleware
之前!
请注意,LOCALEURL_USE_SESSION
是新的。
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'localeurl.middleware.LocaleURLMiddleware',
'django.middleware.common.CommonMiddleware',
# ... the rest
)
LOCALEURL_USE_SESSION = True
步骤3.将语言切换器(POST)指向{%url'localeurl_change_locale'%}视图,并提供选择为locale
参数的语言。
这就是它。请参阅文章,了解将其包含在模板中的提示。
答案 2 :(得分:0)
django-cms使用中间件来做到这一点。如需灵感,请在此处查看MultilingualURLMiddleware类:
https://github.com/divio/django-cms/blob/develop/cms/middleware/multilingual.py
它执行以下操作:
但我真正推荐的是你开始使用django-cms;)
答案 3 :(得分:0)
使用中间件django-user-language-middleware可以使用注册用户选择的首选语言翻译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 install django-user-language-middleware
将其添加到设置中的中间件类列表以侦听请求:
MIDDLEWARE = [ # Or MIDDLEWARE_CLASSES on Django < 1.10
...
'user_language_middleware.UserLanguageMiddleware',
...
]
我希望将来可以帮助人们登陆这个问题。