"django-admin.py makemessages -l en" добавляет множественные формы в выходной файл - PullRequest
0 голосов
/ 30 июня 2018

Каждый раз, когда я запускаю django-admin.py makemessages -l en, он добавляет следующую строку в файл djangojs.po :

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

после этого запускается python manage.py runserver с этой ошибкой:

ValueError: plural forms expression could be dangerous

Конечно, удаление этой строки исправит ошибку и заставит ее исчезнуть.
Как я могу предотвратить добавление этой строки?

1 Ответ

0 голосов
/ 07 июля 2018

Замена строки на "Plural-Forms: nplurals=2; plural= (n != 1);\n" во всех случаях .po файлов, которые должны помочь вам!

gettext обычно переводит слово в слово, когда вы используете переводы Django (i18n & l10n). Но становится сложнее, когда вы хотите перевести (в основном) существительные в форму единственного / множественного числа. Например, рассмотрим этот пример:

if n == 1:
  string = "%d file is deleted"%n
else:
  string = "%d files are deleted"%n

Для обработки перевода множественного числа в интернационализации, Plural-формы - это стандарт для подражания. Python-Django реализует ngettext следующим образом: ( посетите документацию для вашей версии Django )

ngettext('%d file is deleted', '%d files are deleted', n) % n

В большинстве языков n! = 1 считается множественным числом. В приведенном выше примере, когда n=1 Джанго должен учитывать '%d file is deleted' и '%d files are deleted', когда n!=1 для переводов. Следовательно, определение для множественных форм в .po файлах выглядит так: "Plural-Forms: nplurals=2; plural= (n != 1);\n"

Теперь, когда вы запускаете makemessages, Django пытается помочь вам, добавив строку "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" в файлы .po, намекая на эту строку, чтобы заменить ее нашим определением множественных форм.

Примечание: Не каждый язык имеет 2 множественных числа, например, японский, вьетнамский, корейский, тайский не нужно различать единственное и множественное число (следовательно, Plural-Forms: nplurals=1; plural=0;). С другой стороны, есть некоторые языки, такие как румынский, литовский, русский, польский, где nplurals=3. Проверьте эту ссылку для дальнейших примеров.

Надеюсь, в вашем случае nplurals = 1. Если нет, посетите эту ссылку для множественного числа.

...