CN105094941A - 一种实现多语言的方法及装置 - Google Patents
一种实现多语言的方法及装置 Download PDFInfo
- Publication number
- CN105094941A CN105094941A CN201510615342.9A CN201510615342A CN105094941A CN 105094941 A CN105094941 A CN 105094941A CN 201510615342 A CN201510615342 A CN 201510615342A CN 105094941 A CN105094941 A CN 105094941A
- Authority
- CN
- China
- Prior art keywords
- source language
- source code
- file
- variable
- character string
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Landscapes
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种实现多语言的方法及装置,该方法包括:读取源代码文件;遍历所述源代码文件,在所述源代码文件中查找出源语言;对所述源语言进行标记,生成新的源代码;编译所述新的源代码,直到编译通过为止;根据对所述源语言进行标记的标记信息提取出源语言,并按照目录结构保存在资源文件中。本发明所提供的实现多语言的方法及装置,能够快速对任何需要多语言的软件进行本地化,能够减少人工查找与修改的过程,从而提高了软件多语言化过程的效率。
Description
技术领域
本发明涉及软件多语言化技术领域,特别是涉及一种实现多语言的方法及装置。
背景技术
基于微软VisualStudio.NET平台软件开发环境开发的软件要实现多语言,基本上需要经历以下阶段:
将应用程序的可执行代码与应用程序的可本地化资源分开;
对于可本地化的资源进行整理,分离出需要翻译成其他地区的语言;
程序运行时根据不同的语言与区域设置加载不同的本地化资源。
很多软件刚开始设计的时候并没有考虑多语言,在完成以后(或即将完成时),出于种种考虑,可能又需要考虑实现多种语言。此时完成多语言势必要对已有的架构设计进行修改,很多代码要进行修改,工作量需要增加。此阶段属于以上多语言化第一阶段,通常的做法是人工遍历所有代码,从中查找出需要本地化的资源,修改现有的代码逐条保存到资源文件或数据库中,此过程将是一个耗时耗力的过程。
因此,提供一种能够简化代码查找与修改的过程,提高软件多语言化过程的效率的方法及装置是非常有必要的。
发明内容
本发明的目的是提供一种实现多语言的方法及装置,目的在于提高软件多语言化过程的效率。
为解决上述技术问题,本发明提供一种实现多语言的方法,包括:
读取源代码文件;
遍历所述源代码文件,在所述源代码文件中查找出源语言;
对所述源语言进行标记,生成新的源代码;
编译所述新的源代码,直到编译通过为止;
根据对所述源语言进行标记的标记信息提取出源语言,并按照目录结构保存在资源文件中。
可选地,所述读取源代码文件包括:
所述源代码文件以流的方式读入内存。
可选地,所述对所述源语言进行标记,生成新的源代码包括:
判断所述源语言是否为字符串变量,如果是,则对所述字符串变量的变量名进行标记;
如果否,则判定所述源语言为字符串常量,对所述字符串常量进行标记;
生成新的源代码。
可选地,所述判断所述源语言是否为字符串变量,如果是,则对所述字符串变量的变量名进行标记包括:
根据赋值符号判断所述源语言是否为字符串变量,如果是,则将所述字符串变量的变量名修改为以“xml_”为开头。
可选地,所述如果否,则判定所述源语言为字符串常量,对所述字符串常量进行标记包括:
如果否,则判定所述源语言为字符串常量,直接声明一个类的私有变量以“xml_”开头,将所述字符串常量替换。
可选地,所述对所述源语言进行标记,生成新的源代码进一步包括:
查找所有“xml_”开头的字符串片段,判断所述字符串片段是否为方法或属性的私有变量,如果是,则将所述字符串片段移到类的私有变量。
可选地,判断所述字符串片段是否为方法的私有变量包括:
根据关键字、代码块标记以及方法声明开始符号判断所述字符串片段是否为方法的私有变量。
可选地,所述根据对所述源语言进行标记的标记信息提取出源语言,并按照目录结构保存在资源文件中包括:
读取所述新的源代码中的字段和属性;
根据“xml_”字段,将字段名称和值按照目录结构写入资源文件。
可选地,所述根据对所述源语言进行标记的标记信息提取出源语言,并按照目录结构保存在资源文件中包括:
资源文件以命名空间为文件夹递归保存,每个文件夹保存一个资源文件。
本发明还提供了一种实现多语言的装置,包括:
读取模块,用于读取源代码文件;
查找模块,用于遍历所述源代码文件,在所述源代码文件中查找出源语言;
标记模块,用于对所述源语言进行标记,生成新的源代码;
编译模块,用于编译所述新的源代码,直到编译通过为止;
提取模块,用于根据对所述源语言进行标记的标记信息提取出源语言,并按照目录结构保存在资源文件中。
本发明所提供的实现多语言的方法及装置,通过读取源代码文件,在源代码文件中查找出源语言,进行标记后生成新的源代码,对新的源代码进行编译直到编译通过,然后根据标记的信息提取出源语言,并按照目录结构保存在资源文件中。本发明所提供的实现多语言的方法及装置,能够快速对任何需要多语言的软件进行本地化,能够减少人工查找与修改的过程,从而提高了软件多语言化过程的效率。
附图说明
图1为本发明所提供的实现多语言的方法的一种具体实施方式的流程图;
图2为本发明所提供的实现多语言的方法的另一种具体实施方式的流程图;
图3为本发明所提供的实现多语言的装置的一种具体实施方式的结构框图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面结合附图和具体实施方式对本发明作进一步的详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明所提供的实现多语言的方法的一种具体实施方式的流程图如图1所示,该方法包括:
步骤S101:读取源代码文件;
步骤S102:遍历所述源代码文件,在所述源代码文件中查找出源语言;
步骤S103:对所述源语言进行标记,生成新的源代码;
步骤S104:编译所述新的源代码,直到编译通过为止;
步骤S105:根据对所述源语言进行标记的标记信息提取出源语言,并按照目录结构保存在资源文件中。
本发明所提供的实现多语言的方法,通过读取源代码文件,在源代码文件中查找出源语言,进行标记后生成新的源代码,对新的源代码进行编译直到编译通过,然后根据标记的信息提取出源语言,并按照目录结构保存在资源文件中。本发明所提供的实现多语言的方法,能够快速对任何需要多语言的软件进行本地化,能够减少人工查找与修改的过程,从而提高了软件多语言化过程的效率。
本发明所提供的实现多语言的方法的另一种具体实施方式的流程图如图2所示,该方法包括:
步骤S201:读取源代码文件;
在本实施例中,上述读取源代码文件的过程可以具体为:源代码文件以流的方式读入内存。
步骤S202:遍历所述源代码文件,在所述源代码中查找出源语言;
步骤S203:判断所述源语言是否为字符串变量,如果是,则对所述字符串变量的变量名进行标记;
具体地,可以根据赋值符号判断所述源语言是否为字符串变量,如果是,则将所述字符串变量的变量名修改为以“xml_”为开头。
步骤S204:如果否,则判定所述源语言为字符串常量,对所述字符串常量进行标记;
具体地,可以在判定源语言为字符串常量后,直接声明一个类的私有变量以“xml_”开头,将该字符串常量替换。
步骤S205:生成新的源代码;
步骤S206:编译所述新的源代码,直到编译通过为止;
步骤S207:根据对所述源语言进行标记的标记信息提取出源语言,并按照目录结构保存在资源文件中。
作为一种优选实施方式,本发明在对所述源语言进行标记,生成新的源代码的过程中还可以进一步包括:
查找所有“xml_”开头的字符串片段,判断所述字符串片段是否为方法或属性的私有变量,如果是,则将所述字符串片段移到类的私有变量。
其中,可以具体根据关键字、代码块标记以及方法声明开始符号判断所述字符串片段是否为方法的私有变量。
通过这样的设置,能够使得查找的过程更加快速。
作为一种优选实施方式,本发明实施例在根据对所述源语言进行标记的标记信息提取出源语言,并按照目录结构保存在资源文件中可以具体为:
读取所述新的源代码中的字段和属性;
根据“xml_”字段,将字段名称和值按照目录结构写入资源文件。
作为一种优选实施方式,本发明实施例中根据对所述源语言进行标记的标记信息提取出源语言,并按照目录结构保存在资源文件中可以具体为:
资源文件以命名空间“namespace”为文件夹递归保存,每个文件夹保存一个资源文件。
下面通过一个具体实施过程对本发明所提供的实现多语言的方法进行进一步说明。需要指出的是,本发明所提供的方法及装置可以用于基于VisualStudio.NET平台软件开发环境所开发的软件中。本实施例中的源语言以中文为例,其具体过程包括:
1、分析代码并修改的过程:
(1)将源代码文件以流的方式读入内存;
(2)使用正则表达式在源代码文件中找出中文;
(3)根据赋值符号“=”判断此中文是否是字符串变量,如果是,则找出变量名,将变量名修改为以“xml_”开头;
(4)如果是字符串常量(没有赋值“=”),则直接声明一个类的私有变量以“xml_”开头,将此字符串常量替换;
(5)查找所有“xml_”开头的字符串片段,根据“class”、“public”、“protected”“private”、“static”等关键字以及代码块标记“{”及“}”和方法声明开始“){”判断此字符串片段是否为方法内部变量,如果是,则将此字符串片段移到类的私有变量;
(6)另存文件,重复执行以上步骤,遍历所有源代码,以生成新的源代码解决方案。
2、重新编译新的源代码,修改因改动代码造成的错误,直到编译通过。
3、生成资源文件集的过程:
浏览到一个解决方案的文件夹,
(1)进入debug(或release)文件夹;
(2)依次加载当前文件夹下的所有程序集;
(3)采用反射机制读出所有的字段和属性;
(4)判断类似“xml_”字段,将字段名称和值写入资源文件;
(5)如果字段或属性是控件,则将控件名和控件的“Text”属性值写入资源文件,资源文件以命名空间“namespace”为文件夹递归保存,每个文件夹保存一个资源文件。
本发明所提供的实现多语言的装置的一种具体实施方式的结构框图如图3所示,该装置包括:
读取模块100,用于读取源代码文件;
查找模块200,用于遍历所述源代码文件,在所述源代码文件中查找出源语言;
标记模块300,用于对所述源语言进行标记,生成新的源代码;
编译模块400,用于编译所述新的源代码,直到编译通过为止;
提取模块500,用于根据对所述源语言进行标记的标记信息提取出源语言,并按照目录结构保存在资源文件中。
本发明所提供的实现多语言的装置,通过读取源代码文件,在源代码文件中查找出源语言,进行标记后生成新的源代码,对新的源代码进行编译直到编译通过,然后根据标记的信息提取出源语言,并按照目录结构保存在资源文件中。本发明所提供的实现多语言的装置,能够快速对任何需要多语言的软件进行本地化,能够减少人工查找与修改的过程,从而提高了软件多语言化过程的效率。
本发明所提供的实现多语言的装置,其输入为源代码解决方案的路径,此源代码需要编译通过并生成应用程序可执行文件及相关库文件,输出为此解决方案的所有资源文件集合。
本发明所提供的实现多语言的装置与上述方法相对应,在此不再赘述。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (10)
1.一种实现多语言的方法,其特征在于,包括:
读取源代码文件;
遍历所述源代码文件,在所述源代码文件中查找出源语言;
对所述源语言进行标记,生成新的源代码;
编译所述新的源代码,直到编译通过为止;
根据对所述源语言进行标记的标记信息提取出源语言,并按照目录结构保存在资源文件中。
2.如权利要求1所述的实现多语言的方法,其特征在于,所述读取源代码文件包括:
所述源代码文件以流的方式读入内存。
3.如权利要求1所述的实现多语言的方法,其特征在于,所述对所述源语言进行标记,生成新的源代码包括:
判断所述源语言是否为字符串变量,如果是,则对所述字符串变量的变量名进行标记;
如果否,则判定所述源语言为字符串常量,对所述字符串常量进行标记;
生成新的源代码。
4.如权利要求3所述的实现多语言的方法,其特征在于,所述判断所述源语言是否为字符串变量,如果是,则对所述字符串变量的变量名进行标记包括:
根据赋值符号判断所述源语言是否为字符串变量,如果是,则将所述字符串变量的变量名修改为以“xml_”为开头。
5.如权利要求4所述的实现多语言的方法,其特征在于,所述如果否,则判定所述源语言为字符串常量,对所述字符串常量进行标记包括:
如果否,则判定所述源语言为字符串常量,直接声明一个类的私有变量以“xml_”开头,将所述字符串常量替换。
6.如权利要求5所述的实现多语言的方法,其特征在于,所述对所述源语言进行标记,生成新的源代码进一步包括:
查找所有“xml_”开头的字符串片段,判断所述字符串片段是否为方法或属性的私有变量,如果是,则将所述字符串片段移到类的私有变量。
7.如权利要求6所述的实现多语言的方法,其特征在于,判断所述字符串片段是否为方法的私有变量包括:
根据关键字、代码块标记以及方法声明开始符号判断所述字符串片段是否为方法的私有变量。
8.如权利要求6所述的实现多语言的方法,其特征在于,所述根据对所述源语言进行标记的标记信息提取出源语言,并按照目录结构保存在资源文件中包括:
读取所述新的源代码中的字段和属性;
根据“xml_”字段,将字段名称和值按照目录结构写入资源文件。
9.如权利要求1至8任一项所述的实现多语言的方法,其特征在于,所述根据对所述源语言进行标记的标记信息提取出源语言,并按照目录结构保存在资源文件中包括:
资源文件以命名空间为文件夹递归保存,每个文件夹保存一个资源文件。
10.一种实现多语言的装置,其特征在于,包括:
读取模块,用于读取源代码文件;
查找模块,用于遍历所述源代码文件,在所述源代码文件中查找出源语言;
标记模块,用于对所述源语言进行标记,生成新的源代码;
编译模块,用于编译所述新的源代码,直到编译通过为止;
提取模块,用于根据对所述源语言进行标记的标记信息提取出源语言,并按照目录结构保存在资源文件中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510615342.9A CN105094941B (zh) | 2015-09-24 | 2015-09-24 | 一种实现多语言的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510615342.9A CN105094941B (zh) | 2015-09-24 | 2015-09-24 | 一种实现多语言的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105094941A true CN105094941A (zh) | 2015-11-25 |
CN105094941B CN105094941B (zh) | 2018-11-02 |
Family
ID=54575450
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510615342.9A Expired - Fee Related CN105094941B (zh) | 2015-09-24 | 2015-09-24 | 一种实现多语言的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105094941B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107329957A (zh) * | 2017-05-18 | 2017-11-07 | 网易(杭州)网络有限公司 | 替换代码中文字符串的方法以及计算机可读存储介质 |
CN108334394A (zh) * | 2018-01-31 | 2018-07-27 | 广州市全周至程软件技术有限公司 | 多语言软件系统基础数据的多语言处理方法与装置 |
CN110275712A (zh) * | 2019-06-27 | 2019-09-24 | 深圳前海微众银行股份有限公司 | 一种文本替换方法、装置及设备 |
CN110647371A (zh) * | 2019-08-22 | 2020-01-03 | 深圳联友科技有限公司 | 一种基于业务配置的多语言资源文件解析方法和系统 |
CN110825470A (zh) * | 2019-09-19 | 2020-02-21 | 五八有限公司 | 应用程序语言本地化方法、装置、电子设备及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1506875A (zh) * | 2002-12-12 | 2004-06-23 | 华为技术有限公司 | 语言本地化中特征字符串的提取与替换方法 |
CN1547116A (zh) * | 2003-12-16 | 2004-11-17 | 艾默生网络能源有限公司 | 软件中语言资源本地化的实现方法 |
CN1885265A (zh) * | 2005-06-24 | 2006-12-27 | 国际商业机器公司 | 在无需修改源代码的情况下本地化java gui应用的系统和方法 |
CN102109958A (zh) * | 2011-03-04 | 2011-06-29 | 深圳市开立科技有限公司 | 实现多语言用户界面的方法和系统 |
CN103617046A (zh) * | 2013-12-12 | 2014-03-05 | 用友软件股份有限公司 | 一种扫描和提取目标系统源代码中待翻译的资源的方法和装置 |
-
2015
- 2015-09-24 CN CN201510615342.9A patent/CN105094941B/zh not_active Expired - Fee Related
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1506875A (zh) * | 2002-12-12 | 2004-06-23 | 华为技术有限公司 | 语言本地化中特征字符串的提取与替换方法 |
CN1547116A (zh) * | 2003-12-16 | 2004-11-17 | 艾默生网络能源有限公司 | 软件中语言资源本地化的实现方法 |
CN1885265A (zh) * | 2005-06-24 | 2006-12-27 | 国际商业机器公司 | 在无需修改源代码的情况下本地化java gui应用的系统和方法 |
CN102109958A (zh) * | 2011-03-04 | 2011-06-29 | 深圳市开立科技有限公司 | 实现多语言用户界面的方法和系统 |
CN103617046A (zh) * | 2013-12-12 | 2014-03-05 | 用友软件股份有限公司 | 一种扫描和提取目标系统源代码中待翻译的资源的方法和装置 |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107329957A (zh) * | 2017-05-18 | 2017-11-07 | 网易(杭州)网络有限公司 | 替换代码中文字符串的方法以及计算机可读存储介质 |
CN107329957B (zh) * | 2017-05-18 | 2020-08-18 | 网易(杭州)网络有限公司 | 替换代码中文字符串的方法以及计算机可读存储介质 |
CN108334394A (zh) * | 2018-01-31 | 2018-07-27 | 广州市全周至程软件技术有限公司 | 多语言软件系统基础数据的多语言处理方法与装置 |
CN108334394B (zh) * | 2018-01-31 | 2020-12-04 | 广东全程云科技有限公司 | 多语言软件系统基础数据的多语言处理方法与装置 |
CN110275712A (zh) * | 2019-06-27 | 2019-09-24 | 深圳前海微众银行股份有限公司 | 一种文本替换方法、装置及设备 |
CN110275712B (zh) * | 2019-06-27 | 2023-05-12 | 深圳前海微众银行股份有限公司 | 一种文本替换方法、装置及设备 |
CN110647371A (zh) * | 2019-08-22 | 2020-01-03 | 深圳联友科技有限公司 | 一种基于业务配置的多语言资源文件解析方法和系统 |
CN110825470A (zh) * | 2019-09-19 | 2020-02-21 | 五八有限公司 | 应用程序语言本地化方法、装置、电子设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN105094941B (zh) | 2018-11-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105094941A (zh) | 一种实现多语言的方法及装置 | |
AU2013290313B2 (en) | Method and system for automated improvement of parallelism in program compilation | |
CN103559449B (zh) | 一种代码改动的检测方法及装置 | |
CN106843840B (zh) | 一种基于相似度分析的源代码版本演化注释复用方法 | |
CN104899010B (zh) | 源代码的多语言化方法及系统 | |
CN103345412B (zh) | 打补丁的方法及装置 | |
CN103885770A (zh) | 单片机从可执行文件找回汇编文件的实现方法 | |
WO2021258692A1 (zh) | 一种多芯片兼容的编译方法和装置 | |
Cheng et al. | Clcminer: detecting cross-language clones without intermediates | |
Pit-Claudel et al. | Extensible extraction of efficient imperative programs with foreign functions, manually managed memory, and proofs | |
CN105446725A (zh) | 用于模型驱动开发的方法和系统 | |
EP3387525B1 (en) | Learning from input patterns in programing-by-example | |
CN102103493A (zh) | 一种软件语言国际化的方法 | |
WO2017014318A1 (ja) | 命令セットシミュレータおよびそのシミュレータ生成方法 | |
Vasilakis et al. | PaSh: light-touch data-parallel shell processing | |
CN104375875A (zh) | 用于应用程序的编译优化的方法以及编译器 | |
CN103914379A (zh) | 故障自动注入与故障检测的方法及其系统 | |
CN103235724A (zh) | 基于原子操作语义描述的多源二进制代码一体化翻译方法 | |
CN103309646B (zh) | 一种软件本地化的方法和装置 | |
CN106648822B (zh) | 界面字符串筛选方法及系统 | |
Rebele et al. | Adding missing words to regular expressions | |
CN102103495A (zh) | 一种图文包装编控软件的国际化系统 | |
CN104484156B (zh) | 多语言公式的编辑方法、编辑系统和多语言公式编辑器 | |
CN109313639A (zh) | Dbms中进行查询执行的系统和方法 | |
US20090106764A1 (en) | Support for globalization in test automation |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20181102 |