使用你把所有项目的所有字符串成一个共同的语言单位。创建一个你添加这个共享字符串单元的包。打开i18n这个包。编译软件包,你会在languages文件夹中得到共享的po文件。
对于每一个项目需要的资源字符串,你必须添加这个包作为一项要求 - 要做到这一点是在包编辑器,并选择“使用” /“添加到项目”最简单的方法。
请勿打开项目的i18n,因为这会将项目po文件添加到语言文件夹。
为了使用翻译的字符串中的每个项目,加上单位“翻译”来使用和调用
TranslateUnitResourceStrings(
StringsUnit,
Format('languages\%s.%s.po', [StringsUnit, ALang])
);
这里StringsUnit是共享单元的所有收集到的资源字符串名称。 ALang是要使用的语言符号,例如, “德”为德国,“fr”包法国等
现在最困难的部分。既然国际化是关闭的,分配到组件的标题字符串不会被自动放入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事件中)。
这就是我正在寻找的。 谢谢! – antseq