Informazioni sulla localizzazione in ASP.NET AJAX

di Scott Cate

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

Introduzione

La tecnologia ASP.NET Microsoft offre un modello di programmazione basato su oggetti ed 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 ASP.NET 2.0, ma ora 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 mirrorare molti degli schemi di controllo visualizzati nel set di controlli ASP.NET set di controlli sul lato server.

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

Questo white paper si basa sulla versione Beta 2 di Microsoft Visual Studio 2008. Questo white paper presuppone inoltre che l'utente funzioni con Visual Studio 2008, non Visual Web Developer Express e fornirà le 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 linguaggi è 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 a livello globale.

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

Incorporamento di script con assembly satellite

Coerente 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 tradizionale delle risorse nei file binari: qualsiasi localizzazione specificata 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 ASP.NET, questo è vantaggioso 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 in assembly includendoli nei file con estensione resx gestiti (o compilati con estensione resources), inclusi nell'assembly in fase di compilazione. Le risorse vengono quindi rese disponibili per l'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 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 .debug qualificatore nel nome file. Gli script progettati per il debug devono includere .debug nel nome file.

Per facilitare la localizzazione:

Gli script cultura neutrali non devono includere alcun identificatore delle impostazioni cultura nel nome del file. Per gli script che contengono risorse localizzate, il codice del linguaggio 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:

Nome file Significato
Script.js Script cultura-neutrale della versione di rilascio.
Script.debug.js Script cultura di debug-neutrale.
Script.en-US.js Versione inglese, Stati Uniti script.
Script.debug.es-CO.js Uno script spagnolo della versione di debug, Columbia.

Procedura dettagliata: Creare uno script localizzato, incorporato

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

  1. Creare un nuovo progetto sito Web con ASP.NET estensioni 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é file di risorse con estensione resx denominati DeletionResources.resx e DeletionResources.es.resx. L'ex conterrà risorse cultura-neutrali; 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 di inoltro (nell'esempio precedente , /FILENAME/ è un esempio) indica un oggetto RegExp. Msdn Library contiene un riferimento JavaScript completo e le risorse in oggetti nativi JavaScript sono disponibili online.

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

    VerificaDelete: eliminare NOME FILE?

    Eliminato: NOMEFILE è stato eliminato.

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

    VerifyDelete: Est seguro que desee quitar FILENAME?

    Eliminato: FILENAME se ha quitado.

  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 al progetto 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 su preferisce 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 intestazione sostituire automaticamente per Impostazioni cultura 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 full-size)

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

(Fare clic per visualizzare l'immagine full-size)

Si noti che esistono diverse varianti per questa procedura dettagliata. 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 di script statici

Quando si usano file di script statici per la distribuzione, si perdono alcuni dei vantaggi dell'uso dello schema di localizzazione .NET intrinseco. È principalmente visibile che si perde il tipo automatico generato dall'inclusione di file di risorse di script; nella procedura dettagliata precedente, ad esempio, le risorse sono state esposte da un tipo generato automaticamente denominato Message dal controllo ScriptManager.

Esistono tuttavia alcuni vantaggi per l'uso di una struttura di file di script statici. Aggiornamenti può essere eseguito senza ricompilazione e ridistribuzione di assembly satellite e l'uso di una struttura di file statica può essere eseguita anche per eseguire l'override dello script incorporato, per integrare una parte secondaria di funzionalità che potrebbe non essere stata fornita 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 vasta base di codice script, può diventare sempre più difficile assicurarsi che le modifiche del codice vengano riflesse in ogni script localizzato. In alternativa, è possibile gestire semplicemente uno script di logica e più script di localizzazione, unire i file durante la compilazione del progetto.

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

ScriptManager e il relativo ruolo nella localizzazione

ScriptManager consente 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 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 impostazioni cultura, incluse le impostazioni cultura 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 indirettità agli script eseguendo il piping tramite un URL crittografato.

È possibile aggiungere riferimenti script 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é è probabile che il nome dello script non cambierà man mano che viene eseguito il push delle revisioni.

Riepilogo

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 di business; 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 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 framework di localizzazione avanzato, usando assembly satellite e file di risorse XML (con estensione resx) per presentare un modo uniforme per cercare stringhe e immagini di risorse. Le estensioni ASP.NET AJAX, 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 di script (file .js effettivi) tramite ScriptResource.axd purché i nomi file seguano uno schema di denominazione specificato. Con questo supporto, le estensioni ASP.NET AJAX semplificano la localizzazione degli script e la globalizzazione delle applicazioni.

Biografia

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