Joomla!扩展(组件、模块、触发器)的汉化
-
详细内容
- 创建于 2007-02-07, 周三 15:07
- 作者 白建鹏
“标准组件”这个词是我发明的。我认为具有以下特征的组件可以称之为标准组件:
- 用zip格式打包;
- 具有固定的标准目录名称,比如语言目录用language,图片目录用image,模板目录用template;
- 至少含有一个english.php语言文件;
- 至少前台的界面语言都在语言文件中能够找到;
- 使用默认安装方式;
- 附带readme.txt文档或者在安装完成后欢迎界面上显示重要提示信息;
- xml安装文件使用英文并且保存为utf-8格式;
不过,符合以上要求的并不多。尤其是很多组件作者经常在语言文件中漏掉需要翻译的字串,甚至有些作者干脆连language目录都没有,给汉化工作带来很大困难。我先说说对标准组件如何汉化。
对于含有language或者lang目录的组件,我们将其中的语言文件翻译就可以了。一般来说,语言文件的文件名都是以该国语言的英文说法命名,比如英文语言文件叫english.php,韩文语言文件叫korean.php,德文语言文件叫dutch.php或者germany.php,西班牙语言文件叫spain.php。大多数扩展都没有提供中文语言文件,我们需要自己手动建立一个。鉴于汉字有简体、繁体之分,大陆与港台汉字又有编码之不同,所以我们需要分别建立。将english.php这个文件复制一份,重命名为simplified_chinese.php,这就是简体中文语言文件的名称;同理,再复制一份重命名为traditional_chinese.php,就成了繁体中文的语言文件。基本上很多中文用户都选择了台湾制作的中文utf-8版本或者本站提供的英文utf-8版本Joomla作为核心,因此本文仅以utf-8编码为例,其他编码参照本方法稍作修改即可。
![]() |
EmEditor编辑器的“另存为”对话框 |
用EmEditor这个编辑器(当然,你可以用其他编辑器)打开simplified_chinese.php文件,不做任何修改,立即选择菜单上“文件-另存为”,然后在保存对话框上选择文件编码为utf-8,点击“保存”按钮。由于没有更改文件名称,EmEditor会提示是否要覆盖原文件,选择“是”即可。这样我们就完成了编码转换工作,因为大多数english.php文件都采用了iso-8859-1编码。
注意:上图中“编码”下方有一个选项“添加Unicode签名(BOM)”,这一项一定不能钩选。BOM即“编码字节序标识”(Encoding Bit Order Mark)。在http://dev.youkuaiyun.com/develop/article/69/69883.shtm 这篇文章中有关于BOM的解释,如果你搜索“BOM问题”这个关键词,就会发现BOM会带来一些麻烦。因此,我建议不要钩选此项。
再次用EmEditor打开simplified_chinese.php文件,可以看到文件头部有若干行注释,一般以双斜线//开始或者/*符号开始。注释部分声明了文件版权信息,有的还包含致谢信息等。汉化作者可以在此添加自己的名字和联系方式,如果英文语言文件已经有author(作者)一项,你将名字修改即可(下图中第9行)。不过注意,如果这个author意指组件作者,你就必须保留该行,然后在注释末尾添加translator(译者)信息作为你的版权标记。还有一点要注意,有些语言文件头部注释部分的每一行前面有一个@字符(如下图所示),这是为了便于程序读取,因此你添加自己的联系信息时也要按照这个格式来编辑。
![]() |
Joomla!标准组件语言文件的翻译 |
注释之后,就是翻译字串的部分。上图中第12行就是第一个翻译字串,不过这个字串一般不需要翻译,它表示的意思是当有人试图直接通过URL访问这个语言文件时,就会显示“您无权访问”的信息。在很多php文件中都有这一句,其作用就是禁止直接访问该文件,以避免遭到攻击。访客必须按照网站前台的链接结构来浏览网站,或者提交信息,而不能随意打开其他文件。
从上图中还可以看出,每一行代表一个需要翻译的字串,并且以DEFINE这个词开始。Define在英文中的意思就是“定义”。在Define之后的括号中,有前后两对双引号,中间以英文逗号分隔。第一对双引号中展示字串代码,第二对双引号中提供翻译后的结果。我们刚才建立的新语言文件中,其第二对双引号中应该还是英文的说法,我们只需要将其翻译为中文即可。有的语言文件不一定使用双引号,而是使用单引号。例如上图的第12行就是这样。单引号、双引号对于翻译的效果没有任何影响,唯一需要注意的是,如果你翻译的结果中需要添加引号,请使用中文引号,以免英文引号引起混乱。有时候你可以看到英文语言文件中,对于字串中的引号使用了斜线前导符(/')来表示引号,我们只需要保留最外围的一对引号即可,中间的引号一律用中文引号代替。
通常情况下,我都是用鼠标拖选第二对引号中的所有内容,然后翻译成汉语。不过,如果其中还有 \n 这个符号,千万不要删除,也不必汉化,保留即可——这是换行符(回车符),表示下一行开始。
当整个文件翻译完毕,我们就完成了大半工作。将simplified_chinese.php文件添加到组件安装包里的language目录中并不能使组件将其安装到网站。因为组件安装时总是执行xml文件中的指令来上传文件。因此,我们还要打开xml安装文件,搜索langauge或者lang(取决于语言文件目录的名称),就能迅速找到安装语言文件的指令。复制其中某一行,比如<filename>language/english.php</filename>,然后在紧邻下方回车创建一个新的空行,粘贴刚才复制的一行进去,并修改为<filename>language/simplified_chinese.php</filename>。如下图所示(图中language一词带有绿色背景是因为EmEditor自动将搜索关键词高亮显示)。然后保存该xml文件并替换安装包中的原文件。现在如果安装该组件,就能自动上传simplified_chinese.php文件到语言文件目录。
如果要顺便制作一个繁体中文版语言文件,我们不需要重新翻译一遍english.php文件。如果你的EmEditor安装了简繁转换插件,就可以将simplified_chinese.php文件复制一份,重命名为traditional_chinese.php文件,然后用EmEditor打开,点击菜单上“工具 -> 插件 -> 转换为繁体中文”,一眨眼所有的简体字串已经变成了繁体。当然,文件头部的simplified_chinese.php标识不会自己变,需要手动修改。另外,一些语言习惯不会自己变。比如台湾人喜欢将“文件”称为“档案”,将“打印”称为“列印”,将“用户”称为“使用者”。所以,制作繁体语言文件需要先将这些叫法不同的词汇用查找替换的方法修改过来,然后使用上面转换方法转为繁体。同样的,我们把traditional_chinese.php文件复制到安装包中的language目录中,还要在xml文件中按照刚才的方法再添加一行命令,以保证安装时自动上传繁体语言文件。
第 2 页,总共 2 页
模块、触发器的汉化(XML文件的汉化)
Joomla!的模块、触发器都没有language目录,我们必须直接汉化xml文件。用EmEditor随便打开一个模块的xml文件,首先看到第一行:<?xml version="1.0" encoding="iso-8859-1"?>,后半部分的encoding属性描述了该文件所用的语言编码。大多数模块或者触发器的xml文件头部都会声明编码为iso-8859-1,我们需要首先将这个编码修改为utf-8,即将上面一行变成<?xml version="1.0" encoding="utf-8"?> ,然后立即保存并关闭这个文件。如果你仔细观察,会看到在文件中该文件“颤抖”了一下,这说明正在自动更改文件编码并刷新。
如果xml文件第一行没有声明语言编码怎么办?经常看到有些xml文件第一行是<?xml version="1.0" ?> ,这时候如果你看看EmEditor编辑器窗口的状态栏最右边,就能看到文件编码提示。如果你看到iso-8859-1或者“西文”,那么就需要更改编码。可以手动添加 encoding="utf-8" 到第一行,也可以直接采用前面说过的“另存为”方法改变编码。
注意:xml文件如果直接双击,会调用浏览器打开。所以,我建议你在xml 文件上点鼠标右键,选择EmEditor打开——如果你安装了EmEditor,右键菜单中第二行自然有这个选项。
再次打开该xml文件,可以看到第二行 <mosinstall type="module">,这表示该xml文件属于一个模块扩展。组件和触发器的xml文件,这里相应的就是component和mambot。
继续向下翻,在xml文件后半部分可以找到<params> 这个元素。这是parameter(参数)的缩写,表示在<params>和</params>一对标记之间的所有内容都属于控制参数。这部分也就是我们在模块或者触发器的后台所看到的参数设置内容。
一行代码代表一个参数,比如 <param name="style" type="radio" default="2" label="Mp3 播放器颜色" description="Select Color Scheme"> 这行,<param 表示“参数”元素开始,name属性表示其涉及的内容(style 意指外观风格),type属性表示参数外观类型(radio 就是多选一),default属性表示默认值(2 意指赋值为2的选项),label属性表示该参数在后台的显示语句,description属性表示对该参数语句的说明,一般都以鼠标指向时的浮动提示显示出来。
我们要翻译的只有两部分:label 和 description 。如果label的意思很明确,也可以不翻译description。同样的,我们必须保留引号和换行符。对于某些模块,我们也可以更改某个参数的默认值。这时我们把default属性的值修改为自己想要的选项即可。
完成翻译之后,将此xml文件覆盖安装包中的原文件即可。
如果你已经安装了英文版的扩展,那么可以手动上传翻译好的语言文件或者xml文件,覆盖对应的原文件即可。一般来说,language目录位于 /components 目录的各个组件目录中,有时候也可能出现在 /administrator/components 目录里对应的组件目录;模块的xml文件一般位于 /modules 目录中;触发器的xml文件一般位于 /mambots 目录中。
译者信息的添加
如果你使用过我汉化的扩展,会发现在安装完成后的欢迎界面底部,有“简体中文汉化:白建鹏”这样的信息。这个信息也是通过修改xml文件添加的。
不管是组件还是模块、触发器,在其xml文件前部,都有一个<description>元素,作为对该扩展功能的介绍以及发表一些版权声明或者联系信息。译者在此添加自己的信息就能在安装后的欢迎界面上显示出来。
需要注意的是,有些xml文件的<description>部分相当简单,如果直接插入其他文字,那么会发现最终显示时版面不够美观,也不能通过HTML语言调整。这是因为xml文件有自己的语法。
如果要在<description>部分使用HTML语言来调整说明信息的外观,我们必须保证<description>元素内部使用了<![CDATA[ 这个标记。如下图所示:
![]() |
<![CDATA[标记的使用 |
从上图中可以看出,添加了<![CDATA[ 标记之后,我们就可以在 description 部分随意使用任何HTML语言来控制欢迎界面的外观。当然,别忘记把这个xml文件的编码保存为utf-8。
其他汉化方法
有些时候,Joomla!扩展的作者不够耐心,所以在语言文件中没有包含所有的界面语言字串。很多作者仅提供了前台的语言字串,还有些压根没有language目录,在xml 文件中也可能没有提供足够的翻译选项。这个时候,就必须采用比较原始的方法,直接在php文件中搜索。
具体做法就是先安装英文原版扩展,同时在本地硬盘上解压该扩展,把所有包含文件都解压出来。然后在浏览器中将该扩展前台或者后台显示的某些界面字串复制下来,然后回到本地目录,搜索该字串,看看包含在哪个文件中。如果你使用EmEditor编辑器,就会发现它提供的“在多个文件中查找”功能非常方便,可以钩选“包含子目录”,还可以限定只搜索php文件类型,我敢说绝对比你用windows自带的“在文件中查找包含字串”要方便得多。找到该字串之后,判断一下是否真的就是你所看到的,一般来说,界面字串在源文件中会用引号包围。还有一点,在源文件中, echo 这个代码后面往往是界面字串。这需要译者仔细寻找。在翻译之后,最好立即上传覆盖网站上的对应文件,然后刷新浏览器查看效果。如果你看到原来的英文字串已经消失,取而代之的是一串乱码,说明你已经成功了一半——你忘记更改该php文件的语言编码了。呵呵,所以在汉化的时候,打开一个需要翻译的文件,首先更改其编码是一个好习惯。
在Joomla! 1.5 版本中,语言文件已经不再使用php格式,而是使用ini格式。届时EmEditor可能就不如ini Translator 这个软件方便了。或许Joomla! 1.5 的扩展还会继续使用php格式的语言文件,那么本文还能提供一些参考。
至于Joomla核心的汉化,涉及的不仅仅是字面的翻译,还有很多“本地化”工作甚至源代码的修改,我自己根本不懂,也就不能信口雌黄了。建议对Joomla汉化有兴趣的朋友先从扩展开始练习,熟悉之后再考虑核心的汉化。因为现在Joomla! 1.5 的简体中文汉化工作还需要更多高手的参与,以后 Joomla 2.0 等后续版本的汉化仍然需要各位的热心参与。
希望Joomla!之花在我们的浇灌之下更加绚烂多彩!