我正在开发支持多语言的mvc应用程序。我在数据库中有一个转换表,我在应用程序启动时将其保存在应用程序内存中。
数据库结构是{TextId,LanguageId,Translation}。 TextId分配给每个UI元素(如标签,验证器,下拉列表文本等)。有一个管理界面来管理翻译文本。
我想知道在UI上显示翻译文本的好方法是什么,以及在哪里进行实际翻译的最佳位置。我不想使用资源管理器,因为数据库正用于其他Asp& Asp.Net webforms应用程序。
这是模型(例如)
public class UserLoginModel
{
[Required(ErrorMessage="ER001")]
[Range(6,10,ErrorMessage="ER002")]
[Display(Description="TX001", Name="TX002")]
public string LoginId { get; set; }
[Required(ErrorMessage="ER003"), DataType(DataType.Password)]
public string Password { get; set; }
public bool RememberMe { get; set; }
}
语言ID将在Session [“LanguageId”]中,而TranslationText在Application变量中。
模型驻留在单独的项目中,因此没有直接访问会话,但我可以使用DI(不知道这是否是一个好习惯!)
以下是我正在考虑的事项:
编写Html帮助扩展名,如@ Html.TranslateText(“TX001”)。我从这个方法开始,但很快意识到@Html.ValidationMessage只接受一条消息,而不管属性上有多个验证器属性。我也不能使用EditorFor模板。
使用javascript将文本ID替换为相应的消息
在模型上使用反射并替换属性的文本ID。
我倾向于选项3,通过扩展ModelMetadataProvider,或编写动作过滤器属性,或者在EditorForModel模板中。
我对如何进行感到非常困惑。我还在学习MVC。因此。我想问专家如何以最佳方式处理这个问题。
谢谢,