我正在尝试用 5 种语言制作一个网站。主要语言应该是库尔德语,但 Django 默认不支持。我已经尝试过如何将新语言添加到 Django?
但这对我不起作用。我收到一条错误消息
**LANG_INFO = dict(django.conf.locale.LANG_INFO.items() + EXTRA_LANG_INFO.items())
TypeError:+ 不支持的操作数类型:“dict_items”和“dict_items”**
我还尝试复制英文po文件并将其重命名为“ku”(库尔德语),并将语言信息添加到 django/conf/init.py 中。
'ku': {
'bidi': False,
'code': 'ku',
'name': 'Kurdish',
'name_local': 'Kurdî',
},
我可以通过模板查看语言选项,但是当我单击它时,我收到一条错误消息。
File "/usr/lib/python3.6/gettext.py", line 91, in _tokenize
raise ValueError('invalid token in plural form: %s' % value)
ValueError:复数形式的无效标记:EXPRESSION
有人知道我该如何修复它吗? 非常感谢!
在你的settings.py中
LANGUAGE_CODE = 'ku'
LANGUAGES = [('en', 'English'), ('ku', 'Kurdish')]
在您的设置中添加
'django.middleware.locale.LocaleMiddleware'
。中间件
在settings.py中添加LOCALE_PATHS,这是您的翻译文件将存储的位置:
LOCALE_PATHS = (
os.path.join(PROJECT_PATH, 'locale/'),
)
启用i18N
USE_I18N = True
在 settings.TEMPLATES 添加
'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',
'social_django.context_processors.backends',
'social_django.context_processors.login_redirect',
],
},
在 urls.py 添加
url(r'^i18n/', include('django.conf.urls.i18n')),
然后在模板中您将说“Hello world”
你必须加载il18n
{% load i18n %}
<p>{% trans "cîhana hello" %}</p>
然后在控制台中您必须创建消息,它将获取带有标签 trans 的所有字符串并将其放入您的语言环境文件夹中
./manage.py makemessages -l en #you will translate it to en since your default language is 'ku'
现在剩下的就是进入 /locales 文件夹,并编辑每个 .po 文件。填写每个消息字符串的数据。这是一个这样的例子:
msgid "cîhana hello"
msgstr "Hello world"
然后你就跑
./manage.py compilemessages
一切都会有魅力
如果您需要更多语言,可以去
LANGUAGES = [('en', 'English'), ('ku', 'Kurdish', ('de', 'Deutsch'), ('ru', 'Russian'), ('fr', 'French'))]
每次您必须编辑
中的消息locale/[language-code]/LC_MESSAGES/django.po
#expect to find something like this
#: templates/index.html:35
msgid "Email"
msgstr "Имейл"
ValueError: invalid token in plural form: EXPRESSION
可能是由 Plural-Forms
标头中不正确的 .po
值引起的。
每个
.po
文件的顶部应该有一个标题,如下所示:
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2024-02-26 12:51+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <[email protected]>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
Plural-Forms
告诉翻译工具这种特定语言如何将单数复数。具体来说,有多少种不同的形成复数的方式。这用于生成正确数量的 msgstr
条目,以翻译涉及复数的字符串。
您拥有的值包含无效字符串
EXPRESSION
,这表明它只是一个占位符,您尚未设置正确的复数形式。
此网页列出了大多数(如果不是全部)语言的复数形式表达:https://docs.translatehouse.org/projects/localization-guide/en/latest/l10n/pluralforms.html
根据该网站,库尔德语的正确值是
nplurals=2; plural=(n != 1);