现在的位置: 首页 > 综合 > 正文

Windows程序设计翻译太烂

2012年10月15日 ⁄ 综合 ⁄ 共 6259字 ⁄ 字号 评论关闭
这是《windows程序设计》(第五版)122页的一节.读了之后,百思不得其解,甚使郁闷!设置都不变,居然得出了两种分辨效率:1.每英寸大概就为13像素;2.每英寸就为16像素?还有:10磅字既是10/72英寸,如果乘以96点,每英寸大概就为13像素.这又是什么逻辑啊?

今天,又思考了一番,肯定是翻译错了。然后突然,觉得移动两个逗号后,一切都那么合情合理!以前总以为自己对dpi和ppi不是很了解,所以查的都是介绍两者以及两者方面的资料,今天查了windows程序设计的翻译错误,一切果然一目了然了。除了骂下本书的翻译者,也只能怪自己的英语太烂。
先看看语文的描述:
That's the small font, which is based on a display resolution of 96 dots per inch. I said it's a 10-point font. Ten points is 10/72 inch, which if you multiply by 96 dots per inch yields a result of (approximately) 13 pixels. That's tmHeight minus tmInternalLeading. The line spacing is 12 points, or 12/72 inch, which multiplied by 96 dots per inch yields 16 pixels. That's tmHeight.
Ten points is 10/72 inch, which if you multiply by 96 dots per inch yields a result of (approximately) 13 pixels.其实,翻译的错误在于一个符号:10磅字既是10/72英寸,如果乘以96点每英寸,大概就为13像素.注意,我将那个逗号放到了每英寸的后面!也许一切错误的原因,都是这个小小的逗号.

网上高手发现的:

1.(23页第13行):“宽字符不需要Unicode。Unicode是一种可能的宽字符编码。”这是什么意思?查查原文,原来是:Wide characters aren't necessarrily Unicode. Unicode is one possible wide-character encoding.意思是说:“宽字符并不等同于Unicode。 Unicode只是一种可行的宽字符编码(方案)。”

2.(35页第13行):“你必须用sizeof(TCHAR)将其分开。”其实看书的人看到此处,应该知道这里不应该是什么“分开”,而应该是“除” 查查原文,果不其然:You must divide it by sizeof (TCHAR). 译者是不是已经无知到了只知道divide一词的“分开”这个义项?

