Доступ к локализованным строкам ресурсов без создания экземпляра "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);