Condividi tramite


Informazioni sulla localizzazione ASP.NET AJAX

di Scott Cate

La localizzazione è il processo di progettazione e integrazione del supporto per un linguaggio e impostazioni cultura specifiche in un'applicazione o in un componente dell'applicazione. La piattaforma Microsoft ASP.NET offre un ampio supporto per la localizzazione per le applicazioni ASP.NET standard integrando il modello di localizzazione .NET standard; Microsoft AJAX Framework usa il modello integrato per supportare i diversi scenari in cui è possibile eseguire la localizzazione.

Introduzione

La tecnologia di ASP.NET Microsoft offre un modello di programmazione orientato agli oggetti e basato su eventi e lo unisce ai vantaggi del codice compilato. Tuttavia, il modello di elaborazione lato server presenta diversi svantaggi intrinseci nella tecnologia, molti dei quali possono essere risolti dalle nuove funzionalità incluse nello spazio dei nomi System.Web.Extensions, che incapsula i servizi Microsoft AJAX in .NET Framework 3.5. Queste estensioni consentono molte funzionalità client avanzate, disponibili in precedenza come parte delle estensioni AJAX di ASP.NET 2.0, ma ora fanno parte della libreria di classi di base framework. I controlli e le funzionalità in questo spazio dei nomi includono il rendering parziale delle pagine senza richiedere un aggiornamento a pagina completa, la possibilità di accedere ai servizi Web tramite script client (inclusa l'API di profilatura ASP.NET) e un'API lato client estesa progettata per eseguire il mirroring di molti degli schemi di controllo visualizzati nel set di controlli ASP.NET lato server.

Questo white paper esamina le funzionalità di localizzazione presenti in Microsoft AJAX Framework e Microsoft AJAX Script Library, nel contesto della necessità aziendale di supporto per la localizzazione ed esamina il supporto già integrato per la localizzazione nelle applicazioni Web fornite da .NET Framework. La libreria di script Microsoft AJAX usa il formato di file resx già usato dalle applicazioni .NET, che fornisce il supporto integrato dell'IDE e un tipo di risorsa condivisibile.

Questo white paper si basa sulla versione Beta 2 di Microsoft Visual Studio 2008. Questo white paper presuppone anche che si lavorerà con Visual Studio 2008, non Visual Web Developer Express e fornirà procedure dettagliate in base all'interfaccia utente di Visual Studio. Alcuni esempi di codice utilizzeranno modelli di progetto che potrebbero non essere disponibili in Visual Web Developer Express.

La necessità di localizzazione

In particolare per gli sviluppatori di applicazioni aziendali e gli sviluppatori di componenti, la possibilità di creare strumenti che possono essere consapevoli delle differenze tra culture e lingue è diventata sempre più necessaria. La progettazione di componenti con la possibilità di adattarsi alle impostazioni locali del client aumenta la produttività degli sviluppatori e riduce la quantità di lavoro necessaria per l'adattamento di un componente al funzionamento a livello globale.

La localizzazione è il processo di progettazione e integrazione del supporto per un linguaggio e impostazioni cultura specifiche in un'applicazione o in un componente dell'applicazione. La piattaforma Microsoft ASP.NET offre un ampio supporto per la localizzazione per le applicazioni ASP.NET standard integrando il modello di localizzazione .NET standard; Microsoft AJAX Framework usa il modello integrato per supportare i diversi scenari in cui è possibile eseguire la localizzazione. Con il Microsoft AJAX Framework, gli script possono essere localizzati e distribuiti in assembly satellite oppure utilizzando una struttura di file system statica.

Incorporazione di script con assembly satellite

Coerentemente con la strategia di localizzazione standard di .NET Framework, le risorse possono essere incluse negli assembly satellite. Gli assembly satellite offrono diversi vantaggi rispetto all'inclusione di risorse tradizionali nei file binari: qualsiasi localizzazione specifica può essere aggiornata senza aggiornare l'immagine più grande, è possibile distribuire localizzazioni aggiuntive semplicemente installando assembly satellite nella cartella del progetto e gli assembly satellite possono essere distribuiti senza causare un ricaricamento dell'assembly di progetto principale. In particolare nei progetti di ASP.NET, questo è utile perché può ridurre significativamente la quantità di risorse di sistema usate dagli aggiornamenti incrementali e interrompe minimamente l'utilizzo del sito Web di produzione.

Gli script vengono incorporati negli assembly includendoli in file .resx gestiti (o .resources compilati), che vengono inclusi nell'assembly durante la fase di compilazione. Le risorse vengono quindi rese disponibili all'applicazione script tramite codice generato dal runtime AJAX, tramite attributi a livello di assembly

Convenzioni di denominazione per i file di script incorporati

La gestione degli script di Microsoft AJAX Framework supporta un'ampia gamma di opzioni da usare nella distribuzione e nei test degli script e vengono fornite linee guida per facilitare queste opzioni.

Per facilitare il debug:

Gli script di rilascio (produzione) non devono includere il qualificatore .debug nel nome file. Gli script progettati per il debug devono includere .debug nel nome file.

Per facilitare la localizzazione:

Gli script cultura neutra non devono includere alcun identificatore cultura nel nome del file. Per gli script che contengono risorse localizzate, il codice della lingua ISO deve essere specificato nel nome del file. Ad esempio, es-CO sta per spagnolo, Columbia.

La tabella seguente riepiloga le convenzioni di denominazione dei file con esempi:

Filename Meaning
Script.js Uno script indipendente dalle impostazioni culturali nella versione di rilascio.
Script.debug.js Script versione di debug indipendente dalle impostazioni cultura.
Script.en-US.js Versione di rilascio inglese degli Stati Uniti, codice.
Script.debug.es-CO.js Versione di debug di uno script spagnolo, Colombia.

Procedura dettagliata: Creare uno script localizzato e incorporato

Nota: questa procedura dettagliata richiede l'uso di Visual Studio 2008 perché Visual Web Developer Express non include un modello di progetto per i progetti di libreria di classi.

  1. Creare un nuovo progetto di sito web con le estensioni di ASP.NET AJAX integrate. Creare un altro progetto, un progetto libreria di classi, all'interno della soluzione denominata LocalizingResources.
  2. Aggiungere un file Jscript denominato VerifyDeletion.js al progetto LocalizingResources, nonché ai file di risorse resx denominati DeletionResources.resx ed DeletionResources.es.resx. Il primo conterrà risorse indipendenti dalle impostazioni cultura; quest'ultimo conterrà risorse in lingua spagnola.
  3. Aggiungere il codice seguente a VerifyDeletion.js:
function VerifyDeletion(fileName)
{
 if (confirm(Message.VerifyDelete.replace(/FILENAME/, fileName)))
 {
 Delete(fileName);
 return true;
 }
 return false;
}
function Delete(fileName)
{
 alert (Message.Deleted.replace(/FILENAME/, fileName));
}

Per coloro che non hanno familiarità con la sintassi Regex JavaScript, il testo all'interno di singole barre (nell'esempio precedente, /FILENAME/ è un esempio) indica un oggetto RegExp. MSDN Library contiene un'ampia documentazione di riferimento su JavaScript e le risorse sugli oggetti nativi JavaScript sono disponibili online.

  1. Aggiungere le stringhe di risorse seguenti a DeletionResources.resx:

    VerifyDelete: Sei sicuro di voler eliminare FILENAME?

    Eliminato: FILENAME è stato eliminato.

  2. Aggiungere le stringhe di risorse seguenti a DeletionResources.es.resx:

    VerifyDelete: Est seguro que desee quitar FILENAME?

    Eliminato: FILENAME è stato rimosso.

  3. Aggiungere le righe di codice seguenti al file AssemblyInfo:

[assembly: System.Web.UI.WebResource("LocalizingResources.VerifyDeletion.js",
 "text/javascript")]
[assembly: System.Web.UI.ScriptResource("LocalizingResources.VerifyDeletion.js",
 "LocalizingResources.DeletionResources", "Message")]
  1. Aggiungere riferimenti a System.Web e System.Web.Extensions al progetto LocalizingResources.
  2. Aggiungere un riferimento al progetto LocalizingResources dal progetto Sito Web.
  3. In default.aspx, nel progetto Sito Web aggiornare il controllo ScriptManager con il markup aggiuntivo seguente:
<asp:ScriptManager ID="ScriptManager1" runat="server" EnableScriptLocalization="true">
 <Scripts>
 <asp:ScriptReference Assembly="LocalizingResources" Name="LocalizingResources.VerifyDeletion.js"/>
 </Scripts>
</asp:ScriptManager>
  1. In default.aspx, ovunque nella pagina, includere questo markup.
<asp:Button ID="btnDelete" runat="Server" OnClientClick="VerifyDeletion('a.txt');" Text="Delete" />
  1. Premere F5. Se richiesto, abilitare il debug. Quando la pagina viene caricata, premere il pulsante Elimina. Si noti che viene richiesto in inglese (a meno che il computer non sia impostato per preferire le risorse in lingua spagnola per impostazione predefinita) per la conferma.
  2. Chiudere la finestra del browser e tornare a default.aspx. @Page Nella direttiva di intestazione sostituire auto per Culture e UICulture con es-ES. Premere di nuovo F5 per avviare nuovamente l'applicazione Web nel browser. Questa volta, si noti che viene richiesto di eliminare il file in spagnolo:

