CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  Web 开发

****紧急求救,散100分!各位有jsp国际化经验的哥们进来帮帮忙,介绍一下你们的经验吧!!

楼主wangxdsharing(分享)2005-04-18 14:57:46 在 Java / Web 开发 提问

现在有一个门户网站项目,要求有中英文两套版本,由于工期很紧,也没有多余的时间去慢慢找资料!  
  所以来这里求教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

相关问题

  • 那位老兄有做过国际化经验?
  • jsp的哥们帮个忙?急..................
  • 国际化问题???
  • KDE的国际化问题
  • struts国际化的问题
  • struts国际化的问题
  • 谈谈Java的国际化。
  • struts中的国际化
  • struts国际化问题
  • struts国际化问题!

关键词

  • 数据库
  • 数据
  • 语言
  • 字段
  • 文件
  • 中英文
  • 翻译
  • 经验
  • 文字
  • 内容

得分解答快速导航

  • 帖主:wangxdsharing
  • jFresH_MaN
  • jerrywh
  • jfy3d
  • jFresH_MaN
  • binny0532
  • jerrywh
  • jFresH_MaN
  • jerrywh
  • DanielYWoo
  • zhutouzip
  • sunshine5246
  • DanielYWoo

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo