¿Por qué? Si no me satisfacen con mis preguntas, ¿por qué tengo que aceptar sugerencias incorrectas?
Red Swan
1
Si el archivo .resx se agregó usando Visual Studio en las propiedades del proyecto, vea mi respuesta para obtener una forma más fácil y menos propensa a errores de acceder a la cadena.
// 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");
Desde la página de MSDN a la que hice referencia: baseName El nombre raíz del archivo de recursos sin su extensión pero incluyendo cualquier nombre de espacio de nombres completo. Por ejemplo, el nombre raíz del archivo de recursos denominado MyApplication.MyResource.en-US.resources es MyApplication.MyResource.
JeffH
1
items == espacio de nombres del archivo de recursos
7
mal ejemplo: debe explicar que los elementos son espacio de nombres + tipo raíz del recurso
ActiveX
Solo lo necesita ResourceManagercuando desea cargar un recurso externo. Úselo en su <Namespace>.Propertieslugar.
Yousha Aleayoub
131
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
También puede especificar opcionalmente la cultura, lo que resulta útil si desea garantizar una salida específica de la cultura que contradice el valor predeterminado. por ejemplo, TestResource.ResourceManager.GetString (descripción, nueva CultureInfo ("en-GB"));
Ian
Obtengo el siguiente error: 'Recursos' no contiene una definición para 'GetString'.
Lechucico
Solo lo necesita ResourceManagercuando desea cargar un recurso externo. Úselo en su <Namespace>.Propertieslugar.
Yousha Aleayoub
29
Abra el archivo .resx y establezca "Modificador de acceso" en Público.
¿Este método funciona con múltiples archivos de recursos (idiomas)
Porque dondequiera
1
No funciona. Mi archivo de recursos no se muestra después de Properties.Resources. "My filename" incluso si está configurado como público
user1804084
27
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.
Expandir el archivo .resx en el Explorador de soluciones debería mostrar un archivo .Designer.cs.
Cuando se abre, el archivo .Designer.cs tiene un espacio de nombres Propiedades y una clase interna. Para este ejemplo, suponga que la clase se llama Recursos.
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.
Reemplaza "exampleXml" con el nombre de tu recurso de cadena.
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:
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"";}
Gracias, tenga en cuenta que debe agregar una referencia System.Windows.Formspara usar System.Resources.ResXResourceReader. Además, puede hacer var enumerator = rsxr.OfType<DictionaryEntry>();y usar LINQ en su lugar.
Dunc
Es muy difícil encontrar artículos o publicaciones sobre cómo "leer, analizar y cargar" un archivo resx. Todo lo que obtienes es "usa el resx como contenedor para las cadenas de tu proyecto". ¡Gracias por esta respuesta!
Simone
9
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>publicstaticstringMyErrorMessage{get{returnResourceManager.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.
Sí, acabo de hacer esto hoy en VS2015. Haga clic con el botón derecho, agregue el archivo "Recursos" y cualquier clave se convertirá en "tabla de puntos". Por lo tanto, se puede acceder a "MyResx.resx" con una clave "Script" como string scriptValue = MyResx.Script;
emery.noel
5
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 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.
Respuestas:
Este ejemplo es de la página de MSDN en ResourceManager.GetString () :
fuente
ResourceManager
cuando desea cargar un recurso externo. Úselo en su<Namespace>.Properties
lugar.ResourceManager
no 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:
fuente
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,
Agregar espacio de nombres
fuente
ResourceManager
cuando desea cargar un recurso externo. Úselo en su<Namespace>.Properties
lugar.Abra el archivo .resx y establezca "Modificador de acceso" en Público.
fuente
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:
Reemplazar
JoshCodes.Core.Testing.Unit
con el espacio de nombres predeterminado del proyecto.fuente
Seguido por la respuesta de @JeffH, recomiendo usar el
typeof()
nombre del ensamblaje de cadena.fuente
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:
fuente
System.Windows.Forms
para usarSystem.Resources.ResXResourceReader
. Además, puede hacervar 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.
fuente
Agregué el archivo .resx a través de Visual Studio. Esto creó un
designer.cs
archivo 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.De esa manera, simplemente pude hacer:
Donde
Errors
está elErrors.resx
archivo creado a través de Visual Studio yMyErrorMessage
es la clave.fuente
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í.
fuente
La forma más sencilla de hacerlo es:
fuente
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
Constants es mi nombre de archivo de recursos en el proyecto.
fuente
Cree un administrador de recursos para recuperar recursos.
fuente
Esto funciona para mi. digamos que tiene un archivo strings.resx con la cadena ok en él. para leerlo
fuente