各位大侠在多语言上是怎么实现的啊?偶今天查了半天资料,看主要有两种方法:
一是用delphi自带的ITE(Integrated Translation Environment),project->language...;
二是用几套ini文件。第二种方法如果只改控件标题还差强人意,要是改的多了,象hint,下拉列表中值之类的东东时,不会让偶编程实现吧?第一种方法用起来感觉还成,可问题是偶要是生成完了各个chs,eng,jpn,也都翻译完了,回头界面有改动的话怎么办啊?请各位大侠不吝指教,先行谢过!!!有更好的方法是最好的了,可另行开贴给分!!!
一是用delphi自带的ITE(Integrated Translation Environment),project->language...;
二是用几套ini文件。第二种方法如果只改控件标题还差强人意,要是改的多了,象hint,下拉列表中值之类的东东时,不会让偶编程实现吧?第一种方法用起来感觉还成,可问题是偶要是生成完了各个chs,eng,jpn,也都翻译完了,回头界面有改动的话怎么办啊?请各位大侠不吝指教,先行谢过!!!有更好的方法是最好的了,可另行开贴给分!!!
這里有個介紹是多語言的程序的實現
的问题,用delphi自己带的我搞过好象不怎么管用。
以前我们用一个language做全局变量,所有有汉字的地方都是用一个方法
从数据库理找对应的汉化,或english,客户可以通过设置全局language
1,delphi自带的ITE,问题多多,在Translation Manager的tab页上打汉字都是乱码,粘过去竟然ok?真是奇怪,而且动态切换时闪烁明显,偶用的方法是网上好多文章都提到的利用demos\richedit里的reinit模块中的两个函数。还有就是英文的那个资源文件生成后后缀是enu,而reinit中函数根据选择语言找的文件后缀是eng(这个可能跟我的系统有关)。
2,将所有需多国语言显示的数据放在ini或db中(其实这是ini也就是db),这种方法理论上一定能实现,但需要编程,比较麻烦。如果非选其一,我倾向于选择db。
3,借助于第三方控件,DWGZ()大侠和dudunono(Cookies) 大侠提到的TSiLang真是一个好东东,操作界面简单明了, 它的userguide上有一句TsiLang Expert is an Add-In expert that will help you to translate your project in one-two mouse-clicks说的很好。(one-two mouse-clicks!呵呵)这个东东完全能满足我的需求。现在的问题是这个东东不注册的话能用多久,有什么限制?(149¥说句公道话真的不贵,可让公司批得好多手续...)
DWGZ()大侠和dudunono(Cookies) 大侠使用过应该能给偶点帮助!
也希望各位使用过的高手指点一二...
但是手头没有这样的控件了 没有什么说得了
这里有一点资料了 你的信箱了
前几天還有的,是一個Demo,多語言的實現,有英文,日文,簡體中文...........
可惜....
使用方法
将TLangMgr,TLangFrm两个文件复制到你的程序目录下,并将TLangFrm添加到你的工程下,在窗口类的interface下的uses中加入LangFrm,然后将TForm1=class(TForm)(或类似语句)改为TForm1=class(TLangForm),然后就可以重新编译程序了。 外部语言文件请使用工程默认名字,文件扩展名为语言的名称缩写,如Project.eng,Project.chs等。文件为标准的ini文件,每个窗口的语言每个语言文件必须有一个名为[General]的标准Section,Language表示该语言的英文名称,Charset表示语言的字符集数字代码,中文134,日文128,其它语言可以查看MSDN得到它的代码,Font为使用字体(为了使Font应用到每一个控件,必须将所有控件的ParentFont属性设为True,否则字体不会应用到该控件上),FontSize表示字体大小。后面的若干Section以窗口类名为依据分组,窗口内的控件就用控件名表示,然后用‘.’加属性名称的方法来表示具体属性内容,(如Label1.Caption=Label),现在支持的属性为Caption和Hint。 另外,对于显示Message等功能,可以直接在窗口中使用函数Translate('symbol','default string')来实现,对要使用的文字定一个略称,并写一段默认文字,以备读取语言配置文件出错时使用。 对于部分控件标题,如TListView.Column和TGrid.Column,程序无法自动识别,(本来可以直接加到基类的,但是这样程序编译时不管用不用到,都会加载这些模块,所以还是放到外部来实现吧),自己实现的方法就是覆盖(override)TLangForm中的DoChangeLanguage()函数,并在其中使用Translate()函数来手工设置它们的这些属性。 注意,由于Delphi的VCL本身不是Unicode的,所以该组件也没有实现unicode,比如,你无法在日文操作系统下正确的输入中文文字到程序中,中文界面的配置文件加载后,也只会显示乱码而已,如果你需要程序有Unicode的支持,请使用其它第三方Unicode VCL,你可以参照TLangForm的方法来写一个自己的Form类出来。你可以到“UnicodeVersion”目录下找到一个我使用TntUnicode组件改制的多国语言窗口类,使用前请先安装TntUnicode VCL,另外,在使用它的时候需要注意一些地方,比如语言(ini)文件中存放的不再是语言文字的本地码,而是经过转换后的unicode码的码值,你可以使用“UnicodeConveter”目录下的工具来将文字转换为该码值。另外,目前我写的这个类比较简单,没有判断窗口内的组件是否是Tnt组件库中的组件,如果你使用了不属于这个组件库的组件,程序可能会出错,还有TTntMuneItem中的属性设置被我跳过了,它老是出错,你可以在自己的Form中用继承DoChangeLanguage()函数的方法实现菜单文字的更新,当然,需要手工写更新代码了。。
所有程序代码,在Delphi6,7下测试通过。
維護起來方便
ini太小
在听听吧!
下载 http://www.1bitsoft.com/downloads/mlxdemo1_1.zip
可以与作者[email protected]联系 QQ 12821922