Heyvanushi Posted 17 hours ago Posted 17 hours ago CK3 Mod Translator View File # CK3 Mod Translator Универсальный переводчик локализации модов для Crusader Kings III. CK3 Mod Translator — бесплатная настольная программа для Windows, которая в один клик переводит файлы локализации (`l_english.yml`, `l_russian.yml` и др.) модов для **Crusader Kings III** на нужный язык. Результат — готовый файл, который игра корректно читает: правильные заголовки языков, версии ключей и экранирование. Портативная версия — не требует установки. Просто скачайте `.exe`, запустите и переводите. Данные (кэш, словари, история) сохраняются на вашем компьютере. --- ## Возможности ### 🚀 Быстрый массовый перевод - Перевод целой папки мода или одного файла в несколько кликов. - Пакетная обработка с прогресс-баром по ходу работы. - Автоматическое распознавание структуры `.yml` файлов локализации CK3. ### 🌍 29 игровых языков Поддержка всех языков, которые играет CK3: русский, английский, немецкий, французский, испанский, польский, украинский, китайский (упрощённый и традиционный), японский, корейский, португальский/бразильский, итальянский, турецкий, чешский, венгерский, нидерландский, скандинавские, финский, румынский, арабский, персидский, вьетнамский, тайский, латинский и другие. ### 🔌 Несколько провайдеров перевода - XCL — встроенный локальный сервер перевода, стартует вместе с программой (без внешних ключей). - Google Translate — через локальный прокси. - DeepL — высокое качество (требуется API-ключ). - MyMemory — бесплатный сервис без ключа. ### 🧠 Умный перевод - Кэш переводов — повторные переводы мгновенные, без лишних запросов. - Защита кода игры — метки, шаблоны и escape-последовательности (`\n`, `\t`) сохраняются нетронутыми. - Словари и терминология— задайте свои термины и глоссарий; программа закрепит их по всему переводу. - Умная обработка частичных переводов — переведённые строки не переводит повторно. ### 📚 Встроенные инструменты - Редактор файлов — посмотреть и поправить любой `.yml` до/после перевода. - История переводов — журнал всех выполненных операций. - Управление кэшем — экспорт/импорт, просмотр статистики, очистка. ### 🧩 Плагины Программу можно **расширять своими плагинами**. Напишите простой `.js`-файл — и добавьте свою логику перевода, постоянный глоссарий, своего переводчика или автоматические правки. Плагины включаются/выключаются в один клик. --- ## Быстрый старт 1. Скачайте и запустите `CK3 Mod Translator.rar`. 2. Нажмите «Выбрать папку» и укажите папку мода (там, где `localisation` / `localization`). 3. Выберите исходный и целевой язык. 4. Нажмите «Перевести» — готовые файлы появятся в папке целевого языка. --- ## Системные требования - Windows 10 / 11 (x64) - около **150 МБ** свободного места - Интернет (для облачных провайдеров перевода) --- ## Важно - Плагины — это исполняемый код. Устанавливайте только те плагины, которым доверяете. - Для использования DeepL требуется API-ключ. Submitter Heyvanushi Submitted 09/05/26 Category Crusader Kings 3 Requirements
Heyvanushi Posted 17 hours ago Author Posted 17 hours ago # Плагины CK3 Mod Translator Плагины позволяют **расширять функциональность переводчика** и **упрощать работу** без изменения кода самого приложения. Это обычные `.js` файлы (CommonJS), которые загружаются из специальной папки при старте. ## Где находятся плагины Папка плагинов создаётся автоматически в директории данных приложения: ``` <userData>/plugins ``` На Windows обычно: ``` C:\Users\<Имя>\AppData\Roaming\ck3-mod-translator\plugins ``` Открыть папку можно из панели **Плагины** → кнопка **«Открыть папку»**. ## Как начать 1. Откройте панель **Плагины**. 2. Нажмите **«Создать шаблон»** — в папке плагинов появится готовый файл-заготовка. 3. Отредактируйте файл и нажмите **«Перезагрузить»** (или перезапустите приложение). 4. Включите/выключите плагин тумблером. Любой плагин можно включить/выключить, не удаляя файл. ## Структура плагина ```js module.exports = { id: 'my-plugin', // уникальный идентификатор name: 'My Plugin', // отображаемое имя version: '1.0.0', // версия description: '...', // описание author: 'You', // автор hooks: ['preTranslate', 'postTranslate', ...], // какие хуки использует // Вызывается один раз при загрузке плагина. init(manager) { manager.registerHook('preTranslate', (mgr, ctx, text) => { return text; }, this.id); } }; ``` `manager` — это объект PluginManager. В `init(manager)` регистрируются хуки через `manager.registerHook(name, callback, pluginId)`. ## API менеджера Внутри хука первым аргументом приходит `manager`. Доступные методы: | Метод | Описание | |---|---| | `manager.registerHook(name, cb, pluginId)` | Зарегистрировать хук | | `manager.getSettings()` | Доступ к настройкам приложения (чтение/запись) | | `manager.getContext()` | Доступ к сервисам: `translator`, `cache`, `dictionaryManager` | | `manager.notify(event, payload)` | Отправить событие в UI | | `manager.getPlugins()`, `getPlugin(id)` | Список плагинов | Пример доступа к переводчику напрямую: ```js init(manager) { manager.registerHook('postTranslate', async (mgr, ctx, text) => { // mgr.getContext().translator ... но postTranslate синхронный. return text; }, this.id); } ``` ## Список хуков Хуки вызываются в таком порядке во время перевода файла: ### `onAppReady(manager, ctx, data)` Приложение готово. `ctx = { appPath, pluginsDir }`. ### `onFileParsed(manager, ctx, data)` Файл разобран парсером, **до** перевода. `ctx = { filePath, sourceLang, targetLang, parsed }`. Здесь можно модифицировать `ctx.parsed.data` — добавить/удалить/изменить ключи перед переводом. ```js manager.registerHook('onFileParsed', (mgr, ctx) => { // Добавить ключ ко всем файлам ctx.parsed.data['my_custom_key'] = { text: 'My custom line', rawValue: 'My custom line', isBare: false }; }, this.id); ``` ### `preTranslate(manager, ctx, text)` Перед переводом **одной строки**. `ctx = { sourceLang, targetLang }`. Верните строку, чтобы **перехватить перевод** (вернуть своё значение). Верните `undefined`/`null`, чтобы перевести обычным образом. ```js manager.registerHook('preTranslate', (mgr, ctx, text) => { if (text === 'Bathhouse') return 'Баня'; // фиксированный перевод // иначе — обычный перевод }, this.id); ``` ### `beforeTranslateBatch(manager, ctx, texts)` Перед **пакетом** строк. `ctx = { sourceLang, targetLang }`. Верните **массив переводов** той же длины, чтобы **полностью заменить** вызов переводчика. ```js manager.registerHook('beforeTranslateBatch', (mgr, ctx, texts) => { return texts.map(t => 'translated: ' + t); }, this.id); ``` ### `postTranslate(manager, ctx, translated)` После перевода **одной строки**. `ctx = { sourceLang, targetLang }`. Верните итоговую строку. ```js manager.registerHook('postTranslate', (mgr, ctx, translated) => { return translated + ' (auto)'; // например, добавить суффикс }, this.id); ``` ### `postTranslateBatch(manager, ctx, translations)` После **пакета** переводов. `ctx = { sourceLang, targetLang }`. Верните массив итоговых переводов. ### `onBeforeGenerate(manager, ctx, data)` Перед сборкой выходного `.yml` файла. `ctx = { parsed, results, outputData, sourceLang, targetLang }`. Можно править `ctx.outputData` (объект ключ → запись с `text`). ### `onFileSaved(manager, ctx, info)` Файл сохранён. `ctx = { inputPath, outputPath, translatedCount, totalCount }`. ### `onError(manager, ctx, data)` Ошибка перевода. `ctx = { batch, error }`. ### `onSettingsChange(manager, ctx, data)` *(зарезервировано)* Изменение настроек приложения. ## Практические примеры ### 1. Постоянный глоссарий (простой фиксированный перевод) ```js module.exports = { id: 'glossary', name: 'Game Glossary', version: '1.0.0', description: 'Fixed translations for common CK3 terms', author: 'You', hooks: ['preTranslate'], init(manager) { const dict = { 'Kingdom': 'Королевство', 'Duchy': 'Герцогство', 'Count': 'Граф' }; manager.registerHook('preTranslate', (mgr, ctx, text) => { if (Object.prototype.hasOwnProperty.call(dict, text.trim())) { return dict[text.trim()]; } }, this.id); } }; ``` ### 2. Логирование всех переводов ```js module.exports = { id: 'logger', name: 'Translation Logger', version: '1.0.0', description: 'Saves every translation to a file', author: 'You', hooks: ['onFileParsed', 'onFileSaved'], init(manager) { const fs = require('fs'); const path = require('path'); const logFile = path.join(manager.ensurePluginsDir(), 'log.txt'); manager.registerHook('onFileSaved', (mgr, ctx) => { fs.appendFileSync(logFile, `[${new Date().toISOString()}] ${ctx.outputPath} | ${ctx.translatedCount}/${ctx.totalCount}\n`); }, this.id); } }; ``` > Примечание: в `init` доступен `require` для Node-модулей, поэтому плагины могут использовать любые встроенные модули Node (`fs`, `path`, `http`, ...). ### 3. Плагин-«провайдер» для своего переводчика ```js module.exports = { id: 'custom-provider', name: 'My Translator', version: '1.0.0', description: 'Use my own translation backend', author: 'You', hooks: ['beforeTranslateBatch'], init(manager) { const http = require('http'); manager.registerHook('beforeTranslateBatch', async (mgr, ctx, texts) => { // Здесь можно вызвать любой API и вернуть массив переводов. const translations = texts.map(t => `via-my-api: ${t}`); return translations; }, this.id); } }; ``` ## Безопасность Плагины — это код на JavaScript, который выполняется в основном процессе приложения с полным доступом к системе (`fs`, сети и т.д.). **Устанавливайте только те плагины, которым доверяете.** ## ЧаВО **Почему плагин не подхватился после правки файла?** Нажмите «Перезагрузить» в панели Плагины или перезапустите приложение. Если файл содержит синтаксическую ошибку, он будет пропущен (ошибка в консоли). **Можно ли менять настройки приложения из плагина?** Да, через `manager.getSettings().set('key', value)`. **Как узнать папку плагинов?** Панель Плагины → «Открыть папку».
Dark Totenkopf Posted 15 hours ago Posted 15 hours ago Забавное совпадение, только позавчера узнал о ModTranslationHelper и ту на тебе, где ж ты был всё это время.
Heyvanushi Posted 13 hours ago Author Posted 13 hours ago (edited) 1 hour ago, Dark Totenkopf said: Забавное совпадение, только позавчера узнал о ModTranslationHelper и ту на тебе, где ж ты был всё это время. Делал переводчик на другую игру тут вернулся в CK3 и вспомнил что тут с переводами беда , взял код своей другой программы и переписал под ск в любом случае я бы сейчас переделал интерфейс , под новый и доделал функционал , ибо за основу была взята старая версия , и делал на скорую руку скажем так , доделать плагины и хуки и редактор готового перевода , но думаю это можно сделать через словари Edited 13 hours ago by Heyvanushi
Dark Totenkopf Posted 13 hours ago Posted 13 hours ago 36 minutes ago, Heyvanushi said: Делал переводчик на другую игру тут вернулся в CK3 и вспомнил что тут с переводами беда , взял код своей другой программы и переписал под ск в любом случае я бы сейчас переделал интерфейс , под новый и доделал функционал , ибо за основу была взята старая версия , и делал на скорую руку скажем так , доделать плагины и хуки и редактор готового перевода , но думаю это можно сделать через словари Единственное чего мне прям не хватает это пометок, что бы файлы по порядку перевести на не кликать на каждый. А то решил попробовать через него прогнать через него один массивный мод и уже пожалел. А так спасибо большое
Heyvanushi Posted 13 hours ago Author Posted 13 hours ago (edited) 3 minutes ago, Dark Totenkopf said: Единственное чего мне прям не хватает это пометок, что бы файлы по порядку перевести на не кликать на каждый. А то решил попробовать через него прогнать через него один массивный мод и уже пожалел. А так спасибо большое Распиши , подробней может добавлю 1 фиг буду перерабатывать дизайн Edited 12 hours ago by Heyvanushi
Dark Totenkopf Posted 12 hours ago Posted 12 hours ago (edited) 14 minutes ago, Heyvanushi said: Распиши , подробней может добавлю 1 фиг буду перерабатывать дизайн А у меня не так как на картинку кста. Я про отметки напротив файлов говорил Edited 12 hours ago by Dark Totenkopf
Heyvanushi Posted 12 hours ago Author Posted 12 hours ago 6 minutes ago, Dark Totenkopf said: Просто напротив файла который нужно перевести возможность поставить галочку и программа все отмеченные так файлы перевела, а не кликать на каждый Дай минут 30 попробую сделать
Heyvanushi Posted 12 hours ago Author Posted 12 hours ago по идеи как то так 23 minutes ago, Dark Totenkopf said: А у меня не так как на картинку кста. Я про отметки напротив файлов говорил файлы которые переведены отмечаются перфиксом
Dark Totenkopf Posted 11 hours ago Posted 11 hours ago 17 minutes ago, Heyvanushi said: по идеи как то так файлы которые переведены отмечаются перфиксом Тоже полезно но я про то что у меня оно выглядит так и не возможности отмечать файлы для перевода. Это какой то плагин?
Heyvanushi Posted 11 hours ago Author Posted 11 hours ago Так же добавил более понятный прогресс и редактор
Heyvanushi Posted 11 hours ago Author Posted 11 hours ago 42 minutes ago, Dark Totenkopf said: Тоже полезно но я про то что у меня оно выглядит так и не возможности отмечать файлы для перевода. Это какой то плагин? у меня более новая версия которую я выложу чуть пойже я еще не все дописал
Dark Totenkopf Posted 10 hours ago Posted 10 hours ago 18 minutes ago, Heyvanushi said: у меня более новая версия которую я выложу чуть пойже я еще не все дописал А, ясно, буду ждать
youngrun Posted 4 hours ago Posted 4 hours ago Если эффект будет действительно хорошим, я считаю, что этот мод станет событием эпохального масштаба. 1
Heyvanushi Posted 36 minutes ago Author Posted 36 minutes ago 3 hours ago, youngrun said: Если эффект будет действительно хорошим, я считаю, что этот мод станет событием эпохального масштаба. всеравно приходится что то править например иногда после переноса строк /n/nI можно увидеть вместо /n/nЯ хотя я думаю это можно исправить и настроить ситаксис через плагины и словари для улучшение перевода
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now