我正在使用MVC开发多语言(英语,阿拉伯语)应用程序。此应用程序应根据资源文件显示标签和数据。
数据库旨在将翻译的字段存储在相同的表中,例如
var myObj = {};
casper.start('http://google.com', function(){
myObj.someVar = 20;
});
casper.thenOpen('http://google.com/analytics', function(){
console.log(myObj.someVar);
});
我设法通过使用以下内容在 Gender[Id, Name,ArabicName]
Person[Id,FirstName,FatherName,FamilyName,ArabicFirstName,
ArabicFatherName,ArabicFamilyName,GenderId]
和dropdownlist
字段之间切换,根据资源显示所有Name
:
ArabicName
并使用以下内容显示 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;}
在FirstName
值和ArabicFirstName
之间切换,以及如何在MVC中实现此目标?
例如显示:DisplayFor
答案 0 :(得分:1)
我做了以下解决方法以使工作正常
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 =&GT; m.FirstName)
这种解决方法帮助我解决了这个问题,但也许有另一个直接的解决方案。