Delphi XE2 之 FireMonkey 入门(18) - TLang(多语言切换的实现)

一个小小的 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;interfaceusesSystem.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.Objects;typeTForm1 = 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;varForm1: TForm1;implementation{$R *.fmx}procedure TForm1.FormCreate(Sender: TObject);
beginRadioButton1.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 dobeginAdd('Button');Add('CheckBox');Add('Test');end;{en 作为默认也可以不设置}with Lang1.LangStr['en'] dobeginAdd('Button');Add('CheckBox');Add('Test');end;{简体中文}with Lang1.LangStr['cn'] dobeginValues['Button'] := '按钮';Values['CheckBox'] := '复选框';Values['Test'] := '测试';
//    Values[Lang1.Original[0]] := '按钮';
//    Values[Lang1.Original[1]] := '复选框';
//    Values[Lang1.Original[2]] := '测试';
  end;{繁体中文}with Lang1.LangStr['big'] dobeginValues['Button'] := '按鈕';Values['CheckBox'] := '復選框';Values['Test'] := '測試';end;
end;{切换}
procedure TForm1.RadioButton1Change(Sender: TObject);
begincase TRadioButton(Sender).Tag of0: Lang1.Lang := 'en';1: Lang1.Lang := 'cn';2: Lang1.Lang := 'big';end;
end;{语言数据保存在 Resources 属性中, 它是嵌套的 TStrings 类型}
procedure TForm1.Button1Click(Sender: TObject);
vari: Integer;
beginfor i := 0 to Lang1.Resources.Count - 1 doShowMessage(TStrings(Lang1.Resources.Objects[i]).Text);
end;end.

转载于:https://www.cnblogs.com/dzdd/p/3346844.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/377767.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode 46. 全排列 思考分析

目录1、题目2、思考3、优化1、题目 给定一个 没有重复 数字的序列,返回其所有可能的全排列。 2、思考 老规矩,先画出给出的例子的解空间树: 观察我们可以发现: 1、深度向下一层深入时,出现过的元素不能再出现&…

Arduino UNO R3开发板+MQ-2烟雾浓度传感器+火焰传感器+舵机+无源蜂鸣器+风扇+步进电机+WIFI模块+RGB三色LED灯+SIM900A所构成的室内安全报警模块

该系统模块主要由Arduino UNO R3开发板MQ-2烟雾浓度传感器火焰传感器舵机无源蜂鸣器风扇步进电机WIFI模块RGB三色LED灯SIM900A所组成,MQ-2烟雾浓度传感器达到不同的阈值的时候,LED灯会通过不同的颜色来进行警示。烟雾浓度增大,LED灯依次显示绿…

highcharts中series带参数的赋值问题

