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 de noms System.Globalization.
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 personnages
Une référence de caractère fournit l’unité de code UTF16 du caractère Unicode particulier qu’elle représente, soit en décimales, soit en hexadécimales. 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 qu’il a un x devant le nombre hexadécimal.
Ϩ
Codage
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 n’existe et qu’il n’existe pas d’ordre d’octet, l’analyseur est défini par défaut sur UTF-8. UTF-8 et UTF-16 sont les encodages préférés. 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 classe CultureInfo, la valeur de l’attribut de langage doit être l’un des noms de culture prédéfinis par CultureInfo. xml:lang est héréditaire dans l'arborescence d'éléments (selon les règles XML, pas nécessairement à cause de l'héritage des propriétés de dépendance) et sa valeur par défaut est une chaîne vide si elle n'est pas spécifiée explicitement.
L’attribut de langue est très utile pour spécifier des langues régionales. Par exemple, le français possède différentes orthographes, vocabulaire et prononciations en France, au Québec, en Belgique et en Suisse. De plus, le chinois, le japonais et le coréen partagent des points de code en Unicode, mais les formes idéographiques sont différentes et ils utilisent des polices totalement différentes.
L’exemple XAML (Extensible Application Markup Language) suivant utilise l’attribut de langue fr-CA
pour spécifier le 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, GB18030 introduit certains caractères mappés à l’extension chinoise, japonaise et coréenne (CFK) A et B et les paires de substitution, par conséquent, il est entièrement 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 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 actuellement pris en charge :
Arabe
bengali
Dévanâgarî
Cyrillique
Grec
Gujarâtî
Gurmukhi
Hébreu
Scripts idéographiques
kannada
Lao
Latin
Malayalam
Mongolien
Odia
Syriaque
Tamil
Telugu
Thaana
Thaï*
Tibétain
Dans cette version, l’affichage et la modification du texte thaï sont pris en charge ; la séparation des mots ne l’est pas.
Les scripts suivants ne sont actuellement pas pris en charge :
Khmer
Coréen Ancien Hangul
Myanmar
Singhalais
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 permet une prise en charge internationale étendue ainsi que pour les variantes de glyphe typographique.
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. Cela améliore considérablement la lisibilité et offre la possibilité de prendre en charge des documents de style de magazine de haute qualité 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 propriété FlowDirection peut être utilisée pour définir la disposition. Les modèles de direction de flux sont les suivants :
LeftToRight - disposition horizontale pour les langues latines, asiatiques orientales, etc.
RightToLeft - bidirectionnel pour l’arabe, l’hébreu et d'autres langues similaires.
Développement d’applications localisables
Lorsque vous écrivez une application pour la consommation mondiale, vous devez garder à l’esprit que l’application doit être localisable. Les rubriques suivantes indiquent les points à prendre en compte.
Interface utilisateur multilingue
Les interfaces utilisateur multilingues (MUI) sont une prise en charge Microsoft pour changer d’interface utilisateur d’une langue à une autre. Une application WPF utilise le modèle d'assembly pour prendre en charge MUI. Une application contient des assemblies neutres par rapport à la langue ainsi que des assemblies de ressources satellite dépendants de la langue. Le point d’entrée est un .EXE géré dans l'assemblage principal. Le gestionnaire de ressources WPF exploite le gestionnaire de ressources du Framework pour prendre en charge la recherche de ressources et le mécanisme de repli. Plusieurs assemblages satellites de langue fonctionnent avec le même assemblage principal. L'assemblage de ressources chargé dépend du CurrentUICulture du fil d'exécution 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. La forme BAML de fichiers XAML, d’images et d’autres types d’objets de ressources managées est incorporée dans l’assembly de ressources satellite, qui peut être localisé dans d’autres langues ou dans l’assembly principal lorsque la localisation n’est pas nécessaire.
Note
Les applications WPF prennent en charge toutes les ressources FrameworkCLR, notamment les tables de chaînes, les images, etc.
Création 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 les ressources. 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 incluses dans le fichier projet. L’exemple suivant d’un fichier .csproj montre comment procéder.
<Resource Include="data\picture1.jpg"/>
<EmbeddedResource Include="data\stringtable.en-US.restext"/>
Pour utiliser une ressource dans votre application instanciez une ResourceManager et chargez la ressource que vous souhaitez utiliser. L’exemple suivant montre comment procéder.
void OnClick(object sender, RoutedEventArgs e)
{
ResourceManager rm = new ResourceManager ("MySampleApp.data.stringtable",
Assembly.GetExecutingAssembly());
Text1.Text = rm.GetString("Message");
}
Utilisation de ClickOnce avec des applications localisées
ClickOnce est une nouvelle technologie de déploiement Windows Forms qui sera fournie avec Visual Studio 2005. Elle permet l’installation et la mise à niveau des applications web. Lorsqu’une application déployée avec ClickOnce est localisée, elle ne peut être vue que sur 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 du langage neutre. Un développeur d’applications peut éventuellement supprimer des ressources de l’assembly principal et spécifier que les ressources sont disponibles dans un assembly satellite correspondant à une culture spécifique. Pour contrôler ce processus, utilisez le NeutralResourcesLanguageAttribute. Le constructeur de la classe NeutralResourcesLanguageAttribute a deux signatures : l'une accepte un paramètre UltimateResourceFallbackLocation pour spécifier l'emplacement où le ResourceManager doit accéder aux ressources de secours : l'assembly principal ou l'assembly satellite. L’exemple suivant montre comment utiliser l’attribut. Pour l’emplacement de secours ultime, le code fait en sorte que l'ResourceManager recherche les ressources dans le sous-répertoire « de » du répertoire de l’assemblage actuellement en cours d’exécution.
[assembly: NeutralResourcesLanguageAttribute(
"de" , UltimateResourceFallbackLocation.Satellite)]
Voir aussi
.NET Desktop feedback