我们过去用经典的 asp 开发了一些网站,从公司展示网站到 eshops。所有这些都是在多语言环境 (el, en) 中开发的,其中大部分。从数据库 View 中,我们选择了以下模式。例如,对于产品表,我们有两个相关表,一个没有语言依赖字段,另一个用于具有一对多关系的语言依赖字段。
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)
);
为了重新创建产品模型,我们使用存储过程来连接所请求语言的两个表。 现在我们要进入 dot.net mvc 模型。我们想知道是否有更好的方法,最适合 mvc 模型。
最佳答案
这取决于您的要求,但您可以只创建一个类来加载和缓存内存中的字幕,使用 EF 加载它们。使用静态类或最好使用 ASP.NET 缓存。
如果您在客户端执行动态操作,则在必要时通过 WebAPI Controller 的 MVC 公开字符串。
为了使这更容易,我会将您的翻译与架构中的产品分离。使您的翻译具有通用性。
只有一个名为 app_translation 的表,其中包含 Id、LanguageCode 和 Translation 字段。然后在需要翻译标题的任何表格上引用 Id。
要强制引用完整性,您还可以拥有一个包含单列和唯一约束的 app_translation_identifier 表。然后从 app_translation.Id FK 到 app_tranlsation_identifier.Id。并且在 app_translation 上还有一个唯一键用于 Id 和 LanguageCode。
关于asp.net-mvc - mvc dot.net 模型的多语言数据库模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28973517/