我试图将mvc应用程序(法语和英语)全球化,这就是我所做的:
1)创建了一个App_LocalResources文件夹并添加了2个文件:
然后我在每个文件中添加了一个具有相同名称的资源(仅用于测试)并将访问修饰符修改为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.]
请帮忙。
答案 0 :(得分:3)
感谢朋友的提示,我解决了这个问题: 问题是.resx文件是作为内容构建的,所以我需要做的就是:
右键单击您的ResourceFile - &gt;属性 - &gt;改变&#34;构建行动&#34;属于&#34;内容&#34;到&#34;嵌入式资源&#34;
答案 1 :(得分:2)
我做了一个小例子,展示了你的代码应该如何运作。
之后,您的资源将在您的代码中提供
剃刀文件
<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中编译的项目程序集。
因此,如果您将资源文件添加到特殊文件夹 - 任何事情都是正确的。如果您选择将其放在另一个路径上,则会失败(除非您使用自定义工具)。