Cenni preliminari sulla globalizzazione e localizzazione WPF

Aggiornamento: novembre 2007

Quando si limita la disponibilità di un prodotto a una sola lingua, si limita la potenziale clientela a una frazione dei 6,5 miliardi di persone che costituiscono la popolazione mondiale. Se si desidera che le applicazioni abbiano un pubblico globale, una localizzazione del prodotto che sia conveniente in termini di costi è uno dei metodi migliori e più economici per raggiungere una maggiore clientela.

In questo argomento vengono presentate la globalizzazione e la localizzazione in Windows Presentation Foundation (WPF). La globalizzazione consiste nella progettazione e nello sviluppo di applicazioni eseguibili a livello internazionale. Supporta ad esempio interfacce utente localizzate e dati internazionali per utenti che utilizzano impostazioni cultura diverse. WPF fornisce funzionalità di progettazione globalizzate, inclusi il layout automatico, gli assembly satellite, nonché attributi e commenti localizzati.

La localizzazione consiste nella traduzione delle risorse dell'applicazione in versioni appositamente localizzate per le impostazioni cultura supportate dall'applicazione. La localizzazione in WPF richiede l'utilizzo delle API nello spazio dei nomi System.Windows.Markup.Localizer. Queste API vengono utilizzate con lo strumento della riga di comando Esempio di strumento LocBaml. Per informazioni sulla compilazione e l'utilizzo di LocBaml, vedere Procedura: localizzare un'applicazione.

Nel presente argomento sono contenute le seguenti sezioni.

  • Procedure consigliate per la globalizzazione e la localizzazione in WPF
  • Localizzare un'applicazione WPF
  • Esempi di localizzazione WPF

Procedure consigliate per la globalizzazione e la localizzazione in WPF

Per sfruttare al meglio le funzionalità di globalizzazione e localizzazione integrate in WPF, seguire i suggerimenti relativi alla progettazione e localizzazione dell'interfaccia utente forniti in questa sezione.

Procedure consigliate per la progettazione dell'interfaccia utente in WPF

In caso di progettazione di un'interfaccia utente basata su WPF, si consiglia di implementare le seguenti procedure consigliate:

  • Scrivere l'interfaccia utente in XAML; evitare di creare l'interfaccia utente tramite codice. Quando si crea l'interfaccia utente mediante XAML, la si espone tramite API di localizzazione incorporate.

  • Evitare di utilizzare posizioni assolute e dimensioni fisse per disporre il contenuto; utilizzare invece il ridimensionamento relativo o automatico.

    • Utilizzare SizeToContent e mantenere le larghezze e le altezze impostate su Auto.

    • Evitare di utilizzare Canvas per creare il layout dell'interfaccia utente.

    • Utilizzare Grid e la funzionalità di condivisione delle dimensioni.

  • Fornire uno spazio aggiuntivo nei margini poiché il testo localizzato spesso richiede maggiore spazio. Lo spazio aggiuntivo potrà contenere eventuali caratteri sporgenti.

  • Attivare TextWrapping in TextBlock per evitare che il testo venga ritagliato.

  • Impostare l'attributo xml:lang. Questo attributo descrive le impostazioni cultura di un elemento specifico e dei relativi elementi figlio. Il valore di questa proprietà modifica il comportamento di diverse funzionalità in WPF. Ad esempio, modifica il comportamento di sillabazione, controllo ortografico, sostituzione dei numeri, visualizzazione di lingue con alfabeti non latini e fallback dei tipi di carattere. Per ulteriori informazioni sull'impostazione di Gestione di xml:lang in XAML, vedere Globalizzazione per Windows Presentation Foundation.

  • Creare un tipo di carattere composito personalizzato che consenta di ottenere un migliore controllo dei tipi di carattere utilizzati per le diverse lingue. Per impostazione predefinita, WPF utilizza il tipo di carattere GlobalUserInterface.composite nella directory Windows\Fonts.

  • Quando si creano applicazioni per l'esplorazione che potrebbero essere localizzate in impostazioni cultura con formato di testo da destra a sinistra, impostare in modo esplicito FlowDirection per ogni pagina per fare in modo che la pagina non erediti FlowDirection da NavigationWindow.

  • Quando si creano applicazioni per l'esplorazione autonome ospitate al di fuori di un browser, impostare StartupUri per l'applicazione iniziale su un oggetto NavigationWindow (ad esempio, <Application StartupUri="NavigationWindow.xaml">) anziché su una pagina. Questo consente di modificare FlowDirection per la finestra e la barra di spostamento. Per ulteriori informazioni e un esempio, vedere Esempio di globalizzazione di una home page.

