如何在运行时更改SMsgDlgYes,SMsgDlgNo等的值

时间:2016-09-28 14:19:38

标签: delphi firemonkey

如何在运行时更改/翻译const的{​​{1}} SMsgDlgYes的值,如SMsgDlgNo使用的TDialogService.MessageDialogprivate void print(int ... numbers) 等? / p>

适用于FireMonkey应用(iOS / Android / Windows),因此我无法像resourcestring那样使用Windows API。

2 个答案:

答案 0 :(得分:1)

我一直在寻找如何切换到ButtonCaptions的方法,在几乎全神贯注之后,我找到了一种简单的方法。我分享。 就我而言,我使用对TDialogServiceAsync.MessageDialog的调用来显示Android中的异步消息,但是在进行调用之前,我对ButtonCaptions进行了个性化设置,它仅是FMX中定义的常量。 / p>

ButtonCaptions[TMsgDlgBtn.mbyes] := 'Si';
      TDialogServiceAsync.MessageDialog(‘Está seguro de salir sin guardar?’,
        TMsgDlgType.mtConfirmation,
        [TMsgDlgBtn.mbyes,TMsgDlgBtn.mbNo],
        TMsgDlgBtn.mbNo,
        0,
        procedure(const AResult:TModalResult)
         begin
           if AResult = mrYes then
            begin
               //put our code
            end
             else begin
              //put our code
            end;
         end
        );

答案 1 :(得分:0)

在raudel.s.j答案上展开,我发现更改常量ButtonCaptions []不起作用(至少对于Android)。因此,我将FMX.Dialogs.pas复制到我的项目目录中,并将 const 更改为 var

FMX.Dialogs.pas

    ..
  var  // <-- added this to change ButtonCaptions and MsgTitles to var, to allow localization
    MsgTitles: array[TMsgDlgType] of string = (SMsgDlgWarning, SMsgDlgError, SMsgDlgInformation, SMsgDlgConfirm, '');
    ButtonCaptions: array[TMsgDlgBtn] of string = (SMsgDlgYes, SMsgDlgNo, SMsgDlgOK, SMsgDlgCancel, SMsgDlgAbort,    
    ...

然后我添加了:

Procedure LocalizeDialogButtons; // localize texts inside FMX.Dialogs
begin
  ButtonCaptions[TMsgDlgBtn.mbyes]      := Translate(SMsgDlgYes);        //  'Yes'
  ButtonCaptions[TMsgDlgBtn.mbno]       := Translate(SMsgDlgNo);         //  'No'
  ButtonCaptions[TMsgDlgBtn.mbOK]       := Translate(SMsgDlgOK);         //  'OK'
  ButtonCaptions[TMsgDlgBtn.mbCancel]   := Translate(SMsgDlgCancel);     //  'Cancel'
  ButtonCaptions[TMsgDlgBtn.mbAbort]    := Translate(SMsgDlgAbort);      //  'Abort'
  ButtonCaptions[TMsgDlgBtn.mbRetry]    := Translate(SMsgDlgRetry);      //  'Retry'
  ButtonCaptions[TMsgDlgBtn.mbIgnore]   := Translate(SMsgDlgIgnore);     //  'Ignore'
  ButtonCaptions[TMsgDlgBtn.mbNoToAll]  := Translate(SMsgDlgNoToAll);    //  'No to All'
  ButtonCaptions[TMsgDlgBtn.mbYesToAll] := Translate(SMsgDlgYesToAll);   //  'Yes to &All'
  ButtonCaptions[TMsgDlgBtn.mbHelp]     := Translate(SMsgDlgHelp);       //  'Help'
  ButtonCaptions[TMsgDlgBtn.mbClose]    := Translate(SMsgDlgClose);      //  'All'
  MsgTitles[TMsgDlgType.mtWarning]      := Translate(SMsgDlgWarning);    //  'Warning'
  MsgTitles[TMsgDlgType.mtError]        := Translate(SMsgDlgError);      //  'Error'
  MsgTitles[TMsgDlgType.mtInformation]  := Translate(SMsgDlgInformation);//  'Information'
  MsgTitles[TMsgDlgType.mtConfirmation] := Translate(SMsgDlgConfirm);    //  'Confirm'

end;

在使用TLang加载本地化字符串之后,在FormCreate上调用哪个。

将对话框文本添加到TLang(一个接一个)。 完成所有语言的新文本的翻译。 因此,所有文本翻译都集中在一个地方。

请注意,每次进行Delphi更新时,您必须 将更改后的FMX.Dialogs.pas与正式版本(并应用更改)进行比较