当我在我的模型中使用本地化对象开发asp net core + ef core 2.0时,我调整了以下链接中提供的解决方案来本地化我的对象link。
我现在正试图在控制器中收到更新的对象时,找到一种更新我的翻译集合的简洁方法。
目前我有一个以这种方式定义的步模型类:
public class Step
{
//Native properties
public Guid ID { get; set; }
public string Name { get; set; }
public int Order { get; set; }
public string ScriptBlock { get; set; }
//Parent Step Navigation property
public Nullable<Guid> ParentStepID { get; set; }
public virtual Step ParentStep { get; set; }
//Collection of sub steps
public virtual ICollection<Step> SubSteps { get; set; }
//MUI Properties
public TranslationCollection<StepTranslation> Translations { get; set; }
public string Description { get; set; }
//{
// get { return Translations[CultureInfo.CurrentCulture].Description; }
// set { Translations[CultureInfo.CurrentCulture].Description = value; }
//}
public Step()
{
//ID = Guid.NewGuid();
Translations = new TranslationCollection<StepTranslation>();
}
}
public class StepTranslation : Translation<StepTranslation>
{
public Guid StepTranslationId { get; set; }
public string Description { get; set; }
public StepTranslation()
{
StepTranslationId = Guid.NewGuid();
}
}
翻译和翻译收集与链接中的相同
public class TranslationCollection<T> : Collection<T> where T : Translation<T>, new()
{
public T this[CultureInfo culture]
{
// indexer
}
public T this[string culture]
{
//indexer
}
public bool HasCulture(string culture)
{
return this.Any(x => x.CultureName == culture);
}
public bool HasCulture(CultureInfo culture)
{
return this.Any(x => x.CultureName == culture.Name);
}
}
public abstract class Translation<T> where T : Translation<T>, new()
{
public Guid Id { get; set; }
public string CultureName { get; set; }
protected Translation()
{
Id = Guid.NewGuid();
}
public bool HasProperty(string name)
{
return this.GetType()
.GetProperties(BindingFlags.Public | BindingFlags.Instance)
.Any(p => p.Name == name);
}
}
本示例中的问题是如何正确处理PUT方法和步进控制器的Description属性。当它收到要更新的Step对象(通过本机c#客户端完成)时,可能只创建/更新/未更改Step的字符串Description属性。所以我必须在正确的文化中更新/创建/做任何关于翻译的描述。
我的第一个猜测是在TranslationCollection类中添加一个方法,在该方法中我可以传递文化,要更新或不更新的属性的名称(在这种情况下为描述)和描述的值。
但是因为TranslationCollection是抽象对象的集合,所以即使这是一个好主意也是如此,如果可能的话。
如果有人会对此有任何建议(希望我足够清楚),那就太棒了!
答案 0 :(得分:0)
最后回答了我自己的问题,这很简单。
只需使用索引器就像: myobject.Translations [userLang] .Name = value;