Babareba-Tolmach icon

Tolmach

Русский перевод 87 модов Valheim и субтитров игры. Меняется только отображаемый текст: сохранения, рецепты и конфиги модов не затрагиваются.

CHANGELOG

Изменения

0.6.0 (2026-09-29)

Highlights

Первый выпуск после 0.2.0 и первый на Thunderstore. Tolmach работает сам, без другого пакета русского перевода: 87 модов и субтитры игры, перевод с оригинального английского текста модов. Ниже изменения по этапам, от новых к старым.

Еще 18 модов

  • Переведены 16 модов:
    • Armory от Therzie: названия и описания доспехов, плаща и пояса, оружейная станция, бонусы комплектов, вкладка молота «Военное дело». Это не Valheim Armory от MidnightMods: у того свой полный русский;
    • MyLittleUI: статистика персонажа в главном меню и слова часов в режиме Fuzzy;
    • SmelterUpgrades: подсказки плавильни, печи и доменной печи, сообщения, улучшения в меню молота;
    • Infinity Hammer, Server devcommands, World Edit Commands: сообщения при строительстве, на HUD и на большой карте;
    • NetworkPerformanceSystem: сообщения при обрыве связи с сервером;
    • ValheimInfiniteFire и Transmog: подсказки у огня и сообщение о переключении внешнего вида;
    • Better Beehives, Spearfishing, Solid Hitboxes, Torches Are Fires, Wield Equipment While Swimming, Quick Teleport, Quick Stack Store: сообщение о несовпадении версий при входе на сервер (своего текста у этих модов нет или он уже переведен самим модом).
  • Recipe Description Expansion: в подсказке комплекта части теперь названы как в игре, а не внутренними именами вроде ArmorTrollLeatherChest. Комплект тоже назван как в игре: своим ключом или названием эффекта комплекта. Комплекты Armory там больше не теряют название из-за регистра ключа. Для этого у шаблонов Tolmach появились параметры item и itemSet.
  • MissingPieces переведен самим модом полностью, но в трех строках были ошибки, и Tolmach их исправляет: «Деревянная стена 1x1» (стояла кириллическая «х») и описания двух верхних стен (на обе было скопировано одно описание). Для таких исправлений в каталоге есть список replaceNative; остальной русский модов Tolmach по-прежнему только дополняет.
  • Текст методов, которые Harmony не может пропатчить (фильтр исключений, блок fault), теперь переводится там, где он передается методу показа: например, заголовки окон редактора настроек Traders Extended. Предупреждение UI patch skipped в журнале остается, только если строка каталога действительно осталась английской.
  • У Transmog и Quick Stack Store свой русский полный, Tolmach его не трогает.
  • Не переведено, подробности в docs/COVERAGE.md:
    • справка и вывод консольных команд инструментов JereKuusela, окно ConditionalConfigSync об отказе в подключении;
    • имена инструментов Infinity Hammer из его файла данных.
  • Проверки: 455 тестов NUnit, валидатор данных со схемой каталога, проверка пакета.

SocialSystem и новые версии модов

  • Переведен SocialSystem 1.0.1: друзья, группы и личные сообщения.

    • Окна «Общение» и «Группа», статусы («В сети», «Отошел», «Невидимый», «Не в сети»), подсказки кнопок и диалоги.
    • Приглашения, проверка готовности, сообщения на экране и в чате ([ЛС], [Группа]).
    • Справка команд dm, r и p в консоли.

    Мод хранит строки в своей таблице Jotunn, только на английском и немецком. Tolmach добавляет туда русскую и ничего не заменяет. Не переведена чит-команда socialsystem_fake: ею автор мода проверяет друзей и группы в одиночку.

  • В AdventureBackpacks 2.2.2, More_World_Locations_AIO 5.1.5 и WackysDatabase 2.5.36 снова переводятся строки из кода. Каталоги были сверены с прежними версиями этих модов, и, увидев другую версию, Tolmach пропускал перехват строк, а ключи словарей работали. В новых версиях все строки каталогов на прежних местах, словари и обучающие тексты не изменились, переводы те же.

  • Обновление мода больше не отключает его перевод. Если версия отличается от той, с которой сверен каталог, Tolmach переводит строки, которые находит, а новые строки мода остаются английскими. О версии и ненайденных строках он предупреждает в журнале и в Tolmach.runtime.txt. Параметр Compatibility.AllowOtherVersions заменен на Compatibility.OnlyAuditedVersions (по умолчанию выключен): он оставляет для других версий только словарные переводы, как раньше. Старую строку AllowOtherVersions из muratovnik.tolmach.cfg можно удалить.

  • Проверки: 380 тестов NUnit, валидатор данных со схемой каталога, проверка пакета.

