django - 法语翻译以复数形式提出 "ValueError(' 无效标记 : %s' % value)"

标签 django internationalization

我想处理我网站的法语版本。

我使用带有 i18n 的 Django 2.2,并且我已经在 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 可能是导致解析的原因。

最佳答案

对于面临此错误的其他语言:

有一行告诉 Django 评估这个表达式,决定它应该使用哪种形式的单词,对于某些语言,这个表达式是不写的,例如波斯语。

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

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

这里EXPRESSION部分应更改为您的语言。

HERE您可以阅读 EXPRESSION 的确切格式,但简而言之,如果您的语言只有单数和复数两种形式,请将行更改为:
"Plural-Forms: nplurals=2; plural=(n != 1);\n"

并重新编译您的消息。

关于django - 法语翻译以复数形式提出 "ValueError(' 无效标记 : %s' % value)",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56545202/

相关文章:

Django 注释以返回其他字段

django - 在 Django 中对相关对象进行排序

php - 在 Python WSGI 环境中运行 PHP 脚本

javascript - PHP - 语言切换 - MVC 框架 - 基于 session 或 Javascript(i18next 库)?什么更好?

iOS 本地化 : simulator behaves differently than device

python - 我的 Django ModelForm 是未绑定(bind)的吗?

python - 使用 Django Rest Framework 在 ModelViewSet 中使用自定义函数

c# - .NET 本地化不起作用

web-applications - Lua-如何进行国际化?

c# - 如果我不需要支持特定于语言环境的变体,我可以仅使用 zh-Hans/zh-Hant resx 文件来表示中文吗?