我在控制器中使用' IStringLocalizer' 来本地化我网站上的静态数据! (Link)
但是,本地化像NewsEntity或PostEntity这样的实体的最佳方法是什么? 或如何编码可本地化的实体?
public class News : BaseEntity
{
public string Title { get; set; }
public string Body { get; set; }
}
或
{Joking}
public class News : BaseEntity
{
public string TitleEn { get; set; }
public string BodyEn { get; set; }
public string TitleDe { get; set; }
public string BodyDe { get; set; }
...
}
答案 0 :(得分:0)
对于此类:
public class News : BaseEntity
{
public string TitleEn { get; set; }
public string BodyEn { get; set; }
public string TitleDe { get; set; }
public string BodyDe { get; set; }
}
您可以执行以下操作:
public class BaseEntity
{
protected bool IsGerman => Thread.CurrentThread.CurrentUICulture.TwoLetterISOLanguageName == "de"
}
public class News : BaseEntity
{
public string Title => IsGerman ? TitleDe : TitleEn
public string Body => IsGerman ? BodyDe : BodyEn
public string TitleEn { get; set; }
public string BodyEn { get; set; }
public string TitleDe { get; set; }
public string BodyDe { get; set; }
}
要获得更大的扩展性,您可以更改数据库结构。而不是新闻表具有每种语言的字符串。您可以有一个这样的表:
dbo.News
TitleResource: ResourceId
BodyResource: ResourceId
dbo.Resource
ResourceId: int
dbo.Language
LanguageId: int
LanguageName: string
dbo.ResourceValue
ResourceValueId
ResourceId
Value: string
LanguageId
这样,任何一种表在每种语言中具有不同的字符串,而不是存储语言本身,而是将一个ID存储到该字符串的资源中。然后将有多个ResourceValues,其中包含针对不同语言的字符串,指向相同的Resource。 所有可能的语言选择将在“语言”表中。这样,如果您添加一种新的语言,则无需更改代码中的任何一行,只需在“语言”表中添加新行,代码就可以选择它并知道如何将字符串解析为该语言,并建议用户填写该语言。