По смыслу, а не по совпадению слов

  • Исправлены названия, которые 0.5.2 взял из игры только потому, что английское слово то же, хотя предмет у мода другой:
    • GoldBars: «Небольшая кучка монет»; «Гора монет» в игре — большой клад;
    • VNEI: вкладка «Рецепты», потому что в ней не только ремесло, но и добыча с существ, переплавка и готовка; фильтр «Все станции»: верстаки, инструменты, плавильни, существа;
    • Shipyard: «Просмоленная лестница 2 м» — это лестница, как на корабле, а не стремянка;
    • Amazing Nature: «Проверить» у гнезда шелкопрядов, как «Проверить пчел» у улья;
    • VikingNPC: «Хозяин» в подсказке над викингом.
  • Остальные правки 0.5.2 перепроверены по коду и ресурсам модов и остаются: «Пиры», «ремесленная стойка», «Залежи медной руды» (в моде Ore Deposit), «Рунная кузница», «Вкл.»/«Выкл.».
  • Каталог перевода с опечаткой в названии раздела или с пустым значением вместо таблицы теперь не загружается, и это видно в журнале. Раньше строки такого раздела молча оставались английскими.
  • Проверки: 373 теста NUnit, валидатор данных со схемой каталога, проверка пакета.

Как в игре

  • Переводы сверены с русской локализацией игры:
    • «ё» больше не пишется, как и в самой игре: «Черный лес», «Кремневая кирка». Имена собственные её сохраняют: «Бьёрн», «Ёрмунганд»;
    • между числом и единицей измерения неразрывный пробел: «2 м», «17 с»;
    • термины приведены к игровым:
      • Culinary Horizons: вкладка «Пиры» вместо «Банкеты»;
      • VNEI и Amazing Nature: «ремесленная стойка» вместо «станции»;
      • VNEI: «Чертежи» вместо «Рецепты»;
      • OreMines: «Залежи медной руды» вместо «Медная жила»;
      • GoldBars: «Небольшая гора монет»;
      • Amazing Nature: «Рунная кузница» и «Посмотреть» у гнезда шелкопрядов;
      • Shipyard: «Просмоленная стремянка»;
      • VikingNPC: «Владелец»;
      • Lightkeeper: «Вкл.»/«Выкл.».
  • TakeAllCooked: подсказка у стойки для готовки «Взять все готовое». Мод берёт её из своего конфига; если вы поменяли этот текст сами, он останется как есть.
  • Проверки: 371 тест NUnit, валидатор данных, подсказка TakeAllCooked на DLL самого мода вне игры.

Сверка покрытия

  • Все 68 модов сверены с перечнем строк, которые переводил другой пакет перевода. В части модов строки выпали при подготовке 0.4.0: строку, которую нельзя было заменять в одном месте, не перевели и во всех остальных. Теперь они переведены:
    • MoveBuildPieces: сообщение «Блокировка для перемещения потеряна»;
    • Huginn: группа меток «Портал» в фильтре карты, строки о залежах в выводе huginn.lookingat;
    • Location Placement Accelerator: режим «Ванильный» на экране расстановки локаций;
    • Amazing Nature: эффект «Провокация» и «Кремнёвая кирка»;
    • Arsenal Reborn: эффект «Благословение Одина».
  • Ключи, для которых мод не задаёт английского текста, но показывает их в игре, написаны по контексту:
    • Amazing Nature: названия шести скал («Ледяной утёс», «Скала Пепельных земель»), описание трофея лесного тролля, надпись на табличке мифического алтаря;
    • Arsenal Reborn: описание «Глубинного клеймора»;
    • VNEI: фильтр «Все станции».
  • BossAdd: в сообщении о порядке убийства цвет Массы костей теперь по-русски («Сначала убейте [красную] Массу костей!»). Раньше цвет оставался корейским.
  • Проверки: 368 тестов NUnit, валидатор данных, сверка новых литералов с IL модов. В игре эти изменения не проверялись.

