讨论: 对于代码中的常用术语是否需要翻译


#1

有些术语是写代码会频繁用到的,例如 if, while, for, module, view, generator, task, macro, function, mutable, do-block, let-block, begin-block, quote-block, promote, profile …, 这些术语词汇比较简单,可以说只要接触过编程的都认识,我感觉翻译似乎是没有必要的。

不译的优点是读者只需要记一个概念,这个概念和代码里写的是完全一致的,在help mode里直接搜索就可以找到说明及例子,例如 view, 刚开始用 Julia 的时候我并不知道这个 view 到底是个什么东西,后来在SO上看到几个实际的例子才知道是啥,但一直不知道应该怎么翻译,直到最近我看到 transifex 上翻译为“视图”。我在想对于无相关背景的读者,必然会问“视图”是个什么东西?怎么使用“视图”?到最后别人还是会告诉他用 view 这个函数,他也要记住“视图”=>“view”, 那么既然无论如何都没法避开英文,开始的时候就直接用不就好了。

(对于文献,个人观点是尽量直接读原文,所以对于翻译也是持“激进地不译”态度,但这似乎有点偏激。 文档翻译需要多征集大家意见 :sweat_smile:


#2

先谈一下翻译的理想境界:理解原文, 然后用 自己的方式 表达出来,就如自己在写作。

理解的情况下,就不会有纠结用词的问题。实在没有对应的词,用 原文 也不会造成意义上的不连贯。

当然实际一点的情况是,能理解原文在说什么,但并不能深入的理解原文谈论的东西,或者说你不能精确的把握专有名词的内涵与外延,也就没办法自己转述。


对于你举得那些单词,我比较倾向于 模块/module,宏/macro,函数/function 这三个翻译,然后其他的保留原文。这三个翻译的理由是,太常用了,对应的中文含义也十分明确,所以既然是翻译就都写成中文。其他的不翻译主要是因为: if, else, for, while 等都是专有名词,有不同于单词本身的含义,且中文没有合适的对应词,又十分常见,不翻译也不会对译文造成影响;后面那些词也差不多。

知乎上有些人不喜欢中英文混杂,讨论这个问题时,有些答主谈到了,中英文没法完全对应的问题。英文单词有时候是有歧义的,例如 set/collection 后者包含前者,这种情况下我倾向于不翻译。
之前在 transifex 还提到了报错不翻译比较好,因为出现报错时,错误信息是英文。出于方便搜索等实用的目的,所以不翻译。文献一类的同理,翻译了好一点注上原文,你得到了两个键值对(中文=>含义;中文=>英文),然后看其他文献时还得转换一下。翻译的不好又不注明原文,你还得自己去查对应的单词。

从另一方面来说,需要翻译的部分恰恰是这些专有名词,比如其他帖子提到的 broadcast, deepcopy, Metaprogramming
文档的其他部分介绍算数运算符、常用的库函数等等常规部分,不翻译看一看,也都能理解。而专有名词肯定是有他特定的含义的,所以需要单独用一个词。翻译文档的目的之一,就是了更好的理解这些词。像 deepcopy => 深拷贝,我一搜,发现其他语言如 C++ 等也有深拷贝,如果我以前学过,我马上就能知道它的含义;没学过也能从其他语言深拷贝相关的文章里进一步了解这个概念。
新的专有名词像 broadcast 你叫他 广播 或者不翻译也行,只是需要多加说明,让读者能清晰的理解他的含义。


附前车之鉴


#3

上面 @woclass 的回答挺好的。

至于 view 这个概念,应该跟sql中的view是一个意思,记得以前课本上就是叫的视图,所以翻译过来也无妨。