如何在运行时更改/翻译const
的{{1}} SMsgDlgYes
的值,如SMsgDlgNo
使用的TDialogService.MessageDialog
,private void print(int ... numbers)
等? / p>
适用于FireMonkey应用(iOS / Android / Windows),因此我无法像resourcestring
那样使用Windows API。
答案 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与正式版本(并应用更改)进行比较