知乎专栏 |
在开始具体介绍之前,需要先介绍几个术语:
i18n: 就是internationalization, 国际化,由于首字母"i"和末尾字母"n"间有18个字符,所以简称i18n. internationalization指为了使应用程序能适应不同的语言和地区间的变化而不作系统性的变化所采取的设计措施。
l10n: 就是localization, 本地化,由于首字母"l"和末尾字母"n"间有10个字母,所以简称l10n. localization指为了使应用软件能够在某一特定语言环境或地区使用而加入本地特殊化部件和翻译后文本的过程。
locale: 简单来说是指语言和区域进行特殊组合的一个标志,如:en-us, zh-cn, zh-tw
l10n有很多历史遗留问题,l10n目前已经被i18n取代。
我自己曾经使用过下面四种方式实现语言包
定义一个数组
使用数据库
使用文件
使用数据结构
相比几年前,目前各种语言对UTF-8支持都比较好。
在BBS上常常看到一些网友抱怨UTF-8出现“乱码”问题,让我们看看都有哪些地方涉及编码问题。
用户输入法->IDE开发环境,浏览器->web容器->数据库
任何一个环节出现问题有可能出现问题
首先是输入法,早期输入法可能是GB2312或GBK。
其次是IDE开发环境,当你创建一个空文件时,它的已经具备某种编码,一般外国开发工具默认是acsii,这一点我认为Dreamware做的最好,可以随时切换编码。
浏览器现在基本不用担心
web容器apache 2.x对unicode支持很好,tomcat本身机器码就是unicode。
数据库问题也不大,PostgreSQL相比MySQL对Unicode支持也早,也比较好。MySQL这方面有点复杂。
提示 | |
---|---|
如果你不考虑使用Unicode并且想支持繁体和简体中文,你可以使用GBK,但我建议你使用GB18030。 Unicode不是最好的选择,它占用三个字节,数据量较大,选择适合你的编码,如果你是英文网站,请使用ISO-8859-1,如果是简体中文,请使用GB2312 |