se eles não me satisfazem nas minhas perguntas, então porque tenho que aceitar sugestões erradas?
Red Swan
1
Se o arquivo .resx foi adicionado usando o Visual Studio nas propriedades do projeto, veja minha resposta para uma maneira mais fácil e menos sujeita a erros de acessar a string.
// 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");
Na página do MSDN, fiz referência a: baseName O nome raiz do arquivo de recurso sem sua extensão, mas incluindo qualquer nome de namespace totalmente qualificado. Por exemplo, o nome raiz do arquivo de recurso denominado MyApplication.MyResource.en-US.resources é MyApplication.MyResource.
JeffH
1
items == namespace do arquivo de recurso
7
mau exemplo: você deve explicar que os itens são namespace + tipo de raiz do recurso
ActiveX
Você só precisa ResourceManagerquando quiser carregar um recurso externo. Use em seu <Namespace>.Propertieslugar.
Yousha Aleayoub
131
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
Você também pode especificar opcionalmente a Cultura - útil se você quiser garantir uma saída específica da cultura que contradiga o padrão. por exemplo, TestResource.ResourceManager.GetString (descrição, novo CultureInfo ("en-GB"));
Ian
Obtenho o seguinte erro: 'Recursos' não contém uma definição para 'GetString'.
Lechucico
Você só precisa ResourceManagerquando quiser carregar um recurso externo. Use em seu <Namespace>.Propertieslugar.
Yousha Aleayoub
29
Abra o arquivo .resx e defina "Modificador de acesso" como Público.
este método funciona com arquivos de recursos múltiplos (idiomas), porque em todos os lugares que eu procuro eles usam o Método ResourceManager, e eu me pergunto se eu deveria arriscar usando desta forma, ou não ...
deadManN
1
Não funciona. Meu arquivo de recurso não é mostrado após Properties.Resources. "Meu nome de arquivo", mesmo se estiver definido como público
user1804084
27
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.
Expandir o arquivo .resx no Solution Explorer deve mostrar um arquivo .Designer.cs.
Quando aberto, o arquivo .Designer.cs tem um namespace Properties e uma classe interna. Para este exemplo, suponha que a classe seja denominada Resources.
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.
Substitua "exampleXml" pelo nome do seu recurso de string.
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:
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"";}
Obrigado, observe que você deve adicionar uma referência System.Windows.Formspara usar System.Resources.ResXResourceReader. Além disso, você pode fazer var enumerator = rsxr.OfType<DictionaryEntry>();e usar o LINQ.
Dunc
É muito difícil encontrar artigos ou postagens sobre como "ler, analisar e carregar" um arquivo resx. Tudo o que você obtém é "use o resx como o contêiner para as strings do seu projeto". Obrigado por esta resposta!
Simone
9
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>publicstaticstringMyErrorMessage{get{returnResourceManager.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.
Sim, acabei de fazer isso é VS2015 hoje. Clique com o botão direito, adicione o arquivo "Recursos" e todas as chaves se tornam "dottable". Portanto, "MyResx.resx" com uma chave "Script" pode ser acessado como string scriptValue = MyResx.Script;
emery.noel
5
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 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;
Constantes é meu nome de arquivo de recurso no projeto.
Respostas:
Este exemplo é da página MSDN em ResourceManager.GetString () :
fonte
ResourceManager
quando quiser carregar um recurso externo. Use em seu<Namespace>.Properties
lugar.ResourceManager
nã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:
fonte
Experimente isso, funciona para mim .. simples
Suponha que o nome do arquivo de recurso seja "TestResource.resx", e você deseja passar a chave dinamicamente,
Adicionar Namespace
fonte
ResourceManager
quando quiser carregar um recurso externo. Use em seu<Namespace>.Properties
lugar.Abra o arquivo .resx e defina "Modificador de acesso" como Público.
fonte
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:
Substitua
JoshCodes.Core.Testing.Unit
pelo namespace padrão do projeto.fonte
Seguido pela resposta @JeffH, recomendo usar o
typeof()
nome do assembly da string.fonte
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:
fonte
System.Windows.Forms
para usarSystem.Resources.ResXResourceReader
. Além disso, você pode fazervar 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.
fonte
Eu adicionei o arquivo .resx via Visual Studio. Isso criou um
designer.cs
arquivo 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.Dessa forma, consegui simplesmente fazer:
Onde
Errors
está oErrors.resx
arquivo criado por meio do Visual Studio eMyErrorMessage
é a chave.fonte
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.
fonte
A maneira mais fácil de fazer isso é:
fonte
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
Constantes é meu nome de arquivo de recurso no projeto.
fonte
Crie um gerenciador de recursos para recuperar recursos.
fonte
Isso funciona para mim. digamos que você tenha um arquivo strings.resx com a string ok nele. para ler isso
fonte