Procedure consigliate per la localizzazione in WPF

In caso di localizzazione di applicazioni basate su WPF, si consiglia di implementare le seguenti procedure consigliate:

  • Utilizzare i commenti di localizzazione per fornire un contesto aggiuntivo ai localizzatori.

  • Utilizzare gli attributi di localizzazione per controllare la localizzazione anziché omettere in maniera selettiva le proprietà Uid negli elementi. Per ulteriori informazioni, vedere Attributi e commenti di localizzazione.

  • Utilizzare msbuild /t:updateuid e /t:checkuid per aggiungere e controllare le proprietà Uid nel codice XAML. Utilizzare le proprietà Uid per tenere traccia delle modifiche intercorse tra sviluppo e localizzazione. Le proprietà Uid risultano utili per la localizzazione delle nuove modifiche apportate durante lo sviluppo. L'aggiunta manuale di proprietà Uid a un'interfaccia utente risulta in genere una procedura monotona e meno accurata.

    • Non modificare le proprietà Uid una volta iniziata la localizzazione.

    • Non utilizzare proprietà Uid doppie. Tenere a mente questo suggerimento quando si utilizza il comando copia e incolla.

    • Impostare il percorso UltimateResourceFallback nel file AssemblyInfo.* per specificare la lingua di fallback appropriata, ad esempio [assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)].

      Se si decide di includere la lingua di origine nell'assembly principale omettendo il tag <UICulture> nel file di progetto, impostare il percorso UltimateResourceFallback come assembly principale anziché il satellite (ad esempio, [assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.MainAssembly)]).

Localizzare un'applicazione WPF

Esistono diverse opzioni utilizzabili per localizzare un'applicazione WPF. Ad esempio, è possibile associare le risorse localizzabili nell'applicazione a un file XML, archiviare il testo localizzabile in tabelle RESX o fare in modo che il localizzatore utilizzi file Extensible Application Markup Language (XAML). In questa sezione viene descritto un flusso di lavoro di localizzazione che utilizza XAML binario (BAML, Binary XAML), il quale fornisce diversi vantaggi:

  • È possibile effettuare la localizzazione dopo la compilazione.

  • È possibile effettuare l'aggiornamento a una versione più recente di BAML con localizzazioni da una versione precedente di BAML, il che significa sviluppare e localizzare contemporaneamente.

  • È possibile convalidare elementi di origine e semantica originali in fase di compilazione, poiché BAML è la forma compilata di XAML.

Processo di compilazione per la localizzazione

In caso di sviluppo di un'applicazione WPF, il processo di compilazione per la localizzazione è il seguente:

  • Lo sviluppatore crea e globalizza l'applicazione WPF. Nel file di progetto, lo sviluppatore imposta <UICulture>en-US</UICulture> in modo tale che, quando l'applicazione viene compilata, venga generato un assembly principale indipendente dalla lingua. Questo assembly possiede un file .resources.dll satellite contenente tutte le risorse localizzabili. In alternativa è possibile mantenere la lingua di origine nell'assembly principale, dal momento che le API di localizzazione supportano l'estrazione da tale assembly.

  • Quando il file viene compilato nella build, XAML viene convertito in BAML. Il file MyDialog.exe indipendente dalle impostazioni cultura e il file MyDialog.resources.dll dipendente dalle impostazioni cultura (inglese) vengono distribuiti ai clienti di lingua inglese.

