2016-09-18 44 views
2

我有一些德尔菲的经验,我试图与拉撒路建立一个项目,这对我来说是全新的。拉撒路本地化/多个项目

我想,我读过提供拉撒路,翻译/国际化/本地化的所有信息,但我无法找到我真正想要的。

我一直在一个项目中使用3或4个EXEcutables,他们之间共享,相同的数据库相同的接口(窗体继承),常见的应用程序,设置,以及常见和相关的字符串。

我不想有3个或4个不同的名字(每个EXE),它们之间有着相同的常见字符串.po文件。

有没有解决方案?

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

有什么建议?

感谢您的任何帮助。 问候,

回答

4

使用你把所有项目的所有字符串成一个共同的语言单位。创建一个你添加这个共享字符串单元的包。打开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事件中)。

+0

这就是我正在寻找的。 谢谢! – antseq