Panoramica della globalizzazione e localizzazione WPF

Quando si limita la disponibilità del prodotto a una sola lingua, si limita la base potenziale dei clienti a una frazione della popolazione mondiale di 7,5 miliardi. Se si vuole che le applicazioni raggiungano un pubblico globale, la localizzazione economica del prodotto è uno dei modi migliori e più economici per raggiungere un ampio pubblico di clienti.

Questa panoramica presenta la globalizzazione e la localizzazione in Windows Presentation Foundation (WPF). La globalizzazione si basa sulla progettazione e sviluppo di applicazioni eseguibili in più posizioni. Ad esempio, la globalizzazione supporta interfacce utente e dati internazionali localizzati per utenti in varie impostazioni cultura. WPF offre funzionalità di progettazione globalizzate, tra cui layout automatico, assembly satellite e attributi localizzati e commenti.

La localizzazione consiste nella conversione delle risorse dell'applicazione in versioni localizzate per specifiche impostazioni cultura supportate dall'applicazione. Quando si localizza in WPF, si usano le API nello spazio dei System.Windows.Markup.Localizer nomi . Tali API supportano lo strumento da riga di comando LocBaml. Per informazioni su come creare e usare LocBaml, vedere Localizzare un'applicazione.

Avviso

Lo strumento LocBaml funziona solo con WPF per i progetti .NET Framework, ma non funziona con WPF per .NET.

Procedure consigliate per la globalizzazione e la localizzazione in WPF

È possibile sfruttare al meglio le funzionalità di globalizzazione e localizzazione integrate in WPF seguendo la progettazione dell'interfaccia utente e i suggerimenti correlati alla localizzazione forniti da questa sezione.

Procedure consigliate per la progettazione dell'interfaccia utente WPF

Quando si progetta un'interfaccia utente basata su WPF, è consigliabile implementare queste procedure consigliate:

  • Scrivere l'interfaccia utente in XAML; evitare di creare l'interfaccia utente nel codice. Quando crei l'interfaccia utente usando XAML, la esponi tramite LE API di localizzazione predefinite.

  • Evitare di usare posizioni assolute e dimensioni fisse per il layout del contenuto, preferendo il ridimensionamento automatico o relativo.

    • Usare SizeToContent e mantenere larghezze e altezze impostate su Auto.

    • Evitare di usare Canvas per disporre le interfacce utente.

    • Usare Grid e la relativa funzionalità di condivisione delle dimensioni.

  • Lasciare uno spazio aggiuntivo ai margini perché il testo localizzato spesso richiede più spazio. Lo spazio aggiuntivo servirà per eventuali caratteri sporgenti.

  • TextBlock Attiva TextWrapping per evitare il ritaglio.

  • 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, cambia il comportamento della sillabazione, del controllo ortografico, della sostituzione dei numeri, della definizione di lingue con alfabeto non latino e del fallback dei tipi di carattere. Per altre informazioni sulla Gestione di xml:lang in XAML, vedere Globalizzazione per WPF.

  • Creare un tipo di carattere composito personalizzato per ottenere maggiore controllo sui tipi di carattere usati per le diverse lingue. Per impostazione predefinita, WPF usa il tipo di carattere GlobalUserInterface.composite nella directory Windows\Fonts.

  • Quando si creano applicazioni di spostamento che possono essere localizzate in impostazioni cultura che presentano testo in formato da destra a sinistra, impostare in modo esplicito l'oggetto FlowDirection di ogni pagina per assicurarsi che la pagina non erediti FlowDirection da NavigationWindow.

  • Quando si creano applicazioni di spostamento autonome ospitate all'esterno di un browser, impostare per l'applicazione StartupUri iniziale su un NavigationWindow anziché su una pagina , ad esempio <Application StartupUri="NavigationWindow.xaml">. Questa progettazione consente di modificare l'oggetto FlowDirection della finestra e della barra di spostamento. Per altre informazioni e un esempio, vedere Esempio di globalizzazione di una home page.

