Delphi怎样允许多国言语 (delphi语言)
本文目录导航:
Delphi怎样允许多国言语
Delphi的多言语是这么用的,然而减少多言语后编译衔接速度很慢,有时刻10来分钟。
可以把你的Delphi的窗体文件分给翻译来翻译,假设是Delphi7,须要先用来转换为文本格局。
1、Project-New Application 创立你的中文版软件。
2、Project-Language-Add 减少你的言语,比如美国英语(ENU)。
或许File-New-Others-Dll Wizard3、保留后生成多个文件夹。
4、Project-Build All5、程序目录下生成和工程文件同名的言语文件;,软件颁布须要带这些文件。
6、把软件外面一切字符串定义为资源字符串。
resourcestringC_AppTitle = xx治理系统;C_Error = 失误;C_Warning = 正告;7、在软件中用如下代码切换言语:const//定义你的多言语:ENGLISH = (SUBLANG_ENGLISH_US shl 10) or LANG_ENGLISH;CHINESE = (SUBLANG_CHINESE_SIMPLIFIED shl 10) or LANG_CHINESE;usesReInit; LoadNewResourceModule(ENGLISH) <> 0 thenbeginReInitializeForms();end;更多请参考Delphi协助,外面写得更分明。
其实觉得最好还是用INI文件把一切言语条目提取进去记载,并且将INI翻译成多份(多种言语),程序启动时从INI文件中加载言语。
CSDN上有引见用TLMPack的,你也可以尝试一下: 1。
在Delphi(或BCB)中装置TLMPack规范版,对于如何装置协助文件中有比拟具体的说明了,这里不在累述了。
(当然装置规范版的前提是你经常使用规范的AnsiVCL控件来开发的程序,假设你经常使用TntUnicode控件来开发程序,那么相对应,必定经常使用Unicode版的TLMPack)。
2。
关上你须要更新成多国言语的工程,在每一个Form(以及QReport,Module等)上搁置一个TtlmController控件,这个控件的作用是智能扭转其所在Form上一切控件的显示文字,普通状况下只要要将该控件搁置在Form上就可以了,不须要作任何设置。
3。
Form上的控件如今曾经可以自己依据言语设置的变换而智能更新了,那么像MessageBox()这样的函数中显示的文字怎样办呢,答案是经常使用TtlmController的Translate()函数,这个函数可以智能到以后经常使用的言语文件中取得文字资源而后作为前往值前往进去,假定已有一段函数是这样的: 代码: procedure 1Click(Sender:TObject); begin MessageBox(Handle, PChar(Say hello to the user!), Message, MB_ICONINFORMATION); end; 那么你须要将文字的局部经常使用Translate函数包装起来,包装后就像这样: 代码: procedure 1Click(Sender:TObject); begin MessageBox(Handle, PChar((SayHello, Say hello to the user!)), Message, MB_ICONINFORMATION); end; 前面的‘SayHello’是对文字的标识,经过这个标识程序能力从言语文件中找到正确的资源,前面的文字作用是当言语文件中不存在须要寻觅的资源(或许言语文件不存在时),该函数自动所前往的内容。
另外,Translate函数还允许同Format()函数一样的参数显示,如这样: 代码: procedure 1Click(Sender:TObject); begin MessageBox(Handle, PChar((ComponentCount, ComponentCount = %d, ComponentCount])), Message, MB_ICONINFORMATION); end; 4。
以上的MessageBox()函数是出如今Form中的,并且该Form中曾经有TtlmController控件了,所以才可以经常使用TtlmController的Translate()函数启动文字的转换,那么假设你的工程中有一个间接从TObject承袭而来的性能类,它也须要显示Message,或许须要记载Log文字等,这时刻该怎样办呢,最繁难的方法是让这特性能类去调用某个Form中的TtlmController的Translate()函数,然而这样的缺陷是程序或许须要为此做较大的改动,另外言语文件中的文字也将变得凌乱不堪。
那么这个时刻最好的处置计划就是经常使用TtlmObject类,该类同TtlmController类一样,也有Translate函数可以经常使用,然而区别是它不会侦测所在Form的一切控件,不会对它们启动智能转换。
以下这个类是个小型的性能类。
代码: interface uses ....; type TFunctionClass = class(TObject) public procedure ShowMessage(); end; impenmentation procedure (); begin ShowMessage(nil, Say hello to the user!, Message‘, MB_ICONINFORMATION); end; end. 经常使用TtlmObject类后,该类被变革为: 代码: interface uses ...., TLMObject; type TFunctionClass = class(TObject) private FtlmObject:TtlmObject; public constructor Create(); destructor Destroy();override; procedure ShowMessage(); end; impenmentation constructor (); begin inherited Create(); FtlmObject:=(self); end; destructor (); begin ; inherited Destroy(); end; procedure (); begin MessageBox(Handle, PChar((ComponentCount, ComponentCount = %d, ComponentCount])), Message, MB_ICONINFORMATION); end; end. 这样每当经常使用该性能类中须要文字显示的函数时,真正经常使用的文字就是言语文件中记载的内容了。
5。
TLMPack是从外部言语文件来加载言语文字的,由于齐全手工写一个言语文件是一件比拟单调的事,所以你可以经常使用导游控件因由程序,假设你计划自己手工来撰写一个言语文件,那么可以疏忽该小节。
所谓的导游控件是指:TtlmIniGenerator和TtlmXmlGenerator这两个控件,它们会在程序运转时,将一切原本须要TtlmController和TtlmObject读取的文字,反向输入到言语文件中,你所要做的就是在程序的主窗体上搁置一个TtlmIniGenerator(这里假定你要输入的是Ini格局的言语文件):
windows11只要一个言语
假设 Windows 11 容许证只允许一种言语,您须要思考以下几个计划:
多言语App终极处置计划
你能否由于拷贝复制中英文String而感到精疲力竭
能否由于定位翻译字符而觉得力所能及
能否由于遗记改翻译就颁布了版本而疑心人生
各位看官,且看我的处置计划:
Google Sheet + Mirrorrim + . 束缚双手,享用全智能的快感。
首先看下示范
想要亲手体验一下的好友可以移步
翻译文件在这里
一、多文本数据源,Excel方式
这里的数据源实质就是一个依照必定格局书写的Excel文件,只管说本地文件也可以然而这样不能束缚双手。
所以低配可以是一个HTTP可访问的Excel资源文件,最现实的形态是可以多人单干的平台服务,比如Google Sheet。
这样担任更新翻译的人做完变卦后,开发者基本不用接触到这个Excel文件。
二、间接生成APP可用的翻译文件, Mirrorrim
Mirrorrim是一个Node app,经过繁难的性能后就可以做到一键从数据源拉去Excel并生成App可用的翻译文件,目前允许iOS和Android,言语方面允许English和简体中文。
三、将plain Text转换成静态变量,
可以在编译开局前的阶段智能得将一切的翻译string转换成静态变量,消弭手写Localizable Key出错的或许性。
假设你也和笔者一样经常使用的是Github/GitLab, 那么可以配合经常使用Github Actions,把文本更新恳求彻底交给翻译担任人,触发action后智能读取Excel,生成翻译文件,编译验证能否智能经过验证并发送Pull Request。
这样一套全智能的处置计划你觉得咋样?或许留下你们的计划来探讨一下。
觉得害行的老铁,来点个小星星,谢谢
文章评论