sgcLocalization:翻译您的 Delphi 应用程序,并在运行时切换语言

· 组件
sgcLocalization:翻译您的 Delphi 应用程序,并在运行时切换语言
新产品 · sgcLocalization

一个应用程序,五种语言。
运行时即时切换。

sgcLocalization 用来翻译您自己的 Delphi、C++Builder 和 Lazarus 应用程序。每个窗体、每条消息、每个复数形式,都只需一个编辑器,切换语言只需一行代码。

  • English
  • Deutsch
  • Español
  • Français
  • Italiano
同一个 Delphi 应用程序的仪表盘显示了五次,分别为英语、德语、西班牙语、法语和意大利语,包含浅色和深色主题
1行代码切换
3个框架
7 至 13Delphi 版本
0使用 sgcUI 无额外费用

上面的图片来自同一个可执行文件。同样的仪表盘,同样的数据,分别以英语、德语、西班牙语、法语和意大利语显示,用户在应用程序运行时通过组合框更改语言。无需重启,也无需第二次构建。

这个应用程序是用 sgcLocalization 翻译的,它是 sgcUI 套件的一款新产品。它支持 VCL、FireMonkey 和 LCL,适用于从 Delphi 7 到 Delphi 13、C++Builder 以及 Lazarus,并包含在每个 sgcUI 版本和每款单品包中。

一分钟了解 sgcLocalization:扫描、翻译并切换一个真实的应用程序。也可在 YouTube 观看。

一行代码切换语言

更改语言所需的全部代码如下:

uses
  sgcLocalization_Engine;

procedure TfrmMain.btnGermanClick(Sender: TObject);
begin
  sgcSetLanguage('de');
end;

如果您不想写任何代码,可以把现成的语言组合框放到窗体上(TsgcVCLLanguageCombo 或 TsgcFMXLanguageCombo)。它会列出您项目中的语言,并在用户选择时切换。

同一个应用程序的订单页面,分别以英语、德语和意大利语显示:工具栏、导航、搜索框、表格标题、数据和数字格式都会随之改变
同一个页面,分别以英语、德语和意大利语显示。工具栏、导航、表格标题、提示和数据都跟随语言变化。

切换所做的不只是替换标题:

若要以用户系统的语言启动,只需设置一个属性:

sgcVCLLocalizer1.Language := 'auto';

只需很少的工作

1放置在主窗体上放一个本地化组件。
2扫描它会收集您的窗体、框架和数据模块中的文本。
3翻译手工翻译,通过 XLIFF 交给译员,或使用 AI 建议。
4切换一行代码,或使用语言组合框。

本地化组件(VCL 使用 TsgcVCLLocalizer,FireMonkey 使用 TsgcFMXLocalizer)通过 RTTI 找出每个文本属性。您不必标记属性,不必重命名组件,也不必修改窗体。

内置的忽略规则会跳过绝不是文本的内容:组件名称、字段名称、SQL、文件名、格式字符串,以及 sgcUI 控件自身的非文本属性。您也可以添加自己的规则。同时包含标准控件和 sgcUI 控件的窗体也能干净地扫描,因此您要翻译的列表中只有文本,没有别的东西。

代码中的文本:文本片段

并非所有文本都在窗体里。在代码中构建的消息、状态行和标题就是文本片段。用 sgcT 包住文本,它就可以翻译:

if MessageDlg(sgcT('Save changes?'), mtConfirmation,
  [mbYes, mbNo], 0) = mrYes then
  SaveOrder;

同一个词可能需要两种译法。在英语中,“Open”既是一个命令,也是订单的一种状态。sgcTC 会添加上下文,让每种含义都有自己的译文:

btnOpen.Caption := sgcTC('command', 'Open');
lblState.Caption := sgcTC('order status', 'Open');

复数使用 sgcTN。您写下源语言的单数和复数,译文则提供目标语言所需的全部形式:

lblSelected.Caption := sgcTN('%d order selected', '%d orders selected',
  Count, [Count]);

