c# - DisplayName 和 DisplayFor 的 MVC 全局化

标签 c# asp.net-mvc entity-framework globalization

我正在使用 MVC 开发多语言(英语、阿拉伯语)应用程序。此应用程序应显示标签和基于资源文件的数据。

例如,数据库旨在将翻译后的字段存储在相同的表中

  Gender[Id, Name,ArabicName]
  Person[Id,FirstName,FatherName,FamilyName,ArabicFirstName,
           ArabicFatherName,ArabicFamilyName,GenderId]

我通过在 NameArabicName 字段之间切换,设法根据资源显示所有 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;}

我的问题是,是否可以使用 DisplayForFirstName valueArabicFirstName 之间切换,以及如何在 MVC 中实现这个?

例如显示:FirstName = Antony for english , ArabicFirstName = انطوان for arabic

最佳答案

我做了以下解决方法来使事情正常进行

  1. 为了区分资源文件中的标签和数据值,我使用了约定:

FirstName代表标签,FirstNameResource代表数据

资源文件的示例如下:

   FirstName => value = First Name (for english), الاسم الاول (for arabic)
   FirstNameResource = > value = FirstName ( for english) , ArabicFirstName (for arabic)
  1. 我编写了以下 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);
    }
    
  2. 您可以按如下方式使用此扩展:

    @Html.DisplayResourceFor(m=>m.FirstName)

这个解决方法帮助我解决了问题,但也许还有另一个直接的解决方案。

关于c# - DisplayName 和 DisplayFor 的 MVC 全局化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31355886/

相关文章:

javascript - 在 C# 中定义 session 变量从 javascript 获取它

asp.net-mvc - 重定向(url)不起作用

c# - 将 Entity Framework 与自定义子类一起使用

C# IQueryable - 如何查询另一个列表中的列表

c# - 输入字符串的格式不正确 #2

c# - 通过 EWS 和 C# 访问没有邮箱的资源日历

c# - 为什么我不能序列化具有私有(private) setter 的属性(C#、json)

asp.net - ASP.NET MVC 中的分页

javascript - 最佳实践 - ASP.NET 合并所有 JavaScript 输出

entity-framework - EF CF 手动配置多对多映射