Creature Level and Loot Control

  • Переведён Creature Level and Loot Control: таблички существ с эффектами, стихиями и особенностями боссов в роде существа («Огненная Летучая мышь», «Эйктюр Отражающий»), сообщения о росте уровня сектора и о призыве на помощь, уровень сектора на миникарте, кнопки редактора YAML, значения списков и все 69 настроек в окне F1, вывод консольных команд cllc. Всего 68 модов и субтитры игры.
  • У этого мода своя YAML-таблица переводов, которую он читает один раз при запуске. Tolmach загружается после него и подставляет русскую таблицу; если рядом с модом лежит свой Russian.yml, дописывает только недостающее. Имена секций и ключей в .cfg остаются английскими.
  • Исправлено по первой проверке 0.4.0 в игре (игра запускается, русский включается):
    • EquipmentAndQuickSlots: подписи слотов «Плечи» и «Оберег» (были Shoulders и Trinket);
    • CraftyCartsRemake привязан к установленной 3.2.4, повозки со станциями и их хранилища называются «Повозка (Верстак)» и «Хранилище: Повозка (Верстак)» вместо «Верстак Повозка Storage»;
    • AzuAutoStore: подсказки избранных предметов и ячеек («Ячейка в избранном…»);
    • метки карты: цели рунных камней UsefulRunestones без своего названия («Лагерь Хильдир» вместо Hildir_camp) и названия локаций ExpertExplorer у меток, сохранённых на английском («Погребальные комнаты» вместо Burial Chambers);
    • ложные предупреждения «Literal not replaced» у методов с перегрузками (AzuAutoStore, PlantEasily) и больше сотни предупреждений HarmonyX о поиске полей в журнале.
  • Проверки: 368 тестов NUnit, валидатор данных, сверка литералов с IL; таблички, сообщения и настройки CLLC проверены на DLL самого мода вне игры, патчи остальных модов — на их DLL. В игре CLLC не проверялся.

Ещё 25 модов

  • Переведены еще 25 модов, которые поддерживал другой пакет перевода: Balrond Amazing Nature, Arsenal Reborn, Constructions, Furniture Reborn, Dual Mastery и Lightkeeper, Passive Powers, OdinsSteelworks, Epic Loot, VNEI, Inventory Slots, Culinary Horizons, Hunter Legacy, Magic Supremacy, Eternal Legends, XPortal, TakeAllCooked, MoveBuildPieces, FoodDurationMultiplier, BossAdd, Huginn, FirstPersonMode, PerfectPlacement, Location Placement Accelerator и AzuWorkbenchTweaks. Всего 67 модов и субтитры игры.
  • У модов со своим русским переводом Tolmach дописывает только недостающие строки: ключи без перевода, вкладки строительства, сообщения ServerSync. Ключи, которые мод использует без английского текста (в игре виден [ключ]), переведены по месту использования.
  • ValheimArmory и ImpactfulSkills уже полностью переведены самими модами. Creature Level and Loot Control будет в следующей версии: ему нужен отдельный адаптер.
  • Литералы можно задавать и в типах без namespace (<global> в списке namespaces каталога).
  • Валидатор отклоняет ключ или сырую строку, которые в разных каталогах переведены по-разному.
  • Проверки: 341 тест NUnit, валидатор данных, сверка всех 630 литералов с IL самих DLL. В игре моды этой версии ещё не проверялись.

Самостоятельный пакет: 42 мода и субтитры игры

  • Tolmach работает сам по себе: другие пакеты русского перевода не нужны. Если такой пакет установлен, его строки по-прежнему не перезаписываются.
  • Новые моды: Jotunn (окно несовместимости модов при подключении, отмена и повтор действий, сброс навыков), AdventureBackpacks, AzuAreaRepair, PlantEasily и Balrond Humanoid Randomizer (варианты существ вроде «Грейдворф-страж», эффекты, атаки, оружие).
  • Субтитры звуков игры: 142 строки, которых нет в русской версии Valheim 1.0.16.
  • Расширены переводы: More World Locations AIO (порты, грузы и доставки, обучение в порту, святилища и благословения, путевые камни, торговцы, книги навыков), Balrond Shipyard (предметы, постройки, чертежи улучшений кораблей, записи Compendium), PlantEverything (названия и описания растений), AzuAutoStore, AzuCraftyBoxes и Build Camera (в том числе сообщения о несовпадении версий модов при подключении).
  • Исправлены переводы в 17 модах: термины приведены к русской версии игры (фулинги вместо гоблинов, Павшие, Матерь, Серокамень, повозка, рассекающий урон), исправлена грамматика сообщений DynamicStoragePiles, реплики NPC больше не зависят от пола.
  • Названия, описания и записи Compendium, которые моды хранят в объектах, переводятся при показе: сохранённые данные остаются на английском.
  • Вывод консольных команд переводится у модов, где он указан в docs/COVERAGE.md. Имена команд и аргументов остаются английскими.
  • Исправлен запуск игры вместе со StartupAccelerator: загрузка больше не останавливается. Tolmach не патчит методы с фильтром исключений (catch … when) и с блоком fault (итераторы с try/finally): HarmonyX 2.9 не может их правильно пересобрать, а StartupAccelerator применяет патчи позже, и ошибка останавливала игру. Поэтому заголовки окон редактора TradersExtended остаются английскими; содержимое окон переводится, как раньше.
  • Файлы каталогов называются tolmach-<мод>.json. Встроенный в SleepSkip и другие моды LocalizationManager принимал SleepSkip.json за свой файл перевода и падал.
  • При отложенных патчах в логе больше нет сотен ложных предупреждений «Literal not replaced»: проверка выполняется, когда транспайлер действительно отработал.
  • Проверки: 237 тестов NUnit, валидатор данных и сверка всех 318 литералов с IL установленных DLL. В самой игре пакет ещё не проверялся.

