什么是“I18N”?
I18N就是Internationalization(该单词的首字母I与尾字母N中间隔着18个字符)。它是一个代码修改的过程,目的是实现代码完全独立于任何特定的文化信息。这类信息保存在外部文件里,在程序运行的时候被装入。有些人可能想,只要把程序中所有特定文化有关的字符串(hard-coded strings)都抽取出来放在外部的文件中,就已为国际化做好准备了。其实,除了这个,还有一些事情需要考虑,主要包括:
将字符串、图标、图片从程序中抽取出来,以文本的形式表示
选择编码页(code page),如果需要并定义编码页转换
修改所有的文本处理函数,以适应代码页的引入
修改所有与格式化输出有关的函数(如日期、时间、货币、数值等)的实现逻辑
修改整理/排除函数的实现逻辑
什么是编码页(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值来决定它们的顺序。但是,在不同的编码页可能并不如此。因此必须用特殊的规则来决定字符顺序。
分享到:
相关推荐
国际化和本地化(i18n和l10n):i18n与l10n的未来趋势.docx
国际化和本地化(i18n和l10n):i18n与l10n的历史发展.docx
国际化和本地化(i18n和l10n):地区特定格式与日期时间处理.docx
国际化和本地化(i18n和l10n):全球化设计原则.docx
国际化和本地化(i18n和l10n):国际化和本地化概论.docx
国际化和本地化(i18n和l10n):软件国际化架构设计.docx
国际化和本地化(i18n和l10n):国际化测试方法论.docx
国际化和本地化(i18n和l10n):全球化用户体验设计.docx
国际化和本地化(i18n和l10n):本地化项目管理技术教程.docx
国际化和本地化(i18n和l10n):多语言支持原理与实践.docx
国际化和本地化(i18n和l10n):本地化翻译流程与工具.docx
国际化和本地化(i18n和l10n):文化差异与本地化策略.docx
国际化和本地化(i18n和l10n):数字与货币的本地化表示.docx
国际化和本地化(i18n和l10n):国际化与本地化中的法律与合规问题.docx
此模板文字标记为您JavaScript项目添加了对i18n和l10n(翻译和国际化)的支持。 它具有以下优点: 占地面积很小 强大的语法 基于标准浏览器API的 驱动的翻译 可以集成到您的构建流水线和 产品特点 翻译和国际化您...
烧瓶语言环境为Flask实现i18n和l10n支持。 这基于旧的扩展。 使用文件或数据库获取翻译。 您可以使用此扩展名轻松地转换您的应用程序。 无需准备通天塔。 只需将您的英文文本及其翻译内容存储在文件中即可。安装pip ...
php-I18n-L10n PHP库/ api提供国际化和本地化 执照 如何使用 composer require wdes/php-i18n-l10n 看一下示例文件 剧本 该软件包包括一些可能有用的这是使用它们的示例:
1. 什么是I18n和L10n? 国际化(Internationalization),简称I18n,是让产品开发在一个他们可以简单地对产品进行语言、文化的本地化的方法的规范。本地化(Localization),简称L10n,一个使得应用、文本有适应...
在软件开发中,国际化(i18n)和本地化(L10n)是至关重要的环节,尤其对于那些需要跨越国界、服务全球用户的项目来说。塔(Tower)库正是为了解决这一问题而诞生的,它是专为ClojureScript设计的一个强大的i18n和...
gengo.js / core gengo.js的核心,用于管理i18n和l10n。文献资料请参阅。地位15年10月8日另一个版本!? 是的,而且进展很快。 1.0.0-alpha.2已经发布,但希望在本月内发布更多的alpha。 另外,我已经在npm上发布了...