Доступ к локализованным строкам ресурсов без создания экземпляра ResourceManager? - PullRequest
3 голосов
/ 09 марта 2011

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

TestLocalResource.ThisIsMyTest

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

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

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

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

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

Ответы [ 2 ]

11 голосов
/ 09 марта 2011

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

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

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

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

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

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

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

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

using YourProject.Properties;

MessageBox.Show(Messages.OperationSucceeded);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...