DisplayName 和 DisplayFor 的 MVC 全球化
MVC Globalization for DisplayName and DisplayFor
我正在使用 MVC 开发多语言(英语、阿拉伯语)应用程序。此应用程序应显示标签和基于资源文件的数据。
例如,数据库旨在将翻译后的字段存储在相同的表中
Gender[Id, Name,ArabicName]
Person[Id,FirstName,FatherName,FamilyName,ArabicFirstName,
ArabicFatherName,ArabicFamilyName,GenderId]
我通过在 Name
和 ArabicName
字段之间切换,设法根据资源显示所有 dropdownlist
:
ViewBag.Gender= new SelectList(mEntities.Genders.ToList(), "Id",
Resources.Global.Name);
// Name value in the Global.resx is Name and in Global.ar.resx is ArabicName
并且还通过显示 LabelFor
使用:
[Display(Name="FirstName", ResourceType =typeof(Resources.Global))]
public string FirstName{get;set;}
我的问题是,是否可以使用 DisplayFor
在 FirstName
值 和 ArabicFirstName
之间切换,以及如何在 MVC 中实现这一点?
例如显示:FirstName = Antony for english , ArabicFirstName = انطوان for arabic
我采取了以下解决方法来使事情正常进行
- 为了区分资源文件中的标签和数据值,我使用了约定:
FirstName
代表标签,FirstNameResource
代表数据
资源文件示例如下:
FirstName => value = First Name (for english), الاسم الاول (for arabic)
FirstNameResource = > value = FirstName ( for english) , ArabicFirstName (for arabic)
我编写了以下 HtmlHelper
public static MvcHtmlString DisplayResourceFor<TModel, TValue>(this HtmlHelper<TModel> helper,
Expression<Func<TModel, TValue>> expression)
{
var rm = new ResourceManager("Resources.Global",
System.Reflection.Assembly.Load("App_GlobalResources"));
var resource = rm.GetString(string.Format("{0}Resource",
ExpressionHelper.GetExpressionText(expression)));
var value = helper.ViewContext.ViewData.GetViewDataInfo(resource).Value.ToString();
return MvcHtmlString.Create(value);
}
您可以按如下方式使用此扩展程序:
@Html.DisplayResourceFor(m=>m.FirstName)
这个解决方法帮助我解决了问题,但也许还有另一个直接的解决方案。
我正在使用 MVC 开发多语言(英语、阿拉伯语)应用程序。此应用程序应显示标签和基于资源文件的数据。
例如,数据库旨在将翻译后的字段存储在相同的表中
Gender[Id, Name,ArabicName]
Person[Id,FirstName,FatherName,FamilyName,ArabicFirstName,
ArabicFatherName,ArabicFamilyName,GenderId]
我通过在 Name
和 ArabicName
字段之间切换,设法根据资源显示所有 dropdownlist
:
ViewBag.Gender= new SelectList(mEntities.Genders.ToList(), "Id",
Resources.Global.Name);
// Name value in the Global.resx is Name and in Global.ar.resx is ArabicName
并且还通过显示 LabelFor
使用:
[Display(Name="FirstName", ResourceType =typeof(Resources.Global))]
public string FirstName{get;set;}
我的问题是,是否可以使用 DisplayFor
在 FirstName
值 和 ArabicFirstName
之间切换,以及如何在 MVC 中实现这一点?
例如显示:FirstName = Antony for english , ArabicFirstName = انطوان for arabic
我采取了以下解决方法来使事情正常进行
- 为了区分资源文件中的标签和数据值,我使用了约定:
FirstName
代表标签,FirstNameResource
代表数据
资源文件示例如下:
FirstName => value = First Name (for english), الاسم الاول (for arabic)
FirstNameResource = > value = FirstName ( for english) , ArabicFirstName (for arabic)
我编写了以下 HtmlHelper
public static MvcHtmlString DisplayResourceFor<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression) { var rm = new ResourceManager("Resources.Global", System.Reflection.Assembly.Load("App_GlobalResources")); var resource = rm.GetString(string.Format("{0}Resource", ExpressionHelper.GetExpressionText(expression))); var value = helper.ViewContext.ViewData.GetViewDataInfo(resource).Value.ToString(); return MvcHtmlString.Create(value); }
您可以按如下方式使用此扩展程序:
@Html.DisplayResourceFor(m=>m.FirstName)
这个解决方法帮助我解决了问题,但也许还有另一个直接的解决方案。