Procedure consigliate per la localizzazione di WPF

Quando si localizzano applicazioni basate su WPF, è consigliabile implementare queste procedure consigliate:

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

  • Usare gli attributi di localizzazione per controllare la localizzazione anziché omettere Uid in modo selettivo le proprietà sugli elementi. Per altre informazioni, vedere Attributi e commenti di localizzazione.

  • Usa msbuild -t:updateuid e -t:checkuid per aggiungere e controllare Uid le proprietà nel codice XAML. Usare Uid le proprietà per tenere traccia delle modifiche tra sviluppo e localizzazione. Uid le proprietà consentono di localizzare le nuove modifiche di sviluppo. Se si aggiungono Uid manualmente proprietà a un'interfaccia utente, l'attività è in genere noiosa e meno accurata.

    • Non modificare o modificare Uid le proprietà dopo l'inizio della localizzazione.

    • Non usare proprietà duplicate Uid (tenere presente questo suggerimento quando si usa il comando copia e incolla).

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

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

Localizzare un'applicazione WPF

Quando si localizza un'applicazione WPF, sono disponibili diverse opzioni. Ad esempio, è possibile associare le risorse localizzabili nell'applicazione a un file XML, archiviare testo localizzabile in tabelle resx o usare i file XAML da parte del localizzatore. Questa sezione descrive un flusso di lavoro di localizzazione che usa il formato BAML di XAML, che offre diversi vantaggi:

  • È possibile localizzare dopo la compilazione.

  • Puoi eseguire l'aggiornamento a una versione più recente del formato BAML di XAML con localizzazioni da una versione precedente del formato BAML di XAML in modo da poter localizzare contemporaneamente lo sviluppo.

  • Puoi convalidare gli elementi di origine originali e la semantica in fase di compilazione perché il formato BAML di XAML è il formato compilato di XAML.

Processo di compilazione per la localizzazione

Quando si sviluppa un'applicazione WPF, il processo di compilazione per la localizzazione è il seguente:

  • Lo sviluppatore crea e globalizza l'applicazione WPF. Nel file di progetto gli sviluppatori impostano <UICulture>en-US</UICulture> in modo che, quando l'applicazione viene compilata, viene generato un assembly principale indipendente dal linguaggio. Questo assembly dispone di un file satellite con estensione resources.dll che contiene tutte le risorse localizzabili. Facoltativamente, è possibile mantenere la lingua di origine nell'assembly principale perché le API di localizzazione supportano l'estrazione dall'assembly principale.

  • Quando il file viene compilato nella compilazione, il codice XAML viene convertito nel formato BAML di XAML. I file culturalmente neutrali MyDialog.exe e dipendenti dalla cultura (inglese) MyDialog.resources.dll vengono rilasciati al cliente in lingua inglese.

Flusso di lavoro della localizzazione

Il processo di localizzazione inizia dopo la compilazione del file non localizzato MyDialog.resources.dll . Gli elementi e le proprietà dell'interfaccia utente nel codice XAML originale vengono estratti dal formato BAML di XAML in coppie chiave-valore usando le API in System.Windows.Markup.Localizer. I localizzatori usano le coppie chiave-valore per localizzare l'applicazione. È possibile generare un nuovo file con estensione resource.dll a partire dai nuovi valori dopo che la localizzazione è stata completata.

Le chiavi delle coppie chiave-valore sono x:Uid valori inseriti dallo sviluppatore nel codice XAML originale. Questi x:Uid valori consentono all'API di tenere traccia e unire le modifiche che si verificano tra lo sviluppatore e il localizzatore durante la localizzazione. Ad esempio, se lo sviluppatore modifica l'interfaccia utente dopo che il localizzatore inizia la localizzazione, è possibile unire la modifica di sviluppo con il lavoro di localizzazione già completato in modo che il lavoro di traduzione minimo venga perso.

