CnPack多语组件帮助文档Word格式.docx
- 文档编号:936372
- 上传时间:2023-04-29
- 格式:DOCX
- 页数:20
- 大小:52.45KB
CnPack多语组件帮助文档Word格式.docx
《CnPack多语组件帮助文档Word格式.docx》由会员分享,可在线阅读,更多相关《CnPack多语组件帮助文档Word格式.docx(20页珍藏版)》请在冰点文库上搜索。
=0;
即可看到翻译后的界面。
其中0为第一个语言条目的索引号。
二、TCnLangMgr组件
1、组件功能概述
TCnLangMgr是注册到组件板的多语管理器组件,主要用来提供翻译窗体界面等的功能。
它能连接到一多语存储组件。
设置多语管理器的LanguageIndex可触发当前语言的改变,多语管理器可将当前语言改变的事件传入多语存储组件,待多语存储组件装载当前语言条目成功后,从多语存储组件中读取当前语言的条目并进行窗体界面等的翻译。
同时多语管理器还提供一些属性、方法和事件用来进行其他的翻译控制。
2、所在文件
CnLangMgr.pas,多语管理器基础类单元。
3、属性说明
property
LanguageStorage:
TCnCustomLangStorage;
多语存储属性,类型为TCnCustomLangStorage,指向一具体的多语存储组件,可读写。
CurrentLanguageIndex:
Integer;
当前语言号索引,影响到整个程序的语言设置。
语言号含义由存储组件的条目内容决定,可读写。
propertyAutoTranslate:
Boolean;
布尔属性,控制是否在当前语言号改变后自动翻译已经存在的窗体和其他内容。
可读写。
propertyTranslationMode:
TCnTranslationMode;
TCnTranslationMode=(tmByComponents,tmByStrings);
翻译模式,控制根据窗体和控件等遍历还是根据翻译字符串内容遍历,前者是递规搜索界面字符串并去多语存储组件中寻找翻译条目,后者是遍历多语组件中的字符串条目并定位到界面进行翻译。
默认为前者。
propertyAutoTransOptions:
TCnAutoTransOption;
TCnAutoTransOption=(atApplication,atForms,atDataModules);
TCnAutoTransOptions=setofTCnAutoTransOption;
自动翻译时的选项,当自动翻译属性AutoTranslate为True时,控制是否翻译现存的窗体、数据模块和Application实例,默认三者都参与翻译。
propertyTranslateListItem:
布尔属性,控制翻译过程中是否翻译ListView中的ListItem,默认为True。
propertyTranslateTreeNode:
布尔属性,控制翻译过程中是否翻译TreeView中的TreeNode,默认为True。
propertyUseDefaultFont:
布尔属性,控制是否翻译完窗体后使用DefaultFont属性来设置窗体字体。
默认为True。
propertyTranslateOtherFont:
布尔属性,控制翻译过程中是否将除TControl.Font外的其他的Font属性翻译成字符串。
默认为False。
propertyIgnoreAction:
布尔属性,控制翻译过程中是否翻译Action属性不为空的控件的Caption和Hint属性。
因为连接了Action的组件自身的Caption和Hint等属性,通常都由对应的Action控制,不需要单独设置,所以此属性默认为True。
4、方法说明
functionTranslate(Src:
string):
string;
功能:
根据当前语言和字符串标识从多语存储组件中获得翻译的字符串。
返回值:
翻译的字符串值,无多语组件或当前语言条目中无此标识则返回空。
参数:
6.Src:
待翻译的标识字符串,如“TForm1.Caption”
functionTranslateString(Src:
7.Src:
functionTranslateStrFmt(Src:
Args:
arrayofconst):
根据当前语言和字符串标识从多语存储组件中获得翻译字符串,然后将此字符串作为格式字符串,将后续参数填入后返回。
翻译并格式化后的字符串值,无多语组件或当前语言条目中无此标识则返回空。
8.Src:
待翻译的标识字符串,如“SCnErrorFmt”
9.Args:
arrayofconst;
作为Format参数的常量数组。
可参考Format函数。
procedure
TranslateForm(AForm:
TCustomForm);
递规翻译一个Form及其子对象和属性。
10.AForm:
TCustomForm;
待翻译的窗体。
TranslateComponent(AComponent:
TComponent;
const
BaseName:
string
=
'
);
翻译一个组件及其子对象和子属性。
11.AComponent:
TComponent;
待翻译的组件。
12.const
string;
翻译前导字符串,默认为空。
procedureAddChangeNotifier(Notify:
TNotifyEvent);
TNotifyEvent
procedure(Sender:
TObject)
of
object;
增加一个语言改变后的事件通知。
语言改变后,该事件会被调用。
13.Notify:
TNotifyEvent;
待添加的事件处理函数,也就是方法名。
procedureRemoveChangeNotifier(Notify:
删除已经增加过的语言改变时后的事件通知。
删除该事件后,语言改变后此事件不再被调用。
14.Notify:
待删除的事件处理函数,也就是方法名。
5、事件说明
OnStorageChanged:
TNotifyEvent;
存储组件属性LanguageStorage改变时触发。
15.Sender:
TObject;
组件管理器实例。
propertyOnLanguageChanged:
当前语言索引号改变后触发。
16.Sender:
OnTranslateObject:
TCnTranslateObjectEvent;
TCnTranslateObjectEvent=procedure(AObject:
varTranslate:
Boolean)ofobject;
开始翻译一对象时触发,用户可控制是否翻译此对象。
注意此事件仅当翻译模式是以控件为根据(tmByComponents)时触发。
17.AObject:
待翻译的对象。
18.varTranslate:
给此变量赋值可控制是否翻译此对象。
propertyOnTranslateObjectProperty:
TCnTranslateObjectPropertyEvent;
TCnTranslateObjectPropertyEvent=procedure(AObject:
constPropName:
Boolean)of
开始翻译一对象的某个属性时触发,用户可控制是否翻译此对象的此属性。
19.AObject:
20.constPropName:
待翻译的对象的属性名。
21.varTranslate:
6、公用函数说明
functionCnLanguageManager:
TCnCustomLangManager;
全局函数,用于返回多语言管理器的实例。
第一个创建的多语管理器实例,如无实例,则返回nil。
procedureCreateLanguageManager(AOwner:
TComponent=nil);
创建多语言管理器,用于非可视化或手工创建多语言管理器的场合。
22.AOwner:
待创建的多语管理器实例的Owner。
procedureTranslateStr(varSrcStr:
constIDStr:
string);
翻译某个字符串,如无翻译管理器或不存在翻译后的条目,则SrcStr保持不变。
23.varSrcStr:
待翻译的字符串,如果翻译成功,则被赋值为翻译后的值。
24.constIDStr:
字符串标识。
procedureTranslateStrArray(varStrArray:
arrayofstring;
循环翻译某个字符串数组的内容,标识字符串为IDStr加数组下标的形式。
25.varStrArray:
字符串数组。
26.constIDStr:
7、属性编辑器说明
此属性的属性编辑器能下拉当前存储组件的语言条目ID和名称等供直观选择,如无多语存储组件,则无供选择条目。
三、TCnLangTranslator组件
TCnLangTranslator是注册到组件板上的多语翻译器组件,本身无具体功能,仅仅用于设计期使用其组件编辑器来进行窗体标识字符串的收集生成,并提供手工翻译界面。
运行期的多语功能并不依赖于此组件。
CnLangTranslator.pas多语翻译器的实现单元。
CnTransEditor.pas其设计期组件编辑器的实现单元。
无。
6、组件编辑器(翻译管理器)说明
双击设计期窗体上的多语翻译器组件,弹出翻译管理器窗口,如下图:
窗体翻译管理器上部是工具栏。
左边的树状结构显示了当前窗体上的多语存储组件及其语言条目(黑体的多语组件表示它是多语管理器所连接的多语存储组件,黑体的语言条目表示是当前语言)。
选中某语言后,该语言内的所有字符串会显示在右边翻译栏目内供编辑。
用户也可以根据当前窗体等生成语言条目。
右边的翻译后文本编辑框,选中后单击可进入编辑状态。
但对多行字符的支持比较不好。
这种情况下用户可能需要保存后手工编辑多语组件的存储内容。
汇总:
自动搜索当前工程的所有窗体,生成所有窗体的需要翻译的字符串置入当前语言中。
当前语言现有的内容将被清空。
生成:
自动搜索当前窗体,生成当前窗体的需要翻译的字符串置入当前语言中。
复制:
生成的字符串只包括待翻译的条目和原文的字符串值。
点击此按钮可将“原文”全部复制到“翻译后文本”中。
注意“原文”是不保存到多语存储组件中的。
更新:
当当前窗体的语言条目生成完毕保存了,但窗体的组件又发生了变化后,可通过此按钮更新当前语言的条目。
已经翻译的条目不会丢失。
保存:
将当前翻译栏目中的字符串保存到多语存储组件中。
切换左边语言前请注意是否保存当前语言条目。
加行:
在翻译栏目中增加一空行,用户可手工输入翻译条目。
删行:
在翻译栏目中删除选中的一行。
删空:
自动生成的翻译条目可能包括很多字符串值为空的条目,点击此按钮可删除当前语言中的这些空值条目。
清空:
删除当前语言的所有翻译字符串条目。
关闭:
关闭此窗口,不提示保存。
四、TCnCustomLangStorage基类
1、基类功能概述
TCnCustomLangStorage是所有多语存储组件的基础类,其自身并未注册到组件板上。
它提供了一些基础的属性方法等供多语管理器操纵,包括存储、加载多语条目,改变当前语言等,同时还提供设计期的语言条目编辑功能。
所有多语存储组件的具体实现类都应该继承于此基类。
CnLangStorage.pas多语存储基类的实现单元。
CnLangEditors.pas其设计期部分组件编辑器的实现单元。
propertyCurrentLanguage:
TCnLanguageItem;
当前语言条目对象,只读。
受当前语言索引号的控制。
propertyCurrentLanguageIndex:
Integer;
当前语言索引号,供多语管理器设置,可读写。
不推荐在脱离多语管理器的控制下而直接改变它。
propertyDefaultFont:
TFont;
当前语言的默认字体,只读。
受当前语言条目中字体部分的控制,如当前语言无默认字体信息,则受操作系统语言的控制。
propertyDefaultLanguageID:
默认语言的ID,只读。
受操作系统语言的控制。
propertyFontInited:
说明当前语言装载后,字体是否已经初始化完毕,只读。
propertyLanguageCount:
该多语存储组件中的语言条目数,只读。
propertyLanguages:
TCnLanguageCollection;
该多语存储组件中的所有语言列表,为一TCollection子类。
procedureAddLanguage(ALanguageID:
LongWord);
增加一空语言条目,该条目的语言ID为传入的ALanguageID参数。
27.ALanguageID:
LongWord;
待添加的语言条目的语言ID。
functionGetString(Name:
varValue:
virtual;
abstract;
抽象方法,根据一字符串标识获得翻译后的字串,子类必须重载以实现翻译。
这个方法是整个翻译功能的基础。
翻译是否成功,成功为True。
28.Name:
String;
供查找的翻译字符串标识,比如“TForm1.Caption”。
29.varValue:
翻译后通过此参数返回翻译后的值。
procedureGetNamesList(List:
TStrings);
抽象方法,获得当前语言的所有翻译条目名称列表。
子类必须重载实现。
30.List:
TStrings;
将当前语言的所有翻译字符串标识加入此Strings中,Strings中原有的内容会被清空。
procedureClearCurrentLanguage;
抽象方法,删除当前语言的所有翻译条目列表。
functionLoadCurrentLanguage:
抽象方法,可以是从存储介质中载入当前语言条目,为翻译字串做准备。
子类可视需要重载实现。
Load是否成功,成功返回True。
procedureSaveCurrentLanguage;
抽象方法,可以是保存当前语言条目到存储介质中。
procedureSetString(Name,Value:
抽象方法,在当前语言中设置一翻译字串条目。
如此条目存在则覆盖,不存在则新增。
31.Name:
待设置的翻译字符串标识,比如“TForm1.Caption”。
32.Value:
翻译后的字符串值,比如“窗体标题1”。
functionCreateIterator:
ICnLangStringIterator;
抽象方法,获得一条目的遍历器接口实例,如果子类不支持按存储条目遍历,则必须返回nil。
遍历器接口实例。
TLanguageChangeEvent;
TLanguageChangeEvent=procedure(Sender:
ALanguageIndex:
Integer)
ofobject;
事件:
当前语言号改变后触发。
33.Sender:
多语存储组件本身。
34.ALanguageIndex:
改变后的语言号。
propertyOnLanguageChanging:
TLanguageChangingEvent;
TLanguageChangingEvent=procedure(Sender:
varAllowChange:
当前语言号改变前触发,可控制是否允许改变。
35.Sender:
36.ALanguageIndex:
欲改变成的语言号。
37.varAllowChange:
是否允许改变,如事件处理函数中将其赋值为False,则此次改变被禁止,当前语言号保持不变。
6、属性/组件编辑器说明
双击多语存储组件,可弹出Languages属性的Collection编辑器供编辑语言条目。
五、TCnCustomLangFileStorage基类
TCnCustomLangFileStorage是所有基于文件存储方式的多语存储组件的基础类,其自身并未注册到组件板上。
它提供了一些基于文件/目录等的属性方法等供多语管理器操纵,实现了两种多语文件存储模式(文件方式、目录方式)。
其实现规则如下:
∙每一语言条目对应一存储文件,里头可存储多个待翻译条目。
所有存储文件具有同一扩展名。
∙存储模式为文件模式时,所有语言条目的语言文件都存放于同一目录下,扩展名相同,文件名默认使用该语言的三字母缩写。
∙存储模式为文件模式时,每一语言条目的语言文件可存放于同一目录下的“语言ID”子目录下,比如英语的存可于1033子目录下。
不同语言的语言存储文件的文件名相同,但所在目录不同。
文件名默认使用可执行文件名。
所有基于文件的、符合上述文件存储规则的多语存储组件的具体实现类都应该继承于此基类。
CnLangStorage.pas多语翻译器的实现单元。
propertyStorageMode:
TCnStorageMode;
TCnStorageMode=(smByFile,smByDirectory);
该多语存储组件的文件存储类型,按同一目录下多文件存储还是不同目录下的同一文件名存储。
propertyLanguagePath:
所有语言文件存储的统一目录名。
注意这是全路径名,如“C:
\Lang”,如果要使用相对路径,请使用“.\Lang”的形式。
propertyFileName:
多语文件按目录存储时具有的统一文件名。
propertyAutoDetect:
LanguagePath改变时是否自动搜索检测此目录下的语言文件并生成语言条目。
functionGetCurrentLanguageFileName:
获得当前语言的语言文件名,包括扩展名。
返
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CnPack 组件 帮助 文档