delphi 编译器如何生成 ResourceString 标识符?

How ResourceString Identifiers are generated by delphi compiler?

我的问题是 Delphi 编译器在编译应用程序时生成数字标识符并将其分配给所有 ResourceStrings,很少有文档说当重新编译应用程序时重新生成 Resourcestrings 的数字标识符,并且它们警告依赖它,因为它可能会在再生后发生变化。有很多第三方本地化工具使用和存储此资源字符串数字标识符以供内部参考和翻译。有没有办法阻止编译器重新生成此资源字符串数字标识符或强制它使用手动生成的数字标识符?

您无法控制编译器如何生成字符串 table 资源和数字标识符。

如果您希望使用依赖于数字标识符的外部工具,那么您应该以经典方式构建字符串 table。在文本文件中定义字符串 table。编译为资源并 link 为特定于语言的资源 DLL。这将使编码变得不那么方便,并且由您来决定这种权衡是否值得能够使用您的外部工具。

您可以通过指定 --drc 或 "Project|Options|Delphi Compiler|Linker|Output resource string .drc file" 开关从编译器中获取资源编译器、可编译文件。这将指示编译器生成一个 .drc 文件,该文件将包含资源字符串内容 编译器分配的值。

如果每次构建都这样做,即使编译器重新排列分配的值,您也始终知道它们是什么。编译器根据单元名称和资源字符串标识符为每个资源字符串生成一个标识符,因此即使 value 发生变化,它也始终保持稳定。

然后可以翻译或以其他方式处理此 .drc 文件,然后重新编译为 .res 文件。然后可以将该 .res 文件链接到一个特殊的 "resource-only" dll 中,该 dll 具有不同于“.dll”的特定扩展名,表示语言。正确设置系统语言后,将加载此dll,并使用字符串代替内置资源。