我有一个翻译不能在Django 1.6上工作的问题!我已经添加到我的settings.py中
LANGUAGE_CODE = 'en-us'
ugettext = lambda s: s
LANGUAGES = (
('en', ugettext('English')),
('de', ugettext('German')),
)
Run Code Online (Sandbox Code Playgroud)
还添加了中间件:
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
)
Run Code Online (Sandbox Code Playgroud)
以及我的*.py文件,每当我使用一个字符串,它应该是l10nd:
from django.utils.translation import ugettext_lazy as _
Run Code Online (Sandbox Code Playgroud)
我的模板以
{% extends "base.html" %}
{% load i18n %}
Run Code Online (Sandbox Code Playgroud)
并且在模板内部比我使用trans占位符.例如
<h1>{% trans "Register a tank" %}</h1>
Run Code Online (Sandbox Code Playgroud)
事实上,字符串出现在locale/de/LC_MESSAGES/django.po中,当我运行时我已经翻译了它们.例如
msgid "Register a tank"
msgstr "Einen neuen Tank anmelden"
Run Code Online (Sandbox Code Playgroud)
我的浏览器设置为首先请求德语内容: 浏览器设置
我错过了什么?
PS我目前正在模糊的项目是在github上托管的:https://github.com/frlan/blankspot
我正在安装model_translation,rosetta,locale_url.但是不起作用改变语言.
我的settings.py:
LANGUAGE_CODE = 'ru'
MODELTRANSLATION_TRANSLATION_REGISTRY = "project.translation"
TRANSLATION_REGISTRY = "project.translation"
ugettext = lambda s: s
LANGUAGES = (
('ru', ugettext(u'Russian')),
('uk', ugettext(u'Ukrainian')),
)
Run Code Online (Sandbox Code Playgroud)
我对语言切换的看法:
def set_language(request):
next = request.REQUEST.get('next', None)
if not next:
next = request.META.get('HTTP_REFERER', None)
if not next:
next = '/'
response = http.HttpResponseRedirect(next)
if request.method == 'GET':
lang_code = request.GET.get('language', None)
if lang_code and check_for_language(lang_code):
if hasattr(request, 'session'):
request.session['django_language'] = lang_code
else:
response.set_cookie(settings.LANGUAGE_COOKIE_NAME, lang_code)
return response
Run Code Online (Sandbox Code Playgroud)
在模板中:
<a href="{% url set_lang %}?lang=uk&next={{request.path}}">Ukranian</a>
Run Code Online (Sandbox Code Playgroud)
我的中间件:
MIDDLEWARE_CLASSES = ( …Run Code Online (Sandbox Code Playgroud) 有没有办法LANGUAGE_CODE在单击按钮(发送请求)时动态更改settings.py 中变量的值?
我希望用户为自己的帐户设置自己的"默认语言" .
现在,用户可以使用下拉列表选择他们的首选语言,并且网站被完美翻译,并且由于Django选择了浏览器的语言,用户在重新打开网站后不需要重新选择他们的语言浏览器.
但是当他们从不同的浏览器打开网站时,默认语言又是"英语",因为在settings.py中设置了LANGUAGE_CODE变量en-us.
所以我想要做的是让每个用户都可以选择他们想要的语言作为默认语言.我想通过制作另一个(类似的)下拉菜单并要求用户选择他们想要的语言作为"默认"并按下save按钮来执行此操作,并且在保存时,我想将LANGUAGE_CODE值更改为由用户(即动态更改).但我不知道如何LANGUAGE_CODE动态改变价值.
此外,这种方法还有一个问题.根据Django的文档,即使我能够LANGUAGE_CODE动态更改此变量,也会使网站将所选语言作为所有用户的默认语言,而不仅仅是针对那个更改它的特定用户:
LANGUAGE_CODE:
- 如果未使用区域设置中间件,则会决定向所有用户提供哪种翻译.
我研究了很多,但找不到适合我的解决方案.我对国际化很新.请帮忙.