Переводчикам¶
Эта страница — для того, кто редактирует каталог, а не для того, кто пишет код. Она намеренно короткая и рассчитана на то, чтобы её можно было дать ссылкой или скопировать в собственную инструкцию для переводчиков проекта.
Читать Python здесь не нужно нигде. Всё здесь — про одно: про части сообщения, заключённые в фигурные скобки.
Что такое заполнитель¶
Сообщение в каталоге может содержать имена в фигурных скобках:
{name} — это заполнитель. Показывая это сообщение, программа заменяет
{name} значением, которое подставляет сама: именем человека, именем файла,
числом. Заполнитель — не слово для перевода, а место под значение.
Ваш перевод пишется в msgstr, и это место в нём должно сохраниться:
Что можно менять, а что нельзя¶
Можно:
- Переставить заполнитель туда, куда требует грамматика целевого языка, — в том числе в самое начало сообщения.
- Повторить заполнитель, если языку нужно, чтобы значение прозвучало дважды.
- Переписать любое другое слово, включая пунктуацию, пробелы и порядок частей предложения.
Нельзя:
- Переводить имя внутри скобок.
{name}остаётся{name}даже в языке, где больше ничего не пишется латиницей. - Убирать скобки или писать имя без них.
- Заменять ASCII-скобки
{}полноширинными{}. Многие методы ввода дают полноширинные формы; они выглядят почти так же и не работают. - Добавлять форматирование вроде
{name!r}или{amount:.2f}. Как выглядит значение, решает программа, а не каталог. - Выдумывать заполнитель, которого нет в
msgid.
Если сообщению нужно значение, которого оригинал не даёт, это сообщение должен изменить разработчик. Скажите об этом, а не обходите проблему.
Множественные формы¶
Сообщение со счётом приходит с одним слотом msgstr на каждую множественную
форму вашего языка, а сколько их — решает сам язык: одна в японском, две в
немецком, три в русском, шесть в арабском. Заполните каждый слот, который даёт
каталог.
Два правила, на которых чаще всего спотыкаются:
- Слоты — это не «единственное, множественное, ещё более множественное». Каждый индекс значит ровно то, что говорит правило множественного числа вашего языка. Третья форма латышского — только для нуля; вторая форма словенского — ровно для двух; валлийский ставит общий случай в индекс 0, а единственное число — в индекс 1.
- Два слота могут законно содержать один и тот же текст. В турецком, венгерском, персидском и бенгальском существительное после числительного остаётся в единственном числе, поэтому обе формы сообщения со счётом — одна и та же строка. Это правильно, а не описка при копировании.
Правила о заполнителях, изложенные выше, действуют для каждой формы отдельно.
Записи fuzzy¶
Запись, помеченная fuzzy, — догадка машины: разработчик изменил исходное
сообщение, и инструменты связали новый текст с вашим старым переводом, чтобы
вам было от чего оттолкнуться.
Запись fuzzy программой не используется — вместо неё показывается
непереведённый оригинал, — пока кто-нибудь не выправит текст и не снимет
пометку fuzzy. В большинстве PO-редакторов для этого есть отдельная кнопка.
Чтение сообщений об ошибках¶
Инструменты проверяют заполнители при компиляции каталога, и сообщение об
ошибке написано для вас, а не для программиста. Сказать просто «{name}
отсутствует» — тупик, когда вы видите эти самые символы прямо перед собой,
поэтому там, где заполнитель выглядит присутствующим, но таковым не является,
сообщение объясняет почему. Для оригинала Hello {name} каждый из случаев
ниже сообщается под заголовком
translation does not match the source placeholders:
| В вашем переводе | Причина, которую называют |
|---|---|
こんにちは {name} |
{name} is missing (the braces around it are not the ASCII { and }) |
こんにちは {{name}} |
{name} is missing (it is written {{name}}, which is how a literal brace is escaped) |
こんにちは name |
{name} is missing (the name appears, but not inside braces) |
こんにちは {名前} |
{name} is missing; {名前} is not in the source message |
У символов, которых не видно, обращение особое. Неразрывный пробел внутри скобок — это то, что производит метод ввода и не показывает ни один редактор, поэтому сообщение печатает его кодовой точкой, а не называет символ, который вам всё равно было бы не найти:
Имя, в буквах которого смешаны системы письма, — случай омоглифа, когда
кириллическую а не отличить от латинской, — показывается дважды: один раз
читаемо и один раз в экранированном виде, и только вторая форма позволяет их
различить:
translation does not match the source placeholders: {name} is missing;
{nаme} (n\u0430me) is not in the source message
То же различение применяется, когда греческое или кириллическое имя, записанное
целиком в одной системе письма, конфликтует с ASCII-именем из оригинала, —
включая случай однобуквенных латинской a и кириллической а.
Если вы столкнулись с одним из этих случаев, а очевидного исправления не
видно, самый безопасный ход — удалить набранный вами заполнитель и скопировать
его из msgid.
Чего проверки не могут¶
Инструменты убеждаются, что ваши заполнители целы. Верен ли перевод, звучит ли он естественно и подходит ли к контексту — этого они определить не могут, и это целиком остаётся за вами.
Больше любой проверки помогают две вещи:
- Читайте комментарий для переводчика. Строка, начинающаяся с
#.над сообщением, — это разработчик рассказывает вам, где сообщение появляется и что оно значит. - Спрашивайте про
msgctxt. Если одно и то же слово встречается дважды с разными контекстами, это потому, что переводиться они должны по-разному: как кнопка «Open» и как состояние «Open», например.