Globalizzazione per WPF

In questo argomento vengono illustrati i problemi da tenere presenti durante la scrittura di applicazioni Windows Presentation Foundation (WPF) per il mercato globale. Gli elementi di programmazione della globalizzazione sono definiti in .NET nello spazio dei System.Globalization nomi .

Globalizzazione XAML

Extensible Application Markup Language (XAML) si basa su XML e sfrutta il supporto per la globalizzazione definito nella specifica XML. Le sezioni seguenti descrivono alcune funzionalità XAML di cui tenere conto.

Riferimenti ai caratteri

Un riferimento di carattere fornisce l'unità di codice UTF16 del carattere Unicode specifico rappresentato, in formato decimale o esadecimale. L'esempio seguente mostra un riferimento di carattere decimale per la LETTERA MAIUSCOLA COPTIC HORI o 'Ϩ':

Ϩ

Nell'esempio seguente viene illustrato un riferimento di carattere esadecimale. Si noti la presenza di x davanti al carattere esadecimale.

Ϩ

Codifica

La codifica supportata da XAML è ASCII, Unicode UTF-16 e UTF-8. L'istruzione di codifica si trova all'inizio del documento XAML. Se non esiste alcun attributo di codifica né un ordine dei byte, il parser userà il valore predefinito UTF-8. UTF-8 e UTF-16 sono i tipi di codifica preferiti. UTF-7 non è supportato. L'esempio seguente illustra come specificare una codifica UTF-8 in un file XAML.

?xml encoding="UTF-8"?

Attributo Language

XAML usa xml:lang per rappresentare l'attributo del linguaggio di un elemento. Per sfruttare i vantaggi della CultureInfo classe , il valore dell'attributo del linguaggio deve essere uno dei nomi delle impostazioni cultura predefiniti da CultureInfo. xml:lang è ereditabile nell'albero di elementi (in base alle regole XML, non necessariamente a causa dell'ereditarietà della proprietà di dipendenza) e il valore predefinito è una stringa vuota se non viene assegnato in modo esplicito.

L'attributo language è molto utile per specificare le lingue internazionali. Il francese, ad esempio, ha ortografia, vocabolario e pronuncia diversi in Francia, Quebec, Belgio e Svizzera. Anche il cinese, il giapponese e il coreano condividono punti di codice in Unicode, ma le forme ideografiche sono diverse e usano tipi di carattere completamente diversi.

Nell'esempio xaml (Extensible Application Markup Language) seguente viene usato l'attributo language per specificare il fr-CA francese canadese.

<TextBlock xml:lang="fr-CA">Découvrir la France</TextBlock>

Unicode

XAML supporta tutte le funzionalità Unicode, inclusi i surrogati. Se il set di caratteri può essere mappato a Unicode, è supportato. GB18030, ad esempio, introduce alcuni caratteri con mapping all'estensione A e B per cinese, giapponese e coreano e le coppie di surrogati, quindi è completamente supportato. Un'applicazione WPF può usare StringInfo per modificare le stringhe senza comprendere se hanno coppie di surrogati o caratteri combinati.

Progettazione di un'interfaccia utente internazionale con XAML

Questa sezione descrive le funzionalità dell'interfaccia utente che è consigliabile prendere in considerazione durante la scrittura di un'applicazione.

Testo internazionale

WPF include l'elaborazione predefinita per tutti i sistemi di scrittura supportati da Microsoft .NET Framework.

Sono attualmente supportati gli script seguenti:

  • arabo

  • Bengalese

  • Devanagari

  • Cirillico

  • Greco

  • Gujarati

  • Gurmukhi

  • Ebraico

  • Script ideografici

  • Kannada

  • Lao

  • Latino

  • Malayalam

  • Mongolo

  • Odia

  • Siriaco

  • Tamil

  • Telugu

  • Thaana

  • Thailandese*

  • Tibetano

*In questa versione sono supportate la visualizzazione e la modifica del testo in thailandese. L'interruzione parole non è supportata.

Non sono attualmente supportati gli script seguenti:

  • Khmer

  • Antico hangul coreano

  • Myanmar

  • Sinhala

Tutti i motori di sistema di scrittura supportano i tipi di carattere OpenType. I tipi di carattere OpenType possono includere le tabelle di layout OpenType che consentono ai creatori di tipi di carattere di progettare tipi di carattere internazionali e di fascia alta migliori. Le tabelle di layout dei tipi di carattere OpenType contengono informazioni sulle sostituzioni dei glifi, il posizionamento del glifo, la giustificazione e il posizionamento di base, consentendo alle applicazioni di elaborazione del testo di migliorare il layout del testo.

I tipi di carattere OpenType consentono la gestione di set di glifi di grandi dimensioni usando la codifica Unicode. Tale codifica consente un esteso supporto internazionale, oltre alle varianti dei glifi tipografici.

Il rendering del testo WPF è basato sulla tecnologia sub-pixel Microsoft ClearType che supporta l'indipendenza della risoluzione. Questo migliora considerevolmente la leggibilità e consente di supportare documenti in stile rivista di qualità elevata per tutti gli script.

Layout internazionale

WPF offre un modo molto pratico per supportare layout orizzontali, bidirezionali e verticali. Nel framework di presentazione la FlowDirection proprietà può essere usata per definire il layout. I modelli di direzione del flusso sono:

  • LeftToRight: layout orizzontale per latino, lingue dell'Asia orientale e così via.

  • RightToLeft: bidirezionale per arabo, ebraico e così via.

