【问题标题】:Lazarus localization / multiple projectsLazarus 本地化/多个项目
【发布时间】:2017-01-26 09:41:07
【问题描述】:

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

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

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

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

有解决办法吗?

  • 可能对所有应用程序强制一个“gobal.po”?怎么样?
  • 我必须创建自己的系统来本地化\集中一个文件中的所有字符串吗?

有什么建议吗?

感谢您的帮助。 问候,

【问题讨论】:

    标签: lazarus freepascal


    【解决方案1】:

    使用共享语言单元,您可以在其中放入所有项目的所有字符串。创建一个包,您可以在其中添加此共享字符串单元。为这个包打开 i18n。编译包,你会在languages文件夹中得到共享的po文件。

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

    不要为项目打开 i18n,因为这会将项目 po 文件添加到语言文件夹。

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

    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 事件)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-10
      • 2023-03-29
      • 2017-09-21
      • 1970-01-01
      • 2010-12-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多