Как добавить другую игру или приложение¶
RimLoc сейчас RimWorld-first, но generic localization core строится вокруг адаптеров.
Цель: разработчик или coding agent должен уметь добавить новую среду, не переписывая editor, TM, glossary, validation framework, project history и multi-target model.
Что уже есть¶
Границу уже проверяют две разные adapter identity:
- RimWorld — основной production target;
- RimLoc application/self-localization — второй, структурно другой источник.
То есть core project model не должен быть равен “RimWorld XML”.
Стабильного публичного third-party adapter ABI/marketplace пока нет.
Что принадлежит core¶
Generic core знает:
- Project;
- SourceEntry;
- Translation;
- Locale;
- revision/history;
- TM;
- glossary;
- review;
- findings;
- provenance;
- build/output artifacts.
Adapter знает:
- discovery/detection;
- parsing;
- effective-content/version resolution;
- mapping в canonical SourceEntry;
- existing translation import;
- adapter-specific validation;
- build/export;
- optional runtime verification.
Не добавляйте ThingDef, Minecraft keys, Steam Workshop rules или object model другой платформы в generic core.
Минимальный checklist адаптера¶
Для in-tree adapter:
- Выберите стабильный adapter ID и schema/API version.
- Опишите поддерживаемые source kinds.
- Реализуйте detection/discovery.
- Выдавайте deterministic canonical entries со stable IDs.
- Сохраняйте source location/provenance.
- Реализуйте existing-translation import, если он имеет смысл.
- Реализуйте update semantics: unchanged/new/source-changed/obsolete/ambiguous — где применимо.
- Объявите capabilities.
- Реализуйте безопасный build/export.
- Добавьте fixtures и conformance tests.
Capability-driven UI¶
UI должен спрашивать adapter, что он умеет, а не захардкоживать один workflow.
Например:
- existing translation import;
- build/export;
- source context;
- dependencies;
- versions/content roots;
- runtime validation.
Unsupported capability не должна выглядеть как рабочая кнопка.
Conformance¶
Минимально полезно проверить:
- deterministic inventory;
- stable IDs;
- отсутствие записи в source;
- target-locale isolation;
- persistence/restart;
- update behavior;
- build/round-trip;
- path containment;
- чистый отказ для неизвестной/unsupported semantics.
Классы расширений¶
Долгосрочно возможны:
- простые/declarative adapters для JSON/CSV/gettext-like ресурсов;
- built-in Rust adapters для сложных игровых семантик;
- external sandboxed/versioned adapters, если появится реальная ecosystem-потребность.
Не стоит фиксировать Rust dynamic-library ABI как публичный долгосрочный plugin contract. Будущий внешний boundary лучше делать versioned/language-neutral (process/RPC или WASM) после отдельного дизайна.
Что не нужно до beta¶
Minecraft/Paradox/Terraria и другие среды не нужны ради галочки.
Первая beta должна доказать RimWorld workflow и то, что архитектура не мешает добавить следующий adapter позже.
Для coding agents¶
Дайте агенту:
- эту страницу;
- канонический architecture doc;
- близкий reference adapter;
- fixtures;
- conformance tests;
- read-only/output rules.
Ожидаемый результат — локальная adapter-реализация, а не game-specific правки по всему проекту.