2

我正在开发支持多语言的 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(不知道这是否是一个好习惯!)

以下是我正在考虑的以下事项:

  1. 编写像 @Html.TranslateText("TX001") 这样的 Html 辅助扩展。我从这个方法开始,但很快意识到@Html.ValidationMessage 只接受一条消息,而与属性上的多个验证器属性无关。我也不能使用 EditorFor 模板。

  2. 使用 javascript 将文本 ID 替换为适当的消息

  3. 在模型上使用反射并替换属性的文本 ID。

我倾向于选项 3,通过扩展 ModelMetadataProvider,或编写操作过滤器属性,或在 EditorForModel 模板中。

我对如何进行感到非常困惑。我仍在学习MVC。因此。我想请教专家如何以最好的方式处理这个问题。

谢谢,

4

0 回答 0