16.1 国际化介绍

当把你的程序带到国际化舞态上时,想到的第一件事情就是翻译.你需要为你的应用程序中的每一个字符串针对每一种可能用到的语言准备一个翻译字符串.在 wxWidgets中,这是通过使用wxLocale类来加载某个分类条目来实现的.这种技术也许和你以前用过的字符串表的方式不太一样,字符串表的方式是给程序中的每个字符串一个标识符,然后通过切换不同的字符串表来实现翻译的.而分类条目则是通过把字符串按照某一种分类进行翻译的作法(你当然可以使用你的本地系统支持的任何方法,不过要注意,在wxWidgets库内部,也使用的是分类条目的方法).

如果没有指定分类条目,源代码中的字符串将被显示在用户界面的菜单或者按钮等控件上.如果你的本地语言包含非ASCII字符,你就必须进行翻译(使用一个分类条目),因为源代码只支持ASCII码.

代表另外一种语言的文本可以采用各种各样的编码方式,这意味着同一个字节在不同的语言中可能代表不同的字符.你需要确定你的应用程序能够正确识别这些编码并且你的GUI控件可以正确显示这些编码.也就是说,你需要注意各种情况下使用的编码方式以及不同编码方式之间的互相转换的问题.

国际化的另外一个方面是格式化数字,日期和时间.注意即使是在同一种语言中,它们也有可能不同.比如英语中的数字1,234.56在德语中被写作1.234,56,而在瑞士德语中则被写作1'234.56.在美国11月10日的表示方法是11/10,而同样的写法在UK则代表10月11 日.我们很快会介绍wxWidgets如何处理这些复杂的情况.

翻译的字符串有时候会比代码中的英文字符串要长,这意味着窗口控件的布局需要调整为不同的大小.在第7章(使用布局控件进行布局)中介绍的布局控件可以解决这个问题.另外一个关于布局的问题是,英语是从左向右阅读的,而某些语言,比如阿拉伯语和希伯来语是从右到左的顺序读的(称为 RTL),目前wxWidgets中对于这个问题还没有一个很好的解决机制.

最后一个需要根据不同的语言进行调整的项目是你用到的图片和声音.比如说,你正在制作一个电话目录程序,它有一个特性是可以读出来电话号码,这个读音是语言有关的,另外你也可能需要根据国家的不同使用不同的图片.