实体框架多语言网站,具有多个数据库

时间:2010-01-15 18:11:47

标签: asp.net entity-framework localization replication

由于问题有点自我解释,我想实现多语言网站的目标。我正在使用MS SQL 2005的实体数据模型。我想出了为每种语言创建一个单独的数据库,并使用完全相同的模型和关系。所以我可以使用Entities构造函数来获取connectionString并将站点切换到所选语言。

我使用ascx作为触发事件的语言控件,并且父aspx将所选语言作为整数(来自事件args)获取并调用包含相同linq查询的方法,但是将创建实体上下文该db(语言)的连接字符串

我只能提出这个解决方案,因为我认为添加一种新语言需要复制一种新的语言,导入Access并发送给翻译者。然后将导出回来,模型将适合(HOPEFULLY)。

我的问题是,这是否真的是一种好方法,或者我错过任何会给我带来更大麻烦的事情。提前致谢

3 个答案:

答案 0 :(得分:1)

一旦不同数据库中的实体彼此之间存在关系,多数据库就不是一个好的解决方案。通常,一种好的方法是使用一种默认语言处理标签。这些标签可以是定义良好的格式(例如'LABEL.TEXT_HELLO'),也可以是基本语言(例如'Hello World')。

所以你要做的就是为翻译构建一个表格,其中基本语言是关键,希望每个键都有一个包含翻译的值。只要你有翻译,就可以在他的前端写一个方法,用自己用的语言写标签。

例如,在Zend Framework中,您必须编写<h1><?= $this->translate('Hello World'); ?></h1>而不是<h1>Hello World</h1> 好消息是,如果缺少翻译,你仍然可以使用后备(在这种情况下为英文)向用户显示至少一些内容。

这样,您就可以在一个数据库中管理您的应用,而使用多种语言的用户则无需在应用和内容之间切换。

欢呼声

答案 1 :(得分:0)

我的方法:创建一个列出所有可用语言的表语言。将应该本地化的每个表与语言相关联。现在,您可以轻松访问本地化内容,例如

Content[content_ID].HeadLine.Where(hl => hl.Language.id == "en-US")

我期待着看到我自己的其他人还在学习数据库设计和EDM。

答案 2 :(得分:0)

好的,如果你想能够轻松实现一种新语言,那么重新发明internationalization features already built in to ASP.NET不是一种可行的方法,因为它并不“简单”。

至少,不像使用卫星资源DLL那么容易。您的翻译人员将使用现成的工具来翻译您的资源,ASP.NET将根据用户当前的文化自动选择正确的DLL。

阅读ASP.NET internationalization/globalization features;没有必要发明自己的。