Globalisation pour WPF

Cette rubrique présente les problèmes que vous devez connaître lors de l’écriture d’applications WPF (Windows Presentation Foundation) pour le marché mondial. Les éléments de programmation de globalisation sont définis dans .NET dans l’espace System.Globalization de noms.

Globalisation XAML

Le langage XAML (Extensible Application Markup Language) est basé sur XML et tire parti de la prise en charge de la globalisation définie dans la spécification XML. Les sections suivantes décrivent certaines fonctionnalités XAML dont vous devez être conscient.

Références de caractères

Une référence de caractère donne à l’unité de code UTF16 du caractère Unicode particulier qu’elle représente, en décimale ou hexadécimale. L’exemple suivant montre une référence de caractère décimal pour la LETTRE MAJUSCULE COPTE HORI, ou « Ϩ » :

Ϩ

L’exemple suivant montre une référence de caractère hexadécimal. Notez la présence d’un x devant le nombre hexadécimal.

Ϩ

Encodage

L’encodage pris en charge par XAML est ASCII, Unicode UTF-16 et UTF-8. L’instruction d’encodage se trouve au début du document XAML. Si aucun attribut d’encodage ni ordre d’octets n’existe, la valeur UTF-8 est affectée par défaut à l’analyseur. UTF-8 et UTF-16 sont les encodages par défaut. UTF-7 n’est pas pris en charge. L’exemple suivant montre comment spécifier un encodage UTF-8 dans un fichier XAML.

?xml encoding="UTF-8"?

Attribut de langue

XAML utilise xml :lang pour représenter l’attribut de langage d’un élément. Pour tirer parti de la CultureInfo classe, la valeur de l’attribut de langage doit être l’un des noms de culture prédéfinis par CultureInfo. xml:lang peut être hérité dans l’arborescence d’éléments (par les règles XML, pas nécessairement à cause de l’héritage de propriétés de dépendance) et sa valeur par défaut est une chaîne vide s’il n’est pas assigné explicitement.

L’attribut de langue est très utile pour spécifier des langues régionales. Par exemple, le français présente des différences orthographiques, lexicales et phonologiques en fonction de la zone géographique dans laquelle il est utilisé : en France, au Québec, en Belgique ou en Suisse. En outre, les points de code chinois, japonais et coréen partagent des points de code en Unicode, mais les formes idéographiques sont différentes et utilisent des polices totalement différentes.

L’exemple XAML (Extensible Application Markup Language) suivant utilise l’attribut de langage pour spécifier le fr-CA Français canadien.

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

Unicode

XAML prend en charge toutes les fonctionnalités Unicode, y compris les substitutions. Tant que le jeu de caractères peut être mappé à Unicode, il est pris en charge. Par exemple, le jeu de caractères GB18030 comprend quelques caractères mappés aux extensions A et B et aux paires de substitution du chinois, du japonais et du coréen (CFK) ; par conséquent, il est totalement pris en charge. Une application WPF peut utiliser StringInfo pour manipuler des chaînes sans comprendre s’il s’agit de paires de substitution ou de combinaison de caractères.

Conception d’une interface utilisateur internationale avec le langage XAML

Cette section décrit les fonctionnalités d’interface utilisateur que vous devez prendre en compte lors de l’écriture d’une application.

Texte international

WPF inclut un traitement intégré pour tous les systèmes d’écriture pris en charge par Microsoft .NET Framework.

Les scripts suivants sont pris en charge :

  • Arabe

  • Bengali

  • Dévanâgarî

  • Cyrillique

  • Grec

  • Goudjrati

  • Gurmukhi

  • Hébreu

  • Scripts idéographiques

  • Kannada

  • Lao

  • Latin

  • Malayalam

  • Mongol

  • Odia

  • Syriaque

  • Tamoul

  • Télougou

  • Tana

  • Thaï*

  • Tibétain

*Cette version prend en charge l’affichage et la modification de texte thaïlandais, mais pas la césure de mots.

Les scripts suivants ne sont pas pris en charge :

  • Khmer

  • Hangûl (ancien coréen)

  • Myanmar

  • Cingalais

Tous les moteurs système d’écriture prennent en charge les polices OpenType. Les polices OpenType peuvent inclure les tables de disposition OpenType qui permettent aux créateurs de polices de concevoir de meilleures polices typographiques internationales et haut de gamme. Les tables de disposition de police OpenType contiennent des informations sur les substitutions de glyphe, le positionnement du glyphe, la justification et le positionnement de la ligne de base, ce qui permet aux applications de traitement de texte d’améliorer la disposition du texte.

Les polices OpenType permettent la gestion des jeux de glyphes volumineux à l’aide de l’encodage Unicode. Cet encodage est largement pris en charge au niveau international, comme les variantes de glyphes typographiques.

Le rendu de texte WPF est alimenté par la technologie de sous-pixel Microsoft ClearType qui prend en charge l’indépendance de la résolution. La lisibilité est ainsi considérablement améliorée et les documents haute qualité de style magazine peuvent être pris en charge pour tous les scripts.

