因为大家都是搞翻译的嘛,几乎每天都在和 XML 格式的文档打交道,只不过你可能不知道它是 XML 文档而已。比如(接下来你可能要惊叹了),我们用的 word 的.docx
文档,其实就是基于Office Open XML 标准的压缩文件格式,本质上就是一个 XML 文档。
是不是觉得不可思议,听都没听过?(接下来你可以拿一个docx的文档跟我一起试试:)
我们来看一个案例,这里有一个docx的文档,长这个样子:(我用Office word 打开的)
现在,我们对这个文档做如下操作:
docx
改为zip
格式,变成一个压缩包;document. XML
的文档,这就是原来的docx文档底层 XML 文档。在这里我用vscode打开的,你也可以用任何一款文本编辑器打开,比如电脑自带的记事本,或者常用的Notepad++,sublime之类的都可以~
如果你电脑没有,建议装一个~(选一个安装就行,不用都装~)
除此之外呢,我们现在用CAT工具嘛,翻译记忆库是.tmx
格式,其实.tmx
格式也是 XML 文档。
包括大家都熟悉的xliff
格式,也是 XML 文档~
所以我们就来看看什么是 XML 文档~
TMX 和 XLIFF 格式 我后面会讲~
百度百科是这样定义的:
XML(全称 Extensible Markup Language)可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。
我想,如果你是一个本地化新人伙伴,可能这里面没有一个能看懂的词:
字我都认识,组在一起,emmm,真的看不懂对不对~
所以我们看看先来看这几个“名词”。
语言,这里指的是计算机的语言。就像人之间交流用的是人类语言,什么中文、日语、英语等等不同的语言,当然也有手语、肢体语言等等,有了语言人与人之间才能交流~
可是,计算机理解不了人类语言。
所以我们要用计算机的语言,告诉计算机,“我在讲什么。”像小时候计算机课上学的0和1这种二进制数,就是一种机器语言(你可以理解为甲骨文),除此之外,还有HTML、GML、 XML 、C++、VC、VB、Delphi、Java、PHP、Python等等(你可以对标现在的中文、英文、日语等等),这些都是计算机的语言。
通过计算机语言,才能实现人与计算机进行交流和对话。
标记语言,Markup Language,是一种将文本以及文本相关的其他信息结合起来,展现出关于文档结构和数据处理细节的电脑文字编码。(摘自百度百科)
如果看不懂标记的定义的话,我拿人类语言的标记举例子。
小时候一定遇到过这张图片吧:红叉标记——老师给我打的标记,标记我这里好像做错了;
同理,我们也有过:
我们再回到标记语言这个话题,上述是人的标记。而这里的标记语言=标记计算机语言。
那,什么是标记计算机语言呢?
你可以理解为,给计算机文本用信息符号做个标记,告诉计算机“哦,这个符号代表啥文本信息,那个标记代表文本的啥结构”。(其实标记就是标签,tag)
在标记语言中,一定要说明:
举个例子,我写了这样一个标记。表示:
<note>
!哦~这是一个笔记或者备注;<to>Everyone</to>
!哦~给每个人的;<from>May</from>
!哦~原来是 May 发给大家的;<heading>Say hello</heading>
!哦~原来是 May 跟大家打招呼的;<body>This is May.</body>
!哦~原来是 May 跟大家打招呼,介绍了下自己。上下结构和内容都很清楚,对不对?
你可能会有这样一个疑问:“那,我想怎么写就怎么写吗?”
比如,我在文本前输入井号加一个空格
,告诉计算机“只要是见到井号+空格,就表示标题。——这样可以吗?
是的,在标记语言中,你想标记什么就标记什么,你想怎么定义结构就怎么定义结构,你想怎么写就怎么写,只要你和你的计算机商量好了就行。
但是这会有一个问题,就是:但凡换一台计算机,都不知道你在说什么。那咋办?
为了解决“让大家都明白”的问题,在1986年国际标准化组织出版发布了一个信息管理方面的国际标准(ISO 8879:1986信息处理),也就是标准通用标记语言。
标准通用标记语言,Standard Generalized Markup language,中文简称“通标语言”,英文简称SGML,就是计算机的文本结构和描述内容的国际标准语言。字面意思其实就可以理解:标记语言是标准通用的,只要你按照这个标准,甭管是哪台计算机,都遵循一个规范,这样就“听”得懂你说的啥,也就能顺利全球沟通啦~
既然是国际标准规范,那遵循什么规范呢?
一份“通用标言”文档可能有三部分组成:
如果你想了解更多,建议自己去查一下~
不同的文档有不同的文档样式,比如我们的HTML文档有HTML文档的国标样式,你要是写HTML文档,遵循这个标准就行。
比如:
<p>这是一句话</p>
这是一句话
是段落。——这样就给文本赋予了一个段落结构。如果你还是看不懂,你可以随意打开你的一个页面,查看这个页面的源代码。
对于这样一个文本而言,好处是什么呢?——你可以很清楚地看到这文本的布局。如果把源代码关掉,就可以看到图片、排版对不对?
可是问题呢?——HTML的复用率很低。你的文本格式、图片大小、宽度、固定值啥啥都固定了,当然很难复用了。
那怎么办?——变成可扩展标记语言,也就是 XML 嘛~
XML 的全称是 Extensible Markup Language 就是 XML 的全称,我猜是因为发音就是/ex/=X,所以才缩写为 XML ,而不是 EML。我也查了一些资料,没找到什么答案,你们要是感兴趣可以自己研究研究~分享给我呀~
如果我们了解了标记语言,那“可扩展”应该比较容易理解,就是:你可以由一个 XML 扩展到新的语言,比如: WAP 和 WML 语言。
你只需要记住 XML 的几个特征:
<seg>
,<source>
等。既然标签名是自定义的,那么在用CAT工具翻译的时候就需要明确标签的名称;当然,有的名称来源于 XML 文件本身,但是有些来源于用于创建 XML 文件的定义文件,如 DTD(document type definition文档类型定义)文件, XSD( XML SCHEMA Definition)文件(定义 XML 文档的合法构建模块)。既然 XML 也是SGML,那么 XML 当然要遵循 SGML 的规范。
我们一起来看一个 XML 文档。
<topic>
的子元素这样,就构成了一个完整的 XML 文档啦~
如果你听不懂上面讲的什么声明语句,也没关系,我们详细看一下这个 XML 的组成。
我们拿上文提到的这个 XML ,给大家举例。
这是怎么组成的呢?
XML 声明是 XML 文档的第一句,描述了版本号和编码,其格式如下:<? XML version=”1.0″ encoding=”utf-8″?>
你可以理解为这是 XML 的自我介绍:“Hi,我是一个 XML 文档的1.0版本,是 utf-8 编码格式。”
我们把代码片段中,从最左侧的尖括号到最右侧的尖括号之间的所有内容称为“元素”,英文名是Element,是 XML 文档中很重要的组成部分。
XML 元素包括标签、文本、属性、注释等等,比如:<text>Introduction</text>
,这就是一个元素。
一个 XML 文档可能包含很多的元素。
我们先来看看标签。
关于标签,你需要了解:
<text>
和</text>
,都是标签,标签名是text。标签名一般不翻译。<text>
是开始标签,</text>
是结束标签。 具有同一个标签名的“开始标签+结束标签”是一对标签对,比如:<text></text>
是一对。标签对之间的文本,我们称为元素内容。
关于文本,你需要了解:
<emphasis></emphasis>
标签对。<text></text>
,有时把这样的标签也可写成<text/>
(斜杠在元素名称后面),这样的元素我们称为空标签,或者独立标记。你可能会问,空标签还需要翻译吗?——也要分析,我们往下看。但是文本并不是你想写啥就写啥,有时候得换个写法才能呈现你想写的内容,也就是得改为实体。
关于实体,你只需要了解:
XML 规范规定,如果下列字符出现在要显示的文本中(在我们的例子中是要翻译的),它们应该写成实体。
如果你想要 | 你需要改为: |
---|---|
< (小于号) | < |
> (大于号) | > |
&(和) | & |
‘ (英文单引号) | ' |
” (英文双引号) | " |
如果你看不懂,我举个例子。
如果你想要这个文本:
你的 XML 应该怎么写呢?
看见了吗?大于号不是>,而是 >
,单引号不是’,而是 '
。这就是实体。
这告诉我们什么呢?——如果你在 XML 中遇到了实体,是不是要考虑在翻译的过程中把这些实体设置为标签呢?
如何设置标签,参见:正则篇(六):用正则将文本标记为标签
关于属性,你需要了解:
<button value="Cancel" />
,这个标签的意思是:
我们回到再来回顾一下,今天讲了什么?
<text>...</text>
value="OK"
"
那,作为一名PM或者译员,了解 XML 的注意事项是什么呢?
<button value="OK" />
中,button 和 value不能动。<text>...</text>
<image.../>
。那,这样的 XML 文档如何用 memoQ 解析?
在翻译一个文档时,最主要的选择和设置准确的过滤器, XML 文档也不例外。
memoQ中有默认的XML 过滤器,基本可以实现你对 XML 文档的需求。
不论是什么 XML 文档,都可以直接导入进memoQ,如果导入后发现导入的内容不对,那么我们再说~
那我们看看翻译 XML 文档有哪些需求,以及memoQ的过滤器如何解决。
正如我前两篇文章讲的,翻译单语言的 XML 文档一般就以下几个需求:
(1)标签名和属性名不能翻译。
——OK,memoQ的 XML 过滤器帮我们自动识别标签名和属性名。
这样我只需要翻译标签之间的文本,可以忽略标签名,就保证了标签名和属性名称不会被译员随意翻译和修改。
(2)标签文本和属性值要译前分析,比如是否可译?是否是条件?是否是注释?等。
——好办!我可以在这个 XML 过滤器中设置可译文本和条件,定义哪些标签对之间的文本要翻译?或者不翻译?哪些属性值要翻译或者不翻译?哪些属性值是注释?哪些属性值是条件?等等。
这样我在翻译的时候,非译的内容就不会影响到我,而且我就可以实时看到各种条件和属性了~
当然,以上提到的具体细节,我拿几个案例文档来演示。
我已经在memoQ中创建了一个项目,语种是英文翻译至简体中文。
以下所有的 XML 文档都在这一个项目中导入。
常规的 XML 一般只需要翻译标签对之间的文本。
我可以直接导入.导入后,
还有一些文本,标签对之间是有行内标签的,
我可以把标签设置为行内标签。
如果标签对之间的文本不需要翻译,
我也可以设置为非译。
前面讲个,XML XML 文档中也是有属性值的。
如果属性值需要翻译,我也可以把需要翻译的属性值设置为要翻译,或者非译。
有些属性值当中是包含条件的。比如下图中,我们希望:只有 translate 属性值是 yes 的时候,文本/另一个属性值才翻译。
我就可以设置翻译/非译条件。
回顾这一节的内容,我讲了:
当然,我们还有其它的 XML 文档,比如:
我们继续看~
我这里有一个文本:
里面有一堆看上去乱七八糟的东西,比如:<
和 >
。——这些乱七八糟的东西其实是实体。
如果你看不懂这个文档,那么我再给你放另一个图:
其实有些同学可能发现了,上述两个图,除了第一张图多了一些乱七八糟的“实体”,其它都是一样的。
是的,这两个文档就是同一个文档,只是写法不同。
为什么写法不同呢?我们先讲实体的概念。
XML 规范规定,如果有些字符(详见下列表格)出现在要显示的文本中,它们应该写成实体。
如果你想要 | 你需要改为: |
---|---|
< (小于号) | < |
> (大于号) | > |
&(和) | & |
‘ (英文单引号) | ' |
” (英文双引号) | " |
我们来看个例子。
假设你想实现的文本是:
你的 XML 就应该这么写:
你瞅瞅,在这里:
>
'
这就是实体。
XML 的实体是对数据的引用,而不是直接使用该数据。
通过上述表格,我们也发现了,实体的标准写法是:
那,遇到包含实体的文本,应该怎么翻译呢?
我们回到这个文档:
如果把这个文档直接导入memoQ进行翻译,默认情况下,memoQ默认的 XML 过滤器就可以自动识别这样的文本。
所以,如果这个文本直接导入memoQ,会是这样的:
是的,我们发现了:
<
转为了 <
,>
转为了>
。这时候我们也发现,咦,memoQ自动转换为HTML的样式了:
<br>
不就是一个换行标签嘛!<b>
不就是一个加粗样式嘛!所以你可以理解为:这个文本是在 XML 基础上包含了HTML样式。
那就简单了,我们可以用层叠过滤器决。
关于层叠过滤器,你可以查看帮助文档:https://docs.memoq.com/current/en/Places/create-new-filter-cascading.html?Highlight=cascading%20filter
我们以后也会再讲,慢慢涨姿势~
重新导入后,就OK啦!
该变为标签的也变为标签啦~
这样就不用担心出现字符串误译或者丢失的问题啦~
包含CDATA的 XML 也是应用程序本地化中常遇到的一种文档格式。
我们先来看它长什么样子:
我们发现它是符合 XML 标准的:
<? XML version="1.0" standalone="no"?>
<doc>
<para>
是<doc>
的子元素。但是也有点不一样,就是多了一些<![CDATA[...]]
的东西。
这就是 CDADA 文档。
那么它到底是个什么,又该如何翻译呢?
今天带大家看看~
如果我讲的不对,还请各位来批评啦~~~
我们知道,计算机在读取编程文件的时候,是一行一行来读的。
我用前面的 XML 文档为例。
计算机就会先读取第一行:<? XML version...?>
,然后计算机就知道了:“哦,原来是个 XML 文档,要识别为 XML 文档~”。
然后继续往下读<sample>
,“哦,是个示例呀~”。
可是如果遇到走不通的地方,计算机读不懂,就会提示你:“哎呀,出错惹,我读不懂啊”。(这就是我们经常说的报错。)
可是为什么会有报错呢?可能的原因有:
第一个原因我就不说了,自身原因自己找找看咯~
第二个原因,怎么解决呢?
'
读不懂,就改为'
怎么解决呢?我们看看 CDATA 是什么。
CDATA 的全名是character data。
在 XML 文档中,文本均会被计算机读取和解析,但是被 CDATA 包起来的文本除外。
比如某些代码,包含像 <
、 >
、&
等字符,我们可以将其定义为 CDATA,这样计算机就不会读这部分内容,也就会减少出错了。
CDATA 部分由<![CDATA["
开始,由 "]]>
结束:
我们还是以本文开篇的 CDATA 文档为例,这次我们用 Chrome 打开看一下。
我们发现,由 CDATA 包起来的内容是没有读取的哦~
计算机想:“我干脆不读了,就不出错了嘛对不对~”。
是的,的确是这样,可是也不对。
我们其实想要的结果是:
我不管你是什么Java XML HTML 语言,你还是要读的,也还是要翻译的。
(当然了,辛辛苦苦写出来肯定是要用的,既然要用,当然要翻译了。)
这可如何是好呢?遇到 CDATA 该怎么翻译呢?
不要着急,都可以解决~
我们先看源文档:
其实不是不能读,是不能用 XML 读了,要用它支持的语言读。
就像我们搞翻译一样,如果遇到原文本(英语)中夹杂了法语,难道你不翻译了?当然不是,不是不翻译了,是不把原文本作为英语翻译,而是要翻法语。
所以:如果要翻译出 CDATA 的部分,必须要知道 CDATA 包起来的部分是什么。
在这个例子中,我们发现,其实被 CDADA 包起来的内容是 HTML 样式,像<p>
、<b>
都是,当然也有实体,像&amul;
、ö
。
所以这就简单了嘛,我们还是用层叠过滤器:
当当当当~我丢~竟然在最后一行有个漏网之鱼:####NAME####
~
记得怎么用正则标注标签吗?不记得看这里回顾:正则篇(六):用正则将文本标记为标签
但是除此之外,我们也会遇到多语言的 XML 文档,尤其是游戏本地化和应用程序本地化中。
所以,今天带大家看看,多语言的 XML 文档长什么样子,以及如何翻译。
先来看一个多语言的 XML 文档示例,其实和单语言的也差不多,但是又有所不同。
我们来分析一下这个 XML :
<? XML version="1.0" encoding="utf-8"?>
<Config>
<Menu>
、<Item>
、<lang_DE>
、<lang_EN>
、<lang_FR>
、<lang_JP>
、<lang_ZH>
等。<lang_DE>
代表德语;<lang_EN>
代表英语;<lang_FR>
代表法语;<lang_JP>
代表日语;<lang_ZH>
代表简体中文;<Item>
元素还包含两个属性,其中:
segorigion
是注释;segID
是上下文。认识了这个 XML 文档,应该怎么翻译呢?继续往下读。
我们一直在讲,翻译首先要设置对过滤器,翻译多语言的 XML 文档也不例外。
多语言的 XML 文档需要用多语言 XML 过滤器,通过设置XPATH实现。
我们看一下具体操作:
多语言文档肯定项目也要多语言。所以首先要创建多语言项目。
在这个项目中,我的源语言是英文,目标语言是德语、法语、日语、中文(中国大陆)。
需要注意的是:多语言项目要记得为每个语种设置记忆库。
术语库可以是一个多语言的术语库。
Step 1:选择性导入 > 选择 XML 文档 > 更改过滤器和配置 > 选择多语言 XML 过滤器 > 点击编辑导入规则。
Step 2:跳转至XML 导入规则窗口,我可以在左侧点击各个元素,预览 XML 全局。
Step 3:(重点!!!)设置 XPath。
多语言的 XML 文档是通过 XPath 来实现的。所以我们要定义每个内容,设置完成一个内容就可以点击“保存至规则集合”。
内容规则说明如下:
//lang_DE
,选择memoQ语言为德语;//lang_EN
,选择memoQ语言为英语;//lang_FR
,选择memoQ语言为法语;//lang_JP
,选择memoQ语言为日语;//lang_ZH
,选择memoQ语言为简体中文;segID
是上下文,所以输入:
//Item/@segID
//Item/@segorigin
点击完“保存至规则集合”,会在左侧预览设置好的内容。
说明如下:
全部内容设置完成后,预览如下:
Step 4: 点击“确定”,预览设置后的导入规则;
Step 5: 点击“确定” > 确定,完成多语言 XML 文档的导入
首先,打开文档,预览并翻译。在这里,我用的小牛机器翻译进行预翻译。
翻译后导出。我们发现,导出后的译文,每个语种都应该在自己应该在的位置:
<lang_DE>
为德语;<lang_EN>
为英语;<lang_FR>
为法语;<lang_JP>
为日语;<lang_ZH>
为简体中文;再来复习普通 XML 长什么样子:
在这里,
<? XML version="1.0" encoding="utf-8"?>
是声明语句。<sample>
就是根元素了,根元素之间还有子元素<document>
<document></document>
或者独立标记要完整标记:<button/>
有时候,我们也会收到这样的文件包:文件包里既有 XML 文档,又有一个dtd文档。
如果打开其中一个 XML 文档,是长这样的:
咦,细心的同学会发现:似乎和普通的 XML 不一样哦~
这个文档多了第二行:
<!DOCTYPE PartPage PUBLIC "-//Interleaf//DTD partpage//EN" "partpage.dtd">
——其实,这是DOCTYPE 声明的内容,用来告诉你:“这是这个文档类型是一个PartPage,引用的是外部的partpage.dtd文档”。
咦,细心的同学更会发现:这个第二行的最后”partpage.dtd”不就是文件包中的后缀名为*.dtd的partpage.dtd文档嘛!
是的!如果你打开这份*.dtd文档(其实这就是一个ASCII的文本文件)——也就是包含 DTD 的 “partpage.dtd” 文件,长这样:
这就是含有 DTD 的 XML 文档!那,DTD 是什么鬼?
DTD 是英文Document Type Definition的首字母缩写,中文意思为“文档类型定义”。
通过DTD我们可以验证 XML 是“合法”,也就是说:验证你的 XML 文档结构是否拥有正确语法,或者你可以理为是否符合要求。
如果你不想知道这是什么,也可以直接往下划,直接看如何翻译含有DTD的 XML ,找到方法论。
那么问题来了:
首先,在原 XML 中已经声明了:<!DOCTYPE PartPage PUBLIC "-//Interleaf//DTD partpage//EN" "partpage.dtd">
,你可以理解为自我介绍:
“Hi 我引入partpage文档;”
我们看一下DTD的这个构成:
在 DTD 中,元素通过ELEMENT来进行声明。语法如下:
<!ELEMENT 元素名称 (元素内容)>
所以我们看第2行,说明了:
根元素PartPage
元素应该包含哪几个子元素,这里有VendorInfo
、PartInfo
、Description
、Service
等。
所以你会发现,在右侧的正文 XML 中就是按照这几个元素及关系在定义的。
再比如第7行就定义了:父元素<VendorInfo>
应该包含Name
、Contact
两个子元素。
那元素名右上角的星号(*)、加号(+)号等等是什么意思呢?
类似我们前面讲的正则的符号表示,详见:正则篇(一):认识正则表达式:
所以,在上图中,右侧的 XML 文件有VendorInfo
、PartInfo
、Description
、Service
元素,但是没有<GeneralProcs>
或者<Operation>
等元素。
但是我们再看下图,在右侧的 XML 中就有了<GeneralProcs>
元素,但是却没有Service
元素。
在 DTD 中,属性通过 ATTLIST 声明来进行声明。语法如下:
<!ATTLIST 元素名称 属性名称 属性类型 默认值>
比如这里的第100行:
<priority>
属性类型是CDATA。关于CDATA,参见:翻译包含HTML样式的 XML 文档 (CDATA篇)#IMPLIED
,表示priority 属性不是必需的。所以第53行的Item有priority属性,但是像69行、74行、79行就没有priority属性。更多属性类型和默认值你可以去网络上搜索啦~
前面我们讲过 XML 的实体,详见:翻译包含HTML样式的 XML 文档(实体篇)。
在 DTD 中,实体通过 ENTITY 来进行声明:<!ENTITY 实体名称 "实体的值">
,或者<!ENTITY 实体名称 SYSTEM "URI/URL">
。
因为这个文档中没有,所以我不介绍了,大家需要去网络上自查啦~
如果你已经懂了DTD是什么,特别好~我们继续讲DTD怎么翻译~
当然,emmmm听不懂。没关系,真的没关系,其实定义和构成也不是很重要~
说实话我也看得不是很懂,写 DTD 的时候我也是查各种资料,问我各种搞开发的朋友们~感谢感谢!)
但是我们是搞翻译的嘛!又不是搞编程的!我只要知道文档怎么翻译就好了!不用管你什么标签什么乱七八糟的对不对~(反正我是这样想的~)
我真的努力讲惹,如果我讲不明白,那我真的尽力了~你可以从网上找找其它关于DTD的资料~
所以我们继续看如何翻译包含DTD的 XML 文档~
在翻译包含DTD的 XML 时,可以有2步:
如果觉得步骤麻烦,也可以直接拖到本文底部,找到操作视频,看视频即可~
在正式启动翻译之前,我们要检查源文档和翻译包。
你需要检查:
1、发送过来的翻译包是单个文档还是多个文件的翻译包;如果是多个文档的翻译包,哪几个文档需要翻译?
比如这个翻译包:文件包里有4个 XML 文档,以及一个dtd文档。
2、检查需要翻译的 XML 文档,看一下源文 XML 文档是否有外部引用;
比如,下图中就包含了一个”partpage”的dtd引用。
3、如果 XML 中有有外部引用,对比翻译包中的引用文档是否和声明中的引用一致。
在本案例中,根据上两张图,发现翻译包中的引用文档和声明中的引用是一致。
OK,既然收到的翻译包没有明显的错误,那我们导入memoQ进行翻译,试试看。
我们前面一直讲:导入翻译文档,需要设置正确的过滤器。
那么,包含DTD的 XML 文档应该如何配置呢?
当然,在CAT中,过滤器也可以叫解析器。都一样~
配置过滤器有三个步骤:
既然是 XML 文档,那么我们就用 XML 过滤器即可。
所以在导入时,选择:导入 -> 找到需要翻译的4个 XML 文档 ->选择 XML 过滤器,如下图所示。
默认的过滤器不能满足我们的需要,所以我们可以更改过滤器配置。
操作如下:
1、在文档导入选项 -> 点击“更改过滤器配置” -> 跳转出“文档导入设置”窗口;
2、在“文档导入设置”窗口 -> 点击“DTD/架构文件”的“浏览” -> 选择正确的dtd文档;
3、点击“①标签和属性” -> 配置 XML 过滤器。具体如下:
更多关于 XML 翻译的解析器设置,请参考:如何翻译单语 XML 文档?
4、过滤器配置完成后,点击确定即可导入翻译文档~
按照前面的操作,导入后如下图所示:
但是这样就完事大吉了嘛?NONONO!
为了保障译文的格式准确性,我们要测试,看一下译文是否可以按照目标语言顺利导出~
比如在这里,我借助小牛机器翻译,利用MT进行了预翻译。
更多关于MT预翻译的内容,参考:机器翻译在CAT中的应用
并把MT的译文导出检查一下~如果导出后的译文如图所示,可以顺利显示,就说明是OK的:
果然没问题,那我们就可以正式启动翻译啦~
更多关于memoQ翻译的操作,详见:memoQ单机版入门指南。
给大家一个思考题:如果导出的译文是乱码,如下图所示,请问怎么解决呀~
这其实是在进行应用程序本地化中的另一个常见问题:编码问题。回头分享~
有时还会遇到一个 DTD 的替代者,XML Schema Definition(XSD),也是定义 XML 文档的合法构建模块,非常类似 XSD,也是应用程序本地化中常见的文档。
所以,我们来简单了解一下XML Schema Definition(XSD)。
XML Schema 的作用是定义 XML 文档的合法构建模块。
其实真的定义跟 DTD 也差不多~
通过XSD我们可以验证 XML 是“合法”,同理,我们通过xsd也是为了验证 XML 是否“合法”。
在这里我用一个翻译包给大家看一下:
文件包里既有 XML 文档,又有一个 *.xsd 文档。如图所示。
其实如果你在自己电脑中检索xsd的话,也会找到很多xsd文档,只不过你可能不知道而已。
比如我在我电脑里用 Everything 进行检索,就找到很多XSD文档,如图所示。
OK,这是题外话,我们回到接收到的翻译包。如果打开这两个文档,如图所示。
我们发现:
<Root>
,是右侧XSD文档第3行的name属性值;<Customers>
,是右侧XSD文档第6行的name属性值;<Customer>
,是右侧XSD文档第9行的name属性值。<xs:element>
属性值Root,就是左侧的 XML 的根元素<Root>
;<xs:element>
属性值Customers,就是左侧的 XML 的<Root>
的子元素<Customers>
。<Customer>
也是<Customers>
的子元素。<Customer>
,是可以出现0次-无数次的。当然还有很多其它的发现~
对 XML Schema来说,它可以:
所以说 XML Schema 比 XSD 更强大,而且据说很快会在大部分网络应用程序中取代 XSD。
如上图所示,首先,XSD也是 XML 文档,所以结构是符合 XML 的文档结构:
<? XML version="1.0" encoding="utf-8" ?>
是声明语句。<xs:schema>
就是根元素<schema>
元素。<schema>
元素可包含属性。一个 schema 声明往往看上去类似这样:<xs:schema XML ns:xs="http://www.w3.org/2001/ XML Schema">
<xs:element>
、<xs:complexType>
等。我们看一下XSD的这个构成。
当然,我的原则还是:只认识这个文档,看看它有没有明显的错误,能进行译前分析就好了~
所以,写程序,不是我的初衷,更不是我的目的~
在 XSD 中,元素依然是通过element来进行定义。语法如下:
<xs:element name="xxx" type="yyy"/>
其中:
所以,如图所示,
<CompanyName>
<ContactName>
<ContactTitle>
等;<Customers>
是根元素<Root>
的子元素;<Customer>
是元素 <Customers>
的子元素;更多关于XSD的元素和数据类型,你可以去网络上查找~
比如复合元素(complexType)是什么,在这个案例中,其实
<Root>
、<Customers>
就是复合元素。
在 XSD 中,属性通过 attribute 来进行声明。语法如下:
<xs:attribute name="xxx" type="yyy"/>
如图所示,在右侧XSD中就声明了:
元素<ShipInfo>
的属性是ShippedDate
,其属性值(左侧 XML 文档的第65行)应该是日期时间数据类型,也就是在右侧第72行看到的dateTime
。
更多属性介绍你可以去网络上搜索啦~
当然,其它内容xsd的介绍,大家感兴趣的话可以自行去网络上查找,比如:
通过sequence
元素来表示子元素出现的顺序,每个子元素可出现 0 到任意次数。
通过key
元素来指定属性或元素值(或一组值)必须是指定范围内的键。
当然还有其它的,我也不是程序猿,我也不会写,我只能看懂,所以我不班门弄斧了,大家需要去网络上自查啦~
如果你已经懂了XSD是什么,特别好~我们继续讲XSD怎么翻译~
当然,听不懂也没关系,真的没关系,其实定义和构成也不是很重要~
但是我们是搞翻译的嘛!又不是搞编程的!
我只要知道文档怎么翻译,保证本地化的质量就好了!
所以,我们继续讲XSD怎么翻译~。
在翻译包含XSD的 XML 时,也是有2步:
在正式启动翻译之前,我们要检查源文档和翻译包。
你需要检查:
1、发送过来的翻译包是单个文档还是多个文件的翻译包;如果是多个文档的翻译包,哪几个文档需要翻译?
比如这个翻译包:文件包里有1个 XML 文档,以及一个*.xsd文档。
明确一点:xsd是架构文件,不需要翻译,需要翻译的是其 XML 文档哦!
2、检查需要翻译的 XML 文档,看一下源文 XML 文档和xsd是否一致;
在这个案例中,我们发现:
<Root>
,是右侧XSD文档第3行的name属性值;<xs:element>
属性值Root,就是左侧的 XML 的根元素<Root>
。OK,既然收到的翻译包没有明显的错误,那我们就可以利用memoQ进行翻译了~
我们前面一直讲:导入翻译文档,需要设置正确的过滤器。
那么,包含XSD的 XML 文档应该如何配置呢?
和配置DTD完全一致!!!
我们在前面讲过,翻译包含DTD的 XML 文档,配置过滤器有三个步骤:
翻译包含架构文件的 XML 操作也是一模一样!
既然是 XML 文档,那么我们就用 XML 过滤器即可。
所以在导入时,选择:导入 -> 找到需要翻译的 XML 文档 ->选择 XML 过滤器,如图所示。
默认的过滤器不能满足我们的需要,所以我们可以更改过滤器配置。
操作如下:
1、在文档导入选项 -> 点击“更改过滤器配置” -> 跳转出“文档导入设置”窗口;
2、在“文档导入设置”窗口 -> 点击“DTD/架构文件”的“浏览” -> 选择正确的XSD文档;
3、点击“①标签和属性” -> “②填充”
4、自动弹出Namespace URL -> 点击确定
5、配置如图的 ③标签 和 ④标签属性
更多关于 XML 翻译的解析器设置,请参考:如何翻译单语 XML 文档?
过滤器配置完成后,点击确定即可导入翻译文档~
按照前面的操作,导入后如下图所示:
我们发现:编辑器的界面看上去都是OK的,比如:
但是,过滤器配置完,不代表万事大吉!!
记得我们之前讲过的编码问题吗?如图所示,虽然翻译好了,但是导出后的编码有问题。
所以说,为了保障译文的格式准确性,我们要测试,看一下译文是否可以按照目标语言导出~
比如在这里,我依然借助小牛机器翻译,利用MT进行了预翻译。
更多关于MT预翻译的内容,参考:机器翻译在CAT中的应用
并把MT的译文导出检查一下~如果导出后的译文如图所示,可以顺利显示,就说明是OK的:
果然没问题,那我们就可以正式启动翻译啦~
大家分享:如何在翻译的过程中基于样式表进行 XML 文档的显示预览。
我们前面讲过,XML 是没有样式的,HTML 有。
CSS 是 HTML 的样式表,通过 CSS 的设置,可以告诉浏览器:“我的网页布局是这样那样显示的~”。包括颜色、字体、文本大小、元素之间的间距、元素的位置和布局、要使用的背景图像或背景颜色、不同设备的不同显示和屏幕大小等等。
那,XML 的样式表怎么配置呢?就是借助 XSLT 生成的~
如果你不想了解 xslt,只想了解如何翻译的话,可以直接跳至下一节。
而 XSLT (eXtensible Stylesheet Language Transformations) 则是 XML 的样式表,它远比 CSS 更加完善。
通过 XSLT 的设置,可以告诉浏览器或者服务器:“我的 XML 文件是这样那样显示的。”
比如,这里我有一个样式表:
我们不讲样式表如何写,我也不是程序员,如果你感兴趣,可以去搜索 XSLT 教程: https://www.w3school.com.cn/xsl/index.asp)。
这是我需要翻译的 XML 文档,在这个 XML 文档中添加了 XSL 样式表引用:
如果没设置预览文档的话,导入后的预览仍然是按照 XML 文档格式来的:
memoQ 支持翻译过程中只需要配置 XSLT 样式表,即可预览 XML 文件。
你只需要:在导入文档时,使用”选择性导入” -> “更改过滤器和配置” -> 在默认的” XML 过滤器” 下,点击”常规” -> 并”指定 XSLT 文件“。
导入后即可在预览区显示 XML 啦!
本文作者:姜冬梅
本文目录
© Copyright 2023. 大辞科技 沪ICP备17050550号 沪公网安备 31011402006110号