法语翻译引发“ ValueError('无效令牌,复数形式:%s'%value)”

时间:2019-06-11 13:46:04

标签: django internationalization

我想处理法语版的网站。

我将Django 2.2与i18n结合使用,并且已经在settings.py中设置了语言环境变量。

# Internationalization
# https://docs.djangoproject.com/en/2.2/topics/i18n/

LANGUAGES = (
    ('en', _('English')),
    ('fr', _('French')),
    ('it', _('Italian')),
    ('es', _('Spanish')),
)

LOCALE_PATHS = (
    os.path.join(BASE_DIR, 'locale'),
)

TIME_ZONE = 'Europe/Paris'

USE_I18N = True

USE_L10N = True

USE_TZ = True

当我使用./manage.py makemessages -l fr时,我正确地拥有一个django.po法语文件,但是在./manage.py compilemessages -l fr之后,服务器崩溃并出现以下错误(已消除):

  File "/usr/lib/python3.7/gettext.py", line 93, in _tokenize
    raise ValueError('invalid token in plural form: %s' % value)
ValueError: invalid token in plural form: EXPRESSION

英语,意大利语和西班牙语的翻译效果很好

编辑:很好,此问题已解决,但我不确定如何解决。我删除了venv,然后重新创建,法语翻译突然生效了。从Django 2.2.1升级到2.2.2可能是导致此问题的原因。

1 个答案:

答案 0 :(得分:0)

对于遇到此错误的其他语言:

有一行告诉Django评估此表达式,确定应使用哪种形式的单词,对于某些语言,该表达式未编写,例如波斯语。

对于这些语言,默认行写在主.po文件中(而不是特定的文件):

"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"

此处EXPRESSION部分应更改为您的语言。

HERE您可以阅读EXPRESSION的确切格式,但是如果您的语言只有两种形式的单数和复数形式,则将其改为:

"Plural-Forms: nplurals=2; plural=(n != 1);\n"

然后重新编译您的消息。