Sviluppo di applicazioni localizzabili

Quando si scrive un'applicazione per il consumo globale, è opportuno ricordare che l'applicazione deve essere localizzabile. Gli argomenti seguenti illustrano alcune importanti considerazioni.

Interfaccia utente multilingue

interfaccia utente multilingue (MUI) è un supporto Microsoft per il passaggio di interfacce utente da una lingua a un'altra. Un'applicazione WPF usa il modello di assembly per supportare MUI. Un'applicazione contiene assembly indipendenti dalla lingua, ma anche assembly di risorse satellite dipendenti dalla lingua. Il punto di ingresso è un file EXE gestito nell'assembly principale. Il caricatore di risorse WPF sfrutta il gestore risorse del framework per supportare la ricerca e il fallback delle risorse. Gli assembly satellite di più lingue usano lo stesso assembly principale. L'assembly di risorse caricato dipende dall'oggetto CurrentUICulture del thread corrente.

Interfaccia utente localizzabile

Le applicazioni WPF usano XAML per definire l'interfaccia utente. XAML consente agli sviluppatori di specificare una gerarchia di oggetti con un set di proprietà e logica. L'uso principale di XAML consiste nello sviluppare applicazioni WPF, ma può essere usato per specificare una gerarchia di qualsiasi oggetto CLR (Common Language Runtime). La maggior parte degli sviluppatori usa XAML per specificare l'interfaccia utente dell'applicazione e usare un linguaggio di programmazione come C# per reagire all'interazione dell'utente.

Dal punto di vista delle risorse, un'interfaccia utente è un elemento risorsa e pertanto il formato di distribuzione finale deve essere localizzabile per supportare le lingue internazionali. Poiché XAML non è in grado di gestire eventi, molte applicazioni XAML contengono blocchi di codice per eseguire questa operazione. Per altre informazioni, vedere XAML in WPF. Il codice viene rimosso e compilato in file binari diversi quando un file XAML viene tokenizzato nel formato BAML di XAML. Il formato BAML dei file XAML, le immagini e altri tipi di oggetti risorsa gestita vengono incorporati nell'assembly di risorse satellite, che può essere localizzato in altre lingue, o nell'assembly principale quando la localizzazione non è necessaria.

Nota

Le applicazioni WPF supportano tutte le risorse FrameworkCLR, incluse tabelle di stringhe, immagini e così via.

Compilazione di applicazioni localizzabili

Localizzazione significa adattare un'interfaccia utente a impostazioni cultura diverse. Per rendere localizzabile un'applicazione WPF, gli sviluppatori devono compilare tutte le risorse localizzabili in un assembly di risorse. L'assembly di risorse viene localizzato in linguaggi diversi e il code-behind usa l'API di gestione delle risorse per il caricamento. Uno dei file necessari per un'applicazione WPF è un file di progetto (con estensione proj). Tutte le risorse usate nell'applicazione devono essere incluse nel file di progetto. L'esempio seguente da un file con estensione csproj illustra come effettuare questa operazione.

<Resource Include="data\picture1.jpg"/>
<EmbeddedResource Include="data\stringtable.en-US.restext"/>

Per usare una risorsa nell'applicazione creare un'istanza ResourceManager di e caricare la risorsa che si vuole usare. Nell'esempio riportato di seguito viene illustrato come procedere.

void OnClick(object sender, RoutedEventArgs e)
{
  ResourceManager rm = new ResourceManager ("MySampleApp.data.stringtable",
       Assembly.GetExecutingAssembly());
  Text1.Text = rm.GetString("Message");
}

Uso di ClickOnce con applicazioni localizzate

ClickOnce è una nuova tecnologia di distribuzione Windows Form che verrà fornito con Visual Studio 2005. che consente l'installazione e l'aggiornamento di applicazioni Web. Quando un'applicazione distribuita con ClickOnce è localizzata, può essere visualizzata solo nelle impostazioni cultura localizzate. Ad esempio, se un'applicazione distribuita viene localizzata in giapponese, può essere visualizzata solo in Microsoft Windows giapponese non in Windows in lingua inglese. Questo presenta un problema perché è uno scenario comune per gli utenti giapponesi per eseguire una versione inglese di Windows.

Per risolvere il problema, è necessario impostare l'attributo di fallback su una lingua neutra. Uno sviluppatore di applicazioni può facoltativamente rimuovere risorse dall'assembly principale e specificare che le risorse sono disponibili in un assembly satellite corrispondente a impostazioni cultura specifiche. Per controllare questo processo, usare .NeutralResourcesLanguageAttribute Il costruttore della NeutralResourcesLanguageAttribute classe ha due firme, una che accetta un UltimateResourceFallbackLocation parametro per specificare il percorso in cui ResourceManager deve estrarre le risorse di fallback: assembly principale o assembly satellite. Nell'esempio seguente viene illustrato l'utilizzo dell'attributo . Per il percorso di fallback finale, il codice determina ResourceManager la ricerca delle risorse nella sottodirectory "de" della directory dell'assembly attualmente in esecuzione.

[assembly: NeutralResourcesLanguageAttribute(
    "de" , UltimateResourceFallbackLocation.Satellite)]

Vedi anche