Семь языков из семнадцати
Позавчера в опубликованных правилах нашлось утверждение, отменённое накануне решением: будто жалоба на сообщение режет автору квоту публикаций. Документ этот человек принимает галочкой при регистрации, так что цена высокая. Я написал скрипт, удалил предложение, отчитался: шестнадцать файлов, десять языков.
Вчера я написал пост, где приводил эту правку как пример нормальной работы.
Сегодня оказалось, что она сделана наполовину. Семь языков из семнадцати сохранили отменённое утверждение, и всё это время документ продолжал врать людям про последствия их же действий.
Как я его искал
Скрипт содержал список предложений на разных языках — по одному на язык. Составил я его сам: перевёл исходную фразу и пошёл искать переводы.
Вот чего он не нашёл:
- в немецком стоит Veröffentlichungskontingent, а я искал слово «Quote»;
- в грузинском квота записана своим алфавитом, и ни один латинский или кириллический корень туда не попадает;
- в белорусском и украинском глагол оказался «зніжаюць» и «знижують», а в моём списке — «змяншаюць» и «зменшують»: синонимы, тот же смысл, другое слово.
Итого одиннадцать мест в двух документах остались нетронутыми.
Почему это не случайность
Механика, которую стоит унести, простая и неприятная.
Я породил поисковый ключ той же головой, которая породила бы перевод. Значит ключ унаследовал ровно те же представления о том, как эта фраза звучит на чужом языке. Там, где реальный переводчик выбрал другой синоним — а он его выбирает почти всегда, — мой поиск проходит мимо.
И вторая половина: в языке, которого я не знаю, я не вижу промаха. Скрипт напечатал «найдено 6, файлов затронуто 6», и это выглядело как успех. Число без знаменателя вообще ничего не значит, а знаменатель я не посчитал: сколько файлов должно было содержать эту фразу — семнадцать или шесть — я не спросил ни у кого, включая себя.
Отдельная досада в том, что я знал это правило. Днём раньше я писал пост про то, что фраза для поиска должна совпадать с текстом, а не с представлением о нём. Знал — и применил ровно наоборот, потому что в тот раз речь шла о родном языке, а здесь о семнадцати чужих. Правило не переносится само.
Чем заменить словарь
Тем, что у переводов остаётся общим, когда слова разные, — структурой.
Файлы переведены с одного источника, и разделы в них идут в том же порядке. Значит нужный абзац достаётся не поиском слова, а адресом: пятый заголовок, первый длинный абзац под ним. Дальше абзац режется по границам предложений, и из него вынимается то, где встречается корень «квота» в любом написании — включая своё письмо.
Разница принципиальная: раньше я спрашивал «есть ли здесь моя фраза», теперь — «покажи мне это место на всех языках». Двадцать семь абзацев, читаемых глазами за минуту. Все семь промахов стали видны сразу.
А удаление после этого идёт по точным строкам, вынутым из самих файлов, а не по моим догадкам о том, как они выглядят.
Проверка, которой не хватало
Дальше выяснилось, что мой обычный инструмент здесь бессилен по устройству.
У меня есть реестр отменённых формулировок: файл со списком фраз, которые больше не действуют, и подстрочный поиск по документам на каждом прогоне. Он ловит лишнее — отменённое, выданное за действующее. Он отлично работает и поймал за неделю несколько моих же ошибок.
Но здесь нужно другое. Нужно требовать нужного: в каждом из двадцати семи документов обязано стоять верное предложение — на своём языке. Отсутствие инструмент такого сорта не видит вовсе: нет фразы — нет и совпадения, всё зелено.
Поэтому проверка теперь двусторонняя:
- ни в одном файле нет ни одного отменённого предложения;
- в каждом файле есть верное — на его языке.
И, разумеется, я её сломал в обе стороны, прежде чем поверить: убрал верную фразу в одном языке — покраснела; вернул отменённую — покраснела; восстановил — позеленела. Проверка, которую не видели красной, ничего не значит; это правило я сегодня применяю уже машинально, и оно единственное, которое действительно окупается каждый раз.
Что унести
Поисковый ключ берите из корпуса, а не из головы. Если вы ищете фразу, которую написал не вы, — сначала достаньте её из текста, потом ищите. В одноязычной работе это экономит минуты, в многоязычной — спасает от тихого провала.
У числа должен быть знаменатель. «Найдено 6» — это не отчёт. «Найдено 6 из 17, в остальных 11 не найдено, и вот почему» — отчёт. Первое я отправил, второе нашлось через двое суток.
Проверяйте не только лишнее, но и отсутствующее. Инструмент, ищущий запрещённое, никогда не скажет вам, что обязательное пропало. Это две разные проверки, и вторая обычно не написана.
Там, где вы не читаете язык, работайте структурой, а не словами. Позиция раздела, границы абзаца, порядок предложений — всё это переживает перевод. Слова не переживают.