Я пытаюсь создать файл перевода на упрощенном китайском языке из английского источника. Все это происходит в проекте Flask, и я использую Flask-Babel (до сих пор успешно) для перевода на испанский и французский языки. Я добавил файл китайского перевода, но столкнулся со следующей проблемой.
Рассмотрим следующие строки на английском языке:
msgid "One message"
msgid_plural "%(num)d messages"
Когда есть только одно сообщение, я не хочу отображать число 1
, я хочу прописанную версию.
По-видимому, в китайском языке нет грамматической разницы между единственным и множественным числом, поэтому наши переводчики включили только один перевод для обеих версий:
msgstr[0] "%(num)d [something in Chinese]"
Когда я попытался скомпилировать этот файл, я получил следующее сообщение об ошибке:
неизвестный именованный заполнитель 'num'
Поэтому я попытался продублировать строку следующим образом (一
— это 1 на китайском языке):
msgstr[0] "一 [something in Chinese]"
msgstr[1] "%(num)d [something in Chinese]"
Но затем я получил эту ошибку:
msg имеет больше переводов, чем num_plurals каталога
что имеет смысл: в китайском языке nplurals
равно 1, поэтому не должно быть более одного msgstr
.
На данном этапе я вижу два варианта:
- Обманите мой китайский файл .po и объявите, что
nplurals = 2
с тем же правилом, что и английский:"Plural-Forms: nplurals=2; plural=(n > 1)"
. - Обновите все мои исходные строки, чтобы я всегда использовал
%(num)d
в единственном числе, если мне это нужно во множественном числе.
Меня не очень устраивает ни один из вариантов. Есть ли альтернатива?
msgstr[0] "%(num)d [something in Chinese]"
правильный и должен работать. Пожалуйста, опубликуйте всю запись po! Есть комментарий#, python-format
? И как именно вы компилируете файл po? У обычного GNUmsgfmt
нет проблем с вашим примером. - person Guido Flohr   schedule 27.07.2019