文档章节

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

涂孟超
 涂孟超
发布于 2014/09/26 15:37
字数 548
阅读 21
收藏 0

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

本文转载自:http://www.cnblogs.com/del/archive/2011/09/28/2193903.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
Delphi XE2:这就是我们所期待的Delphi吗?

版权声明:本文为 OSChina.NET 原创编译 转载务必注明出处,并保留链接! 作者:蒂姆.安德森 Delphi是被一些人遗忘了的快速应用程序开发工具,但它与可视组件库相结合,依然是开发Windows本机...

虫虫
2011/10/31
40.4K
49
Delphi XE2 新功能:LiveBindings --- 把对象之间的属性绑定起来

Delphi XE2 新功能:LiveBindings --- 把对象之间的属性绑定起来日期:2011年9月9日 作者: 人气:5340 查看:[大字体 中字体 小字体] XE2 有了 FireMonkey 框架,它不同于 VCL ,以往的数据感...

vga
2016/08/09
17
0
PostgreDAC 2.8.0,Delphi的PostgreSQL组件

PostgreDAC 2.8.0 发布了,该版本首次通过 RAD Studio XE2 支持 Mac OS X 系统,大大提升了 FireMonkey 支持,修复了关于 TPSQLMonitor 的 bug。 完整改进记录: [!] FireMonkey and cross p...

红薯
2012/03/20
662
1
最全面的常用Delphi第三方控件汇总—报表、图表、界面、数据库等

有网友问我常用Delphi第三方控件及功能。我先大概整理一下,以后会在文章里面碰到时再仔细介绍。 报表图表方面: TeeChart Pro 在delphi 的图形显示方面目前唯一的选择,虽然从delphi 3 就随...

Leamontea
2012/12/03
0
2
delphi各个版本编译开关值

delphi各个版本编译开关值 {$IFDEF VER80} - Delphi 1 {$IFDEF VER90} - Delphi 2 {$IFDEF VER100} - Delphi 3 {$IFDEF VER120} - Delphi 4 {$IFDEF VER130} - Delphi 5 {$IFDEF VER140} - D......

伽罗kapple
2016/03/01
10
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

MySQL 乱七八糟的可重复读隔离级别实现

MySQL 乱七八糟的可重复读隔离级别实现 摘要: 原文可阅读 http://www.iocoder.cn/Fight/MySQL-messy-implementation-of-repeatable-read-isolation-levels 「shimohq」欢迎转载,保留摘要,谢...

DemonsI
43分钟前
2
0
Spring源码阅读——2

在阅读源码之前,先了解下Spring的整体架构: 1、Spring的整体架构 1. Ioc(控制反转) Spring核心模块实现了Ioc的功能,它将类与类之间的依赖从代码中脱离出来,用配置的方式进行依赖关系描...

叶枫啦啦
今天
1
0
jQuery.post() 函数格式详解

jquery的Post方法$.post() $.post是jquery自带的一个方法,使用前需要引入jquery.js 语法:$.post(url,data,callback,type); url(必须):发送请求的地址,String类型 data(可选):发送给后台的...

森火
今天
0
0
referer是什么意思?

看看下面这个回答(打不开网页可以把网址复制到搜索栏): https://zhidao.baidu.com/question/577842068.html

杉下
今天
1
0
使用U盘安装CentOS-解决U盘找不到源

1. 使用UltraISO制作CentOS安装盘 如果需要安装带界面的系统,为保证安装顺利,可选择Everything版本的ISO制作安装盘。 2. 在BIOS中选择使用U盘安装 系统启动后,进入安装选择界面,其中有三...

Houor
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部