我需要在 ASP.NET MVC 项目中添加单个文章的替代语言版本。我目前有一个名为 NewsArticle 的数据库表,其中包含 ArticleId、Abstract、Headline、BodyText 和 ImageUrl 字段。在创作新闻文章时,我想基本上有一个选项,该选项为作者提供了一个字段来输入文章的替代语言版本。然后,可以通过站点的语言切换控件在该特定语言的新闻文章视图上显示该替代内容。
谁能指出我重新设计现有模型以包含此要求的正确方向?
我需要在 ASP.NET MVC 项目中添加单个文章的替代语言版本。我目前有一个名为 NewsArticle 的数据库表,其中包含 ArticleId、Abstract、Headline、BodyText 和 ImageUrl 字段。在创作新闻文章时,我想基本上有一个选项,该选项为作者提供了一个字段来输入文章的替代语言版本。然后,可以通过站点的语言切换控件在该特定语言的新闻文章视图上显示该替代内容。
谁能指出我重新设计现有模型以包含此要求的正确方向?
设法通过为每个多语言对象创建两个表来解决这个问题,即将 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)
查询数据库将基于语言参数,例如以下代码返回所有英文文章:
// 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();