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

Блог ·

Три вади, яких не міг побачити жоден скрипт

Вісім статей вісьмома мовами пройшли кожну автоматичну перевірку. Читач знайшов вигадане число, половину речення й заголовок, якому суперечили посилання.

Автор: Provibr

Ми публікуємо девʼятьма мовами. Англійська є джерелом, а решта вісім є перекладами, і навколо них стоїть стіна автоматики: порівняння структури, що перевіряє збіг заголовків, таблиць і списків, порівняння фактів, що витягає з кожного абзацу фрагменти коду й числа і вимагає їхньої відповідності, тест типографіки на кожну мову, перевірка посилань, перевірка таблиць, сканування верстки на 390 пікселях.

Вісім статей пройшли все це. Тоді другий читач переглянув ті вісім вісьмома мовами і знайшов, що поліпшити, у кожній з них: 44 нідерландською, 40 німецькою, 47 іспанською, 35 французькою, 39 італійською, 22 португальською, 55 румунською, 23 українською і 18 таких, що перетинали мови. Різниця становила рівно 307 вилучених і 307 доданих рядків у 62 файлах.

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

Число, якого ніхто не міряв

Одна стаття описувала калібрувальну пробу: скрипт, що навмисне садить дефекти на сторінку, а тоді вимагає, щоб детектор їх знайшов, аби запуск, що звітує про нуль знахідок, можна було відрізнити від запуску, що не дивився.

Чотири з восьми перекладів казали, що проба вимагає трьох знахідок.

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

Виправленням було не поправити число. Ним було вилучити його. Речення тепер називає три посаджені дефекти за тим, чим вони є, і жоден переклад узагалі не наводить лічби, бо лічба на тій позиції не додає нічого, що потрібне читачеві, і є заручником скрипта, який хтось відредагує.

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

Речення, що втратило свою другу половину

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

Цікавим є те, як це знайшли. Шестеро з восьми читачів, працюючи незалежно над власною мовою, позначили те саме речення. Шістьма мовами воно вже було правильним. Дві втратили протиставлення і були причиною, чому воно спливало знову й знову.

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

Заголовок, що не сходився з кожним посиланням, яке на нього вказувало

Наші статті посилаються одна на одну. Англійське джерело четвертої статті мало заголовок, що описував одну річ, яка сидить поруч із іншою, і кожне вхідне посилання вживало те саме формулювання.

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

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

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

Дві нові сторожі, і чому одна з них має рахувати навспак

Дві з цих трьох тепер автоматизовані, і автоматику довели червоною, перш ніж їй довіритися, на копії дерева з посадженими в ньому дефектами.

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

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

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

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

У чому помилився читач

Одна знахідка в рецензії сама була хибною, і вона є повчальною.

Нідерландський читач повідомив, що наголос на певному слові втратили в усіх восьми мовах. Шість із восьми його мали. Нідерландський читач міг як слід бачити один файл, а решту вивів здогадом.

Тепер це є правилом: читач, що працює над однією мовою, звітує про ту мову. Твердження про вісім файлів є вимірюванням, і йому потрібен скрипт або вісім відкритих файлів, а не враження.

Була споріднена знахідка, що виявилася справжнім розколом, а не помилкою. Чотири з восьми нідерландських статей уживали формального регістру, а чотири неформального. У цілому нідерландському каталозі 47 із 90 файлів є формальними. Це не є дефектом, який слід виправити у восьми файлах; це є рішенням, яке треба ухвалити один раз і застосувати всюди, і раунд це записав, замість тихо стати на чийсь бік.

Шість речей, хибних у джерелі

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

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

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

Що ми б записали

  1. Автоматика перевіряє форму й факти; змісту вона не перевіряє. Кожна з цих восьми статей була зеленою.
  2. Число, успадковане вами з підсумку, зрештою стане хибним. Звірте його з річчю або вилучіть.
  3. Найкращим лагодженням крихкого числа часто є відсутність числа. Називайте речі, замість рахувати їх.
  4. Утрачене протиставлення лишає граматичне речення. Знаходить його лише читач.
  5. Шестеро читачів, що позначають те саме речення, є сигналом про джерело, а не про шість перекладів.
  6. Посилання з хибним текстом вказує на сторінку, що існує. Жодна перевірка HTTP цього ніколи не помітить.
  7. Заголовок і кожне посилання на нього є одним рядком. Рецензуйте їх разом, хоч вони й живуть нарізно.
  8. Доведіть нову сторожу червоною, перш ніж повірити їй зеленій. Посадіть дефект на копії дерева.
  9. Сторожу з хибними спрацюваннями починають ігнорувати, а це є гіршим, ніж її не мати. Рахуйте від великого до малого і споживайте те, що збігається.
  10. Читач звітує про власну мову. Твердження про вісім файлів є вимірюванням.

Для ясності про те, чим це є: порівняння фактів пройшло по 2432 абзацах без знахідок, порівняння структури по восьми статтях вісьмома мовами без жодної, сторожа лексем 248 перевірок і сторожа числівників 240 перевірок без жодної, перевірка вмісту 815 із 815 породжених файлів байт у байт тотожних, набір вебу зеленим на 4572, перевірка метаданих 288 із 288, посилання 153 із 153, таблиці 198 із 198, а сканування верстки 168 із 168 на 390 пікселях проти виробничої збірки. Тест типографіки довели червоним на 28 успіхах і 3 невдачах із посадженими дефектами і зеленим на 31 після того. Не доведено: досі є один читач на мову, і жоден із них не є носієм, а вимірювання доступності чи зсуву верстки в цьому раунді не було. Два питання термінології передали вище, замість вирішити.

Із платформної роботи над Provibr. Що девʼять каталогів роблять із набором сталих елементів керування, описано в Шістнадцять тисяч ключів, девʼять мов, а скрипт перетворення, що пошкодив три статті, на які його ніколи не наводили, описано в Скрипт перетворення, що пройшовся надто широко.

Читати далі

Почніть з одного хоста й одного агента

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