Creazione del package delle risorse

Finora nell'esercitazione si è dato per scontato che venga utilizzata una sola lingua predefinita per le risorse. È giunto il momento di prendere in considerazione uno scenario più complesso, in cui esistono insiemi paralleli di risorse per più lingue. Questo consente di costruire una singola applicazione eseguibile in più lingue. In altre parole, l'applicazione può essere personalizzata in base a esigenze specifiche identificando la lingua dell'utente e caricando le risorse appropriate in fase di esecuzione. Questo approccio consente anche di modificare le risorse, magari aggiornando una stringa o persino aggiungendo una nuova lingua, senza richiedere una nuova compilazione e distribuzione dell'intera applicazione. La cosa risulta particolarmente comoda quando le risorse si trovano in una directory condivisa e più utenti possono scegliere automaticamente le modifiche.

Le due applicazioni di esempio localizzate incluse nella presente esercitazione, WorldCalc e Graphic, utilizzano assembly satellite privati. Vengono definiti privati in quanto non sono inseriti nella cache dell'assembly globale. Vengono definiti satellite in quanto si tratta di assembly di sole risorse, o DLL, che funzionano in combinazione con un altro assembly principale in cui si trova il codice dell'applicazione. L'assembly principale contiene anche le risorse della lingua predefinita, o non associata ad alcun paese, che vengono utilizzate quando non esiste una risorsa localizzata specifica. Le risorse dell'assembly principale si trovano nella directory dell'applicazione nei file RESOURCES e sono incorporate nell'assembly dal computer. Possono anche essere incorporate successivamente utilizzando lo strumento Assembly Linker (AL).

**Nota   **Per ulteriori informazioni sullo strumento AL, vedere l'Appendice B: strumenti delle risorse.

Se gli assembly delle risorse devono essere condivisi, e quindi trovarsi nella cache degli assembly globale ed essere utilizzati da più applicazioni, è necessario assegnare loro un nome sicuro fornendo ulteriori informazioni sulla chiave e sulla versione. Inoltre è possibile aggiungere l'attributo SatelliteContractVersionAttribute per poter creare versioni degli assembly delle risorse satellite, indipendenti dall'assembly principale e senza richiedere l'utilizzo di file dei criteri di configurazione. Per ulteriori informazioni sugli assembly con nomi sicuri, vedere Creazione del package e distribuzione di applicazioni .NET Framework.

Se si esamina ogni applicazione, si noterà che all'interno della directory dell'applicazione esiste una serie di sottodirectory, ciascuna delle quali presenta un nome corrispondente a un tag della lingua e contiene le informazioni sulle risorse non elaborate e, se incorporato, l'assembly satellite corrispondente. Questo layout evidenzia due punti importanti: un determinato assembly può contenere risorse relative a una sola lingua e le risorse di ciascuna lingua sono memorizzate in una sottodirectory separata a cui viene assegnato il nome del tag della lingua.

Stringhe: la localizzazione delle stringhe è illustrata dall'esempio WorldCalc. Le stringhe sono memorizzate in coppie nome/valore in file denominati MyStrings.txt nella directory dell'applicazione (per l'inglese predefinito) e le due lingue localizzate (de per tedesco e de-CH per tedesco (Svizzera).

Il processo di generazione (in Build.bat) per l'applicazione di esempio WorldCalc prevede l'esecuzione delle operazioni riportate di seguito, illustrate in un ordine più logico rispetto alla sequenza del file Build.bat effettivo.

  1. Generare i componenti math.dll e parser.dll:

    csc ... math.cs
    csc ... parser.cs
    
  2. Generare il file RESOURCES predefinito e tutti i file RESOURCES localizzati utilizzando Resgen.exe:

    resgen MyStrings.txt MyStrings.resources
    resgen MyStrings.de.txt MyStrings.de.resources
    resgen MyStrings.de-CH.txt MyStrings.de-CH.resources
    
  3. Utilizzare lo strumento AL per creare gli assembly satellite, incorporare (o collegare) le risorse e impostare la lingua:

    al /out:WorldCalc.Resources.Dll /v:1.0.0.0 /c:de /embed:MyStrings.de.resources,MyStrings.de.resources,Private
    al /out:WorldCalc.Resources.Dll /v:1.0.0.0 /c:de-CH /embed:MyStrings.de-CH.resources,MyStrings.de-CH.resources,Private
    

    **Nota   **Le stringhe della lingua non operano la distinzione tra maiuscole e minuscole.

  4. Compilare l'applicazione e collegare le risorse predefinite con l'opzione /res:

    csc ... /target:winexe ... /addmodule:parser.dll /r:System.Windows.Forms.dll /r:System.Drawing.dll /r:System.dll /r:math\math.dll /res:MyStrings.resources WorldCalc.cs
    

    Di seguito è riportato l'equivalente di Visual Basic:

    vbc ... /target:winexe ... /addmodule:parser.dll /r:System.Windows.Forms.dll /r:System.Drawing.dll /r:System.dll /r:math\math.dll /res:MyStrings.resources WorldCalc.vb
    

A partire da questo punto, per aggiungere un'altra lingua sarà sufficiente creare il file di testo appropriato contenente le risorse e ripetere i passaggi 2 e 3.

Immagini: la localizzazione delle immagini è illustrata nell'esempio Graphic. Il processo di generazione dell'applicazione di esempio è simile al processo relativo a WorldCalc, ma prevede un solo passaggio in più, in cui le immagini vengono convertite in file RESX:

resxgen /i:un.jpg /o:Images.resx /n:flag
cd en
resxgen /i:en.jpg /o:Images.en.resx /n:flag
cd ..\en-au
...

Vedere anche

Recupero di risorse tramite codice | Riepilogo delle risorse | Appendice A: ulteriori informazioni sulle risorse | Appendice B: strumenti delle risorse