【问题标题】:Can I have some advice about globalization in .net for a multi-language CMS?对于多语言 CMS 的 .net 全球化,我能提供一些建议吗?
【发布时间】:2009-12-26 20:28:22
【问题描述】:

我正在构建一个支持 7 种不同语言/文化的 CMS。对于无法通过 CMS 更改的图像,我想我将使用不同的资源文件。至于内容,我正在考虑单独的数据库。如果用户需要更改当前的文化,我有一个下拉菜单,将所选文化存储在 cookie 中,然后我读取 cookie 并在 global.asax 的 Application_BeginRequest 中设置文化。我怎样才能为不同的文化使用不同的连接字符串?资源文件也会处理这个吗?拥有多个数据库甚至是个好主意吗?这对我来说是第一次,我正在寻找任何人可能有的任何指示。谢谢!

编辑:不同的语言/文化将由 CMS 中的不同用户管理,因此给定页面的内容可能会有所不同,而不仅仅是翻译。

【问题讨论】:

  • @Mike 我在一个基于 CMS 的网站工作,该网站支持 60 多种语言和近一百万个页面。网站的每个语言版本都由不同的编辑组织管理,并具有不同的内容、图像和结构。老实说,您所问的远远超出了一些扶手椅架构师的范围,他们对您的数据库结构应该是什么发表了意见。如果您想详细讨论,请随时通过 rex@rexmorgan.net 给我发送电子邮件。

标签: .net asp.net resources globalization


【解决方案1】:

根据您所说,听起来数据库中的内容实际上不需要翻译成不同的语言,因此您可能不需要单独的数据库来处理它。

如果有共享数据库内容,您可以使用转换表,类似于@Xabatcha 提到的,尽管我建议使用更简单的表结构。比如……

CREATE TABLE TranslatedText
(
    TextID INT,
    LanguageID INT,
    Text NVARCHAR(8000)
)

CREATE TABLE Product
(
    ProductID INT,
    NameTextID INT,
    DescriptionTextID INT,
    Cost MONEY,
    Weight DECIMAL
)

任何需要翻译文本的表格都可以只引用 TextID。密钥实际上需要是 TextID 和 LanguageID 的组合。如果您使用的是 SqlServer,您可能需要创建一个数据库函数来获取翻译后的文本,这样您就不必为需要获取值的每个 sql 语句进行连接。

【讨论】:

    【解决方案2】:

    我也反对为每种语言使用单独的数据库。这将是过于复杂的解决方案。 不知道您要保存到数据库中的内容,但我们使用的是模式,例如每个表都有额外的事务表,需要一些文本进行翻译。例如

    tblProduct (Id,Cost,Weight)  
    tblProductTranslation (Id, IdProduct, Culture, Name, Description)
    

    可以看到翻译后的字段被移到了翻译表中。

    下面是 sql 的片段,它返回具有所需文化的产品。此外,如果不需要的文化可用,它会返回默认文化。

    SELECT 
    en.ID
    ,en.ProductCategoryId
    ,ISNULL(req.[Name], en.[Name]) AS [Name]
    ,ISNULL(req.[Description], en.[Description]) AS [Description]
    ,...
    ,en.IsActive
    FROM (SELECT * FROM res_vwProducts where culture = @DefaultCulture) en
    LEFT OUTER JOIN (select * from res_vwProducts where culture = @Culture) req on req.ID =   en.ID
    WHERE en.ID = @ID
    

    我可以想象你会从一些可能有点不同的在线 html 编辑器转储代码。在这种情况下,我会让它变得简单,只需将文化添加到表格中,例如

    tblArticle (Id, Culture, Body, Title,...)
    

    希望对您有所帮助。干杯,X。

    【讨论】:

      【解决方案3】:

      我强烈建议您不要为每种语言都建立一个数据库。您可以将每个可翻译项保存到一个单独的表格中,其中每一行代表给定语言的某些用户内容的翻译。

      【讨论】:

      • 感谢您的回复。我的问题不够清楚。不同的语言/文化内容将由不同的用户管理,因此内容可以而且很可能会有所不同,而不仅仅是翻译。你还会建议不要使用单独的数据库吗?
      猜你喜欢
      • 1970-01-01
      • 2010-09-07
      • 2021-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-06
      相关资源
      最近更新 更多