Domanda

Ho una biblioteca di classe - chiamalo quadro. Nell'assembleaNFo.cs, ho:

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

Sotto una directory \ risorse \, ho frameworkresources.resx e frameworkresources.fr-fr.resx

In una classe Helper, sto usando questo come My Resource Manager:

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

In codice, se faccio qualcosa del genere:

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

Posso eseguire il debug e il passaggio del mouse sull'attualeCultura e (e l'uicella) sono impostati su FR-FR, ma questo riporta sempre il mio messaggio predefinito, inglese, non il messaggio francese dal file di risorsa FR-FR.

Se il ResourceManager dovrebbe bloccarlo automaticamente, o dovrei scrivere il codice per interrogare la cultura corrente, quindi aprire il file giusto? Sono errato nel presumere che il gestore di risorse saprà per ottenere la stringa FR-FR, perché questa è la cultura attuale?

Non sono sicuro del perché questo non funziona.

Aggiornamento: Ho gruppi satellitari, quindi credo che la parte di compilazione stia andando bene. Penso che il problema sia nel mio gestore di risorse. Ho provato a utilizzare Risorset e usando ResourceManager esplicitamente come questo:

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

che si traduce in questo:

.
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.
.

Quindi, anche se tutto è in atto, il mio gestore di risorse semplicemente non sta cercando di guardare in quei gruppi satelliti. E per essere chiari, in quelle assemblee, ho la versione tradotta della stringa sopra - quindi stabilmente leggendo dal mio file FrameworkResources.resx predefinito, anziché quelli specifici della cultura.

È stato utile?

Soluzione

L'ho capito (grazie a più sgrassarsi sull'interweb).Stava eseguendo il codice dei test dell'unità, e in modo appetitoso Mstems non "distribuisce" le assemblee satellite.Se vado nelle impostazioni del test e disattiva "Distribuzione", tutto funziona come previsto.Ugh!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top