Як читати рядок з .resx-файлу в c #? будь ласка, надішліть мені рекомендації. крок за кроком
Як читати рядок з .resx-файлу в c #? будь ласка, надішліть мені рекомендації. крок за кроком
Відповіді:
Цей приклад зі сторінки 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
І ваш рекс містить:

Ви можете просто використовувати:
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 замість цього.
Як тільки ви додасте ресурс (Ім'я: ім'я ресурсу та значення: 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 з рядком нормально. читати його
String varOk = My.Resources.strings.ok