Как читать строку из .resx файла в С#? пришлите мне рекомендации. шаг за шагом
Читать строку из файла .resx в С#
Ответ 1
Этот пример приведен на странице MSDN в ResourceManager.GetString():
// Create a resource manager to retrieve resources.
ResourceManager rm = new ResourceManager("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 current culture setting.
String str = rm.GetString("welcome");
Ответ 2
Менеджер ресурсов не нужен, если вы не загружаетесь с внешнего ресурса. Для большинства вещей, скажем, вы создали проект (DLL, WinForms, независимо), вы просто используете пространство имен проектов, "Ресурсы" и идентификатор ресурса. например:
Предполагая пространство имен проекта: UberSoft.WidgetPro
И ваш resx содержит:
Вы можете просто использовать:
Ubersoft.WidgetPro.Properties.Resources.RESPONSE_SEARCH_WILFRED
Ответ 3
Попробуйте это, работает для меня.. просто
Предположим, что ваше имя файла ресурса - "TestResource.resx", и вы хотите динамически передавать ключ,
string resVal = TestResource.ResourceManager.GetString(dynamicKeyVal);
Добавить пространство имен
using System.Resources;
Ответ 4
Откройте файл .resx и установите для параметра "Модификатор доступа" значение "Общий".
var <Variable Name> = Properties.Resources.<Resource Name>
Ответ 5
Предполагая, что файл .resx был добавлен с использованием Visual Studio в свойствах проекта, существует более простой и менее подверженный ошибкам способ доступа к строке.
- Расширение файла .resx в обозревателе решений должно содержать файл .Designer.cs.
- При открытии файл .Designer.cs имеет пространство имен свойств и внутренний класс. Для этого примера предположим, что класс называется Resources.
-
Доступ к строке тогда прост, как:
var resourceManager = JoshCodes.Core.Testing.Unit.Properties.Resources.ResourceManager; var exampleXmlString = resourceManager.GetString("exampleXml");
-
Замените
JoshCodes.Core.Testing.Unit
пространством имен по умолчанию проекта. - Замените "exampleXml" на имя вашего ресурса строки.
Ответ 6
В ответ на @JeffH я рекомендую использовать typeof()
, чем имя сборки строки.
var rm = new ResourceManager(typeof(YourAssembly.Properties.Resources));
string message = rm.GetString("NameOfKey", CultureInfo.CreateSpecificCulture("ja-JP"));
Ответ 7
Если по какой-то причине вы не можете поместить свои файлы ресурсов в App_GlobalResources, вы можете открывать файлы ресурсов напрямую с помощью ResXResourceReader или XML Reader.
Здесь пример кода для использования ResXResourceReader:
public static string GetResourceString(string ResourceName, 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 name
List<string> resourceFileNameList = new List<string>();
DirectoryInfo resourceDir = new DirectoryInfo(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 culture
string 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;
}
else if (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.aspx
ResXResourceReader rsxr = new ResXResourceReader(featureDirectory + "\\"+ strResourceFileName);
//IDictionaryEnumerator idenumerator = rsxr.GetEnumerator();
foreach (DictionaryEntry d in rsxr)
{
if (d.Key.ToString().ToLower() == strKey.ToLower())
{
return d.Value.ToString();
}
}
return "";
}
Ответ 8
Как только вы добавите ресурс (Name: ResourceName и Value: ResourceValue) в решение/сборку, вы можете просто использовать "Properties.Resources.ResourceName", чтобы получить требуемый ресурс.
Ответ 9
Я добавил файл .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>
public static string MyErrorMessage {
get {
return ResourceManager.GetString("MyErrorMessage", resourceCulture);
}
}
Таким образом, я смог просто сделать:
string message = Errors.MyErrorMessage;
Где Errors
- это файл Errors.resx
, созданный с помощью Visual Studio, и MyErrorMessage
- это ключ.
Ответ 10
Я добавил свой файл ресурсов в свой проект напрямую, и поэтому мне удалось получить доступ к строкам внутри, просто с именем файла resx.
Пример: в Resource1.resx, key "resourceKey" → string "dataString". Чтобы получить строку "dataString", я просто поставлю Resource1.resourceKey.
Могут быть причины не делать этого, о которых я не знаю, но это сработало для меня.
Ответ 11
Самый простой способ сделать это:
- Создайте системную папку App_GlobalResources и добавьте к ней файл ресурсов, например. Messages.resx
- Создайте свои записи в файле ресурсов, например. ErrorMsg = Это ошибка.
- Затем для доступа к этой записи: строка errormsg = Resources.Messages.ErrorMsg
Ответ 12
Самый простой способ получить значение из файла ресурсов. Добавить файл ресурсов в проект. Теперь получите строку, куда вы хотите добавить, как в моем случае это был текстовый блок (SilverLight). Не нужно также добавлять пространство имен. В моем случае это нормально работает
txtStatus.Text = Constants.RefractionUpdateMessage;
Ответ 13
Создайте менеджер ресурсов для получения ресурсов.
ResourceManager rm = new ResourceManager("param1",Assembly.GetExecutingAssembly());
String str = rm.GetString("param2");
param1 = "AssemblyName.ResourceFolderName.ResourceFileName"
param2 = имя строки, которую нужно извлечь из файла ресурсов