2.5. 编程注意事项
编程或构造一个系统前,通常需要注意国际化和本地化的问题。
维基百科上讲 [1]:
国际化是指在设计软件,将软件与特定语言及地区脱钩的过程。当软件被移植到不同的语言及地区时,软件本身不用做内部工程上的改变或修正。本地化则是指当移植软件时,加上与特定区域设置有关的信息和翻译文件的过程。国际化和本地化之间的区别虽然微妙,但却很重要。国际化意味着产品有适用于任何地方的“潜力”;本地化则是为了更适合于“特定”地方的使用,而另外增添的特色。用一项产品来说,国际化只需做一次,但本地化则要针对不同的区域各做一次。 这两者之间是互补的,并且两者合起来才能让一个系统适用于各地。
不同语言如何实现国际化和本地化,有些差异,表现在使用的函数和API上不一样,本质上,是没有差别的。无非是把要处理的字符串再加一层“标识”,程序中使用“标识”,输出时,使用“标识”在本地对应的字符串。所以,通常为实现国际化和本地化,就比纯粹的程序多了一些存放不同语言对应实际字符串的文件。如,linux上C编译后安装后的文件多了“*.mo”一样的文件(/)。
Linux | [hxli@localhost zh_CN]$ pwd /usr/share/locale/zh_CN [hxli@localhost zh_CN]$ ls LC_MESSAGES/libc.* LC_MESSAGES/libc.mo |
另外,注意一下以下常用编程语言的知识点,余下的详细知识,请查阅相关资料:
1) C [1]、C++、Python2内部字符串都是使用当前系统默认编码
2) Python3、Java内部字符串用Unicode保存
3) Ruby有一个内部变量$KCODE用来表示可识别的多字节字符串的编码,变量值为"EUC" "SJIS" "UTF8" "NONE"之一
[1] C语言国际化和本地化相关的一点知识:要打开本地语言支持(NLS),也就是说,用英语之外的语言显示程序的信息,需要一个Gettext API 的实现。有些操作系统内置了这些(比如 Linux, NetBSD, Solaris),对于其它系统,可以从 http://developer.postgresql.org/~petere/bsd-gettext/ 下载一个额外的包。如果在使用 Glibc 里面的 Gettext 实现,那么就额外需要 GNU Gettext 包,因为需要里面的几个工具程序。对于任何其它的实现,应该不需要它。
[1] 源自:http://zh.wikipedia.org/zh-cn/国际化与本地化