Features

  • translate SocialSystem and 18 more mods, correct three MissingPieces strings and show game names in the Recipe Description Expansion set block (ea3e9ac)
  • keep a mod's adapters when its version differs from the audited one (ea3e9ac)
  • reject catalogs that do not match their types (f48a3d5)
  • translate config texts that a mod reads in a named method (7c8df24)
  • apply Creature Level and Loot Control's own language table (a445acb)
  • allow literals in types without a namespace (f6a913f)
  • translate stored display text, add five mods and the game's captions (66b5328)
  • catalog: translate Creature Level and Loot Control (ae58edd)
  • catalog: translate 25 more mods (09ab47d)
  • package: replace the package icon with the book artwork (f98cb6b)
  • validation: check catalogs against a JSON Schema (01b098c)
  • validation: check the CLLC language table (a419d92)
  • validation: require one translation per key across catalogs (87813bd)

Bug Fixes

  • translate display calls of methods Harmony cannot rebuild (ea3e9ac)
  • patch only the overload that holds a literal (5145688)
  • leave methods with fault blocks unpatched (7e9c49c)
  • leave methods with exception filters unpatched (3a35f8e)
  • build: decode the package icon instead of reading its header (d585efd)
  • catalog: name seven objects by what they are in the mod (c1ecc3b)
  • catalog: follow the game's spelling, spacing and terms (8d73a7f)
  • catalog: add the strings found by the coverage audit (0a2c5df)
  • catalog: strings left English in the first 0.4.0 game session (22cb6a4)
  • catalog: name catalogs tolmach-<id>.json (69dd148)
  • catalog: use the game's Russian terms in 17 catalogs (8d0de49)

0.2.0 — новое имя: Tolmach

  • Пакет называется Tolmach («толмач» — старинное русское «переводчик»). Переводы и поведение не изменились: все 37 каталогов побайтно совпадают с 0.1.3.
  • Новый идентификатор плагина muratovnik.tolmach (был local.valheim.russianpack). DLL — Tolmach.dll, настройки — BepInEx/config/muratovnik.tolmach.cfg, отчёт — BepInEx/config/Tolmach.runtime.txt. Если у вас стоял локальный ValheimRussianPack, удалите его: у модов разные идентификаторы, и иначе загрузятся оба. Настройки из старого файла не переносятся.
  • Первый публичный выпуск. Исходники и релизы — github.com/Muratovnik/Tolmach. ZIP релиза собирается из закоммиченного кода, рядом публикуется SHA256SUMS.
  • Сборка: Build.ps1 берёт пути из переменных TOLMACH_* и принимает -OutputDirectory. Список хешей исходников SHA256SUMS.txt удалён: целостность исходников обеспечивает Git.

0.1.3 — первый собранный пакет для Thunderstore, Gale и r2modman

  • Впервые собрана и проверена DLL: 167 тестов NUnit с библиотеками игры, BepInEx и Harmony из профиля. Сборка выдаёт пакет Thunderstore, который импортируется в Gale и r2modman как локальный мод; зависимости BepInExPack и JsonDotNET указаны в манифесте.
  • Сообщение OreMines «Mines have been reset!» теперь переводится и в чате, и над головой: перехват перенесён на Chat.OnNewChatMessage. Прежний поиск Chat.AddString не находил метод, объявленный в Terminal.
  • Нативная регистрация через LocalizeKey больше не перезаписывает уже существующий чужой русский перевод ключа.
  • Перевод не записывается в отдельные «английские» экземпляры Localization, которые создают моды (например, SkillManager для имён разделов конфига).
  • Язык игры определяется её собственным GetSelectedLanguage (учитывает Steam Deck). Язык, выбранный игрой при первом запуске по локали системы, подхватывается при ближайшем обновлении, а не после перезапуска.
  • Метод мода, ссылающийся на отсутствующую необязательную зависимость, пропускается с предупреждением и больше не прерывает установку остальных адаптеров этого мода.
  • Удалено правило для Chat.AddString, которое никогда не срабатывало: вывод консольных команд модов по-прежнему не переводится.
  • Сборка: исправлен build-receipt.json (было ~57 МБ из-за сериализации PowerShell, с локальными путями). ZIP собирает Thunderstore CLI, затем проверяются формат пакета, раскладка для Gale и хеши DLL/каталогов. В проект добавлен nuget.config.
  • Собственный установщик Install.ps1/Install.cmd удалён: установку выполняет менеджер модов. Переводы и привязки 37 каталогов не изменены.

