I18N和L10N深度探险

I18N和L10N深度探险预备知识:无论是I18N还是L10N,从技术角度简单地说,其本质上都是字符编码的问题。  http://www.infomall.cn/cgi-bin/mallgate/20040514/http://www.i18nfaq.com/以FAQ的形式,对I18N和L10N做一些解释,并提供了一些工具,对遇到字符编码难题的朋友,也许会有一些价值。下面是对网站一些文章的学习笔记
摘要由CSDN通过智能技术生成
I18N和L10N深度探险

预备知识:

无论是I18N还是L10N,从技术角度简单地说,其本质上都是字符编码的问题。
   http://www.infomall.cn/cgi-bin/mallgate/20040514/http://www.i18nfaq.com/以FAQ的形式,对I18N和L10N做一些解释,并提供了一些工具,对遇到字符编码难题的朋友,也许会有一些价值。下面是对网站一些文章的学习笔记。

三个概念

I18N :即internationalization,软件国际化。一个过程,通过修改代码实现代码的文化独立性,即代码不依赖于任何特定文化的信息(cultural specific information)。

L10N :即localization,软件本地化。一个过程,为每一种支持的人类语言来定制软件。

Code Page :即所谓代码页,它是一个字符和数值进行映射的表。


一.
什么是”I18N"?
  I18N就是Internationalization(该单词的首字母I与尾字母N中间隔着18个字符)。它是一个代码修改的过程,目的是实现代码完全独立于任何特定的文化信息。这类信息保存在外部文件里,在程序运行的时候被装入。有些人可能想,只要把程序中所有特定文化有关的字符串(hard-coded strings)都抽取出来放在外部的文件中,就已为国际化做好准备了。其实,除了这个,还有一些事情需要考虑,主要包括:
1.    将字符串、图标、图片从程序中抽取出来,以文本的形式表示
2.    选择编码页(code page),如果需要并定义编码页转换
3.    修改所有的文本处理函数,以适应代码页的引入
4.    修改所有与格式化输出有关的函数(如日期、时间、货币、数值等)的实现逻辑
5.    修改整理/排除函数的实现逻辑
什么是编码页(code page)?
  正如我们所知,计算机只懂得数值。因此,当我们想要它处理文本时,就把一门语言中每个字符都赋以特定的值。简单地说来,这种字符与数值的对照表就叫编码页。在这种情况下,你可能常会听到诸如字符集(charset),字符表(charmap),编码(encoding),编码字符集(coded character set)等术语。虽然彼此间还有一些细微的差异,为理解的目的你可以认为它们都是指每种语言的字符、数值映射表。ASCII编码页就是一个很著名的例子,它把英文字母表和一些控制字符映射到一些特定的数值上去。 
还有哪些编码页?围绕着编码页有哪些问题?
  ASCII编码映射了127个字符,因此7位(bit)二进制数足够用来表示127个字符。程序则典型地在8位的缓冲区内处理文本。这在处理其它的语言的编码页是会出问题。例如日语这种语言,有成千让万个字符,8位二制只能表示256个不同的字符,不可能唯一地表示每一个日语字符。因此,人们用几个字节来表示一个日语字符。现在,我们又遇到另一个问题。缓冲区的字节数不等于缓冲区中的字符数。每一个简单地字符串操作,都需要将字节组装成字符。
  认识到这种复杂性,开发人员利用一种叫宽字符(wide-character)的技术来处理外语字符串。宽字符基本上是16位或32位的数据类型。容量够大,能满足亚洲语言的需求。处理字符串不再使用8位的缓冲区(char *),而是使用16位的缓冲(unsigned short *)。因此每次移动指针,你都可以保证跳过了一个字符(而不是原先那可能是半个)。
  不同的开发商使用不同的编码页,给这带来了混乱。也就是说,同一个日语字符,在一个机器上可能用0x95和0x5c两个字节表示,而在另外的机器的上则可能是0xc9和0xbd。这样一事每次交换数据都要进行一次转换(称为码表转换(charmap conversion)或码集转换(codeset conversion))。
