看完了「Maintainable JavaScript」的 TB 翻译本,我实在不能忍了…

我只是草草地看了一遍,就发现了如此多的问题,我真不忍心再看第二遍,既怕找到更多的错,伤了你们的心,又怕过于愤怒,伤了自己的身。

接受我的凌辱吧,TB的翻译们!

谦虚还是推脱

译者序,你们谦虚了一下还「我们尽最大的努力…有所纰漏…」这绝对是对书中所犯过错的一种事先推脱,你们这哪叫「有所纰漏」明显是错误漫天飞啊。我看过的书,只有 10 块钱从三轮车上买的《风云传》才有如此高的错误率。

如果继续以如此不认真,不用心地态度翻译任何书籍,我劝你们还是趁早立地成佛吧。

通用错误

  1. 书名《编写可维护的JavaScript》 「编写」二字从何而来,作者很强调动词名词的区别,「Maintainable」是形容词,是对名词「JavaScript」的修饰,所以原名其实是个名词,到了中文版,动词加名词,好了,成了省略主语的句子…而且,书中绝大部分不是讲的如何「写」而是 JavaScript 的可维护性,中文版的书名则把重点给模糊了
  2. 做技术书的翻译,需要约定一下中文与英文之间是否需要空格,结果是有的有,有的没,全无章法(后面列举了无数处)
  3. 句号乱加,须知英文倾向于尽可能短的句子,所以在中文来说是一句话,英文可能拆成好几句,而你们很多时候的分句跟英文一样,举个例子,第 39 页「当使用了continue时,JSLint会给出警告。而JSHint不会给出警告。」(这句更恰当的翻译应该是「JSLint会在使用continue的地方给出警告,而JSHint不会。」)
  4. 第 1 页,「本书约定 建议/警告」,结果 99% 的地方都让你们搞成了普通文本
  5. 列表的格式,尤其是行距,应当字体和行距都比正常文本稍小
  6. 很多情况「的」、「地」不分

