Delphi 10.4本地化问题

Delphi 10.4 localization issues

我正在尝试 Delphi 10.4。本地化 Windows 应用程序在过去非常有效,但现在当我动态加载 RC DLL 文件时,它只会更改 RCDATA,而不再是“String Table”。

我正在使用此代码(作为快速简历)

NewInst := LoadLibraryEx(FileName, 0, LOAD_LIBRARY_AS_DATAFILE); 
....
CurModule.ResInstance := NewInstance;

FileName是我可以用“Resource Hacker”软件编辑的具有资源(RCDATA和“String Table”)的DLL文件,可以看到它包含“String table" 内部符合预期。

它适用于 RCDATA(所有形式都得到翻译)但不再包含在任何 .pas 文件的 Resourcestring 部分中的“String table”,以及所有字符串保留原始语言。

它在以前的 Delphi 版本(如 10.2)中工作正常,我不知道为什么它在这个版本中失败。

核心问题 问题是资源字符串现在被缓存了,加载新资源数据后您无权清除缓存:(

https://quality.embarcadero.com/browse/RSP-30853 (如果您认为必须修复,请投下一票)

Work-around 我将资源字符串缓存机制“克隆”到一个单独的单元中,并将 re-routed LoadResStringFunc 克隆到我的克隆单元中。这里我允许访问resstringcache,这样可以在加载新资源后清除它。

还有一个解决办法。通过将 LoadResStringFunc 分配给 nil 来禁用新的缓存。一个好的地方是在程序的开头。

begin
>>> ADD THIS to disable the caching
  LoadResStringFunc := nil;
>>>
  Application.Initialize;
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TForm1, Form1);
  Application.Run;
end.