如何解决系统的中英文切换

jiema_zhb82 2012-05-06 08:09:26
比如一个点餐系统,如何实现从中文到英文的切换, 比如中国人在用这个系统,点"中文"就可以切换到中文界面,老外用这个系统点"英文"就可以切换到英文界面. 请高人指教.
...全文
639 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
Frank.WU 2012-06-02
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 的回复:]

unicode这个我试过,我的那个.ini就是unicode格式的,在中文系统就很正常的
中文和英文都能正常"切换"的
但是在"纯英文系统下",中文就成了"乱码"了,所以修改"区域和语言"
就可以显示"中文"了,我现在问题也在这个地方"卡住"了
[/Quote]

1.用XML存取;
2.换Delphi2009以上编译程序。
zbdzjx 2012-06-02
  • 打赏
  • 举报
回复
我是用的Delphi2010,在数据库中存要显示的字。
在FormShow事件中,一个一个的改。
如果是简体,字体就改成宋体,如果是繁体,就用新细明体。
因为Delphi2010是unicode的,所以显示很正常。
该用户很帅 2012-06-02
  • 打赏
  • 举报
回复
把分给我 我告诉你怎么做 呵呵
[Quote=引用 4 楼 的回复:]

如果整个软件所有的界面和按钮都需要两种语言,用ini的方式会不会很麻烦..有没有简单一点的方法..

引用 1 楼 的回复:

可以把中文或者英文内容保存到数据库或INI文件中,根据选择进行加载。
[/Quote]
lyhoo163 2012-06-02
  • 打赏
  • 举报
回复
关键是设置VCL录入控件的属性。下面仅供参考。都是我程序中的部分代码。应该能理解。
1、在窗体
if CheckBox1.Checked
then begin
for i:=0 to ComponentCount-1 do
SetImeFrm.SetVclIme(Components[i],ImeNameS,1);
end
else begin
for i:=0 to ComponentCount-1 do
SetImeFrm.SetVclIme(Components[i],ImeNameS,0);
end;
2、设置SetImeFrm.SetVclIme(Components[i],ImeNameS,0)方法

procedure TSetImeFrm.SetVclIme(VclClass:TComponent;StrImeName:string;K:Integer);
// k=0 取消中文
// k=1 使用中文
begin
if K=0 then
begin
if VclClass is TEdit then
begin
TEdit(VclClass).ImeMode:=imClose;
TEdit(VclClass).ImeName:='';
end;
if VclClass is TMemo then
begin
TMemo(VclClass).ImeMode:=imClose;
TMemo(VclClass).ImeName:='';
end;
if VclClass is TComboBox then
begin
TComboBox(VclClass).ImeMode:=imClose;
TComboBox(VclClass).ImeName:='';
end;
if VclClass is TRichEdit then
begin
TRichEdit(VclClass).ImeMode:=imClose;
TRichEdit(VclClass).ImeName:='';
end;
if VclClass is TDBEdit then
begin
TDBEdit(VclClass).ImeMode:=imClose;
TDBEdit(VclClass).ImeName:='';
end;
if VclClass is TDBMemo then
begin
TDbMemo(VclClass).ImeMode:=imClose;
TDbMemo(VclClass).ImeName:='';
end;
if VclClass is TDBcombobox then
begin
TDbcombobox(VclClass).ImeMode:=imClose;
TDbcombobox(VclClass).ImeName:='';
end;
if VclClass is TDBRichedit then
begin
TDBRichedit(VclClass).ImeMode:=imClose;
TDBRichedit(VclClass).ImeName:='';
end;
if VclClass is TDBGrid then
begin
TDBGrid(VclClass).ImeMode:=imClose;
TDBGrid(VclClass).ImeName:='';
end;
end;
if k=1 then
begin
if VclClass is TEdit then
begin
TEdit(VclClass).ImeMode:=imOpen;
TEdit(VclClass).ImeName:=StrImeName;
end;
if VclClass is TMemo then
begin
TMemo(VclClass).ImeMode:=imOpen;
TMemo(VclClass).ImeName:=StrImeName;
end;
if VclClass is TComboBox then
begin
TComboBox(VclClass).ImeMode:=imOpen;
TComboBox(VclClass).ImeName:=StrImeName;
end;
if VclClass is TRichEdit then
begin
TRichEdit(VclClass).ImeMode:=imOpen;
TRichEdit(VclClass).ImeName:=StrImeName;
end;
if VclClass is TDBEdit then
begin
TDBEdit(VclClass).ImeMode:=imOpen;
TDBEdit(VclClass).ImeName:=StrImeName;
end;
if VclClass is TDbMemo then
begin
TDbMemo(VclClass).ImeMode:=imOpen;
TDbMemo(VclClass).ImeName:=StrImeName;
end;
if VclClass is TDbcombobox then
begin
TDbcombobox(VclClass).ImeMode:=imOpen;
TDbcombobox(VclClass).ImeName:=StrImeName;
end;
if VclClass is TDBRichedit then
begin
TDBRichedit(VclClass).ImeMode:=imOpen;
TDBRichedit(VclClass).ImeName:=StrImeName;
end;
if VclClass is TDBGrid then
begin
TDBGrid(VclClass).ImeMode:=imOpen;
TDBGrid(VclClass).ImeName:=StrImeName;
end;
end;
end;
somemak 2012-06-01
  • 打赏
  • 举报
回复
找找“Localizer”或“TsiLang”组件吧,个人觉得TsiLang好用
BambooCaep 2012-05-07
  • 打赏
  • 举报