具体错误

  1. 第 6 页「2个空格表示一个缩进,2个空格表示一个缩进,以及8个…」
  2. 第 23 页「多行注释不仅仅可以用来包裹跨行文本,这取决于你。」这句话怎么看怎么别扭,所以我看了原文「Multiline comments aren’t required to span multiple lines; the choice is up to you.」应该翻译成「多行注释并不一定要跨行,这完全取决于你。」
  3. 第 28 页 顶部的三句话 看起来是正常的文本 其实是代码用例的文档注释部分… 如果你往下看会发现*/没有开始 你往前翻 会看到27页的底部有个孤零零的/**
  4. 第 43 页 单var的缩进 明显不对 为三空格缩进 且文中明显说了「赋值运算符应当对其」而在下面紧接着的代码中 value和result变量所对应的等号明显没有对其(我不明白了 代码的字体是「courier new」 你们怎么会这都对不齐呢)
  5. 第 50 页「我们推荐不要使用==和!==,而是应当使用===和!==。」这里有两个问题 第一个很明显 第二个是「我们」 因为作者一直都是「我」
  6. 第 72 页 6.1.3第2段「两 个」中间的空格是个什么事情?
  7. 第 74 页 第3段「user strict」是想误人子弟到死吗…再加一个拼写错误「ReferenceErroe
  8. 第 78 页「还是都用小写字母形式来定义命名空间,就像Dojo?」我能说什么呢…
  9. 第 80 页「你可以像这样定义你的模块」后面跟一段代码 你是不是应该跟之前的一样用个冒号呢?
  10. 第 81 页 第2段多一个空格 第4段(代码不算段落)多一个空格 脚注多一个空格
  11. 第 94 页 第4段 多一个空格 为什么说是多了呢 因为第1段和第5段类似的位置没有
  12. 第 99 页 代码中有两处冒号后面没有空格(原文是值对齐的方式…)
  13. 第 101 页 倒数两段代码的换行都不对 对比了一下原作 应该是编辑器的自动换行导致的 那你就做得更好一点 不要让人误解了啊
  14. 第 120 页 句号后面还需要空格?
  15. 第 123 页 倒数第2段 多一个空格
  16. 第 135 页 本页都是「Javascript」而其他的地方都是「JavaScript」当然 后者是更好的
  17. 第 136 页 除了集成了上面这一条 还有个地方翻译得相当不地道「被部署到生产的代码…」平时也这么说吗 而不是「生产环境」?
  18. 第 137 页 脚注 你真的确定一个对象一个文件的做法的初衷是「让不同的人维护各自不同的文件,即完全避免多人维护一个文件的可能」?我太不能同意了 请不要误人子弟 在我看来这么做有两个原因 1是让文件名说明自己是干什么的 2是降低冲突的可能 而第1点是主要原因 因为这样可提高可维护性
  19. 第 141 页 第一行「所以tests/data.js即date.js」的测试代码…
  20. 第 142 页「array-sort.js」?对 原文中是有中划线 可那是英文的转行字符好吧… 英文叫做hyphen 这一段的其他地方都是arraysort 叫别人如何理解这根中划线呢?
  21. 第 144 页「灵活的组合」是不是应该为「地」呢?
  22. 第 164 页「从可以下载YUI Compressor。」需要解谜吗?
  23. 第 170 页 倒数1,2段都多出来空格
  24. 第 171 页「如果你在使Nginx」…Nginx是个武器?倒数第1段多个空格
  25. 第 192 页「每几分钟运行一次」
  26. 第 194 页 倒数代码中缺失引号 原本也缺失…
  27. 第 195 页 第2段看了半天 没看明白什么意思 因为第一句跟后面的理由驴唇不对马嘴 原文是这样的「You may want to include documentation generation in its own automated build. The reason is …」翻译成「你可能希望在自动构建的过程当中加入文档生成。原因在于…」应当翻译成「你可能希望把文档生成放到它自己专有的自动构建过程中…」
  28. 第 195 页 倒数第2段 翻译得如此生硬 我可以断定那个「处理」是「handle」还有那个「更大」其实并没有跟任何东西作比较 这里它仅仅只是说明了「大型」…翻译完了 需要自己读一下 看看平时自己是否会这么说话啊
  29. 第 195 页 (这页谁翻的?!)倒数第1段「假设集成版本没有错误,这样可以节省时间,但是需要确保你在部署完全相同的测试过的代码。」这句话我半天没反应过来 只好求助于原版 发现这句话简直胡翻 原文是这样的「Doing so can save time and, assuming there were no errors in the integration build, ensure that you’re deploying the exact same code that was tested.」看到那个「and」了没?也就是说你把逗号中间的话去到还是通的 逗号中间的句子是对后面句子的修饰 翻译有如下问题 首先「集成版本」应该是「集成构建」,其次,节省时间,跟「集成构建」没有任何因果关系,然后…算了 我还是上更恰当的翻译吧:「这么做可以节省时间以及(在集成构建不发生错误的情况下)确保你部署的是完全相同的测试过的代码。」
  30. 第 208 页「紧跟着一个双引号」 你管 : 叫双引号?
  31. 第 209 页 在接近底部 TODO后面跟了个什么?为什么跟其他的不一样?
  32. 第 210-212 页 缩进全都不对
  33. 第 217页「括起来的语句应当比较复合语句多一层缩进」我假设你是这么干的:由于某些思维惯式 你用拼音打了「bijiaofuhe」得到的是「比较符合」你发现「符合」不对 于是把「符」改成了「复」 但你忘记了那个「较」
  34. 第 221 页 我敢肯定倒数第2段的「减减」是全角的
  35. 第 223 页 Grant
  36. 第 224 页「项目使用了Sass,一个很受欢迎的CSS预解释器,倾向于使用Rake。」请使用假设句式,不然我会误认为是Rake项目使用Sass
  37. 第 224 页 url都能弄错 joodoc多了个o 至于是哪个o 你们可以自己找到 难度应该不大
  38. 第 225 页 JSHint和JSLint的url是一样的了…
  39. 第 226 页 QUnit的url怎么成了OUnit…</p>