Flusso di lavoro per la localizzazione

Il processo di localizzazione ha inizio una volta terminata la compilazione del file MyDialog.resources.dll non localizzato. Gli elementi e le proprietà dell'interfaccia utente nel codice XAML originale vengono estratti da BAML in coppie chiave/valore utilizzando le API contenute in System.Windows.Markup.Localizer. I localizzatori utilizzano le coppie chiave/valore per localizzare l'applicazione. Una volta completata la localizzazione, sarà possibile generare un nuovo file .resource.dll a partire dai nuovi valori.

Le chiavi delle coppie chiave/valore sono x:Uid inseriti dallo sviluppatore nel codice XAML originale. Questi x:Uid risultano utili all'API per tenere traccia delle modifiche apportate dallo sviluppatore durante la localizzazione, nonché per unire tali modifiche. Ad esempio, se lo sviluppatore modifica l'interfaccia utente quando il localizzatore ha già avviato il processo di localizzazione, è possibile unire la modifica apportata durante lo sviluppo con la versione di localizzazione già completata, così che il lavoro di traduzione effettuato andrà perso soltanto in minima parte.

Nel grafico che segue viene illustrato un flusso di lavoro di localizzazione tipico basato su BAML. Il grafico presuppone che lo sviluppatore scriva l'applicazione in inglese. Lo sviluppatore crea e globalizza l'applicazione WPF. Nel file di progetto, lo sviluppatore imposta <UICulture>en-US</UICulture> in modo tale che, in fase di compilazione, venga generato un assembly principale indipendente dalla lingua con un file .resources.dll satellite contenente tutte le risorse localizzabili. In alternativa è possibile mantenere la lingua di origine nell'assembly principale, dal momento che le API di localizzazione WPF supportano l'estrazione da tale assembly. Terminato il processo di compilazione, XAML viene compilato in BAML. Il file MyDialog.exe.resources.dll indipendente dalle impostazioni cultura viene distribuito ai clienti di lingua inglese.

Flusso di lavoro della localizzazioneFlusso di lavoro non localizzato

Il processo di localizzazione ha inizio una volta compilato il file MyDialog.resources.dll non localizzato. Gli elementi e le proprietà dell'interfaccia utente nel codice XAML originale possono quindi essere estratti da BAML in coppie chiave/valore utilizzando le API nello spazio dei nomi System.Windows.Markup.Localizer. I localizzatori utilizzano quindi le coppie chiave/valore per localizzare l'applicazione. Una volta completata la localizzazione, sarà possibile generare un nuovo file .resource.dll a partire dai nuovi valori.

Le chiavi delle coppie chiave/valore sono x:UId inseriti dallo sviluppatore nel codice XAML originale. Questi x:UId sono utili all'API per tenere traccia delle modifiche apportate dallo sviluppatore durante la localizzazione, nonché per unire tali modifiche. Ad esempio, se lo sviluppatore modifica l'interfaccia utente quando il localizzatore ha già avviato il processo di localizzazione, è possibile unire la modifica apportata durante lo sviluppo con la versione di localizzazione già completata, così che il lavoro di traduzione effettuato andrà perso soltanto in minima parte.

Esempi di localizzazione WPF

In questa sezione sono contenuti esempi di applicazioni localizzate che aiutano a comprendere le modalità di compilazione e localizzazione di applicazioni WPF.

Esempio di finestra di dialogo Run

Nelle immagini che seguono viene illustrato l'output dell'esempio di finestra di dialogo Run.

Inglese:

Finestra di dialogo Run

Tedesco:

Finestra di dialogo German Run

Progettazione di una finestra di dialogo Run globale

In questo esempio viene prodotta una finestra di dialogo Run mediante WPF e XAML. Questa finestra è equivalente alla finestra di dialogo Esegui disponibile dal menu Start di Microsoft Windows.

Per l'esempio completo, vedere Esempio di globalizzazione di una finestra di dialogo Esegui.

