开发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全球化和本地化
有。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语句,因为您只能从查询中获得一种语言。