ASP.NET MVC新闻文章替代语言版本

时间:2012-07-30 12:24:49

标签: c# asp.net-mvc localization internationalization

我需要在ASP.NET MVC项目中添加单篇文章的替代语言版本。我目前有一个名为NewsArticle的数据库表,其中包含字段ArticleId,Abstract,Headline,BodyText和ImageUrl。我想在创作一篇新闻文章时提供一个选项,该文章为作者提供了一个字段来输入该文章的替代语言版本。然后,可以通过站点的语言切换控制在该特定语言的新闻文章视图上显示该替代内容。

在重新设计现有模型以包含此要求时,有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:0)

管理通过为每个多语言对象创建两个表来解决这个问题,即将NewsArticle拆分为两个表NewsArticleText(具有本地化内容,每种语言一个记录,加上语言的ISO代码)和NewsArticle(与语言无关) data; ArticleId,ImageUrl等)使用所有使用的语言及其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();