La figura seguente mostra un tipico flusso di lavoro di localizzazione basato sul modulo BAML di XAML. Questo diagramma presuppone che lo sviluppatore scriva l'applicazione in inglese. Lo sviluppatore crea e globalizza l'applicazione WPF. Nel file di progetto gli sviluppatori impostano <UICulture>en-US</UICulture> in modo che alla compilazione venga generato un assembly principale indipendente dal linguaggio con un file satellite .resources.dll contenente tutte le risorse localizzabili. In alternativa, è possibile mantenere la lingua di origine nell'assembly principale poiché le API di localizzazione WPF supportano l'estrazione dall'assembly principale. Dopo il processo di compilazione, il codice XAML viene compilato in BAML. Il file MyDialog.exe.resources.dll indipendente dalla lingua viene distribuito ai clienti di lingua inglese.

Diagram showing the Localization workflow.

Diagram showing the Unlocalized workflow.

Esempi di localizzazione WPF

Questa sezione contiene esempi di applicazioni localizzate che consentono di comprendere come compilare e localizzare applicazioni WPF.

Esempio di finestra di dialogo Esegui

L'immagine seguente mostra l'output della finestra di dialogo Esegui di esempio.

Inglese:

Screenshot showing an English Run dialog box.

Tedesco:

Screenshot showing a German Run dialog box.

Progettazione di una finestra di dialogo Esegui globale

In questo esempio viene creata una finestra di dialogo Esegui usando WPF e XAML. Questa finestra di dialogo equivale alla finestra di dialogo Esegui disponibile in Microsoft Windows menu Start.

Alcune delle caratteristiche principali delle finestre di dialogo globali sono:

Layout automatico

In Window1.xaml:

<Window SizeToContent="WidthAndHeight">

La proprietà Window precedente ridimensiona automaticamente la finestra in base alle dimensioni del contenuto. Questa proprietà impedisce alla finestra di troncare il contenuto che aumenta di dimensioni dopo la localizzazione. Rimuove anche lo spazio superfluo quando le dimensioni del contenuto si riducono dopo la localizzazione.

<Grid x:Uid="Grid_1">

Uid Le proprietà sono necessarie affinché le API di localizzazione WPF funzionino correttamente.

Vengono usate dalle API di localizzazione WPF per tenere traccia delle modifiche tra lo sviluppo e la localizzazione dell'interfaccia utente. Uid Le proprietà consentono di unire una versione più recente dell'interfaccia utente con una localizzazione precedente dell'interfaccia utente. Aggiungere una Uid proprietà eseguendo msbuild -t:updateuid RunDialog.csproj in una shell dei comandi. Questo è il metodo consigliato per l'aggiunta Uid di proprietà perché l'aggiunta manuale richiede in genere molto tempo e meno accurato. È possibile verificare che Uid le proprietà siano impostate correttamente eseguendo msbuild -t:checkuid RunDialog.csproj.

L'interfaccia utente è strutturata usando il Grid controllo , che è un controllo utile per sfruttare il layout automatico in WPF. Si noti che la finestra di dialogo è suddivisa in tre righe e cinque colonne. Non una delle definizioni di riga e colonna ha una dimensione fissa; di conseguenza, gli elementi dell'interfaccia utente posizionati in ogni cella possono adattarsi ad aumentare e diminuire le dimensioni durante la localizzazione.

<Grid.ColumnDefinitions>
  <ColumnDefinition x:Uid="ColumnDefinition_1" />
  <ColumnDefinition x:Uid="ColumnDefinition_2" />

Le prime due colonne in cui l'etichetta Open: e ComboBox vengono posizionate usano il 10% della larghezza totale dell'interfaccia utente.

  <ColumnDefinition x:Uid="ColumnDefinition_3" SharedSizeGroup="Buttons" />
  <ColumnDefinition x:Uid="ColumnDefinition_4" SharedSizeGroup="Buttons" />
  <ColumnDefinition x:Uid="ColumnDefinition_5" SharedSizeGroup="Buttons" />
