国际化复数形式的支持与pygettext的补丁

今天把plugs中的论坛进行了一些优化,其中想使用uliweb中早就内置的timesince.py模块。这块需要i18n的支持。于是使用:

uliweb i18n -l zh_CN --uliweb

来运行。结果报错。其主要原因是timesince中使用了复数形式的i18n函数ungettext。而uliweb使用的pygettext.py不支持。

pygettext.py是python在tools目录下自带的一个模块,可以用它来从python源码中抽取翻译字符串,它支持命令行,代码也不算很复杂。所以在uliweb中提供了纯python的命令行工具。不过uliweb为了让其可以支持模板和ini文件,修改了pygettext源码,所以和python自带的还不完全一样。许多其它的python项目是使用xgettext工具来处理。因为pygettext.py不支持复数的翻译串,我查了一下,主要区别就是对于复数,在po文件中是这样的:

msgid "month"

msgid_plural "months"

msgstr[0] "月"

msgstr[1] ""
而不带复数的形式是这样的:

msgid "month"

msgstr "月"

本来想自已修改的,不过还是先google一下吧,万一有人解决了呢。结果还真找到了。有人在python的bugs网站上提交过这样的问题,然后有人给出了一个补丁。从pygettext.py的源码可以看到,它已经很多看没有被修改过了。于是我下载了补丁,先在python带的版本上打补丁,然后使用代码比较工具将我需要的修改再加进去。后来还修改了po_merge.py程序。最终把这个问题基本上算是解决了。

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。