Como ler a string do arquivo .resx em c #? por favor me envie orientações. passo a passo
Como ler a string do arquivo .resx em c #? por favor me envie orientações. passo a passo
Respostas:
Este exemplo é da página MSDN em 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");
ResourceManagerquando quiser carregar um recurso externo. Use em seu <Namespace>.Propertieslugar.
ResourceManagernão deve ser necessário, a menos que você esteja carregando de um recurso externo .
Para a maioria das coisas, digamos que você tenha criado um projeto (DLL, WinForms, qualquer outro), você apenas usa o namespace do projeto, "Recursos" e o identificador de recursos. por exemplo:
Assumindo um namespace de projeto: UberSoft.WidgetPro
E seu resx contém:

Você pode apenas usar:
Ubersoft.WidgetPro.Properties.Resources.RESPONSE_SEARCH_WILFRED
Experimente isso, funciona para mim .. simples
Suponha que o nome do arquivo de recurso seja "TestResource.resx", e você deseja passar a chave dinamicamente,
string resVal = TestResource.ResourceManager.GetString(dynamicKeyVal);
Adicionar Namespace
using System.Resources;
ResourceManagerquando quiser carregar um recurso externo. Use em seu <Namespace>.Propertieslugar.
Abra o arquivo .resx e defina "Modificador de acesso" como Público.
var <Variable Name> = Properties.Resources.<Resource Name>
Supondo que o arquivo .resx foi adicionado usando o Visual Studio nas propriedades do projeto, há uma maneira mais fácil e menos sujeita a erros de acessar a string.
Acessar a string é tão fácil quanto:
var resourceManager = JoshCodes.Core.Testing.Unit.Properties.Resources.ResourceManager;
var exampleXmlString = resourceManager.GetString("exampleXml");Substitua JoshCodes.Core.Testing.Unitpelo namespace padrão do projeto.
Se por algum motivo você não pode colocar seus arquivos de recursos em App_GlobalResources, então você pode abrir arquivos de recursos diretamente usando ResXResourceReader ou um leitor XML.
Este é um exemplo de código para usar o 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. Além disso, você pode fazer var enumerator = rsxr.OfType<DictionaryEntry>();e usar o LINQ.
Depois de adicionar um recurso (Nome: ResourceName e Valor: ResourceValue) à solução / montagem, você pode simplesmente usar "Properties.Resources.ResourceName" para obter o recurso necessário.
Eu adicionei o arquivo .resx via Visual Studio. Isso criou um designer.csarquivo com propriedades para retornar imediatamente o valor de qualquer chave que eu quisesse. Por exemplo, este é um código gerado automaticamente a partir do arquivo do designer.
/// <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);
}
}
Dessa forma, consegui simplesmente fazer:
string message = Errors.MyErrorMessage;
Onde Errorsestá o Errors.resxarquivo criado por meio do Visual Studio e MyErrorMessageé a chave.
Eu adicionei meu arquivo de recursos diretamente ao meu projeto e, portanto, fui capaz de acessar as strings dentro de forma perfeita com o nome do arquivo resx.
Exemplo: em Resource1.resx, chave "resourceKey" -> string "dataString". Para obter a string "dataString", acabei de colocar Resource1.resourceKey.
Pode haver razões para não fazer isso que eu não conheço, mas funcionou para mim.
A maneira mais fácil de fazer isso é:
A maneira mais simples de obter valor do arquivo de recurso. Adicione o arquivo de recursos no projeto. Agora pegue a string onde deseja adicionar, como no meu caso, era um bloco de texto (SilverLight). Não há necessidade de adicionar qualquer namespace também. Está funcionando bem no meu caso
txtStatus.Text = Constants.RefractionUpdateMessage;
Crie um gerenciador de recursos para recuperar recursos.
ResourceManager rm = new ResourceManager("param1",Assembly.GetExecutingAssembly());
String str = rm.GetString("param2");
param1 = "AssemblyName.ResourceFolderName.ResourceFileName"
param2 = nome da string a ser recuperada do arquivo de recurso
Isso funciona para mim. digamos que você tenha um arquivo strings.resx com a string ok nele. para ler isso
String varOk = My.Resources.strings.ok