1. Друзья, в это тяжёлое и непонятное для всех нас время мы просим вас воздержаться от любых упоминаний политики на форуме, - этим ситуации не поможешь, а только возникнут ненужные ссоры и обиды. Это касается также шуток и юмора на тему конфликта. Пусть войны будут только виртуальными, а политики решают разногласия дипломатическим путём. С уважением, администрация Old-Games.RU.

    Скрыть объявление
  2. Пожалуйста, внимательно прочитайте правила раздела.
  3. Если Вы видите это сообщение, значит, вы ещё не зарегистрировались на нашем форуме.

    Зарегистрируйтесь, если вы хотите принять участие в обсуждениях. Перед регистрацией примите к сведению:
    1. Не регистрируйтесь с никами типа asdfdadhgd, 354621 и тому подобными, не несущими смысловой нагрузки (ник должен быть читаемым!): такие пользователи будут сразу заблокированы!
    2. Не регистрируйте больше одной учётной записи. Если у вас возникли проблемы при регистрации, то вы можете воспользоваться формой обратной связи внизу страницы.
    3. Регистрируйтесь с реально существующими E-mail адресами, иначе вы не сможете завершить регистрацию.
    4. Обязательно ознакомьтесь с правилами поведения на нашем форуме, чтобы избежать дальнейших конфликтов и непонимания.
    С уважением, администрация форума Old-Games.RU
    Скрыть объявление

[Игры] Всё что вы боялись спросить о «переводе» восточноазиатских игр, или «Даёшь массовую декракозябризацию!»

