почему? если меня не удовлетворили по моим вопросам, то почему я должен принимать неправильные предложения?
Red Swan
1
Если файл .resx был добавлен с помощью Visual Studio в свойствах проекта, см. Мой ответ для более простого и менее подверженного ошибкам способа доступа к строке.
// Create a resource manager to retrieve resources.ResourceManager rm =newResourceManager("items",Assembly.GetExecutingAssembly());// Retrieve the value of the string resource named "welcome".// The resource manager will retrieve the value of the // localized resource using the caller's current culture setting.String str = rm.GetString("welcome");
На странице MSDN, на которую я ссылался: baseName Корневое имя файла ресурсов без его расширения, но включая любое полное имя пространства имен. Например, корневое имя файла ресурсов MyApplication.MyResource.en-US.resources - MyApplication.MyResource.
JeffH
1
items == пространство имен файла ресурсов
9
плохой пример: вы должны объяснить, что элементы - это пространство имен + корневой тип ресурса
ActiveX
Вам это нужно только ResourceManagerтогда, когда вы хотите загрузить внешний ресурс. <Namespace>.PropertiesВместо этого используйте .
Юша Алеайуб,
132
ResourceManagerне нужны, если вы не загружаете с внешнего ресурса.
В большинстве случаев, допустим, вы создали проект (DLL, WinForms, что угодно), вы просто используете пространство имен проекта, «Ресурсы» и идентификатор ресурса. например:
Предполагая пространство имен проекта: UberSoft.WidgetPro
Вы также можете при желании указать культуру - полезно, если вы хотите обеспечить вывод, зависящий от языка и региональных параметров, который противоречит умолчанию. например, TestResource.ResourceManager.GetString (описание, новый CultureInfo ("en-GB"));
Ян
Я получаю следующую ошибку: «Ресурсы» не содержат определения для «GetString».
Lechucico
Вам это нужно только ResourceManagerтогда, когда вы хотите загрузить внешний ресурс. <Namespace>.PropertiesВместо этого используйте .
Юша Алеайуб,
30
Откройте файл .resx и установите для параметра «Модификатор доступа» значение «Открытый».
работает ли этот метод с несколькими файлами ресурсов (языками), потому что везде, куда я смотрю, они используют метод ResourceManager, и мне интересно, должен ли я рисковать, используя этот способ, или нет ...
deadManN
2
Не работает. Мой файл ресурсов не отображается после Properties.Resources. «Мое имя файла», даже если для него установлено значение public
user1804084
27
Предполагая, что файл .resx был добавлен с помощью Visual Studio в свойствах проекта, существует более простой и менее подверженный ошибкам способ доступа к строке.
При раскрытии файла .resx в обозревателе решений должен появиться файл .Designer.cs.
При открытии файл .Designer.cs имеет пространство имен Properties и внутренний класс. В этом примере предположим, что класс называется Resources.
Тогда получить доступ к строке так же просто, как:
var resourceManager =JoshCodes.Core.Testing.Unit.Properties.Resources.ResourceManager;var exampleXmlString = resourceManager.GetString("exampleXml");
Замените JoshCodes.Core.Testing.Unitна пространство имен проекта по умолчанию.
Замените exampleXml именем своего строкового ресурса.
Если по какой-то причине вы не можете поместить файлы ресурсов в App_GlobalResources, вы можете открывать файлы ресурсов напрямую с помощью ResXResourceReader или XML Reader.
Вот пример кода для использования ResXResourceReader:
publicstaticstringGetResourceString(stringResourceName,string strKey){//Figure out the path to where your resource files are located.//In this example, I'm figuring out the path to where a SharePoint feature directory is relative to a custom SharePoint layouts subdirectory. string currentDirectory =Path.GetDirectoryName(HttpContext.Current.Server.MapPath(HttpContext.Current.Request.ServerVariables["SCRIPT_NAME"]));string featureDirectory =Path.GetFullPath(currentDirectory +"\\..\\..\\..\\FEATURES\\FEATURENAME\\Resources");//Look for files containing the nameList<string> resourceFileNameList =newList<string>();DirectoryInfo resourceDir =newDirectoryInfo(featureDirectory);var resourceFiles = resourceDir.GetFiles();foreach(FileInfo fi in resourceFiles){if(fi.Name.Length>ResourceName.Length+1&& fi.Name.ToLower().Substring(0,ResourceName.Length+1)==ResourceName.ToLower()+"."){
resourceFileNameList.Add(fi.Name);}}if(resourceFileNameList.Count<=0){return"";}//Get the current culturestring strCulture =CultureInfo.CurrentCulture.Name;string[] cultureStrings = strCulture.Split('-');string strLanguageString = cultureStrings[0];string strResourceFileName="";string strDefaultFileName = resourceFileNameList[0];foreach(string resFileName in resourceFileNameList){if(resFileName.ToLower()==ResourceName.ToLower()+".resx"){
strDefaultFileName = resFileName;}if(resFileName.ToLower()==ResourceName.ToLower()+"."+strCulture.ToLower()+".resx"){
strResourceFileName = resFileName;break;}elseif(resFileName.ToLower()==ResourceName.ToLower()+"."+ strLanguageString.ToLower()+".resx"){
strResourceFileName = resFileName;break;}}if(strResourceFileName ==""){
strResourceFileName = strDefaultFileName;}//Use resx resource reader to read the file in.//https://msdn.microsoft.com/en-us/library/system.resources.resxresourcereader.aspxResXResourceReader rsxr =newResXResourceReader(featureDirectory +"\\"+ strResourceFileName);//IDictionaryEnumerator idenumerator = rsxr.GetEnumerator();foreach(DictionaryEntry d in rsxr){if(d.Key.ToString().ToLower()== strKey.ToLower()){return d.Value.ToString();}}return"";}
Спасибо, обратите внимание, что вам нужно добавить ссылку System.Windows.Formsна использование System.Resources.ResXResourceReader. Кроме того, var enumerator = rsxr.OfType<DictionaryEntry>();вместо этого вы можете использовать LINQ.
Дунк
Очень сложно найти статьи или сообщения о том, как «читать, анализировать и загружать» файл resx. Все, что вы получаете, это «используйте resx как контейнер для строк вашего проекта». Спасибо за такой ответ!
Simone
9
После добавления ресурса (Name: ResourceName и Value: ResourceValue) в решение / сборку вы можете просто использовать «Properties.Resources.ResourceName» для получения необходимого ресурса.
Я добавил файл .resx через Visual Studio. Это создало designer.csфайл со свойствами, чтобы немедленно вернуть значение любого ключа, который я хотел. Например, это некий автоматически сгенерированный код из файла дизайнера.
/// <summary>/// Looks up a localized string similar to When creating a Commissioning change request, you must select valid Assignees, a Type, a Component, and at least one (1) affected unit../// </summary>publicstaticstringMyErrorMessage{get{returnResourceManager.GetString("MyErrorMessage", resourceCulture);}}
Таким образом, я мог просто сделать:
string message =Errors.MyErrorMessage;
Где Errorsнаходится Errors.resxфайл, созданный с помощью Visual Studio, и MyErrorMessageявляется ключом.
Да, я только что сделал, это VS2015 сегодня. Щелкните правой кнопкой мыши, добавьте файл «Ресурсы», и все ключи станут «точечными». Таким образом, "MyResx.resx" с ключом "Script" может быть доступен как строка scriptValue = MyResx.Script;
emery.noel
5
Я добавил свой файл ресурсов в свой проект напрямую, и поэтому я смог получить доступ к строкам внутри очень хорошо с именем файла resx.
Пример: в Resource1.resx ключ «resourceKey» -> строка «dataString». Чтобы получить строку «dataString», я просто помещаю Resource1.resourceKey.
Могут быть причины не делать этого, о которых я не знаю, но у меня это сработало.
Самый простой способ получить значение из файла ресурсов. Добавьте файл ресурсов в проект. Теперь получите строку, которую вы хотите добавить, как в моем случае это был текстовый блок (SilverLight). Также не нужно добавлять какое-либо пространство имен, в моем случае оно работает нормально
txtStatus.Text=Constants.RefractionUpdateMessage;
Константы - это имя моего файла ресурсов в проекте.
Ответы:
Этот пример взят со страницы MSDN в ResourceManager.GetString () :
источник
ResourceManager
тогда, когда вы хотите загрузить внешний ресурс.<Namespace>.Properties
Вместо этого используйте .ResourceManager
не нужны, если вы не загружаете с внешнего ресурса.В большинстве случаев, допустим, вы создали проект (DLL, WinForms, что угодно), вы просто используете пространство имен проекта, «Ресурсы» и идентификатор ресурса. например:
Предполагая пространство имен проекта:
UberSoft.WidgetPro
И ваш resx содержит:
Вы можете просто использовать:
источник
Попробуйте это, у меня работает .. просто
Предположим, что имя вашего файла ресурсов - «TestResource.resx», и вы хотите динамически передавать ключ,
Добавить пространство имен
источник
ResourceManager
тогда, когда вы хотите загрузить внешний ресурс.<Namespace>.Properties
Вместо этого используйте .Откройте файл .resx и установите для параметра «Модификатор доступа» значение «Открытый».
источник
Предполагая, что файл .resx был добавлен с помощью Visual Studio в свойствах проекта, существует более простой и менее подверженный ошибкам способ доступа к строке.
Тогда получить доступ к строке так же просто, как:
Замените
JoshCodes.Core.Testing.Unit
на пространство имен проекта по умолчанию.источник
После ответа @JeffH я рекомендую использовать
typeof()
имя строковой сборки.источник
Если по какой-то причине вы не можете поместить файлы ресурсов в App_GlobalResources, вы можете открывать файлы ресурсов напрямую с помощью ResXResourceReader или XML Reader.
Вот пример кода для использования ResXResourceReader:
источник
System.Windows.Forms
на использованиеSystem.Resources.ResXResourceReader
. Кроме того,var enumerator = rsxr.OfType<DictionaryEntry>();
вместо этого вы можете использовать LINQ.После добавления ресурса (Name: ResourceName и Value: ResourceValue) в решение / сборку вы можете просто использовать «Properties.Resources.ResourceName» для получения необходимого ресурса.
источник
Я добавил файл .resx через Visual Studio. Это создало
designer.cs
файл со свойствами, чтобы немедленно вернуть значение любого ключа, который я хотел. Например, это некий автоматически сгенерированный код из файла дизайнера.Таким образом, я мог просто сделать:
Где
Errors
находитсяErrors.resx
файл, созданный с помощью Visual Studio, иMyErrorMessage
является ключом.источник
Я добавил свой файл ресурсов в свой проект напрямую, и поэтому я смог получить доступ к строкам внутри очень хорошо с именем файла resx.
Пример: в Resource1.resx ключ «resourceKey» -> строка «dataString». Чтобы получить строку «dataString», я просто помещаю Resource1.resourceKey.
Могут быть причины не делать этого, о которых я не знаю, но у меня это сработало.
источник
Самый простой способ сделать это:
источник
Самый простой способ получить значение из файла ресурсов. Добавьте файл ресурсов в проект. Теперь получите строку, которую вы хотите добавить, как в моем случае это был текстовый блок (SilverLight). Также не нужно добавлять какое-либо пространство имен, в моем случае оно работает нормально
Константы - это имя моего файла ресурсов в проекте.
источник
Создайте диспетчер ресурсов для извлечения ресурсов.
источник
У меня это работает. скажем, у вас есть файл strings.resx со строкой ok. читать это
источник