1

我有一个场景,我需要在多个项目类型(Web 前端、WCF、Windows 服务等)之间共享本地化,所以我的想法是创建一个本地化程序集,我可以在其中嵌入所有 resx 文件,然后随时添加/修改这些我只需要重新部署一个 dll 来更新我的所有应用程序。

因此,为了进行测试,我创建了一个类库项目并将其命名为 TestLocalization。我向它添加了一个名为 LocalizationManager 的类,它现在只是一个存根,(我计划稍后在其中放入一些实用方法)。然后我添加了两个 resx 文件,每个文件都有一个测试条目。我将一个文件命名为 Resource.resx,另一个命名为 Resource.fr.resx。我验证了 resx 文件的 Build Action 设置为 'Embedded Resource' 然后编译它并尝试使用以下代码调用它:

Assembly assembly = typeof(TestLocalization.LocalizationManager).Assembly;
ResourceManager rm = new ResourceManager("Resource", assembly);
string str = rm.GetString("AKey");

它给了我以下错误:

“找不到适合指定区域性或中性区域性的任何资源。确保“Resource.resources”在编译时已正确嵌入或链接到程序集“TestLocalization”中,或者所需的所有附属程序集都是可加载和完全签名的。 "

我在这里做错了什么?谢谢!

4

1 回答 1

0

我不确定我最初做错了什么,但我可以发誓我用程序集 + 命名空间 + 资源名的所有可能排列对其进行了测试,但它没有用,但也许我忘了保存或其他什么,因为它真的很简单:

ResourceManager rm = new ResourceManager("TestLocalization.Resource", assembly);

那就是我的项目名称是 TestLocalization 并且我的 resx 文件都在根目录中的地方。如果您将它们放在根目录下的子目录中,则还需要包含它。

然后,如果您想在语言环境之间切换,只需执行以下操作:

CultureInfo french = new CultureInfo("fr-FR");
string translatedVal = rm.GetString("keyname", french);
于 2012-09-12T19:22:10.000 回答