我正在开发支持多语言的 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 在应用程序变量中。
模型位于单独的项目中,因此无法直接访问会话,但我可以使用 DI(不知道这是否是一个好习惯!)
以下是我正在考虑的以下事项:
编写像 @Html.TranslateText("TX001") 这样的 Html 辅助扩展。我从这个方法开始,但很快意识到@Html.ValidationMessage 只接受一条消息,而与属性上的多个验证器属性无关。我也不能使用 EditorFor 模板。
使用 javascript 将文本 ID 替换为适当的消息
在模型上使用反射并替换属性的文本 ID。
我倾向于选项 3,通过扩展 ModelMetadataProvider,或编写操作过滤器属性,或在 EditorForModel 模板中。
我对如何进行感到非常困惑。我仍在学习MVC。因此。我想请教专家如何以最好的方式处理这个问题。
谢谢,