多国语言解决方案
来源:互联网 发布:淘宝男鞋潮店 编辑:程序博客网 时间:2024/04/26 00:37
unit Unit1;
interface
uses
inifiles,TypInfo,
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
MainMenu1: TMainMenu;
File1: TMenuItem;
Open1: TMenuItem;
procedure FormShow(Sender: TObject);
procedure lngMenuClick (Sender: TObject);
private
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
//查找语种目录下所有的语言配置文件
procedure SearchLanguagePack (lngStrings: TStrings);
var
DosError: Integer;
SearchRec: TsearchRec;
begin
DosError := FindFirst(ExtractFilePath(ParamStr(0))+'eps*.eps', faAnyFile, SearchRec);
while DosError = 0 do
begin
lngStrings.Add(ChangeFileExt(SearchRec.Name, ''));//返回的文件名并去掉末尾的.eps字符
DosError := FindNext(SearchRec);
end;
FindClose(SearchRec);
end;
//更换语言
function ChangeLanguage(Obj: TForm; Lang: string): Boolean;
var
INIF : Tinifile;
SL,TmpSL : TStringList;
Key,CompName :string;
I:Integer;
AComponent:TComponent;
CompProp,Value:string;
procedure Explode(S: string; SplitChar: string; R: TStrings);
var
P, L, C: Integer;
begin
R.Clear;
L := Length (S);
C := Length (SplitChar);
repeat
P := Pos(SplitChar, S);
if P = 0 then C := 1;
R.Add(Copy(S, P+C, L));
Delete(S, P, L);
until P = 0;
end;// End Explode()
//设置相应属性值
procedure SetPropertyValue(AComponent: TComponent; sProperty, sValue: string);
var
PropInfo: PPropInfo;
AStrings: TStringList;
begin
if AComponent <> nil then
begin
PropInfo := GetPropInfo(AComponent, sProperty);
if PropInfo <> nil then
begin
case PropInfo.PropType^.Kind of
tkString, tkLString: //字符串属性
SetStrProp(AComponent, PropInfo, sValue);
tkInteger: //序数属性
SetOrdProp(AComponent, PropInfo, StrToInt(sValue));
else
if PropInfo.PropType^.Name = 'TStrings' then //列表属性
begin
AStrings := TStringList.Create;
try
Explode(sValue, '||', AStrings);
SetOrdProp (AComponent, PropInfo, Integer (AStrings));
finally
AStrings.Free;
end; // end try
end; // end if PropInfo.PropType^.Name = 'TStrings'
end; // end case
end; // end if PropInfo <> nil
end; // end if AComponent <> ni
end; //End SetPropertyValue();
begin
Result := True;
SL := TStringList.Create;
TmpSL := TStringList.Create;
INIF := Tinifile.Create(ExtractFilePath(paramstr(0))+'eps'+Lang+'.eps');
INIF.ReadSectionValues (Obj.Name, SL);
for I := 0 to SL.Count - 1 do
begin
Explode(SL.Strings[I], '=',TmpSL);
Key := Trim (TmpSL.Strings[1]);
CompName := Trim (Copy(Key, 1, Pos ('.', Key) - 1));
if CompName = '' then
AComponent := Obj
else
AComponent := Obj.FindComponent(CompName);
CompProp := Trim(Copy (Key, Pos ('.', Key)+1, Length (Key)));
Value := Trim (TmpSL.Strings[0]);
SetPropertyValue(AComponent, CompProp, Value); // 设置属性
end;
INIF.Free;
TmpSL.Free;
SL.Free;
End;//End ChangeLanguage Function
procedure TForm1.FormShow(Sender: TObject);
var
lngStrings, tmpStrings: TStrings;
I: Integer;
lngMenu,M_Language: TMenuItem;
Filename: string;
IniF: TIniFile;
begin
lngStrings := TStringList.Create;
try
SearchLanguagePack (lngStrings);
if lngStrings.Count = 0 then
exit;
Filename := ExtractFilePath(ParamStr (0))+'eps' + lngStrings.Strings[0]+'.eps';
IniF := TIniFile.Create(Filename);
Filename := IniF.ReadString('Language', ' DefaultLang ', '');
if Filename <> '' then
begin
Filename := ExtractFilePath (ParamStr(0))+'eps'+Filename+'.eps';
if FileExists (Filename) then
begin
IniF.Free;
IniF := TIniFile.Create (Filename);
end;
end;
M_Language := TMenuItem.Create(self);
M_Language.Name := 'lg_Language';
M_Language.Caption := IniF.ReadString('Language', 'Language', 'Language');
MainMenu1.Items.Add(M_Language);
tmpStrings := TStringList.Create;
try
for I := 0 to lngStrings.Count - 1 do
begin
lngMenu := TMenuItem.Create (self);
lngMenu.Name := lngStrings.Strings[I]; // 将菜单项的名称赋予文件名
lngMenu.Caption := IniF.ReadString('Language', lngStrings.Strings[I], lngStrings.Strings[I]);
lngMenu.onClick := lngMenuClick; // 菜单事件
M_Language.Add(lngMenu); // 添加到语种菜单的最后一项上
end;
finally
tmpStrings.Free;
end;
finally
lngStrings.Free;
end;
ChangeLanguage(Form1,'Chinese');
IniF.Free;
end;
procedure TForm1.lngMenuClick (Sender: TObject);
var
Filename: string;
begin
if Sender is TMenuItem then
begin
Filename := (Sender as TMenuItem).Name;
ChangeLanguage(Form1, Filename);
end;
end;
end.
interface
uses
inifiles,TypInfo,
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus;
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
MainMenu1: TMainMenu;
File1: TMenuItem;
Open1: TMenuItem;
procedure FormShow(Sender: TObject);
procedure lngMenuClick (Sender: TObject);
private
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
//查找语种目录下所有的语言配置文件
procedure SearchLanguagePack (lngStrings: TStrings);
var
DosError: Integer;
SearchRec: TsearchRec;
begin
DosError := FindFirst(ExtractFilePath(ParamStr(0))+'eps*.eps', faAnyFile, SearchRec);
while DosError = 0 do
begin
lngStrings.Add(ChangeFileExt(SearchRec.Name, ''));//返回的文件名并去掉末尾的.eps字符
DosError := FindNext(SearchRec);
end;
FindClose(SearchRec);
end;
//更换语言
function ChangeLanguage(Obj: TForm; Lang: string): Boolean;
var
INIF : Tinifile;
SL,TmpSL : TStringList;
Key,CompName :string;
I:Integer;
AComponent:TComponent;
CompProp,Value:string;
procedure Explode(S: string; SplitChar: string; R: TStrings);
var
P, L, C: Integer;
begin
R.Clear;
L := Length (S);
C := Length (SplitChar);
repeat
P := Pos(SplitChar, S);
if P = 0 then C := 1;
R.Add(Copy(S, P+C, L));
Delete(S, P, L);
until P = 0;
end;// End Explode()
//设置相应属性值
procedure SetPropertyValue(AComponent: TComponent; sProperty, sValue: string);
var
PropInfo: PPropInfo;
AStrings: TStringList;
begin
if AComponent <> nil then
begin
PropInfo := GetPropInfo(AComponent, sProperty);
if PropInfo <> nil then
begin
case PropInfo.PropType^.Kind of
tkString, tkLString: //字符串属性
SetStrProp(AComponent, PropInfo, sValue);
tkInteger: //序数属性
SetOrdProp(AComponent, PropInfo, StrToInt(sValue));
else
if PropInfo.PropType^.Name = 'TStrings' then //列表属性
begin
AStrings := TStringList.Create;
try
Explode(sValue, '||', AStrings);
SetOrdProp (AComponent, PropInfo, Integer (AStrings));
finally
AStrings.Free;
end; // end try
end; // end if PropInfo.PropType^.Name = 'TStrings'
end; // end case
end; // end if PropInfo <> nil
end; // end if AComponent <> ni
end; //End SetPropertyValue();
begin
Result := True;
SL := TStringList.Create;
TmpSL := TStringList.Create;
INIF := Tinifile.Create(ExtractFilePath(paramstr(0))+'eps'+Lang+'.eps');
INIF.ReadSectionValues (Obj.Name, SL);
for I := 0 to SL.Count - 1 do
begin
Explode(SL.Strings[I], '=',TmpSL);
Key := Trim (TmpSL.Strings[1]);
CompName := Trim (Copy(Key, 1, Pos ('.', Key) - 1));
if CompName = '' then
AComponent := Obj
else
AComponent := Obj.FindComponent(CompName);
CompProp := Trim(Copy (Key, Pos ('.', Key)+1, Length (Key)));
Value := Trim (TmpSL.Strings[0]);
SetPropertyValue(AComponent, CompProp, Value); // 设置属性
end;
INIF.Free;
TmpSL.Free;
SL.Free;
End;//End ChangeLanguage Function
procedure TForm1.FormShow(Sender: TObject);
var
lngStrings, tmpStrings: TStrings;
I: Integer;
lngMenu,M_Language: TMenuItem;
Filename: string;
IniF: TIniFile;
begin
lngStrings := TStringList.Create;
try
SearchLanguagePack (lngStrings);
if lngStrings.Count = 0 then
exit;
Filename := ExtractFilePath(ParamStr (0))+'eps' + lngStrings.Strings[0]+'.eps';
IniF := TIniFile.Create(Filename);
Filename := IniF.ReadString('Language', ' DefaultLang ', '');
if Filename <> '' then
begin
Filename := ExtractFilePath (ParamStr(0))+'eps'+Filename+'.eps';
if FileExists (Filename) then
begin
IniF.Free;
IniF := TIniFile.Create (Filename);
end;
end;
M_Language := TMenuItem.Create(self);
M_Language.Name := 'lg_Language';
M_Language.Caption := IniF.ReadString('Language', 'Language', 'Language');
MainMenu1.Items.Add(M_Language);
tmpStrings := TStringList.Create;
try
for I := 0 to lngStrings.Count - 1 do
begin
lngMenu := TMenuItem.Create (self);
lngMenu.Name := lngStrings.Strings[I]; // 将菜单项的名称赋予文件名
lngMenu.Caption := IniF.ReadString('Language', lngStrings.Strings[I], lngStrings.Strings[I]);
lngMenu.onClick := lngMenuClick; // 菜单事件
M_Language.Add(lngMenu); // 添加到语种菜单的最后一项上
end;
finally
tmpStrings.Free;
end;
finally
lngStrings.Free;
end;
ChangeLanguage(Form1,'Chinese');
IniF.Free;
end;
procedure TForm1.lngMenuClick (Sender: TObject);
var
Filename: string;
begin
if Sender is TMenuItem then
begin
Filename := (Sender as TMenuItem).Name;
ChangeLanguage(Form1, Filename);
end;
end;
end.
可是更换菜单语言的时候有点慢,谁有好的方案请给我一份
留言或hzqghost@21cn.com
- 多国语言解决方案
- lua 多国语言文本解决方案
- WPF应用程序支持多国语言解决方案
- lua 多国语言文本解决方案
- WPF应用程序支持多国语言解决方案
- WPF应用程序支持多国语言解决方案
- 字符串的多国语言支持解决方案 通用解决方案篇
- 程序实现多国语言的动态切换解决方案
- 程序实现多国语言的动态切换解决方案
- ASP.NET MVC 3 Razor 多国语言参考解决方案
- 字符串的多国语言支持解决方案 Qt篇
- 程序实现多国语言的动态切换解决方案
- 程序实现多国语言的动态切换解决方案(转)
- 多国语言
- 多国语言支持
- 多国语言
- c# 多国语言
- 移植多国语言
- 单元格颜色渐变的GridView
- COM+分布事务处理(选择自 ccBoy)
- ASP.NET连接池救生员
- 国际顶级电子杂志(画册/商刊)制作推广系统—iebook超级精灵
- Microsoft Internal Coding Guidelines / Design Guidelines for Managed code
- 多国语言解决方案
- WiX Help - Authoring (2)
- NHibernate快速指南
- 彩票数据的自动更新
- 假新闻:中国工行上午被黑客光顾,竟然跟萨达姆有关
- 只要有可能,就推迟变量定义
- 利用Dojo和JSON建立无限级AJAX动态加载的功能模块树
- truncate,delete,drop的比较
- 《互联网项目运营分析》第一章:互联网项目运营历史和现状、未来