Как прочитать строку из файла .resx в с #? пришлите мне, пожалуйста, инструкции. шаг за шагом
Как прочитать строку из файла .resx в с #? пришлите мне, пожалуйста, инструкции. шаг за шагом
Ответы:
Этот пример взят со страницы 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's current culture setting.
String str = rm.GetString("welcome");
ResourceManager
тогда, когда вы хотите загрузить внешний ресурс. <Namespace>.Properties
Вместо этого используйте .
ResourceManager
не нужны, если вы не загружаете с внешнего ресурса.
В большинстве случаев, допустим, вы создали проект (DLL, WinForms, что угодно), вы просто используете пространство имен проекта, «Ресурсы» и идентификатор ресурса. например:
Предполагая пространство имен проекта: UberSoft.WidgetPro
И ваш resx содержит:
Вы можете просто использовать:
Ubersoft.WidgetPro.Properties.Resources.RESPONSE_SEARCH_WILFRED
Попробуйте это, у меня работает .. просто
Предположим, что имя вашего файла ресурсов - «TestResource.resx», и вы хотите динамически передавать ключ,
string resVal = TestResource.ResourceManager.GetString(dynamicKeyVal);
Добавить пространство имен
using System.Resources;
ResourceManager
тогда, когда вы хотите загрузить внешний ресурс. <Namespace>.Properties
Вместо этого используйте .
Откройте файл .resx и установите для параметра «Модификатор доступа» значение «Открытый».
var <Variable Name> = Properties.Resources.<Resource Name>
Предполагая, что файл .resx был добавлен с помощью Visual Studio в свойствах проекта, существует более простой и менее подверженный ошибкам способ доступа к строке.
Тогда получить доступ к строке так же просто, как:
var resourceManager = JoshCodes.Core.Testing.Unit.Properties.Resources.ResourceManager;
var exampleXmlString = resourceManager.GetString("exampleXml");
Замените JoshCodes.Core.Testing.Unit
на пространство имен проекта по умолчанию.
Если по какой-то причине вы не можете поместить файлы ресурсов в 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 "";
}
System.Windows.Forms
на использование System.Resources.ResXResourceReader
. Кроме того, var enumerator = rsxr.OfType<DictionaryEntry>();
вместо этого вы можете использовать LINQ.
После добавления ресурса (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>
public static string MyErrorMessage {
get {
return ResourceManager.GetString("MyErrorMessage", resourceCulture);
}
}
Таким образом, я мог просто сделать:
string message = Errors.MyErrorMessage;
Где Errors
находится Errors.resx
файл, созданный с помощью Visual Studio, и MyErrorMessage
является ключом.
Я добавил свой файл ресурсов в свой проект напрямую, и поэтому я смог получить доступ к строкам внутри очень хорошо с именем файла resx.
Пример: в Resource1.resx ключ «resourceKey» -> строка «dataString». Чтобы получить строку «dataString», я просто помещаю Resource1.resourceKey.
Могут быть причины не делать этого, о которых я не знаю, но у меня это сработало.
Самый простой способ сделать это:
Самый простой способ получить значение из файла ресурсов. Добавьте файл ресурсов в проект. Теперь получите строку, которую вы хотите добавить, как в моем случае это был текстовый блок (SilverLight). Также не нужно добавлять какое-либо пространство имен, в моем случае оно работает нормально
txtStatus.Text = Constants.RefractionUpdateMessage;
Создайте диспетчер ресурсов для извлечения ресурсов.
ResourceManager rm = new ResourceManager("param1",Assembly.GetExecutingAssembly());
String str = rm.GetString("param2");
param1 = "AssemblyName.ResourceFolderName.ResourceFileName"
param2 = имя строки, которая будет извлечена из файла ресурсов
У меня это работает. скажем, у вас есть файл strings.resx со строкой ok. читать это
String varOk = My.Resources.strings.ok