什么是Unicode?它是如何解决这个问题的?
  每一种语言的不同的编码页,增加了那些需要支持不同语言的软件的复杂度。因而人们制定了一个世界标准,叫做unicode( http://www.unicode.org).Unicode为每个字符提供了唯一的特定数值,不论在什么平台上、不论在什么软件中,也不论什么语言。也就是说,它世界上使用的所有字符都列出来,并给每一个字符一个唯一特定数值。
什么是UTF-8?它与UNICODE是一回事吗?
  Unicode的最初目标,是用1个16位的编码来为超过65000字符提供映射。但这还不够,它不能覆盖全部历史上的文字,也不能解决传输的问题(implantation head-ache's),尤其在那些基于网络的应用中。已有的软件必须做大量的工作来程序16位的数据。
  因此,Unicode用一些基本的保留字符制定了三套编码方式。它们分别是UTF-8,UTF-16和UTF-32。正如名字所示,在UTF-8中,字符是以8位序列来编码的,用一个或几个字节来表示一个字符。这种方式的最大好处,是UTF-8保留了ASCII字符的编码做为它的一部分,例如,在UTF-8和ASCII中,“A”的编码都是0x41.
  UTF-16和UTF-32分别是Unicode的16位和32位编码方式。考虑到最初的目的,通常说的Unicode就是指UTF-16。在讨论Unicode时,搞清楚哪种编码方式非常重要。Unicdoe相关的技术介绍参见 http://www.unicode.org/unicode/standard/principles.html.
通常说的”特定文化信息(cultural specific information)”包含哪些内容?
   
1.    特定文化有关的字符串(hard-coded strings),程序中不能包含与特定文化有关的任何字符串,这类串都要放在外部文件中,从而能译成多种语言。
2.    字符分类(character classification) 如何对字符进行分类呢?例如,英文中可以将字符分为大写字符和小写字符,如果你是个C程序员,则可以用isupper()和islower()来检查。当面临多种语言时,需要考虑更多分类方法,有时候大小写分类法在某些语言中没有任何意义。
3.    数值和货币格式 货币符号,以及将数值中数位分组的方式,每个国家各不相同。
4.    日期和时间格式 年、月、日哪个写在最前面?
5.    整理/排序 如果比较字符”A”和“B”,你可以实际比较它们的ASCII值来决定它们的顺序。但是,在不同的编码页可能并不如此。因此必须用特殊的规则来决定字符顺序。

二.
什么是locale?

I18N的主要目标,是将所有与特定文化有关的信息从代码抽取出来。这也就意味着,你需要在运行时要装载这些数据,因而你的软件能够在那种语言中正常运行。在开发人员的语言中,一个locale不过是一个这种动态加载的数据的句柄(handle)。基于这种技术,locale有几个组件,基本的组件有语言、地域和编码页。
什么是“code page”?为什么需要它?

由于一种语言可有多个编码页(如日语,有EUC、Shift-JIS、UTF-8等编码页),有时在两个系统间交换数据时必须做编码页转换。另一种情况是,当你在一个分布式系统上工作时且决定用Unicode编码页保存数据时,在进行显示时必须转换成本地的编码;或者当你收到用户的输入等。编码页转换通常是一个查表操作,非常耗费资源。只有很少的编码页转换,如UTF-16到UTF-8提供了转换算法。
什么是转换敏感的编码页shift sensitive codepages?

在一些亚洲语言的编码中,一些特殊的字节序列,是用来区分单字节字符和双字节字符的。例如,在日语ISO-2022-JP编码页中,字节序列/x1B/x24/x40用来表示从单字节字符进入双字节字符,而字节序列/x1B/x28/x42则用来表示从双字节字符到单字节字符。换句话说,在分析一个字符串时,如果你遇到了字节序列/x1B/x24/x40,则你知道从此以后的将是一些双字节字符。用以标志从单字节字符转到双字节字符的字节序列叫做shift-in序列,另一个则叫shift-out序列。这些转换点对解析字符串提出了挑战,因为你要一直保存着当前的状态,以便进行相关的字符器操作。ISO-2022-JP 和 ISO-2022-KR 是两个非常著名的日语和韩语转换敏感编码页,流行于很多的HTML页面中。
什么是EBCDIC编码页?
  
EBCDIC这个编码页的缺点是,即使英文字符也不与ASCII值一致。这儿有EBCDIC和ASCII的对照表。 
关于亚洲字符集有什么好的参考书供初学者?

Ken Lunde的CJKV Information Processing.
什么是国际化QA(internationalization QA)?

就是那些特别关注产品的语言兼容性测试的QA。这包括测试产品在其语言环境中识别和初始化语言处理的行为、适应那个环境的能力。白盒测试应当典型地包括检查那此实现I18N兼容性标准的代码(如使用正确实的API等)。黑盒测试应典型地包括在不同的语言环境中产品全部功能的回归测试以及测试界面上的本地化语言的字符串。特定文化信息也需要检查(如日期、时间显示等)。
什么是本地化QA(localization QA)?

本地化QA在软件本地化/翻译完这后进行。重点不仅包括功能,而且包括GUI上下文中的信息的翻译是否适宜。还包括检查GUI布局,确保
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值