一种基于编辑器的国际化代码转换方法与流程

文档序号:11154567阅读:226来源:国知局
一种基于编辑器的国际化代码转换方法与制造工艺

本发明属于计算机技术领域,具体涉及一种基于编辑器的国际化代码转换方法。



背景技术:

随着软件在世界各国的广泛应用,软件处理语言的单一性给软件的普及和用户的应用带来了不便。如何使软件能够处理多种语言已成为人们关注的问题,软件的国际化是解决这一问题的有效途径。这需要每个程序员将自己开发的软件部分的源代码和资源文件分离,按照语言的不同,分成若干个资源文件软件中,一般使用Properties、XML等文件来存储国际化数据。其中,Properties文件是一种用于存储Key-Value(键-值)对的属性存储文件,其中格式为:每个Key-Value对独立占一行,Key与Value之间使用等号(=)分隔;一般键Key用于软件程序中使用,而值Value则用于对应的显示,文件一般以.properties作为后缀。这种方式在国际化数据录入时,需要将未国际化文字转成Key-Value形式,再把键Key配合国际化代码替换原来未国际化的文字。在代码执行时,国际化方法根据键Key获取相应的国际化语言进行填充和显示。

现有技术中通过国际化文件搜索引擎搜索所有或指定的国际化文件,将字符编码转换成可读字符;合并多个语言国际化成表格,每个国际化文件的内容对应于表格的一列,拆分表格成多种国际化语言,表格的每列对应于一种国际化语言;将可读字符转换成统一字符编码;每种语言的数据生成一个国际化文件。

当采用上述方式进行转换时,由于使用的是代码国际化搜索模块找到中文,通过Excel文件作为翻译中间文件,最终生成properties、XML国际化配置文件,无法基于编辑器的方式进行操作,没有人工选择和配置过程,不方便实时调整。现有技术只是自动化国际化代码生成过程,遇到整个句子被分割成多段中文的时候,全自动程序会将多段中文抽取成Key-Value形式,这造成存储在国际化配置文件中的国际化语言键值都是断句,翻译人员只能拿到这些单词列表而不是整段的句子进行翻译,导致整个过程没有有效的方法保证翻译的完整性和一致性。另外现有国际化方法存在的问题是全自动处理整个过程,操作人员在国际化配置过程没有选择和修改的过程,当一个地方需要调整的时候,只能在修改国际化配置后全部生成一遍,不能像编辑器一样,能够对需要修改的地方进行快速有效的修改,在确认编辑满意后再全部保存。



技术实现要素:

为克服上述现有技术的不足,本发明提供了一种基于编辑器的国际化代码转换方法,其特征在于:

S501:检测到国际化配置文件编辑器和代码编辑器被同时开启;

S502:检测是否有代码拖放到国际化配置文件编辑器区域;如果一直没有拖放,则在S511执行关闭检测;

S503:获取拖放到国际化配置文件编辑器的代码;

S504:判断拖放到国际化配置文件编辑器的代码是否有需要国际化的语言;如果判断结果为否,则执行S505;如果判断结果为是,则执行S506;

S505:如果没有需要国际化代码,提示没有需要国际化代码;返回S502;

S506:如果有需要国际化代码,将本国语言转换成国际化键Key;

S507:判断这个国际化键Key是否在国际化配置文件已经存在;如果不存在,则执行S508;如果存在,则执行S509;

S508:将这个国际化键Key和选择文本的本国语言值Value1加入国际化配置文件编辑区,并显示为修改状态;

S509:替换代码编辑区本国文字为国际化转换方法加国际化键Key的形式,并将该编辑器区域设为修改状态。修改完毕后,返回S502继续检测是否有代码拖放到配置文件编辑器或者跳转S510保存修改;

S510:保存全部修改,直至所有文字都被国际化,确认转换无误后可以在代码编辑器和国际化配置文件编辑器保存所有修改;

S511:退出编辑器,退出国际化配置文件编辑器和代码编辑器。

上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,并可依照说明书的内容予以实施,以下以本发明的较佳实施例并配合附图详细说明如后。

附图说明

图1示出了根据本发明的一个实施例的“代码编辑器”与“国际化语言配置编辑器”同时设置的示意图;

图2示出了根据本发明的一个实施例的国际化代码自动填充的示意图;

