Condividi tramite


Cenni preliminari sulla globalizzazione e localizzazione WPF

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 da riga di comando illustrato in 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'UI basata su WPF, si consiglia di implementare le seguenti procedure consigliate:

  • Scrivere l'UI in XAML; evitare di creare l'UI tramite codice. Quando si crea l'UI 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'UI.

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

  • Abilitare 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. Vedere Globalizzazione per WPF per ulteriori informazioni sull'impostazione dell'Gestione di xml:lang in XAML.

  • 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 (la pagina potrebbe essere in inglese).

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 tra lo sviluppo e la localizzazione. Le proprietà Uid semplificano la localizzazione delle nuove modifiche di sviluppo. L'aggiunta manuale di proprietà Uid a un'UI 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 il modulo BALM di XAML, il quale fornisce diversi vantaggi:

  • È possibile effettuare la localizzazione dopo la compilazione.

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

  • È possibile convalidare elementi di origine e semantica originali in fase di compilazione, poiché il modulo BALM di XAML è 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 APIs di localizzazione supportano l'estrazione da tale assembly.

  • Quando il file viene compilato nella build, XAML viene convertito nel modulo BAML di XAML. 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'UI nel codice XAML originale vengono estratti dal modulo BAML di XAML in coppie chiave/valore utilizzando le APIs 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 valori x:Uid inseriti dallo sviluppatore nel codice XAML originale. Questi valori x:Uid consentono all'API di tenere traccia e di unire le modifiche eseguite dallo sviluppatore e il localizzatore durante la localizzazione. Ad esempio, se lo sviluppatore modifica l'UI 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 sul modulo BAML di XAML. 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 della lingua di sistema 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

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.

(Stati Uniti):

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.

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 APIs di localizzazione WPF.

Tali proprietà vengono utilizzate dalle APIs di localizzazione di WPF per tenere traccia delle modifiche tra lo sviluppo e la localizzazione dell'user interface (UI). Le proprietà Uid consentono di unire una versione più recente dell'UI a una localizzazione meno recente dell'UI. Per aggiungere una proprietà Uid, è necessario eseguire msbuild /t:updateuid RunDialog.csproj in una shell dei comandi. 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'UI 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'UI collocati in ogni cella, dovuto alla localizzazione, non comporta alcun problema.

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

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

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

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'UI. 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 un valore 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 (la pagina potrebbe essere in inglese). 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

Button

OK

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

Button

Cancel

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

Button

Browse...

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

ComboBox

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

Text

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

Text

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

Button

OK

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

Button

Abbrechen

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

Button

Durchsuchen…

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

ComboBox

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

Text

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

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

Text

Ö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 all'elemento 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 che produce questa grafica vedere Esempio di globalizzazione di una homepage (la pagina potrebbe essere in inglese).

(Stati Uniti):

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'UI 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:

<Page x:Uid="Page_1" x:Class="MicrosoftSaudiArabiaHomepage.Homepage"
    xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="https://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 proprietà FlowDirection in Page. Se si modifica questa proprietà in RightToLeft, verrà modificata anche la proprietà FlowDirection dell'elemento Page e dei relativi elementi figlio in modo da invertire il layout di questa UI per applicare l'orientamento da destra a sinistra, normalmente utilizzato da un utente arabo. Per eseguire l'override del comportamento di ereditarietà, specificare un oggetto FlowDirection esplicito in qualsiasi elemento. La proprietà FlowDirection è disponibile in qualsiasi elemento FrameworkElement o elemento correlato al documento e include un valore implicito LeftToRight.

Si noti come anche la sfumatura di sfondo sia stata invertita correttamente quando è stato modificato l'elemento FlowDirection 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 UI 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.

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

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

Text

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:

<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 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 Attributes. 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 seguente 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 offre un'enumerazione di categorie di interfaccia utente comuni (LocalizationCategory) che è possibile utilizzare per fornire maggiore contesto ai localizzatori. 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. Di seguito è riportato un 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 homepage (la pagina potrebbe essere in inglese).