Тема в разделе "Кладезь мудрости", создана пользователем WERTA, 15 фев 2025.

  1. WERTA ФанатЪ O-G

    WERTA

    Хелпер Переводчик

    Регистрация:
    12 ноя 2006
    Сообщения:
    8.738
    upload_2025-2-15_20-22-6.png
    Многие из вас слышали об азиатских национальных версиях Windows 95 или 98 (японская, корейская...). Зная о загадочной непостижимости огромного количества азиатских знаков, среднестатистическому пользователю можно с ужасом предполагать про ещё более непостижимое и загадочное техническое устройство таких экзотических операционных систем. Однако на самом деле это не так. «Экзотичности», скажем, в корейской Windows 95 было не больше, чем в вашей кириллической Windows 95, – технически, они обе однобайтовые. А кто-то подкованный в языкознании сейчас сразу же спросит: «Позвольте, но ведь в корейском, японском или китайском языках число знаков гораздо больше 256, поэтому для таких ОС технически нужны только двухбайтовые кодировки!». И тут нужно немного поведать про то, как вообще были устроены компьютерные кодировки для языков Восточной Азии в доUnicod’овскую эпоху…

    Для любого из восточноазиатских языков компьютерные кодировки в те далёкие годы были устроены гибко. Набор обычной однобайтовой латиницы и цифр «Abcd1234» в них так и выводился на экран – «Abcd1234», в любой из азиатских ОС. Но если бы вы в своей кириллической Windows 98 совершенно случайно набрали бы непонятной набор из следующих 10 букв «ОТС§П°ЦРОД» (или в двоичном виде – CED2 D1A7 CFB0 D6D0 CEC4) и послали бы вашему другу по переписке в КНР, то у него в его национальной системе Windows 98 отобразились бы понятные ему 5 знаков – 我学习中文. Странно? – никак нет!

    Как в изначально однобайтовой операционной системе сделать поддержку двухбайтовых кодировок? Элементарно. Условимся, если первый байт ¹B лежит в диапазоне двоичных значений A1h…FEh, то пока не выводим символ, а обязательно вычитываем второй байт ²B. Если и второй байт ²B лежит в диапазоне A1h…FEh, то – ВОТ ОНО: перед ними точно иероглиф! Теперь узнаём его порядковый номер в таблице кодировки «нашей» (т.е. – азиатской) ОС (¹B–A1h)*94+(²B–A1h). Легко видно, что размер таблицы составляет 94х94 знака, что равно 8836. Этого «выше крыши» хватает для стандартных национальных символьных наборов КНР, Южной Кореи и Японии. Для Гонконга и в целом, для кантонского диалекта китайского языка, было чуть сложнее. У них в наборе изначально были более 13 тыс. знаков. Кодировка называлась Big5. Тогда они просто второй байт ²B для иероглифов условились кодировать в двух разорванных между собой диапазонах двоичных значений 40h…7Eh и A1…FEh (всего 157 значений). А для первого байта – всё осталось аналогично – A1h…FEh. Тогда емкость таблицы знаков равна 94х157=14758 – всё умещается!

    Теперь понятно, почему простой набор из латиницы в таких кодировках всегда будет выводится как обычно. Вот она обещанная гибкость. В такой «однобайтовой» азиатской операционной ещё нужно переписать функцию вывода однобайтовых символов TextOutA( ), так чтобы она встреченные разрешенные двухбайтовые сочетания выводила одним «кракозябро»-знаком: каной, иероглифом, хангылем. Не разрешенные кодировкой сочетания в таком случае будут просто «рассыпаться» на два однобайтовых символа, и никакой системной ошибки не будет. И ещё для операционной системы нужно на программном уровне разрешить более широкий набор символов, которые будут встречаться в именах файлов. Вот этими моментами принципиально и отличаются азиатские ОС от «наших»…

    А собственно, к чему весь этот технический экскурс, если здесь на сайте мы интересуемся компьютерными играми, а не операционными системами? Дело в том, что у некоторых не очень старых азиатских игр (особенно на рубеже 1999 и 2000-ых годов) часть имён файлов или папок были созданы изначально каной/хангылем/иероглифами. Почему так – тайна великая. Ничто не мешало создателям делать всё это обычными латинскими буквами. И вот «засада», наши «обычные» операционные системы постоянно «лагают» на такой последовательности однобайтовых знаков в именах файлов и путях к ним. Просто некоторые символы из диапазона A1h…FEh в «обычных» (неазиатских) системах считаются недопустимыми для имён файлов. Поэтому такие игры и «лагают», если их запустить в обычной кириллической системе. Даже универсально-юникодовская Windows XP категорически «не приемлет» такой набор символов в именах файлах.

    Особенно часто подобными техническими решениями грешили южнокорейские разработчики-любители в своих задорных платформерах или бит'эм-апах. Трудно сказать: возможно, в программной среде разработки файлы графических ресурсов уже изначально имели имена на хангыле, а может быть, авторы таких игр просто не хотели, чтобы в них играли за пределами Южной Кореи? Тогда вот он – самый надёжный и простой технический способ отсечь любую возможность использовать игру за пределами отдельно взятой азиатской страны (неужели?.. а просто даже само наличие абсолютно непонятных значков в текстах и диалогах не отсекает ли такую возможность?...) . Но это – только лишь предположения…

    Вот в таких вот «запущенных» случаях и нужен «перевод» таких игр. Слово «перевод» взято в кавычки не случайно. От перевода с одного языка на другой тут берётся совсем немного. Допустим, у вас в ресурсах южнокорейского платформера встретился файл 엽기토끼로고.ydb (это правильное Юникод-отображение в обычном обозревателе самой обычной системы Windows XP). Естественно, что на таком «корявом» названии игра обязательно «лаганёт». Сперва нам нужно перевести это название с двухбайтового Юникода в стандартную корейскую кодировку KSC. Это легко сделать «сохранив как текстовый файл» в MS Word. Только перед сохранение нужно выбрать из списка кодировку «Корейская». В кириллической ОС в таком текстовом файле мы получим строчку из 16 символов «ї±±вЕдіў•О°н.ydb». Теперь наша работа распадается на два этапа:
    1. Переименование всех «ненормальных» файлов в папках игры.
    2. Переписывание имён всех «ненормальных» файлов в теле главного ехе-шника игры и в других файлах ресурсов (если там тоже есть ссылки и пути к таким файлам).

    Вот тут и нужен «перевод». Имя файла из 6 двухбайтовых символов 엽기토끼로고 в романизации корейского языка это будет выглядеть примерно так YEOP GI TO KKI RO GO. Убираем пробелы – YEOPGITOKKIROGO (15 символов). Но нам нужно оставить только 12. Можно изменить строку так YEOPGITOKKIG, а можно и так YEGITOKKIROGO. В этом и заключена суть «перевода». И так – с любыми другими восточноазиатскими символами: хираганой, катаканой, иероглифами. Короче, двухбайтовый символ заменяем двумя буквами латиницы, и всё! Главное – соблюсти такое же количество однобайтовых символов в имени файла и однозначность наименования файла в одной папке с переименованными таким же образом десятками других файлов. После того как мы переименовали все файлы с «кракозябровыми» названиями, переходим ко второму этапу – переписывание имён в строковых ресурсах ехе-файла и других файлов, в которых есть пути к файлам c «ненормальными» названиями. Здесь поможет любой НЕХ-редактор. Поиском и заменой меняем строки. В конце наших операций размер ехе-файла должен остаться неизменным. Для такой работы полезно сделать в MS Excel такую табличку для всех файлов, имена которых нужно изменить.
    Column 1Column 2Column 3Column 4Column 5
    ORIGINAL ANSI(CP1251) TRANSLATED COMPARE_LENGTH
    엽기토끼로고.ydb ї±±вЕдіў•О°н.ydb YEOPGTOKKIRG.ydb ИСТИНА
    오프닝01.ydb їАЗБґЧ01.ydb OPENNG01.ydb ИСТИНА
    오프닝02.ydb їАЗБґЧ02.ydb OPENNG02.ydb ИСТИНА
    율도국로고.ydb АІµµ±№•О°н.ydb YULDOGUKRG.ydb ИСТИНА
    이벤트01.ydb АМєҐЖ®01.ydb IBENTU01.ydb ИСТИНА
    이벤트02.ydb АМєҐЖ®02.ydb IBENTU02.ydb ИСТИНА
    이벤트03.ydb АМєҐЖ®03.ydb IBENTU03.ydb ИСТИНА
    이벤트04.ydb АМєҐЖ®04.ydb IBENTU04.ydb ИСТИНА

    ИСТИНА - это результат сравнения длины исходной строки и «переведённой» строки, чтобы в работе игры ничего не изменилось после такого «перевода».
    ДЛСТР(“АІµµ±№•О°н.ydb”)= ДЛСТР(“YULDOGUKRG.ydb”)

    Список файлов директории с двухбайтовыми символами в имени лучше получать в программах, в которых байты гарантированно не будут искажены (известно, что FAR, например, действительно искажает некоторые символы кириллической кодировки, заменяя их другими). Самый надежный способ – «выковыривать» каждое «ненормальное» имя файла выделением вручную, копируя его прямо из эксплорера, помещая затем в таблицу.
    upload_2025-2-15_20-6-0.png
    Понятно, что для десятков-сотен измененных имён файлов должно быть соблюдено абсолютно точное соответствие измененных имён в папках игры и ссылок на них в строковых ресурсах основного ехе-файла или иных файлов. Иначе игра не найдёт нужный файл и опять всё будет «не так, как надо». Следует отметить, что для тщательного контроля своих монотонных действий по переименованию, кириллическая ОС подходит намного лучше, чем ОС с западноевропейским или восточноевропейским набором ANSI-символов. Как это ни странно, но даже такую «лютую» абракадабру, как например «ѕЖАМЕЫ№иГЯ.ydb», всегда легче на короткое время запоминать и контролировать с кириллическим набором знаков из кодовой страницы CP-1251, чем «невыносимо лютую» абракадабру с набором символов «áïëéåãêéèç.ydb» при единственно активной западноевропейской кодовой странице CP-1252 в операционной системе.

    В общем, если всё сделали правильно, то игра с «неправильными» именами файлов, измененными на «правильные», запустится и будет работать без проблем. Автор этих строк «Óтвечает» или «WERTA – гарантирует!». Вот нескромный послужной список автора на данном техническом поприще:
    Tteotda Cheolgabang! (2002, Windows)
    Yeopgi Hamster (2001, Windows)
    Super Doraemon (2001, Windows)
    Moon (1997, Windows)
    Nae Chingu Monster 2 (2000, Windows)
    Haenlipoteu Mabeobsa (2002, Windows)
    Malgwallyangi Yeongsimi (2002, Windows)
    Hayangangaji Chacha (2001, Windows)
    Snow World Cup 2002 (2002, Windows)
    Banggwi Daejang Ppongppongi (2002, Windows)
    Top Player (2001, Windows)
    Shinbborie's Adventure (2001, Windows)
    Seupeiseu Hibhabdeog (2003, Windows)

    WERTA, 2025/02/15
     
    Последнее редактирование: 6 мар 2025
    Octohum, Gamerun, TheMadLynx и 3 другим нравится это.
  1. На этом сайте используются файлы cookie, чтобы персонализировать содержимое, хранить Ваши предпочтения и держать Вас авторизованным в системе, если Вы зарегистрировались.
    Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление