如何翻译 KDE

csslayer | 2012/12/15

这篇的主要内容比较实用主义……后面很多也适合其他项目。

1、工具

lokalize,svn。为什么不是poedit或者gtranslator,或者linguist,这是有原因的。lokalize的项目才用的是和KDE一样的工作流,所以更好管理。其次lokalize的翻译存储很强大,很适合这种大型项目的翻译。svn是因为KDE的翻译还是svn管理。

2、下载翻译

# 下载翻译的根目录
# 如果你有账号请自行更改 svn 地址
# kf5 的目录是 l10n-kf5,kde4 的是 l10n-kde4
svn co svn://anonsvn.kde.org/home/kde/ --depth empty
cd kde
svn up trunk branches --depth empty
cd branches/
svn up stable --depth empty
cd stable/
svn up l10n-kf5 --depth empty
cd l10n-kf5/
svn up zh_CN templates
cd ../../../trunk
svn up l10n-kf5 --depth empty
cd l10n-kf5/
svn up zh_CN templates
无论你翻译哪个,下载全部的翻译都是很必要的,因为能够填充本地的翻译存储的内容。此步需要下载上百MB数据,准备个好网络,然后喝口茶吧。

3、lokalize的配置

设置-> 配置 lokalize,填写个人信息。

工程->创建新工程

目录选择 zh_CN 的根目录,检查高级标签下模板文件的目录是否指向了templates,填写正确其他信息。中文翻译的邮件列表是 kde-china@kde.org

4、工程概述

工程->工程概述,或者 F4 查看,之前步骤正确,应该只显示了 messages 和 docmessages 两个目录。

5、翻译存储

工具->翻译存储,第一次使用会有个 KDE 的任务进度提示。等他完成。完成后查看下”管理翻译存储“里面的项目是不是 en_US 到 zh_CN 的对应。如果不是删除手动创建一个……然后选择重新扫描工程,扫描完 KDE 的总量应该约有 20 万的记录。也请检查数量是否正确。

6、选择翻译文件

然后你就可以去工程概述选文件翻译了。如果这个文件从未有个中文翻译,双击会创建这个文件,记得保存后手动修改:

“Plural-Forms: nplurals=2; plural=n != 1;\n”

改成 “Plural-Forms: nplurals=1; plural=0;\n”

修改是中文的复数设置。

7、翻译

以下内容比较零散,作为指导和参考。

中英混合:中英混合时在英文两侧加入空格。

标点:常见使用全角的标点都使用全角,括号使用半角,并在括号周围留空格,例外包括括号后紧跟其他标点,或者是为了快捷键字符的括号。引号无论内容是单引号还是双引号,优先使用双引号,嵌套时才使用单引号。

省略号使用三个点。

注意句尾的句号,如果有不要忘记写句号,如果没有不要擅自加上。

例:

Size (mb)
对应
大小 (mb)
快捷键
&Ok
对应
确定(&O)
上面两个例子的区别是后者无空格。

&表示的是经常在界面中的下划线快捷键,Alt + 字母可以直接激活。这个表示法是 Qt 的。其他Toolkit不通用。无论原文快捷键对应的字母是大写或者小写,翻译后一律使用大写。

快捷键项目之后带省略号一般表示为会打开新窗口,翻译时

&Open
对应
打开(&O)...
省略号放在后面。

参数:QString 在 format 时使用 %1 %2 等等作为占位符,翻译时请注意保持,以及按对应语言调整顺序。参数一般也视作和中英混合一样需要加空格。

KRunner:KRunner的翻译有两点需要注意,krunner的功能是基于搜索词的,搜索词一般都标注了本地化,但是针对中文这种情况,不要翻译。例如 kill 作为杀进程的搜索词,如果翻译成杀,那么必须在 krunner 里面使用 杀 才能触发这个功能,是很不方便的。外加 krunner 有帮助可查,所以本地化搜索词只会让 krunner 使用上添加不便。

其次,krunner 的搜索句的占位符是 :q: ,需要注意保留。

X-KDE-KeywordKeywords:KDE 的关键词,在krunner 这种搜索程序时使用,采用半角逗号 (老格式)或者分号分割 (新格式),采用哪种参照原文即可。翻译时建议保留全部原文,然后附加上翻译内容。保证使用英文依然可以搜索到内容。其次,遇到一词多个翻译,可以把认为相关的翻译都附加上。

keyboard,num pad keyboard
可以对应
keyboard,num pad keyboard,键盘,小键盘,数字键盘
表达方式:同一个程序内,经常会有类似说法,但是只换了一个动词和名词的句子,注意表达方式的一致。不同程序也需要考虑这个情况。

上下文:对于短词,直译的选择可能有很多,因此需要考虑上下文。例如 Start,单独翻译成开始,但是在 Start,Pause,Resume都作为需要被的词时也许可以采用,启动,暂停,恢复这样的翻译。

同样拿不准的应当到源代码或者程序中参考当时的语境。

-er的名词:英语喜欢把一个动词名词化,类似情况可以考虑翻译成 XXXX 器,例如 cleaner 翻译成清理器

没有合适的对应名词:例如 ksecrets 里面的密码容器这个概念,在 #kde-cn 上讨论后决定翻译成密匣。拿不准的翻译总可以和其他人讨论,也许有时候还可以发明个比较中国风的词出来。

you的翻译:需要翻译 you 时翻译成您,但要注意有时候这类句子可以省略主语。中文的说法一般都可以更加简洁。例如:

Do you want to save?
对应
是否保存?
并不一定非要把you翻译掉。

褒义和贬义:同一个词的准确翻译在不同语言里面的褒贬可能不同。例如 fancy,选择翻译成花俏可能就更偏贬义(无聊的附注,尤其是一群人都喜欢用花俏来喷KDE的场合……花俏这词就更糟了……),考虑对应的语境,可以选择”有趣“,”漂亮“这一类的词。例如 legacy,经常用于形容老硬件,或者老设备,但形容对方的电脑老可能会让人感觉不愉快,这个词例如可以翻译成”传统“。

通顺:翻译出来是给人看的,所以保持语句的通顺很重要,多读两遍不会有什么坏处。

中文的习惯:中文和英文的语序在习惯上有很大差别,英语很多内容都后置了,对应的中文可能采用前置更好。以及英语喜欢用被动,中文喜欢用主动,原文是被动不代表你也要用被动。

例如:

File is being saved.
对应
正在保存文件。
时态:界面中很多地方都使用了现在分词,用来表示正在进行的动作,例子参见上一个。还有过去时,翻译时需要注意是否加上”了“,”已经“表达时之前发生的事情。

8、申请自己的账号

最近 KDE 申请账号似乎变严格了,所以在申请之前还请先做出足够的贡献。(如何定义实在拿不清楚……),然后找其他人来 back up 你的申请。在此之前如果想参与将翻译好的 po 文件发到邮件列表即可。上面的svn地址是不需要账号的。

9、什么时候翻译

翻译和发布周期之间的关系是很重要的,如果你想要你的翻译在某个版本之前被包括,那可要注意什么时候发布正式版,正式版之前的几天会tag,所以尽量早点完成是有好处的。其次如果说为了避免string的频繁改动,在String Freeze之后翻译是可行的(事实上KDE即使不String freeze你也不会做太多无用功),但是除了 KDE SC之外,其他的软件,例如 Amarok,KDevelop 可不一定都有这个阶段或者你能找到这个阶段……发现一个软件 Beta 了就抓紧开始吧。(当然也有完全不 Beta 的……)

订阅 Planet KDE 来注意新闻是个不错的选择。

感谢 Ni Hui 对我曾经的指导,还有 Amesists 今天听我白活了半天,让我有机会整理下这些内容。

Update:

(日期不详……) 更新标点,快捷键和中英混合。 (2015/9/15) 更新新的 Keywords 部分。

Tags: ,

6 FEEDBACKS

  1. 精华文啊…… 不过话说翻译的时候一定要用最新版本的软件吗?

    • 1、用最新版本的有助于你了解出现内容的上下文……当然不用也无所谓,一般来讲不是所有翻译都有必要用程序去测试…… 2、如果你真的用的的话会很有动力翻译……

  2. tmk

    总结得很好啊,尤其是Krunner翻译要注意的

  3. 总结得很不错,尤其是关于语言的翻译细节部分,比如中文习惯部分,很看不惯一些老的但还自称是经典的翻译,老学外国人的说话方式,不仅仅是生硬,而且还阴阳怪气的。

  4. 千里孤坟

    大小 (mb) -> 这里括号前的空格非特殊情况不需要吧。

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.