0.1.2 — стандартные механизмы и разделение проверки данных/исполнения

  • Сборка через SDK/MSBuild; один production-проект. Copy-only установка отделена.
  • NUnit/VSTest использует DLL production-проекта, без повторной компиляции src.
  • Удалены Python-переводчик, C#-лексер, собственный test Main и Reflect.Path.
  • Общая рефлексия и IL labels переданы Harmony. Нет сканирования 12 words-only модулей.
  • Jötunn public GetTranslations/AddTranslation, включая in string; Map не читается.
  • Глобальная регистрация через Translate/AddWord; защита существующего русского также при обратной регистрации нашего текста. Обновление кэша после native refresh.
  • Неуспешный rebind сбрасывает прежний runtime context; nullable входы display API оставляют оригинал вместо исключения. Ошибка отписки не останавливает очистку.
  • Пакетный путь сравнивает DLL/каталоги с тестовым выходом, не принимает пустой/пропущенный тестовый запуск. Старый ZIP отделяется от нового результата.
  • ZIP-установка проверяет разрешённые файлы и каталоги, дубликаты и размеры до записи профиля.
  • Все 37 каталогов сохранены без изменения; DLL и игровой запуск по-прежнему не получены.

История предшествующей поставки

Изменения

0.1.1 — исправления после ревью 0.1.0

Подтверждённые замечания предыдущего ревью

  • F2: BalrondShipyard.merged вместо имени файла без .merged.
  • F3: отдельное поле pluginVersion для всех 37 модулей; StructureTweaks 1.37. Отсутствующие build/revision трактуются как нули; ненулевая ревизия сравнивается.
  • F4: реальные подписи ExpertExplorer и семантический параметр стандартного имени в уведомлении о добавленной метке.
  • F5: только явно помеченные вложенные сообщения/названия полей переводятся повторно. Глубина вложения ограничена; остальные параметры непрозрачны.
  • F6: создание меток исключено из универсальных UI-перехватов. Отдельный адаптер меняет только подпись виджета; предусмотрено восстановление при смене языка и настройка отключения перевода стандартных меток.
  • F1 остаётся открытым: готовый бинарник не собран; среды исполнения нет.

Дополнительно найдено и исправлено при внесении правок

  • TradersExtended объединяет несколько ошибок. Добавлены 22 замены UI-литералов строго в BuildItemRowValidation, GetKeyValidation, GetIntersectionValidation. Идентификаторы и проверяемые значения не переводятся.
  • Ограничитель версии теперь применяется и к LegacyDisplay/OreMines chat-hook, которые иначе могли продолжать работать на неподтверждённой версии.
  • Старое сравнение версии игнорировало четвёртый компонент. Ненулевая revision теперь препятствует UI-патчам так же, как другой build/minor.
  • Отдельный адаптер постоянной подписи PortalLines отслеживает слабые ссылки и обновляет известный текст после переключения языка.
  • Собственный IlReader.cs заменён на Harmony.PatchProcessor.GetOriginalInstructions.
  • Добавлены диагностика фактических мест замены и отсутствующих ожидаемых литералов.
  • Производственный CatalogLoader используется тестами; убраны копии DTO из EngineStubs. Загрузка отвергает повторяющиеся JSON-ключи, пустые обязательные значения, несовпадающие плейсхолдеры и неизвестные правила перевода аргументов.
  • Установщик компилирует тот же код загрузчика/движка/адаптеров для тестов, проверяет версию созданной DLL, сохраняет идентичности зависимостей и build-receipt. Сторонние тестовые зависимости остаются только во временной папке.
  • Диагностика сбоя отката не скрывает его; native stderr собирается с проверкой exit code, а не принимается автоматически за завершённый журнал ошибок.

Все пункты относятся к изменённым исходникам и данным. Игровой запуск, фактическая компиляция и Windows-установка не подтверждены. Полный статус — в docs/REVIEW-0.1.1.md.