如何使用 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).