使用SQL服务器的ASP.NET中的多语言(英语,荷兰语,芬兰语,法语,匈牙利语,孟加拉语,意大利语)!

时间:2010-05-11 09:50:43

标签: asp.net sql-server localization multilingual

我正在使用SQL Server 2008在ASP.NET 3.5中开发Web应用程序。我需要多语言,如英语,荷兰语,芬兰语等。我可以使用System.Resources和System.Globalization来完成。但我无法转换数据来自数据库的语言。 我该怎么解决?

2 个答案:

答案 0 :(得分:3)

我建议您在桌子上使用两张表来进行本地化 例如:

Product
-------------------------------
ProductID  |  Price   |  Stock 
-------------------------------
10         |   10     |   15


ProductLoc
-----------------------------------------------
ProductID  | Lang   | Name      |  Description
-----------------------------------------------
 10        |  EN    | Bike      |  Excellent Bike 
 10        |  ES    | Bicicleta |  Excelente bici 

这样你可以使用:

SELECT * FROM 
Product LEFT JOIN ProductLoc ON Product.ProductID = ProductLoc.ProductID 
                               AND ProductLoc.Lang = @CurrentLang

(左连接以防万一ProductLoc表中没有当前lang的记录)

免责声明:摘自another answer of mine

的文字

答案 1 :(得分:1)

最常用的大型解决方案,我的意思是大型应用程序是使用具有唯一ID的Languages表,然后将LanguageId引用到数据表中。

CREATE TABLE Languages (
    LanguageId int IDENTITY(1, 1) PRIMARY KEY
    LanguageCode nvarchar(5)
    LanguageName nvarchar(25)
)
GO

INSERT INTO Languages (LanguageCode, LanguageName)
    VALUES (N'en-CA', N'English Canada')
GO
INSERT INTO Languages (LanguageCode, LanguageName)
    VALUES (N'fr-CA', N'French Canada')
GO
INSERT INTO Languages (LanguageCode, LanguageName)
    VALUES (N'de-GE', N'German Germany')
GO

CREATE TABLE LabelTexts (
    LabelTextId int IDENTITY(1, 1) PRIMARY KEY
    FormName nvarchar(50) NOT NULL
    LabelName nvarchar(50) NOT NULL
    LanguageId int NOT NULL
    LabelText nvarchar(2000) NOT NULL
)
GO
ALTER TABLE LabelTexts
ADD CONSTRAINT FK_Language FOREIGN KEY REFERENCING Languages(LanguageId)
GO

INSERT INTO LabelTexts (FormName, LabelName, LanguageId, LabelText)
    VALUES (N'frmMain', N'label1', 1, N'Enter the information for customer here:')
GO
INSERT INTO LabelTexts (FormName, LabelName, LanguageId, LabelText)
    VALUES (N'frmMain', N'label1', 2, N'Saisir les informations du client ici :')
GO
-- etc.

因此,当您的应用程序部署到另一种语言时,您只需要将这种新语言插入支持的语言表中,并将文本字符串插入引用正确LanguageId的语言,配置您的应用程序以获得此LanguageId查询数据库,你就定了!您的应用程序很容易多语言!

您甚至可以编写自己的参数化标量函数,它们将为您执行正确的查询,因此代替:

select LabelText
    from LabelTexts
    where LanguageId = 1
        and FormName LIKE N'frmMain'
        and LabelName LIKE N'label1'

你只需要创建一个函数并像这样调用它:

select dbo.GetLabelText(N'frmMain', N'label1', 1)

并且函数体编码如上所述的SELECT语句。不要忘记在适当的字段上创建索引以提高查询性能。