Domanda

Ho un progetto web chiamato "TestResourCeApp" con etichette.resx nella cartella App_GlobalResources. Voglio aggiungere un'altra lingua creando un'assemblea satellitare.

Ecco i passaggi che ho fatto per creare l'assemblaggio satellitare. Il testo predefinito viene sempre visualizzato. Cos'ho fatto di sbagliato ?

1) Crea etichette.fr.resx in una cartella diversa.

2) Generare il file delle risorse:

Resgen Labels.fr.resx TestreSourceApp.App_GlobalResources.labels.fr.Resources

3) Generare l'assemblaggio satellitare:

AL /T: lib /embed:testesourceapp.app_globalresources.labels.fr.resources /out:french.dll /c:

4) Copia francese.dll su TestResourceApp/bin/fr

Ho un ulioltura impostato su Auto su web.config e ho cambiato la lingua sul browser.

È stato utile?

Soluzione 2

È complicato ma qui ci sono alcuni suggerimenti per coloro che si imbattono in questo problema:

  • Prova a includere il RESX nel progetto Web e lascia che VS faccia il lavoro per te.
  • Il riflettore è tuo amico. Confronta gli assiemi satellitari creati e quelli creati da vs.
  • Se la tua app Web sta prendendo di mira ASP.NET 2.0, è necessario utilizzare Resgex e Al che vengono forniti con .NET 2.0. Apri gli assiemi nel riflettore e controlla i "riferimenti". Dovrebbe fare riferimento a MSCORLIB versione 2.0.
  • Se si distribuisce l'app Web utilizzando il progetto di distribuzione Web, assicurarsi che lo spazio dei nomi per le risorse nei gruppi satellitari sia corretto. Ancora una volta, confronta con ciò che VS crea. Nel mio caso, ho usato lo strumento sbagliato per generare il file designer.cs perché volevo che fossero accessibili da un gruppo diverso. Assicurati di utilizzare GlobalResourceProxyGenerator. Altrimenti, gli spazi dei nomi non corrisponderanno e il codice di distribuzione non sarà in grado di trovare la tua risorsa. Lo spazio dei nomi in designer.cs dovrebbe essere semplicemente "risorse", non "xxxx.app_globalresources"

Altri suggerimenti

Sono stato in grado di utilizzare questa pagina per risolvere alcuni problemi di assemblaggio satellitare che stavo avendo. Metterò alcune altre cose da controllare.

È utile decompilare l'assemblaggio "neutrale" e vedere come viene messo insieme. Uno strumento come ILDASM.exe è utile per questo scopo. Una volta che lo hai decompilato, guarda attraverso l'output di testo per ".Mresource" e dovresti vederne uno con la tua denominazione. Ad esempio, se aggiungi una risorsa a un progetto Visual Studio, vengono chiamati MyAssemblyName + ".properties.resources" + una lingua (se presente) + ".resources" Esempi:

Myassembly.properties.resources.resources (lingua neutrale) myassembly.properties.resources.en-us.resources (inglese (Stati Uniti))

Nel mio caso, ho avuto il file denominato correttamente e nella cartella appropriata (come bin en-us). Sono stato in grado di verificare così tanto usando ProcMon.exe (dai ragazzi di Sysinternals) e poteva vedere il processo del lavoratore trovare e leggere nel mio file DLL (invece di dire semplicemente "percorso non trovato"). Tuttavia, non stava trovando la risorsa con il nome che si aspettava. Questo è quando uno smontaggio ha contribuito ad arrivare al fondo del problema della denominazione.

Quindi, usa ProcMon.exe Per restringere il tipo di problema che potresti avere. Spero che sia utile per qualcuno.

Hai segnato enableClientBasedCulture a true nella globalizzazione?

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