Глоссарий перевода 101 — фиксируем имена персонажей и терминологию в машинном переводе
Машинный перевод обезличивает имена собственные. Глоссарий перевода принудительно подставляет пары терминов источник→цель в каждом пакете, у каждого провайдера — чтобы имя вашей героини читалось одинаково в главе 1 и в главе 47. Как работает маска-заполнитель в RuneTranslate, когда TM и глоссарий работают вместе, и рабочий процесс с CSV для обмена глоссариями между переводчиками.
Прогоните японскую визуальную новеллу из 200 строк через DeepL — и имя героини выходит как Alice. Прогоните следующие 200 строк — и это уже Aris. Следующий пакет останавливается на Arisu. К четвёртой главе у неё три имени в зависимости от того, какую сцену вы читаете.
Это самый частый режим отказа машинного перевода в длинных повествовательных играх — не плохая грамматика и не корявые формулировки, а несогласованные имена собственные. У провайдера нет памяти между пакетами; он просто угадывает наиболее правдоподобную латинизацию каждый раз, когда видит имя. За 40-часовую RPG этот дрейф превращает читаемый перевод в нечто, будто переведённое четырьмя разными людьми.
Глоссарий перевода решает эту проблему. Вы один раз задаёте пары терминов источник-цель — アリス → Alice, 勇者 → Hero, 魔王 → Demon Lord — и каждый пакет перевода, у каждого провайдера, их соблюдает. Провайдер даже не видит эти термины в исходном виде. Об этом и пойдёт речь в этой статье.
Что такое глоссарий на самом деле
Глоссарий в RuneTranslate — это список правил из трёх столбцов:
- source — подстрока на языке источника, которую нужно зафиксировать (по умолчанию японский; любой поддерживаемый язык источника) (напр.
勇者) - target — то, как вы хотите это отобразить на выходе (напр.
Hero) - targetLang — к какому языку вывода применяется это правило (так что один глоссарий может охватывать английский + испанский + немецкий сразу)
Добавьте 30 таких записей для типичного состава персонажей визуальной новеллы — и вы одним махом устраните весь этот класс дрейфа имён собственных.
Как работает маска-заполнитель (независимо от провайдера)
Наивный способ применить глоссарий — написать регулярное выражение, которое подставляет целевой термин после работы провайдера. С DeepL это более-менее работает, но с LLM-провайдерами проваливается: LLM уже перестроил предложение вокруг переведённого термина, и ваша замена регуляркой оставляет висящие артикли и странные заглавные буквы.
RuneTranslate маскирует термины глоссария до того, как они попадут к провайдеру. Runner проходит по каждой исходной строке пакета и заменяет каждый source из глоссария на числовой заполнитель — [[G0]], [[G1]] и т. д. Провайдер видит непрозрачные токены, которые нельзя перевести неправильно. На обратном пути эти заполнители заменяются вашим термином target, а затем поверх восстанавливается маска тегов движка (коды RPG Maker, теги KAG, интерполяции Ren'Py).
Результат: термины глоссария отображаются одинаково, работаете ли вы на DeepL, OpenAI GPT-4o, Anthropic Claude или бесплатном Google Translate. Те же маски, тот же шаг восстановления, тот же итоговый вывод.
Порядок приоритета — TM важнее глоссария, глоссарий важнее провайдера
Стоит знать, как пакет перевода обрабатывается внутри runner, потому что это объясняет, почему правки глоссария не стоят вам кредитов провайдера и как память переводов взаимодействует с глоссарием:
- Короткое замыкание памяти переводов (TM). Если вы уже переводили ровно эту исходную строку в любом прошлом проекте, кэшированный перевод выдаётся мгновенно — ноль обращений к провайдеру, ноль затрат. Единица удаляется из пакета до того, как её увидит провайдер.
- Маска глоссария применяется к тем единицам, которые не были обслужены TM.
- Обращение к провайдеру происходит по замаскированному тексту. Это единственный шаг, который стоит денег / расходует квоту.
- Восстановление — заполнители глоссария становятся вашими целевыми терминами, а затем поверх восстанавливаются теги движка.
- Запись в TM — итоговая переведённая строка кэшируется, чтобы в следующий раз, когда вы увидите этот японский, она бесплатно вернулась к шагу 1.
Попадания в TM — крупнейшая экономия затрат. Глоссарий — крупнейшая экономия качества. Вместе они усиливают друг друга: отредактируйте строку вручную один раз, она кэшируется в TM, а глоссарий сохраняет согласованность имён собственных как на попаданиях в кэш, ТАК и на новых пакетах.
Взаимодействие TM и глоссария (защита от обхода)
Есть один тонкий пограничный случай, о котором стоит знать: что, если вы три месяца назад перевели 100 строк с 勇者 без глоссария, TM закэшировала их как Warrior / Champion / Hero вразнобой — а теперь вы добавляете 勇者 → Hero в глоссарий?
Наивно TM всё равно вернула бы Warrior в следующий раз, когда вы увидите 勇者 — ведь именно это было закэшировано. RuneTranslate защищает от этого: в момент попадания в TM, если source из глоссария присутствует в текущей единице И кэшированная цель не содержит целевого варианта из глоссария, попадание в кэш обходится, и эта единица уходит на новое обращение к провайдеру. В итоговой сводке прогона появится строка «N единиц обошли кэш, чтобы учесть изменения глоссария», чтобы вы знали, что это произошло.
Итог: добавление новой записи глоссария в старый проект не оставляет вас с устаревшими переводами. Достаточно заново запустить проход перевода по затронутым единицам.
Составление глоссария — что добавлять
Для типичного проекта сортируйте по значимости:
- Сначала состав персонажей. Каждый именованный персонаж. По возможности берите из вики / VNDB / собственного экрана титров игры. Только это устраняет 80% дрейфа в длинных играх.
- Затем места. Города, подземелья, регионы, королевства. Особенно всё, что записано кандзи с более чем одной правдоподобной латинизацией.
- Фирменные атаки / навыки в третью очередь. Названия атак боссов, повторяющиеся названия заклинаний, названия спецприёмов. Важно для RPG и VN с упором на бои.
- Специфическую терминологию мира — в четвёртую. Выдуманные слова, которыми игра называет расы / классы / артефакты / валюту.
Что не добавлять: обычные слова. 剣 → sword — верный путь к ложным срабатываниям: вы зафиксируете каждое сложное слово с 剣 (魔剣, 聖剣, 剣士), которое провайдер и сам передал бы нормально. Записи глоссария — это буквальные совпадения подстрок; делайте их достаточно длинными, чтобы они были уникальны для имени собственного, которое вы пытаетесь зафиксировать.
Импорт / экспорт CSV — обмен глоссариями
Переводите фан-проект с соавторами? На вкладке глоссария в Настройках есть кнопки Импорт CSV и Экспорт CSV, которые прогоняют ваши записи туда-обратно через файл CSV по RFC-4180:
source,target,targetLang 勇者,Hero,en アリス,Alice,en 魔王,Demon Lord,en 村人A,Villager A,en 勇者,Héroe,es
Строка заголовка обязательна. Поля, содержащие запятые, кавычки или переводы строк, заключаются в двойные кавычки; встроенные кавычки экранируются как "". UTF-8 с опциональным BOM при импорте (Excel по умолчанию экспортирует UTF-8-BOM). Пустые строки и строки с неподдерживаемыми кодами targetLang пропускаются с указанием причины по каждой строке.
Импорт предлагает режим Слияние (добавляет строки CSV поверх вашего текущего глоссария, устраняет дубликаты по source+язык, при конфликте побеждает CSV) или режим Замена (стирает существующее и использует только то, что есть в CSV). Слияние — правильный вариант по умолчанию для соавторов, делящихся частичным глоссарием; Замена подходит для архивации / восстановления резервных копий.
Текущие ограничения
- Только буквальные совпадения подстрок. Никаких regex, никаких подстановочных знаков. Если нужно зафиксировать и
勇者よ, и勇者だ, пока что вы добавляете две записи. - Пары по каждому целевому языку. Запись глоссария привязана к одному языку вывода. Нельзя задать «source=勇者, targets=Hero (en) + Héroe (es) + Held (de)» в одной строке — вы добавляете три строки. Формат CSV поддерживает это естественным образом.
- Только уровень Supporter / Pro. На бесплатном уровне карточка глоссария показывается, но записи не влияют на прогоны перевода. Диалог знакомства ведёт на Patreon.
Подводя итог
Из всех рычагов качества в машинном переводе у глоссария наилучшее соотношение усилий и отдачи — десять минут на его составление экономят вам часы ручной правки несогласованных имён потом. Начните с состава персонажей, выпустите первый проход и добавляйте термины по мере того, как читаете результат и замечаете дрейф.
Сочетайте его с провайдером, который хорошо передаёт тон (Anthropic Claude — мой выбор по умолчанию для VN), и ваш результат уже перешагнёт порог «читаемого машинного перевода» и попадёт на территорию «можно выпускать как фан-перевод с лёгкой ручной правкой».
Скачайте RuneTranslate, чтобы опробовать глоссарий на реальном проекте. Это функция уровня Supporter ($3/mo); бесплатный уровень остаётся полностью открытым для движков + провайдеров.
Готовы попробовать RuneTranslate?
Бесплатный тариф открывает все движки и всех провайдеров перевода. Supporter ($3/mo) открывает полную скорость.
Скачать для Windows