1

我有一个名为“TestResourceApp”的 Web 项目,App_GlobalResources 文件夹中有 Labels.resx。我想通过创建附属程序集来添加另一种语言。

以下是我创建附属程序集的步骤。始终显示默认文本。我做错什么了 ?

1) 在不同的文件夹中创建 Labels.fr.resx。

2)生成资源文件:

Resgen Labels.fr.resx TestResourceApp.App_GlobalResources.Labels.fr.resources

3)生成卫星程序集:

AL /t:lib /embed:TestResourceApp.App_GlobalResources.Labels.fr.resources /out:french.dll /c:fr

4) 将 french.dll 复制到 TestResourceApp/bin/fr

我在 web.config 中将 uiculture 设置为 auto,并且更改了浏览器上的语言。

4

3 回答 3

3

我能够使用这个页面来解决我遇到的一些卫星组装问题。我会再添加一些东西来检查。

反编译“中性”程序集并查看它是如何组合在一起的会很有帮助。类似的工具ILDASM.exe有助于此目的。反编译后,查看“.mresource”的文本输出,您应该会看到一个带有您的命名的文件。例如,如果您将资源添加到 Visual Studio 项目,它们将被命名为 MyAssemblyName + ".Properties.Resources" + 一种语言(如果有的话)+ ".resources" 示例:

MyAssembly.Properties.Resources.resources(中性语言)MyAssembly.Properties.Resources.en-US.resources(英语(美国))

就我而言,我将文件命名正确,并且位于适当的文件夹中(例如 Bin\en-US)。我能够通过使用ProcMon.exe(由 SysInternals 人员)验证这一点,并且可以看到工作进程在我的 DLL 文件中查找和读取(而不是仅仅说“未找到路径”)。但是,它没有按预期的名称找到资源。那时,一些反汇编有助于找出命名问题的根源。

因此,请使用ProcMon.exe缩小您可能遇到的问题的范围。希望这对某人有帮助。

于 2012-12-11T22:55:15.870 回答
1

这很复杂,但对于遇到此问题的人,这里有一些提示:

  • 尝试将 resx 包含在 web 项目中,让 VS 为您完成这项工作。
  • 反射器是你的朋友。比较您创建的附属程序集和 VS 创建的附属程序集。
  • 如果您的 Web 应用程序面向 ASP.NET 2.0,则应使用 .net 2.0 附带的 Resgex 和 AL。在 Reflector 中打开程序集并检查“参考”。它应该引用 mscorlib 2.0 版。
  • 如果使用 Web 部署项目部署 Web 应用程序,请确保附属程序集中资源的命名空间正确。同样,与 VS 创建的内容进行比较。就我而言,我使用了错误的工具来生成 Designer.cs 文件,因为我希望它们可以从不同的程序集中访问。确保您使用的是 GlobalResourceProxyGenerator。否则,命名空间将不匹配,部署代码将无法找到您的资源。Designer.cs 中的命名空间应该是“Resources”,而不是“XXXX.App_GlobalResources”
于 2011-03-28T16:13:19.177 回答
0

你已经开始enableClientBasedCulture全球化true了吗?

于 2011-02-01T07:40:18.770 回答