Вопрос Как можно выбрать компонент в зависимости от языка инсталлятора?

zettend

Старожил
Здравствуйте!

У меня в установщике есть несколько языков, наприм:
  • ru
  • en
  • ua

И есть компоненты типа (Язык игры):
  • Русский
  • Английский
  • Украинский
А сделать так, что-бы в зависимости от выбранного языка установщика автоматически выбирался компонент? Компоненты отрисовываются как штатным компонент листом, так и чек боксами ботвы.
 

SBalykov

Старожил
[Components]
Name: 1; Description: 1; Types: full custom; Flags: collapsed
Name: 1\1; Description: 1; Types: full custom; Languages: ru;
Name: 1\2; Description: 1; Types: full custom; Languages: en;
Name: 1\3; Description: 1; Types: full custom; Languages: ua;
 

Andreo Fadio

Старожил
@SBalykov, так они при выборе одного языка будут пропадать из списка совсем, пока язык не переключишь. А вопрос вроде как, просто про выбор был.
 
Последнее редактирование:

sergey3695

Ветеран
Модератор
Вот так выбор можно, на ботве аналогично по логике.
code_language.pascal:
[Setup]
AppName=Example
AppVersion=1.0
DefaultDirName=no
OutputDir=.

[Languages]
Name: en; MessagesFile: "compiler:Default.isl"
Name: ru; MessagesFile: "compiler:Languages\Russian.isl"

[Types]
Name: full; Description: Full installation; Flags: iscustom

[Components]
Name: LocText; Description: CompText; Flags: Fixed; Types: full;
Name: LocText\eng; Description: compEN; Flags: exclusive; Types: full;
Name: LocText\rus; Description: compRU; Flags: exclusive; Types: full;

[code]
function Check_l(lang: string): boolean;
begin
  Result := (ActiveLanguage = lang);
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if (CurPageID = wpSelectComponents) then
  begin
    WizardForm.ComponentsList.Checked[0]:= Check_l('ru');
    WizardForm.ComponentsList.Checked[1]:= Check_l('en');
  end;
end;
 

SBalykov

Старожил
@SBalykov, так они при выборе одного языка будут пропадать из списка совсем, пока язык не переключишь. А вопрос вроде как, просто про выбор был.
Речь как раз и шла об автоматическом выборе файлов установки при выборе определенного языка...
 

Andreo Fadio

Старожил
Речь как раз и шла об автоматическом выборе файлов установки при выборе определенного языка...
Где?)

И есть компоненты типа (Язык игры):
  • Русский
  • Английский
  • Украинский
А сделать так, что-бы в зависимости от выбранного языка установщика автоматически выбирался компонент?
Может чего и не допонимаем.
Тот вариант у вас скроет компоненты при выборе одного языка. Там слишком уж автоматически получается. Таким способом и компонент лист не надо создавать, сразу на файлы вывешивать надо параметр - эффект такой же будет все автоматически получится.)
 

SBalykov

Старожил
...Таким способом и компонент лист не надо создавать, сразу на файлы вывешивать надо параметр - эффект такой же будет все автоматически получится.)
Секцию компоненты надо создавать для того, чтобы пользователь мог выбрать или отменить установку необходимых компонентов...
 

Andreo Fadio

Старожил
Секцию компоненты надо создавать для того, чтобы пользователь мог выбрать или отменить установку необходимых компонентов...
Так вы сами то понимаете как работает параметр language для секции компоненты? Если ставить его для определенного языка то при выборе другого языка компонент не отобразится в компонент листе при другом языке. Я тоже раньше за счет этого делал отображение определенных компонентов, так что видел как это работает.
К примеру как вы предложили делать то при русском языке для установки в вариантах языка будет отображаться только русский язык. И если его отменить на что он будет заменяться?
Так же к примеру, я вот хочу русский язык установки и украинскую озвучку с английским текстом, как тогда быть, если при русском языке отобразится только русская озвучка и русский текст?

Самое правильное решение по вопросу предоставил: sergey3695
 
Последнее редактирование:

zettend

Старожил
Спасибо большое всем за ответы!

И да, действительно, вариант от @sergey3695 больше подходит, ибо в варианте от @SBalykov пропадает тот компонент, язык которого не был выбран, а пользователю необходимо оставлять выбор.

Но есть ли вариант избавиться от [0] в пользу LocText\eng?
 

sergey3695

Ветеран
Модератор
@zettend, можно к Description привязать.
code_language.pascal:
[Setup]
AppName=Example
AppVersion=1.0
DefaultDirName=no
OutputDir=.

[Languages]
Name: en; MessagesFile: "compiler:Default.isl"
Name: ru; MessagesFile: "compiler:Languages\Russian.isl"

[CustomMessages]
LocText_eng=compEN
LocText_rus=compRU

[Types]
Name: full; Description: Full installation; Flags: iscustom

[Components]
Name: LocText; Description: CompText; Flags: Fixed; Types: full;
Name: LocText\eng; Description: "{cm:LocText_eng}"; Flags: exclusive; Types: full;
Name: LocText\rus; Description: "{cm:LocText_rus}"; Flags: exclusive; Types: full;

[code]
function cm(s: String): String;
begin
  Result:= ExpandConstant('{cm:'+s+'}');
end;

function Check_l(lang: string): boolean;
begin
  Result := (ActiveLanguage = lang);
end;

procedure CurPageChanged(CurPageID: Integer);
begin
  if (CurPageID = wpSelectComponents) then
  begin
    with WizardForm.ComponentsList do
    begin
      Checked[Items.IndexOf(cm('LocText_rus'))]:= Check_l('ru');
      Checked[Items.IndexOf(cm('LocText_eng'))]:= Check_l('en');
    end;
  end;
end;
 
Сверху