首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为dotnet应用程序存储全球化数据模型的推荐方法

为dotnet应用程序存储全球化数据模型的推荐方法
EN

Stack Overflow用户
提问于 2020-12-22 16:15:04
回答 1查看 42关注 0票数 0

我想实现一组数据模型,也将存储其全球化的内容,内容可以显示在.NET MVC和dotnet核心应用程序的请求文化,但是,我找不到相关的资源/关键字为此目的,以下是示例模型和任何关键字/建议将不胜感激

代码语言:javascript
复制
public interface Article {
    string ArticleId { get; }
    string Title { get; }
    string Content { get; }
}

public interface CulturedArticle {
    string ArticleId { get; }
    string Culture { get; } // -- e.g. en or jp

    string Title { get; }
    string Content { get; }
}

编辑1:

如果我这样做,它看起来很丑陋,是为了这个目的找到一种更好的方法

代码语言:javascript
复制
...

var article = this.GetRequestedArticle(request);
var cultureName = this.GetCultureName(request);

var culturedArticle = this.GetCulturedArticle(
    article.ArticleId,
    cultureName
);

return culturedArticle ?? article;

...
EN

回答 1

Stack Overflow用户

发布于 2020-12-24 13:44:50

以前我使用的是实现一对多关系的this approach,其中主实体与多个本地化实体有关系。当你只有很少的模型时,它很容易实现。但问题是,您应该创建所有需要本地化的字段,然后创建自定义控制器/视图来处理每个模型的转换。如果有太多的模型,那就意味着有很多工作要做。

目前我正在测试一种新的方法,它很难实现,但当我有太多的模型时,我发现它很灵活。

我没有创建具有所有字段的本地化模型,而是为所有本地化模型创建了一个类似的结构,我只保留了属性名称及其本地化值以及主实体和区域性的一些关系字段。新的方法只允许使用一个视图来处理每种实体的本地翻译,因为所有的都实现了相同的接口。

下面是我所做工作的总结。

  • I为可本地化模型创建了一个接口:

代码语言:javascript
复制
public interface ILocalizedPropertyResource<T>
    where T : class
{
    // The property name from the main entity
    string PropertyName { get; set; }

    // Localized content
    string Value { get; set; }

    int EntityId { get; set; }
    T Entity { get; set; }

    string CultureName { get; set; }
    Culture Culture { get; set; }
}

  • 然后我创建了一个名为[LocalizeAttribute]的自定义属性,它没有什么特殊之处,只是将应用于可本地化的实体属性。

代码语言:javascript
复制
[AttributeUsage(AttributeTargets.Property)]
public class LocalizeAttribute : Attribute
{
    public LocalizeAttribute() { }
}

  • 然后我创建了模型并应用了Localize属性,如下所示:

代码语言:javascript
复制
public string Article
{
    public int Article { get; set; }
    
    [Localize]
    public string Title { get; set; }

    [Localize]
    public string Content { get; set; }

    public ICollection<ArticleLocal> Locals { get; set; }
}

然后,

  • 创建了文章的本地模型:

代码语言:javascript
复制
public class ArticleLocal : ILocalizedPropertyResource<Article>
{
    public int Id { get; set; }
        
    // This will hold the localizable property name
    // e.g. "Title" or "Content"
    public string PropertyName { get; set; }
        
    // This will hold the localized value
    public string Value { get; set; }

    public int EntityId { get; set; }
    public Article Entity { get; set; }

    // relation to cultures table        
    public string CultureName { get; set; }
    public Culture Culture { get; set; }
}

  • 并使用反射,我确实检查了具有[Localize]属性的属性,以动态创建转换形式,以便使用一个视图为所有模型保存值。

因此,使用新的方法,我有了主实体,以及可以轻松包括和过滤的本地化属性的集合。

新方法的工作仍在进行中,但正如一开始提到的那样,新方法为我节省了大量的时间和精力。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65405209

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档