如何在 Django 中添加默认不支持的语言?

问题描述 投票:0回答:2

我正在尝试用 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

有人知道我该如何修复它吗? 非常感谢!

python django translation
2个回答
1
投票

在你的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 "Имейл"

0
投票

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);

© www.soinside.com 2019 - 2024. All rights reserved.