博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Delphi XE2 之 FireMonkey 入门(18) - TLang(多语言切换的实现)
阅读量:7083 次
发布时间:2019-06-28

本文共 2623 字,大约阅读时间需要 8 分钟。

  hot3.png

一个小小的 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;interfaceuses  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.

转载于:https://my.oschina.net/hermer/blog/320552

你可能感兴趣的文章
单选按钮的取消与选中
查看>>
ionic-navigation
查看>>
我的友情链接
查看>>
android UI Tab切页效果 总结
查看>>
ObjectARX_IntersectWith实体是否相交
查看>>
Exchange创建多域名管理
查看>>
uname -a 输出内容分析
查看>>
PKI SSL CA 加密解密基础
查看>>
javaScript实现摇摇晃晃特效
查看>>
eclipse设置不格式化注释
查看>>
跟小博老师一起学JSP ——JSP指令
查看>>
mvcc
查看>>
云监控插件编写规范
查看>>
InnoDB数据字典--字典表加载
查看>>
书生教你cocos2d-x(2.2版)Win7下环境搭建
查看>>
升级gcc5.30
查看>>
系统改版自问自答
查看>>
Windows Server 2016-部署RODC只读域控制器
查看>>
hadoop(2.5,2.6) HDFS偶发性心跳异常以及大量DataXceiver线程被Blocked故障处理分享
查看>>
甩掉运维黑锅,容灾部署如何该怎么做
查看>>