Di seguito vengono riportati alcuni elementi di rilievo per la creazione di finestre di dialogo globali:

Automatic Layout

In Window1.xaml:

<Window SizeToContent="WidthAndHeight">

La proprietà Window precedente ridimensiona automaticamente la finestra in base alla dimensione del contenuto. Questa proprietà impedisce alla finestra di troncare il contenuto le cui dimensioni aumentano in seguito alla localizzazione. Rimuove inoltre lo spazio non necessario nel caso in cui le dimensioni del contenuto diminuiscano in seguito alla localizzazione.

<Grid x:Uid="Grid_1">

Le proprietà Uid sono necessarie per il corretto funzionamento delle API di localizzazione WPF.

Vengono utilizzate dalle API di localizzazione WPF per tenere traccia delle modifiche intercorse tra lo sviluppo e la localizzazione dell'interfaccia utente. Le proprietà Uid consentono di unire una versione più recente dell'interfaccia utente con una precedente localizzazione della stessa. Per aggiungere una proprietà Uid, eseguire msbuild /t:updateuid RunDialog.csproj nella shell dei comandi SDK di Windows. Questo è il metodo consigliato per aggiungere proprietà Uid, poiché un'aggiunta manuale richiede in genere troppo tempo e risulta meno accurata. Per verificare che le proprietà Uid siano correttamente impostate, eseguire msbuild /t:checkuid RunDialog.csproj.

L'interfaccia utente viene strutturata mediante il controllo Grid, utile in quanto consente di sfruttare il layout automatico in WPF. La finestra di dialogo è suddivisa in tre righe e cinque colonne. Le definizioni delle righe e delle colonne non hanno una dimensione fissa, pertanto l'eventuale aumento o riduzione delle dimensioni degli elementi dell'interfaccia utente collocati in ogni cella, dovuto alla localizzazione, non comporta alcun problema.

Le prime due colonne, contenenti l'etichetta Open: e ComboBox, utilizzano il 10% della larghezza totale dell'interfaccia utente.

Nell'esempio viene utilizzata la funzionalità di ridimensionamento condiviso di Grid. Le ultime tre colonne sfruttano tale funzionalità posizionandosi nello stesso SharedSizeGroup. Come si evince dal nome della proprietà, questo consente alle colonne di condividere la stessa dimensione. Di conseguenza, quando "Browse…" viene localizzato nella stringa più lunga "Durchsuchen…" tutti i pulsanti aumentano di larghezza. Non si avrà quindi un pulsante "OK" piccolo e un pulsante "Durchsuchen…" più grande e sproporzionato.

Xml:lang

Xml:lang="en-US"

Si noti Gestione di xml:lang in XAML collocato nell'elemento radice dell'interfaccia utente. Questa proprietà descrive le impostazioni cultura di un dato elemento e dei relativi elementi figlio. Questo valore viene utilizzato da diverse funzionalità in WPF e deve essere modificato in maniera adeguata durante la localizzazione. Modifica ad esempio il dizionario utilizzato per la sillabazione e il controllo ortografico delle parole. Influisce anche sulla visualizzazione delle cifre e sul modo in cui il sistema di fallback dei tipi di carattere seleziona il tipo di carattere da utilizzare. Infine, la proprietà influisce sulla modalità di visualizzazione dei numeri e dei testi scritti in lingue con alfabeti non latini. Il valore predefinito è "en-US".

Building a Satellite Resource Assembly

In .csproj:

<UICulture>en-US</UICulture>

Si noti l'aggiunta di una proprietà UICulture. Quando questa viene impostata su un valore CultureInfo valido, ad esempio en-US, la compilazione del progetto genera un assembly satellite contenente tutte le risorse localizzabili.

<Resource Include="RunIcon.JPG">

<Localizable>False</Localizable>

</Resource>

RunIcon.JPG non deve essere localizzato poiché deve apparire uguale per tutte le impostazioni cultura. Localizable viene impostato su False, per far sì che resti nell'assembly principale indipendente dalla lingua anziché nell'assembly satellite. Il valore predefinito di tutte le risorse non compilabili è Localizable impostato su True.

