一個小小的 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.