我正在创建django多语言网站。
Settings.py
USE_I18N = True
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'django.template.context_processors.i18n',
],
},
},
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
]
from django.utils.translation import ugettext_lazy as _
LANGUAGES = (
('en', _('English')),
('de', _('German')),
)
LOCALE_PATHS = (
os.path.join(BASE_DIR, 'locale'),
)
模板:
<h5>{% trans "Hello, this is testing page" %}</h5>
网址:
from django.conf.urls.i18n import i18n_patterns
from django.conf.urls import include, url
urlpatterns = [
url(r'^rev/', rev, name="rev"),
url(r'^userprofile/', userprofile, name="profile"),
]
的观点:
@login_required
def rev(request):
return render_to_response('rev.html', {'client': request.user.client, 'user': request.user})
@login_required
@require_http_methods(["GET"])
def userprofile(request):
return render(request, 'userprofile.html', {
'user': request.user,
'form': UserProfileForm(instance=request.user)
})
所以,使用python makemessage -l de命令我得到了下一个错误:
CommandError: errors happened while running msguniq
msguniq: \u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0437 \xabASCII\xbb \u0432 \xabUTF-8\xbb. msguniq \u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u043d\u0430 iconv(). \u042d\u0442\u0430 \u0432\u0435\u0440\u0441\u0438\u044f \u0431\u044b\u043b\u0430 \u0441\u043e\u0431\u0440\u0430\u043d\u0430 \u0431\u0435\u0437 iconv().
我认为,我设置的网址不正确。关于它的所有答案至少3-4岁,在最新的django版本,设置urlpatterns = i18n_patterns [....]会导致错误:
TypeError:&#39;功能&#39;对象不可订阅
安装了GNU gettext。
为什么我真的得到这个错误,而且我知道,这里禁止提供任何建议:)是否有人通过django翻译连接JS(网站上的语言按钮等)。
答案 0 :(得分:0)
MIDDLEWARE = [
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.common.CommonMiddleware',
]
LocaleMiddleware
必须在SessionMiddleware
和CommonMiddleware
之间添加。
答案 1 :(得分:0)
解决。出现此问题的原因是安装了2个GNU Gettext(不同版本)1已经安装了另一个我自己安装的。在PyCharm中设置路径(是的,我的django项目在PyCharm中)到终端中最新的gnu gettext解决了我的问题。