如何使用 Lokalize 进行合并 (Merge) 和二级同步 (Secondary Sync)

marguerite | 2013/01/20

之前在 kde-china 邮件列表中大家讨论过是否维护 stable 的问题。目前存在的问题是我们的翻译家比较稀缺,只能把精力全部集中在 trunk branch 的翻译上; 而各大使用 Upstream 翻译的发行版又面临着 stable 收不到后续翻译更新的窘境。加上 kde 的 svn 账户权限比较诡异(全局的,你可以改开发者的代码甚至)故基本申请不到。产生了一些不必要的误会与争执。最后大家发现 Lokalize 其实是有提供将 trunk 和 stable 之间进行自动同步的功能的。但是大家居然都不会使用。。。

背景知识

Lokalize 的同步模式有两种,第一种叫做 Primary mode,一级同步,主要应用于几个翻译家同时处理一份 po 档的情况,就是常说的合并; 第二种叫做 Secondary mode,二级同步,主要应用于一个翻译家同时处理两个 branch 的 po 档,就是常说的替换。

合并 (Merge)

合并之前有一个小习惯需要给大家讲一下。你自己可以从 svn 中 checkout,但是你是无法 upload 的。所以现实说你直接在 svn 根目录进行翻译是没有必要的。而且这会造成这样尴尬的情况:比如你翻译了 99%, 这时 svn up,会提示您是覆盖还是用你自己的。如果覆盖,那么你的工作成果就不见了;如果用你自己的,那么你还要 checkout 一份 tmp 来撷取那个 changed 的文件来 merge。所以建议大家复制一份再进行翻译。svn 目录只跟踪 upstream。

首先你打开的肯定是你的工作副本。

然后在「同步」-「打开要同步/合并的文件」,从中选择上游/别人的翻译副本,该副本也即您的合并资源 (Merging Source)。这时你的 Lokalize 的左下角会出现一个名为「一级同步」的工具箱。

右键该工具箱您会发现很多好用的选项和它们的快捷键。

主要是通过上一个/下一个来查看 diff,然后使用「复制到合并资源」和「从合并资源复制」来判断究竟修改谁。

二级同步 (Replication)

二级同步比一级同步要稍微复杂一点。

首先你要确定你的主工作目录,比如是 trunk。接着 checkout stable 的 po 档。然后要修改你的工程选项。

如果你没有新建工程的话,请使用「工程」-「创建新工程」,然后把那个 index.lokalize 保存到你的翻译根目录,比如 svn 的 checkout 地址是这样的:

svn co https://svn.opensuse.org/svn/opensuse-i18n/trunk/yast/zh_CN 

那你需要把 index.lokalize 保存到 zh_CN/po 文件夹下面。之后会弹出一个配置窗口,在常规栏里修改你的翻译家信息即可。

接着我们要使用「工程」-「配置工程」-「高级」来把「分支文件夹」改成你刚 checkout 的 stable po 档所在的文件夹。比如 stable/yast/zh_CN/po。

这时你在打开一个新的 po 档,就会在左下角出现一个名为二级同步的工具箱。您对 trunk 的所有改动都会自动同步到 stable(双向同步可以在 stable 工程里面把分支文件夹修改为 trunk 的 po 档所在文件夹),如果两个 po 档的这一条翻译的英文是相同的话。这可以有效应对 trunk 只是对 stable 的增加而不是修改的情况。如果是对 stable 的修改的话,那么意味着 stable 不用改,而该翻译会在 trunk 中被标记为「待审阅」。

至于老的未同步翻译,那只有请大家手动一级同步一下了。

参考文献

openSUSE Member, neverland author, Fcitx/Hotot contributor and Weng Xuetian's friend.
Tags: ,

Leave a Reply

Your email address will not be published. Required fields are marked *

Note: Commenter is allowed to use '@User+blank' to automatically notify your reply to other commenter. e.g, if ABC is one of commenter of this post, then write '@ABC '(exclude ') will automatically send your comment to ABC. Using '@all ' to notify all previous commenters. Be sure that the value of User should exactly match with commenter's name (case sensitive).

This site uses Akismet to reduce spam. Learn how your comment data is processed.