Condividi tramite


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 nomi System.Globalization.

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 decimale di carattere per la LETTERA COPTICA MAIUSCOLA HORI o 'Ϩ':

Ϩ

Nell'esempio seguente viene illustrato un riferimento di carattere esadecimale. Si noti che ha un x davanti al numero 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 e non esiste alcuna sequenza di byte, il parser utilizza per impostazione predefinita UTF-8. UTF-8 e UTF-16 sono le codifiche preferite. UTF-7 non è supportato. L'esempio seguente illustra come specificare una codifica UTF-8 in un file XAML.

?xml encoding="UTF-8"?

Attributo di lingua

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

L'attributo lingua è molto utile per specificare le lingue regionali. Ad esempio, il francese 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 del linguaggio fr-CA per specificare il 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. Ad esempio, GB18030 introduce alcuni caratteri mappati alle estensioni A e B del cinese, giapponese e coreano (CJK) e alle coppie surrogate, pertanto è completamente supportato. Un'applicazione WPF può usare StringInfo per modificare le stringhe senza comprendere se hanno coppie surrogate 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 la elaborazione predefinita per tutti i sistemi di scrittura supportati da Microsoft .NET Framework.

Sono attualmente supportati gli script seguenti:

  • Arabo

  • Bengali

  • Devanagari

  • Cirillico

  • Greco

  • Gujarati

  • Gurmukhi

  • Ebraico

  • Sistemi di Scrittura Ideografici

  • Kannada

  • Laotiano

  • Latino

  • Malayalam

  • Mongolo

  • Odia

  • Siriaco

  • Tamil

  • Telugu

  • Thaana

  • Tailandese*

  • Tibetano

In questa versione è supportata la visualizzazione e la modifica del testo in lingua thai. La segmentazione delle parole non è supportata.

Gli script seguenti non sono attualmente supportati:

  • Khmer

  • Coreano Antico Hangul

  • 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 ampio supporto internazionale, nonché per le varianti tipografiche del glifo.

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

Layout internazionale

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

  • LeftToRight - Layout orizzontale per l'Asia latina, l'Asia orientale e così via.

  • RightToLeft - bidirezionale per arabo, ebraico e altro ancora.

Sviluppo di applicazioni localizzabili

Quando si scrive un'applicazione per il consumo globale, è necessario tenere presente che l'applicazione deve essere localizzabile. Gli argomenti seguenti illustrano gli aspetti da considerare.

Interfaccia utente multilingue

Multilingual User Interfaces (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 dal linguaggio e assembly di risorse satellite dipendenti dalla lingua. Il punto di ingresso è un .EXE gestito nell'assembly principale. Il caricatore di risorse WPF sfrutta il gestore delle risorse del Framework per supportare la ricerca e il fallback delle risorse. Più assembly satellite del linguaggio funzionano con lo stesso assembly principale. L'assembly di risorse caricato dipende dal 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 di file XAML, immagini e altri tipi di oggetti di risorse gestite viene incorporato 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 culture diverse. Per rendere localizzabile un'applicazione WPF, gli sviluppatori devono compilare tutte le risorse localizzabili in un assembly di risorse. L'assembly di risorse è localizzato in diverse lingue e il codice sottostante utilizza 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. Nell'esempio seguente di un file con estensione csproj viene illustrato come eseguire questa operazione.

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

Per utilizzare una risorsa nell'applicazione, istituire un'istanza di un ResourceManager e caricare la risorsa desiderata. Nell'esempio seguente viene illustrato come eseguire questa operazione.

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 Forms che verrà fornita con Visual Studio 2005. Consente l'installazione e l'aggiornamento delle applicazioni Web. Quando un'applicazione distribuita con ClickOnce è localizzata, può essere visualizzata solo nella cultura localizzata. 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.

La soluzione a questo problema consiste nell'impostare l'attributo di fallback della lingua neutra. Uno sviluppatore di applicazioni può rimuovere facoltativamente le risorse dall'assembly principale e specificare che possono essere trovate in un assembly satellite corrispondente a una cultura specifica. Per controllare questo processo, utilizzare il NeutralResourcesLanguageAttribute. Il costruttore della classe NeutralResourcesLanguageAttribute ha due definizioni, una che accetta un parametro UltimateResourceFallbackLocation per specificare la posizione in cui il ResourceManager deve estrarre le risorse di fallback: assembly principale o assembly satellite. Nell'esempio seguente viene illustrato come usare l'attributo . Per la directory di fallback finale, il codice fa sì che il ResourceManager cerchi le risorse nella sottodirectory "de" della directory dell'assembly attualmente eseguito.

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

Vedere anche