Перейти до змісту

Для перекладачів

Ця сторінка — для людини, яка редагує каталог, а не для тієї, що пише код. Вона коротка навмисно, і її задумано так, щоб на неї можна було послатися чи скопіювати до власних інструкцій проєкту для перекладачів.

Ніщо тут не вимагає від вас читати Python. Усе тут про одне: про частини повідомлення у фігурних дужках.

Що таке заповнювач

Повідомлення в каталозі може містити імена у фігурних дужках:

msgid "Hello {name}"
msgstr ""

{name} — це заповнювач. Коли програма показує це повідомлення, вона замінює {name} на значення, яке сама постачає: ім'я людини, назву файлу, число. Заповнювач — не слово для перекладу; це гніздо.

Ваш переклад іде в msgstr і мусить це гніздо зберегти:

msgid "Hello {name}"
msgstr "こんにちは {name}"

Що можна змінювати, а що ні

Ви можете:

  • Пересунути заповнювач туди, куди його хоче граматика цільової мови, зокрема й на початок повідомлення.
  • Повторити заповнювач, якщо мові потрібне значення двічі.
  • Переписати кожне інше слово, включно з пунктуацією, пробілами й порядком речень.

Ви не повинні:

  • Перекладати ім'я всередині дужок. {name} лишається {name} навіть у мові, яка більше нічого не пише латиницею.
  • Прибирати дужки або писати ім'я без них.
  • Заміняти ASCII-дужки { } на повноширинні . Багато методів введення дають повноширинні форми; вони виглядають майже однаково і не працюють.
  • Додавати форматування, як-от {name!r} чи {amount:.2f}. Як відображається значення, вирішується в програмі, а не в каталозі.
  • Вигадувати заповнювач, якого немає в msgid.

Якщо повідомленню потрібне значення, якого оригінал не пропонує, це повідомлення має змінити розробник. Скажіть про це, замість шукати обхідний шлях.

Форми множини

Повідомлення з лічильником приходить з одним гніздом msgstr на кожну форму множини вашої мови, а скільки їх — вирішує сама мова: одна для японської, дві для німецької, три для російської, шість для арабської. Заповніть кожне гніздо, яке дає каталог.

Два правила, на яких люди спотикаються:

  • Гнізда — це не «однина, множина, ще більша множина». Кожен індекс означає те, що каже правило множини вашої мови. Третя форма латиської — лише для нуля; друга словенської — рівно для двох; валлійська кладе загальний випадок на індекс 0, а однину — на індекс 1.
  • Два гнізда цілком законно можуть містити той самий текст. У турецькій, угорській, перській і бенгальській іменник після числівника лишається в однині, тож обидві форми повідомлення з лічильником — той самий рядок. Це правильно, а не помилка копіювання.

Правила заповнювачів вище стосуються кожної форми окремо.

Записи fuzzy

Запис, позначений fuzzy, — це здогад машини: розробник змінив початкове повідомлення, і інструменти спарували новий текст із вашим старим перекладом, щоб вам було від чого відштовхнутися.

#, fuzzy
msgid "Welcome back, {name}"
msgstr "こんにちは {name}"

Запис 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

Символи, яких не видно, дістають окреме поводження. Нерозривний пробіл усередині дужок — це те, що продукує метод введення й не показує жоден редактор, тож повідомлення друкує його кодовою точкою, замість називати символ, якого ви ніколи б не знайшли:

placeholder {<U+00A0>name} has a space inside the braces; write {name}

Ім'я, чиї літери змішують системи письма — випадок омогліфів, де кирилична а невідрізненна від латинської, — показується двічі: раз читабельно і раз екрановано, бо лише екранована форма розрізняє їх:

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» як стан, наприклад.