Блог, який перевіряє власні переклади
У цьому блозі 64 дописи одинадцятьма мовами: 704 рядки і близько 2,2 мільйона знаків. Жоден допис не пропущено в жодній мові — твердження, яке щось означає лише тоді, коли щось його забезпечує.
Дещо забезпечує. Перш ніж перекладений рядок буде записано, його звіряють з англійським оригіналом, і рядок, що не проходить, не записується взагалі — про нього повідомляють і залишають людині.
Для чого потрібна кожна перевірка
Ті самі цілі посилань. Внутрішній шлях не повинен змінюватися під час перекладу: /privacy лишається /privacy будь-якою мовою, а мовну приставку додає лише виведення. Перекладач — людина чи ні — який послужливо перекладе шлях, отримає посилання, що веде в нікуди.
Ті самі підстановки. Деякі дописи несуть числа, які підставляються під час збирання сторінки, щоб не застаріти. Переклад, що загубив одну з них, губить число; той, що вигадає зайву, ставить фігурну дужку посеред речення.
Та сама кількість на кожен тег. Не просто збалансовані теги — стільки ж, скільки в англійському. Це та перевірка, що заслуговує на своє місце: загублений рядок таблиці, проковтнутий пункт списку чи зникла схема невидимі для будь-якої іншої перевірки, бо результат лишається правильним HTML і читається бездоганно.
Довжина в межах смуги. Від половини до двох з половиною разів англійського. Мови справді різної довжини, тож смуга широка; ловить вона переклад, що обірвався на півдорозі.
Що вона зловила і що зловила даремно
Справжня знахідка: французький переклад прийшов із чотирма виділеними словами там, де в англійському було три, бо заперечення розмітили двома шматками. Ніщо не виглядало неправильним. Кількість виглядала.
Дві хибні тривоги, обидві того самого дня, обидві повчальні.
Перша: один допис цитує рядок CSS, а CSS закінчується на }}. Перевірка дужок рахувала кожне {{ і кожне }}, тож будь-який переклад цього допису провалювався, хоча нічого не було зламано. }} без {{ не може бути розірваною підстановкою — підстановки починаються з {{ — тому тепер рахується лише відкривальний бік.
Друга: <rect/> і <path/> не мають закривального тега, тож перевірка балансу вічно оголошує їх незбалансованими. Порожні елементи тепер рахуються, а не балансуються.
Обидві коштували кола роботи, і обидві були перевіркою, надто суворою, а не надто слабкою. Це кращий напрямок, у якому можна схибити, але він не безкоштовний: перевірку, що кричить даремно, послаблює той, хто поспішає, і тоді її немає, коли вона потрібна.
Випробування, яке важило найбільше
Коли дописи отримали схеми, перевірку тегів розширили, щоб вона їх охоплювала. Замість того щоб цьому довіритися, перевірку перевірили: з одного перекладу навмисно видалили схему і запустили імпортер.
Він повідомив рівно про те, чого бракувало — про схему, її десять підписів, чотири прямокутники, сім контурів — і відмовився записувати рядок. Схему повернули, і перевірка знову пройшла.
Це забрало дві хвилини. Перевірка, якої ти ніколи не бачив проваленою, — це перевірка, яку ти припускаєш, а припускати — рівно те, чого все це існує, щоб уникнути.