Disposition internationale

WPF offre un moyen très pratique de prendre en charge les dispositions horizontales, bidirectionnelles et verticales. Dans l’infrastructure de présentation, la FlowDirection propriété peut être utilisée pour définir la disposition. Les modèles de sens du déroulement sont les suivants :

  • LeftToRight : disposition horizontale pour le latin, les langues d’Asie orientale, etc.

  • RightToLeft : disposition bidirectionnelle pour l’arabe, l’hébreu, etc.

Développement d’applications localisables

Quand vous écrivez une application destinée à être utilisée dans le monde entier, vous ne devez pas oublier que cette application doit être localisable. Les rubriques suivantes signalent certains éléments à prendre en compte.

Interface utilisateur multilingue

interface utilisateur multilingue s (MUI) est une prise en charge Microsoft pour basculer les interfaces utilisateur d’une langue vers une autre. Une application WPF utilise le modèle d’assembly pour prendre en charge muI. Une application contient des assemblys indépendants de la langue ainsi que des assemblys de ressources satellites dépendants de la langue. Le point d’entrée est un .EXE managé dans l’assembly principal. Le chargeur de ressources WPF tire parti du gestionnaire de ressources du Framework pour prendre en charge la recherche de ressources et la secours. Les assemblys satellites multilingues fonctionnent avec le même assembly principal. L’assembly de ressources chargé dépend du CurrentUICulture thread actuel.

Interface utilisateur localisable

Les applications WPF utilisent XAML pour définir leur interface utilisateur. XAML permet aux développeurs de spécifier une hiérarchie d’objets avec un ensemble de propriétés et de logique. L’utilisation principale de XAML consiste à développer des applications WPF, mais elle peut être utilisée pour spécifier une hiérarchie d’objets CLR (Common Language Runtime). La plupart des développeurs utilisent XAML pour spécifier l’interface utilisateur de leur application et utiliser un langage de programmation tel que C# pour réagir à l’interaction utilisateur.

D’un point de vue de ressource, une interface utilisateur est un élément de ressource et, par conséquent, son format de distribution final doit être localisable pour prendre en charge les langues internationales. Comme XAML ne peut pas gérer les événements, de nombreuses applications XAML contiennent des blocs de code pour ce faire. Pour plus d’informations, consultez XAML dans WPF. Le code est supprimé et compilé dans différents fichiers binaires lorsqu’un fichier XAML est tokenisé dans la forme BAML de XAML. Le formulaire BAML des fichiers, des images et d’autres types d’objets de ressources managées XAML est incorporé dans l’assembly des ressources satellites, pouvant être localisé dans d’autres langues, ou dans l’assembly principal, quand la localisation n’est pas nécessaire.

Remarque

Les applications WPF prennent en charge toutes les ressources FrameworkCLR, notamment les tables de chaînes, les images, etc.

Génération d’applications localisables

La localisation consiste à adapter une interface utilisateur à différentes cultures. Pour rendre une application WPF localisable, les développeurs doivent générer toutes les ressources localisables dans un assembly de ressources. L’assembly de ressources est localisé dans différentes langues et le code-behind utilise l’API de gestion des ressources pour charger. L’un des fichiers requis pour une application WPF est un fichier projet (.proj). Toutes les ressources que vous utilisez dans votre application doivent être comprises dans le fichier projet. Cette opération est illustrée dans l’exemple suivant, à partir d’un fichier .csproj.

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

Pour utiliser une ressource dans votre application instanciez une ResourceManager ressource et chargez la ressource que vous souhaitez utiliser. L'exemple suivant illustre la procédure à suivre pour réaliser cette opération.

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

Utilisation de ClickOnce avec les applications localisées

ClickOnce est une nouvelle technologie de déploiement Windows Forms qui sera fournie avec Visual Studio 2005. Cette technologie permet d’installer des applications et de mettre à niveau des applications web. Quand une application déployée avec ClickOnce est localisée, elle ne peut être affichée que sous la culture localisée. Par exemple, si une application déployée est localisée en japonais, elle ne peut être consultée que sur Microsoft Windows japonais et non sur Windows anglais. Cela pose un problème, car il s’agit d’un scénario courant pour que les utilisateurs japonais exécutent une version anglaise de Windows.

La solution à ce problème consiste à définir l’attribut de secours de langue neutre. Un développeur d’applications peut également supprimer des ressources de l’assembly principal pour les placer dans un assembly satellite correspondant à une culture spécifique. Pour contrôler ce processus, utilisez le NeutralResourcesLanguageAttribute. Le constructeur de la NeutralResourcesLanguageAttribute classe a deux signatures, une qui prend un UltimateResourceFallbackLocation paramètre pour spécifier l’emplacement où il ResourceManager doit extraire les ressources de secours : assembly principal ou assembly satellite. L'exemple suivant montre comment utiliser l'attribut . Pour l’emplacement de secours ultime, le code entraîne la ResourceManager recherche des ressources dans le sous-répertoire « de » du répertoire de l’assembly en cours d’exécution.

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

Voir aussi