3.(65页第7行):“……只不过必须认为其大小是某一特定尺寸,或者在程序运行时其大小保持不变。”这似乎有悖常识。对比一下原文( 括号中的部分为之前的句子):( You can do almost anything you want with your program's client area ) —anything, that is, except assume that it will be a particular size or that the size will remain constant while your program is running.while your program is running.显然,从anything一词开始的部分应译:“只是不能认定其大小为一特定尺寸或在程序运 行期间保持不变。”原译的意思正好反过来了。

4.(76页第4行):“它是字体设计者建议加在横向字符之间的空间大小。”这有点不对头,tmExternalLeading明明是一个纵向的长度,怎么 会说“横向字符之间”?看看原文:This is an amount of space that the designer of the font suggests be added between successive rows of displayed text.知道了吧:译书的人把successive rows(意为“相邻行”)译成了“横向字符”,何等荒谬

5.(100页第1行):“当通过GetScrollInfo函数使用SIF_RANGE标志时,应把nMin和nMax字段设置为从函数返回的当前范围。”这明显不对了 原文是:When you use the SIF_RANGE flag with the GetScrollInfo function, the nMin and nMax fields will be set to the current range on return from the function.应译:“调用GetScrollInfo函数时如果指定了SIF_RANGE标志,则函数返回时将nMin 和nMax字段设为当前范围值。”

6.(100页第11行):“在SetScrollInfo函数中仅使用SIF_DISABLENOSCROLL标志。如果指定了此标志,并且新的滚动条参数使滚动条不可见 则禁用该滚动条。”这一段有点莫明其妙。看看原文:You use the SIF_DISABLENOSCROLL flag only with the SetScrollInfo function. If this flag is specified and the new scroll bar arguments would normally render the scroll bar invisible, this scroll renders the scroll bar disabled instead. (I'll explain this more shortly.) 这话应译:SIF_DISABLENOSCROLL 标志只与SetScrollInfo函数配合使用。(在调用此函数时)如果提供了在通常情况下会导致滚动条不可见的新的滚动条参数,而且 指定了这一标志,则此时滚动条只是被禁用而不是被隐藏。”(这句话的翻译稍有难度,为更通顺起见,我的译文在次序上做了一点 调整)

7.(100页倒数第2行):“新滚动条函数的一个好的功能是当使用与滚动条范围一样大的页面时,……”什么叫“使用与滚动条范围一样大的 页面”?看看原文:One nice feature of the new scroll bar functions is that when you use a scroll bar page size。其中 use a scroll bar page size应该译成“使用滚动条页面尺寸”,而不是“使用与滚动条范围一样大的页面”。

8.(107页倒数第5行):“而在较慢的机器上,则可以考虑对GetSystemMetrics使用SB_SLOWMACHINE参数作为替换的处理过程。”我发觉自己 好象不懂汉语了。:-)还是看原文吧:But try your code out on a slow machine, and perhaps think about using the SB_SLOWMACHINE argument to GetSystemMetrics for alternative processing for slow machines. 这应该译作:“但是,你应该 在较慢的机器上测试自己的代码,此外,也可以考虑使用SB_SLOWMACHINE 参数调用tSystemMetrics函数,以便为较慢的机器提供别 的处理过程。”

9.(120页倒数第2行):“这些看起来更像直接的定义。”这好象没什么问题,但对比一下原文:These seem like straightforward definitions until one begins to think through their implications. 这句话被译书的砍掉了后半截,完整的意思应该是:“这 看起来象是直接的定义,但只要思考一下其中的含义就会发现事实并非如此。”

10.(122页第14行):“10磅即是10/72英寸,如果乘以96点,每英寸大概就为13像素。”这肯定不对。来看原文:Ten points is 10/72 inch, which if you multiply by 96 dots per inch yields a result of (approximately) 13 pixels.这下明白问题之所在了吧 ?dots per inch是分辨率的单位,应该译成“点每英寸”或“点/英寸”(就象速度的单位是“米每秒”或“米/秒”一样)。知道 了这一点,此句其实很简单:“10磅即是10/72英寸,乘以96点每英寸,那就大约是13个像素。”后面第18行也有类似问题。其中的 “乘以120点,每英寸等于”应改成“乘以120点每英寸,等于”。

11.(122页第19行):“像第四章一样,再次强调所显示的是实际的度量大小,因此您可以理解它工作的方式。不要在您的程序中对此编写代 码。”什么叫“对此编写代码”?看一下原文:As in Chapter 4, let me emphasize again that I'm showing you actual metrics so that you can understand how this works. Do not code these numbers in your programs。这并不难译:“就象在 第4章中做的那样,我要再次强调,在此展示这些实际尺寸只是为了让你理解其工作机制。在你的程序中不要直接使用这些数字。”

12.(125页倒数第9行):“注意最重要的位是标为0的8位,”我怎么也搞不懂:这8个0为什么会是“最重要的”。来看原文:Notice that the most-significant 8 bits are zero。most-significant在这里意思是“最高的”而不是什么“最重要的”!

13.(128页第17行):“大多数程序员以不同的方式使用SaveDC和RestoreDC。然而,更像汇编语言中的PUSH和POP指令,当您调用SaveDC时, 不需要保存返回值。”大多数程序员的方式是什么?来看原文:Most programmers use SaveDC and RestoreDC in a different manner, however, much like PUSH and POP instructions in assembly language. When you call SaveDC, you don't need to save the return value。这应该译成:“但是,大多数程序员以另一种方式使用SaveDC和RestoreDC,就如同在汇编语言中使用PUSH 和POP指令一样。当调用SaveDC时,你并不需要保存返回值。”

14.(153页倒数第2行):“您可以设想从一个无穷大的封闭区域内部的点画线,”真是这样吗?让原文来回答:you can imagine a line drawn from a point in an enclosed area to infinity。这应该译成:“你可以设想从封闭区域中的一个点作一直线延伸到无穷远 处”。译书的人那种译法真的是有点搞笑了。154页第4行那句“您仍旧可以……”也有同样的问题。毕竟,同一只猪放的只能是同样 的臭屁!:-)

