使用共享语言单元,您可以在其中放入所有项目的所有字符串。创建一个包,您可以在其中添加此共享字符串单元。为这个包打开 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 事件)。