BCB多语言版本软件的实现
2007-12-14 01:14
239 查看
在BCB中实现多语言设计的方法可能有多种多样,在此我通过一个实例讲解一下我个人的实现思路:
1、首先必须挖掘程序中所使用的到文字资源将其统一整理出来,再对应翻译成各种语言,我这里就以:中文简体,中文繁体,英语为例;建立语言资源文件:lang.ini 具体内容如下:
[set]
val=3
[chs]
title=程序重启测试(设计:彭学周)
topic=语言设置
option1=中文简体
option2=中文繁体
option3=英文
btn1=确 定
btn2=取 消
[cht]
title=程式重啟測試(設計:彭學周)
topic=語言設置
option1=中文簡體
option2=中文繁體
option3=英文
btn1=確 定
btn2=取 消
[eng]
title=Program reload test(By:Favory)
topic=Language Setting
option1=Chinese Simplified
option2=Chinese Traditional
option3=English
btn1=Confirm
btn2=Cancel
2:在程序中设置读取,根据选择的语言,读取对应的文本内容,对界面中的现实元素进行赋值,以此来改变语言显示;代码如下:
TForm1 *Form1;
bool g_bIsRunAgain = false;
int lval=1;
TIniFile *pIniFile;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
...{
pIniFile=new TIniFile(ChangeFileExt(ExtractFilePath(Application->ExeName), "lang.ini"));
AnsiString lang="chs";
lval=pIniFile->ReadInteger("set","val",1);
switch (lval)
...{
case 1 :
rb1->Checked=true;
lang="chs";
break;
case 2 :
rb2->Checked=true;
lang="cht";
break;
case 3 :
rb3->Checked=true;
lang="eng";
break;
}
this->Caption=pIniFile->ReadString(lang,"title","程序重启测试");
grp1->Caption=pIniFile->ReadString(lang,"topic","语言设置");
rb1->Caption=pIniFile->ReadString(lang,"option1","中文简体");
rb2->Caption=pIniFile->ReadString(lang,"option2","中文繁体");
rb3->Caption=pIniFile->ReadString(lang,"option3","英文");
btn1->Caption=pIniFile->ReadString(lang,"btn1","确 定");
btn2->Caption=pIniFile->ReadString(lang,"btn2","取 消");
// delete pIniFile;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btn2Click(TObject *Sender)
...{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btn1Click(TObject *Sender)
...{
if(rb1->Checked) lval=1;
if(rb2->Checked) lval=2;
if(rb3->Checked) lval=3;
pIniFile->WriteInteger("set","val",lval);
g_bIsRunAgain = true;
Close();
}
3.、由于语言的加载放在初始化中进行的,所以切换语言后必须重新启动程序,为了让程序在点击确定改变语言按钮时关闭后自动启动来实现跟新语言的方法,所以必须修改Project1.cpp中的WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)函数,代码如下:
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
...{
try
...{
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Application->Run();
}
catch (Exception &exception)
...{
Application->ShowException(&exception);
}
catch (...)
...{
try
...{
throw Exception("");
}
catch (Exception &exception)
...{
Application->ShowException(&exception);
}
}
if(g_bIsRunAgain)
...{
AnsiString strPath;
STARTUPINFO StartInfo;
PROCESS_INFORMATION procStruct;
memset(&StartInfo, 0, sizeof(STARTUPINFO));
StartInfo.cb = sizeof(STARTUPINFO);
strPath = Application->ExeName;
if(!::CreateProcess(
(LPCTSTR) strPath.c_str(),
NULL,
NULL,
NULL,
FALSE,
NORMAL_PRIORITY_CLASS,
NULL,
NULL,
&StartInfo,
&procStruct))
return 0;
}
return 0;
}
4、运行效果:
1、首先必须挖掘程序中所使用的到文字资源将其统一整理出来,再对应翻译成各种语言,我这里就以:中文简体,中文繁体,英语为例;建立语言资源文件:lang.ini 具体内容如下:
[set]
val=3
[chs]
title=程序重启测试(设计:彭学周)
topic=语言设置
option1=中文简体
option2=中文繁体
option3=英文
btn1=确 定
btn2=取 消
[cht]
title=程式重啟測試(設計:彭學周)
topic=語言設置
option1=中文簡體
option2=中文繁體
option3=英文
btn1=確 定
btn2=取 消
[eng]
title=Program reload test(By:Favory)
topic=Language Setting
option1=Chinese Simplified
option2=Chinese Traditional
option3=English
btn1=Confirm
btn2=Cancel
2:在程序中设置读取,根据选择的语言,读取对应的文本内容,对界面中的现实元素进行赋值,以此来改变语言显示;代码如下:
TForm1 *Form1;
bool g_bIsRunAgain = false;
int lval=1;
TIniFile *pIniFile;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
...{
pIniFile=new TIniFile(ChangeFileExt(ExtractFilePath(Application->ExeName), "lang.ini"));
AnsiString lang="chs";
lval=pIniFile->ReadInteger("set","val",1);
switch (lval)
...{
case 1 :
rb1->Checked=true;
lang="chs";
break;
case 2 :
rb2->Checked=true;
lang="cht";
break;
case 3 :
rb3->Checked=true;
lang="eng";
break;
}
this->Caption=pIniFile->ReadString(lang,"title","程序重启测试");
grp1->Caption=pIniFile->ReadString(lang,"topic","语言设置");
rb1->Caption=pIniFile->ReadString(lang,"option1","中文简体");
rb2->Caption=pIniFile->ReadString(lang,"option2","中文繁体");
rb3->Caption=pIniFile->ReadString(lang,"option3","英文");
btn1->Caption=pIniFile->ReadString(lang,"btn1","确 定");
btn2->Caption=pIniFile->ReadString(lang,"btn2","取 消");
// delete pIniFile;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btn2Click(TObject *Sender)
...{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btn1Click(TObject *Sender)
...{
if(rb1->Checked) lval=1;
if(rb2->Checked) lval=2;
if(rb3->Checked) lval=3;
pIniFile->WriteInteger("set","val",lval);
g_bIsRunAgain = true;
Close();
}
3.、由于语言的加载放在初始化中进行的,所以切换语言后必须重新启动程序,为了让程序在点击确定改变语言按钮时关闭后自动启动来实现跟新语言的方法,所以必须修改Project1.cpp中的WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)函数,代码如下:
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
...{
try
...{
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Application->Run();
}
catch (Exception &exception)
...{
Application->ShowException(&exception);
}
catch (...)
...{
try
...{
throw Exception("");
}
catch (Exception &exception)
...{
Application->ShowException(&exception);
}
}
if(g_bIsRunAgain)
...{
AnsiString strPath;
STARTUPINFO StartInfo;
PROCESS_INFORMATION procStruct;
memset(&StartInfo, 0, sizeof(STARTUPINFO));
StartInfo.cb = sizeof(STARTUPINFO);
strPath = Application->ExeName;
if(!::CreateProcess(
(LPCTSTR) strPath.c_str(),
NULL,
NULL,
NULL,
FALSE,
NORMAL_PRIORITY_CLASS,
NULL,
NULL,
&StartInfo,
&procStruct))
return 0;
}
return 0;
}
4、运行效果:
相关文章推荐
- asp.net2.0多语言版本网站软件的实现--青蛙非王子(lostfrog)
- 用VS2005实现软件多语言版本的迅捷开发
- c#软件实现语言版本切换
- 批处理和Delphi实现多语言版本软件
- WinForm软件多语言版本实现
- 用最简单有效的办法实现Winform的全球化多国语言版本软件
- 用VS2005实现软件多语言版本的迅捷开发(转载)
- Google Protocol Buffer 的各语言实现版本
- ASP.Net 中实现多语言界面的方法(2.0以上版本)
- 如何实现网站多语言版本
- 软件的版本更新检查实现
- 用控件仅一条指令实现界面换肤和多语言版本(VB)
- [原创]使用 Google Chart 在线服务实现软件版本发布时间线图
- RDIFramework.NET V2.9版本多语言的实现
- Qt实现的局域网通信软件(仿QQ版本)
- 用日志钩子来实现键盘钩子功能之delphi/bcb版本
- 几种不同语言版本的HMM实现
- 为什么说JAVA中要慎重使用继承 C# 语言历史版本特性(C# 1.0到C# 8.0汇总) SQL Server事务 事务日志 SQL Server 锁详解 软件架构之 23种设计模式 Oracle与Sqlserver:Order by NULL值介绍 asp.net MVC漏油配置总结
- JavaScript 的多语言版本实现
- 一步一步实现网站的多语言版本