</Grid.ColumnDefinitions>

Si noti che nell'esempio viene usata la funzionalità di ridimensionamento condiviso di Grid. Le ultime tre colonne sfruttano questa situazione posizionandosi nello stesso SharedSizeGroupoggetto . Come si evince dal nome della proprietà, in questo modo le colonne possono condividere le stesse dimensioni. Quindi, quando "Sfoglia..." ottiene localizzato alla stringa più lunga "Durchsuchen...", tutti i pulsanti crescono in larghezza invece di avere un piccolo pulsante "OK" e un "Durchsuchen" sproporzionatamente grande..." Pulsante.

xml:lang

xml:lang="en-US"

Si noti la gestione xml:lang in XAML posizionata nell'elemento radice dell'interfaccia utente. Questa proprietà descrive le impostazioni cultura di un determinato elemento e dei relativi elementi figlio. Questo valore viene usato da diverse funzionalità in WPF e deve essere modificato in modo appropriato durante la localizzazione. Questo valore cambia il dizionario in lingua usato per la sillabazione e il controllo ortografico delle parole. Influisce anche sulla visualizzazione delle cifre e sulla selezione del tipo di carattere da usare da parte del sistema di fallback dei tipi di carattere. Infine, la proprietà influisce sulla visualizzazione dei numeri e sulla forma dei testi scritti in lingue con alfabeti non latini. Il valore predefinito è "en-US".

Creazione di un assembly di risorse satellite

Nel file con estensione csproj:

Modificare il .csproj file e aggiungere il tag seguente a un oggetto incondizionato <PropertyGroup>:

<UICulture>en-US</UICulture>

Si noti l'aggiunta di un UICulture valore. Quando questa proprietà è impostata su un valore valido CultureInfo , ad esempio en-US, la compilazione del progetto genererà un assembly satellite con tutte le risorse localizzabili in esso contenute.

<Resource Include="RunIcon.JPG">

<Localizable>False</Localizable>

</Resource>

Non è necessario localizzare perché RunIcon.JPG deve essere visualizzato lo stesso per tutte le impostazioni cultura. Localizable è impostato su false in modo che rimanga nell'assembly principale indipendente dalla lingua anziché nell'assembly satellite. Il valore predefinito di tutte le risorse noncompilabili è Localizable impostato su true.

Localizzazione della finestra di dialogo Esegui

Parse.

Dopo aver compilato l'applicazione, il primo passaggio della localizzazione consiste nell'analizzare le risorse localizzabili nell'assembly satellite. Ai fini di questo argomento, usare lo strumento LocBaml di esempio, disponibile nell'esempio dello strumento LocBaml. Si noti che LocBaml è solo uno strumento di esempio che permette di iniziare a creare uno strumento di localizzazione adatto al processo di localizzazione. Tramite LocBaml, eseguire il comando seguente per analizzare: LocBaml /parse RunDialog.resources.dll /out: per generare un file "RunDialog.resources.dll.CSV".

Avviso

Lo strumento LocBaml funziona solo con WPF per i progetti .NET Framework, ma non funziona con WPF per .NET.

Localizzazione

Usare un editor CSV che supporta la codifica Unicode per modificare il file. Escludere tutte le voci con categoria di localizzazione "Nessuna". Dovrebbero essere visualizzate le voci seguenti:

Chiave di risorsa Categoria di localizzazione Valore
Button_1:System.Windows.Controls.Button.$Content Pulsante Ok
Button_2:System.Windows.Controls.Button.$Content Pulsante Annulla
Button_3:System.Windows.Controls.Button.$Content Pulsante Sfoglia...
ComboBox_1:System.Windows.Controls.ComboBox.$Content ComboBox
TextBlock_1:System.Windows.Controls.TextBlock.$Content Testo Digitare il nome del programma, della cartella, del documento o della risorsa Internet da aprire.
TextBlock_2:System.Windows.Controls.TextBlock.$Content Testo Apri:
Window_1:System.Windows.Window.Title Titolo Esegui

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

