gpt4 book ai didi

Lazarus 本地化/多个项目

转载 作者:行者123 更新时间:2023-12-02 20:58:01 28 4
gpt4 key购买 nike

我有一些 Delphi 经验,并且正在尝试使用 Lazarus 构建一个项目,这对我来说是全新的。

我想,我已经阅读了有关 Lazarus、翻译/国际化/本地化的所有可用信息,但我无法找到我真正想要的内容。

我一直在一个包含 3 或 4 个可执行文件的项目中工作,它们之间共享相同的数据库、相同的接口(interface)(表单继承)、通用实用程序、设置以及通用和相关字符串。

我不想有 3 或 4 个具有不同名称的 .po 文件(每个 EXE 一个),并且它们之间共享相同的公共(public)字符串。

有解决办法吗?

  • 可能会为所有应用程序强制使用一个“gobal.po”?怎么办?
  • 我是否必须创建自己的系统来本地化/集中一个文件中的所有字符串?

有什么建议吗?

感谢您的帮助。问候,

最佳答案

使用共享语言单元,将所有项目的所有字符串放入其中。创建一个包,向其中添加此共享字符串单元。为此包启用 i18n。编译该包,您将在 languages 文件夹中获得共享 po 文件。

对于每个需要资源字符串的项目,您必须添加此包作为要求 - 最简单的方法是在包编辑器中并选择“使用”/“添加到项目”。

不要为项目启用 i18n,因为这会将项目 po 文件添加到 languages 文件夹中。

为了在每个项目中使用翻译后的字符串,请将单元“Translations”添加到uses并调用

TranslateUnitResourceStrings(
StringsUnit,
Format('languages\%s.%s.po', [StringsUnit, ALang])
);

这里的StringsUnit是包含所有收集的资源字符串的共享单元的名称。 ALang 是要使用的语言符号,例如'de' 代表德语,'fr' 代表法语等。

现在最困难的部分...由于 i18n 已关闭,分配给组件标题的字符串不会自动放入 po 文件中。因此,您可以保留组件标题,为每个标题创建一个资源字符串(当然,在“stringsunit”中),然后在运行时将标题分配给资源字符串。也许是这样的:

procedure TForm1.FormCreate(Sender: TObject);
begin
SetCaptions;
end;

procedure TForm1.SetCaptions;
begin
Caption := RSTitleOfForm1; // resource string for form title
Label1.Caption := RSYDateLabel; // label caption showing "Date:"
// etc.
end;

如果用户选择一种新语言,例如从具有所有可用翻译的组合框中选择一种新语言,则必须调用 TranslateUnitResourceStrings,然后为每个现有表单调用 SetCaptions(如果是动态创建的表单,将自动调用 SetCaptions,因为它位于FormCreate 事件)。

关于Lazarus 本地化/多个项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39560639/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com