打印

HTML2POT - PO2HTML tools 0.5.3

HTML2POT - PO2HTML tools 0.5.3

为了解决 html 文件翻译后译文不能继承的问题,我写了这些脚本,这样我们就能利用 gettext 软件包的 msgmerge 实现新、老 html 文件翻译的继承。这套工具的名称为 GETPO,意即获取 PO。

版权声明:本工具遵照 GPL v2 或更新版本发布。

下载:0.5.3 (2006-06-16) 版:
http://i18n.linux.net.cn/download/getpo-0.5.3.tar.bz2
刚发现目前的 20051026 版 tidy 存在比较严重的 BUG,需要最新的 cvs 版 tidy:
http://i18n.linux.net.cn/download/tidy-20060615cvs.tar.bz2
公社的下载机制可能有问题,会破坏文件,现在换个地方。

在 linux 下的用法,例如:
perl html2pot.pl aboutqt.htm >aboutqt.htm.pot
perl po2html.pl aboutqt.htm.po >aboutqt.htm

---------------------------------ChangeLog-----------------------------------
2006-06-16 版本 0.5.3
修正了创建的 html 文件头部编码标识 UTF-8 缺乏双引号,导致在 IE 浏览器里不能正确显示的问题;
调整了调用 tidy 时使用的参数,增加 tidy 转换文件的可靠性。

2005-08-06 版本 0.5.2
在 linux 环境下重新调试通过。暂时去掉了 combine 工具。

2004-12-28 版本 0.5.1
html2pot.pl:完善了输入错误提示代码和在线帮助。
po2html.pl:优化了算法,提高了处理速度。完善了输入错误提示代码和在线帮助。

2004-12-27 版本 0.5.0
html2pot.pl:使用“软回车”<@@~CR~@@> 代替 <PRE></PRE> 预排版标签内标记空行用的 <br> 标签,从而避免了可能在其他位置上引入多余空行的排版错误。提供命令行参数与管道支持。提供简单的在线帮助。提供字节码预编译版本,加快处理速度。
po2html.pl:完全改由 prel 写成,不再使用 sh 脚本编程,提高处理效率。提供命令行参数与管道支持。提供简单的在线帮助。提供字节码预编译版本,加快处理速度。

2004-12-23 版本 0.4.0
修正使用辞典填充翻译后 PO 无法还原成 HTML 的问题;修改了 PO 文件结构,不但使之和传统的 PO 格式风格一致,而且完全兼容本程序的老版本。提供一个批量 GB2312 -> UTF-8 编码转换脚本。

2004-07-04 版本 0.3.1
修正一个 BUG(其实不算 BUG)。即转换包含特殊字符的 HTML 文件可能引起特殊字符转换出错的问题。目前要求原始 HTML 文件必须是英文版本(编码 iso-8859-1)。如果使用 0.3.0 版,则没有这个限制,只要预先把原始 HTML 文件转换成 UTF-8 编码,就可以避免上述问题。但是大批量的文件编码转换需要通过脚本完成,而且绝大多数待翻译的 HTML 文件都是用英文写成(iso-8859-1 编码),所以转换意义不大,暂时没有提供这一功能。


_______________________________________________________________________
[code:1]
请看范例:

#: 15 21 25 29 33 36
msgid "</TR>"
msgstr "</TR>"

#: 24
msgid "<TD align=\"left\">Add New Web Cameras By hand</TD>"
msgstr "<TD align=\"left\">手动添加新的网络摄像头</TD>"

#: 27
msgid ""
"<TD align=\"right\" width=\"40%\"><INPUT type=\"radio\" name=\"method\" "
"value=\"web_auto\"></TD>"
msgstr ""       <------这里无须翻译!

#: 28
msgid "<TD>Add New Web Cameras Automatically</TD>"
msgstr "<TD>自动添加新的网络摄像头</TD>"
[/code:1]
_____________________________________________________________________

                          使用说明
    这套脚本是专为解决 HTML 文件的翻译继承问题而开发的。包括三种功能:实现