Localizzazione della finestra di dialogo Run

Parse

Dopo avere compilato l'applicazione, la prima fase di localizzazione consiste nell'analizzare le risorse localizzabili al di fuori dell'assembly satellite. Ai fini di questo argomento, utilizzare lo strumento LocBaml di esempio riportato in Esempio di strumento LocBaml. LocBaml è soltanto uno strumento di esempio che consente di acquisire familiarità con la compilazione di uno strumento adatto a un particolare processo di localizzazione. Tramite LocBaml, eseguire LocBaml /parse RunDialog.resources.dll /out: per l'analisi e per generare un file "RunDialog.resources.dll.CSV".

Localize

Utilizzare l'editor CSV con supporto Unicode preferito per modificare questo file. Eliminare tutte le voci con una categoria di localizzazione "None". Verranno visualizzate le seguenti voci:

Chiave risorsa

Categoria di localizzazione

Valore

Button_1:System.Windows.Controls.Button.$Content

Pulsante

OK

Button_2:System.Windows.Controls.Button.$Content

Pulsante

Cancel

Button_3:System.Windows.Controls.Button.$Content

Pulsante

Browse...

ComboBox_1:System.Windows.Controls.ComboBox.$Content

ComboBox

TextBlock_1:System.Windows.Controls.TextBlock.$Content

Testo

Type the name of a program, folder, document, or Internet resource, and Windows will open it for you.

TextBlock_2:System.Windows.Controls.TextBlock.$Content

Testo

Open:

Window_1:System.Windows.Window.Title

Titolo

Run

La localizzazione dell'applicazione in tedesco richiede le seguenti traduzioni:

Chiave risorsa

Categoria di localizzazione

Valore

Button_1:System.Windows.Controls.Button.$Content

Pulsante

OK

Button_2:System.Windows.Controls.Button.$Content

Pulsante

Abbrechen

Button_3:System.Windows.Controls.Button.$Content

Pulsante

Durchsuchen…

ComboBox_1:System.Windows.Controls.ComboBox.$Content

ComboBox

TextBlock_1:System.Windows.Controls.TextBlock.$Content

Testo

Geben Sie den Namen eines Programms, Ordners, Dokuments oder einer Internetresource an.

TextBlock_2:System.Windows.Controls.TextBlock.$Content

Testo

Öffnen:

Window_1:System.Windows.Window.Title

Titolo

Run

Generate

L'ultima fase di localizzazione consiste nella creazione dell'assembly satellite appena localizzato. L'operazione può essere eseguita mediante il seguente comando LocBaml:

LocBaml.exe /generate RunDialog.resources.dll /trans:RunDialog.resources.dll.CSV /out: . /cul:de-DE

Nella versione tedesca di Windows, se questo file resources.dll viene collocato in una cartella de-DE accanto all'assembly principale, questa risorsa verrà automaticamente caricata al posto di quella contenuta nella cartella en-US. Se non si dispone di una versione tedesca di Windows per eseguire il test, modificare le impostazioni cultura e utilizzare le impostazioni della versione di Windows in uso (ad esempio en-US), quindi sostituire il file resources.dll originale.

Satellite Resource Loading

MyDialog.exe

en-US\MyDialog.resources.dll

de-DE\MyDialog.resources.dll

Codice

BAML inglese originale

BAML localizzato

Risorse indipendenti dalle impostazioni cultura

Altre risorse in inglese

Altre risorse localizzate in tedesco

.NET Framework sceglie automaticamente l'assembly delle risorse satellite da caricare in base a Thread.CurrentThread.CurrentUICulture dell'applicazione, la cui impostazione predefinita dipende dalle impostazioni cultura del sistema operativo Windows in uso. Se si utilizza la versione tedesca di Windows viene caricato de-DE\MyDialog.resources.dll; in caso di utilizzo della versione inglese di Windows viene caricato en-US\MyDialog.resources.dll. È possibile impostare la risorsa di fallback finale per l'applicazione specificando NeutralResourcesLanguage nel file AssemblyInfo.* del progetto. Se ad esempio si specifica:

