数据库的国际化问题,请高手赐教

gshuhugs 2008-04-22 10:29:51
在下是新人,最近在做“综合资源国际化”的工作,整个国际化分为3部分:
1.GUI国际化
2.程序中写死的部分,如:MessageBox.Show(“提示信息”)
3.数据库的国际化 (GUI中有些数据是从数据库中取出来的,这部分数据也要求 国际化)
其中1和2都已经搞定了,但是3数据库的国际化 对我来说有点困难。

请高人不吝赐教,如果是您来做,您会怎么想 如何去做,请说出您的解决方案 ,越详细越好。
先谢谢了。

备注:这个帖子,我今天是第二次发了,内容和标题都一样,今天早上我把它发在oracle数据库区,但是没人理,无奈只能同样的事情做两遍。我想多给点分可是我等级不够,最多只能给100分,其实我也没有多少分,如果分数多的话,也不会等级不够了,only 298分而已,再去掉这次的100 剩下一百多了,其实可用分多少并不重要,分数是虚的,能向大家学到东西才是实在的。
请大家支持我。
再次谢谢。
...全文
406 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
gshuhugs 2008-04-29
  • 打赏
  • 举报
回复
希望大家以后多多支持,指教。
gshuhugs 2008-04-29
  • 打赏
  • 举报
回复
算了结贴吧,谢谢各位参与,我是以回帖字数给分的。
LittleXun 2008-04-23
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 gshuhugs 的回复:]
首先感谢大家的支持,在大家的启发下,我有了一个办法,不知可行否?
1.添加一张翻译配置表(且命名为:MLANGCONF),该表中含有两个字段:(被翻译表的)表名(TABLE_NAME),字段名(COLUMN_NAME),假定table1表中的column1字段需要翻译,那就向翻译配置表MLANGCONF中添加一条记录:
字段: TABLE_NAME COLUMN_NAME
数据: table1 column1
这张表中存储的就是需要翻译的表及…
[/Quote]

你这个只是双语的,万一以后扩展8国语言呢?
分析一下聚友吧.
我昨天刚刚下了个myspaceIM我觉得它在这个方面做的不错.
我觉得应该有:
GUI部分:多语言文件,skype那样,一个语言文件就可以解决ui部分的.
内容-->数据库,本地化信息,提供多语言公共库,比如一个字段是地址,公有选项中定义好公有属性,同时在本地化库表里面根据公有内容进行选择.
私有内容直接提取,这个不方便翻译,也不方便去修改什么东西,私有的是用户的系统不能改变.
其实这个和多语言库的思路一样,献丑了... :)
patrickpan 2008-04-23
  • 打赏
  • 举报
回复
[Quote=PatrickPan]
为什么一定要用数据表呢,为了方便扩展,用XML文件,或者直接用DLL文件不是更好吗?
参考Dxperience的本地化,完全可以模仿他们的做法,很方便啊:
http://www.cnblogs.com/fosoyo/archive/2006/09/21/510924.html
这是汉化的部分代码:
case LayoutStringId.CreateTabbedGroupMenuText:
return "创建标签";

case LayoutStringId.AddTabMenuText:
return "新增标签";

case LayoutStringId.UnGroupTabbedGroupMenuText:
return "移除标签";

case LayoutStringId.TreeViewRootNodeName:
return "根目录";

case LayoutStringId.ShowCustomizationFormMenuText:
return "显示自定义窗体";

case LayoutStringId.HideCustomizationFormMenuText:
return "隐藏自定义窗体";

case LayoutStringId.EmptySpaceItemDefaultText:
return "空项";

[/Quote]
吐司vivi 2008-04-22
  • 打赏
  • 举报
回复
数据库有两个版本 一个存放中文 一个存放英文 页面中可以给做两个按钮一个是中文版 一个英文版
wszhoho 2008-04-22
  • 打赏
  • 举报
回复
自动翻译不可能,我觉得可行的是,中文,英文都写在同一条记录里,中间用$split$分割
patrickpan 2008-04-22
  • 打赏
  • 举报
