Condividi tramite


Panoramica sulla globalizzazione e localizzazione di 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 conveniente del prodotto è uno dei modi migliori e più economici per raggiungere più clienti.

Questa panoramica presenta la globalizzazione e la localizzazione in Windows Presentation Foundation (WPF). La globalizzazione è la progettazione e lo sviluppo di applicazioni che eseguono in più posizioni. Ad esempio, la globalizzazione supporta interfacce utente localizzate e dati regionali per gli utenti in culture diverse. WPF offre funzionalità di progettazione globalizzate, tra cui layout automatico, assembly satellite e attributi localizzati e commenti.

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

Avvertimento

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

Procedure consigliate per globalizzazione e 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 disporre il contenuto; Usare invece il ridimensionamento relativo o automatico.

    • 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.

  • Fornire spazio aggiuntivo in margini perché il testo localizzato spesso richiede più spazio. Lo spazio aggiuntivo consente possibili caratteri a sporgenti.

  • Abilita TextWrapping su TextBlock per evitare il ritaglio.

  • Impostare l'attributo xml:lang . Questo attributo descrive la cultura di un elemento specifico e dei relativi elementi figli. Il valore di questa proprietà modifica il comportamento di diverse funzionalità in WPF. Ad esempio, modifica il comportamento della sillabazione, del controllo ortografico, della sostituzione dei numeri, della formattazione dello script complesso e del fallback del carattere. Per altre informazioni sull'impostazione della gestione xml:lang in XAML, vedere Globalizzazione per WPF.

  • Creare un tipo di carattere composito personalizzato per ottenere un controllo migliore dei tipi di carattere usati per lingue diverse. 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 navigazione autonome ospitate all'esterno di un browser, impostare StartupUri per l'applicazione iniziale su un NavigationWindow anziché su una pagina, ad esempio <Application StartupUri="NavigationWindow.xaml">. Questa progettazione consente di modificare il FlowDirection della finestra e della barra di navigazione. Per altre informazioni e un esempio, vedere Esempio della home page della globalizzazione.

Procedure consigliate per la localizzazione 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 le proprietà Uid dopo l'inizio della localizzazione.

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

    • Impostare la UltimateResourceFallback posizione 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 tag <UICulture> nel file di progetto, impostare la posizione UltimateResourceFallback come assembly principale anziché come 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 aggiornare a una versione più recente del formato BAML di XAML utilizzando le localizzazioni da una versione precedente del formato BAML di XAML, in modo da poter localizzare mentre sviluppi.

  • 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 costruzione della 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 include un file satellite .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 inserito nel build, 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 di 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 convertiti dal formato BAML di XAML in coppie di chiave e valore utilizzando le API sotto System.Windows.Markup.Localizer. I localizzatori usano le coppie chiave-valore per localizzare l'applicazione. È possibile generare un nuovo .resource.dll dai nuovi valori al termine della localizzazione.

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.

L'immagine seguente mostra un tipico flusso di lavoro di localizzazione basato sul formato 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 .resources.dll satellite contenente tutte le risorse localizzabili. In alternativa, è possibile mantenere il linguaggio di origine nell'assembly principale perché le API di localizzazione WPF supportano l'estrazione dall'assembly principale. Dopo il processo di compilazione, il codice XAML viene compilato in BAML. Il MyDialog.exe.resources.dll culturalmente neutro viene spedito al cliente che parla inglese.

Diagramma che mostra il flusso di lavoro di localizzazione.

Diagramma che mostra il flusso di lavoro non localizzato.

Esempi di localizzazione WPF

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

Esempio della finestra di dialogo "Esegui"

La grafica seguente mostra l'output dell'esempio di finestra di dialogo Esegui .

Inglese:

Screenshot che mostra una finestra di dialogo Esecuzione in lingua inglese.

Tedesco:

Screenshot che mostra una finestra di dialogo

Progettazione di una finestra di dialogo Esecuzione 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 dal menu Start di Microsoft Windows.

Alcune evidenziazioni per la creazione di 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 tagliare il contenuto che aumenta di dimensioni dopo la localizzazione; rimuove anche lo spazio non necessario quando il contenuto diminuisce di dimensioni 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. Si aggiunge una Uid proprietà eseguendo msbuild -t:updateuid RunDialog.csproj in una shell dei comandi. Questo è il metodo consigliato per l'aggiunta di proprietà Uid perché l'aggiunta manuale richiede in genere molto tempo ed è meno accurata. È 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 ne approfittano posizionandosi nello stesso SharedSizeGroup. Come ci si aspetterebbe dal nome della proprietà, ciò consente alle colonne di condividere le stesse dimensioni. Quindi, quando "Sfoglia..." viene tradotto nella stringa più lunga "Durchsuchen...", tutti i pulsanti crescono in larghezza invece di avere un pulsante "OK" piccolo e un pulsante "Durchsuchen..." sproporzionatamente grande.

xml:lang

xml:lang="en-US"

