ResourceManager charge-t-il automatiquement toutes les cultures?
-
12-12-2019 - |
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
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.
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.
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!