Recodenc
Кодировщик кириллицы для EU4/CK2
Install / Use
/learn @chomobi/RecodencREADME
Предисловие
EU4 и CK2 официально локализованы на английский, немецкий, французский, испанский. Для поддержки этих языков достаточно кодировки CP1252 (висьмибитная кодировка), поддержка юникода в движке игры отсутствует. Соответственно, поддержка кириллицы отсутствует. Для нужд русского перевода игры потребовался механизм отображения кириллицы. Т. к. движок игры поддерживает восьмибитную кодировку, заменив поставляемые для поддержки CP1252 шрифты на шрифты для CP1251, можно отобразить кириллицу, закодированную в CP1251. Эти две кодировки совместимы по кодовым позициям ASCII в начале каждой из кодовых страниц (0-127), что позволяет отображать текст в ASCII, но текст, содержащий символы из второй половины кодировки (128-255) CP1252, отображается как кириллица. Эта проблема малозначительна для Full-версии перевода, но для Lite-версии, где смешан текст в латинице и кириллице, она встаёт в полный рост. Для решения проблемы одновременного отображения расширенной латиницы (вторая половина CP1252) и кириллицы я разработал специальную кодировку «CP1252CYR», совместимую с CP1252 по расположению латиницы, а специальные типографские символы (напр., ¥) заменил на буквы кириллицы, отсутствующие в литинице. Однако, у кодировки CP1251 есть серьёзное преимущество — сортировка по алфавиту.
Кодировка создавалась, в качестве самой сложной задачи, для того, чтобы в мультиплеерном чате можно было общаться на английском, немецком, французском, испанском и русском (для тех, у кого установлен мод на локализацию). Неиспользуемых типографских символов было меньше, чем необходимых символов кириллицы, поэтому в качестве некоторых символов кириллицы были использованы похожие по начертанию латинские буквы. Сортировка уникальных символов кириллицы, кроме буквы «Яя», в качестве дани истории, идёт по алфавиту: сначала заглавные, потом строчные — аналогично сортировке символов в ASCII, CP1251, CP1252. В адаптации этой кодировки для CK2 символ «Б» был помещён на место «^» из-за ошибок, возникающих при использовании символов «€» и «½».
<!-- 2. -->Файлы локализаций
Официальная локализация EU4 поставляется в виде файлов *.yml, синтаксис которых похож на YAML, в кодировке UTF-8 с BOM, обрыв строки LF (в формате *nix). Но движок игры использует CP1252, поэтому на этапе загрузки локализации происходит перекодировка: символы с позиций в кодировке юникод становятся на позиции в кодировке CP1252. Следовательно, чтобы запросить отображение кириллического символа, его код после перекодировки должен соответствовать номеру в шрифте. Поэтому кириллицу, закодированную в UTF-8 на этапе редактирования перевода, нужно заменить на символы, которые после перекодирования движком игры отобразятся как кириллица. В этом нам поможет скрипт Recodenc.
Официальная локализация CK2 поставляется в виде файлов CSV (*.csv) в кодировке CP1252, обрыв строки CRLF (в формате windows). Движок непосредственно работает с байтами в кодировке CP1252, поэтому чтобы запросить отображение кириллического символа, нужно сохранить его в соответствующей кодировке непосредственно. Это подходит для CP1251, а для CP1252CYR нужна конвертация (из CP1251). В этом нам поможет скрипт Recodenc.
Все остальные файлы поставляются в кодировке CP1252, обрывы строк CRLF. Редактируются они в кодировке CP1251 при помощи стандартного программного обеспечения (т. к. нужны только для Full-перевода с кодировкой CP1251).
<!-- 3. -->Шрифты для отображения
Движок игры сопоставляет кодовую позицию символа с его рисунком в шрифте и выводит его. Существует несколько программ для рендеринга шрифтов, совместимых с движком игры, я использовал BMFont. Сгенерированный шрифт располагается в двух файлах: изображении *.tga или *.dds и текстовом файле *.fnt, содержащим карту изображения и связывающим кодовую позицию символа с его представлением в графическом виде. Сгенерировать растровые шрифты для кодировки CP1251 относительно легко: достаточно указать программе эту кодировку и исходный векторный шрифт. Для создания шрифта для кодировки CP1252CYR необходимо выбрать кодировку юникод и в ней выбрать символы из CP1252CYR, отрендерить шрифт, и в fnt-файле в столбце «id» и секции кернингов заменить номера кодовых позиций юникода на номера из CP1252CYR. Это можно сделать при помощи скрипта Recodenc.
Предлагаемые шрифты
<!-- [CP1251 (EU4)]() --> <!-- [CP1251 (CK2)]() --> <!-- [CP1252CYRCK2]() -->Шрифты предлагаются только для кодировки CP1252CYR, т. к. выбранный шрифт поддерживает только юникод. Чтобы воспользоваться ими, распакуйте скачанный архив в /gfx/fonts/.
<!-- 4. -->Раскладка клавиатуры для ввода
Движок игры при вводе с клавиатуры ожидает получить байтовые коды символов, которые от выводит в текстовом поле и обрабатывает. Поэтому, когда вводятся символы за пределами однобайтового начала кодировки юникод, windows передаёт коды символов в кодировке UTF-16, что движок игры воспринимает как два отдельных символа и соответственно выводит их в текстовом поле. Для передачи правильных кодов символов необходимы специальные раскладки клавиатуры.
Предлагаемые раскладки
Скачайте по указанным выше ссылкам архивы. В них находятся файлы установщика и исходники раскладок для программы Microsoft Keyboard Layout Creator. Установите нужную вам раскладку клавиатуры или сразу все́, распаковав архивы запустив в распакованных каталогах setup.exe.
ПКМ по языковой панели → Параметры... → Переключение клавиатуры → для пункта «Переключить языки ввода» нажмите кнопку «Сменить сочетание клавиш» и в появившемся окне настройте разные комбинации клавиш для переключения языков ввода и смены раскладки клавиатуры. Это нужно для того, чтобы пользоваться, например, парой раскладок «стандартная RU — стандартная EN» пока вы работаете в обычных программах, переключить раскладку на языке RU, и использовать пару раскладок «RU Layout for EU4 CP1252CYR — стандартная EN», пока вы играете в EU4.
На вкладке «Общие» проверьте наличие клавиатурных раскладок в секции русского языка, и, при необходимости, измените порядок.
Общее:
- Кавычка (
") не работает, поэтому она заменена на одинарную ('). - Знак номера заменён на решётку, т. к. он отсутствует в кодировке CP1252.
- Букву «Ёё» вводить через AltGr(правый Alt)+русская Ее
CP1251:
- CapsLock не работает на буквах: ЯяЧчЁё
CP1252CYR:
- CapsLock работает на буквах: ЕеХхАаРрОоСс
Как пользоваться скриптом
Для того, чтобы воспользоваться скриптом, установите Perl не ниже версии 5.18, модули IUP (для графического интерфейса; также вам потребуется X11 с GTK+ 2+ или Motif (в Linux)), Getopt::Long (для интерфейса командной строки), Archive::Zip, Encode::Locale и Encode::Recodenc (см. encxs/INSTALL от корня проекта), а также скачайте этот проект. На странице с релизами есть windows-сборки. Если вы планируете использовать графический интерфейс в Linux, пропишите переменную окружения $XDG_CONFIG_DIR или создайте каталог ~/.config для сохранения файла конфигурации.
Данный перекодировщик отличается от других тем, что содержит официальную реализацию кодировки CP1252CYR.
Далее рассказано о работе в графическом интерфейсе. О работе с интерфейсом командной строки читайте вывод recodenc -h.
Указание каталога
Для указания скрипту каталога с исходными данными введите путь (без косой черты в конце) в текстовое поле самостоятельно или вызовите диалог выбора каталога кнопкой справа от текстового поля. Если вы не хотите изменять исходные файлы, отметьте галочкой пункт «Сохранить в» и укажите каталог для сохранения выходных данных. Каталоги, которые вы указываете, уже должны существовать. Исходный каталог и каталог сохранения должны быть разными (указание одного и того же каталога для чтения и записи просто испортит файлы). Каталог сохранения не очищается перед записью — файлы с именами, прочитанными из исходного каталога, будут перезаписаны в каталоге сохранения. Исходная файловая структура воспроизводится в выходном каталоге. Обратите внимание, что отдельные файлы не поддерживаются, как и вложенные каталоги.
Интерфейс выбора каталогов для EU4Lite и CK2Lite отличается, т. к. соответствующая функция производит сборку локализации для Lite-перевода, поэтому требуются два исходных каталога с разными локализациями и обязательный каталог сохранения.
Начаная с версии 0.6.1 BOM в начале исходного файла в кодировке UTF-8 не обязателен и не рекомендуется к установке.
<!-- СТАНДАРТНЫЕ ДЕЙСТВИЯ СООБЩЕНИЯ ОБ ОШИБКАХ Для перекодировки нажмите на кнопку с желаемым действием и дождитесь появления в строке состояния (слева от кнопки «Закрыть» внизу окна) надписи «Готово!» или сообщения об ошибке. Если в строке состояния появилось сообщение об ошибке, значит не удаётся прочитать/записать в каталог, возможно, он не существует, или у вас нет парава на чтение/запись в него. -->Вкладка «EU4»
Инструменты на вкладке «EU4» предназначены для манипуляций с локализацией (каталог /localisation/) EU4.
Формат входных файлов: кодировка UTF-8 с BOM, обрыв строки LF (в стиле *nix). Формат выходных файлов такой же. Выбор файлов производится по расширению *.yml. Открывать закодированные файлы при помощи стандартного программного обеспечения не рекомендуется (особенно встроенным в windows Блокнотом).
-
Кодировать (CP1251) — произвести промежуточное преобразование кодовых позиций символов кириллицы в кодировке UTF-8 из их расположения в этой кодировке к позициям символов, которые после прочтения движком соответственно станут на позиции символов кириллицы в кодировке CP1251.
-
Кодировать (CP1252CYR) — произвести промежуточное преобразование кодовых позиций символов кириллицы в кодировке UTF-8 из их распол
