开发ASP.NET网站的不同语言

本文关键字:语言 网站 ASP NET 开发 | 更新日期: 2023-09-27 18:10:37

我正在建立一个网站,将有西班牙语和意大利语版本。

在过去,当建立一个网站,必须在不同的语言可用,我已经创建了一个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#解决方案,干杯!

开发ASP.NET网站的不同语言

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

ASP。. NET全球化和本地化

有。net和ASP的许多特性。. NET可以帮助您本地化和全球化您的网站,而不需要像您上面那样耗时和自制的解决方案。

从你的问题来看,你似乎对显示不同的内容更感兴趣,而不是像标签这样的东西。

如果是这种情况,您总是可以查看子类模型,因此您的dbo。新闻表将有一个额外的列(Discriminator),并且只有一个标题和内容列

你的类模型应该有News作为父类,EnglishNews, SpanishNews等作为子类。

如果您正在寻找新闻故事的意大利语版本,您将检索具有适当新闻id的ItalianNews对象(对于具有相同故事的每种语言,newsId都是相同的)。

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

希望这对你有帮助。

这样怎么样?

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。

从非数据库的角度来看,已经有几个响应包含一些好的资源的链接。

试试这样:

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

其中text_code是您需要的文本片段的标识符,如1=title, 2=content等。或者您可以使用助记代码,我认为只要代码短就不会对性能造成太大影响。

那么任何你需要文本的地方,你都应该知道你需要的这段文本的代码,并且你知道语言。使用这些选项来选择记录。那么你就不需要大写的case语句了。

。你的代码是这样的:

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

没有CASE语句,因为您只能从查询中获得一种语言。