回复
ini只是语言包的外部存贮方式,读取完毕后在内存里的组织方式自己定,我用的是hash字典。
设计一个语言组件类,设置一个全局的语言id,当语言id改变时通知所有语言组件从hash字典里读取显示内容。
jiema_zhb82 2012-05-07
  • 打赏
  • 举报
回复
可不可以给个简单的具体的例子,用delphi ini的方式如何实现中英文切换.

[Quote=引用 13 楼 的回复:]

1.操作系统安装了中文字体。
2.delphi支持unicode。
3.语言包是unicode的。
满足这三个条件就ok。

纯英文系统只要安装了中文字体,无需设置非unicode默认语言,因为你用的本身已经是unicode了。
[/Quote]
BambooCaep 2012-05-06
  • 打赏
  • 举报
回复
预先加载到内存啊
jiema_zhb82 2012-05-06
  • 打赏
  • 举报
回复
如果整个软件所有的界面和按钮都需要两种语言,用ini的方式会不会很麻烦..有没有简单一点的方法..

[Quote=引用 1 楼 的回复:]

可以把中文或者英文内容保存到数据库或INI文件中,根据选择进行加载。
[/Quote]
BambooCaep 2012-05-06
  • 打赏
  • 举报
回复
我的程序是英,简中,繁中三种语言动态切换,只要系统有中文字体就行。
BambooCaep 2012-05-06
  • 打赏
  • 举报
回复
1.操作系统安装了中文字体。
2.delphi支持unicode。
3.语言包是unicode的。
满足这三个条件就ok。

纯英文系统只要安装了中文字体,无需设置非unicode默认语言,因为你用的本身已经是unicode了。
山东蓝鸟贵薪 2012-05-06
  • 打赏
  • 举报
回复
unicode这个我试过,我的那个.ini就是unicode格式的,在中文系统就很正常的
中文和英文都能正常"切换"的
但是在"纯英文系统下",中文就成了"乱码"了,所以修改"区域和语言"
就可以显示"中文"了,我现在问题也在这个地方"卡住"了
BambooCaep 2012-05-06
  • 打赏
  • 举报
回复
有什么好努力查询的,unicode就ok了。


[Quote=引用 10 楼 的回复:]

引用 8 楼 的回复:
如果是三种语言切换呢?不停地设置并重启?
引用 6 楼 的回复:
引用 3 楼 的回复:
可以的,用unicode就无需设置区域和语言。
引用 2 楼 的回复:
引用 1 楼 的回复:
可以把中文或者英文内容保存到数据库或INI文件中,根据选择进行加载。
这种方面是不行呀,
jiema_zhb82
.ini方式我是研究过,但是也必须将“系统中区域和语……
[/Quote]
山东蓝鸟贵薪 2012-05-06
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
如果是三种语言切换呢?不停地设置并重启?
引用 6 楼 的回复:
引用 3 楼 的回复:
可以的,用unicode就无需设置区域和语言。
引用 2 楼 的回复:
引用 1 楼 的回复:
可以把中文或者英文内容保存到数据库或INI文件中,根据选择进行加载。
这种方面是不行呀,
jiema_zhb82
.ini方式我是研究过,但是也必须将“系统中区域和语言中的设置”更改一……
[/Quote]
如果是三种语言切换呢?不停地设置并重启?
BambooCaep
(乱拳) 你也说到"重点"的
呵呵,我现在也在考虑这个问题,所以在努力的查询
一个好的方法
大悟还俗 2012-05-06
  • 打赏
  • 举报
回复
http://download.csdn.net/detail/key_ok/3769591
BambooCaep 2012-05-06
  • 打赏
  • 举报
回复
可以的,用unicode就无需设置区域和语言。


[Quote=引用 2 楼 的回复:]
引用 1 楼 的回复:
可以把中文或者英文内容保存到数据库或INI文件中,根据选择进行加载。

这种方面是不行呀,
jiema_zhb82
.ini方式我是研究过,但是也必须将“系统中区域和语言中的设置”更改一下即可使用
我们定义的.ini语言包方式
[/Quote]
山东蓝鸟贵薪 2012-05-06
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
可以把中文或者英文内容保存到数据库或INI文件中,根据选择进行加载。
[/Quote]
这种方面是不行呀,
jiema_zhb82
.ini方式我是研究过,但是也必须将“系统中区域和语言中的设置”更改一下即可使用
我们定义的.ini语言包方式
我看见佛 2012-05-06
  • 打赏
  • 举报
回复
可以把中文或者英文内容保存到数据库或INI文件中,根据选择进行加载。
BambooCaep 2012-05-06
  • 打赏
  • 举报
回复
如果是三种语言切换呢?不停地设置并重启?

[Quote=引用 6 楼 的回复:]

引用 3 楼 的回复:
可以的,用unicode就无需设置区域和语言。
引用 2 楼 的回复:
引用 1 楼 的回复:
可以把中文或者英文内容保存到数据库或INI文件中,根据选择进行加载。
这种方面是不行呀,
jiema_zhb82
.ini方式我是研究过,但是也必须将“系统中区域和语言中的设置”更改一下即可使用
我们定义的.ini语言包方式

我也编写过这样的程序 .in……
[/Quote]
22222bbb 2012-05-06
  • 打赏
  • 举报
回复
把用到的多语言的地方建个表存起来,程序所有的显示部分从数据库里取。
加载更多回复(1)

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