Comprendere le lingue del profilo utente e lingue del manifesto dell'app

Un utente Windows può utilizzare Impostazioni>Ora & Lingua>Regione & lingua per configurare un elenco ordinato di lingue di visualizzazione preferite o solo una singola lingua di visualizzazione preferita. Una lingua può avere una variante regionale. Ad esempio, è possibile selezionare lo spagnolo parlato in Spagna, spagnolo parlato in Messico, spagnolo parlato nel Stati Uniti, tra gli altri.

Anche in Impostazioni>Ora & Lingua>Regione & lingua, l'utente può specificare la propria posizione (nota come regione) nel mondo. Si noti che l'impostazione lingua di visualizzazione (e variante regionale) non è un determinatore dell'impostazione dell'area e viceversa. Ad esempio, un utente potrebbe attualmente vivere in Francia, ma scegliere una lingua di visualizzazione di Windows preferita di Español (México).

Per le app di Windows, una lingua è rappresentata come tag di lingua BCP-47. Ad esempio, il tag di lingua BCP-47 "en-US" corrisponde all'inglese (Stati Uniti) in Impostazioni. Le API di Windows Runtime appropriate accettano e restituiscono rappresentazioni di stringa di tag di lingua BCP-47.

Vedere anche il registro dei sottotag della lingua IANA.

Le tre sezioni seguenti definiscono i termini "elenco di lingue del profilo utente", "elenco di lingue del manifesto dell'app" e "elenco di lingue di runtime dell'app". Questi termini verranno usati in questo argomento e in altri argomenti in questa area delle funzionalità, quindi è importante conoscerne il significato.

Elenco di lingue del profilo utente

L'elenco delle lingue del profilo utente è il nome dell'elenco configurato dall'utente in Impostazioni>Ora & Lingua>Regione & lingua>Lingue. Nel codice è possibile usare la proprietà GlobalizationPreferences.Languages per accedere all'elenco di lingue del profilo utente come elenco di stringhe di sola lettura, dove ogni stringa è un singolo tag di lingua BCP-47, ad esempio "en-US" o "ja-JP".

    IReadOnlyList<string> userLanguages = Windows.System.UserProfile.GlobalizationPreferences.Languages;

Elenco di lingue del manifesto dell'app

L'elenco delle lingue del manifesto dell'app è l'elenco delle lingue per cui l'app dichiara (o dichiarerà) il supporto. Questo elenco cresce man mano che si procede con l'avanzamento dell'app nel ciclo di vita di sviluppo fino alla localizzazione.

L'elenco viene determinato in fase di compilazione, ma sono disponibili due opzioni per controllare esattamente come accade. Un'opzione consiste nel consentire a Visual Studio di determinare l'elenco dei file nel progetto. A tale scopo, impostare innanzitutto la Lingua predefinita nella scheda dell'Applicazione nel file di origine manifesto del pacchetto dell'app (Package.appxmanifest). Verificare quindi che lo stesso file contenga questa configurazione (che esegue per impostazione predefinita).

  <Resources>
    <Resource Language="x-generate" />
  </Resources>

