文档章节

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

涂孟超
 涂孟超
发布于 2014/09/26 15:37
字数 548
阅读 22
收藏 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 开发移动应用

引言 现在移动设备的发展现在变成了趋势. 我们可以考虑本地语言开发 (例如ObjectiveC for IOS或 Java for Android), 但通常对新开发者的学习代价高. 另一个选择是第三方代理 (例如Titanium,...

oschina
2012/12/11
10.3K
21
Delphi XE2:这就是我们所期待的Delphi吗?

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

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

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

vga
2016/08/09
17
0
最全面的常用Delphi第三方控件汇总—报表、图表、界面、数据库等

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

Leamontea
2012/12/03
0
2
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
675
1

没有更多内容

加载失败,请刷新页面

加载更多

CentOS配置Tomcat监听80端口,虚拟主机

Tomcat更改默认端口为80 更改的配置文件是: /usr/local/tomcat/conf/server.xml [root@test-a ~]# vim /usr/local/tomcat/conf/server.xml # 找到 Connector port="8080" protocol="HTTP/1......

野雪球
今天
5
0
《稻盛和夫经营学》读后感心得体会3180字范文

《稻盛和夫经营学》读后感心得体会3180字范文: 一代日本经营之圣稻盛和夫凭借刻苦勤奋的精神以及深植于佛教的商业道德准则,成为了“佛系”企业家的代表人物。在《稻盛和夫经营学》“领导人...

原创小博客
今天
3
0
java框架学习日志-5(常见的依赖注入)

依赖注入(dependency injection) 之前提到控制反转(Inversion of Control)也叫依赖注入,它们其实是一个东西,只是看的角度不同,这章详细说一下依赖注入。 依赖——指bean对象创建依赖于...

白话
今天
4
0
红外接收器驱动开发

背景:使用系统的红外遥控软件没有反应,然后以为自己接线错误,反复测试,结果烧坏了一个红外接收器,信号主板没有问题。所以自己开发了一个红外接收器的python驱动。接线参见https://my.os...

mbzhong
今天
2
0
ActiveMQ消息传送机制以及ACK机制详解

AcitveMQ是作为一种消息存储和分发组件,涉及到client与broker端数据交互的方方面面,它不仅要担保消息的存储安全性,还要提供额外的手段来确保消息的分发是可靠的。 一. ActiveMQ消息传送机...

watermelon11
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部