这是翻译页面的不同方法。这并不意味着本地化。我创建了类 TransModel,我的所有 ViewModel 都继承自该类。此类从数据库中获取与当前 ViewModel 相关的字符串对并将它们存储在“标签”字典中。该对的键是此处“用户名”字符串的值,值是翻译后的值。
[Display(Name = "User Name")]
public string UserName { get; set; }
我没有在 View 中使用 Html.LabelFor,而是使用它的扩展名为 TransLabelFor
public static MvcHtmlString TransLabelFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression,TransModel model)
{
ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData);
string trans = "";
model.labels.TryGetValue(metadata.DisplayName, out trans);
if (trans == null)
{
trans = metadata.DisplayName;
}
return MvcHtmlString.Create(String.Format("<label for='{0}'>{1}</label>", metadata.DisplayName, trans));
}
现在我想用它替换我返回的东西。我想要由此返回的原始标签:
MvcHtmlString originalTag = System.Web.Mvc.Html.LabelExtensions.LabelFor(html, expression);
但我的翻译。
是否有任何巧妙的方法来代替字符串查找/替换?我不喜欢我也必须传递模型,有更好的想法吗?