[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]

en-US\MyDialog.resources.dll verrà utilizzato con la versione tedesca di Windows nel caso in cui de-DE\MyDialog.resources.dll e de\MyDialog.resources.dll siano entrambi non disponibili.

Home page del sito Microsoft per l'Arabia Saudita

Nelle immagini che seguono vengono illustrate la home page inglese e la home page araba. Per l'esempio completo in base al quale vengono prodotte queste immagini, vedere Esempio di globalizzazione di una home page.

Inglese:

Pagina inglese

Arabo:

Pagina in Arabo

Progettazione di una home page del sito Microsoft globale

Questo modello di sito Web Microsoft per l'Arabia Saudita illustra le funzionalità di globalizzazione fornite per le lingue con scrittura da destra a sinistra. Lingue quali l'ebraico e l'arabo sono caratterizzate da un ordine di lettura da destra a sinistra. Accade spesso, quindi, che il layout dell'interfaccia utente debba essere strutturato diversamente rispetto alle lingue con scrittura da sinistra a destra quali ad esempio l'inglese. La localizzazione da un tipo di lingua all'altro può rivelarsi un'operazione alquanto difficoltosa. WPF è stato progettato per semplificare processi di questo tipo.

FlowDirection

Homepage.xaml:

Notare la proprietà FlowDirection di Page: modificando questa proprietà in "RightToLeft", FlowDirection di Page e degli elementi figlio verrà modificata, in modo tale da capovolgere il layout di questa interfaccia utente per la lettura da destra a sinistra, come richiesto dagli utenti arabi. Per eseguire l'override del comportamento di ereditarietà, specificare un oggetto FlowDirection esplicito in qualsiasi elemento. La proprietà FlowDirection è disponibile in qualsiasi FrameworkElement o elemento correlato al documento e possiede un valore implicito equivalente a LeftToRight.

Si noti come anche la sfumatura di sfondo viene capovolta correttamente in seguito alla modifica di FlowDirection dell'elemento Page radice:

FlowDirection="LeftToRight"

Flusso da sinistra a destra

FlowDirection="RightToLeft"

Flusso da destra a sinistra

Evitare di utilizzare dimensioni fisse per riquadri e controlli

Si osservi attentamente Homepage.xaml: a parte la larghezza e l'altezza fisse specificate per l'intera interfaccia utente nel DockPanel superiore, non vi sono altre dimensioni fisse. Evitare di utilizzare dimensioni fisse poiché il testo localizzato potrebbe essere troncato se più lungo del testo di origine. I riquadri e i controlli WPF verranno automaticamente ridimensionati in base al contenuto presente al loro interno. Per la maggior parte dei controlli è prevista la possibilità di impostare una dimensione minima e massima, per un maggiore controllo (ad esempio MinWidth= "20"). Con Grid è anche possibile impostare larghezze e altezze relative mediante "*" (ad esempio Width= "0.25*") oppure utilizzare la funzionalità di condivisione delle dimensioni della cella, come illustrato nell'esempio RunDialog (vedere Esempio di globalizzazione di una finestra di dialogo Esegui).

Commenti di localizzazione

Esistono molti casi in cui il contenuto può risultare ambiguo e difficile da tradurre. Lo sviluppatore o progettista ha la possibilità di fornire contesto aggiuntivo e commenti ai localizzatori tramite i commenti di localizzazione. Ad esempio, nel commento Localization.Comments riportato di seguito viene spiegato l'utilizzo del carattere "|".

