mvc dot.net 模型的多语言数据库模式

multilingual database schema for mvc dot.net model

我们过去开发了一些经典网站,从公司展示网站到电子商店 asp。所有这些都是在多语言环境 (el, en) 中开发的,其中大部分。从数据库视图中,我们选择了以下模式。例如,对于产品 table,我们有两个相关的 tables,一个没有语言依赖字段,另一个用于具有一对多关系的语言依赖字段。

CREATE TABLE ref_language (
  Code Char(2)NOT NULL,
  Name Varchar(20) NOT NULL,
  PRIMARY KEY (Code)
);
 
CREATE TABLE app_product (
 Id Int IDENTITY NOT NULL,
 PRIMARY KEY (Id)
);
 
CREATE TABLE app_product_translation (
 ProductId Int NOT NULL,
 LanguageCode Char(2) NOT NULL,
 Description Text NOT NULL,
 FOREIGN KEY (ProductId) REFERENCES app_product(Id),
 FOREIGN KEY (LanguageCode) REFERENCES ref_language(Code)
);

为了重新创建产品模型,我们使用存储过程将所请求语言的两个 table 连接起来。 现在我们要进入 dot.net mvc 模型。而我们想知道有没有更好的方法,mvc模型中最suitable.

这取决于您的要求,但您可以只创建一个 class 来加载和缓存内存中的字幕,使用 EF 加载它们。使用静态 class 或最好使用 ASP.NET 缓存。

如果您在客户端执行动态操作,则在必要时通过 WebAPI 控制器的 MVC 公开字符串。

为了使这更容易,我会将您的翻译与架构中的产品分离。让您的翻译通用。

只有一个名为 app_translation 的 table,带有 ID、LanguageCode 和 Translation 字段。然后在需要翻译的标题的任何 table 上引用 ID。

要强制执行参照完整性,您还可以使用具有单列和唯一约束的 app_translation_identifier table。然后FK从app_translation.Id到app_tranlsation_identifier.Id。并且在 app_translation 上还有一个用于 ID 和 LanguageCode 的唯一键。