图3示出了根据本发明的一个实施例的在模板中拖放实现代码化的示意图;

图4示出了根据本发明的另一个实施例的在模板中拖放实现代码化的示意图;

图5示出了根据本发明的一个实施例的代码国际化的实现方法;

图6示出了根据本发明的一个实施例的自动生成键值的代码国际化方法流程图;

图7示出了根据本发明的一个实施例的国际化配置文件编辑方法流程图。

具体实施方式

为更进一步阐述本发明为达成预定发明目的所采取的技术手段及功效,以下结合附图及较佳实施例,对依据本发明提出的一种基于编辑器的国际化代码转换方法其具体实施方式、特征及其功效,详细说明如后。在下述说明中,不同的“一实施例”或“实施例”指的不一定是同一实施例。此外,一或多个实施例中的特定特征、结构、或特点可由任何合适形式组合。

本发明提供了一种在编辑器中通过选择未国际化文字,用拖放到国际化编辑视窗的方式,进行国际化代码的方法;能够自动产生国际化代码的键Key填充国际化编辑器,最终使用国际化代码配合国际化键Key自动替换编辑器未国际化文字。通过对Eclipse编辑器插件扩展的方式,在编辑器内选择文字代码进行拖放,当拖放到指定组件操作的时候,拦截所选择的文字,并进行后续的国际化操作。

如图1所示,上栏为代码编辑器、下栏为国际化语言配置编辑器两者同时显示,拖放过程中,选择需要国际化的文字,将其从代码编辑器拖放至国际化语言配置编辑器即可实现。

如图2所示,上栏为代码编辑器、下栏为国际化语言配置编辑器两者同时显示,拖放过程中,选择需要国际化的文字,将其从“代码编辑器”拖放至国际化语言配置编辑器;在国际化语言配置编辑器生成国际化文字的键(Key)值(Value)填充;使用国际化代码配合国际化键(Key)替换编辑器内相应的文字。

如图3所示,act.vm模版中选择需要国际化的文字”请点击”,拖放到cms国际化语言编辑器中。如图4所示,在国际化语言编辑器中添加国际化键Key等于qing3dian3ji1-0的一条信息,使用自动翻译API得到相应的国际化翻译结果进行值(Value)的填充。然后使用国际化代码”${language.get(Key)}”结合生成的国际化键(Key),自动填充代码区的文字“请点击”代码段为${language.get(“qing3dian3ji1-0”)}。

根据本发明的一个具体实施方式,提供一种国际化代码的方法。如图5所示,包含以下步骤:

S501:检测到国际化配置文件编辑器和代码编辑器被同时开启;

S502:检测是否有代码拖放到国际化配置文件编辑器区域。如果一直没有拖放,则在S511执行时关闭检测;

S503:获取拖放到国际化配置文件编辑器的代码;

S504:判断拖放到国际化配置文件编辑器的代码是否有需要国际化的语言;如果判断结果为否,则执行S505;如果判断结果为是,则执行S506;

S505:如果没有需要国际化代码,提示没有需要国际化代码;返回S502;

S506:如果有需要国际化代码,将本国语言转换成国际化键Key;

S507:判断这个国际化键Key是否在国际化配置文件已经存在;如果不存在,则执行S508;如果存在,则执行S509;

S508:将这个国际化键Key和选择文本的本国语言值Value1加入国际化配置文件编辑区,并显示为修改状态;

S509:替换代码编辑区本国文字为国际化转换方法加国际化键Key的形式,并将该编辑器区域设为修改状态。修改完毕后,返回S502继续检测是否有代码拖放到配置文件编辑器或者跳转S510保存修改;

S510:保存全部修改,直至所有文字都被国际化,确认转换无误后可以在代码编辑器和国际化配置文件编辑器保存所有修改;

S511:退出编辑器,退出国际化配置文件编辑器和代码编辑器。

根据本发明的一个具体实施方式,提供一种自动生成中文国际化键值,进行国际化代码的方法。根据本发明的一个优选实施方式,所述国际化键值采用如下方法生成。

将获取的本国语言转换成拼音加声调的格式;例如:

你好->中文[你好]->拼音[nǐhǎo]->Key[ni3hao3]

遇到标点符号使用~进行替换;例如:

你好!->中文[你好!]->拼音[nǐhǎo~]->Key[ni3hao3~]

如果翻译中遇到整段中文被变量分割成两部分或更多时,使用如下方式进行替换:

您还有200优惠券,请在2016/11/11前使用。

->中文[您还有_优惠券,请在_前使用。]

->拼音[n ǐ n h ǎ i_yōu huì quàn~q ǐ ng zài_qián sh ǐ y ò ng~]

->Key[nin3hai3_you1hui4quan4~qing3zai4_qian2shi3yong4~]

根据本发明的一个具体实施方式,提供一种国际化语言值Value存储方法。

根据本发明的一个优选实施方式,例如需要进行国际化的文字为“你好”,可以转换为如下形式进行存储:

根据本发明的一个优选实施方式,例如需要进行国际化的文字为“您还有200优惠券,请在2016/11/11前使用”,可以转换为如下形式进行存储:

需要国际化文字:您还有200优惠券,请在2016/11/11前使用。

中文cms_zh.properties中:nin3hai3you3_you1hui4quan4~qing3zai4_qian2shi3yong4~=您还有_优惠券,请在_前使用。

因为nin3hai3_you1hui4quan4~qing3zai4_qian2shi3yong4这个键太长,现在简写为key,现在实现下述方法,使得中文环境中

language.get(“key-0”)=您还有

language.get(“key-1”)=优惠券,请在

language.get(“key-2”)=前使用。

那么拼写“您还有200优惠券,请在2016/11/11前使用。”就改写为如下形式:

${language.get(“key-0”)}200${language.get(“key-1”)}2016/11/11${language.get(“key-2”)}

用上述方法可以保证翻译语句的完整性和一致性,这样翻译人员用类似做填空题的方式,进行语境分析和翻译。如果遇到大段文字需要国际化,可能生成超长的国际化键Key,这时候可以将生成的国际化键Key进行简化为“0001、0002”等自定义形式,以方便阅读,并且减轻超长国际化键Key给软件带来的计算压力。

下面看一下其它语言的文件存贮,使用上述相同方式:

日语cms_ja.properties中:key=あなたは_クポンを持って、_前に使用してください。

使用同上方法,使得日语环境中

language.get(“key-0”)=あなたは

language.get(“key-1”)=クポンを持って、

language.get(“key-2”)=前に使用してください。

最终得到翻译语句为:

あなたは200クポンを持って、2016/11/11前に使用してください。

英文cms_en.properties中:key=You have_coupons,please use befo re_.

使用同上方法,使得英语环境中

language.get(“key-0”)=You have

language.get(“key-1”)=coupons,please use before

language.get(“key-2”)=.

最终得到翻译语句为:

You have 200 coupons,please use before 2016/11/11.

一般程序会动态添加的200和2016/11/11这两个数值,使用模版的方式类似如下格式:

您还有${user.coupon}优惠券,请在${user.expirationDate}前使用。

最终“您还有200优惠券,请在2016/11/11前使用。”被国际化后显示为如下形式:

${language.get(“nin3hai3_you1hui4quan4~qing3zai4_qian2shi3yong4~-0”)}${user.coupon}${language.get(“nin3hai3_you1hui4quan4~qing3zai4_qian2shi3yong4~-1”)}${user.expirationDate}${language.get(“nin3hai3_you1hui4quan4~qing3zai4_qian2shi3yong4~-2”)}

对于国际化代码”${language.get(Key)}”名称或实现方式不同的,可以使用配置模版进行配置,程序实现的只是替换生成的国际化键Key,这里可以对任意语言源码进行国际化,在C++、C、PHP、Python等实现的国际化的方法都可以进行替换。

在翻译过程中难免遇到多音字,造成它们的国际化键Key重复,这时通过分析它们的分组后的本地语言,提示是否合并这个国际化键Key,通过审核的方式,达到合并或分离国际化键Key的目的。

根据本发明的一个具体实施例,针对多音字的情形,例如:

“这个自行车行{háng卖车商家}”VS“这个自行车行{xíng可以的意思}”

因为无法通过字面获得“行”的准确发音,可以选择其中一个作为发音。这时候可以选择新建一个键国际化键Key,用纠正发音的方式区别两个需要翻译的文字。