15.(163页第3行):“更像客户区坐标。”单看这句倒没什么问题,但与与前面的内容结合,就大有疑问。对比一下原文吧:most likely client-area coordinates.老天,译手们竟然把likely译成“象”!!!我都有点不好意思把这样简单的句子写出来了:“多半是客 户区坐标。”

16,Windows将xViewExt设置为某个像素数而将xWinExt设置为xViewExt像素占据的一英寸内有几百像素的长度。”什么叫“xViewExt像素占据 的一英寸内有几百像素的长度”?来看原文:Windows sets xViewExt to be a certain number of pixels and xWinExt to be the length in hundredths of an inch occupied by xViewExt pixels。这个句子稍有难度,但即便
英文水平粗疏如我之人也应该能给出正确的译文:“Windows将xViewExt设置为某一像素数,并将xWinExt设置为以百分之一英寸为单 位的、xViewExt个像素所占据的长度。”后面一句“比值给出了一英寸内有几百个像素的数值”一句也是同样的问题,应改成“比值 给出了百分之一的长度内包含的像素数”。

17.(193页第1行):“在一些交叠的操作中通常相互补充使用。”什么叫“交叠的操作”?看看原文:often complementing each other with some overlap。这很简单,应该译成:“它们的功能常常互为补充,也有一些重叠。”

18.(199页倒数第1行):“在面向工作组的Windows中”熟悉Windows的人一看就知道这是个什么问题:原文中此处是Windows forWorkgroups 那是微软Windows系列产品中的一种,译手们把这个产品名直接译出来虽然意思没错,但却会让不明就里的人一头雾水。对于产品名 ,一般是不译的,直接使用就行了。就象Office中的PowerPoint一样,你如果硬要把它译出来,那就是“电源插座”(我实在不知道 微软怎么会给自己的产品取这么一个名字:-))。你如果想知道某人的电脑有没有装PowerPoint,你要是问他:“你的电脑有没有‘ 电源插座’”,他肯定会象看一个怪物似的盯着你,回答说:“当然有。不但电脑上有,墙上还有几个!”呵呵!

19.(213页第9行):“这些字符消息是我们将文本传递给窗口过程时遇到的第一个消息。它们不是唯一的消息。”有点看不懂?来看原文: These character messages are the first messages we've encountered that deliver text to the window procedure. They're not the only ones。这显然应该译:“这些消息是我们遇到的第一批向窗口过程传递文本的消息。它们不是唯一具有这一功能的消 息。”

20.(213页第11行):“任何窗口过程都与您用RegisterClassA(RegisterClass的ANSI版)注册的窗口类相联系,从而获得含有ANSI字符代 码的消息。”岂有此理!那RegisterClassW呢?干什么用?来看原文:Any window procedure associated with a window class that you register with RegisterClassA (the ANSI version of RegisterClass) gets messages that contain ANSI character codes。初中生都不应该看不懂这句话!其意思应该是:“与你用RegisterClassA(RegisterClass函数的ANSI版本)注册的窗口类相 关的任何窗口都会接收到含ANSI字符代码的消息。”

21.(P681页的最下方),书上写的RowLength = ((bmch.bcWidth * bmch.bcBitCount + 31) & 31) 〉〉 3;我看不明白,&31的话不是截留低 5位吗,显然应该是RowLength = ((bmch.bcWidth * bmch.bcBitCount + 31) & ~ 31) 〉〉 3; 这样才等价于“/32”啊。

错误远不止这么多,不想说了,结合英文版来看吧!

 

抱歉!评论已关闭.