查看“软件翻译/Old”的源代码
来自Ubuntu中文
←
软件翻译/Old
跳到导航
跳到搜索
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
==开源软件的国际化的原理== 软件,总是从程序代码开始的。程序源代码中有很多的字符串,国际化的目的,就是把这些字符串从代码中取出来,翻译成其他语种。开源软件国际化有一种使用广泛的实现方式,整个过程会涉及到三种格式的文件:pot格式、po格式、mo格式,并有一套GNU工具完成其中的转化,其流程可以参见下面的图: [[Image:Pic1.JPG|700px]] 具体的步骤如下: #使用工具软件提取出代码中的字符串,生成的结果是pot(Portable Object Template )格式的文件,这是po(Portable Object)格式文件的模板,在将来程序可能配置成其他语种,其他语言的po文件都从它而来 #如果需要翻译中文版,则由pot格式生成po格式的初始文件ZH_CN.po,这时的po文件还没有翻译,与pot文件差别还不大 #软件翻译者完成po文件中字符串的翻译,这是开源软件翻译的工作主体 #po格式文件翻译完成后,生成可以被程序使用的mo(Machine Object)格式的文件ZH_CN.mo #生成的mo格式文件存放在系统中,启动程序,中文版本的ZH_CN.mo被调用,软件摇身变成中文版了 ==以一个例子说明开源软件的翻译== 上面的介绍有点晦涩难懂,那么我们看一个已经完成翻译的软件MonoDevelop,相信就比较清楚了。 MonoDevelop 是个Linux平台上的开放源代码集成开发环境,主要用来开发Mono与.NET Framework软件。在ubuntu环境下,我们下载MonoDevelop的源代码,可以看到有一个po的文件夹,有很多不同语言的po文件,如意大利语po文件it.po,也包括已经翻译完成的中文po文件zh_CN.po。 [[Image:Pic2.JPG|700px]] 在ubuntu环境下,首先成功编译安装MonoDevelop(具体参照INSTALL文件的方法). 然后,如下设置系统的语言为英文: export LANG=en_US 启动MonoDevelop,看到的是英文界面: [[Image:Pic3.JPG|700px]] 然后设置系统的语言为中文: export LANG=zh_CN.UTF-8 启动MonoDevelop,看到的是摇身一变的中文界面: [[Image:Pic4.JPG|700px]] 很神奇是吧,为什么会这样的效果呢?因为在编译MonoDevelop的时候,会生成前面提到的各种语言的mo文件,当你使用中文的时候,使用的就是中文的翻译mo文件,当系统环境变量设置为其他的语言,软件启动后会找对应语言的mo文件。我们搜索一下,就可以看到MonoDevelop的mo放在了系统的语言包文件夹里,我们看到MonoDevelop有很多的语言版本。 administrator@ubuntu:~$ locate monodevelop.mo<br> /usr/share/locale/ca/LC_MESSAGES/monodevelop.mo<br> /usr/share/locale/cs/LC_MESSAGES/monodevelop.mo<br> /usr/share/locale/da/LC_MESSAGES/monodevelop.mo<br> /usr/share/locale/es/LC_MESSAGES/monodevelop.mo<br> /usr/share/locale/fr/LC_MESSAGES/monodevelop.mo<br> /usr/share/locale/gl/LC_MESSAGES/monodevelop.mo<br> /usr/share/locale/hu/LC_MESSAGES/monodevelop.mo<br> /usr/share/locale/id/LC_MESSAGES/monodevelop.mo<br> /usr/share/locale/it/LC_MESSAGES/monodevelop.mo<br> /usr/share/locale/ja/LC_MESSAGES/monodevelop.mo<br> /usr/share/locale/nl/LC_MESSAGES/monodevelop.mo<br> /usr/share/locale/pl/LC_MESSAGES/monodevelop.mo<br> /usr/share/locale/pt/LC_MESSAGES/monodevelop.mo<br> /usr/share/locale/pt_BR/LC_MESSAGES/monodevelop.mo<br> /usr/share/locale/ru/LC_MESSAGES/monodevelop.mo<br> /usr/share/locale/sl/LC_MESSAGES/monodevelop.mo<br> /usr/share/locale/sv/LC_MESSAGES/monodevelop.mo<br> /usr/share/locale/tr/LC_MESSAGES/monodevelop.mo<br> /usr/share/locale/zh_CN/LC_MESSAGES/monodevelop.mo<br> /usr/share/locale/zh_TW/LC_MESSAGES/monodevelop.mo<br> <br> 看完上面的例子,我们就可以自己动手来做做开源软件的中文翻译了。从上面看,翻译中文版本所需要做的主体工作,就是把原始的po文件翻译成中文。 <br> 那么如何翻译po文件呢?这里还是以MonoDevelop作为例子。打开zh_CN.Po文件,我们可以看到如下: [[Image:Screen_shot1.JPG|450px]] <br> 可以看到每个po文件的开头会有一些相关信息,诸如po文件的时间,翻译者的信息,文件的编码格式等,以“#”开头的行是注释。这些相关信息之后,就是po文件的主体了,po文件的主体就是由一对对的msgid和msgstr组成的。msgid是原文,msgstr就是译文,您需要做的是把 msgid 中的英文翻译成中文写到 msgstr 中,原文译文相互对照,所以方便翻译。 <br> 虽然看起来很简单,但是翻译中还有很多需要注意的细节,比如:有关菜单快捷键的处理,在 KDE 中,菜单快捷字符的前缀是“&”: msgid "&Glimmer Editor" msgstr "&Glimmer 编辑器" <br> 在 GNOME 中,菜单快捷字符的前缀是“_”: msgid "_Setup..." msgstr "设置(_S)..." <br> 另外,po文件中有些语句是带有参数的,有些语句的翻译,为了符合中文的习惯,可能要做一些调整,比如下面例子中为了中文的语感,把参数2提前了: KDE: msgid "%1 articles match rule %2" msgstr "匹配规则 %2 的文章有 %1 个" Other: msgid "%d articles match rule %d" msgstr "匹配规则 %2$d 的文章有 %1$d 个" <br> 类似的翻译细节还有很多,需要在实际的使用中,多多与网友交流和查资料,才能做出出色的中文版本。 <br>翻译完成后,我们可以测试一下翻译后的效果如何,这就需要把翻译后的po文件生成mo文件: <br> msgfmt zh_CN.po -o zh_CN.mo <br> 看到文件夹下生成zh_CN.Mo文件。以中文语言包为例,一般类unix系统中的中文语言包mo文件一般放在/usr/share/locale/zh_CN/LC_MESSAGES/或者/usr/locale/share/locale/zh_CN/LC_MESSAGES/,我们把zh_CN.Mo拷贝到/usr/share/locale/zh_CN/LC_MESSAGES/,就可以看到翻译后的结果。 ==开源软件的翻译工具使用== 翻译po文件有很多的工具,KBabel、gtranslator、KAider以及 poEdit 都是专用翻译工具 == 使用网站launchpad.net做在线翻译 == 以上简要里描述了开源软件的翻译的大致过程,现在还有一种比较新颖的方式,那就是通过UBUNTU的网站[[Launchpad.net|launchpad.net]]做在线翻译。Launchpad.net 是由 Ubuntu 的母公司 Canonical 有限公司所架设,其功能之一就是提供了在线翻译的功能,不过建议大家只选择于 Launchpad 翻译 Ubuntu 上独有的软体,而其他的软体则直接到其社群参与翻译的工作。 在 Launchpad 上加入 Ubuntu 中文翻译之前,建议先用自己的GPG公钥签署Code of Conduct(注:不是强制性的),这是一个 launchpad.net 对参与人员约定的工作准则,其意义可见:[http://www.ubuntu.com/community/processes/newmember http://www.ubuntu.com/community/processes/newmember]。签署Code of Conduct的地址是:https://launchpad.net/~yourusername/+codesofconduct<br> 在您正式着手进行翻译之前,请注意阅读 Ubuntu-l10n-zh-cn 翻译组的公告,参见[https://launchpad.net/~ubuntu-l10n-zh-cn launchpad.net/~ubuntu-l10n-zh-cn],这里会提示最新的翻译分支,以及相关的实用链接,主要是翻译工作手册和术语表,请一定要仔细阅读。 一般来说,新的 launchpad 翻译者常会犯的错误有: *标点符号翻译不当——关于此,请参照[[TranslatorsGuideline |Ubuntu/Launchpad 简体中文小组工作指南]]中的标点翻译规范进行(这篇文章虽然是在KDE中国网站上,但翻译规范基本对所有软件都应适用)。 *不注意原文的使用环境——比如 view 这个词,一般情况下译作“查看”,但在涉及数据库的上下文时可能需要译作“视图”。一个推荐的解决办法是:'''在成为一个软件的翻译者之前,先成为这个软件的用户。'''此外,注意 Launchpad 会显示相关原文所在的源码文件名,有时还会提供开发者留下的注释,这些都有助于理解原文的实际使用环境。<br> *术语翻译不当或前后不统一——请在翻译一个软件前意识到软件翻译和通用英语翻译的差异,例如“cache”和“buffer”,在绝大多数情况下前者应译作“缓存”,后者译作“缓冲”或“缓冲区”,虽貌似相近但绝不能混淆。还有英语缩写如UML、OSS等也是类似,在有既成通用译名前尽可能不要自造新译名,除非您确信这样做有绝对必要。 *刻意追求完成度,提交不确定的翻译项——你提交的翻译会随着 Ubuntu 的发行而出现在世界上所有 Ubuntu 用户的电脑屏幕上,也许还会出现在各大 IT 网站新闻稿的抓图里,甚至是 CCTV 的摄影机前。所以,不确定的翻译请标注为Need Review,我们不是为翻译列表上的那个柱状图而工作。 如果您在 Launchpad.net 的翻译过程中抱有疑问或是需提出的建议,可以在 Ubuntu 中文社区内获得帮助,也可通过公告上给出的联系信箱和相关负责人员沟通,这些渠道的响应仍然是活跃的。 <br>如果您想了解更多介绍,请参考 Ubuntu 的wiki,以及 launchpad.net 上的帮助。<br> ==开源软件的翻译经验汇总== ==相关链接== * [[TranslatorsGuideline | Ubuntu/Launchpad 简体中文小组工作指南]] * [[翻译DDTP]] - Debian/Ubuntu 软件包描述
返回
软件翻译/Old
。
导航菜单
页面操作
页面
讨论
阅读
查看源代码
历史
页面操作
页面
讨论
更多
工具
个人工具
登录
导航
首页
最近更改
随机页面
页面分类
帮助
搜索
编辑
编辑指南
沙盒
新闻动态
字词处理
工具
链入页面
相关更改
特殊页面
页面信息