Questo commento viene associato al contenuto di TextBlock_1 e, nel caso dello strumento LocBaml (vedere Procedura: localizzare un'applicazione), risulta visibile nella sesta colonna della riga TextBlock_1 nel file CSV di output:

Chiave risorsa

Categoria

Leggibile

Modificabile

Commento

Valore

TextBlock_1:System.Windows.Controls.TextBlock.$Content

Testo

TRUE

TRUE

Questo carattere viene utilizzato come regola decorativa.

|

I commenti possono essere posizionati sul contenuto o sulla proprietà di qualsiasi elemento utilizzando la seguente sintassi:

Attributi di localizzazione

Spesso lo sviluppatore o il responsabile di localizzazione ha bisogno di stabilire quali elementi possono essere letti e modificati dai localizzatori. Ad esempio, può decidere che il localizzatore non debba tradurre il nome della società o eventuali testi di carattere giuridico. WPF fornisce attributi che consentono di impostare la leggibilità, la modificabilità e la categoria del contenuto o della proprietà di un elemento, utilizzabili dallo strumento di localizzazione per bloccare, nascondere o ordinare gli elementi. Per ulteriori informazioni, vedere AttributesProperty. Ai fini di questo esempio, lo strumento LocBaml restituisce semplicemente i valori di questi attributi. Tutti i controlli WPF possiedono valori predefiniti per gli attributi, ma è possibile eseguire l'override di tali valori. Nell'esempio riportato di seguito, a titolo esemplificativo, viene eseguito l'override degli attributi di localizzazione predefiniti per TextBlock_1 e il contenuto viene impostato come leggibile ma non modificabile per i localizzatori.

<TextBlock
x:Uid="TextBlock_1"
Localization.Attributes=
"$Content(Readable Unmodifiable)">
  Microsoft Corporation
</TextBlock>

Oltre agli attributi di leggibilità e modificabilità, WPF fornisce diverse categorie dell'interfaccia utente comuni utilizzabili per fornire più contesto ai localizzatori: Text, Title, Label, Button, CheckBox, ComboBox, ListBox, Menu, RadioButton, ToolTip, Hyperlink, Document, XmlData e Font. L'override delle categorie predefinite WPF per i controlli della piattaforma può anche essere eseguito in XAML:

<TextBlock x:Uid="TextBlock_2">
<TextBlock.ToolTip>
<TextBlock
x:Uid="TextBlock_3"
Localization.Attributes=
"$Content(ToolTip Readable Unmodifiable)">
Microsoft Corporation
</TextBlock>
</TextBlock.ToolTip>
Windows Vista
</TextBlock>

L'override degli attributi di localizzazione predefiniti forniti da WPF può essere eseguito anche tramite codice, pertanto è possibile impostare correttamente i valori predefiniti appropriati per i controlli personalizzati. Ad esempio:

[Localizability(Readability = Readability.Readable, Modifiability=Modifiability.Unmodifiable, LocalizationCategory.None)]

public class CorporateLogo: TextBlock

{

..

.

}

Gli attributi per istanza impostati in XAML avranno la precedenza sui valori impostati nel codice per i controlli personalizzati. Per ulteriori informazioni sugli attributi e i commenti, vedere Attributi e commenti di localizzazione.

Fallback dei tipi di carattere e tipi di carattere compositi

Se si specifica un tipo di carattere che non supporta un intervallo di punti di codice specificato, WPF eseguirà automaticamente il fallback a un tipo di carattere diverso mediante Global User Interface.compositefont situato nella directory Windows\Fonts. I tipi di carattere compositi funzionano come qualsiasi altro tipo di carattere e possono essere utilizzati in modo esplicito impostando FontFamily di un elemento (ad esempio, FontFamily= "Global User Interface"). È possibile specificare la propria preferenza di fallback dei tipi di carattere creando un tipo di carattere composito personalizzato e specificando il tipo di carattere da utilizzare per particolari intervalli di punti di codice e lingue.

Per ulteriori informazioni sui tipi di carattere compositi, vedere FontFamily.

Localizzazione della home page del sito Microsoft

Per localizzare questa applicazione, è possibile seguire la stessa procedura utilizzata nell'esempio della finestra di dialogo Run. Il file CSV localizzato per la lingua araba è disponibile in Esempio di globalizzazione di una home page.