3

我创建了一些资源文件来保存字符串。我MessageBox通过将它直接指向一个名为的资源文件TestLocalResource和一个ThisIsMyTest通过简单地引用资源字符串来命名的资源字符串来显示,如下所示:

TestLocalResource.ThisIsMyTest

现在这似乎确实有效。但这让我想知道,通过这种方式引用资源字符串,我是否总是访问默认资源文件(例如,TestLocalResource.resx)而不是它的德语版本(例如,TestLocalResource.de-DE.resx)?

所以相反,我必须使用ResourceManager吗?如果是这样,如何ResourceManager知道当前的语言(文化)?我需要明确设置吗?

这就是我认为我需要使用的方式ResourceManager

ResourceManager resmgr =
    new ResourceManager("MyApplication.MyResource", Assembly.GetExecutingAssembly()); 

但我希望有一种方法可以更方便地访问本地化的资源字符串。

4

2 回答 2

11

您不需要显式使用 ResourceManager。
看看这里: http: //geekswithblogs.net/mapfel/archive/2008/11/01/126465.aspx
要了解如何更改运行时使用的文化,请参阅链接中的第二条评论

switch (comboBox1.Text)
{
    case "neutral":
        Thread.CurrentThread.CurrentUICulture = new CultureInfo("");
        break;
    case "en-GB":
        Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-GB");
        break;
    case "de-DE":
        Thread.CurrentThread.CurrentUICulture = new CultureInfo("de-DE");
        break;
}

string messageText = Messages.MsgSampleText;
MessageBox.Show(messageText); 
于 2011-03-09T13:47:50.527 回答
1

在@Daniel Hilgarth 在他的回答中引用的文章中,作者指出命名的资源文件应该每个都在文件夹中创建。(该文件夹也是 Visual Studio 放置其名为 的通用资源文件的位置。)Messages.resxImages.resxPropertiesPropertiesResources.resx

我发现 Visual Studio 2013 不允许我通过右键单击解决方案资源管理器中的节点来创建并放置Messages.resx在文件夹中。相反,这就是我所做的:PropertiesProperties

  1. 在解决方案资源管理器中,右键单击项目节点。
  2. 选择添加 => 新项目... => 资源文件 => Messages.resx。结果:Visual Studio 放置Messages.resxProject文件夹中。
  3. 在解决方案资源管理器中,拖动Messages.resxProperties节点。

正如@Daniel 所指出的,一个名为的新类Messages现在可以方便地为您提供对资源字符串的访问。请注意,这Messages将可以通过YourProject.Properties命名空间访问(YourProject您的项目名称在哪里,如解决方案资源管理器中所示)。

例如,假设您有一个名为OperationSucceeded. 您现在可以通过以下方式访问该资源字符串:

MessageBox.Show(YourProject.Properties.Messages.OperationSucceeded);

...或者,更方便:

using YourProject.Properties;

MessageBox.Show(Messages.OperationSucceeded);
于 2017-01-06T15:37:25.497 回答