****紧急求救,散100分!各位有jsp国际化经验的哥们进来帮帮忙,介绍一下你们的经验吧!!
现在有一个门户网站项目,要求有中英文两套版本,由于工期很紧,也没有多余的时间去慢慢找资料!
所以来这里求教csdn的哥们!
希望有这方面经验的朋友帮帮忙,给点建设性的建议!
1)前台jsp该如何实现国际化(分别做两套好,还是用资源文件实现好?)
2)后台数据库该怎么设计来满足国际化的需求,分别建两套表来存储对应的中英文信息吗?
问题点数:100、回复次数:23Top
1 楼jFresH_MaN(十一月的萧邦-夜曲)回复于 2005-04-18 15:05:03 得分 10
1.前台使用两套同样内容的资源文件
2。数据库基本上做不到Top
2 楼jerrywh()回复于 2005-04-18 15:12:26 得分 10
JSP使用资源文件比较好.页面上的所有文字都从资源文件中调.
数据库的表还是一个表,只不过里面有中文字段又有英文字段.Top
3 楼jerrywh()回复于 2005-04-18 15:18:12 得分 0
补充:
数据库的表还是一个表,只不过里面有中文字段又有英文字段.
每次取数据都是把中英文都取出来,然后在Action中判断用用户选的是中文还是英文,如是中文就把对应的中文数据放到Bean中,如是英文就把对应的英文数据放到Bean中.这样的好处是页面的显示就不用管了,因为页面中的固定数据(如标题)都是从资源文件中取的,而数据都是在Action中处理好了的,页面就只用显示就行了.
这样以后维护起来也比较方便.Top
4 楼wangxdsharing(分享)回复于 2005-04-18 15:20:28 得分 0
感谢jFresH_MaN(TM)的热情回复, 但是目前的确有很多网站实现了多个语言的版本,不知道他们的数据库通常是怎么设计的?
也谢谢jerrywh(),不知道这个数据表一般该怎么设计呢?Top
5 楼wangxdsharing(分享)回复于 2005-04-18 15:26:35 得分 0
非常感谢jerrywh()
也就是说假如有一个product表,里面有2个字段name,factory
那么实现国际化的话就应该变成4个字段name_cn,name_en,factory_cn,factory_en
当然里面可能还有一些公用的字段如price,这个就不用分成两个字段了,因为中英文都一样
不知道我这样理解对不对?Top
6 楼jFresH_MaN(十一月的萧邦-夜曲)回复于 2005-04-18 15:28:51 得分 0
其实上面我也没有具体说
1。不用说了吧,仿照struts的做法,把Locale对象保存在session里面,然后使用对应的资源文件
2。这个以前碰到过,感觉不太可能。
因为前台的资源文件的内容是固定不变的,我们可以翻译成两个版本保存。
但数据库就不一样了,数据是会一直变动的。
那么问题就多了
同样的数据,你怎么能同步的更新两个版本语言的数据
这个翻译的工作怎么做?金山快译么?Top
7 楼jfy3d(剑事 http://www.migti.com)回复于 2005-04-18 15:32:46 得分 10
一个语言一个数据表(内容数据表)
php的开源Oscommerce就是这么做的
样例
http://www.nettoo.com.cn/javagame
Top
8 楼wangxdsharing(分享)回复于 2005-04-18 15:34:28 得分 0
to jFresH_MaN(TM),至于数据库中的动态数据,肯定要求后台管理员同时将内容的中英文版本输入Top
9 楼jFresH_MaN(十一月的萧邦-夜曲)回复于 2005-04-18 15:38:01 得分 5
既然是有人能够处理语言的翻译工作那当然好,呵呵
但是如果说页面的操作对数据库的数据进行了更新,但是后台管理员又没能及时翻译好对象的数据呢?
那么再有用户请求这个数据的时候是不是就不能得到数据呢?Top
10 楼wangxdsharing(分享)回复于 2005-04-18 15:48:41 得分 0
谢谢 jfy3d(剑事) ,实在没有好的解决方案,我就采用“一个语言一个数据表”,虽然可能会产生数据冗余
to jFresH_MaN(TM):你说的这个问题,我也在考虑,确实是一个问题Top
11 楼jFresH_MaN(十一月的萧邦-夜曲)回复于 2005-04-18 15:50:58 得分 0
当然是个问题
我觉得这个就是无法实现数据库支持多语言的根本障碍
所以我一开始说这个基本上不太可能实现的呢Top
12 楼binny0532(苏打水)回复于 2005-04-18 15:57:39 得分 5
有两种国际化的方式
一种是根据浏览器的语言来自动加载资源文件
另一种是用户可以在程序中自己选择语言
这两种都是使用多个资源文件,分别命名为xxx_语言_国家的资源文件(翻译以后需要转码,网上都有介绍)
其中第一种比较简单,搞好了以后,测试时,设置你的浏览器语言就可以了
第二种要设置locale,还要保存在cookie里,当用户下次访问时,要给用户载入Top
13 楼jerrywh()回复于 2005-04-18 16:13:43 得分 5
to: wangxdsharing(分享) 理解的正确.
to: jFresH_MaN(TM)
如果数据库中只有一种语言存在,那么这条数据暂时是无效的,等后台管理员将内容的中英文版本输入后才为有效.
这就好比发个信息,但这个信息要等上司审核后才为有效是一样的.
Top
14 楼jFresH_MaN(十一月的萧邦-夜曲)回复于 2005-04-18 16:18:37 得分 10
to jerrywh()
这样处理完全可以
但是你不觉得效率上面可能会受影响呢?
这个管理员对于这个数据库的维护的工作将是非常巨大的
如果这样成立的话还有一种比较极端问题
中文数据写如数据库,管理员没有处理这个的时候,英文用户没有办法取得数据对吧?
OK,可以妥协一下
但是如果等到管理员翻译好了,刚才的数据,他正准备更新英文数据库的一刹那,中文数据变化了,那么管理员如果没有发现,那么数据就有问题,如果发现了他就必须重新做翻译工作。
这样情况反复的发生,那么你觉得如何Top
15 楼jerrywh()回复于 2005-04-18 16:18:53 得分 0
还有:
如果要翻译的内容太多,就在表中设个字段为等级.如等级(1--5),5为最高,这样最高的就先译,这样就不会太影响最要的信息了.Top
16 楼jerrywh()回复于 2005-04-18 16:26:28 得分 5
to:jFresH_MaN(TM)
确实很搞人:)
在每个表中设三个字段(有效,更新者和更新时间)
1.如果表中只有一种语言那么这时用户也没法修改这条数据.因为有效字段为1.
2.如果语言都有,而用户要改一种语言,这时有效就设为1(不可用),更新者和更新时间也都设置.等译好了再将有效为0,更新者为管理员和更新时间.
Top
17 楼DanielYWoo(绿色毒汁)回复于 2005-04-18 16:29:35 得分 10
1. 资源文件。
2. 数据库和国际化没关系。
>>数据库的表还是一个表,只不过里面有中文字段又有英文字段.
这是违背数据库设计基本原则的,不能这么做
同意 jFresH_MaN(TM)Top
18 楼wangxdsharing(分享)回复于 2005-04-18 19:09:42 得分 0
真的很感谢各位的热情回复!
还有没有其他的更好的建议!?
无论如何,明天揭帖!Top
19 楼zhutouzip(醒了的鸟)回复于 2005-04-18 19:28:58 得分 10
楼主,到这儿去看看!
http://www-128.ibm.com/developerworks/cn/java/j-jspapp/Top
20 楼sunshine5246(阳光)回复于 2005-04-18 19:37:36 得分 10
我觉得可以在数据库的表内容里面做文章,比如有name一项,在往数据库里面填值的时候,可以在把内容分为两部分"中文#英文",之间的间隔符号自己定义,在读取内容后根据不同的语言进行选择,不知道可不可以.Top
21 楼DanielYWoo(绿色毒汁)回复于 2005-04-19 12:10:20 得分 10
>>我觉得可以在数据库的表内容里面做文章,比如有name一项,在往数据库里面填值的时候,可以在把内容分为两部分"中文#英文",之间的间隔符号自己定义,在读取内容后根据不同的语言进行选择,不知道可不可以.
这是违反数据库设计基本原则的,呵呵Top
22 楼dxtjjevans(大虫)回复于 2005-04-19 12:36:15 得分 0
学习
Top
23 楼wangxdsharing(分享)回复于 2005-04-20 23:24:55 得分 0
真诚谢谢大家得捧场!
这两天忙得来都忘了上来揭帖了!不好意思!
Top




