Question

J'ai une bibliothèque de classe - appelez-le informatique. Dans l'assembléeInfo.cs, j'ai:

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

sous un \ Ressources \ Répertoire, j'ai FramewrayResources.resx et FramewrayResources.fr-fr.resx

Dans une classe d'assistance, j'utilise cela comme gestionnaire de ressources:

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

en code, si je fais quelque chose comme ceci:

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

Je peux déboguer et survoler sur la courrureculture et l'informatique (et l'uculture) sont définis sur le FR-FR, mais cela redonne toujours mon défaut, le message anglais - pas le message français du fichier de ressources FR-FR.

Si ResourceManager soit automatiquement filtrant, ou dois-je écrire du code pour interroger la culture actuelle, puis ouvrir le bon fichier? Suis-je incorrect pour supposer que Resource Manager saura avoir la chaîne FR-FR, car c'est la culture actuelle?

Je ne suis pas sûr de savoir pourquoi cela ne fonctionne pas.

mise à jour: J'ai des assemblages satellites, alors croyez que la partie compilation va bien. Je pense que le problème est dans mon gestionnaire de ressources. J'ai essayé d'utiliser des ressources et de l'utilisation explicitement de ResourceManager comme suit:

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")));

Cela entraîne ce:

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.

Alors, même si tout est en place, mon responsable de ressources n'essaie tout simplement pas de regarder dans ces assemblées satellites. Et pour être clair, dans ces assemblées, j'ai la version traduite de la chaîne ci-dessus - de sorte qu'il lisait définitivement à partir de mon fichier careadyResources par défaut, au lieu des spécifiques de la culture.

Était-ce utile?

La solution

Je l'ai compris (grâce à plus de récurage sur l'interweb).J'exécutais du code des tests unitaires et Mstest de manière précise ne "déploie pas" les assemblages satellites.Si je passe dans les paramètres de test et désactive "Déploiement", tout fonctionne comme prévu.Ugh!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top