Delphi 10.4本地化问题

问题描述

我正在尝试Delphi 10.4。过去,对Windows应用程序进行本地化一直很吸引人,但是现在当我动态加载RC DLL文件时,它仅更改RCDATA,而不再更改“字符串表”。

我正在使用此代码(作为快速恢复)

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

FileName是DLL文件,具有我可以使用“ Resource Hacker”软件进行编辑的资源(RCDATA和“字符串表”),并且可以看到其中包含“字符串表”的内容符合预期。 / p>

它适用于RCDATA(所有形式都已转换),但现在不再包含在任何Resourcestring文件.pas部分中的“字符串表”,并且所有字符串均保持原始语言。

在以前的Delphi版本(如10.2)中,它运行良好,我不知道为什么该版本无法运行。

解决方法

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

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

解决方法 我将资源字符串缓存机制“克隆”到一个单独的单元中,并将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.