Screenshot che mostra una finestra di dialogo di Windows Internet Explorer con una richiesta di lingua spagnola per fare clic su O K.

(Fare clic per visualizzare l'immagine a dimensione intera)

Screenshot che mostra una richiesta di eliminazione del file in spagnolo.

(Fare clic per visualizzare l'immagine a dimensione intera)

Nota che esistono diverse varianti per questa guida. Ad esempio, gli script possono essere registrati con il controllo ScriptManager a livello di codice durante il caricamento della pagina.

Inclusione di una struttura di file script statici

Quando si usano file di script statici per la distribuzione, si perdono alcuni dei vantaggi derivanti dall'uso dello schema di localizzazione .NET intrinseco. Ciò che risulta principalmente evidente è la perdita del tipo automatico generato dall'inclusione dei file di risorse script; nella precedente guida dettagliata, ad esempio, le risorse erano esposte da un tipo generato automaticamente chiamato "Message" dal controllo ScriptManager.

Esistono tuttavia alcuni vantaggi per l'uso di una struttura di file di script statici. Gli aggiornamenti possono essere eseguiti senza ricompilare e ridistribuire gli assembly satellite, e si può utilizzare una struttura di file statica per sovrascrivere script incorporati, al fine di integrare una funzionalità minore che potrebbe non essere stata inclusa con un componente.

Microsoft consiglia di evitare un problema di controllo della versione generando automaticamente le risorse dello script durante la compilazione del progetto. Quando si gestisce una codebase di script estesa, può diventare sempre più difficile assicurarsi che le modifiche al codice vengano riflesse in ogni script localizzato. In alternativa, è possibile gestire semplicemente uno script per la logica e più script di localizzazione, unendo i file durante la compilazione del progetto.

Poiché non sono presenti risorse da includere in modo dichiarativo, è necessario fare riferimento ai file di script statici aggiungendo <asp:ScriptElement> elementi come figlio del <Scripts> tag del controllo ScriptManager o aggiungendo ScriptReference oggetti alla Scripts proprietà del ScriptManager controllo nella pagina in fase di esecuzione.

ScriptManager e il relativo ruolo nella localizzazione

ScriptManager abilita diversi comportamenti automatici per le applicazioni localizzate:

  • Individua automaticamente i file di script in base alle impostazioni e alle convenzioni di denominazione; Ad esempio, carica gli script abilitati per il debug quando è in modalità di debug e carica script localizzati in base alla selezione dell'interfaccia utente del browser.
  • Consente la definizione delle culture, incluse quelle personalizzate.
  • Consente la compressione dei file di script tramite HTTP.
  • Memorizza nella cache gli script per gestire in modo efficiente molte richieste.
  • Aggiunge un livello di indirezione agli script convogliandoli con un URL crittografato.

I riferimenti di script possono essere aggiunti al controllo ScriptManager a livello di codice o tramite markup dichiarativo. Il markup dichiarativo è particolarmente utile quando si usano script incorporati in assembly diversi dal progetto del sito Web stesso, poiché il nome dello script probabilmente non cambierà man mano che vengono inserite revisioni.

Sommario

Man mano che le applicazioni Web crescono per raggiungere un pubblico più ampio, è necessario essere in grado di raggiungere culture e community più ampie diventano fondamentali per un modello aziendale; Le applicazioni Web di e-commerce devono essere in grado di gestire valute straniere, i sistemi di gestione dei contenuti devono essere in grado di presentare non solo il loro contenuto, ma anche i suggerimenti di navigazione e i campi modulo in altre lingue e le aziende devono sapere che questa esigenza è accessibile.

.NET Framework supporta intrinsecamente un ricco framework di localizzazione, utilizzando assembly satellite e file di risorse XML (.resx) per offrire un modo uniforme per cercare stringhe di risorse e immagini. Le ASP.NET AJAX Extensions, tra cui Microsoft AJAX Framework e Microsoft AJAX Script Library, forniscono il supporto per questo modello di programmazione nel codice lato client, consentendo ricerche semplici delle stringhe di risorse. Gli assembly satellite supportano l'inclusione automatica delle risorse script (file .js effettivi) tramite ScriptResource.axd, purché i nomi file seguano uno schema di denominazione specifico. Con questo supporto, le estensioni AJAX ASP.NET semplificano la localizzazione degli script e la globalizzazione delle applicazioni.

Bio

Scott Cate lavora con le tecnologie Web Microsoft dal 1997 ed è il Presidente di myKB.com (www.myKB.com) dove si è specializzato nella scrittura di applicazioni basate su ASP.NET incentrate sulle soluzioni software della Knowledge Base. Scott può essere contattato via e-mail all'indirizzo scott.cate@myKB.com o tramite il suo blog all'indirizzo ScottCate.com