-2

我已阅读关于本地化Embarcadero DocWiki的文档。德尔福应用程序国际化和本地化

但我不知道如何:在运行时

  1. 改变语言 - 例如我会在应用程序菜单改变语言为英语或对话框波兰
  2. 显示经过翻译的文本,比如点击:ShowMessage('Zmieniłeśjęzyk');
+0

你是在firemonkey还是VCL? –

+0

VCL。德尔福10西雅图企业。 – InnerWorld

+0

您可以尝试使用TLang组件,但它有问题,并且它不适用于每个组件。我写了自己的组件来本地化android/ios应用程序和Windows程序,我建议你也这样做。否则,您可以查看以下内容:https://yktoo.com/en/software/dklang –

回答

2

1. 有一个样本项目(Delphi附带),名为RichEdit,它有语言的运行时变化。为了达到这个目的,Reinit单位被使用(你可以从那里拿到),它实际上重新加载了所有的资源。

它在这样的简单程序上正常工作,但可能会在实现更复杂的事情时产生真正的痛苦,因为窗体上的所有控件都已恢复到启动时的初始状态,所以这是您的责任保持数据的一致性。

尽管在所有应用程序逻辑与GUI分离的情况下(因此TForm上没有变量,没有在编辑框中存储用户数据等),它应该正常工作。

RichEdit示例的源代码,以了解如何使用Reinit.pas

2. 最经典的方法是使用ResourceString。在您的单位或独立的单元更好的接口部分,写:

ResourceString 
    ChangeLanguageStr = 'Zmieniłeś język'; 
    //another strings here 

和用于显示信息:

ShowMessage(ChangeLanguageStr); 

这些字符串将在翻译管理器中显示。

+0

我想提一下,通常是以'rs'为前缀的资源字符串作为'r'esource's'trings。 – Victoria

+0

我找不到RichEdit Demo,也许我没有安装IDE与演示。我会尽力找到它。现在我在.rc文件中看到ResourceString - 在我搜索错误的模块之前,但是当语言是波兰语时 - 字符串在对话框中显示,但是当更改为英语时,字符串为空(我在翻译编辑器中翻译了它)知道为什么。 – InnerWorld

+0

@InnerWorld我在改变之后总是遇到更新所有资源的麻烦,无处不在点击:'项目 - >语言 - >更新本地化项目',然后'项目 - >构建所有项目',当然,所有这些都是在项目完成时完成的小组以原始应用程序及其翻译打开。那就是:也许你正在看到以前的版本。 –