Globalisation pour Windows Presentation Foundation

Mise à jour : novembre 2007

Cette rubrique présente certains problèmes dont vous devez être conscient lors de l'écriture d'applications Windows Presentation Foundation (WPF) pour le marché international. Les éléments de programmation de la globalisation sont définis dans Microsoft .NET sous System.Globalization.

Cette rubrique comprend les sections suivantes.

  • Globalisation XAML
  • Conception d'une interface utilisateur internationale avec le langage XAML
  • Développement d'applications localisables
  • Utilisation de ClickOnce avec les applications localisées
  • Rubriques connexes

Globalisation XAML

Le langage XAML (Extensible Application Markup Language) est basé sur le langage XML et bénéficie de la prise en charge de la globalisation définie dans la spécification XML. Les sections suivantes décrivent certaines fonctionnalités XAML que vous devez connaître.

Références de caractère

La référence de caractère donne le numéro du caractère Unicode qu'elle représente, sous forme décimale ou hexadécimale. L'exemple suivant présente une référence de caractère décimale.

Ϩ

Ce deuxième exemple illustre une référence de caractère hexadécimale. Notez la présence d'un x devant le nombre hexadécimal.

Ϩ

Codage

Les codages ASCII, Unicode UTF-16 et UTF-8 sont pris en charge par le langage XAML. L'instruction de codage se trouve au début de chaque document XAML. Si aucun attribut de codage 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 codages par défaut. Le codage UTF-7 n'est pas pris en charge. L'exemple suivant montre comment spécifier un codage UTF-8 dans un fichier XAML.

?xml encoding="UTF-8"?

Attribut Language

Le langage XAML utilise xml:lang pour représenter l'attribut de langage d'un élément. Pour bénéficier de la classe CultureInfo, la valeur de l'attribut de langage doit être l'un des noms de culture prédéfinis par la classe CultureInfo. L'attribut de langage xml:lang peut être hérité dans l'arborescence des éléments (par les règles XML, pas nécessairement en raison de l'héritage d'une propriété de dépendance) et sa valeur par défaut est une chaîne vide en cas d'assignation non explicite.

L'attribut de langage est très utile pour spécifier des dialectes. 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. Le chinois, le japonais et le coréen partagent également des points de code Unicode, bien que ces trois langues utilisent des polices et des idéogrammes très différents.

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

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

Unicode

Le langage XAML prend en charge toutes les fonctionnalités Unicode, y compris les substituts. Tant que le jeu de caractères peut être mappé à Unicode, sa prise en charge est assurée. Par exemple, le jeu de caractère 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 la classe StringInfo pour manipuler des chaînes sans chercher à savoir si celles-ci contiennent des paires de substitution ou des caractères de non-espacement.

Conception d'une interface utilisateur internationale avec le langage XAML

Cette section décrit des fonctionnalités d'interface utilisateur (UI) que vous devez garder à l'esprit 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 actuellement pris en charge :

  • Arabe

  • Bengali

  • Devanagari

  • Cyrillique

  • Grec

  • Gujarati

  • Gurmukhi

  • Hébreu

  • Scripts idéographiques

  • Kannada

  • Laotien

  • Latin

  • Malayalam

  • Mongol

  • Oriya

  • Syriaque

  • Tamoul

  • Télougou

  • Thâna

  • 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 actuellement pas pris en charge :

  • Khmer

  • Hangûl (ancien coréen)

  • Birman

  • Sinhala

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

Les polices OpenType permettent de gérer des jeux de glyphes volumineux à l'aide du codage Unicode. Ce codage est largement pris en charge au niveau international, comme les variantes de glyphes typographiques.

Le rendu de texte WPF est généré par la technologie de sous-pixel Microsoft ClearType qui prend en charge l'indépendance vis-à-vis 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 pour prendre en charge des dispositions horizontales, bidirectionnelles et verticales. Dans l'infrastructure de présentation, la propriété FlowDirection 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

Lorsque 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

La prise en charge Microsoft d'interfaces utilisateur multilingues permet d'accéder à différentes langues pour les interfaces utilisateur. Une application WPF utilise le modèle assembly pour prendre en charge les interfaces utilisateur multilingues. 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 des ressources de Framework pour prendre en charge la recherche de ressources et le processus de secours. Les assemblys satellites multilingues fonctionnent avec le même assembly principal. L'assembly de ressources chargé dépend de la propriété CurrentUICulture du thread actuel.

Interface utilisateur localisable

Les applications WPF utilisent le langage XAML pour la définition de leur interface utilisateur. Le langage XAML permet aux développeurs de spécifier une hiérarchie d'objets avec un jeu de propriétés et une logique. Le langage XAML est principalement utilisé pour le développement d'applications WPF, mais il peut également servir à spécifier une hiérarchie d'objets Common Language Runtime (CLR). La plupart des développeurs utilisent le langage XAML pour spécifier l'interface utilisateur de leurs applications et utilisent un langage de programmation tel que C# pour réagir à l'intervention de l'utilisateur.

Du point de vue des ressources, un fichier XAML conçu pour décrire une interface utilisateur dépendante de la langue est un élément de ressource et, par conséquent, son format de distribution final doit être localisable pour prendre en charge différentes langues du monde entier. Le langage XAML ne pouvant pas gérer d'événement, des blocs de code réservés à cette opération sont inclus dans de nombreuses applications XAML. Pour plus d'informations, consultez Vue d'ensemble du langage XAML. Le code est supprimé et compilé dans différents binaires lorsqu'un fichier XAML est représenté sous forme de jeton BAML (Binary XAML). Les fichiers, images et autres types d'objets de ressources managées BAML sont embarqués dans l'assembly des ressources satellites, localisable dans d'autres langues, ou dans l'assembly principal, lorsque la localisation n'est pas requise.

Remarque :

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

Génération d'applications localisables

La localisation est l'adaptation d'une interface utilisateur à différentes cultures. Pour qu'une application WPF soit 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 l'API de gestion des ressources est utilisée pour le chargement du code-behind. Un fichier projet (.proj) est requis pour toute application WPF. Toutes les ressources que vous utilisez dans votre application doivent être incluses dans ce 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, créez une instance ResourceManager et chargez la ressource souhaitée. 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 Microsoft Visual Studio 2005. Cette technologie permet d'installer des applications et de mettre à niveau des applications Web. Lorsqu'une application déployée avec ClickOnce est localisée, elle ne peut être affichée que pour la culture localisée. Par exemple, si une application déployée est localisée en japonais, elle ne peut être affichée que sous la version japonaise de Microsoft Windows et non pas sous sa version anglaise. Cela représente un problème car il est fréquent que des utilisateurs japonais utilisent une version anglaise de Windows.

Pour remédier à cela, l'attribut de secours de langage neutre doit être défini. 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 la classe NeutralResourcesLanguageAttribute. Le constructeur de la classe NeutralResourcesLanguageAttribute a deux signatures, dont une qui utilise un paramètre UltimateResourceFallbackLocation pour spécifier l'emplacement où ResourceManager doit extraire les ressources de secours : assembly principal ou assembly satellite. L'exemple suivant montre comment utiliser cet attribut. Pour l'emplacement de secours ultime, le code indique au ResourceManager qu'il doit rechercher les 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

Concepts

Vue d'ensemble de la globalisation et de la localisation WPF