gpt4 book ai didi

asp.net-core - 数据库中的本地化实体

转载 作者:行者123 更新时间:2023-12-04 15:35:53 25 4
gpt4 key购买 nike

我正在开发 ASP.NET Core MVC 应用程序,需要为实体设计多语言值。有很多关于如何使用 .resx 支持 UI 页面本地化的信息。我正在寻找一些常见的模式来支持实体的本地化(而不是网页上的静态内容),这些模式可以由用户编辑。

假设数据库表中有一个带有状态的简单字典

Id     Name
----------------------------------------------
1 Not processed
2 To be cancelled
3 To be corrected
4 Processed
5 Rejected

用户可以创建新状态或添加其他语言的翻译。问题是如何设计表格以及如何存储其他语言的翻译?

目前我有一些方法

1) 使用所有支持的语言创建表 Languages。创建表 Translations

  Id   LanguageId  Key              Value
------------------------------------------------
1 en NotProcessed Not processed
2 pl NotProcessed Nie przetworzony
3 de NotProcessed Nicht verarbeitet
4 en ToBeCancelled To be cancelled
5 de ToBeCancelled Zu stornieren

状态表将是

    Id     Name                   TranslationKey
----------------------------------------------
1 Not processed NotProcessed
2 To be cancelled ToBeCancelled

然后根据语言选择将显示给用户的正确翻译。

2) 不创建Translations表,而是添加列

  Id     Name                   Translations
----------------------------------------------
1 Not processed en:Not processed;pl:Nie przetworzony;de:Nicht verarbeitet
2 To be cancelled en:To be cancelled;de:Zu stornieren

你怎么看?我不知道如何为我的实体保留翻译,可能有一些可靠的方法。请建议。

最佳答案

我通过创建语言表和翻译表来做与方法 1 类似的事情。但是翻译表是基于实体的,这意味着每个实体类型也有自己的实体翻译类型。

实体翻译包含所有可本地化的字段(例如标题、正文),主实体包含非本地化字段(例如发布日期等)

public class Language
{
public int Id { get; set; }
public string Name { get; set; }
}

public class Article
{
public int Id { get; set; }
public DateTime PublishDate { get; set; }
public ICollection<ArticleTranslation> Translations { get; set; }
}

public class ArticleTranslation
{
public int Id { get; set; }

public string Title { get; set; }
public string Body { get; set; }

public int ArticleId { get; set; }
public Article Article { get; set; }

public int LanguageId { get; set; }
public Language Language { get; set; }

}

您还可以使用 virtual 关键字来支持延迟加载相关翻译或主要实体。

关于asp.net-core - 数据库中的本地化实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59779477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com