Si noti la gestione di xml:lang in XAML posizionata al livello dell'elemento radice dell'interfaccia utente. Questa proprietà descrive la cultura di un determinato elemento e dei suoi elementi figli. Questo valore viene usato da diverse funzionalità in WPF e deve essere modificato in modo appropriato durante la localizzazione. Questo valore modifica quale dizionario linguistico si usa per sillabare e controllare l'ortografia delle parole. Influisce anche sulla visualizzazione delle cifre e sul modo in cui il sistema di fallback del carattere seleziona il tipo di carattere da usare. Infine, la proprietà influisce sulla modalità di visualizzazione dei numeri e sulla forma dei testi scritti in script complessi. Il valore predefinito è "en-US".

Compilazione di un assembly di risorse satellite

In .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 che RunIcon.JPG sia localizzato perché deve apparire uguale in tutte le differenze culturali. 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

Analisi

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

Avvertimento

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

Localizzare

Usare l'editor CSV preferito che supporta Unicode per modificare questo file. Escludi tutte le voci con una categoria di localizzazione "Nessuno". Verranno visualizzate le voci seguenti:

Chiave risorsa Categoria di localizzazione Valore
Button_1:System.Windows.Controls.Button.$Content Pulsante Va bene
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 di un programma, una cartella, un documento o una risorsa Internet e Windows lo aprirà automaticamente.
TextBlock_2:System.Windows.Controls.TextBlock.$Content Testo Aperto:
Window_1:System.Windows.Window.Title Titolo Correre

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

Chiave risorsa Categoria di localizzazione Valore
Button_1:System.Windows.Controls.Button.$Content Pulsante Va bene
Button_2:System.Windows.Controls.Button.$Content Pulsante Annulla
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 Correre

Generare

L'ultimo passaggio della localizzazione prevede la creazione dell'assembly satellite appena localizzato. Questa operazione può essere eseguita con il comando LocBaml seguente:

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

In Windows tedesco, se questa resources.dll viene inserita 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 effettuare questo test, impostare la cultura sulle impostazioni di Windows attualmente in uso (ad esempio, en-US) e sostituire la DLL originale delle risorse.

Caricamento delle risorse satellite

MyDialog.exe en-US\MyDialog.resources.dll de-DE\MyDialog.resources.dll
Codice BAML inglese originale BAML localizzato
Risorse culturalmente neutre 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. La cultura predefinita corrisponde a quella del sistema operativo Windows. Se si usa Windows in tedesco, il filede-DE\MyDialog.resources.dll viene caricato. Se si usa Windows in lingua inglese, il file en-US\MyDialog.resources.dll viene caricato. È 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)]

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

Home page di Microsoft Arabia Saudita

La grafica seguente mostra una home page inglese e araba. Per l'esempio completo che produce questi elementi grafici, vedere Esempio della home page di globalizzazione.

Inglese:

Screenshot che mostra una home page inglese.

Arabo:

Screenshot che mostra una home page araba.

Progettazione di una home page Globale di Microsoft

Questa simulazione del sito Web di Microsoft Arabia Saudita illustra le funzionalità di globalizzazione fornite per le lingue RightToLeft. 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 a una lingua da destra a sinistra o viceversa può essere piuttosto complessa. WPF è stato progettato per semplificare notevolmente tali localizzazioni.

Direzione del flusso

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à su Page. La modifica di questa proprietà in RightToLeft modificherà il FlowDirection e i relativi Page elementi figli associati 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 proprietà FlowDirection è disponibile su qualsiasi elemento FrameworkElement o correlato al documento e 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 mostra il flusso della sfumatura da sinistra a destra.

FlowDirection="RightToLeft"

Screenshot che mostra il flusso gradiente da destra a sinistra.

Evitare di usare dimensioni fisse per pannelli 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. Evitare di utilizzare dimensioni fisse per impedire il ritaglio di testo localizzato che potrebbe essere più lungo del testo di origine. 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

Esistono molti casi in cui il contenuto può essere ambiguo e difficile da tradurre. Lo sviluppatore o il designer ha la possibilità di fornire contesto e commenti aggiuntivi a chi si occupa della localizzazione tramite 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 di output .csv:

Chiave risorsa Categoria Leggibile Modificabile Commento Valore
TextBlock_1:System.Windows.Controls.TextBlock.$Content Testo Vero Vero 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 controllare quali localizzatori possono leggere e modificare. Ad esempio, potrebbe non essere necessario che il localizzatore traduca il nome della società o la formulazione legale. 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 altre 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. Per 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 su attributi e commenti, vedere Attributi e commenti di localizzazione.

Tipi di carattere di fallback 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"). È possibile specificare la propria preferenza di sostituzione del font creando un proprio font composito e indicando quale font utilizzare per determinati intervalli di codepoint e lingue.

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

Localizzazione della home page di Microsoft

Per localizzare l'applicazione, è possibile seguire gli stessi passaggi dell'esempio Esegui finestra di dialogo. Il file .csv localizzato per l'arabo è disponibile per te nell'Homepage di esempio della Globalizzazione.