ResourceManager是否自动加载所有文化?

时间:2012-07-27 06:03:47

标签: c# localization globalization resourcemanager

我有一个类库 - 称之为Framework。在assemblyinfo.cs中,我有:

[assembly: NeutralResourcesLanguage("en-US")]

在\ Resources \目录下,我有 FrameworkResources.resx FrameworkResources.fr-FR.resx

在帮助程序类中,我使用它作为我的资源管理器:

private static ResourceManager manager = new ResourceManager("Framework.Resources.FrameworkResources", Assembly.GetExecutingAssembly());

在代码中,如果我这样做:

String message = manager.GetString("ArgumentNullExceptionMessage", CultureInfo.CurrentCulture);

我可以调试并将鼠标悬停在CurrentCulture上,它(和UICulture)设置为fr-FR,但这总是带回我的默认英语消息 - 而不是来自fr-FR资源文件的法语消息。

ResourceManager是否应该自动连接,或者我应该编写代码来查询当前的文化,然后打开正确的文件?假设资源管理器知道获取fr-FR字符串,我是不正确的,因为那是当前的文化?

我不确定为什么这不起作用。

更新 我有卫星装配,所以相信编译部分正常。我认为问题出在我的资源管理器中。我尝试使用ResourceSets并明确地使用ResourceManager:

ResourceManager manager =
    new ResourceManager("Framework.Resources.FrameworkResources",
        Assembly.GetExecutingAssembly());

Debug.WriteLine("de-DE : " + manager.GetString(resourceName, new CultureInfo("de-DE")));
Debug.WriteLine("el    : " + manager.GetString(resourceName, new CultureInfo("el")));
Debug.WriteLine("es-MX : " + manager.GetString(resourceName, new CultureInfo("es-MX")));
Debug.WriteLine("fr-FR : " + manager.GetString(resourceName, new CultureInfo("fr-FR")));
Debug.WriteLine("hi    : " + manager.GetString(resourceName, new CultureInfo("hi")));
Debug.WriteLine("zh-CN : " + manager.GetString(resourceName, new CultureInfo("zh-CN")));

结果如下:

de-DE : Argument '%ArgumentName%' cannot be null or empty.
el    : Argument '%ArgumentName%' cannot be null or empty.
es-MX : Argument '%ArgumentName%' cannot be null or empty.
fr-FR : Argument '%ArgumentName%' cannot be null or empty.
hi    : Argument '%ArgumentName%' cannot be null or empty.
zh-CN : Argument '%ArgumentName%' cannot be null or empty.

所以,即使一切都到位,我的资源管理器也不是试图查看那些附属程序集。要明确的是,在这些程序集中,我有上面字符串的翻译版本 - 所以它肯定是从我的默认FrameworkResources.resx文件中读取的,而不是文化特定的文件。

1 个答案:

答案 0 :(得分:4)

我明白了(感谢互联网上更多的淘汰)。我从单元测试中运行代码,并且显然MSTest没有“部署”附属程序集。如果我进入测试设置并关闭“部署”,一切都按预期工作。啊!