国际化问题 ( 积分: 50 )

  • 主题发起人 Bluewoods
  • 开始时间
B

Bluewoods

Unregistered / Unconfirmed
GUEST, unregistred user!
各位先来者,大家好!我是新来的,希望以后在这儿能够相互学习相互帮助!
我写了一个类似于记事本的文本编辑程序,需要在中日韩英系统下运行,并且在各系统下菜单等都显示为各自系统的文字,我在Translation Manager底下作了翻译,英文的当然没问题,可日文的就不行了,运行出来还是乱码。请教哪位先知者,给些提示咯,先谢过了!
才来的,没什么积分,给得不多,别介意啊,呵呵!
 
各位先来者,大家好!我是新来的,希望以后在这儿能够相互学习相互帮助!
我写了一个类似于记事本的文本编辑程序,需要在中日韩英系统下运行,并且在各系统下菜单等都显示为各自系统的文字,我在Translation Manager底下作了翻译,英文的当然没问题,可日文的就不行了,运行出来还是乱码。请教哪位先知者,给些提示咯,先谢过了!
才来的,没什么积分,给得不多,别介意啊,呵呵!
 
我又有下了一个多国语言包,可那包里面的例子在日文下根本不显示日文而是英文,这是不是也说明Delphi根本没解决国际化的问题,白白地提供了所谓的Translation Manger?
Delphi是不支持Unicode的?
 
不知道,我们自己做的时候是把字符抽出来的,类似VC那样解决,根据需要加载对应的语言包,可以采用ini的方式
 
不好意思,Chenybin,能不能说得再详细些些吗?我才用Delphi的。
 
小型系统用ini文件就可以实现了,建议到网上嗖嗖“多语言 dlephi”应该可以找到答案,这也是一个学习过程
 
Delphi本身的哪个多语言的功能有问题,切换的时候会闪一下
http://www.delphibbs.com/delphibbs/dispq.asp?LID=1895338
http://www.delphibbs.com/delphibbs/dispq.asp?LID=568481
http://www.delphibbs.com/delphibbs/dispq.asp?LID=748336
http://www.delphibbs.com/delphibbs/dispq.asp?LID=1295120
另外Delphi目录Demos/RichEdit ,这个例子是Delphi本身多语言的例子,
 
