我想实现一组数据模型,也将存储其全球化的内容,内容可以显示在.NET MVC和dotnet核心应用程序的请求文化,但是,我找不到相关的资源/关键字为此目的,以下是示例模型和任何关键字/建议将不胜感激
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:
如果我这样做,它看起来很丑陋,是为了这个目的找到一种更好的方法
...
var article = this.GetRequestedArticle(request);
var cultureName = this.GetCultureName(request);
var culturedArticle = this.GetCulturedArticle(
article.ArticleId,
cultureName
);
return culturedArticle ?? article;
...发布于 2020-12-24 13:44:50
以前我使用的是实现一对多关系的this approach,其中主实体与多个本地化实体有关系。当你只有很少的模型时,它很容易实现。但问题是,您应该创建所有需要本地化的字段,然后创建自定义控制器/视图来处理每个模型的转换。如果有太多的模型,那就意味着有很多工作要做。
目前我正在测试一种新的方法,它很难实现,但当我有太多的模型时,我发现它很灵活。
我没有创建具有所有字段的本地化模型,而是为所有本地化模型创建了一个类似的结构,我只保留了属性名称及其本地化值以及主实体和区域性的一些关系字段。新的方法只允许使用一个视图来处理每种实体的本地翻译,因为所有的都实现了相同的接口。
下面是我所做工作的总结。
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]的自定义属性,它没有什么特殊之处,只是将应用于可本地化的实体属性。[AttributeUsage(AttributeTargets.Property)]
public class LocalizeAttribute : Attribute
{
public LocalizeAttribute() { }
}Localize属性,如下所示: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; }
}然后,
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]属性的属性,以动态创建转换形式,以便使用一个视图为所有模型保存值。因此,使用新的方法,我有了主实体,以及可以轻松包括和过滤的本地化属性的集合。
新方法的工作仍在进行中,但正如一开始提到的那样,新方法为我节省了大量的时间和精力。
https://stackoverflow.com/questions/65405209
复制相似问题