阅读更多
早上和后台小伙子交流语言问题时,他提到2个结论.1 双语言还好办点,多语言困难.2. 可以静态的,不可以动态的.
给了我一个链接,说多语言,是要到property里的那样文件,去把一些 比如 用户密码错误 翻译为 user idpasswordiserror,然后替换如何如何. 说,这个,只能是把静态的语言文字部分翻译,动态的就不行的,比如,写到数据库里,从数据库里读出的就不行.比如用户输入的就不行. 那个,我觉得也是,用户输入什么文字,自然是什么.
可是,还是有问题,就是用户输入的有些,我是想转换的,就是我们自己在数据库里是先要做处理,再呈现的. 比如,你 中国人,选择中文,输入 巴黎, 我是希望,出来的是 巴黎--paris 都有.这个算什么呢?
还有,我又希望,中国人,地址里,也能输入 Paris这样的,最后,所有,巴黎,paris,我们都会给你算一个地方,不会算2个地方.这又算什么?
然后,还有比如,有些地名,有英语名字,中文名字,还有本国名字,我也希望有.比如,都指向同一个地方.这和我说的支持多语言的,有关系还是没关系? 比如,München, 慕尼黑,Munich,这三个,分别是母语,中文,英语的同一个地方. 这个我们之前有讨论,但是没觉得和这个支持多语言有什么关系. 到底有关还是没关?
不过,实际在多语言里,我认为是这样的,就是一个地名,都有 你选择的语言的,就是1\用户母语的名称,在我们,就是中文, 在别人,可能就是法语,日语等等.2\英语地名,3\该国本地语言的地名. 多语言时,变的是第一个, 后面2个是固定的.
不过,怎么建立和得到这些数据,有些我没想明白.
刚刚,看到另外一篇文章, 这文章,至少是解决了,我们后台小伙子认为的,只能解决静态,不能动态的问题.http://java.chinaitlab.com/model/3293.html
最核心我看的懂的概念大致如下:
静态文字和动态文字采取不同的解决方案:
把所有的网页交给翻译公司对上面的静态文字进行翻译, 而网页上面的动态内容则需要程序解决。
需要解决的动态文字的“翻译”问题,实际上是将数据库中的一些静态或者半静态的数据进行“翻译”。下面就是一个典型的数据表:
代码清单1、为英文用户的准备的货币列表。
货币代码永远是上面所看到的英文代码,但是货币名称应当根据用户所选择的语言不同而不同。比如对中文读者就应当翻译成为下面的表:
代码清单2、为中文用户准备的货币列表。
这样的表会在网页上作为下拉菜单出现,用户看到的是货币名称,而系统内部使用的是货币代码。
国际化解决方案
这样的问题就是国际化的问题,所谓国际化就是Internationalization,简称作i18n(请参见本章最后的问答题)。
设计师所采取的实际方案是分层方案,也就是MVC模式。MVC模式将系统分为三个层次,也就是模型(Model)、视图(View)、控制器(Control)三个部份。国际化是视图部份的问题,因此应当在视图部份得到解决。
图1、MVC模式的示意图。
换言之,系统的内核可以是纯英文的;在内核外部增加一个壳层负责语言翻译工作。请见下面的概念图:
图2、英文内核和翻译壳层的概念图。
所谓内核就是系统的模型,而翻译壳层便是视图的一部份。对多语言的支持属于视图功能,因此不应当在内核解决,而应当在视图解决。这就是设计师们达成的总体方案。
多态模式 多态模式的特点
所谓的多态模式(Multiton Pattern),实际上就是单态模式的自然推广。作为对象的创建模式,多态模式或多态类有以下的特点:
多态类可有多个实例; 多态类必须自己创建、管理自己的实例,并向外界提供自己的实例。
单态类一般情况下最多只可以有一个实例,请见下面的结构图:
其他的部分我看不太懂了,不知道,我们现在是不是所谓MVC.
现在程序员在干活,我决定不随意打扰他.每天,用一个时间段讨论.
很多时间段独自干活. 提高效率. 不然,就会因为不相干的讨论,分散手头主要的东西.一天下来,可能又没解决任何问题.