在进行翻译的过程中,我们会遇到各种各样的文档格式。有些文档对我们来说比较简单,比如.docx
、.ppt
、.xlsx
这些Office的文档,但是有些就比较复杂了,尤其是.xml
、.po
、.dita
、.md
、.html
、.php
、srt
、psd
等等之类的。
所以我想,是不是可以带大家认识一下这些文档呢~(写作过程痛苦地狠)
然后就决定准备这个关于翻译与本地化的各种文档格式的系列,今天讲第一篇:xml格式的文档。
我也不知道我写的到底能不能懂,我也不知道我会不会一直更,平时工作也忙,就慢慢写吧~
如果有问题,可以留言,我从翻译与本地化项目管理的角度尽可能给答复~
如果你是问我关于程序代码应该怎么写,这个请去找更加专业的工程师hhhhh~
好啦我们回到正题,xml文档。xml格式要讲的内容很多,今天先带大家入个门,认识认识XML文档和它的结演变历史。
为什么我选择先讲XML格式?
因为大家都是搞翻译的嘛,几乎每天都在和xml格式的文档打交道,只不过你可能不知道它是xml文档而已。比如(接下来你可能要惊叹了),我们用的word的.docx
文档,其实就是基于Office Open XML标准的压缩文件格式,本质上就是一个xml文档。
是不是觉得不可思议,听都没听过?(接下来你可以拿一个docx的文档跟我一起试试:)
我们来看一个案例,这里有一个docx的文档,长这个样子:(我用Office Word打开的)
现在,我们对这个文档做如下操作:
将文档的后缀名由docx
改为zip
格式,变成一个压缩包;
把这个压缩包解压缩,打开解压后的文件夹,然后打开文件夹内的word的文件;
然后我们打开这个document.xml
的文档,这就是原来的docx文档底层xml文档。
在这里我用vscode打开的,你也可以用任何一款文本编辑器打开,比如电脑自带的记事本,或者常用的Notepad++,sublime之类的都可以~
如果你电脑没有,建议装一个~(选一个安装就行,不用都装~)
除此之外呢,我们现在用CAT工具嘛,翻译记忆库是.tmx
格式,其实.tmx
格式也是xml文档。
包括大家都熟悉的xliff
格式,也是xml文档~
所以我们就来看看什么是xml文档~
我想tmx和xliff我们后面应该都会讲吧~希望我会坚持写文hhhhhhh~
可扩展标记语言,标准通用标记语言的子集,简称XML,是一种用于标记电子文件使其具有结构性的标记语言。——摘自百度百科。
其实这个定义说的很清楚,但是我想,如果你是一个新人,可能这里面没有一个能看懂的词:语言、标记语言、标准通用标记语言、可扩展标记语言。
所以我们看看先来看这几个“名词”。
语言,这里指的是计算机的语言。就像人之间交流用的是人类语言,什么中文、日语、英语等等不同的语言,当然也有手语、肢体语言等等,有了语言人与人之间才能交流~
可是,计算机理解不了人类语言。
所以我们要用计算机的语言,告诉计算机,“我在讲什么。”像小时候计算机课上学的0和1这种二进制数,就是一种机器语言(你可以理解为甲骨文),除此之外,还有HTML、GML、XML、C++、VC、VB、Delphi、Java、PHP、Python等等(你可以对标现在的中文、英文、日语等等),这些都是计算机的语言。
通过计算机语言,才能实现人与计算机进行交流和对话。
标记语言,Markup Language,是一种将文本以及文本相关的其他信息结合起来,展现出关于文档结构和数据处理细节的电脑文字编码。(摘自百度百科)
如果看不懂的话,我拿人类语言的标记举例子:
我们再回到标记语言这个话题,标记语言=标记计算机语言。那,什么是标记计算机语言呢?
你可以理解为,给计算机文本用信息符号做个标记,告诉计算机“哦,这个符号代表啥文本信息,那个标记代表文本的啥结构”。(其实标记就是标签,tag)
在标记语言中,一定要说明:
举个例子,我写了这样一个标记:
你可能会有这样一个疑问:“那,我想怎么写就怎么写吗?”
比如,我在文本前输入井号加一个空格
,告诉计算机“只要是见到井号+空格,就表示标题。
——这样可以吗?
是的,在标记语言中,你想标记什么就标记什么,你想怎么定义结构就怎么定义结构,你想怎么写就怎么写,只要你和你的计算机商量好了就行。
但是这会有一个问题,就是:但凡换一台计算机,都不知道你在说什么。
那咋办?
为了解决“让大家都明白”的问题,在1986年国际标准化组织出版发布了一个信息管理方面的国际标准(ISO 8879:1986信息处理),也就是标准通用标记语言。
标准通用标记语言,Standard Generalized Markup language,中文简称“通标语言”,英文简称SGML,就是计算机的文本结构和描述内容的国际标准语言。字面意思其实就可以理解:标记语言是标准通用的,只要你按照这个标准,甭管是哪台计算机,都遵循一个规范,这样就“听”得懂你说的啥,也就能顺利全球沟通啦~
既然是国际标准规范,那遵循什么规范呢?
一份“通用标言”文档可能有三部分组成:
“通用标言”声明:定义字符集分隔符集和关键字(以下在本文里头简称“声明”)。
文档类型序言:定义一般实体和元素类型
包含一个“!文档类型(外语全称加缩写:!DOCTYPE)声明”与各种“标记声明”,它们一起组成了一个文档类型定义(外语首字母缩略词:DTD)
实例:包含一个顶级元素和实例的内容
如果你想了解更多,建议自己去查一下~
不同的文档有不同的文档样式,比如我们的HTML文档有HTML文档的国标样式,你要是写HTML文档,遵循这个标准就行。
比如:在HTML中我们用<p>这是一句话</p>
表示文本这是一句话
是段落,这样就给文本赋予了一个段落结构。
如果你还是看不懂,你可以随意打开你的一个页面,查看这个页面的源代码。
对于这样一个文本而言,好处是什么呢?——你可以很清楚地看到这文本的布局。如果把源代码关掉,就可以看到图片、排版对不对?
可是问题呢?——HTML的复用率很低。你的文本格式、图片大小、宽度、固定值啥啥都固定了,当然很难复用了。
那怎么办?——变成可扩展标记语言,也就是XML嘛~
XML的全称是Extensible Markup Language就是XML的全称,我猜是因为发音就是/ex/=X,所以才缩写为XML,而不是EML。我也查了一些资料,没找到什么答案,你们要是感兴趣可以自己研究研究~分享给我呀~
如果我们了解了标记语言,那“可扩展”应该比较容易理解,就是:你可以由一个xml扩展到新的语言,比如:WAP和WML语言。
你只需要记住xml的几个特征:
既然XML也是一种语言,所以XML也是一种基于文本的结构化格式;
既然XML也是标记语言,那么你当然可以自定义标签名,或者我们叫“元素名”。比如,我们可以自定义标签名为<seg>
,<source>
等。
既然标签名是自定义的,那么在用CAT工具翻译的时候就需要明确标签的名称;
当然,有的名称来源于XML文件本身,但是有些来源于用于创建XML文件的定义文件,如 DTD(document type definition文档类型定义)文件, XSD(XML SCHEMA Definition)文件(定义XML文档的合法构建模块)。
XML是用来传输和存储数据的,不是用来显示数据的,所以XML文档不包含格式或者布局信息,没有HTML布局明确;
既然XML不包含格式或者布局信息,那译员如果要预览布局怎么办呢?就需要借助XSLT(transformation style sheet) 文档,XML文档转换为XHTML文档或其他XML。
既然XML也是SGML,那么XML当然要遵循SGML的规范。
我们一起来看一个xml文档。
第一行有XML声明,定义了xml当前的版本(1.0)和编码(utf-8);
<?xml version="1.0"? encoding="utf-8">
第二行描述文档的根元素,就像在告诉你,“hey,我是个例子而已嘛~”
当然最后一行是根元素的关闭标签。
<sample>
接下来有描述根元素的子元素
<document>
<topic>
...
</topic>
</documen>
当然,也有描述<topic>
的子元素
这样,就构成了一个完整的xml文档啦~
但是如果你不是搞编程的或者不是工程师,你可能根本还是听不懂我在说什么。(说实话,我也是搞了好久才弄清楚这些语言)
但是!这也没关系,作为一名翻译,或者作为一名本地化项目经理,你只需要认识文档,知道哪些该翻译哪些不该翻译,也就是看懂文档的结构,会解析文档就可以了。
所以今天,我们先立个小目标,将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>
是一对。标签对之间的文本,我们称为元素内容。
关于文本,你需要了解:
但是有时元素内容也可以不翻译,比如图中的“5-2b”就不需要翻译。
当然,有时候文本之间也有行内标签对的存在,比如图中的<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文档。
偷偷告诉你,只要知道标签和属性,基本都OK了~
那,xml文档如何用CAT解析呢?以后分享。
本文目录
© Copyright 2023. 大辞科技 沪ICP备17050550号 沪公网安备 31011402006110号