一个小小的 TLang 类, 实现多语言切换, 挺好的. 它的工作思路是:
1、首先通过 AddLang('语言代码') 添加语言类别, 如: AddLang('en')、AddLang('cn').
2、每个语言代码对应一个 TStrings 列表, 获取方式如: LangStr['en']、LangStr['cn'].
3、可以手动填充这些数据、可以通过 LoadFromFile() 方法载入之前 SaveToFile() 的数据(*.lng)、还可以在设计时提供的界面中操作这些数据.
4、切换时修改 Lang 属性即可, 如 Lang := 'cn'.
5、它的作用域是当前工程的所有窗体及控件, 但不包括绘图控件(如 TText)、控件中的文本和窗体标题等.
测试:
1、先在窗体上添加 TLang;
2、添加三个 TRadioButton, 用于切换语言;
3、添加 TButton、TCheckBox、TLabel 用于显示测试;
4、激活 RadioButton1、Button1 和窗体的默认事件.
unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.Objects; type TForm1 = class(TForm) Lang1: TLang; RadioButton1: TRadioButton; RadioButton2: TRadioButton; RadioButton3: TRadioButton; Button1: TButton; CheckBox1: TCheckBox; Label1: TLabel; procedure FormCreate(Sender: TObject); procedure RadioButton1Change(Sender: TObject); procedure Button1Click(Sender: TObject); end; var Form1: TForm1; implementation {$R *.fmx} procedure TForm1.FormCreate(Sender: TObject); begin RadioButton1.Text := 'English'; RadioButton2.Text := '简体中文'; RadioButton3.Text := '繁体中文'; RadioButton1.Tag := 0; RadioButton2.Tag := 1; RadioButton3.Tag := 2; RadioButton2.OnChange := RadioButton1.OnChange; RadioButton3.OnChange := RadioButton1.OnChange; {这些标题应对应着 TLang 的相关设置} Button1.Text := 'Button'; CheckBox1.Text := 'CheckBox'; Label1.Text := 'Test'; Caption := 'Test'; {添加语言类别} Lang1.AddLang('en'); Lang1.AddLang('cn'); Lang1.AddLang('big'); {Original: 这个原始的 TStrings 可有可无} with Lang1.Original do begin Add('Button'); Add('CheckBox'); Add('Test'); end; {en 作为默认也可以不设置} with Lang1.LangStr['en'] do begin Add('Button'); Add('CheckBox'); Add('Test'); end; {简体中文} with Lang1.LangStr['cn'] do begin Values['Button'] := '按钮'; Values['CheckBox'] := '复选框'; Values['Test'] := '测试'; // Values[Lang1.Original[0]] := '按钮'; // Values[Lang1.Original[1]] := '复选框'; // Values[Lang1.Original[2]] := '测试'; end; {繁体中文} with Lang1.LangStr['big'] do begin Values['Button'] := '按鈕'; Values['CheckBox'] := '復選框'; Values['Test'] := '測試'; end; end; {切换} procedure TForm1.RadioButton1Change(Sender: TObject); begin case TRadioButton(Sender).Tag of 0: Lang1.Lang := 'en'; 1: Lang1.Lang := 'cn'; 2: Lang1.Lang := 'big'; end; end; {语言数据保存在 Resources 属性中, 它是嵌套的 TStrings 类型} procedure TForm1.Button1Click(Sender: TObject); var i: Integer; begin for i := 0 to Lang1.Resources.Count - 1 do ShowMessage(TStrings(Lang1.Resources.Objects[i]).Text); end; end.
分类:
XE2 与 FireMonkey
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