回复
[Quote=PatrickPan]
3.数据库的国际化 (GUI中有些数据是从数据库中取出来的,这部分数据也要求 国际化)
这是一个方法,但是我觉得不可取,如果数据库很大,把数据库中的所有的数据都另存一份英文版的。
--这个没必要,只要把与GUI有关的表另存一份英文版的。
工作量可不小哦,
--没有办法啊,兄弟。
再者 国际化,并不单单指英文,其它的语言都可以,要再另存为一分其它语言的么?
--嗯,肯定要另存为一份其它语言的。

个人能想到的最佳解决方案:
把GUI中与数据库有关的表拿出来,放在一个或者多个XML文件中。
修改设计模式,例如抽象工厂模式,通过读取当前系统的文化,确定读取哪个XML文件。
这样,要增加一种多语言,只需负责这些XML文件,修改其内容就可以了。
当然,放在数据表中也行,这样要多建立一些表了,还是放在XML文件中方便一些。
[/Quote]
蝶恋花雨 2008-04-22
  • 打赏
  • 举报
回复
1.GUI国际化
2.程序中写死的部分,如:MessageBox.Show(“提示信息”)
3.数据库的国际化 (GUI中有些数据是从数据库中取出来的,这部分数据也要求 国际化)
其中1和2都已经搞定了,但是3数据库的国际化 对我来说有点困难。

不错。数据库国际化我没做过。12都做过。帮你顶下
gshuhugs 2008-04-22
  • 打赏
  • 举报
回复
这是一个方法,但是我觉得不可取,如果数据库很大,把数据库中的所有的数据都另存一份英文版的,工作量可不小哦,
再者 国际化,并不单单指英文,其它的语言都可以,要再另存为一分其它语言的么?
lihongdian 2008-04-22
  • 打赏
  • 举报
回复
呵呵,数据库国际化?没听说过.数据库的话可以做2个版本,一个存储中文信息一个存储英文信息.不同的地点登陆使用不同的连接字符串,比较方便.呵呵
一般说的国际化都是xml之类的.呵呵,书上有,好好看吧.
gshuhugs 2008-04-22
  • 打赏
  • 举报
回复
“这张表中存储的就是需要翻译的表及被翻译的字段。”
————————————————————————————————
改为“这张表中存储的就是需要翻译的表名及被翻译的数据。”
sorry书写有勿。翻译的是表中的数据,不是翻译表的字段。
gshuhugs 2008-04-22
  • 打赏
  • 举报
回复
首先感谢大家的支持,在大家的启发下,我有了一个办法,不知可行否?
1.添加一张翻译配置表(且命名为:MLANGCONF),该表中含有两个字段:(被翻译表的)表名(TABLE_NAME),字段名(COLUMN_NAME),假定table1表中的column1字段需要翻译,那就向翻译配置表MLANGCONF中添加一条记录:
字段: TABLE_NAME COLUMN_NAME
数据: table1 column1
这张表中存储的就是需要翻译的表及被翻译的字段。
2.备份翻译配置表(MLANGCONF)中存储的表,然后重命名为“表名_默认语言”作为副表
例如1.中MLANGCONF存在一条记录,table1 column1,那就把table1备份一份,命名为“table1_chinese”(假如
默认语言为中文),这样做的目的在于还原主表。
3.再把翻译配置表MLANGCONF中有的表备份一份,重命名为“表名_语言”作为副表,
例如2.中,只不过表名为:“table1_english”(这里假定只翻译为一种外语),把table1_english表中
相应的数据翻译英文
(这里相应的数据就是在翻译配置表MLANGCONF中存在的数据)
4.这样真正从数据库中读取数据时还是从原表中读,当需要切换不同的语言时(如:table1_english),用相应语言表中的数
据更新主表,

注意:步骤3中,只翻译MLANGCONF表中存在的数据。如果主表中增加了一条记录,相应的副表中也应该添加。
执行效率取决于,翻译配置表中记录的数量、和update语句的效率 。

希望大家提出更多建议。

62,244

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