如何国际化Delphi应用程序。

3
可能是重复问题:
翻译应用程序

怎样国际化我的Delphi XE2应用程序最好的方法?

我看到了stringtable资源,但我担心实现可能会耗时费力。

是否有其他同样有效的方法来完成这个任务?


3
国际化一个应用程序总是很费力气的。 :( - balazs
5个回答

3

也许不是最好的翻译工具,但我已经使用GNU Gettext很多年了。 整个过程非常简单:

  • 运行dxgettext来提取字符串
  • 您翻译或提交文件进行翻译
  • 我个人喜欢poEdit工具来翻译和管理翻译存储库
  • 可选:将您的翻译文件合并到最终的EXE中
  • 或者您将翻译文件放在子目录中,就这样!

http://dxgettext.po.dk/

更新:

1/ GNU Gettext已经包含在JCL/JVCL库中,你只需要在启动时激活此选项即可。

2/ Gnu Gettext可以翻译库中的一切内容,包括VCL、JCL/JVCL等!不仅仅限于你的代码!



0

我不知道这是否是国际化应用程序的最佳方式,但对我而言,它起作用了。这是一种自制的方法。

我创建了一个 XML 文件,其中包含翻译字典,但您可以使用任何其他格式,从 JSON 到 XLS(也许这是最好的)。然后实现了一个类,该类从此文件中读取翻译,并注册了一种在运行时更改语言的过程,我认为这是一个很好的功能。

TDictionary = class
private
  fOnChanged: TSignal;
  fLanguage: String;
  procedure setLanguage( const Value: String );
public
  procedure loadFromFile( filename: string );
  function getTranslation( id: string; lang: string = '' ): string;

  property language: String read fLanguage write setLanguage;
  property onChanged: TSignal read fonChanged;
end;

...

function TDictionary.getTranslation( id: string; lang: string = '' ): string;
begin  
  if lang = '' then 
    lang := Language; // use the default lang.
  // read the translation from the file.
end;

procedure TDictionary.setLanguage( const Value: String );
begin     
  fLanguage := Value;
  onChanged.Execute;
end;

TSignal是一个类,它注册方法,如果您调用Execute,则会执行所有已注册的方法。也许在xe2中,您已经有一些内置的东西来实现这一点,在delphi7中,我不得不自己创建这个类,但实现它很有趣。
在表单的createForm中:
procedure TMyClass.doTranslate( dictionary: TObject );
begin
  with dictionary as TDictionary do
  begin
    caption := dictionary.getTranslation( 'myclass.caption' );
    button.caption := dictionary.getTranslation( 'some id' );
  end;
  // or you can go through Controls array, and automate the assignment.
end;

procedure TMyClass.FormCreate(Sender: TObject);
begin
  Dictionary.onChanged.register( doTranslate );
  doTranslate( dictionary );
end;

procedure TMyClass.FormDestroy(Sender: TObject);
begin
  Dictionary.onChanged.deregister( doTranslate ); 
end;

正如您所看到的,这不是一个可以复制和粘贴的工作示例,我只是想向您展示其背后的思想。如果有什么不清楚的地方,请评论一下,我可以扩展我的答案。

一些注意事项:

  • 我认为将翻译转换为utf8格式很重要。
  • 使用xls使本地化更容易,如果他们破坏了您的xml文件(如果翻译者不专业,可能会发生您的xml文件以Microsoft Word格式返回),也会让您轻松一些。
  • 您可以将字典文件放入资源中,并从那里加载。

优点

  • 这样您就可以在运行时更改语言
  • 如果您需要另一种语言,您只需要编辑字典文件即可。

缺点

  • 如果您有许多表单,则连接所有标签、按钮等是一场噩梦,但您可以用聪明的方式自动化它。
  • 它会稍微减慢您的应用程序速度,但如果不经常更改应用程序语言,则影响不大。

0

0

有一个叫做Sisulizer的产品,我想它是在你构建可执行文件之后才能使用。我没有尝试过,但我读了很多关于它的文章。

看看这个


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接