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.pswp.cn/news/377767.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/377767.shtml
英文地址,請注明出處:http://en.pswp.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…