全球化无法找到适当的资源

时间:2015-08-12 11:40:18

标签: c# asp.net asp.net-mvc globalization


我试图将mvc应用程序(法语和英语)全球化,这就是我所做的:

1)创建了一个App_LocalResources文件夹并添加了2个文件:

  • Resources.resx(将包含法语)和
  • Resources.en.resx(将包含英文)。

然后我在每个文件中添加了一个具有相同名称的资源(仅用于测试)并将访问修饰符修改为Public(对于每个文件)

2)在global.asax

中指定法国文化
protected void Session_Start()
{
    string userLanguage = Request.UserLanguages[0];
    string cultureName = CultureHelper.GetImplementedCulture(userLanguage);
    Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(cultureName);
    Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
    HRP.App_LocalResources.Resources.Culture = Thread.CurrentThread.CurrentCulture;
}

CultureHelper是我在网上找到的帮手,它决定了文化的正确名称(作者信用):http://pastebin.com/JkhjJg4N

3)添加了一个测试字符串以显示在我的视图中:

<p><span class="Title">@HRP.App_LocalResources.Resources.EmployeesTitle</span></p>

例外是:

[MissingManifestResourceException: Could not find any resources appropriate for the specified culture or the neutral culture.  Make sure "HRP.App_LocalResources.Resources.resources" was correctly embedded or linked into assembly "HRP" at compile time, or that all the satellite assemblies required are loadable and fully signed.]

请帮忙。

2 个答案:

答案 0 :(得分:3)

感谢朋友的提示,我解决了这个问题: 问题是.resx文件是作为内容构建的,所以我需要做的就是:

右键单击您的ResourceFile - &gt;属性 - &gt;改变&#34;构建行动&#34;属于&#34;内容&#34;到&#34;嵌入式资源&#34;

答案 1 :(得分:2)

我做了一个小例子,展示了你的代码应该如何运作。

  1. 将资源的构建操作设置为嵌入资源
  2. 输入自定义工具 PublicResXFileCodeGenerator
  3. 之后,您的资源将在您的代码中提供

    剃刀文件

    <p>@NAMESPACE.App_LocalResources.YOUR_RESOURCE_FILE.RESOURCE_NAME</p>
    

    我使用了另一种自定义工具K. Scott Allen stated

      

    特殊资源目录之外的Resx文件MVC中的resx属性

         

    如果将resx文件添加到MVC项目中的任何其他文件夹或   类库,resx自动设置为嵌入到   项目的输出组件 - 这很好。 IDE也分配了   resx一个ResxCodeFileGenerator的自定义工具来生成一个强大的   打字包装 - 这很好。 生成的类是内部的   默认 - 这很糟糕。为视图创建的程序集(通过ASP.NET)   将无法使用内部类,因为它是一个不同的   assembly - 在Visual Studio中编译的项目程序集。

    因此,如果您将资源文件添加到特殊文件夹 - 任何事情都是正确的。如果您选择将其放在另一个路径上,则会失败(除非您使用自定义工具)。