我需要在ASP.NET MVC项目中添加单个文章的替代语言版本。我目前有一个名为NewsArticle的数据库表,其中包含字段ArticleId、Abstract、Headline、BodyText和ImageUrl。当我创作一篇新闻文章时,我希望本质上有一个选项,为作者提供一个字段来输入文章的另一个语言版本。然后,可以通过网站的语言切换控制将该替代内容显示在该特定语言的新闻文章视图上。
在重新设计现有模型以包括此需求方面,有人能为我指出正确的方向吗?
发布于 2012-10-23 19:36:19
通过为每个多语言对象创建两个表,即将NewsArticle拆分为两个表NewsArticleText (具有本地化内容,每种语言一个记录,外加该语言的ISO代码)和NewsArticle (具有与语言无关的数据;ArticleId、ImageUrl等),设法解决了这一问题。第三个表Languages是使用所有使用的语言创建的,其ISO代码作为主键。
示例:
Table "NewsArticle"
-------------------
ArticleId : uniqueidentifier
<any other language-neutral fields>
Table "NewsArticleText"
-----------------------
ArticleId : uniqueidentifier (foreign key referencing the NewsArticle)
LanguageCode : varchar(6) (e.g. "en-GB", "de-CH", foreign key referencing the Languages table)
Headline : varchar(100)
BocyText : varchar(max)
<any other localized data>
Table "Languages"
-----------------
LanguageId : uniqueidentifier
LangaugeCode : varchar(6)
Name : varchar(20)查询db将基于language参数,例如,以下代码返回所有英语文章:
// get all English language articles
var news = from na in datacontext.NewsArticles
where na.Deleted == false
join nt in datacontext.NewsArticlesText
on na.ArticleId equals nt.ArticleId
where nt.LanguageCode == "en-GB"
select new NewsArticleItem
{
ArticleId = na.ArticleId,
ImageUrl = na.ImageUrl,
Headline = nt.Headline,
Abstract = nt.Abstract,
BodyText = nt.BodyText,
LanguageCode = nt.LanguageCode,
DateCreated = na.DateCreated
};
return news.ToList();https://stackoverflow.com/questions/11721520
复制相似问题