Pergunta

Eu tenho uma biblioteca de classes - chame-a de Framework.No assemblyinfo.cs, tenho:

[assembly: NeutralResourcesLanguage("en-US")]

Em um diretório esources\, eu tenho FrameworkResources.resx e FrameworkResources.fr-FR.resx

Em uma classe auxiliar, estou usando isto como meu gerenciador de recursos:

private static ResourceManager manager = new ResourceManager("Framework.Resources.FrameworkResources", Assembly.GetExecutingAssembly());

No código, se eu fizer algo assim:

String message = manager.GetString("ArgumentNullExceptionMessage", CultureInfo.CurrentCulture);

Posso depurar e passar o mouse sobre CurrentCulture e ele (e UICulture) estão configurados para fr-FR, mas isso SEMPRE traz de volta minha mensagem padrão em inglês - NÃO a mensagem em francês do arquivo de recurso fr-FR.

O ResourceManager deve conectar isso automaticamente ou devo escrever código para consultar a cultura atual e, em seguida, abrir o arquivo correto?Estou incorreto ao presumir que o Resource Manager saberá obter a string fr-FR, porque essa é a cultura atual?

Não sei por que isso não está funcionando.

ATUALIZAR:Eu tenho montagens satélite, então acredito que a parte de compilação está indo bem.Acho que o problema está no meu gerenciador de recursos.Tentei usar ResourceSets e ResourceManager explicitamente assim:

ResourceManager manager =
    new ResourceManager("Framework.Resources.FrameworkResources",
        Assembly.GetExecutingAssembly());

Debug.WriteLine("de-DE : " + manager.GetString(resourceName, new CultureInfo("de-DE")));
Debug.WriteLine("el    : " + manager.GetString(resourceName, new CultureInfo("el")));
Debug.WriteLine("es-MX : " + manager.GetString(resourceName, new CultureInfo("es-MX")));
Debug.WriteLine("fr-FR : " + manager.GetString(resourceName, new CultureInfo("fr-FR")));
Debug.WriteLine("hi    : " + manager.GetString(resourceName, new CultureInfo("hi")));
Debug.WriteLine("zh-CN : " + manager.GetString(resourceName, new CultureInfo("zh-CN")));

Isso resulta nisso:

de-DE : Argument '%ArgumentName%' cannot be null or empty.
el    : Argument '%ArgumentName%' cannot be null or empty.
es-MX : Argument '%ArgumentName%' cannot be null or empty.
fr-FR : Argument '%ArgumentName%' cannot be null or empty.
hi    : Argument '%ArgumentName%' cannot be null or empty.
zh-CN : Argument '%ArgumentName%' cannot be null or empty.

Portanto, mesmo que tudo esteja no lugar, meu gerente de recursos simplesmente não está tentando examinar esses conjuntos de satélites.E para ser claro, nesses assemblies, eu tenho a versão traduzida da string acima - então ela está definitivamente lendo meu arquivo FrameworkResources.resx padrão, em vez dos específicos da cultura.

Foi útil?

Solução

Eu descobri (graças a mais pesquisas na internet).Eu estava executando código de testes de unidade e, aparentemente, o MSTest não "implanta" os assemblies satélites.Se eu entrar nas configurações de teste e desligar "Implantação", tudo funcionará conforme o esperado.Eca!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top