Come caricare le risorse stringa (HTML)
[ Questo articolo è rivolto agli sviluppatori per Windows 8.x e Windows Phone 8.x che realizzano app di Windows Runtime. Gli sviluppatori che usano Windows 10 possono vedere Documentazione aggiornata ]
Puoi caricare le risorse stringa da oggetti come file di risorse, librerie e controlli oltre a manifesti e pacchetti delle app.
Caricamento di stringhe da file di risorse
Le risorse stringa vengono create in file di risorse e vi viene fatto riferimento usando identificatori di risorse. Per un'introduzione di base al caricamento di risorse stringa, vedi Guida introduttiva: Uso di risorse stringa.
La maggior parte delle app richiede solo un singolo file di risorse per lingua (<language>/Resources.resjson) e può fare riferimento alle risorse usando un percorso relativo delle chiavi in quel file (ad esempio, /String1
). In alcune applicazioni è tuttavia appropriato separare le risorse in più file di risorse per fornire la separazione dei componenti.
Ad esempio:
Nome del file:
Strings/en-US/Errors.resjson
Riferimento dal markup:
<span data-win-res="{textContent: '/Errors/AlreadyRegistered'}"></span>
Riferimento dal codice:
WinJS.Resources.getString('/Errors/AlreadyRegistered');
L'identificatore di risorsa è nel formato **/ResourceFileName/**StringName. Nota che il nome di file di risorse non include l'estensione o il percorso della cartella. Tutti i nomi di file di risorse devono quindi essere univoci in un componente o un oggetto.
Caricamento di stringhe da librerie e controlli
Le app hanno spesso più componenti o hanno dipendenze come le librerie di classi portatili .NET, altre librerie di classi compatibili e le librerie di controlli.
Quando possibile, controlli e librerie dovrebbero tentare di ridurre il numero di risorse e fare affidamento sull'app per fornirle. Quando una libreria non deve fornire risorse, dovrebbe consentire alle app di sostituire quelle risorse come input. Questo approccio potrebbe essere necessario se la libreria non ha la stessa capacità di localizzazione dell'app che la usa.
Ad esempio:
var rating = new WinJS.UI.RatingsControl(el, {label: 'Please Rate', image: 'images/star.png'});
Il controllo dovrebbe visualizzare le stringhe personalizzate passate in esame esattamente come indicato e, ove possibile, lasciare gestire la localizzazione all'app.
var control = new Control(el, {commands: [
{label: R.getString('Reply')},
{label: R.getString('ReplyAll')
]});
I componenti o i file di libreria vengono solitamente aggiunti in una sottocartella del pacchetto in cui sono inclusi durante il processo di compilazione, in modo analogo alle relative risorse stringa. L'identificatore di risorse assume in genere la forma seguente:
ClassLibraryOrAssemblyName**/ResourceFileName/**StringName
A livello di programmazione, le librerie possono anche recuperare ResourceLoader per le proprie risorse. Ad esempio, il seguente codice illustra come una libreria può ottenere ResourceLoader per il proprio file di risorse:
var resources = Windows.ApplicationModel.Resources;
var RL = new resources.ResourceLoader('ContosoControl/Resources');
RL.getString('loadingStr'); // which came from ContosoControl's Resources
Caricamento di stringhe da altri pacchetti
Le risorse per ogni pacchetto dell'app vengono gestite separatamente e sono accessibili tramite l'oggetto ResourceMap di livello superiore distinto a cui è possibile accedere dall'oggetto ResourceManager corrente. All'interno di ogni pacchetto vari componenti possono avere propri valori Subtree di ResourceMap.
I pacchetti di framework possono acceder alle proprie risorse con più URI di identificatori di risorse assoluti:
Per altri dettagli sugli URI ms-resource, vedi Schemi URI.
Caricamento di stringhe da controlli JavaScript
I controlli JavaScript che forniscono stringhe predefinite dovrebbero utilizzare WinJS.Resources.getString per recuperare le proprie stringhe.
I documenti HTML caricati nel contesto Web (con ms-app-web:) non hanno accesso alle API Windows Runtime. Di conseguenza, nel codice JavaScript includi i controlli JavaScript scritti per l'uso di WinJS.Resources.getString. Nel contesto Web, WinJS.Resources.getString esegue il fallback per cercare l'identificatore specificato come proprietà di un oggetto stringa globale.
var strings = { 'String1' : 'Hello' };
WinJS.Resources.getString('String1');
Puoi anche eseguire l'override di WinJS.Resources.getString per recuperare risorse da una posizione diversa.
WinJS.Resources.getString = function(id){
return getStringFromOtherService(id);
}
Caricamento di stringhe dal manifesto dell'app
Tutte le stringhe e i logo visualizzabili nel manifesto sono localizzabili. I logo possono anche essere personalizzati per quanto riguarda la scala e la modalità a contrasto elevato. Al posto di una stringa hardcoded possono essere aggiunti riferimenti a una stringa, inserendo un URI specificato dallo schema ms-resource: nei dati del manifesto. Questa operazione in genere viene eseguita nell'interfaccia utente a schede di Visual Studio per modificare appxmanifest. Ad esempio, ms-resource:String1
fa riferimento a una stringa denominata String1
nel file di risorse Resources.resw, mentre ms-resource:/ManifestStrings/Shortname
fa riferimento a una stringa denominata Shortname
nel file di risorse ManifestStrings.resw.
Caricamento di stringhe per una lingua o un contesto specifico
L'oggetto predefinito ResourceContext, ottenuto da ResourceManager, rappresenta lo stato corrente con cui vengono confrontate le risorse. L'oggetto ResourceContext tutti i vari valori di qualificatore per l'utente e il computer correnti. Anche se puoi eseguire l'override di ogni qualificatore, non è consigliato. La maggior parte dei qualificatori dispone di un provider di dati di sistema, che in alcuni casi viene modificato nel modo migliore tramite un'API distinta (ovvero, PrimaryLanguageOverride),oppure lasciato invariato.
Vedi Come denominare risorse usando qualificatori per informazioni dettagliate sui diversi qualificatori.
ResourceManager mantiene l'oggetto del contesto predefinito rispetto alle ricerche di risorse effettuate. In alcuni casi è essere utile specificare in modo esplicito la lingua, la scala o un altro qualificatore del contesto quando l'app carica le risorse. Ad esempio, un'app potrebbe consentire a un utente di selezionare una lingua alternativa per le descrizioni comando o i messaggi di errore. Le ricerche possono specificare il proprio oggetto di contesto di cui è stato eseguito l'override in modo esplicito, per influire sulle risorse scelte. Per specificare un contesto esplicito, dove la proprietà Languages viene deliberatamente sottoposta a override:
var rcns = Windows.ApplicationModel.Resources.Core;
var context = new rcns.ResourceContext(); // deliberately not using getForCurrentView()
context.languages = new Array('fr-fr');
var resourceMap = rcns.ResourceManager.current.mainResourceMap.getSubtree('Resources');
var str = resourceMap.getValue('string1', context).ValueAsString;
Puoi usare anche un'altra tecnica che consiste nel chiamare ResourceContext.SetGlobalQualifierContext prima di chiamare ResourceContext.GetForCurrentView. Per lo scenario della lingua, dovresti impostare il qualificatore language su un nuovo valore. La differenza, se si esegue questa operazione, è che il qualificatore e la modifica del contesto ora vengono applicati a tutte le ricerche di risorse, non solo allo specifico ResourceContext che hai creato per la singola chiamata a GetValue. Vedi anche ApplicationLanguages.PrimaryLanguageOverride.
Eventi e modifiche del contesto
Un'app potrebbe essere ancora in esecuzione quando il sistema cambia. In questo caso, verrà usato un set di qualificatori diversi. Una di queste modifiche è la conseguenza dell'attivazione del contrasto elevato da parte dell'utente. Diverse modifiche di sistema richiamano eventi sull'oggetto ResourceContext.
In JavaScript, il modo più semplice per ascoltare questi eventi è tramite il metodo addEventListener:
WinJS.Resources.addEventListener('contextchanged', refresh, false);
Una volta rilevato l'evento, le app possono rielaborare il documento, in modo da caricare le risorse corrette.
function refresh(){
WinJS.Resources.processAll(); // Refetch string resources.
}
La rielaborazione delle risorse può causare la reimpostazione dei valori associati ai dati, in quanto la nuova risorsa viene applicata direttamente alla proprietà dell'elemento. Se la risorsa contiene slot di associazione dati, assicurati di riassociarli durante la rielaborazione.
Argomenti correlati
Windows.ApplicationModel.Resources.ResourceLoader
Windows.ApplicationModel.Resources.Core.ResourceContext
Windows.ApplicationModel.Resources.Core.ResourceManager
Windows.ApplicationModel.Resources.Core.ResourceMap
Windows.Globalization.ApplicationPreferences.PrimaryLanguageOverride
Caratteristiche e restrizioni in base al contesto