复数规则来自 CLDR,因此对每种语言都是正确的。例如波兰语有四种形式,编辑器会逐一向译员索取每一种。

一个翻译编辑器

所有译文都在同一个地方编辑。在设计时右键单击本地化组件,即可在 IDE 内打开编辑器,也可以使用 IDE 之外的独立工具。

sgcLocalization 翻译编辑器的浅色和深色主题:表格显示每个项目的源文本以及德语、西班牙语和法语译文,旁边有状态筛选器,以及包含源文本、译文、备注和建议的编辑面板
翻译编辑器,浅色和深色。每个文本一行,每种语言一列,每个项目的状态一目了然。

捕捉常见错误的验证

丢掉了 %d 或快捷键的译文很容易写出来,却很难发现。sgcLocalization 会检查每一条译文,无论它是手工输入、导入的,还是由 AI 提出的建议:

翻译编辑器的验证选项卡,显示一个因格式说明符与源文本不同而产生的错误,以及一个因换行符不同而产生的警告
德语文本丢失了一个格式说明符。它在到达客户之前就被报告为错误。

有错误的项目不能设置为已审阅,因此损坏的文本不会作为完成的工作混入发布版本。

AI 翻译,以建议的形式

编辑器可以使用 ChatGPT、Claude、Gemini 和 Ollama 等 AI 服务进行翻译。选择目标语言,提供术语表和关于语气的说明,然后开始。

AI 翻译对话框:已选择德语和法语作为目标语言,范围为新增和已更改的文本,并有术语表和正式语气的说明
AI 翻译的目标语言、范围、术语表和说明。

结果以建议的形式出现。您逐条接受或拒绝,建议绝不会覆盖已经翻译的文本。同样的验证也会对它们运行。

须知。AI 翻译通过 sgcUI 的 AI 提供商进行。上述各项服务需要 sgcWebSockets。没有它时,您可以通过一个事件在自己的代码中调用任何服务。

面向专业译员的 XLIFF

翻译机构使用 XLIFF 工作。sgcLocalization 可以为一种语言导出 XLIFF 1.2,并在文件返回时导入。

导入绝不会直接写入您的项目。它会打开一个审阅列表,列出每一处更改:旧文本、新文本、更改的类型以及发现的任何问题。只有您勾选的行才会被应用。

法语文件的 XLIFF 导入审阅列表:每一行显示项目、更改类型、旧文本和新文本、新状态以及问题,并有一个用于应用的复选框
XLIFF 导入的审阅。有问题的行保持未勾选,在您按下“应用”之前不会应用任何内容。

一个项目文件

应用程序的译文保存在一个扩展名为 .sgcloc 的项目文件中。它是 JSON 格式,因此对版本控制很友好:一处译文的更改就是一个小的差异,您可以在代码审查中直接阅读。如果您更喜欢旁边没有任何其他文件的单个可执行文件,也可以改为把项目嵌入窗体文件中。

在真实应用程序中体验

展示用的演示程序是 Order Desk,一个完整的业务应用程序:包含仪表盘、订单、客户、计划器、数据透视分析、向导和打印预览。它已翻译成英语、德语、西班牙语、法语和意大利语,并提供 VCL、FireMonkey 和 Lazarus 版本。

Order Desk 演示程序的法语计划器页面:带有配送安排的周视图、法语的星期名称、工具栏和导航
法语的 Order Desk 计划器。星期名称、视图和日程都跟随语言变化。

演示文件夹中还有三个快速入门、独立的翻译编辑器工具,以及一份入门指南,带您从一个空窗体做到一个已翻译的应用程序。

包含在 sgcUI 中

sgcLocalization 随 sgcUI 2026.12.0 一起发布。它不单独销售:每个 sgcUI 版本和每款单品包都包含它,并且在安装程序中默认选中。

您的应用程序,使用您客户的语言

下载 sgcUI,打开 Order Desk 演示程序,并在它运行时更改语言。然后在您自己的主窗体上放一个本地化组件。

有问题或反馈?联系我们,回复您的是编写这些代码的人。