在MVC中创建每视图资源文件

时间:2015-07-27 20:24:45

标签: asp.net-mvc-5 resx

我正在将本地化的WebForms应用程序转换为MVC5。我在MVC中看到的大多数示例都有一个资源 - resx - 文件(每种语言)用于整个应用程序。

是否可以为每个视图分别创建一个文件?如果是,是否有一个如何引用所述文件的例子?

更新:如果可能,我想保留资源文件未编译。这样我们就可以动态编辑RESX文件,而无需每次都重新编译网站。

以下是我在WebForms中的过程。我基本上试图在MVC5中重现这一点。

public string LocalizeText(Page CurrentPage, string resourceKey)
    {
        string localizedText = string.Empty;

        // LOOK FOR LOCALIZED TEXT
        String filePath = string.Empty;
        if (!String.IsNullOrEmpty(CurrentPage.Request.GetFriendlyUrlFileVirtualPath()))
        {
            filePath = CurrentPage.Request.GetFriendlyUrlFileVirtualPath();   // FOR FRIENDLY URLS
        }
        else
        {
           filePath = CurrentPage.Request.CurrentExecutionFilePath; // FOR "UNFRIENDLY" URLS (THOSE WITH A FILE EXTENSION VISIBLE)
        }

        try
        {
            localizedText = Convert.ToString(HttpContext.GetLocalResourceObject(filePath, resourceKey, System.Globalization.CultureInfo.CurrentCulture)).Trim();
        }
        catch (Exception ex)
        {
             HttpContext.Current.Response.Write(ex.ToString() + "<br />" + filePath);
        }


        return localizedText;

    }

资源文件位于App_LocalResources文件夹中。

1 个答案:

答案 0 :(得分:3)

是的,可以为视图提供单独的资源文件。作为一个非常简单,相当沉闷的例子(抱歉:-)),请考虑以下视图模型:

using _31662592.Resources;
using System.ComponentModel.DataAnnotations;

public class HomeViewModel
{
    [Display(Name = "WelcomeHeader", ResourceType = typeof(HomeResources))]
    public string WelcomeHeader { get; set; }
    [Display(Name = "WelcomeMessage", ResourceType = typeof(HomeResources))]
    public string WelcomeMessage { get; set; }
}

在这里,我使用了Display属性,该属性支持本地化。所以在我的例子中,我创建的资源文件如下所示:

Resources File

如您所见,ResourceType属性对应于资源文件的类型(在我的情况下为HomeResources),Name属性对应于字符串的名称在您希望将属性绑定到的资源文件中。

行动中没有任何幻想:

public ActionResult Index()
{
    return View(new HomeViewModel());
}

视图也非常简单:

@model _31662592.Models.HomeViewModel

<h1>@Html.DisplayNameFor(m => m.WelcomeHeader)</h1>

<p>@Html.DisplayNameFor(m => m.WelcomeMessage)</p>

您甚至可以在视图中使用内联资源,例如:

@using _31662592.Resources

<h1>@HomeResources.WelcomeHeader</h1>

<p>@HomeResources.WelcomeMessage</p>

如果您遇到任何问题,请确保:

  1. 资源的构建操作设置为&#34; Embedded Resource&#34;。
  2. 资源的自定义工具设置为&#34; PublicResXFileCodeGenerator&#34;。
  3. 可以通过右键单击资源文件并选择Properties来设置这两个选项。然后,这些选项将显示在可停靠窗口属性中。最后,如果您希望引用其他项目中的资源文件,请确保将其设置为Public而不是内部,您可以通过双击资源文件将其设置为正常打开,然后将其访问修饰符从internal更改为public