• Delphi XE2 之 FireMonkey 入门(18)


    一个小小的 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.
  • 相关阅读:
    一点点深夜感慨(还有居家学习日常)
    区间dp 矩阵连乘
    logstash grok match 对等于号,和中括号做筛选
    grok内置的默认类型有很多种,查看所有默认类型
    python开发技术要求
    django--models操作--备注
    django程序--settings.py文件备注
    django-admin 命令备注
    官网提供jumpserver安装文档--复盘 CentOS 7 安装文档
    安装jumpserver,提示错误
  • 原文地址:https://www.cnblogs.com/dzdd/p/3346844.html
Copyright © 2020-2023  润新知