Chiave di 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 Esegui

Generate

L'ultimo passaggio della localizzazione implica la creazione dell'assembly satellite appena localizzato. Per questa operazione usare il comando LocBaml seguente:

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

In Windows tedesco, se questo file resources.dll viene inserito in una cartella de-DE accanto all'assembly principale, questa risorsa verrà caricata automaticamente anziché quella nella cartella en-US. Se non si dispone di una versione tedesca di Windows per testare questa impostazione, impostare le impostazioni cultura su tutte le impostazioni cultura di Windows in uso (ad esempio, en-US) e sostituire la DLL delle risorse originali.

Caricamento di risorse satellite

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 sceglie automaticamente l'assembly di risorse satellite da caricare in base all'oggetto dell'applicazione Thread.CurrentUICulture. Questa impostazione predefinita corrisponde alle impostazioni cultura del sistema operativo Windows. Se si usa Windows tedesco, il file de-DE\MyDialog.resources.dll viene caricato. Se si usa Windows in lingua inglese, viene caricato il file en-US\MyDialog.resources.dll . È possibile impostare la risorsa di fallback finale per l'applicazione specificando l'attributo NeutralResourcesLanguage nel file AssemblyInfo del progetto. Ad esempio, se si specifica:

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

il file en-US\MyDialog.resources.dll viene quindi usato con Windows tedesco se nessuno dei file seguenti è disponibile: de-DE\MyDialog.resources.dll o de\MyDialog.resources.dll.

Home page Microsoft per l'Arabia Saudita

Le immagini seguenti mostrano una home page in inglese e in arabo. Per l'esempio completo che produce queste immagini, vedere Esempio di globalizzazione di una home page.

Inglese:

Screenshot showing an English home page.

Arabo:

Screenshot showing an Arabic home page.

Progettazione di una home page Globale di Microsoft

Questo modello di sito Web Microsoft per l'Arabia Saudita illustra le funzionalità di globalizzazione disponibili per le lingue da destra a sinistra. Le lingue come l'ebraico e l'arabo hanno un ordine di lettura da destra a sinistra, quindi il layout dell'interfaccia utente deve essere spesso disposto in modo diverso rispetto a quello in lingue da sinistra a destra, ad esempio l'inglese. La localizzazione da una lingua da sinistra a destra in una lingua da destra a sinistra o viceversa può risultare piuttosto complessa. WPF è stato progettato per semplificare notevolmente tali localizzazioni.

FlowDirection

Homepage.xaml:

<Page x:Uid="Page_1" x:Class="MicrosoftSaudiArabiaHomepage.Homepage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"   
    FlowDirection="LeftToRight" 
    Localization.Comments="FlowDirection(This FlowDirection controls the actual content of the homepage)"
    xml:lang="en-US">

Si noti la FlowDirection proprietà in Page. La modifica di questa proprietà in RightToLeft modificherà l'oggetto FlowDirection di e i Page relativi elementi figlio in modo che il layout di questa interfaccia utente venga capovolto per diventare da destra a sinistra come previsto da un utente arabo. È possibile eseguire l'override del comportamento di ereditarietà specificando un oggetto esplicito FlowDirection su qualsiasi elemento. La FlowDirection proprietà è disponibile in qualsiasi FrameworkElement elemento correlato al documento o ha un valore implicito di LeftToRight.

Osservare che anche i pennelli sfumatura di sfondo vengono capovolti correttamente quando la radice FlowDirection viene modificata:

FlowDirection="LeftToRight"

Screenshot showing the gradient flow from left to right.

FlowDirection="RightToLeft"

Screenshot showing the gradient flow from right to left.

Evitare l'utilizzo di dimensioni fisse per riquadri e controlli

