详细描述
描述了一种用于定义标准可扩展本地化数据以及用于访问和操纵数据的对象模型的系统和方法。虽然该系统和方法非常适用于本地化进程,但是该系统和方法可在其它软件环境中使用,其中涉及共享同一底层数据的多个开发工具和组织。因此,应该理解,本发明不应被解读为限制于在本文所述的示例性实施方式中的应用,并且这些示例性实施方式不应被解读为是限制性的。
图1是一示例性本地化进程100的示意图。示例性本地化进程包括具有多个不同阶段的操作循环。这些阶段包括开发阶段102、本地化阶段104、翻译阶段106以及构建阶段108。本领域技术人员将会意识到,操作循环阶段可包括比在本示例实施方式中描述的更少或更多的阶段。例如,可将某些阶段合并以产生更少的阶段或者进一步分解以产生更多的阶段。在开发阶段102中,软件应用程序(软件应用程序)的开发工程师开发软件代码和用户界面(UI)。UI可包括文本、可视和可听闻组件。例如,开发工程师为软件应用程序编写和编译代码。代码可采用诸如C、C++、C#等多种可用编程语言中的任一种来编写,并且包括源代码文件、报头文件和资源文件。资源文件通常包含可视和其它UI元素,诸如位图。开发工程师还可在这些文件中诸如资源文件的某些文件中包含注释。注释包括关于代码或UI元素、以及对在本地化软件应用程序的开发过程中使用的诸如各种软件编译器、管理工具和构建工具之类的软件工具的指令的评论。软件工程师将包括已编译代码和资源文件的文件集合传递到本地化阶段104,在此本地化工程师继续进行本地化进程。本地化工程师向这些文件添加更多的注释,这可应用于所有目标语言和文化。然后,这些文件被传递到翻译阶段106,在此针对每种特定语言对软件应用程序进行翻译。最终,这些文件被传递到构建阶段108,在此构建文件以对多种语言中的每一种产生可执行软件应用程序文件。
图2是示出从开发阶段102到本地化阶段104的一示例性本地化数据流200的示意图。本地化解析器工具210用于合并多个文件,包括源二进制文件204、注释文件206、和设置文件208,并且产生输出本地化数据文件212。源二进制文件204来自开发工程师和软件构建实验室202。本地化文件212在本地化阶段104被传递到本地化工程214的文件。在一个示例性实施方式中,本地化数据文件212包括来自设置文件208的设置、来自注释文件206的注释、以及来自源二进制文件204的源二进制数据。由软件构建实验室202提供的源二进制文件204包括从采用诸如英语的原始语言构建软件应用程序源文件过程中得到的二进制数据。
对嵌入到注释文件206、源二进制文件204和设置文件208中的注释加标签以表明注释的所有者和来源。例如,可用“DEV”对来自开发工程师的注释加标签,以表明由该标签指示的注释来源。在本地化进程中使用的诸如注释提取器工具的各种软件工具也可以向软件应用程序文件添加注释。例如,注释提取器工具可用“RCCX”对由注释提取器工具拥有的注释加标签。如果在注释提取器工具所操作的输入文件中不存在注释,则注释提取器工具可以不产生输出文件。注释是大小写敏感的,其中小写和大写字母定义了不同的单词,或者注释不是大小写敏感的。注释还可被启用或禁用。例如,本地化管理工具可用“LCI”对注释加标签,并且可用于禁用其它DEV和RCCX注释。软件应用程序构建工具拥有的特定类型注释中的一种或多种,这类注释由代表构建工具进程的诸如DEV和RCCX的特定标签标识。在一个示例性实施方式中,诸如软件构建工具的工具行为受在配置文件中设定的参数的控制。
两种不同类型的文件包含并声明同一类型注释中的一个或多个的所有权,如注释标签所定义的。多个文件对同一类型注释的所有权声明会产生冲突。这种所有权冲突可通过例如将所有权赋予最近文件来解决,或者这种冲突可基于预先赋予文件的所有权优先级来解决。因此,较高优先级的文件将对所有权发生冲突的注释类型具有更好的声明。也可使用其它类型的冲突解决方案。因此,这些示例应该被解读为是示例性而非限制性的。
当包含不同类型注释的多个文件被合并时,如果所有权发生冲突则发出警告或错误消息。如果在注释合并操作期间遇到有意更改,则发出表明该情况的信息消息。例如,当由于自有注释的最近版本文件可用而忽略该注释时,可发出信息消息。如果注释无法被禁用,则生成警告消息。类似地,如果并非由一文件或工具拥有的注释被禁用,则发出警告消息。在一个示例性实施方式中,将注释类型的所有权从现有所有者转让给新的所有者。例如,将DEV类型注释的所有权从解析器工具传递到构建工具。在一个示例性实施方式中,每个所有权都具有该所有者所拥有的注释类型的所有权列表。如果将未在所有者的所有权列表上的新注释类型赋予该所有者,则该所有者保留该所有权并发出警告消息。在一个示例性实施方式中,如果两个文件声明同一注释的所有权,则发出错误消息。这种所有权冲突可在本地化进程的诸如构建阶段108的后续阶段中得到解决。在一个示例性实施方式中,不包含资源文件拥有的注释类型的资源被视为具有空的启用注释,并且在注释合并操作过程中如此处理。
如上所述,在本地化进程中,可向软件源代码和本地化文件添加注释以向本地化进程中的后续步骤提供信息和指令。注释帮助软件的本地化人员改进质量并降低本地化成本。提供注释的益处包括信息共享、帮助创建伪构建、以及检验翻译完整性。在一个示例性实施方式中,共享信息包括提供关于串资源的标准本地化指令,这减少了由这种串资源的不正确本地化所产生的错误。串资源包括向软件用户呈现的文本消息,诸如警告。伪构建是软件的临时测试构建(即软件代码的编译),由测试团队用来在产品开发周期的早期找到本地化错误,以便计划实际本地化构建的测试以及降低总体的本地化构建成本。通过使用本地化指令和注释来检验翻译完整性。通过将本地化人员提供的翻译与对本地化的限制集进行匹配来检验翻译完整性。限制集包括对软件原始语言与对软件进行本地化所针对的目标语言之间的诸如词语和短语的信息进行匹配。
在一个示例性实施方式中,使用注释提取器工具。如上所述,注释提取器工具是在一种本地化工具,它在包括待提取注释的文件上运行并将这些注释编写到诸如本地化数据文件的输出文件。在另一示例性实施方式中,本地化进程中所使用的每个工具都可生成注释并对这些注释加标签以将该工具标识为注释的源。工具可用指示不同源的源标签生成注释。例如,注释提取器工具可生成“DEV”注释。在这种情形中,在具有相同标签却来自不同源的两个注释之间可能发生抵触。在一个实施方式中,注释盖写模型用于禁用抵触注释。在处理期间忽略禁用注释。
图3是示出从本地化阶段104和翻译阶段106到构建阶段108的另一示例性本地化数据流300的示意图。在本示例中,本地化构建器312对源二进制文件204、本地化数据文件121和本地化语言文件310中包含的数据进行处理以产生输出文件的目标二进制文件314。如上相关于图2所述,本地化数据文件212包括设置从其它文件中的数据结合的设置、注释和源数据。本地化语言文件310包括由本地化工程214添加的设置、注释、源数据和翻译数据。本地化构建工具312使用源二进制文件204、本地化数据文件212和本地化语言文件310作为输入文件并产生目标语言的目标二进制文件314。目标二进制文件314的创建是最终的本地化软件应用程序产品,并且是本地化进程的主要目的。
以上描述的工具和进程依赖于一致的通用数据格式,这些工具基于该格式以标准化方式集成和处理数据。在一个示例性实施方式中,本地化可扩展标记语言(XML)模式用于定义一致的数据格式,以供上述各种本地化工具和相关文件使用。本地化XML模式提供允许不同小组和组织开发处理特定任务的软件工具的可扩展XML格式。本地化XML模式还允许开发可在多个组织之间共享的工具和数据,进而促进小组间合作。例如,本地化解析工具210、本地化构建工具312和本地化管理工具可在本地化进程中对不同的文件使用和共享同一数据格式。在一个示例性实施方式中,本地化XML模式还可以是可扩展的。本地XML模式的可扩展性允许其它各方开发带有新特征的新工具而无需更改数据格式。
图4是示出基于可扩展本地化XML模式分别对本地化XML数据文件404进行示例性文件分割和合并操作400和402(与注释合并操作不同)的示意图。在本示例性实施方式中,使用文件分割操作400将本地化XML数据文件404分割成多个部分数据文件406。部分数据文件406可由多个组织或并行处理软件工具并行使用,以便独立于其它部分数据文件406处理每个部分数据文件406。例如,开发多个软件工具的数据文件的多个第三方中的每一个可分别使用与由多个第三方中的该方开发的软件工具相关的一个部分数据文件。作为另一示例,将同一软件应用程序翻译成多种语言的多个组织可使用由文件分割操作400创建的适当部分数据文件406来创建已翻译版的软件应用程序资源。当多个组织完成部分数据文件406的处理时,使用文件合并操作402将部分数据文件406合并成单个本地化XML数据文件408。
本地XML数据文件404包括指定本地化信息的XML元素。包含在本地化XML数据文件404中的这些元素之一是特性包。图5A-5E示出特性包和相应XML元素的示例性实施方式。图5A是一示例性特性包数据结构500的示意图。特性包502是用于存储任意数量特性的数据容器。在一个示例性实施方式中,每个复杂数据类型都与至少一个特性包相关联。复杂数据类型是包含其它数据类型的数据类型。例如,包含其它XML元素的XML元素是复杂数据类型。在一个示例性实施方式中,使用“名称”属性定义的唯一名称和值被赋予该特性。值必须是由本地化XML模式支持的数据类型。在本地化XML模式中定义的每个复杂数据类型包括存储由本地化XML模式的使用者要求的任意数量数据的特性包元素。图5A所示的示例性特性包502包括布尔数据类型504、整数数据类型506、串数据类型508和XML数据类型510。
图5B是一示例性布尔XML元素522的示意图。布尔XML元素522包括属性列表524。XML中的数据类型属性用于表示关于数据类型的信息,诸如数据类型的名称和值。属性列表524中包含的属性之一是名称526。在一个示例性实施方式中,名称属性526是α数字串。值528是布尔XML元素522的另一属性。值528表示布尔XML元素522的逻辑值。如本领域已知的,逻辑值包括真和假两种逻辑状态值。
图5C是一示例性整数XML元素542的示意图。整数XML元素542包括属性列表544。属性列表544中包含的属性之一是名称546。在一个示例性实施方式中,名称属性546是α数字串。值548是整数XML元素542的另一属性。值548表示整数XML元素542的整数值。
图5D是一示例性串XML元素562的示意图。串XML元素562包括属性列表564。属性列表564中包含的属性之一是名称566。在一个示例性实施方式中,名称属性566是α数字串。值568是串XML元素562的另一属性。值568包括含有α数字以及其它字符的字符串,由串XML元素562表示。
图5E是一示例性XML串XML元素582的示意图。XML串XML元素582表示任何有效的XML语句。XML元素582包括属性列表584。属性列表584包含名称属性586。在一个示例性实施方式中,名称属性586是α数字串。属性列表584还包括任何XML语句属性588,包括任何有效的XML语句。
本领域技术人员将会意识到,属性包元素502的其它变体也是有可能的。例如,属性包元素502可包括一类数据元,诸如“任何(Any)”元素(未在以上图中示出),其中任何(Any)元素包括名称属性、类型属性和值属性。在这种示例性实施方式中,类型属性指定如何解释值属性。例如,类型可以是“Unsigned_Integer(未赋值整数)”,且值可以是“15”。
图6是带有源属性的一示例性注释数据格式600的示意图。在一个示例性实施方式中,注释元素603包括为人类操作员提供有关本地化进程信息的自然语言文本以及向处理注释文件206和本地化XML数据文件408的人类操作员和软件工具提供作为指令的预定文本串。图6所示的注释元素602包括属性列表604。在一个示例性实施方式中,属性列表604包括名称属性606、启用属性608、和SRC(对于源)属性610。名称属性606用于通过名称指代注释。启用属性608用作指示符以指示注释602是启用还是禁用。SRC属性610指示注释的源,即SRC属性610是标识注释的所有者和源的标签。如上参照图2所述,不同类型的注释由不同所有者拥有。注释所有者可包括有关与注释所有者的责任范围相关的本地化进程的指令和其它信息。例如,软件开发者可通过注释形式提供一般信息和指令。对由特定所有者作出的注释加标签,以标识该注释的所有者。在一个示例性实施方式中,由每个所有者作出的注释仅由这些注释所属的所有者来操纵。在另一示例性实施方式中,可将注释的所有权从一个所有者传递到另一个所有者。例如,可以允许标有“DEV”(即开发者,如上所述)的注释由注释提取器工具拥有,该工具通常只拥有标为“RCCX”的注释。在一示例性实施方式中,注释名称和注释可以是大小写不敏感的。注释还可被启用和禁用。如上所述,在处理过程中忽略禁用的注释。
图7是带有注释的一示例性本地化项目数据格式700的框图。在一个示例性实施方式中,本地化项目702包括属性704。属性704包括项目类型706和项目ID708。本地化项目702还包括串元素710、二进制元素712和注释714。本地化项目702是可被翻译或以其它方式适于本地文化和语言的正进行本地化的软件的任何部分或源。例如,文本消息或图标是本地化项目702。项目类型706是指定本地化项目702的类型的属性。例如,项目类型706可指示特定本地化项目702是文本消息或色彩。项目ID 708用作本地化项目702的标识符。本地化项目702可任选地包括串710、二进制数据712和注释714,这取决于项目类型706。例如,如果项目类型706指示本地化项目702是文本串,则本地化项目702可包括指定在本地化中使用的默认字体的另一元素,诸如特性元素(未在图中示出)。在一个示例性实施方式中,本地化项目702中包含若干类型的串710和二进制数据712。例如,本地化项目702中可以包括用于源语言、目标语言和其它参考语言的串和二进制数据。参考语言可用于为本地化项目702从源语言向目标语言的翻译提供附加信息。在一个示例性实施方式中,父本地化项目702包括一起构成本地化项目702的分层结构的零个或更多其它子本地化项目702(未示出)。子本地化项目702通过指针或等效软件技术的方式包括在父本地化项目702中。
图8是一示例性自有注释数据格式806的示意图。所示示例性自有注释元素802包括多个注释元素602,每个元素包括属性804。属性804包括名称属性806。
图9A-9D示出设置元素902和相应XML元素的示例性实施方式。图9A是一示例性设置数据格式的示意图。设置元素902包括含有名称906的属性904。设置元素902还包括多个设置908项目。示例性设置1包括属性910。属性910包括设置1的名称912。示例性设置1还包括布尔元素914、整数元素916、枚举元素918、串元素920、列表元素922和选项表元素924。以下进一步描述设置908的每个元素。设置元素902指定本地化数据文件的当前设置。
图9B是一示例性枚举元素942的示意图。示例性枚举元素942包括含有名称946和值948的属性944。名称属性946通过名称标识枚举元素942。值属性948包括由枚举942表示的枚举的值。
图9C是一示例性列表元素962的示意图。示例性列表元素962包括含有名称966和多个项目元素968的属性964。名称属性966通过名称标识列表元素962。项目元素968各自表示列表962的一个条目,并且可包括许多属性(未在本图中示出),诸如项目标识符、序列号、源文件名称等。此外,项目968可包括其它元素(未在本图中示出),诸如串元素、二进制元素、注释元素等。
图9D是一示例性选项表元素982的示意图。示例性选项表元素892包括含有名称986和值属性988的属性984。示例性选项表元素982还包括多个项目元素990。名称属性986通过名称标识列表元素982。项目元素990各自表示列表982的一个条目,并且可包括许多属性(未在本图中示出),诸如项目标识符、序列号、源文件名称等。此外,项目990可包括其它元素(未在本图中示出),诸如串元素、二进制元素、注释元素等。
本领域技术人员将会意识到,数据元的其它变型也是可能的。例如,数据元可包括诸如“任何(Any)”元素(未在上图中示出)的一类数据元,其中任何(Any)元素包括名称属性、类型属性和值属性。在这种示例性实施方式中,类型属性指定应该如何解读值属性。例如,类型可以是“Unsigned_Integer(未赋值整数)”以及值可以是“15”。
图10是一示例性本地化XML数据格式1002的示意图。本地化XML数据格式用于定义在本地化进程中使用的本地化数据的总的格式。示例性本地化XML数据元1002包括属性1004和任选元素,诸如如上所述的设置1016、特性包1018、自有注释1020和本地化项目1022。属性1004包括名称属性1006以及其它任选属性,诸如解析器ID 1010、描述1012、源1012和目标1014。如上参照图7所述,本地化项目1022可包括共同构成本地化项目702的分层结构的零个或更多子本地化项目1022(未示出)。
图11A是包含在CDATA XML元素1102中的文本数据的一示例性示意图。如本领域中已知的,CDATA XML元素1102用于表示本地化数据文件中的自由文本1104,类似于串。包含在CDATA XML元素1102中的自由文本1104通过在最后一个自由文本1104字符结束处立即使用闭合双括号1106来划定。即,在自由文本1104的结束处插入闭合双括号1106,而在自由文本1104的最后一个字符与闭合双括号1106之间没有任何空字符,诸如空白、制表符等。图11B是包含在CDATA XML元素1102a中的含有方括号字符1110的文本数据的一示例性示意图。如果自由文本1104a包括方括号“]”字符1110,则不能清晰确定自由文本1104a的范围。当字符的含义模糊时,即当能以多种方式解释字符时,转义字符可用于限制字符的解释。除其它技术之外可使用转义字符来消除该字符的岐义。在一个示例性实施方式中,消除方括号“]”的岐义包括在方括号字符1110之前插入诸如空格或制表符符号的空字符1108,来标识方括号1110是自由文本1104a的一部分且不是闭合双括号1106a的一部分。在其它示例性实施方式中,可类似地使用其它特定字符。
图12是本地化XML模式1202和相应对象模型1208的一示例性关系1200的框图。对象模型1208包括多个类1206,每个类1206指定对象模型中的软件对象的设计。本领域技术人员将会意识到,类是用于以诸如C++(C加加)、C#(C井号)和Java的面向对象计算机语言定义软件对象的抽象对象。此外,本领域技术人员将会认识到,软件对象是通过例示类而在计算机存储器中创建的,即通过分配存储器以基于由对应类指定的格式在存储器中创建物理对象。对象模型1208实质上对本地化XML模式1202中的每个元素1204定义一个类1206。使用对象模型1208,在软件应用程序和工具1210中实现本地化XML模式。如上所述,元素1204定义本地化数据格式1212。用于如元素1204所原始定义的用于指定本地化数据的数据格式的数据接口1214由对象模型1208中的类1206指定。软件应用程序和工具1210使用数据接口1214来对每个数据片采用正确格式以正确访问和操纵本地化数据。软件应用程序和工具1210还使用功能接口1216来访问和操纵本地化数据以配置和执行本地化任务。
图13A是带有返回指针的一示例性父和子对象的框图。父对象1302是从第一类例示的软件对象。子对象1304是从第二类例示的软件对象,该第二类是在设计第一和第二类时从第一类导出的。本领域技术人员将会认识到,在诸如C++、C#和Java的面向对象的计算机语言中,第二类可从第一类导出(即指定)。第二类被认为是继承在第一类中包含的成员。类的成员包括函数、变量、指针和其它类。第二类可定义在第一类中未定义的附加新成员。在本领域中,通过第二类获得第一类的成员的关系称为继承。继承是通常在与运行时(即在软件执行过程中)不同的软件开发过程中的设计时发生的进程。本领域技术人员公知为包容的面向对象语言的另一特性也称为聚集。当第一类是第二类的成员时,第一类被认为是包含在第二类中。包容是与继承不同的对象间关系。本领域中,习惯在继承和包容关系中使用术语“父”表示第一类,术语“子”表示第二类。因此,以下讨论中将使用父/子的术语。在图13A所示的示例中,对象模型1208(图12)中的子对象1304包括指向对应父对象1302的返回指针1306。返回指针1306通过在父对象1302与子对象1304之间提供直接链接来增加系统性能,由此可以遍历对象模型1208中的对象关系。所有对象使用指针1306维护对其相应父对象的引用。当父对象1302与子对象1304之间建立关系时,由父对象1302设定反向指针1306。当父对象1302与子对象1304之间的关系断开时,将子对象1302设定为指向另一父对象。
图13B是带有指针和文件指针的一示例性父对象和子对象的框图。如上所述,当父对象1322与1324之间建立关系时,父对象1322设定返回指针1326。当父对象1322与子对象1324之间的关系断开时,将子对象1322设定为指向另一父对象。当子对象1324是资源对象时,文件指针1328由子对象1324用来指向资源文件。如本领域技术人员已知的,资源通常是表示诸如图标、菜单或位图的图像组件的图形数据对象。资源数据包含在根据已起草的资源规范使用资源编译器创建的资源文件1330中。
图14是带有外部定制文化信息的一示例性对象模型1402的示意图。对象模型1402包括默认的公知定制文化1404。为了本地化到对象模型1402中未默认包含的语言和文化,用来自外部文件1406的定制文化信息1408增添对象模型1402。在一个示例性实施方式中,外部文件1406呈现在本地系统中。在另一示例性实施方式中,外部文件1406位于远程系统上。在一示例性实施方式中,对定制文化信息1406进行手动更新。在另一示例性实施方式中,可通过本地化应用程序软件将定制文化信息1406写入文件1406。
图15是部分加载数据的一示例性方法1500的功能流程图。在框1510,客户端软件应用程序打开本地化数据文件。如上所述,本地化数据文件包括在本地化进程中由也称为客户端软件应用程序的软件应用程序工具使用的本地化数据。在一个实施方式中,本地化数据文件包括XML元素。本领域技术人员将会意识到,可使用其它方法和格式来表示软件应用程序的数据,因此,本文中有关示例性XML元素的讨论被解读为是示例性而非限制性的。客户端软件应用程序具有确定将哪些XML元素加载到存储器中以供处理的内部逻辑。例如,只处理用于本地化的文本信息的客户端软件应用程序只需要加载文本相关信息,诸如文本字符的字体和大小。在框1520,从本地化数据文件获取下一XML元素以加载到存储器中并进行处理。然后,在框1530,客户端软件应用程序判定是否必须加载当前XML元素。如果当前XML元素被选择加载,则在框1540,加载当前XML元素,且方法1500进行到框1550。如果当前XML元素未被选择加载,则方法1500进行到框1550,其中方法1500判定在本地化数据文件中是否有更多XML元素可用。如果在本地化数据文件中有更多XML元素可用,则方法1500返回到框1520以获取下一XML元素。如果在本地化文件中没有更多的XML元素可用,则方法1500结束。在一个示例性实施方式中,客户端软件应用程序选择加载一种通用类型数据而不加载其它通用类型数据。例如,处理文本的客户端设置标志,用于只加载串数据而不加载任何二进制数据。在这种情形中,数据的选择在总体级别上进行,从而区分数据类型以基于所选的一般类型数据来加载。
图16是用回调功能细化数据加载的一示例性方法1600的功能流程图。在一个实施方式中,客户端软件应用程序指定要以细化级别加载的数据,包括所有类型的数据,诸如串数据和二进制数据。与以上参照图15讨论的在数据类型总体级别上操作的部分数据加载不同,细化数据加载在所有数据类型内的精细级别上进行。在细化加载中,客户端软件应用程序根据加载哪个数据元提供具体标准。在一个示例性实施方式中,客户端软件应用程序向对象模型1208的功能接口提供回调功能,由此从本地化数据文件检索本地化数据的对象判定是否加载每个数据元。回调功能使用如客户端软件应用程序所定义的用于选择数据的标准。在框1610中,客户端软件应用程序打开本地化数据文件。方法1600进行到框1620,其中由客户端软件应用程序从访问本地化数据文件的对象模型1208向对象提供回调功能。在框1630,获取XML数据元。该对象使用由客户端软件应用程序提供的回调功能以针对加载对XML数据元进行评估。在框1650,方法1600基于来自回调功能的结果判定是否加载当前XML数据元。如果当前XML数据元被选择用于加载,则方法1600进行到框1660,其中XML数据元被加载到存储器中,且方法进行到框1670。如果当前XML未被选择用于加载,则方法1600进行到框1670。在框1670,方法1600判定在本地化数据文件中是否有更多的XML数据元可用。如果有更多的XML数据元可用,则方法1600返回框1630以获取下一XML数据元。否则,方法1600结束。
图17A是数据部分保存的一示例性方法1700的功能流程图。部分保存方法1700是部分加载方法1500的补充。可以要求在存储器中具有准备保存到数据文件中的本地化数据的客户端软件应用程序只保存该数据的一部分。部分保存方法1700允许客户端软件应用程序指定应该将哪些数据保存到数据文件。例如,可以要求客户端软件应用程序只保存串数据。客户端软件应用程序可指定只将串数据保存到数据文件中。在框1710,客户端软件应用程序指定要保存到数据文件中的数据类型。在框1720,将由客户端软件应用程序所指定类型的数据保存到数据文件中。在框1730,关闭数据文件,方法1700结束。
图17B是合并数据保存的一示例性方法1750的功能流程图。无论通过上述的部分数据加载还是细化数据加载,客户端软件应用程序只在存储器中加载数据的一部分。如果客户端软件应用程序的存储器中的数据被如此存储,则最初未加载到存储器中的所有数据将丢失并且未记录在输出数据文件中。为了防止数据丢失,方法1750将客户端软件应用程序存储器中的数据与来自最初未加载到客户端软件应用程序存储器中的数据文件合并。为了保存由客户端软件应用程序对已加载数据进行的修改,保存对数据文件和客户端软件应用程序存储器通用的该数据的存储器副本。在框1760,打开客户端软件应用程序加载本地化数据所使用的原始数据文件。在框1770,从该数据文件获取下一可用XML元素。在框1780,方法1750判定客户端软件应用程序的存储器中是否也存在从该数据文件获取的当前XML元素。如果存储器中存在当前XML元素,则在框1785,将XML元素的存储器副本保存到该数据文件中。然后,方法1750进行到框1790。在框1780,如果存储器中不存在当前XML元素,则当前XML元素最初未被加载,并且未被修改,因此无需再次在数据文件中保存。在这种情形中,方法1750进行到框1790。在框1790,方法1750判定数据文件中是否还有更多的XML元素。如果还有更多的XML元素,则方法1750进行到框1770以获取下一XML元素。否则,方法1750结束。
图18是细化数据保存的一示例性方法1800的功能流程图。细化保存方法1800是细化数据加载方法1600的补充。类似于细化加载方法1600,细化保存方法1800指定每个数据对象是否必须被保存。在一个实施方式中,客户端软件应用程序指定要在精细细化级别保存的数据,包括所有类型的数据,诸如串数据和二进制数据。与以上参照图17A所述的在数据类型的总体级别上操作的数据部分保存不同,数据的细化保存在所有数据类型内的精细级别上进行。在细化保存中,客户端软件应用程序根据保存哪个数据对象指定具体标准。在一个示例性实施方式中,客户端软件应用程序向对象模型1208的功能接口提供回调功能,由此将本地化数据保存到本地化数据文件的对象判定是否保存每个数据元。回调功能使用如客户端软件应用程序所定义的数据选择标准。方法1800进行到框1810,其中由客户端软件应用程序从访问本地化数据文件的对象模型1208向对象提供回调功能。在框1820,从客户端软件应用程序存储器获取XML数据元。在框1830,该对象使用由客户端软件应用程序提供的回调功能来针对保存对XML数据对象进行评估。在框1840,方法1800基于来自回调功能的结果判定是否保存当前XML数据元。如果当前XML数据元被选择为保存,则方法1800进行到框1850,其中XML数据元被保存到数据文件,且该方法进行到框1860。如果当前XML未被选择为保存,则方法1800进行到框1860。在框1860,方法1800判定在存储器中是否有更多的XML数据元可用。如果有更多的XML数据元可用,则方法1800返回框1820以获取下一XML数据元。否则,方法1800结束。
图19是一示例性本地化对象模型1900的示意图。如上所述,本领域技术人员应该认识到,对象模型是软件系统中不同对象类型或类(对象的抽象表示)的关系的抽象表示。对象模型可用于表示对象之间的继承关系以及包容关系。对象模型1900提供用于对象和关系的类型规范,该规范允许相对于基于本地化XML模式1202创建的本地化数据文件中数据的基本输入和输出功能。如上所述,本领域技术人员将会意识到对象模型1900可应用于其它类型的数据模式,并且示例性本地化XML模式的讨论不应被解读为对本发明的限制。对象模型1900允许本地化数据文件的分割和合并。此外,对象模型1900允许添加有关注释的源和描述的信息。对象模型1900还允许包括已引用的翻译以在本地化进程中提供帮助。如参照图12所述的,对象模型1900紧密对应于本地化XML模式1202。即,对象模型1900中的每个类对应于本地化XML模式1202中的一个元素。因此,本地化文件1902是表示基于本地化XML模式1202的本地化数据文件的类。本地化文件类1902包括文化类1904和本地化项目列表类1906。本地化项目列表类1906包括在本地化项目类1908中。在一个实施方式中,本地化项目列表类1906是线性列表,与分层结构不同,它很容易允许将本地化数据文件404分割成部分数据文件406并将部分数据文件406合并回本地数据文件408。本地化项目类1908是对象模型1900中对象模型1900的大多数其它类所相关的中心类。在一个实施方式中,本地化项目类1908包括父资源、本地化文件、资源ID、子本地化项目(如下描述)的本地化项目列表(如下描述)、二进制数据类(如下描述)、以及各注释的注释列表(如下描述)。
本地化项目类1908还包括注释类1910。在一个实施方式中,注释类1910是注释列表类的一部分。本地化项目类1908还包括串数据类1912和二进制数据类1914。串数据类1912包括串源类1916和串目标类1918。串源数据类1916提供原始串和其它串特性。串目标类1918包括该串的本地化信息。二进制数据类1914包括二进制源类1920和二进制目标1922。二进制源类1920呈现原始二进制字节数组和其它二进制特性。二进制目标类1922提供二进制状态信息。在另一实施方式中,对象模型1900可以包括在本地化项目类1908中包含的诸如显示信息类和资源ID类的其它类。在一示例性实施方式中,串数据类1912和二进制数据类1914包括串参考类和二进制参考类(未示出)。参考类提供有关参考语言的信息,可用于为将串和二进制数据从源语言翻译到目标语言提供附加信息。
图20是用于创建和提供本地化数据文件的一示例性方法2000的功能流程图。在框2010,创建新的本地化数据文件。在框2020,向本地化数据文件添加本地化项目。在框2040,方法2000判定是否还有要向本地化数据文件添加的更多本地化项目。如果还有更多本地化项目,则方法2000进行到框2020,其中向本地化数据文件添加本地化项目。否则,方法2000进行到框2060,其中保存本地化数据文件。
图21是用于向本地化项目添加注释的一示例性方法2100的功能流程图。方法2100需要来自客户端软件应用程序的输入信息,以标识添加注释所针对的本地化项目。如上所述,可在注释中嵌入与本地化项目相关联的用于本地化的指令。在框2110,打开本地化数据文件。在框2120,方法2100验证尝试向本地化项目添加注释的客户端软件应用程序的注释所有权。如果该客户端软件应用程序不拥有向本地化项目的注释类型,则方法2100进行到框2170,其中关闭本地化数据。如果客户端软件应用程序拥有该注释类型,则方法2100进行到框2130,其中创建新的注释。在框2140,对所需值设定注释的名称和值属性。在框2150,向本地化项目添加注释。方法2100进行到框2160,其中保存该文件。在框2170,关闭该文件,且方法2100结束。
图22是用于文件剥离的一示例性方法2200的功能流程图。在保存数据之前,将必须不被保存到本地化数据文件的所有数据从客户端软件应用程序的存储器移除。在一个实施方式中,方法2200移除不包含注释的所有本地化项目。将二进制信息和串从所有其它本地化项目移除。在一个实施方式中,使用递归方法,它包括子本地化项目作为输入。递归方法从子本地化项目剥离所有二进制和串信息。来自对递归方法的调用的“假”返回值表明作为输入向递归方法提供的子本地化项目以及该子本地化项目的所有子项目不具有注释,并将该子本地化项目和该子本地化项目的所有子项目移除。在框2210,访问子本地化项目。在框2220,方法2200判定该子项目是否包括注释。如果该子项目包括注释,则方法2200进行到框2230,其中丢弃子本地化项目的二进制和串数据。如果该子项目不具有注释,则在框2240移除该子项目。在框2230,方法2200进行到框2250。在框2240,该方法2200进行到框2250,其中判定是否还有更多子本地化项目。如果还有更多子本地化项目,则方法2200进行到框2210,其中访问下一子本地化项目以进行评估。否则方法2200结束。
虽然示出和描述了本发明的当前较佳实施方式,但是本领域技术人员应该意识到,在此可进行各种变化而不背离本发明的精神和方法。例如,虽然上述系统和方法针对使用XML模式的本地化数据,但是可以使用其它数据格式规范。因此,本发明不应被解读为限制于上述示例性实施方式。