吐槽 《JavaScript模式》

JavaScript pattern

注:

2013.02.07:@拔赤 翻译了这本书,见Github:https://github.com/jayli/javascript.patterns

为什么要吐槽

你以为跟《JavaScript设计模式》相比只是少两个字么,不,他们完全不在同一个翻译水平上。
这本书没有一处译注,不确定的地方机器翻译了事,是对翻译太有信心了还是太相信在线翻译了?
这本书有漏译,拼写错误,大量的语文表达错误,不通顺的语句,逻辑错误。
翻译得不专业也罢了,居然代码排版如此不负责任,这样也罢了,居然还出现一堆小学语文错误。

只想说:
翻译是件苦力活,不是完成任务了事,如果没有足够的专业性足够的耐心足够的责任感足够的时间,请不要翻译。
写作是件苦力活,作为翻译,请对作者负责不要糟蹋原作。

不专业

  • “such as object creation or hoisting”=>创建和提升对象(对象创建和变量声明提升)
  • live NodeList译做“DOM活动的查询”
  • 原来还有“代码变慢”这一说
  • 原来arguments可以译做“引数”
  • HTMLColltion是什么东西,译做“HTML容器对象”?
  • 原来对象可以被自定义函数扩大而不是扩展,内置原型可以“增加”而不是扩展
  • 函数也可以拼写错,parseINt?
  • 禁用CSS翻译成“将CSS关闭”
  • 宿主翻译成“主机”
  • 要么您就直接写repain,reflow,不要一个写成“浏览器重新绘制屏幕(原来浏览器这么NB)”,另一个写成reflow。
  • comment该译成“解释”的时候您译成了“评论”
  • 事件委托译成事件授权
  • 冒泡译成“起泡”
  • 什么叫做“最近的JavaScript库”
  • 什么叫“长期运行脚本”
  • 什么叫“当今XMLHttpRequest”
  • 响应可以译成“告知”
  • “同源策略”译成“同一个域策略”
  • 什么叫“服务器响应一些JSONP数据”
  • “阻塞”可以翻译成阻止
  • “以上这些缺点可以归纳为主要在于不方便”,我没看明白
  • “minifier”译成缩小器
  • 原生支持译成天然支持

本身翻译能力

  • 模式通过提供一个通用的词典来帮助我们更好地进行交流。=>麻烦参考下《设计模式》的翻译,“提供了一套通用的术语更方便交流”。
  • best practices =>“更好的实践”,翻译成“最佳实践”有问题么?
  • better,maintainable,robust JavaScript
  • better=>“更优、更好”,原来better有这么多个意思。
  • robust=>“强健”,有听过代码强健的么,敢情还使用了拟人手法。
  • incredible reviewers=>“难以置信的评论者”,这真是原汁原味的机器翻译呀,听起来像是说他们是神经病。
  • great ideas =>“伟大的思想”,原来前端开发者这么NB,动不动就有伟大的思想出现。
  • reinvent the wheel=>“做很多无工作”,这次倒不直译了,翻译成大家通用的“重造轮子”会死啊,谁说重造轮子===很多无用的工作了,这得让多少人情何以堪。

代码无规范

书中有一句话说“没有缩进的代码是很难阅读的。如果代码使用了不一致的缩进,也是令人头痛的事情”blablabla,结果翻译时什么规范的都是浮云了。

  • 前两页还是JavaScript,这一页就变成了Javascript
  • 前面还是var,过几行就写成v a r了
  • 前面声明了变量el,后面就写成了elt了
  • 前面的代码用了缩进,后面的代码就忘了
  • 前面还在操作符前后加空格,过两行就单边靠或者左右直接亲密接触了
  • 前面句号前无空格,后面就随机加空格了。
  • 前面还是半格双引号,后面就是全格双引号了,还有混用的!
  • 前面还在写document,刚过一行就连续出现几个documents了,到后面又成了Document了,您是健忘了么
  • 前面对得整整齐齐,后面就创造性地缩进了。

读者不是白痴

alert(myname);//”未定义”
var myname = “local”;
alert(myname);//”局部变量”
是怕读者不懂undefined么,是怕读者不知道local什么意思么,既然这样干嘛不在声明在把local直接翻译成中文
另外“输出”两个字不用写好么.//输出”undefined”

结语

还是开头两句话。
翻译是件苦力活,不是完成任务了事,如果没有足够的专业性足够的耐心足够的责任感足够的时间,请不要翻译。
写作是件苦力活,作为翻译,请对作者负责不要糟蹋原作。

吐槽完毕。

图片粘贴上传的实现

喜欢Trello的一个原因是使用简单,用户体验很好。其中一个很喜欢的地方是图片可以粘贴上传,我可以从其他网站复制一个图片在Trello的窗口中直接粘贴上传。
实现来说,主要是使用到paste事件,获取剪贴板数据及ajax上传。下面是粘贴读取图片数据的实现。

        document.getElementById("rte").focus();
        document.body.addEventListener("paste", function(e) {
            for (var i = 0; i < e.clipboardData.items.length; i++) {
                if (e.clipboardData.items[i].kind == "file" && e.clipboardData.items[i].type == "image/png") {
                    // get the blob
                    var imageFile = e.clipboardData.items[i].getAsFile();

                    // read the blob as a data URL
                    var fileReader = new FileReader();
                    fileReader.onloadend = function(e) {
                        // create an image
                        var image = document.createElement("IMG");
                        image.src = this.result;

                        // insert the image
                        var range = window.getSelection().getRangeAt(0);
                        range.insertNode(image);
                        range.collapse(false);

                        // set the selection to after the image
                        var selection = window.getSelection();
                        selection.removeAllRanges();
                        selection.addRange(range);
                    };

                    // TODO: Error Handling!
                    // fileReader.onerror = ...

                    fileReader.readAsDataURL(imageFile);

                    // prevent the default paste action
                    e.preventDefault();

                    // only paste 1 image at a time
                    break;
                }
            }
        });         

​