zhe4ge4zi4xing2che1hang2=自行车行{háng卖车商家}

zhe4ge4zi4xing2che1xing2=自行车行{xíng可以的意思}

根据本发明的一个具体实施例,针对同音不同字的情形,例如:

“百度”VS“摆渡”

因为读音完全一样,这需要通过两个不同后缀区别它们

bai3du4a=百度

bai3du4b=摆渡

根据本发明的一个具体实施例,针对标点符号不同的情形,例如:

“您好。”VS“您好!”

则可以选择合并国际化键Key,统一翻译

nin2hao3~=您好!

也可以选择不合并,分别翻译

nin2hao3~a=您好。

nin2hao3~b=您好!

如图6所示,根据本发明的一个具体实施方式,提供了一种自动生成键值的代码国际化方法,生成键值过程,实现的步骤如下:

S601、获取需要进行国际代码化的内容;

例:您还有200优惠券,请在2016/11/11前使用。

S602、使用正则表达式,对中文连续字段和非中文连续字段进行分组,得到第一分组;记录第一分组中哪些是中文哪些是非中文;

例如:第一分组:1、您还有

2、200

3、优惠券,请在

4、2016/11/11

5、前使用。

记录1、3、5为中文,2、4为非中文

S603、将第一分组通过汉字转拼音API转换为字母加声调形式,得到第二分组;

第二分组:1、nin3hai3you3

2、200

3、you1hui4quan4,qing3zai4

4、2016/11/11

5、qian2shi3yong4。

S604、将第二分组中的标点符号都替换为第一符号得到第三分组;根据本发明的一个优选实施方式,第一符号为~,替换的标点符号包含中文的所有标点符号。

第三分组:1、nin3hai3you3

2、200

3、you1hui4quan4~qing3zai4

4、2016/11/11

5、qian2shi3yong4~

S605、将第三分组中的非中文区替换为第二符号,得到第四分组;根据本发明的一个优选实施方式,第二符号为_;

第四分组:1、nin3hai3you3

2、_

3、you1hui4quan4~qing3zai4

4、_

5、qian2shi3yong4~

S606、连接第四分组得到该段文字的国际化键Key;

Key:nin3hai3you3_you1hui4quan4~qing3zai4_qian2shi3yong4~

S607、将第一分组中的中文替换为国际化代码和国际化键Key的形式,并按照替换的中文的位置,分别对国际化键Key叠加中线和序号,序号从0开始,每次加1;得到第五分组;

第五分组:1、${language.get(“key-0”)}

2、200

3、${language.get(“key-1”)}

4、2016/11/11

5、${language.get(“key-2”)}

这里简写nin3hai3you3_you1hui4quan4~qing3zai4_qian2shi3yong4~为key

S608、使用第五分组连接得到国际化后的代码;

${language.get(“key-0”)}200${language.get(“key-1”)}2016/11/11${language.get(“key-2”)}

S609、将第一分组中的非中文分组为替换为第二符号,得到第六分组;根据本发明的一个优选实施方式,第二符号为_;

第六分组:1、您还有

2、_

3、优惠券,请在

4、_

5、前使用。

S610、连接第六分组得到翻译前的本国语言值Value1;

中文值Value1:您还有_优惠券,请在_前使用。

S611、将本国语言值Value1进行翻译,获得相应的国际化语言值Value2。

例如:翻译为日文、英文

日文Value2:あなたは_クポンを持って、_前に使用してください。

英文Value2:You have_coupons,please use before_.

S612、根据翻译的国际化语言值Value2生成或修改国际化键值信息。

上述例子保存信息:

代码区

${language.get(“nin3hai3_you1hui4quan4~qing3zai4_qian2shi3yong4~-0”)}200${language.get(“nin3hai3_you1hui4quan4~qing3zai4_qian2shi3yong4~-1”)}2016/11/11${language.get(“nin3hai3_you1hui4quan4~qing3zai4_qian2shi3yong4~-2”)}

国际化配置文件

cms_zh.properties

nin3hai3you3_you1hui4quan4~qing3zai4_qian2shi3yong4~=您还有_优惠券,请在_前使用。

cms_ja.properties

nin3hai3you3_you1hui4quan4~qing3zai4_qian2shi3yong4~=あなたは_クポンを持って、_前に使用してください。

cms_en.properties

