我们的应用程序的一个功能是它为用户存储内容信息。这些信息是几种不同的信息之一 内容类型和可用类型存储在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)
)";
我们希望将我们的申请“国际化”。这意味着其他事情 根据语言,“名称”字段的值将不同。
有人可以就如何做到这一点向我们提出任何建议吗?
答案 0 :(得分:1)
这取决于你的“国际化”的含义。如果您只需要在近中期内支持第二种语言,则可以通过在表格中添加新列来解决此问题。类似于AlternateName
。
或者,如果name
只需要一种关联语言,您可以通过添加LanguageId
列(引用关联的Languages
表)来解决此问题。
我猜你的意思更强烈,即能够用几种语言之一查看“内容”的“名称”。我还假设ModifiedDate
是与用户内容无关的数据库字段。如果没有,那么你还需要处理日期格式的国际化。
目前,您的表格结构在ContentTypeId
和name
之间具有1-1关系。必须修改这种关系,因为你需要一对多的关系。从允许的语言表开始。如果您想使用缩写,请使用国际标准(例如here)。但是,您自己的表格允许您包含其他信息,例如首选日期格式和首选货币符号。
您需要另一张表格,例如ContentLanguages
,例如:
create table ContentLanguages (
ContentLanguageId int primary key,
LanguageId int, /* or a code for human readability */
Name nvarchar(255),
ModifiedDate datetime
);
然后您需要为多种语言维护它。
如果您使用的是标准语言,则可能需要确保显示所有名称,例如英文。您可以通过制定业务规则来实现此目的,该规则要求内容在添加任何其他版本之前具有英语版本(使用存储过程中的触发器或业务规则)。
答案 1 :(得分:0)
我理解这一点的方式是,您希望为不懂英语的人提供更友好的用户。
我会考虑按原样保留数据库,但只创建国际接口。
例如,您可以创建API,而不是直接访问数据库,并通过使用适当的国际名称命名方法,类和其他方法来使此API成为国际API。
你甚至可以使用国际名称空间,例如sa Main.Espana.MiCasa和Main.English.MyHouse 在后台,您将拥有一组方法来完成实际工作,然后只为不同语言创建包装器。
另一种方法可能是在数据库中创建不同的模式,并仅通过这些模式为人们提供访问权限。使用视图读取数据和存储过程以进行插入和更新。