0

我们的应用程序的功能之一是它为用户存储内容信息。该信息是几种不同的内容类型之一,可用类型存储在 SQL Server 的关系表中。这是使用的类:

public partial class ContentType
{
    public int ContentTypeId { get; set; }
    public string Name { get; set; }
    public System.DateTime ModifiedDate { get; set; }
    public virtual byte[] Version { get; set; }
}

备份此类的 SQL Server 表具有相同的字段:

CREATE TABLE ContentType (
    [ContentTypeId] INT IDENTITY (0, 1) NOT NULL,
    [Name] NVARCHAR (50) Not NULL,
    [Version] rowversion,
    [ModifiedDate] [datetime] NOT NULL,
    CONSTRAINT [PK_ContentType] PRIMARY KEY CLUSTERED ([ContentTypeId] ASC)
)";

我们希望将我们的应用程序“国际化”。这意味着除其他外,“名称”字段的值会因语言而异。

任何人都可以就如何做到这一点给我们任何建议吗?

4

2 回答 2

1

这取决于您所说的“国际化”是什么意思。如果您只是需要在中短期内支持第二种语言,您可以通过在表中添加一个新列来解决这个问题。类似的东西AlternateName

或者,如果name只是需要一种关联的语言,您可以通过包含一LanguageId列(引用关联的Languages表)来解决这个问题。

我猜你的意思是更强烈的东西,即能够以多种语言之一查看“内容”的“名称”。我还假设这ModifiedDate是一个与用户内容无关的数据库字段。如果没有,那么您还需要处理日期格式的国际化。

现在,您的表结构在ContentTypeId和之间具有 1-1 关系name。必须修改该关系,因为您需要一对多关系。从允许的语言表开始。如果您想改用缩写,请使用国际标准(例如此处)。但是,您自己的表格将允许您包含其他信息,例如首选日期格式和首选货币符号。

你需要另一个表,比如ContentLanguages,比如:

create table ContentLanguages (
    ContentLanguageId int primary key,
    LanguageId int,  /* or a code for human readability */
    Name nvarchar(255),
    ModifiedDate datetime
);

然后,您需要为多种语言维护它。

如果您有一种标准语言,您可能希望确保所有名称都出现,例如英文。您可以通过拥有一个业务规则来做到这一点,该规则要求内容在添加任何其他版本之前具有英文版本(在存储过程中使用触发器或业务规则)。

于 2013-06-13T06:19:54.493 回答
0

我理解这一点的方式是,您想让不懂英语的人对用户更加友好。

我会考虑保持数据库不变,但只创建国际界面。

例如,您可以创建人们将使用的 API,而不是直接访问数据库,并通过使用适当的国际名称命名方法、类和其他使该 API 国际化。

您甚至可以使用国际名称空间,例如 Main.Espana.MiCasa 和 Main.English.MyHouse  在后台,您将拥有一组可以完成实际工作的方法,然后只需为不同的语言创建包装器。

另一种方法可能是在数据库中创建不同的模式,并只允许人们通过这些模式进行访问。使用视图读取数据,使用存储过程进行插入和更新。

于 2013-06-13T17:40:52.640 回答