需要得到的代码如下: series: [{name: 棒号1,data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 9.6]}, {name: 棒号2,data: [-0.2, 0.8, 5.7, 11.3, 17.0, 22.0, 24.8, 24.1, 20.1, 14.1, 8.6, 2.5]}, {name: 棒号3,data: [-0.9, 0.6, 3.5, …

可编程ic卡 通用吗_8255可编程IC

可编程ic卡 通用吗Introduction 介绍 An 8255 programmable integrated circuit (IC) is an IC used for interfacing the microprocessor with the peripheral devices. It is a 40 pin IC which was introduced by INTEL to use with its 8085 and 8086 microprocessors. 82…

POJ 1944 Fiber Communications (枚举 + 并查集 OR 线段树)

题意 在一个有N(1 ≤ N ≤ 1,000)个点环形图上有P(1 ≤ P ≤ 10,000)对点需要连接。连接只能连接环上相邻的点。问至少需要连接几条边。 思路 突破点在于最后的结果一定不是一个环!所以我们枚举断边,则对于…

九、逻辑回归多分类和softmax多分类

一、逻辑回归多分类 假设激活函数使用的是sigmoid函数 逻辑回归多分类其实是多个二分类而已,若求三分类问题需要对训练的数据样本进行适当的修改调整即可,如何修改样本数据可以参考逻辑回归二分类和多分类本质区别,内容都一样&#xff0c…

【C++grammar】继承与构造test1代码附录

目录1、main.cpp2、circle.cpp3、circle.h4、rectangle.cpp5、rectangle.h6、Shape.h1、main.cpp #include <iostream> #include <string> #include "Shape.h" #include "circle.h" #include "rectangle.h"//创建Shape/Circle/Rect…

hdu 4747 mex 线段树+思维

http://acm.hdu.edu.cn/showproblem.php?pid4747 题意&#xff1a; 我们定义mex(l,r)表示一个序列a[l]....a[r]中没有出现过得最小的非负整数&#xff0c; 然后我们给出一个长度为n的序列&#xff0c;求他所有的连续的子序列的mex(l,r)的和。 思路&#xff1a; 首先因为n的最大…

十、评估指标

我看过很多课程&#xff0c;不过内容都大差不差&#xff0c;也可以参考这篇模型评估方法 一、K折交叉验证 一般情况&#xff0c;我们得到一份数据集&#xff0c;会分为两类&#xff0c;一类是trainset训练集&#xff0c;另一类十testset测试集。通俗一点也就是训练集相当于平…

leetcode 47. 全排列 II 思考分析

题目 给定一个可包含重复数字的序列 nums &#xff0c;按任意顺序 返回所有不重复的全排列。 思考分析以及代码 这一题和前面的做过的两个题目有所关联&#xff1a; leetcode 46. 全排列 思考分析 再加上leetcode 491. 递增子序列 思考分析类似的去重操作。 先画出解空间树…

python添加数组元素_在Python中向数组添加元素

python添加数组元素An array can be declared by using "array" module in Python. 可以通过在Python中使用“数组”模块来声明数组 。 Syntax to import "array" module: 导入“数组”模块的语法&#xff1a; import array as array_alias_nameHere, im…

hdu 4472 Count(递推即dp)

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid4472 代码&#xff1a; #include <cstdio> #include <cstring> #include <iostream> #include <cmath> #include <algorithm> #include <queue> #include <vector> …

如何在Java中同步ArrayList?

同步ArrayList (Synchronizing ArrayList) In java, there are two ways to synchronize ArrayList, 在Java中&#xff0c;有两种同步ArrayList的方法&#xff0c; With the help of synchronizedList() method 借助syncedList()方法 With the help of CopyOnWriteArrayList&l…

十一、决策树和随机森林

这门课和另一门课内容都差不多&#xff0c;可以参考七、决策树算法和集成算法该篇博文。 一、决策树相关概念 逻辑回归本质 逻辑回归&#xff1a;线性有监督分类模型。常用求解二分类问题&#xff0c;要么是A类别要么是B类别&#xff0c;一般会以0.5作为划分阈值&#xff0c…

【C++grammar】继承与构造

目录1.继承1、Inheritance (继承)2、避免一个类被继承&#xff08; C11 &#xff09;3、继承实例4、完整代码5、继承的优缺点是什么?2.继承中的构造函数1、 派生类继承的成员2、调用基类构造函数3.继承中的默认构造函数1、基类的无参构造函数2、由编译器自动生成的基类构造函数…

C语言预处理

所谓预处理是指在进行编译的第一遍扫描(词法扫描和语法分析)之前所作的工作。预处理是&#xff23;语言的一个重要功能&#xff0c; 它由预处理程序负责完成。当对一个源文件进行编译时&#xff0c; 系统将自动引用预处理程序对源程序中的预处理部分作处理&#xff0c; 处理完毕…

(转)将cocos2dx项目从VS移植到Eclipse

本文转自:http://www.cnblogs.com/Z-XML/p/3349518.html 引言&#xff1a;我们使用cocos2d-x引擎制作了一款飞行射击游戏&#xff0c;其中创新性地融入了手势识别功能。但是我们在移植过程中遇到了很多的问题&#xff0c;同时也发现网上的资料少而不全。所以在项目行将结束的时…

十二、聚类算法——相似度测量

两套学习资料都类似&#xff0c;可参考聚类算法实战 一、聚类 聚类&#xff1a;物以类聚&#xff0c;人以群分&#xff0c;是无监督学习中的一种。 没有y&#xff0c;只有x&#xff0c;把不同的x根据相似度自动的聚成好多堆儿 本质上&#xff0c;N个样本&#xff0c;映射到K个…

操作系统磁盘调度_磁盘调度| 操作系统

操作系统磁盘调度磁盘调度 (Disk Scheduling) One of the major duties of the operating is that, to use the hardware orderly and accurately. For disk drives, it has a duty of having a fast access time and disk bandwidth. Generally, bandwidth is the total numbe…

leetcode 344. 反转字符串 541. 反转字符串 II 双指针解

目录leetcode 344.反转字符串1、题目2、思考leetcode 541. 反转字符串 II1、题目2、思考leetcode 344.反转字符串 1、题目 2、思考 典型的双指针解法&#xff1a; 一个从前往后&#xff0c;一个从后往前&#xff0c;指针对应的交换即可。 class Solution { public:void reve…