¿Cómo leer la cadena del archivo .resx en c #? por favor envíeme pautas. paso a paso
¿Cómo leer la cadena del archivo .resx en c #? por favor envíeme pautas. paso a paso
Respuestas:
Este ejemplo es de la página de MSDN en 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");
ResourceManagercuando desea cargar un recurso externo. Úselo en su <Namespace>.Propertieslugar.
ResourceManagerno debería ser necesario a menos que esté cargando desde un recurso externo .
Para la mayoría de las cosas, digamos que ha creado un proyecto (DLL, WinForms, lo que sea), simplemente usa el espacio de nombres del proyecto, "Recursos" y el identificador de recursos. p.ej:
Suponiendo un espacio de nombres de proyecto: UberSoft.WidgetPro
Y tu resx contiene:

Puedes usar:
Ubersoft.WidgetPro.Properties.Resources.RESPONSE_SEARCH_WILFRED
Prueba esto, funciona para mí .. simple
Suponga que el nombre de su archivo de recursos es "TestResource.resx" y desea pasar la clave de forma dinámica,
string resVal = TestResource.ResourceManager.GetString(dynamicKeyVal);
Agregar espacio de nombres
using System.Resources;
ResourceManagercuando desea cargar un recurso externo. Úselo en su <Namespace>.Propertieslugar.
Abra el archivo .resx y establezca "Modificador de acceso" en Público.
var <Variable Name> = Properties.Resources.<Resource Name>
Suponiendo que el archivo .resx se agregó usando Visual Studio en las propiedades del proyecto, existe una forma más fácil y menos propensa a errores de acceder a la cadena.
Acceder a la cadena es tan fácil como:
var resourceManager = JoshCodes.Core.Testing.Unit.Properties.Resources.ResourceManager;
var exampleXmlString = resourceManager.GetString("exampleXml");
Reemplazar JoshCodes.Core.Testing.Unitcon el espacio de nombres predeterminado del proyecto.
Si por alguna razón no puede poner sus archivos de recursos en App_GlobalResources, entonces puede abrir archivos de recursos directamente usando ResXResourceReader o un lector XML.
Aquí está el código de muestra para usar 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.Formspara usar System.Resources.ResXResourceReader. Además, puede hacer var enumerator = rsxr.OfType<DictionaryEntry>();y usar LINQ en su lugar.
Una vez que agregue un recurso (Nombre: ResourceName y Value: ResourceValue) a la solución / ensamblado, simplemente puede usar "Properties.Resources.ResourceName" para obtener el recurso requerido.
Agregué el archivo .resx a través de Visual Studio. Esto creó un designer.csarchivo con propiedades para devolver inmediatamente el valor de cualquier clave que quisiera. Por ejemplo, este es un código generado automáticamente desde el archivo del diseñador.
/// <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);
}
}
De esa manera, simplemente pude hacer:
string message = Errors.MyErrorMessage;
Donde Errorsestá el Errors.resxarchivo creado a través de Visual Studio y MyErrorMessagees la clave.
Agregué mi archivo de recursos a mi proyecto directamente, por lo que pude acceder a las cadenas internas sin problemas con el nombre del archivo resx.
Ejemplo: en Resource1.resx, clave "resourceKey" -> cadena "dataString". Para obtener la cadena "dataString", solo puse Resource1.resourceKey.
Puede haber razones para no hacer esto que no conozco, pero funcionó para mí.
La forma más sencilla de hacerlo es:
La forma más sencilla de obtener valor del archivo de recursos. Agregue el archivo de recursos en el proyecto. Ahora obtenga la cadena donde desea agregar, como en mi caso, era un bloque de texto (SilverLight). No es necesario agregar ningún espacio de nombres también. Funciona bien en mi caso
txtStatus.Text = Constants.RefractionUpdateMessage;
Constants es mi nombre de archivo de recursos en el proyecto.
Cree un administrador de recursos para recuperar recursos.
ResourceManager rm = new ResourceManager("param1",Assembly.GetExecutingAssembly());
String str = rm.GetString("param2");
param1 = "AssemblyName.ResourceFolderName.ResourceFileName"
param2 = nombre de la cadena que se recuperará del archivo de recursos
Esto funciona para mi. digamos que tiene un archivo strings.resx con la cadena ok en él. para leerlo
String varOk = My.Resources.strings.ok