Esaminare Homepage.xaml, notare che, a parte la larghezza fissa e l'altezza specificata per l'intera interfaccia utente in alto DockPanel, non ci sono altre dimensioni fisse. Se si usano dimensioni fisse, è possibile che il testo localizzato risulti più lungo rispetto al testo di origine e debba essere ritagliato. I pannelli e i controlli WPF verranno ridimensionati automaticamente in base al contenuto che contengono. La maggior parte dei controlli ha anche dimensioni minime e massime che è possibile impostare per un maggiore controllo (ad esempio, MinWidth="20"). Con Gridè anche possibile impostare larghezze e altezze relative usando '*' (ad esempio ) Width="0.25*"o la relativa funzionalità di condivisione delle dimensioni delle celle.

Commenti di localizzazione

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

<TextBlock 
  x:Uid="TextBlock_2" 
  DockPanel.Dock="Right" 
  Foreground="White" 
  Margin="5,0,5,0"
  Localization.Comments="$Content(This character is used as a decorative rule.)">
  |
</TextBlock>

Questo commento viene associato al contenuto di TextBlock_1 e, nel caso dello strumento LocBaml, ( vedere Localizzare un'applicazione), può essere visualizzato nella 6a colonna della riga TextBlock_1 nel file csv di output:

Chiave di risorsa Categoria Leggibile Modificabile Comment Valore
TextBlock_1:System.Windows.Controls.TextBlock.$Content Testo TRUE TRUE Questo carattere viene usato come regola decorativa. |

I commenti possono essere inseriti nel contenuto o nella proprietà di qualsiasi elemento usando la sintassi seguente:

<TextBlock 
  x:Uid="TextBlock_1" 
  DockPanel.Dock="Right" 
  Foreground="White" 
  Margin="5,0,5,0"
  Localization.Comments="$Content(This is a comment on the TextBlock's content.)
     Margin(This is a comment on the TextBlock's Margin property.)">
  |
 </TextBlock>

Attributi di localizzazione

Spesso lo sviluppatore o il responsabile della localizzazione deve avere il controllo su tutto ciò che i localizzatori possono leggere e modificare. Ad esempio, il localizzatore non deve tradurre il nome della società o modificare alcuni termini legali. WPF fornisce attributi che consentono di impostare la leggibilità, la modificabilità e la categoria del contenuto o della proprietà di un elemento che lo strumento di localizzazione può usare per bloccare, nascondere o ordinare elementi. Per ulteriori informazioni, vedere Attributes. Ai fini di questo esempio, lo strumento LocBaml restituisce solo i valori di questi attributi. Tutti i controlli WPF hanno valori predefiniti per questi attributi, ma è possibile eseguirne l'override. L'esempio seguente, ad esempio, esegue l'override degli attributi di localizzazione predefiniti per TextBlock_1 e imposta il contenuto 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 un'enumerazione di categorie di interfaccia utente comuni (LocalizationCategory) che possono essere usate per fornire più contesto ai localizzatori. Le categorie predefinite WPF per i controlli della piattaforma possono essere sostituite anche 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>

Gli attributi di localizzazione predefiniti forniti da WPF possono anche essere sottoposti a override tramite codice, in modo da poter impostare correttamente i valori predefiniti corretti 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 nei controlli personalizzati. Per altre 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 determinato intervallo di punti di codice, WPF eseguirà automaticamente il fallback a uno che esegue utilizzando l'interfaccia utente globale.compositefont che si trova nella directory Windows\Fonts. I tipi di carattere compositi funzionano esattamente come qualsiasi altro tipo di carattere e possono essere usati in modo esplicito impostando un elemento FontFamily (ad esempio, FontFamily="Global User Interface"). Per specificare le preferenze di fallback del tipo di carattere, è possibile creare un tipo di carattere composito personalizzato e specificare il tipo di carattere da usare per gli specifici intervalli di punti di codice e le lingue.

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

Localizzazione della home page Microsoft

È possibile seguire la stessa procedura usata nell'esempio della finestra di dialogo Esegui per localizzare l'applicazione. Il file con estensione csv localizzato per l'arabo è disponibile nell'Esempio di globalizzazione di una home page.