nin3hai3you3_you1hui4quan4~qing3zai4_qian2shi3yong4~=You have_coupons,please use before_.

如图7所示,本发明提供了一种国际化配置文件编辑方法,具体步骤如下:

S701、检测到任意国际化配置文件被开启;当检测到任意的国际化配置文件被例如双击操作,或者右键操作开启时,当前被开启的国际化配置文件例如:cms_zh.properties;

S702、开启国际化配置文件编辑器;

S703、判断当前被开启的国际化配置文件的文件名是否满足命名规则,根据本发明的一个优选实施方式,命名规则为“应用名_语言.后缀”的形式;根据本发明的一个优选实施方式,判断规则为,判断应用名称是否为字母和/或数字组成;语言是否满足国际化语言简写形式;文件的后缀是否为properties;当判断结果为否时,继续执行S718;如果判断结果为是,则继续执行S704;

S704、满足条件,提取国际化配置应用名称;例如,所提取的应用名称为cms;

S705、根据所提取的国际化配置应用名称,获取应用对应的文件夹下所有符合规则的配置文件;

例如:cms_zh.properties

cms_en.properties

cms_ja.properties

S706、获取各语言的国际化键值信息;

例如:cms_zh.properties

key1=你好

key2=再见

cms_en.properties

key1=Hello

key2=Goodbye

cms_ja.properties

key1=もしもし

key2=さようなら

S707、整理键值列表,将键相同的值放入一行

例如:

key1[你好,Hello,もしもし]

key2[再见,Goodbye,さようなら]

根据本发明的一个实施方式,如果某一国际化键Key单独存在,则补全其它语言配置的国际化键Key,记录国际化语言值Value2为空,在编辑器中显示为空白。

例如:

中文配置文件多了一个键值,key100=只有中文。

cms_zh.properties

key99=测试

key100=只有中文

cms_en.properties

key99=test

cms_ja.properties

key99=テスト

生成列表

key99[测试,test,テスト]

key100[只有中文,Null,Null]

映射成配置文件

cms_zh.properties

key99=测试

key100=只有中文

cms_en.properties

key99=test

key100=

cms_ja.properties

key99=テスト

key100=

S708、使用列表在编辑器上展现数据;

例如:

S709、国际化编辑器检测到增加国际化配置按钮被点击,需要增加国际化配置时,弹出国际化选择列表,检测所选择的语言;执行S710;

例如:

S710、判断该语言的国际化配置是否已经存在;如果判断已存在,则执行S711;如果判断不存在,则执行S712;

S711、提示该国际化配置已经存在;

例如:

英语 en

提示:

英语配置文件已经存在

S712、如果该语言的国际化配置不存在,则增加相应的配置文件,并将各个键值字段配置为空;继续执行S713;

例如:选择俄语

新增:cms_ru.properties

文件内容:

key99=

key100=

S713、在显示列表中增加相应语言列;

例如:俄语

列表:

S714、国际化编辑器检测到增加键值按钮被点击,需要增加键值时,在编辑国际化编辑器增加一行;执行S708;

列表:

S715、国际化编辑器检测到删除键值操作时,将选中的行从国际化编辑器删除;执行S708;

例如:选中key1行,点击删除键值,显示key1行被删除。

列表:

S716、国际化编辑器检测到修改键值操作时,将需要修改的键值,替换为新输入的修改内容;执行S708;

例如:修改空白行为key3,并添加国际化语言

列表:

S717、保存国际化配置列表,把编辑器中的所有键值按国际语言分别保存到相应的国际语言配置文件中;

例如:

cms_zh.properties

key2=再见

key3=只有中文

cms_en.properties

key2=Goodbye

key3=log in

cms_ja.properties

key2=さようなら

key3=ログイン

cms_ru.properties

key2=д о с в и д а н и я

key3=в о й т и

S718、不满足条件,提示不是标准国际化配置文件;

S719、退出国际化配置文件编辑器。

以上所述,仅是本发明的较佳实施例而已,并非对本发明作任何形式上的限制,虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明,任何熟悉本专业的技术人员,在不脱离本发明技术方案范围内,当可利用上述揭示的技术内容作出些许更动或修饰为等同变化的等效实施例,但凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与修饰,均仍属于本发明技术方案的范围内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1