我想处理法语版的网站。
我将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可能是导致此问题的原因。
答案 0 :(得分:0)
对于遇到此错误的其他语言:
有一行告诉Django评估此表达式,确定应使用哪种形式的单词,对于某些语言,该表达式未编写,例如波斯语。
对于这些语言,默认行写在主.po文件中(而不是特定的文件):
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
此处EXPRESSION
部分应更改为您的语言。
HERE您可以阅读EXPRESSION的确切格式,但是如果您的语言只有两种形式的单数和复数形式,则将其改为:
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
然后重新编译您的消息。