Ogni volta che Visual Studio produce il file manifesto del pacchetto dell'app compilato (AppxManifest.xml), espande tale singolo elemento Resource nel file di origine in un'unione di tutti i qualificatori di lingua trovati nel progetto (consultare Adattare le risorse per lingua, scalabilità, contrasto elevato e altri qualificatori). Ad esempio, se si è iniziato a localizzare e si dispone di risorse stringa, immagine e/o file i cui nomi di cartella o file includono "en-US", "ja-JP" e "fr-FR", il file compilato AppxManifest.xml conterrà quanto segue (la prima voce nell'elenco è la lingua predefinita impostata).

  <Resources>
    <Resource Language="EN-US" />
    <Resource Language="JA-JP" />
    <Resource Language="FR-FR" />
  </Resources>

L'altra opzione consiste nel sostituire il singolo elemento "x-generate" <Resource> nel file di origine del manifesto del pacchetto dell'app (Package.appxmanifest) con l'elenco espanso di elementi <Resource> (facendo attenzione a elencare prima la lingua predefinita). Questa opzione comporta un maggior lavoro di manutenzione, ma potrebbe essere un'opzione appropriata se si usa un sistema di compilazione personalizzato.

Per iniziare, l'elenco di lingue del manifesto dell'app conterrà una sola lingua. Probabilmente en-US. Ma alla fine, quando si configura manualmente il manifesto o quando si aggiungono risorse tradotte al progetto, l'elenco aumenta.

Quando l'app si trova in Microsoft Store, le lingue nell'elenco delle lingue del manifesto dell'app sono quelle visualizzate ai clienti. Per un elenco dei tag di lingua BCP-47 supportati in modo specifico da Microsoft Store, consultare Lingue supportate.

Nel codice è possibile usare la proprietà ApplicationLanguages.ManifestLanguages per accedere all'elenco di lingue del manifesto dell'app come elenco di stringhe di sola lettura, dove ogni stringa è un singolo tag di lingua BCP-47.

    IReadOnlyList<string> userLanguages = Windows.Globalization.ApplicationLanguages.ManifestLanguages;

Elenco dei lingue di runtime dell'app

Il terzo elenco di lingue di interesse è l'intersezione tra i due elenchi appena descritti. In fase di esecuzione, l'elenco delle lingue per cui l'app ha dichiarato il supporto (elenco di lingue del manifesto dell'app) viene confrontato con l'elenco di lingue per cui l'utente ha dichiarato una preferenza (elenco di lingue del profilo utente). L'elenco di lingue di runtime dell'app è impostato su questa intersezione (se l'intersezione non è vuota) o solo sulla lingua predefinita dell'app (se l'intersezione è vuota).

In particolare, l'elenco di lingue di runtime dell'app è costituito da questi elementi.

  1. Sostituzione della lingua principale (Facoltativo). Il PrimaryLanguageOverride è un'impostazione di sostituzione semplice per le app che offrono agli utenti la propria scelta di lingua indipendente o le app che hanno un motivo sicuro per ignorare le scelte di lingua predefinite. Per altre informazioni, consultare Risorse dell'applicazione ed esempio di localizzazione.
  2. Lingue dell'utente supportate dall'app. Questo è l'elenco di lingue del profilo utente filtrato in base all'elenco di lingue del manifesto dell'app. Il filtro delle lingue dell'utente in base a quelle supportate dall'app mantiene la coerenza tra kit di sviluppo software (SDK), librerie di classi, pacchetti di framework dipendenti e l'app.
  3. Se 1 e 2 sono vuoti, la lingua predefinita o la prima lingua supportata dall'app. Se l'elenco di lingue del profilo utente non contiene lingue supportate dall'app, la lingua di runtime dell'app è la prima lingua supportata dall'app.

Nel codice è possibile usare la proprietà ResourceContext.QualifierValues per accedere all'elenco di lingue di runtime dell'app sotto forma di stringa contenente un elenco delimitato da punto e virgola di tag di lingua BCP-47.

    string runtimeLanguages = Windows.ApplicationModel.Resources.Core.ResourceContext.GetForCurrentView().QualifierValues["Language"];

È anche possibile accedervi come elenco di stringhe di sola lettura, ognuna contenente un singolo tag di lingua BCP-47. È possibile utilizzare la proprietà ResourceContext.Languages o la proprietà ApplicationLanguages.Languages per eseguire questa operazione.

    IReadOnlyList<string> runtimeLanguages = Windows.ApplicationModel.Resources.Core.ResourceContext.GetForCurrentView().Languages;

    runtimeLanguages = Windows.Globalization.ApplicationLanguages.Languages;

L'elenco delle lingue di runtime dell'app determina le risorse caricate da Windows per l'app e anche le lingue usate per formattare date, ore, numeri e altri componenti. Vedere Globalizzare i formati di data, ora e numeri.

Nota Se la lingua del profilo utente e la lingua del manifesto dell'app sono varianti regionali l'una dell'altra, la variante regionale dell'utente viene usata come lingua di runtime dell'app. Ad esempio, se l'utente preferisce en-GB e l'app supporta en-US, la lingua di runtime dell'app è en-GB. In questo modo si garantisce che le date, le ore e i numeri siano formattati più attentamente alle aspettative dell'utente (en-GB), ma le risorse localizzate vengono ancora caricate (a causa della corrispondenza della lingua) nella lingua supportata dell'app (en-US).

Qualificare i file di risorse con la propria lingua

Assegnare un nome ai file di risorse o alle relative cartelle, con qualificatori di risorse di lingua. Per altre informazioni sui qualificatori di risorse, consultare Personalizzare le risorse per la lingua, la scalabilità, il contrasto elevato e altri qualificatori. Un file di risorse può essere un'immagine (o un altro asset) o può essere un file del contenitore di risorse, ad esempio un file con estensione .resw che contiene stringhe di testo.

Nota Anche le risorse nella lingua predefinita dell'app devono specificare il qualificatore di lingua. Ad esempio, se la lingua predefinita dell'app è inglese (Stati Uniti), qualificare gli asset come \Assets\Images\en-US\logo.png.

  • Windows esegue la corrispondenza complessa, incluse le varianti internazionali, ad esempio en-US e en-GB. Includere quindi il sotto-tag dell'area in base alle esigenze. Consultare Come viene eseguita la corrispondenza dei tag di lingua dal Sistema gestione risorse.
  • Specificare un sotto-tag script di lingue nel qualificatore quando non è definito alcun valore Suppress-Script per la lingua. Ad esempio, invece di zh-CN o zh-TW, usare zh-Hant, zh-Hant-TW o zh-Hans (per altri dettagli, consultare il registro dei sottotag della lingua IANA).
  • Per le lingue con un singolo dialetto standard, non è necessario includere il qualificatore di area. Ad esempio, usare ja invece di ja-JP.
  • Alcuni strumenti e altri componenti, ad esempio i traduttori di computer, potrebbero trovare tag linguistici specifici, ad esempio informazioni sul dialetto regionale, utili per comprendere i dati.

Non tutte le risorse devono essere localizzate

La localizzazione potrebbe non essere necessaria per tutte le risorse.

  • Verificare almeno che tutte le risorse sussistano nella lingua predefinita.
  • Un subset di alcune risorse potrebbe essere sufficiente per una lingua strettamente correlata (localizzazione parziale). Ad esempio, si potrebbe non localizzare tutta l'interfaccia utente dell'app in catalano se l'app ha un set completo di risorse in spagnolo. Per gli utenti che parlano catalano e spagnolo, le risorse che non sono disponibili in catalano appaiono in spagnolo.
  • Alcune risorse potrebbero richiedere eccezioni per lingue specifiche, mentre la maggior parte delle altre risorse viene mappata a una risorsa comune. In questo caso, contrassegnare la risorsa che deve essere usata per tutte le lingue con il tag di lingua indeterminato 'und'. Windows interpreta il tag di lingua "und" come carattere jolly (simile a "*") in quanto corrisponde alla lingua principale dell'app dopo qualsiasi altra corrispondenza specifica. Ad esempio, se alcune risorse sono diverse per il finlandese, ma le altre risorse sono uguali per tutte le lingue, la risorsa finlandese deve essere contrassegnata con il tag di lingua finlandese e il resto deve essere contrassegnato con "und".
  • Per le risorse basate su uno script linguistico, ad esempio un tipo di carattere o un'altezza di testo, usare il tag di lingua non determinato con uno script specificato: "und-script<>". Ad esempio, per i tipi di carattere latini usare und-Latn\\fonts.css e per i tipi di carattere cirillico usare und-Cryl\\fonts.css.

Imposta l'intestazione della richiesta HTTP Accept-Language

Valutare se i servizi Web chiamati hanno la stessa estensione della localizzazione dell'app. Le richieste HTTP effettuate dalle app di Windows in richieste Web tipiche e XMLHttpRequest (XHR), usano l'intestazione standard della richiesta HTTP Accept-Language. Per impostazione predefinita, l'intestazione HTTP è impostata sull'elenco di lingue del profilo utente. Ogni lingua nell'elenco viene ulteriormente espansa per includere neutrali della lingua e una ponderazione (q). Ad esempio, l'elenco di lingue di un utente fr-FR e en-US restituisce un'intestazione di richiesta HTTP Accept-Language di fr-FR, fr, en-US, en ("fr-FR,fr;q=0.8,en-US;q=0.5,en;q=0.3"). Tuttavia, se l'app meteo (ad esempio) visualizza un'interfaccia utente in francese (Francia), ma la lingua principale dell'utente nell'elenco delle preferenze è il tedesco, sarà necessario richiedere in modo esplicito francese (Francia) dal servizio per mantenere la coerenza all'interno dell'app.

API nello spazio dei nomi Windows.Globalization

In genere, le API nello spazio dei nomi Windows.Globalization usano l'elenco di lingue di runtime dell'app per determinare la lingua. Se nessuna delle lingue ha un formato corrispondente, vengono usate le impostazioni locali dell'utente. Si tratta delle stesse impostazioni locali usate per l'orologio di sistema. Le impostazioni locali dell'utente sono disponibili da Impostazioni>Ora & lingua>Regione & lingua>Impostazioni aggiuntive di data, ora & regione>Regione: modifica i formati di data, ora o numero. Le API Windows.Globalization presentano anche sostituzioni per specificare un elenco di lingue da usare, anziché l'elenco di lingue di runtime dell'app.

Usando la classe Lingua, è possibile esaminare i dettagli relativi a una determinata lingua, ad esempio lo script della lingua, il nome visualizzato e il nome nativo.

Usare l'area geografica quando appropriato

In Impostazioni>Ora & lingua>Regione & lingua>Paese o regione, l'utente può specificare la propria posizione nel mondo. È possibile usare queste impostazioni, anziché la lingua, per scegliere il contenuto da visualizzare all'utente. Ad esempio, per impostazione predefinita, un'app di notizie potrebbe visualizzare il contenuto da questa area.

Nel codice è possibile accedere a questa impostazione usando la proprietà GlobalizationPreferences.HomeGeographicRegion.

Usando la classe GeographicRegion, è possibile esaminare i dettagli relativi a una determinata area, ad esempio il nome visualizzato, il nome nativo e le valute in uso.

Esempi

La tabella seguente contiene esempi di ciò che l'utente visualizzerebbe nell'interfaccia utente dell'app in varie impostazioni di lingua e area geografica.

Elenco di lingue del manifesto dell'app Elenco di lingue del profilo utente Sostituzione della lingua principale dell'app (facoltativo) Elenco dei lingue di runtime dell'app Cosa l'utente vede nell'app
Inglese (GB) (impostazione predefinita); tedesco (Germania) Inglese (GB) Nessuno Inglese (GB) Interfaccia utente: inglese (GB)
Date/ore/numeri: inglese (GB)
Tedesco (Germania) (impostazione predefinita); francese (Francia); italiano (Italia) Francese (Austria) Nessuno Francese (Austria) Interfaccia utente: francese (Francia) (fallback da francese (Austria))
Date/ore/numeri: francese (Austria)
Inglese (Stati Uniti) (impostazione predefinita); francese (Francia); inglese (GB) Inglese (Canada); francese (Canada) Nessuno Inglese (Canada); francese (Canada) Interfaccia utente: inglese (Stati Uniti) (fallback dall'inglese (Canada))
Date/ore/numeri: inglese (Canada)
Spagnolo (Spagna) (impostazione predefinita); spagnolo (Messico); spagnolo (America Latina); portoghese (Brasile) Inglese (Stati Uniti) Nessuno Spagnolo (Spagna) Interfaccia utente: spagnolo (Spagna) (usa l'impostazione predefinita perché non è disponibile alcun fallback per l'inglese)
Date/ore/numeri spagnolo (Spagna)
Catalano (impostazione predefinita); spagnolo (Spagna); francese (Francia) Catalano; francese (Francia) Nessuno Catalano; francese (Francia) Interfaccia utente: per lo più catalano e alcuni francesi (Francia) perché non tutte le stringhe sono in catalano
Date/ore/numeri: catalano
Inglese (GB) (impostazione predefinita); francese (Francia); tedesco (Germania) Tedesco (Germania); inglese (GB) Inglese (GB) (scelto dall'utente nell'interfaccia utente dell'app) Inglese (GB); tedesco (Germania) Interfaccia utente: inglese (GB) (sostituzione lingua)
Date/ore/numeri inglese (GB)

Nota

Per un elenco dei codici paese/area geografica standard usati da Microsoft, consultare Elenco ufficiale dei paesi/regioni.

API importanti

Esempi