Доступ к локализованным строкам ресурсов без создания экземпляра "ResourceManager"?

Я создал несколько файлов ресурсов для хранения строк. Я показываю MessageBox, указывая его непосредственно в файле ресурсов с именем TestLocalResource и строкой ресурса с именем ThisIsMyTest, просто ссылаясь на строку ресурса следующим образом:

TestLocalResource.ThisIsMyTest

Теперь это работает. Но это оставляет мне интересно, что, ссылаясь на строку ресурса таким образом, я всегда буду обращаться к файлу ресурсов по умолчанию (например, TestLocalResource.resx), а не к его немецкой версии (например, TestLocalResource.de-DE.resx)?

Поэтому вместо этого мне нужно использовать ResourceManager? Если да, то как ResourceManager знает текущий язык (культура)? Мне нужно явно установить его?

Вот как я думаю, мне нужно будет использовать ResourceManager:

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

Но я надеюсь, что есть способ получить доступ к локализованным строкам ресурсов более удобным способом.

Ответ 1

Вам не нужно явно использовать 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); 

Ответ 2

В статье, на которую ссылается @Daniel Hilgarth в его ответе, автор указывает, что файлы ресурсов с именем Messages.resx и Images.resx должны быть созданы в папке Properties. (Папка Properties также является местом, где Visual Studio размещает свой файл ресурсов общего назначения с именем Resources.resx.)

Я обнаружил, что Visual Studio 2013 не позволит мне создавать и размещать Messages.resx в папке Properties, щелкнув правой кнопкой мыши по Properties node в обозревателе решений. Вместо этого вот что я сделал:

  • В обозревателе решений щелкните правой кнопкой мыши проект node.
  • Выберите Добавить = > Новый элемент... = > Ресурс Файл = > Messages.resx. Результат: Visual Studio помещает Messages.resx в папку "Проект".
  • В обозревателе решений перетащите Messages.resx в Properties node.

Как указывает @Daniel, новый класс с именем Messages теперь будет удобно предоставлять вам доступ к вашим строкам ресурсов. Обратите внимание, что Messages будет доступно через пространство имен YourProject.Properties (где YourProject - это имя вашего проекта, как показано в обозревателе решений).

Например, скажем, что у вас есть строка ресурсов с именем OperationSucceeded. Теперь вы сможете получить доступ к этой строке ресурсов через:

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

... или, более удобно:

using YourProject.Properties;

MessageBox.Show(Messages.OperationSucceeded);