HTML 到 POT 格式的转换;实现 PO 到 HTML 格式的转换;给定两个*同源* HTML 文件
可以生成一个 PO 辞典文件。它具有如下优点:
    1. 不依赖原始 HTML 文件。一旦由 HTML 转换成 POT,就可以完全抛弃原始 HTML
文件,最终将由 PO 直接生成 HTML;
    2. 译者拥有极大的自主权。拆分算法不会因为格式标签拆散句子,译者可以在行内
调整语序,尤其是比较长的句子、段落;他(她)甚至可以修改 HTML 标签,以便达到更
好的显示效果,只要他(她)保证生成的 HTML 可以正常浏览即可;
    3. 对于不必/不会/尚未翻译的条目,会自动用原文代替;对于 FUZZY 的条目会自动
用原文代替。


小技巧:你可以用
msgen --no-wrap xxx.htm.po -o xxx.new.htm.po
首先生成一个用英文原文翻译好的 po 文件,然后在此基础上把 msgstr 里需要翻译的内容翻译好,这样就不用费劲 复制-粘贴 一堆 HTML 标签了。



测试环境:perl Ver 5.8.3,tidy Ver 1st September 2003,gettext Ver 0.12.1。
估计在较老的软件版本上也能平滑运转。

**注意**
    ***1. 用于生成 POT 文件的 HTML 文件必须是 ISO-8859-1(英文)编码。***
    ***2. 用于生成 HTML 文件的 PO 文件必须是 UTF-8 编码。***

    3. 所谓同源 HTML 文件指的是由同一个原始 HTML 文件衍生出的不同(可以相同,但这没
有意义)语言版本,包括但不限于英文版本,它们的文档结构和版本必须相同。也就是说,如果
译者修改了文档结构,例如加入了元数据行或注释行,将导致这两个 HTML 文件无法生成一个
PO 文件。解决的办法是设法消除这种文档结构的差异。

___________________________________________________________________________________
以下是在 cygwin 环境下的用法:
[code:1]
html2pot
    这是一个独立的 perl 脚本,功能是实现 HTML 文件到 POT 文件格式的转换。它对标准的
HTML 文件、各种变种 HTML 文件,以及内嵌脚本的 HTML 文件均能良好支持,前提是它们必须都是
ISO-8859-1 英文编码(如果需要,只要对 html2pot 稍加修改就可以支持 UTF-8 编码的其他各种
语言,不过一般软件的文档总是倾向于使用 ISO-8859-1 英文编码)。它提供命令行参数与管道支持。

$ ./html2pot.pl --help
Usage: ./html2pot.pl [OPTION] [INPUTFILE]
Example: ./html2pot.pl inputfile.htm > outputfile.pot

Convert the specified HTML file to PO format.
The INPUTFILE must be in ISO-8859-1 code (an English file),
and the output data will be converted to UTF-8 code.
Note: If the INPUTFILE is -, standard input is read.
      --help     display this help and exit

batchhtml2pot
    此脚本用于批量转换 HTML 文件到 POT 文件格式。HTML 文件存放在 html 目录里,生成的
POT 文件存放在 pot 目录里。(html-->pot)
用法:
    ./batchhtml2pot


po2html
    这是一个独立的 perl 脚本,功能是实现 PO 文件到 HTML 文件格式的转换。这里的 PO 文件
必须是由 html2pot 或 batchhtml2pot 生成的,且必须是 UTF-8 编码。它提供命令行参数与管道支持。

$ ./po2html.pl --help
Usage: ./po2html.pl [OPTION] [INPUTFILE]
Example: ./po2html.pl inputfile.po > outputfile.htm

Convert the specified PO file to it's original HTML format.
The INPUTFILE must be in UTF-8 code (any language file),
and the output data will be in UTF-8 code too.
Note: If the INPUTFILE is -, standard input is read.
      --help     display this help and exit


batchpo2html
    此脚本用于批量转换 PO 文件到 HTML 文件格式。PO 文件存放在 po 目录里,生成的 HTML
文件存放在 html.new 目录里。(po-->html.new)
用法:
    ./batchpo2html


combine.sh
    此脚本位于 combine 目录下,功能是通过两个同源 HTML 文件生成一个 PO 辞典文件。第一
