本地化resx文件在单独的程序集中?

时间:2012-09-12 15:14:18

标签: c# localization embedded-resource resx

我有一个场景,我需要在多个项目类型(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"在编译时,或者所有所需的附属程序集都是可加载和完全签名的。"

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

1 个答案:

答案 0 :(得分:0)

我不确定我最初的错误但是我可以发誓我用汇编+名称空间+资源名称的所有可能排列测试它并且它不起作用但也许我忘了保存或者因为它确实是就像这样简单:

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

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

然后如果要在区域设置之间切换,请执行以下操作:

CultureInfo french = new CultureInfo("fr-FR");
string translatedVal = rm.GetString("keyname", french);