Да, вы все верно поняли. Прописываете такую строку там где вы ее написали, потом идете в папку C:\Users\Admin\Documents\The Lord of the Rings Online и в файле UserPreferences.ini тоже меняете EN на RU.
Если вы используете лаунчер от ру-версии, то он запускается в русском переводе и запускает игру. Если лаунчер от офф-версии, то у вас пропадает вся графика в лаунчере, но он тоже работает.
Вот лог запуска игры:
Как видите файл локализации подключен, но происходит краш клиента, скрин в прошлом посте.
Добавлено через 7 минут
Вот скрин запуска офф-клиента:
меняете локаль как я написал выше и ложите в папку с игрой файл client_local_RU.dat, игра запускается используя именно его. Для нормального отбражения лаунчера нужна папка ru из корневого каталога ру-клиента.
Извиняюсь за длительную паузу, времени как всегда не хватает. Спасибо за скрипт упаковщика, который вы мне прислали в ЛС. Я поставил ряд экспериментов с вашим способом упаковки файлов и готов огласить результат - предложенный вами способ в корне не верен. Собирая таким образом файл client_local_English.dat вы никогда не получите рабочий файл. При таком способе записи у вас нарушается адресация внутри файла client_local_English.dat, а поскольку данный файл не имеет таблицы-словаря, то каждый из упакованных в него файлов должен иметь статический адрес. Клиент, обращаясь к файлу client_local_English.dat ищет файл точно по указанному адресу и потому смещение недопустимо.
Немного раскинув мозгами и потратив пару часов я пришел к такому решению - файл client_local_English.dat нужно не собирать с нуля, а патчить. Вот код скрипта, который из оригинального файла client_local_English.dat на выходе дает пропатченный вашими модифицированными файлами, готовый к употреблению файл локализации.
import os
dir = 'H:\Lotro_Packer\data\\en'
dir2 = 'H:\Lotro_Packer\data\\11'
from os import listdir
from os.path import isfile
from os.path import join as joinpath
with open('client_local_English_orig.dat', 'rb') as fin:
sourcedata = fin.read()
print('File client_local_English.dat is loaded.')
for file in listdir(dir2):
if isfile(joinpath(dir2,file)):
f1 = open(dir+'\\'+file, 'rb')
f1text = f1.read()
f1.close()
f2 = open(dir2+'\\'+file, 'rb')
f2text = f2.read()
f2.close()
sourcedata = sourcedata.replace(f1text, f2text)
print (file[0:8],'(',os.path.getsize(dir+'\\'+file),') - ','(',os.path.getsize(dir2+'\\'+file),')' )
print('Path complete, now build client_local_English.dat')
f3 = open('client_local_English.dat', 'wb')
f3.write(sourcedata)
f3.close()
print('Packed complete.')
dir - папка с оригинальными файлами из client_local_English.dat, нужна исключительно для проверки размера файлов dir2 - папка с модифицированными файлами client_local_English_orig.dat - переименованный оригинальный файл локализации client_local_English.dat - результат работы скрипта
1. Разбираем файл client_local_RU.dat при помощи программки DAT_UNPACKER, в результате получаем кучу папок с файлами ogg, bin, jpg и т.д.
2. Переносим все файлы(их будет примерно 186000) в одну папку и таким образом получаем папку dir, содержащую все файлы для сравнения размера оригинальных файлов с пропатченными. Почему это важно я расскажу ниже. Путь к ней указываем в скрипте.
3. Создаем папку(dir2), в которую кладем наши модифицированные файлы. Это основная рабочая папка, в которую мы будем складывать все, что хотим записать в файл client_local_English.dat. Указываем в скрипте путь в ней.
4. Копируем из папки с игрой в папку со скриптом файл client_local_English.dat и переименовываем его в client_local_English_orig.dat, этот файл будет использован в качестве шаблона для создания выходного файла
5. Запускаем скрипт, ждем пока он отработает и забираем из папки со скриптом готовый файл client_local_English.dat
Как я уже говорил выше, файл client_local_English.dat не имеет индексной таблицы и первые байты каждого файла, записанного в него, должны находиться строго по указанному адресу. При разборке программой DAT_UNPACKER начальный адрес соответствует названию файла. Поскольку между файлами внутри client_local_English.dat нет промежутков, то в процессе модификации важно добиться того, чтобы размер модифицированного файла не превышал размер исходного. В противном случае ваш модифицированный файл "залезет" на начало следующего файла, затрет его и файл client_local_English.dat станет неработоспособным. Если в процессе работы скрипта вы видите, что размер вашего файла превышает размер исходного, то можете даже не пробовать запускать игру с полученным файлом, дальше проверки файлов вас не пустят.
Порядок выполнения программы:
Что предстоит решить, чтобы добиться результата?
В русской локализации весь текст в файле client_local_RU.dat записан в кодировке UTF-16. В этом вы можете легко убедиться открыв любой файл в любом HEX-редакторе с поддержкой данной кодировки. При переконвертировании в любую другую кодировку, мы получаем файл большего размера, чем исходный. У меня не было времени ставить эксперименты, но первая попытка получить из UTF-16 текст приемлемого размера вышла комом. Если у кого есть идеи и соображения буду им очень рад.
Как я уже говорил выше, файл client_local_English.dat не имеет индексной таблицы и первые байты каждого файла, записанного в него, должны находиться строго по указанному адресу. При разборке программой DAT_UNPACKER начальный адрес соответствует названию файла. Поскольку между файлами внутри client_local_English.dat нет промежутков, то в процессе модификации важно добиться того, чтобы размер модифицированного файла не превышал размер исходного. В противном случае ваш модифицированный файл "залезет" на начало следующего файла, затрет его и файл client_local_English.dat станет неработоспособным. Если в процессе работы скрипта вы видите, что размер вашего файла превышает размер исходного, то можете даже не пробовать запускать игру с полученным файлом, дальше проверки файлов вас не пустят.
Я не специалист в программировании, поэтому поправьте меня, если я ошибаюсь, но мне кажется, что при такой постановке вопроса ваша задача не выполнима в принципе - в английском языке средняя длина слова 5-6 букв, в русском - 7-8. Если у вас жестко заданы размеры - вы никак не сможете уложиться в нужные интервалы. Ну, разве что начнете делать текст с сокращениями, примерно как в смс-ках двенадцатилетних деток.
Программирование - вещь, забавная тем, что в в ней нет нерешаемых задач, есть только недостаток знаний. Лично я не являюсь специалистом в данной области, иначе не стал бы задавать подобных вопросов. Но я вижу минимум 2 возможных решения - создание внутренней переадресации в файле(пишем файл в конец файла client_local_English.dat, а по указанному адресу размещаем лишь ссылку на него) или "дружим" сам клиент с кодировкой UTF-16, ведь именно так было сделано в клиенте от Mail.ru. Да и другие решения наверняка есть.
В третьем посте этой темы есть ссылка на тему на Миндоне, где люди уже решили эту проблему(пусть и не полностью, но все же), но я туда не хожу дабы не разжигать эмоции, тамошние обитатели меня не почему-то не жалуют. Вы ж видели монологи Землеройки ... Но есть надежда, что люди не бросят это хорошее дело и доведут его до конца. Цель моих постов - помочь им в этом нелегком деле. Возможно что-то, из мной написанного им пригодится.
я туда не хожу дабы не разжигать эмоции, тамошние обитатели меня не почему-то не жалуют. Вы ж видели монологи Землеройки ...
Их нетерпимость к чужой помощи вполне понятна - Миндон изначально задумывался как тусовка для своих и лишь по независящим от них причинам стал более популярен ,чем они рассчитывали. Так что глупо обвинять их в том, что отношение к посторонним у них осталось на уровне сельского клуба, где всех приезжих сначала лупасят
Цитата:
Сообщение от coder
Возможно что-то, из мной написанного им пригодится.
Рискну предположить, что у большинства там позиция в том, что приоритет максимально смещен в сторону "сделаем сами и как хотим" в ущерб оперативности, комплексности и масштабности. Типично для камерных проектов, впрочем.
Цитата:
Сообщение от coder
Программирование - вещь, забавная тем, что в в ней нет нерешаемых задач, есть только недостаток знаний. Лично я не являюсь специалистом в данной области, иначе не стал бы задавать подобных вопросов. Но я вижу минимум 2 возможных решения - создание внутренней переадресации в файле(пишем файл в конец файла client_local_English.dat, а по указанному адресу размещаем лишь ссылку на него) или "дружим" сам клиент с кодировкой UTF-16, ведь именно так было сделано в клиенте от Mail.ru. Да и другие решения наверняка есть.
Все это интересно только до определенного порога ресурсов, требуемых для выполнения задачи) Если этот порог превышен, то профи не возьмутся за дело а энтузиасты не потянут по времени и уровню квалификации. ИМХО