个参数指定的 HTML 文件将用于生成 msgid,第二个参数指定的 HTML 文件将用于生成 msgstr。
第三个参数用于指定生成的 PO 文件名。所有操作的文件都必须是 UTF-8 编码。
用法:
    ./combine.sh foo.en.htm foo.zh_CN.htm foo.zh_CN.htm.po


batchcombine.sh
    脚本位于 combine 目录下,功能是通过两个目录里的同源 HTML 文件生成一组 PO 辞典文件。
第一个参数指定的目录里的 HTML 文件将用于生成 msgid,第二个参数指定的的目录里的 HTML
文件将用于生成 msgstr。第三个参数用于指定生成的 PO 文件存放的目录。所有操作的文件都
必须是 UTF-8 编码。
用法:
    ./batchcombine.sh en zh_CN.utf-8 po.new

transcode.sh
    此脚本位于 combine 目录下,功能是将 zh_CN.gb2312 目录下 GB2312 编码的文件批量装换成 UTF-8 编码,输出到 zh_CN.utf-8 目录下。稍加修改就可以实现其他编码(如 GBK)的文件向 UTF-8 编码的转换。所有支持的编码都列在了 encode.txt 文件里。
用法:
    ./transcode.sh
[/code:1]


TOP

参见:(图片)
http://www.linuxfans.org/nuke/modules.php?name=Forums&file=viewtopic&p=3968811#3968811

TOP

一个简单的问题:
  如果我用 foo.en.html生成了一个 foo.pot,然后翻译生成了 foo.po 并用它生成 foo.zh_CN.html,后来 foo.en.html 升版了(这样还能算与原来的foo.en.html同源吗?),我如何利用原来翻译好的po来生成新的po?

TOP

msgmerge foo.po foo.pot -U

呵呵,怎么你也上来了。
真男人张湘祥

TOP

呵呵,想用用这个工具翻译帮助文档。
对了,我用html2pot.pl 来生成pot文件的时候,有一个文件没法生成pot,报错了。
你或者kde能不能帮我看看这个文件?

TOP

你和 wangyuan 最好加我的 msn 为好友,大家谈话方便。WenShaohua 请把那个文件发到我的信箱。到底报什么错?

TOP

WenShaohua,好久没见你的消息了,最近好吗?

TOP

还好啊,不过最近忙公事去了,还出了趟远差。
这样吧我给你发封 email 你帮我看看这个html文件为什么没法生成pot吧。
谢了,呵呵

TOP

xml与po呢?

我翻译一个帮助文档时,xml2pot没问题,翻完时,po2xml怎么出错了?

TOP

kde 的 xml2pot 和 po2xml 并不等价,而且后者是把 po 文件合并进原始的 xml 文件里实现翻译。po2xml 出错原因很多, po 文件本身的错误(比如头部编码标识错误、出现未翻译或模糊条目),还有你使用的参数错误...

对中文而言。反向转换并不能完全达到预期效果,而且可能出错。这个工具是不完善的。

TOP

更新一次。

TOP

0.5.2下载只有7376字节
不能解压
不知道别人是这样么?

TOP

已经解决。

TOP

不知道哪里可以下载到getpo的所有版本
谢谢

TOP

发现bug
1. po2html.pl中最后
[code:1]$output[$zero]='<!-- Generated by gettext-autowork/po2html Ver 0.5.2, see http://i18n.linux.net.cn -->' . "\r\n" . '<meta http-equiv="Content-Language" charset=UTF-8>' . "\r\n";[/code:1]
最好改为
[code:1]$output[$zero]='<!-- Generated by gettext-autowork/po2html Ver 0.5.2, see http://i18n.linux.net.cn -->' . "\r\n" . '<meta http-equiv="Content-Language" charset="UTF-8">' . "\r\n";[/code:1]
因为前者会造成windows下的IE不能正确读取网页
2. 一个文档的转换问题
http://doc.trolltech.com/qq/index.html
这个文档,html2pot,然后po2html,网页发生很大变化,为什么?

谢谢

TOP