谢谢两位了啊,回去试试,如果再有什么问题,少不得又来麻烦各位。
我网上不是没搜过的,都说可以,拿来用只能解决繁体中文、简体中文和英文,那我都已经可以了呀,就是要解决日文和韩文啊,结果一用到日文,韩文系统就乱码!:(
 
Delphi目录Demos/RichEdit,我运行了选择法语,德语,那菜单没变的啊?!我并不是要在RichEdit里面显示日文,韩文啊,我是要菜单包括状态条、提示对话框之类的字在日文系统下变为日文,在韩文系统下变为韩文啊!再试试吧!努力,努力!
我现在对菜单是用图片的,可状态条、对话框就不行了。[:(]
 
Delphi目录Demos/RichEdit即使在Project/Language/Set Active...下设置法文、德文为Active语言也不行啊,菜单还是英文的啊!向来那程序还是用Delphi的Translation Menager做的。
 
兄台太懒了:)
打开那个richedit.bpg文件,然后全部都编译(Project->Build All Project),然后在Deu、Enu、Fra这三个目录下面会有对应的richedit.xxx的文件,就是richedit.deu,richedit.enu,richedit.fra等3个,把3个文件都拷贝到和richedit.exe相同的目录,然后你再运行exe看看效果,ok了记得给份,用ini可能你需要一个学习的过程
 
不对啊,我Build All Project了以后,在各个文件夹底下都只有reabout.dfm, reabout.dfn, remain.dfm, remain.dfn, richedit.dpr, richedit.res, richedit_DRC.rc和richedit_drc.res,没有你说的文件啊,我把Deu和Fra下的文件拷到exe文件所在的目录下,就不能运行了,而我把exe文件拷到那两个目录下运行根本就还是English的嘛!再提示提示咯!
ini文件我在VC下用熟悉的,在Delphi下应该也就那几个函数吧?
 
我是让你打开bpg不是dpr, 你自己也可以单独编译每个一个项目,然后把我说的文件找出来拷贝过去。解决了请记得结贴,谢谢
TIniFile,这个类
--------------------------下面内容转载
Delphi中的INI文件编程
2000-07-04· -·-
INI文件在系统配置及应用程序参数保存与设置方面,具有很重要的作用,
所以可视化的编程一族,如VB、VC、VFP、Delphi等都提供了读写INI文件
的方法,其中Delphi中操作INI文件,最为简洁,这是因为Delphi3提供了
一个TInifile类,使我们可以非常灵活的处理INI文件。
一、有必要了解INI文件的结构:
;注释
[小节名]
关键字=值
...
INI文件允许有多个小节,每个小节又允许有多个关键字,“=”后面是
该关键字的值。
值的类型有三种:字符串、整型数值和布尔值。其中字符串存贮在INI文
件中时没有引号,布尔真值用1表示,布尔假值用0表示。
注释以分号“;”开头。
二、定义
1、在Interface的Uses节增加IniFiles;
2、在Var变量定义部分增加一行:

myinifile:Tinifile;
然后,就可以对变量myinifile进行创建、打开、读取、写入等操作了。
三、打开INI文件
myinifile:=Tinifile.create('program.ini');
上面这一行语句将会为变量myinifile与具体的文件program.ini建立联
系,然后,就可以通过变量myinifile,来读写program.ini文件中的关
键字的值了。
值得注意的是,如果括号中的文件名没有指明路径的话,那么这个
Program.ini文件会存储在Windows目录中,把Program.ini文件存储在应
用程序当前目录中的方法是:为其指定完整的路径及文件名。下面的两
条语句可以完成这个功能:

Filename:=ExtractFilePath(Paramstr
(0))+'program.ini';
myinifile:=Tinifile.Create(filename);
四、读取关键字的值
针对INI文件支持的字符串、整型数值、布尔值三种数据类型,
TINIfiles类提供了三种不同的对象方法来读取INI文件中关键字的值。
假设已定义变量vs、vi、vb分别为string、integer、boolean类型。

vs:=myinifile.Readstring
('小节名','关键字',缺省值);
vi:=myinifile.Readinteger
('小节名','关键字',缺省值);
vb:=myinifile.Readbool
('小节名','关键字',缺省值);
其中缺省值为该INI文件不存在该关键字时返回的缺省值。
五、写入INI文件
同样的,TInifile类也提供了三种不同的对象方法,向INI文件写
入字符串、整型数及布尔类型的关键字。
myinifile.writestring('小节名','关键字',变量或字符串值);
myinifile.writeinteger('小节名','关键字',变量或整型数值);
myinifile.writebool('小节名','关键字',变量或True或False);
当这个INI文件不存在时,上面的语句还会自动创建该INI文件。
六、删除关键字
除了可用写入方法增加一个关键字,Tinifile类还提供了一个删
除关键字的对象方法:
myinifile.DeleteKey('小节名','关键字');
七、小节操作
增加一个小节可用写入的方法来完成,删除一个小节可用下面的
对象方法:
myinifile.EraseSection('小节名');
另外Tinifile类还提供了三种对象方法来对小节进行操作:
myinifile.readsection('小节名',TStrings变量);可将指定小节中的
所有关键字名读取至一个字符串列表变量中;
myinifile.readsections(TStrings变量);可将INI文件中所有小节名读
取至一个字符串列表变量中去。
myinifile.readsectionvalues('小节名',TStrings变量);可将INI文件
中指定小节的所有行(包括关键字、=、值)读取至一个字符串列表变
量中去。
八、释放
在适当的位置用下面的语句释放myinifile:
myinifile.distory;
九、一个实例
下面用一个简单的例子(如图),演示了建立、读取、存贮INI文件的方
法。myini.ini文件中包含有“程序参数”小节,和用户名称(字符串
)、是否正式用户(布尔值)和已运行时间(整型值)三个关键字。
程序在窗体建立读取这些数据,并在窗体释放时写myini.ini文件。
附源程序清单

unitUnit1;
interface
uses
Windows,Messages,SysUtils,Classes,Graphics,
Controls,Forms,Dialogs,inifiles,StdCtrls,ExtCtrls;
type
TForm1=class(TForm)
Edit1:TEdit;
CheckBox1:TCheckBox;
Edit2:TEdit;
Label1:TLabel;
Label2:TLabel;
Timer1:TTimer;
Label3:TLabel;
procedureFormCreate(Sender:TObject);
procedureFormDestroy(Sender:TObject);
procedureTimer1Timer(Sender:TObject);
private
{Privatedeclarations}
public
{Publicdeclarations}
end;
var
Form1:TForm1;
implementation
var
myinifile:TInifile;
{$R*.DFM}
procedureTForm1.FormCreate(Sender:TObject);
var
filename:string;
begin
filename:=ExtractFilePath(paramstr(0))+'myini.ini';
myinifile:=TInifile.Create(filename);
edit1.Text:=myinifile.readstring
('程序参数','用户名称','缺省的用户名称');
edit2.text:=inttostr(myinifile.readinteger
('程序参数','已运行时间',0));
checkbox1.Checked:=myinifile.readbool
('程序参数','是否正式用户',False);
end;

procedureTForm1.FormDestroy(Sender:TObject);
begin
myinifile.writestring('程序参数','用户名称',edit1.Text);
myinifile.writeinteger('程序参数','已运行时间',
strtoint(edit2.text));
myinifile.writebool('程序参数','是否正式用户',
checkbox1.Checked);
myinifile.Destroy;
end;

procedureTForm1.Timer1Timer(Sender:TObject);
begin
edit2.Text:=inttostr(strtoint(edit2.text)+1);
end;

end.

程序在Pwin95、Delphi3下调试通过。
 
老大,你有些些耐心,好不好啊。我才用Delphi几天的,见谅见谅咯!
我打开的是bpg文件啊,也build了全部工程,我在那三个文件夹底下就是找不到你说的文件,唯一改变的文件是richedit_drc.res,可我把它拷贝到exe目录下执行,还是英文的啊。
 
留下Mail,给你发
 
Bluewoods2001@etang.com啊,谢谢!
 
DELPHI是支持UniCode的,我有做了一个多语言的控件只要把控件放窗体上再每种语言做一个文本就能实现不闪烁切换了,目前支持中、日、韩、英、法还有繁体。实际上也是用INI做的,要的话可以给你安装包,源码就不能给了。
 
我不是要切换啊,我是要我的程序在日文系统下显示日文,韩文系统下显示韩文,我想知道的是该怎么做,并不一定要安装包,源码当然也好咯,谢谢了!
 
原理应该差不多吧,那个东西发给你了,然后你可以在系统启动前判断当前操作系统的默认语言是什么,然后选择相应的语言包,ini的原理也是这样阿
 
chenybin,收到了啊,谢谢,可为什么你给我的和我自己机子上的不一样,我的build了以后就是没.fra和.deu文件,应该和Delphi版本没关系吧?!
 
顶部