论坛首页 综合技术论坛

如何实现双(多)语种网站内容的国际化?

浏览 11728 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-11-02  
如果单单是内容的保存,utf-8即可。
0 请登录后投票
   发表时间:2006-11-02  
hgq0011 写道
"但是“内容”的国际化却没有做到。"你的意思"内容"是指:比如中国人用,那么它的用中文来描叙自己的内容,小日本就用日文来描叙,,,,然后大家都来看,所有的内容显示的语言有中文,日文,,,,,?
这个确实也是个问题.:(
我所设计过的一个系统这样来处理的.
数据库对应的表的每个字段(已知可能中文用户要看到中文,英文用户要看到英文,,,,,)对应有*CN,*EN类似的字段来表示.
页面采用你所说的I18来处理,中文用户那么它看到的是中文界面,E文用户那么它看到的是E文界面,那么通常他们都会用自己的语言(中文用户用中文)来填写内容.
业务处理:可以在应用的上下文中得到用户使用的语言.如果是CN用户那么把对应的值填写到*CN字段中,那么对应的其它的字段如*EN就由数据库管理员把他们翻译成E文.在显示的时候也是根据客户端的区域选择它所要获取的是那个字段值.

不知道,有没有更好的办法.



我也觉得应该在 db schema design 上解决。

初步想法。

text table 包括如下子段
text_id, topic_id, language_id, the_text

topic 和 text 之间的对应关系是 1 对 多。

比如, topic 1001,对应的 en, cn, jp text如下。

text_id, topic_id, language_id, the_text
1, 1001, en, hello
2, 1001, cn, 你好
3, 1001, jp, xxxx

0 请登录后投票
   发表时间:2006-11-02  
以前我做的一个多语项目也是用数据字段来判断的
0 请登录后投票
   发表时间:2006-11-02  
刚刚完工一个多语的项目,基本上是按布娃娃写的设计的。

系统支持n种语言,对任意一个内容项,都有n种语言。用户在编辑内容的时候,也必须提供n种语言。

不过那个系统要求在任何一页都可以在语言间切换,所以要把每个内容项的语言都缓存在session里面,这样写SQL和对Java对象的映射特麻烦。用alter table来扩充表可能还简单些。
0 请登录后投票
   发表时间:2006-11-02  
Lucas Lee 写道
我觉得楼主说的不清楚,似乎说到是每个语种的数据库因为有各自的编码而需要分别做?

如果是这样,那么数据库里采用Unicode编码即可。

任何编码的问题,在国际化问题里应该都容易解决的。


对不起各位,可能是我说的不过清楚,我在这里说明一下。

我说的并不是因为编码保存的问题,而是一个系统同时可以支持多种文字,简单说,同一个网站,既有中文版,英文版,法文版......

那么这里就存在一个语言选择的问题,软件本身的语言选择就是我们耳熟能详的“国际化”,根据用户的区域,或者设置选择对应的语言。但是软件中有很多内容是靠用户维护进取的,比如网站首页的“公司新闻”,这样的“内容”要做到选择相应的语言显示就不是前面说的软件“国际化”可以做到的了。

根据各位兄弟的意见,我总结了一下,主要分两类解决方法:

1。 使用智能翻译。根据用户的设置,把内容翻译成对应的语言
2。 为每个语种设计一套数据库,维护“内容”时,每种语言都维护进去
3。 设计一套适用多种语言的数据库。例如使用一个数据字典来定义每一种语言,然后在维护每一种语言进去

我个人比较倾向第3种方案,因为我是比较怕麻烦的人,hoho,第一种比较困难,第二种工作量也太大了点吧。

我的方案大致如下:

建立两张表,Language和Content,Language相当于一个数据字典,列出系统用到的所有语种。Content表就是维护的内容——也就是我们想解决的多语种显示的东西。两张表表样如下:

Language

  id---- |---langeuage----|---description----
  1-----|---------zh---------|------中文---------
  2-----|---------en---------|------英文---------
  3-----|---------fr---------|------法文---------


Content


id----|---content------------------|---languageId------
1-----|----你好!-------------------|------1------------
2-----|----How are you!----------|------2------------
3-----|----fa wen bu hui---------|------3------------


这样Content表中就保存了需要语种的所有的语言信息(当然要维护进去),然后再根据用户的需要,对应Language表选择出对应语种的Content内容。

不知道大家意见如何?


0 请登录后投票
   发表时间:2006-11-03  

如何识别 content  1, 2, 3 这三条记录属于同一条信息的不同语言版本?

0 请登录后投票
   发表时间:2006-11-03  
buaawhl 写道

如何识别 content  1, 2, 3 这三条记录属于同一条信息的不同语言版本?


没错,看来还要加一个字段,标识属于同一条逻辑信息.
0 请登录后投票
   发表时间:2006-11-04  
1. language code是ISO标准,用来做主键就够了。

2. language code和content id和起来做复合主键,没有必要外加个没有任何信息的id
0 请登录后投票
   发表时间:2006-11-04  
bigpanda 写道
1. language code是ISO标准,用来做主键就够了。

2. language code和content id和起来做复合主键,没有必要外加个没有任何信息的id


在这个Id我倒是并不这样认为,虽然 language code 和 content id 都符合做主键的要求,但是都属于“业务主键”,而用业务主键如果以后改动将非常麻烦,使用我还是认为加一个Id作为“逻辑主键”比较好。不过这个好像不是我们这里要讨论的了,哈哈。

关于“业务主键”和“逻辑主键”的讨论,在很久以前,robbin和庄表伟等大牛就发起了一阵讨论狂潮,可以在论讨搜索一下这个帖子。
0 请登录后投票
   发表时间:2006-11-04  
tomkoo 写道


对不起各位,可能是我说的不过清楚,我在这里说明一下。

我说的并不是因为编码保存的问题,而是一个系统同时可以支持多种文字,简单说,同一个网站,既有中文版,英文版,法文版......

那么这里就存在一个语言选择的问题,软件本身的语言选择就是我们耳熟能详的“国际化”,根据用户的区域,或者设置选择对应的语言。但是软件中有很多内容是靠用户维护进取的,比如网站首页的“公司新闻”,这样的“内容”要做到选择相应的语言显示就不是前面说的软件“国际化”可以做到的了。

根据各位兄弟的意见,我总结了一下,主要分两类解决方法:

1。 使用智能翻译。根据用户的设置,把内容翻译成对应的语言
2。 为每个语种设计一套数据库,维护“内容”时,每种语言都维护进去
3。 设计一套适用多种语言的数据库。例如使用一个数据字典来定义每一种语言,然后在维护每一种语言进去

我个人比较倾向第3种方案,因为我是比较怕麻烦的人,hoho,第一种比较困难,第二种工作量也太大了点吧。

我的方案大致如下:

建立两张表,Language和Content,Language相当于一个数据字典,列出系统用到的所有语种。Content表就是维护的内容——也就是我们想解决的多语种显示的东西。两张表表样如下:

Language

  id---- |---langeuage----|---description----
  1-----|---------zh---------|------中文---------
  2-----|---------en---------|------英文---------
  3-----|---------fr---------|------法文---------


Content


id----|---content------------------|---languageId------
1-----|----你好!-------------------|------1------------
2-----|----How are you!----------|------2------------
3-----|----fa wen bu hui---------|------3------------


这样Content表中就保存了需要语种的所有的语言信息(当然要维护进去),然后再根据用户的需要,对应Language表选择出对应语种的Content内容。

不知道大家意见如何?


大家讨论的其实是CMS(内容管理发布系统),支持多语言的CMS。

假定要发布中,英,法三种语言的网站,国际化用来解决的是后台管理界面,时间,货币本地化的问题,而不是网站内容的国际化。

网站的内容,不是一个content字段可以涵盖的,要对整个网站进行抽象,一般由首页,栏目,专题,新闻这些实体或对象组成,不同实体的属性也不太一样,以新闻为例,标题,内容,摘要,媒体……,做多语言的话这些属性都要有对应的其他语言的翻译,对于语言来说在实际的发布系统中用频道的概念替代,如中文,英文,法文频道,从属关系如下 频道 - 首页 - 栏目/专题 - 新闻

所以对于实际的内容发布系统,没有必要记录每个实体的语言是那种,网站的结构是一棵树,多语言网站是平行的几棵树,只要在根上区分就可以了,属于哪个频道。对于实体和实体之间的对应关系是需要额外的表来记录,multilan_relative(china,english,france)
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics