django - 法语翻译引发“ValueError('invalid token in复数形式:%s'% value)”
问题描述
我想处理我的网站的法语版本。
我将 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 可能是导致此问题的原因。
解决方案
对于面临此错误的其他语言:
有一行告诉 Django 评估这个表达式,决定它应该使用哪种形式的单词,并且对于某些语言,这个表达式是不写的,例如波斯语。
对于这些语言,默认行写入主 .po 文件(不是特定的):
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
此处EXPRESSION
应将部分更改为您的语言。
在这里您可以阅读 EXPRESSION 的确切格式,但简而言之,如果您的语言只有单数和复数两种形式,请将行更改为:
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
并重新编译您的消息。
推荐阅读
- autodesk-forge - Autodesk Forge - 发布作业 - 文件必须位于存储桶和正确的 URN 中
- android - RecyclerView 未显示在 ConstraintLayout 中
- java - Spring-boot 为初始 lucene 索引创建休眠搜索类
- rust - 如何让借用检查器知道参考不再存在?
- python - 我们如何通过提供数据框的函数使用回调在 Dash Table 中动态创建数据列
- javascript - 如何解决 React Native 中出现“folly/Portability.h”和“File .../main.jsbundle 不存在”的问题?
- r - ggplot里面的for循环
- angular - Angular 7 服务器响应未显示在列表中
- c++ - 如何使用访问者模式编写包含?[简单示例]
- java - do/while 循环的问题