2011-10-07 84 views
4

我正在构建一个网站,该网站将具有西班牙语和意大利语版本。为不同语言开发ASP.NET网站

在过去,建筑,必须在不同的语言站点时,我创建了一个SQL表类似如下:

dbo.News 
-------- 
ID int 
EnglishTitle nvarchar(200) 
SpanishTitle nvarchar(200) 
ItalianTitle nvarchar(200) 
EnglishContent nvarchar(max) 
SpanishContent nvarchar(max) 
ItalianContent nvarchar(max) 

然后,根据查询字符串(domain.com/NewsArticle ?的.aspx ID = 123 & L = ES)我会做这样的事情:

Select Case Request.QueryString("l") 
    Case "en" 
     TitleLtl.Text = "SELECT EnglishTitle..." 
    Case "es" 
     TitleLtl.Text = "SELECT SpanishTitle..." 
    Case "it" 
     TitleLtl.Text = "SELECT ItalianTitle..." 
End Select 

然而,我发现这个消费(真正时间,特别是如果客户后来询问其他语言选项作为第二阶段) 。

什么是做这样的事情,允许额外的语言范围的最佳做法?

我开到VB.NET和C#的解决方案,干杯!

回答

4

只需阅读一些文章,从这里开始:

ASP.NET Globalization and Localization

有.NET和ASP.NET的许多功能,以帮助您定位和全球化您的网站没有这样的耗时和自制像你这样的上述解决方案...

+1

+1它让我花了一段时间来探索全球化/本地化,但这太棒了!从长远来看,这将为我节省很多时间! – Curt

0

从你的问题看起来你更感兴趣的是显示不同的内容,而不是像一个标签。

如果是这样的话,你总是可以看到一个子类的模式,所以你dbo.News表将有一个额外的列(鉴别),并且将只有一个标题和内容列

你的类模型将有新闻作为父类和英语新闻,西班牙新闻等作为子类。

,如果你正在寻找一个新闻故事的意大利版本,你会找回ItalianNews用正确的消息ID(该NewSID的将是具有相同的故事,每一种语言一样的)对象。

NHibernate允许简单的subclassing和对象检索,所以当添加另一种语言将需要一些编码时,你不必重建你的数据库并大大改变你的代码。

希望这会有所帮助。

0

怎么这样呢?

dbo.News 
-------- 
ID int 
Label varchar(200) 
DateAdded smalldatetime 

(以及任何其他常见的领域)

dbo.NewsCultures 
---------------- 
ID int -- FK to the dbo.News PK 
LocaleID smallint 
Title nvarchar(200) 
Content nvarchar(MAX) 

哪里的LocaleID将映射到一个.net LCID - 如1033美国英语。

从非数据库的角度来看,已经有一些反应,其中包括链接到一些好的资源。

0

尝试更多的东西是这样的:

text_code int  
language char(2) 
text varchar(max) 

凡text_code是一些标识您需要的文本的一块,像1 =冠军,2 =内容,等等。或者你可以使用一个助记码,我不要以为只要短暂就会损害业绩。

然后你需要文本的任何地方,你应该知道你需要的文本代码,并且你知道语言。使用这些来选择记录。那么你不需要一个大的案例陈述。

即你的代码则是这样的:

command.query="select text from local_text where [email protected]_code and [email protected]" 
command.Parameters.AddWithValue("@text_code", 17) ' Probably use symbols there 
command.Parameters.AddWithValue("@language", language) 
dim text as string=command.executeScalar() 

有没有CASE语句,你只有从查询一种语言。