【问题标题】:Multiple Language (English, Dutch, Finnish, French, Hungarian, Bangla, Italian,) in ASP.NET with SQL server !带有 SQL 服务器的 ASP.NET 中的多语言(英语、荷兰语、芬兰语、法语、匈牙利语、孟加拉语、意大利语)!
【发布时间】:2010-05-11 09:50:42
【问题描述】:

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

【问题讨论】:

  • 你能澄清一下到底是什么问题吗?
  • 我无法转换来自数据库的数据!假设,我用英文存储数据库“Welcome”。我需要转换其他语言。
  • 您要查找的 Google 搜索词是“本地化”。

标签: asp.net sql-server localization multilingual


【解决方案1】:

我建议您为需要本地化的表使用两个表。
示例:

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 表中没有当前语言的记录)

免责声明:文字取自another answer of mine

【讨论】:

    【解决方案2】:

    大型应用程序最常用的解决方案是拥有一个具有唯一 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 语句。不要忘记在适当的字段上创建索引以提高查询性能。

    【讨论】:

      猜你喜欢
      • 2018-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多