Вопрос Как сделать выбор языка для самой игры

Warlockk

Мимокрокодил
Недавно захотел делать репаки игр, нашел все приложения которые нужны сделал репак и назрел вопрос "А как сделать выбор языка для игры во время инсталяции?" Прошу помочь тем кто знает
 

tihiy_don

Старожил
Добавить на форму флажки и в зависимости от тех-то флажков распаковывать требуемые компоненты локализации.
 

EvilAlex

Старожил
ну или как вариант вносить в файл таблетки строку, или ру или ен... тоже в зависимости от флажка...
 

Crachlow

Старожил
Тут все зависит от того где меняется язык. Если это хак стим то скорее всего меняется в xxxxx.ini там можно воспользоваться, как пример
Код:
SetIniString('Settings','Language', 'russian',ExpandConstant('{app}\steam_emu.ini'));
если GoG там не все так однозначно, в основном меняется в, как пример goggame-1256837418.info
Код:
{
    "buildId": "56922239653384533",
    "clientId": "53652320436400298",
    "gameId": "1256837418",
    "language": "Russian",
    "languages": [
        "ru-RU"
    ],
    "name": "Cyberpunk 2077: Phantom Liberty",
    "osBitness": [
        "64"
    ],
    "playTasks": [],
    "rootGameId": "1423049311",
    "version": 1
ну а если можно сменить в самой игре, то смысла чего то менять воще нет.
 

Crachlow

Старожил
Недавно захотел делать репаки игр, нашел все приложения которые нужны сделал репак и назрел вопрос "А как сделать выбор языка для игры во время инсталяции?" Прошу помочь тем кто знает
Код:
[Setup]
AppVersion=1.5
AppName=My Prog
DefaultDirName=My Prog
OutputDir=.

[Files]


[Code]
procedure InitializeWizard;
var
  FilePath, NewFileContent, svalue: string;
  FileLines: TArrayOfString;
  I, PosSubStr: Integer;
  InLanguagesBlock: Boolean;
begin
  FilePath := ExpandConstant('{src}\data.info');
  LoadStringsFromFile(FilePath, FileLines);

  InLanguagesBlock := False;
  NewFileContent := '';

  // Поиск и замена нужных строк
  for I := 0 to GetArrayLength(FileLines) - 1 do
  begin
    // Проверяем строку "language":
    if Pos('"language":', FileLines[I]) > 0 then
    begin
      PosSubStr := (Pos('"language":', FileLines[I]) + Length('"language":') + 1);
      svalue := Trim(Copy(FileLines[I], PosSubStr, MaxInt));
      // Удаляем окончание строки после запятой, если оно есть
      if Pos(',', svalue) > 0 then
        Delete(svalue, Pos(',', svalue), MaxInt);
      // Заменяем значение
      StringChangeEx(FileLines[I], svalue, '"Russian"', True);
    end;

    // Проверяем строку в блоке "languages"
    if Pos('"languages": [', FileLines[I]) > 0 then
      InLanguagesBlock := True;

    if InLanguagesBlock then
    begin
      if Pos(']', FileLines[I]) > 0 then
        InLanguagesBlock := False;

      // Проверяем, является ли строка значением внутри блока "languages"
      if InLanguagesBlock and (Pos('"', FileLines[I]) > 0) and (Pos('"languages": [', FileLines[I]) = 0) then
      // Что бы не изменить лишнего  '"*"'
      if InLanguagesBlock and (Pos('"*"', FileLines[I]) = 0) then
      begin
        PosSubStr := Pos('"', FileLines[I]) + 1;
        svalue := Trim(Copy(FileLines[I], PosSubStr, MaxInt));
        if Pos('"', svalue) > 0 then
          Delete(svalue, Pos('"', svalue), MaxInt);
        StringChangeEx(FileLines[I], svalue, 'ru-RU', True);
      end;
    end;

    // Пишем новое содержимое файла
    NewFileContent := NewFileContent + FileLines[I] + #13#10;
  end;

  // Сохраняем обратно в файл
  SaveStringToFile(FilePath, NewFileContent, False);
end;
 
Последнее редактирование:
Сверху