zoukankan      html  css  js  c++  java
  • 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;
    
    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.
    

  • 相关阅读:
    mongo连接拒绝10061原因
    python爬取CNKI的期刊
    C语言socket编程
    Linux c time模块函数库
    linux下python3调用c代码或者python3调用c++代码
    stl综合
    linux c调用 mysql代码
    debian系列下c++调用mysql, linux下面安装mysql.h文件
    c++ linux socket编程 c++网络编程
    比较均值分析思路
  • 原文地址:https://www.cnblogs.com/del/p/2193903.html
Copyright © 2011-2022 走看看