首页 文章

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

提问于
浏览
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“,或者所有所需的附属程序集都是可加载和完全签名的 . “

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

1 回答

  • 0

    我不知道我最初有什么错误,但我可以发誓我用汇编名称空间资源名称的所有可能的排列测试它并且它不起作用但是我可能忘记保存或者其他东西因为它真的很简单:

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

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

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

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

相关问题