Vue d’ensemble de la globalisation et de la localisation WPFWPF Globalization and Localization Overview

Quand vous limitez la disponibilité de votre produit à une seule langue, vous limitez votre clientèle potentielle à une fraction des 6,5 milliards de personnes qui constituent la population mondiale.When you limit your product's availability to only one language, you limit your potential customer base to a fraction of our world’s 6.5 billion population. Si vous voulez que vos applications atteignent une audience mondiale, la localisation est le meilleur moyen, et le plus rentable, pour que votre produit atteigne plus de clients.If you want your applications to reach a global audience, cost-effective localization of your product is one of the best and most economical ways to reach more customers.

Cette vue d’ensemble présente la globalisation et la localisation dans Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF).This overview introduces globalization and localization in Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF). La globalisation consiste à concevoir et à développer des applications qui s’exécutent dans plusieurs endroits.Globalization is the design and development of applications that perform in multiple locations. Par exemple, la globalisation prend en charge des interfaces utilisateur localisées et des données régionales pour les utilisateurs de différentes cultures.For example, globalization supports localized user interfaces and regional data for users in different cultures. WPFWPF fournit des fonctionnalités de conception globalisées, notamment la disposition automatique, les assemblys satellites, les attributs localisés et les commentaires.provides globalized design features, including automatic layout, satellite assemblies, and localized attributes and commenting.

La localisation est la traduction des ressources d’une application dans les versions localisées pour des cultures spécifiques prises en charge par l’application.Localization is the translation of application resources into localized versions for the specific cultures that the application supports. Lorsque vous localisez dans WPFWPF, vous utilisez les API de l’espace de noms System.Windows.Markup.Localizer.When you localize in WPFWPF, you use the APIs in the System.Windows.Markup.Localizer namespace. Ces API alimentent l’exemple d’outil de ligne de commande de l' outil LocBaml .These APIs power the LocBaml Tool Sample command-line tool. Pour plus d’informations sur la génération et l’utilisation de LocBaml, consultez localiser une application.For information about how to build and use LocBaml, see Localize an Application.

Bonnes pratiques pour la globalisation et la localisation dans WPFBest Practices for Globalization and Localization in WPF

Vous pouvez tirer le meilleur parti des fonctionnalités de globalisation et de localisation intégrées à WPFWPF en suivant les conseils relatifs à la conception et à la localisation de l’interface utilisateur fournis par cette section.You can make the most of the globalization and localization functionality that is built into WPFWPF by following the UI design and localization-related tips that this section provides.

Bonnes pratiques pour la conception de l’interface utilisateur WPFBest Practices for WPF UI Design

Lorsque vous concevez une Interface utilisateurUIbasée sur WPFWPF, envisagez d’implémenter ces meilleures pratiques :When you design a WPFWPF–based Interface utilisateurUI, consider implementing these best practices:

  • Écrivez votre Interface utilisateurUI dans XAMLXAML; Évitez de créer des Interface utilisateurUI dans le code.Write your Interface utilisateurUI in XAMLXAML; avoid creating Interface utilisateurUI in code. Lorsque vous créez votre Interface utilisateurUI à l’aide de XAMLXAML, vous l’exposez via des API de localisation intégrées.When you create your Interface utilisateurUI by using XAMLXAML, you expose it through built-in localization APIs.

  • Évitez d’utiliser des positions absolues et des tailles fixes pour disposer le contenu ; Utilisez plutôt le dimensionnement relatif ou automatique.Avoid using absolute positions and fixed sizes to lay out content; instead, use relative or automatic sizing.

    • Utilisez SizeToContent et conservez les largeurs et hauteurs définis sur Auto.Use SizeToContent and keep widths and heights set to Auto.

    • Évitez d’utiliser des Canvas pour disposer Interface utilisateurUIs.Avoid using Canvas to lay out Interface utilisateurUIs.

    • Utilisez Grid et sa fonctionnalité de partage de taille.Use Grid and its size-sharing feature.

  • Prévoyez de l’espace supplémentaire dans les marges, car le texte localisé nécessite souvent plus d’espace.Provide extra space in margins because localized text often requires more space. Cet espace supplémentaire permet d’accepter les caractères qui dépasseraient.Extra space allows for possible overhanging characters.

  • Activez TextWrapping sur TextBlock pour éviter le découpage.Enable TextWrapping on TextBlock to avoid clipping.

  • Définissez l’attribut xml:lang .Set the xml:lang attribute. Cet attribut décrit la culture d’un élément spécifique et de ses éléments enfants.This attribute describes the culture of a specific element and its child elements. La valeur de cette propriété modifie le comportement de plusieurs fonctionnalités dans WPFWPF.The value of this property changes the behavior of several features in WPFWPF. Par exemple, elle change le comportement de la coupure des mots, la vérification orthographique, la substitution des nombres, la mise en forme des scripts complexes et la police de substitution.For example, it changes the behavior of hyphenation, spell checking, number substitution, complex script shaping, and font fallback. Pour plus d’informations sur la définition de la gestion XML : lang en XAML,consultez globalisation pour WPF .See Globalization for WPF for more information about setting the xml:lang Handling in XAML.

  • Créez une police composite personnalisée pour obtenir un meilleur contrôle des polices utilisées dans différentes langues.Create a customized composite font to obtain better control of fonts that are used for different languages. Par défaut, WPFWPF utilise la police GlobalUserInterface. composite dans votre répertoire Windows/Fonts.By default, WPFWPF uses the GlobalUserInterface.composite font in your Windows\Fonts directory.

  • Lorsque vous créez des applications de navigation qui peuvent être localisées dans une culture qui présente du texte dans un format de droite à gauche, définissez explicitement la FlowDirection de chaque page pour vous assurer que la page n’hérite pas FlowDirection de la NavigationWindow.When you create navigation applications that may be localized in a culture that presents text in a right-to-left format, explicitly set the FlowDirection of every page to ensure the page does not inherit FlowDirection from the NavigationWindow.

  • Lorsque vous créez des applications de navigation autonomes hébergées en dehors d’un navigateur, définissez le StartupUri de votre application initiale sur un NavigationWindow plutôt que sur une page (par exemple, <Application StartupUri="NavigationWindow.xaml">).When you create stand-alone navigation applications that are hosted outside a browser, set the StartupUri for your initial application to a NavigationWindow instead of to a page (for example, <Application StartupUri="NavigationWindow.xaml">). Cette conception vous permet de modifier la FlowDirection de la fenêtre et de la barre de navigation.This design enables you to change the FlowDirection of the Window and the navigation bar. Pour plus d’informations et un exemple, consultez exemple de page d’accueil de globalisation.For more information and an example, see Globalization Homepage Sample.

Bonnes pratiques pour la localisation WPFBest Practices for WPF Localization

Lorsque vous localisez des applications basées sur des WPFWPF, envisagez d’implémenter ces meilleures pratiques :When you localize WPFWPF–based applications, consider implementing these best practices:

  • Utilisez les commentaires de localisation pour fournir un contexte supplémentaire aux localisateurs.Use localization comments to provide extra context for localizers.

  • Utilisez les attributs de localisation pour contrôler la localisation au lieu d’omettre de manière sélective les propriétés de Uid sur les éléments.Use localization attributes to control localization instead of selectively omitting Uid properties on elements. Pour plus d’informations , consultez attributs et commentaires de localisation .See Localization Attributes and Comments for more information.

  • Utilisez msbuild -t:updateuid et -t:checkuid pour ajouter et vérifier Uid propriétés de votre XAMLXAML.Use msbuild -t:updateuid and -t:checkuid to add and check Uid properties in your XAMLXAML. Utilisez Uid propriétés pour suivre les modifications entre le développement et la localisation.Use Uid properties to track changes between development and localization. les propriétés de Uid vous aident à localiser de nouvelles modifications de développement.Uid properties help you localize new development changes. Si vous ajoutez manuellement des propriétés de Uid à un Interface utilisateurUI, la tâche est généralement fastidieuse et moins précise.If you manually add Uid properties to a Interface utilisateurUI, the task is typically tedious and less accurate.

    • Ne modifiez pas ou ne modifiez pas Uid propriétés une fois que vous avez commencé la localisation.Do not edit or change Uid properties after you begin localization.

    • N’utilisez pas de propriétés de Uid dupliquées (souvenez-vous de ce Conseil quand vous utilisez la commande copier-coller).Do not use duplicate Uid properties (remember this tip when you use the copy-and-paste command).

    • Définissez l’emplacement du UltimateResourceFallback dans AssemblyInfo. * pour spécifier la langue appropriée pour le secours (par exemple, [assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]).Set the UltimateResourceFallback location in AssemblyInfo.* to specify the appropriate language for fallback (for example, [assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]).

      Si vous décidez d’inclure votre langue source dans l’assembly principal en omettant la balise <UICulture> dans votre fichier projet, définissez l’emplacement du UltimateResourceFallback en tant qu’assembly principal au lieu du satellite (par exemple, [assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.MainAssembly)]).If you decide to include your source language in the main assembly by omitting the <UICulture> tag in your project file, set the UltimateResourceFallback location as the main assembly instead of the satellite (for example, [assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.MainAssembly)]).

Localiser une application WPFLocalize a WPF Application

Lorsque vous localisez une application WPFWPF, vous avez plusieurs options.When you localize a WPFWPF application, you have several options. Par exemple, vous pouvez lier les ressources localisables dans votre application à un fichier XML, stocker du texte localisable dans les tables resx ou demander à votre Localisateur d’utiliser langage XAML (eXtensible Application Markup Language)Extensible Application Markup Language (XAML) fichiers.For example, you can bind the localizable resources in your application to an XML file, store localizable text in resx tables, or have your localizer use langage XAML (eXtensible Application Markup Language)Extensible Application Markup Language (XAML) files. Cette section décrit un flux de travail de localisation qui utilise le formulaire BAML de XAML, qui offre plusieurs avantages :This section describes a localization workflow that uses the BAML form of XAML, which provides several benefits:

  • Vous pouvez localiser une fois que vous avez créé.You can localize after you build.

  • Vous pouvez mettre à jour vers une version plus récente de la forme BAML de XAML avec les localisations d’une version antérieure du formulaire BAML de XAML afin que vous puissiez localiser en même temps que vous développez.You can update to a newer version of the BAML form of XAML with localizations from an older version of the BAML form of XAML so that you can localize at the same time that you develop.

  • Vous pouvez valider les éléments et la sémantique de la source d’origine au moment de la compilation, car la forme BAML de XAML est la forme compilée de XAMLXAML.You can validate original source elements and semantics at compile time because the BAML form of XAML is the compiled form of XAMLXAML.

Processus de génération de la localisationLocalization Build Process

Lorsque vous développez une application WPFWPF, le processus de génération de la localisation est le suivant :When you develop a WPFWPF application, the build process for localization is as follows:

  • Le développeur crée et globalise l’application WPFWPF.The developer creates and globalizes the WPFWPF application. Dans le fichier projet, le développeur définit <UICulture>en-US</UICulture> afin que, lorsque l’application est compilée, un assembly principal indépendant du langage soit généré.In the project file the developer sets <UICulture>en-US</UICulture> so that when the application is compiled, a language-neutral main assembly is generated. Cet assembly a un fichier .resources.dll satellite qui contient toutes les ressources localisables.This assembly has a satellite .resources.dll file that contains all the localizable resources. Si vous le souhaitez, vous pouvez conserver la langue source dans l’assembly principal, car nos API de localisation prennent en charge l’extraction à partir de l’assembly principal.Optionally, you can keep the source language in the main assembly because our localization APIs support extraction from the main assembly.

  • Quand le fichier est compilé dans la build, le XAMLXAML est converti au format BAML de XAML.When the file is compiled into the build, the XAMLXAML is converted to the BAML form of XAML. Le MyDialog.exe culturellement neutre et les fichiers MyDialog.resources.dll dépendants de la culture (anglais) sont diffusés au client anglophone.The culturally neutral MyDialog.exe and the culturally dependent (English) MyDialog.resources.dll files are released to the English-speaking customer.

Flux du travail de localisationLocalization Workflow

Le processus de localisation commence après la génération du fichier de MyDialog.resources.dll non localisé.The localization process begins after the unlocalized MyDialog.resources.dll file is built. Les éléments et propriétés de Interface utilisateurUI de votre XAMLXAML d’origine sont extraits de la forme BAML de XAML dans des paires clé-valeur à l’aide des API sous System.Windows.Markup.Localizer.The Interface utilisateurUI elements and properties in your original XAMLXAML are extracted from the BAML form of XAML into key-value pairs by using the APIs under System.Windows.Markup.Localizer. Les localiseurs utilisent les paires clé-valeur pour localiser l’application.Localizers use the key-value pairs to localize the application. Vous pouvez générer un nouveau fichier .resource.dll à partir des nouvelles valeurs une fois la localisation terminée.You can generate a new .resource.dll from the new values after localization is complete.

Les clés des paires clé-valeur sont x:Uid valeurs placées par le développeur dans le XAMLXAMLd’origine.The keys of the key-value pairs are x:Uid values that are placed by the developer in the original XAMLXAML. Ces valeurs x:Uid permettent à l’API de suivre et de fusionner les modifications qui se produisent entre le développeur et le localisateur pendant la localisation.These x:Uid values enable the API to track and merge changes that happen between the developer and the localizer during localization. Par exemple, si le développeur modifie la Interface utilisateurUI une fois que le localisateur a commencé à localiser, vous pouvez fusionner la modification de développement avec le travail de localisation déjà terminé afin de perdre le travail de traduction minimal.For example, if the developer changes the Interface utilisateurUI after the localizer begins localizing, you can merge the development change with the already completed localization work so that minimal translation work is lost.

Le graphique suivant montre un flux de travail de localisation standard basé sur le formulaire BAML de XAML.The following graphic shows a typical localization workflow that is based on the BAML form of XAML. Ce diagramme part du principe que le développeur écrit l’application en anglais.This diagram assumes the developer writes the application in English. Le développeur crée et globalise l’application WPF.The developer creates and globalizes the WPF application. Dans le fichier projet, le développeur définit <UICulture>en-US</UICulture> afin que, lors de la génération, un assembly principal indépendant de la langue soit généré avec un fichier. resources. dll satellite contenant toutes les ressources localisables.In the project file the developer sets <UICulture>en-US</UICulture> so that on build, a language neutral main assembly gets generated with a satellite .resources.dll containing all localizable resources. Si vous le voulez, vous pouvez conserver la langue source dans l’assembly principal, car nos API de localisation WPF prennent en charge l’extraction à partir de l’assembly principal.Alternately, one could keep the source language in the main assembly because WPF localization APIs support extraction from the main assembly. Après le processus de génération, le code XAML est compilé en BAML.After the build process, the XAML get compiled into BAML. Le fichier MyDialog.exe.resources.dll indépendant de la culture est livré aux clients anglophones.The culturally neutral MyDialog.exe.resources.dll get shipped to the English speaking customer.

Diagramme montrant le flux de travail de localisation.

Diagramme montrant le flux de travail non localisé.

Exemples de localisation WPFExamples of WPF Localization

Cette section contient des exemples d’applications localisées pour vous aider à comprendre comment créer et localiser des applications WPFWPF.This section contains examples of localized applications to help you understand how to build and localize WPFWPF applications.

Exemple de boîte de dialogue RunRun Dialog Box Example

Les graphiques suivants montrent la sortie de l’exemple de la boîte de dialogue exécuter .The following graphics show the output of the Run dialog box sample.

Anglais :English:

Capture d’écran montrant une boîte de dialogue d’exécution en anglais.

Allemand :German:

Capture d’écran montrant une boîte de dialogue d’exécution allemande.

Conception d’une boîte de dialogue Run globaleDesigning a Global Run Dialog Box

Cet exemple génère une boîte de dialogue exécuter à l’aide de WPFWPF et XAMLXAML.This example produces a Run dialog box by using WPFWPF and XAMLXAML. Cette boîte de dialogue est équivalente à la boîte de dialogue exécuter disponible dans le menu Démarrer de Microsoft Windows.This dialog box is equivalent to the Run dialog box that is available from the Microsoft Windows Start menu.

Voici quelques points clés pour la conception des boîtes de dialogue globales :Some highlights for making global dialog boxes are:

Disposition automatiqueAutomatic Layout

Dans Window1.xaml :In Window1.xaml:

<Window SizeToContent="WidthAndHeight">

La propriété Window précédente redimensionne automatiquement la fenêtre en fonction de la taille du contenu.The previous Window property automatically resizes the window according to the size of the content. Cette propriété empêche la fenêtre de tronquer le contenu dont la taille augmente après la localisation ; elle supprime également l’espace superflu quand le contenu diminue en taille après la localisation.This property prevents the window from cutting off content that increases in size after localization; it also removes unneeded space when content decreases in size after localization.

<Grid x:Uid="Grid_1">

Uid propriétés sont nécessaires pour que les API de localisation WPFWPF fonctionnent correctement.Uid properties are needed in order for WPFWPF localization APIs to work correctly.

Ils sont utilisés par WPFWPF API de localisation pour suivre les modifications entre le développement et la localisation du interface utilisateur (UI)user interface (UI).They are used by WPFWPF localization APIs to track changes between the development and localization of the interface utilisateur (UI)user interface (UI). les propriétés de Uid vous permettent de fusionner une version plus récente du Interface utilisateurUI avec une localisation plus ancienne de l' Interface utilisateurUI.Uid properties enable you to merge a newer version of the Interface utilisateurUI with an older localization of the Interface utilisateurUI. Vous ajoutez une propriété Uid en exécutant msbuild -t:updateuid RunDialog.csproj dans un interpréteur de commandes.You add a Uid property by running msbuild -t:updateuid RunDialog.csproj in a command shell. Il s’agit de la méthode recommandée pour ajouter des propriétés de Uid, car leur ajout manuel est généralement long et moins précis.This is the recommended method of adding Uid properties because manually adding them is typically time-consuming and less accurate. Vous pouvez vérifier que les propriétés de Uid sont correctement définies en exécutant msbuild -t:checkuid RunDialog.csproj.You can check that Uid properties are correctly set by running msbuild -t:checkuid RunDialog.csproj.

La Interface utilisateurUI est structurée à l’aide du contrôle Grid, qui est un contrôle utile pour tirer parti de la disposition automatique dans WPFWPF.The Interface utilisateurUI is structured by using the Grid control, which is a useful control for taking advantage of the automatic layout in WPFWPF. Notez que la boîte de dialogue est divisée en trois lignes et cinq colonnes.Note that the dialog box is split into three rows and five columns. L’une des définitions de ligne et de colonne n’a pas une taille fixe ; par conséquent, les éléments Interface utilisateurUI positionnés dans chaque cellule peuvent s’adapter pour augmenter ou diminuer la taille lors de la localisation.Not one of the row and column definitions has a fixed size; hence, the Interface utilisateurUI elements that are positioned in each cell can adapt to increases and decreases in size during localization.

<Grid.ColumnDefinitions>
  <ColumnDefinition x:Uid="ColumnDefinition_1" />
  <ColumnDefinition x:Uid="ColumnDefinition_2" />

Les deux premières colonnes où l’étiquette Open : et ComboBox sont placées utilisent 10 pour cent de la largeur totale Interface utilisateurUI.The first two columns where the Open: label and ComboBox are placed use 10 percent of the Interface utilisateurUI total width.

  <ColumnDefinition x:Uid="ColumnDefinition_3" SharedSizeGroup="Buttons" />
  <ColumnDefinition x:Uid="ColumnDefinition_4" SharedSizeGroup="Buttons" />
  <ColumnDefinition x:Uid="ColumnDefinition_5" SharedSizeGroup="Buttons" />
</Grid.ColumnDefinitions>

Notez que l’exemple utilise la fonctionnalité de dimensionnement partagé de Grid.Note that of the example uses the shared-sizing feature of Grid. Les trois dernières colonnes tirent parti de cela en les plaçant dans le même SharedSizeGroup.The last three columns take advantage of this by placing themselves in the same SharedSizeGroup. Comme vous pouvez vous y attendre d’après le nom de la propriété, ceci permet aux colonnes de partager la même taille.As one would expect from the name of the property, this allows the columns to share the same size. Par conséquent, lorsque le bouton « Parcourir... » est localisée dans la chaîne plus longue « Durchsuchen... », tous les boutons augmentent en largeur au lieu d’avoir un petit bouton « OK » et un « Durchsuchen... » de grande taille disproportionnée... bouton.So when the "Browse…" gets localized to the longer string "Durchsuchen…", all buttons grow in width instead of having a small "OK" button and a disproportionately large "Durchsuchen…" button.

XML : langxml:lang

xml:lang="en-US"

Notez la gestion de XML : lang en XAML placée à l’élément racine du Interface utilisateurUI.Notice the xml:lang Handling in XAML placed at the root element of the Interface utilisateurUI. Cette propriété décrit la culture d’un élément donné et de ses enfants.This property describes the culture of a given element and its children. Cette valeur est utilisée par plusieurs fonctionnalités de WPFWPF et doit être modifiée de manière appropriée lors de la localisation.This value is used by several features in WPFWPF and should be changed appropriately during localization. Cette valeur change le dictionnaire de langue utilisé pour la coupure et la vérification de l’orthographe des mots.This value changes what language dictionary is use to hyphenate and spell check words. Elle affecte également l’affichage des chiffres et la façon dont le système de police de base sélectionne la police à utiliser.It also affects the display of digits and how the font fallback system selects which font to use. Enfin, la propriété affecte la façon dont les nombres sont affichés et celle dont les textes écrits dans des écritures complexes sont mis en forme.Finally, the property affects the way numbers are displayed and the way texts written in complex scripts are shaped. La valeur par défaut est « en-US ».The default value is "en-US".

Génération d’un assembly de ressources satelliteBuilding a Satellite Resource Assembly

Dans .csproj :In .csproj:

Modifiez le fichier .csproj et ajoutez la balise suivante à un <PropertyGroup>non conditionnel :Edit the .csproj file and add the following tag to an unconditional <PropertyGroup>:

<UICulture>en-US</UICulture>

Notez l’ajout d’une valeur UICulture.Notice the addition of a UICulture value. Lorsque cette valeur est définie sur une valeur de CultureInfo valide telle que en-US, la génération du projet génère un assembly satellite avec toutes les ressources localisables qu’il contient.When this is set to a valid CultureInfo value such as en-US, building the project will generate a satellite assembly with all localizable resources in it.

<Resource Include="RunIcon.JPG">

<Localizable>False</Localizable>

</Resource>

La RunIcon.JPG n’a pas besoin d’être localisée, car elle doit être identique pour toutes les cultures.The RunIcon.JPG does not need to be localized because it should appear the same for all cultures. Localizable est défini sur false afin qu’il reste dans l’assembly principal indépendant de la langue et non dans l’assembly satellite.Localizable is set to false so that it remains in the language neutral main assembly instead of the satellite assembly. La valeur par défaut de toutes les ressources noncompilable est Localizable définie sur true.The default value of all noncompilable resources is Localizable set to true.

Localisation de la boîte de dialogue RunLocalizing the Run Dialog

AnalyserParse

Après avoir généré l’application, la première étape de la localisation est d’analyser les ressources localisables en dehors de l’assembly satellite.After building the application, the first step in localizing it is parsing the localizable resources out of the satellite assembly. Pour les besoins de cette rubrique, utilisez l’exemple d’outil LocBaml qui se trouve dans l' exemple d’outil LocBaml.For the purposes of this topic, use the sample LocBaml tool which can be found at LocBaml Tool Sample. Notez que LocBaml est seulement un exemple d’outil destiné à vous aider à démarrer dans la création d’un outil de localisation qui s’intègre dans votre processus de localisation.Note that LocBaml is only a sample tool meant to help you get started in building a localization tool that fits into your localization process. À l’aide de LocBaml, exécutez la commande suivante pour analyser : LocBaml/parse RunDialog. resources. dll/out : pour générer un fichier « RunDialog. resources. dll. csv ».Using LocBaml, run the following to parse: LocBaml /parse RunDialog.resources.dll /out: to generate a "RunDialog.resources.dll.CSV" file.

LocaliserLocalize

Utilisez votre éditeur CSV préféré prenant en charge Unicode pour éditer ce fichier.Use your favorite CSV editor that supports Unicode to edit this file. Filtrez toutes les entrées avec la catégorie de localisation « None ».Filter out all entries with a localization category of "None". Vous devez voir les entrées suivantes :You should see the following entries:

Clé de la ressourceResource Key Catégorie de localisationLocalization Category valeurValue
Button_1:System.Windows.Controls.Button.$ContentButton_1:System.Windows.Controls.Button.$Content ButtonButton OKOK
Button_2:System.Windows.Controls.Button.$ContentButton_2:System.Windows.Controls.Button.$Content ButtonButton AnnulerCancel
Button_3:System.Windows.Controls.Button.$ContentButton_3:System.Windows.Controls.Button.$Content ButtonButton Parcourir...Browse...
ComboBox_1:System.Windows.Controls.ComboBox.$ContentComboBox_1:System.Windows.Controls.ComboBox.$Content ComboBoxComboBox
TextBlock_1:System.Windows.Controls.TextBlock.$ContentTextBlock_1:System.Windows.Controls.TextBlock.$Content TexteText Entrez le nom d’un programme, dossier, document ou ressource Internet, et Windows l’ouvrira pour vous.Type the name of a program, folder, document, or Internet resource, and Windows will open it for you.
TextBlock_2:System.Windows.Controls.TextBlock.$ContentTextBlock_2:System.Windows.Controls.TextBlock.$Content TexteText Ouvrir :Open:
Window_1:System.Windows.Window.TitleWindow_1:System.Windows.Window.Title TitreTitle ExécuterRun

La Localisation de l’application en allemand nécessiterait les traductions suivantes :Localizing the application to German would require the following translations:

Clé de la ressourceResource Key Catégorie de localisationLocalization Category valeurValue
Button_1:System.Windows.Controls.Button.$ContentButton_1:System.Windows.Controls.Button.$Content ButtonButton OKOK
Button_2:System.Windows.Controls.Button.$ContentButton_2:System.Windows.Controls.Button.$Content ButtonButton AbbrechenAbbrechen
Button_3:System.Windows.Controls.Button.$ContentButton_3:System.Windows.Controls.Button.$Content ButtonButton Durchsuchen…Durchsuchen…
ComboBox_1:System.Windows.Controls.ComboBox.$ContentComboBox_1:System.Windows.Controls.ComboBox.$Content ComboBoxComboBox
TextBlock_1:System.Windows.Controls.TextBlock.$ContentTextBlock_1:System.Windows.Controls.TextBlock.$Content TexteText Geben Sie den Namen eines Programms, Ordners, Dokuments oder einer Internetresource an.Geben Sie den Namen eines Programms, Ordners, Dokuments oder einer Internetresource an.
TextBlock_2:System.Windows.Controls.TextBlock.$ContentTextBlock_2:System.Windows.Controls.TextBlock.$Content TexteText Öffnen:Öffnen:
Window_1:System.Windows.Window.TitleWindow_1:System.Windows.Window.Title TitreTitle ExécuterRun

GénérerGenerate

La dernière étape de la localisation implique la création de l’assembly satellite nouvellement localisé.The last step of localization involves creating the newly localized satellite assembly. Pour ce faire, utilisez la commande LocBaml suivante :This can be accomplished with the following LocBaml command:

LocBaml.exe /generate RunDialog.resources.dll /trans:RunDialog.resources.dll.CSV /out: . /cul:de-DELocBaml.exe /generate RunDialog.resources.dll /trans:RunDialog.resources.dll.CSV /out: . /cul:de-DE

Sur les fenêtres allemandes, si ce fichier Resources. dll est placé dans un dossier de-DE à côté de l’assembly principal, cette ressource est chargée automatiquement au lieu de celle figurant dans le dossier en-US.On German Windows, if this resources.dll is placed in a de-DE folder next to the main assembly, this resource will automatically load instead of the one in the en-US folder. Si vous ne disposez pas d’une version allemande de Windows pour tester cela, définissez la culture sur la culture de Windows que vous utilisez (par exemple, en-US) et remplacez la DLL de ressources d’origine.If you do not have a German version of Windows to test this, set the culture to whatever culture of Windows you are using (for example, en-US), and replace the original resources DLL.

Chargement de la ressource satelliteSatellite Resource Loading

MyDialog.exeMyDialog.exe en-US\MyDialog.resources.dllen-US\MyDialog.resources.dll en-US\MyDialog.resources.dllde-DE\MyDialog.resources.dll
CodeCode BAML d’origine en anglaisOriginal English BAML BAML localiséLocalized BAML
Ressources indépendantes de la langueCulturally neutral resources Autres ressources en anglaisOther resources in English Autres ressources localisées en allemandOther resources localized to German

Le .NET Framework choisit automatiquement l’assembly de ressources satellites à charger en fonction de l' Thread.CurrentThread.CurrentUICulturede l’application.The .NET framework automatically chooses which satellite resources assembly to load based on the application’s Thread.CurrentThread.CurrentUICulture. Par défaut, il s’agit de la culture de votre système d’exploitation Windows.This defaults to the culture of your Windows OS. Par conséquent, si vous utilisez des fenêtres en allemand, le fichier de-DE\MyDialog.resources.dll se charge, si vous utilisez des fenêtres en anglais, le en-US\MyDialog.resources.dll est chargé.So if you are using German Windows, the de-DE\MyDialog.resources.dll loads, if you are using English Windows, the en-US\MyDialog.resources.dll loads. Vous pouvez définir la ressource de base par défaut pour votre application en spécifiant NeutralResourcesLanguage dans AssemblyInfo.* de votre projet.You can set the ultimate fallback resource for your application by specifying the NeutralResourcesLanguage in your project’s AssemblyInfo.*. Par exemple, si vous spécifiez :For example if you specify:

[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]

le fichier en-US\MyDialog.resources.dll sera utilisé avec la version allemande de Windows si un fichier de-DE\MyDialog.resources.dll ou un fichier de\MyDialog.resources.dll sont tous deux indisponibles.then the en-US\MyDialog.resources.dll will be used with German Windows if a de-DE\MyDialog.resources.dll or de\MyDialog.resources.dll are both unavailable.

Page d’accueil de Microsoft pour l’Arabie SaouditeMicrosoft Saudi Arabia Homepage

Les graphiques suivants montrent une page d’accueil en anglais et en arabe.The following graphics show an English and Arabic Homepage. Pour obtenir l’exemple complet qui produit ces graphiques, consultez exemple de page d’accueil de globalisation.For the complete sample that produces these graphics see Globalization Homepage Sample.

Anglais :English:

Capture d’écran montrant une page d’hébergement en anglais.

Arabe :Arabic:

Capture d’écran montrant une page d’hébergement en arabe.

Conception d’une page d’hébergement Microsoft globaleDesigning a Global Microsoft home page

Cette simulation du site web de Microsoft pour l’Arabie saoudite illustre les fonctionnalités de globalisation fournies pour les langues de droite à gauche.This mock up of the Microsoft Saudi Arabia web site illustrates the globalization features provided for RightToLeft languages. Les langues telles que l’hébreu et l’arabe ont un ordre de lecture de droite à gauche, de sorte que la disposition des Interface utilisateurUI doit souvent être très différente de celle des langues de gauche à droite, par exemple l’anglais.Languages such as Hebrew and Arabic have a right-to-left reading order so the layout of Interface utilisateurUI must often be laid out quite differently than it would be in left-to-right languages such as English. La localisation d’une langue de gauche à droite vers une langue de droite à gauche, ou l’inverse, peut se révéler difficile.Localizing from a left-to-right language to a right-to-left language or vice versa can be quite challenging. WPFWPF a été conçu pour faciliter ces localisations.has been designed to make such localizations much easier.

FlowDirectionFlowDirection

Homepage.xaml :Homepage.xaml:

<Page x:Uid="Page_1" x:Class="MicrosoftSaudiArabiaHomepage.Homepage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"   
    FlowDirection="LeftToRight" 
    Localization.Comments="FlowDirection(This FlowDirection controls the actual content of the homepage)"
    xml:lang="en-US">

Notez la propriété FlowDirection sur Page.Notice the FlowDirection property on Page. La modification de cette propriété en RightToLeft modifiera la FlowDirection du Page et de ses éléments enfants afin que la disposition de ce Interface utilisateurUI soit retournée de droite à gauche, comme l’attendait un utilisateur arabe.Changing this property to RightToLeft will change the FlowDirection of the Page and its children elements so that the layout of this Interface utilisateurUI is flipped to become right-to-left as an Arabic user would expect. Il est possible de substituer le comportement d’héritage en spécifiant une FlowDirection explicite sur un élément.One can override the inheritance behavior by specifying an explicit FlowDirection on any element. La propriété FlowDirection est disponible sur n’importe quel FrameworkElement ou élément lié à un document et a une valeur implicite de LeftToRight.The FlowDirection property is available on any FrameworkElement or document related element and has an implicit value of LeftToRight.

Notez que même les pinceaux de dégradé d’arrière-plan sont correctement retournées lorsque le FlowDirection racine est modifié :Observe that even the background gradient brushes are flipped correctly when the root FlowDirection is changed:

FlowDirection="LeftToRight"FlowDirection="LeftToRight"

Capture d’écran montrant le déroulement du dégradé de gauche à droite.

FlowDirection="RightToLeft"FlowDirection="RightToLeft"

Capture d’écran montrant le dégradé de droite à gauche.

Éviter d’utiliser des dimensions fixes pour les panneaux et les contrôlesAvoid Using Fixed Dimensions for Panels and Controls

Jetez un coup d’œil à homepage. xaml, Notez qu’en dehors de la largeur et de la hauteur fixes spécifiées pour l’ensemble du Interface utilisateurUI en haut DockPanel, il n’existe aucune autre dimension fixe.Take a look through Homepage.xaml, notice that aside from the fixed width and height specified for the entire Interface utilisateurUI on the top DockPanel, there are no other fixed dimensions. N’utilisez pas de dimensions fixes pour éviter le découpage du texte localisé, qui peut être plus long que le texte source.Avoid using fixed dimensions to prevent clipping localized text that may be longer than the source text. Les panneaux et les contrôles WPFWPF sont automatiquement redimensionnés en fonction de leur contenu.WPFWPF panels and controls will automatically resize based on the content that they contain. La plupart des contrôles ont également des dimensions minimales et maximales que vous pouvez définir pour davantage de contrôle (par exemple, MinWidth = "20").Most controls also have minimum and maximum dimensions that you can set for more control (for example, MinWidth="20"). Avec Grid, vous pouvez également définir des largeurs et des hauteurs relatives à l’aide de «*» (par exemple, Width="0.25*") ou utiliser la fonctionnalité de partage de taille de cellule.With Grid, you can also set relative widths and heights by using ‘*’ (for example, Width="0.25*") or use its cell size sharing feature.

Commentaires de localisationLocalization Comments

Dans de nombreux cas, le contenu peut être ambigu et difficile à traduire.There are many cases where content may be ambiguous and difficult to translate. Le développeur ou le concepteur a la possibilité de fournir un contexte supplémentaire et des commentaires aux localiseurs via des commentaires de localisation.The developer or designer has the ability to provide extra context and comments to localizers through localization comments. Par exemple, l’élément Localization.Comments ci-dessous clarifie l’utilisation du caractère « | ».For example the Localization.Comments below clarifies the usage of the character ‘|’.

<TextBlock 
  x:Uid="TextBlock_2" 
  DockPanel.Dock="Right" 
  Foreground="White" 
  Margin="5,0,5,0"
  Localization.Comments="$Content(This character is used as a decorative rule.)">
  |
</TextBlock>

Ce commentaire est associé au contenu TextBlock_1's et, dans le cas de l’outil LocBaml (voir localiser une application), il peut être consulté dans la 6ème colonne de la ligne TextBlock_1 dans le fichier output. csv :This comment becomes associated with TextBlock_1’s content and in the case of the LocBaml Tool, ( see Localize an Application), it can be seen in the 6th column of the TextBlock_1 row in the output .csv file:

Clé de la ressourceResource Key CategoryCategory LisibleReadable ModifiableModifiable CommentaireComment valeurValue
TextBlock_1:System.Windows.Controls.TextBlock.$ContentTextBlock_1:System.Windows.Controls.TextBlock.$Content TexteText trueTRUE trueTRUE Ce caractère est utilisé comme règle de décoration.This character is used as a decorative rule. ||

Les commentaires peuvent être placés sur le contenu ou la propriété de n’importe quel élément en utilisant la syntaxe suivante :Comments can be placed on the content or property of any element using the following syntax:

<TextBlock 
  x:Uid="TextBlock_1" 
  DockPanel.Dock="Right" 
  Foreground="White" 
  Margin="5,0,5,0"
  Localization.Comments="$Content(This is a comment on the TextBlock's content.)
     Margin(This is a comment on the TextBlock's Margin property.)">
  |
 </TextBlock>

Attributs de localisationLocalization Attributes

Souvent, le développeur ou le responsable de la localisation doit contrôler ce que les localiseurs peuvent lire et modifier.Often the developer or localization manager needs control of what localizers can read and modify. Par exemple, vous pouvez décider que le localiseur ne doit pas traduire le nom de votre entreprise ou les mentions légales.For example, you might not want the localizer to translate the name of your company or legal wording. WPFWPF fournit des attributs qui vous permettent de définir la lisibilité, la modifiabilité et la catégorie du contenu d’un élément ou d’une propriété, que votre outil de localisation peut utiliser pour verrouiller, masquer ou trier des éléments.provides attributes that enable you to set the readability, modifiability, and category of an element’s content or property which your localization tool can use to lock, hide, or sort elements. Pour plus d'informations, consultez Attributes.For more information, see Attributes. Pour les besoins de cet exemple, l’outil LocBaml affiche uniquement les valeurs de ces attributs.For the purposes of this sample, the LocBaml Tool just outputs the values of these attributes. Les contrôles WPFWPF ont tous des valeurs par défaut pour ces attributs, mais vous pouvez les remplacez.WPFWPF controls all have default values for these attributes, but you the can override them. Par exemple, l’exemple suivant remplace les attributs de localisation par défaut pour TextBlock_1 et définit le contenu comme étant accessible en lecture mais non modifiable pour les localiseurs.For example, the following example overrides the default localization attributes for TextBlock_1 and sets the content to be readable but unmodifiable for localizers.

<TextBlock
x:Uid="TextBlock_1"
Localization.Attributes=
"$Content(Readable Unmodifiable)">
  Microsoft Corporation
</TextBlock>

En plus des attributs de lisibilité et de modifiabilité, WPFWPF fournit une énumération des catégories d’interface utilisateur courantes (LocalizationCategory) qui peuvent être utilisées pour fournir davantage de contexte aux localiseurs.In addition to the readability and modifiability attributes, WPFWPF provides an enumeration of common UI categories (LocalizationCategory) that can be used to give localizers more context. Les WPFWPF catégories par défaut pour les contrôles de plateforme peuvent également être remplacées dans XAMLXAML :The WPFWPF default categories for platform controls can be overridden in XAMLXAML as well:

<TextBlock x:Uid="TextBlock_2">
<TextBlock.ToolTip>
<TextBlock
x:Uid="TextBlock_3"
Localization.Attributes=
"$Content(ToolTip Readable Unmodifiable)">
Microsoft Corporation
</TextBlock>
</TextBlock.ToolTip>
Windows Vista
</TextBlock>

Les attributs de localisation par défaut que WPFWPF fournit peuvent également être remplacés par le biais du code, de sorte que vous pouvez définir correctement les valeurs par défaut appropriées pour les contrôles personnalisés.The default localization attributes that WPFWPF provides can also be overridden through code, so you can correctly set the right default values for custom controls. Exemple :For example:

[Localizability(Readability = Readability.Readable, Modifiability=Modifiability.Unmodifiable, LocalizationCategory.None)]
public class CorporateLogo : TextBlock
{
    // ...
}

Les attributs par instance définis dans XAMLXAML ont priorité sur les valeurs définies dans le code des contrôles personnalisés.The per instance attributes set in XAMLXAML will take precedence over the values set in code on custom controls. Pour plus d’informations sur les attributs et les commentaires, consultez attributs et commentaires de localisation.For more information on attributes and comments, see Localization Attributes and Comments.

Police de base et polices compositesFont Fallback and Composite Fonts

Si vous spécifiez une police qui ne prend pas en charge une plage de point de contenu donnée, WPFWPF est automatiquement secours à celle qui est utilisée par l’interface utilisateur globale. compositefont qui se trouve dans votre répertoire Windows/Fonts.If you specify a font that does not support a given codepoint range, WPFWPF will automatically fallback to one that does by using the Global User Interface.compositefont that is located in your Windows\Fonts directory. Les polices composites fonctionnent exactement comme n’importe quelle autre police et peuvent être utilisées de manière explicite en définissant le FontFamily d’un élément (par exemple, FontFamily="Global User Interface").Composite fonts work just as any other font and can be used explicitly by setting an element’s FontFamily (for instance, FontFamily="Global User Interface"). Vous pouvez spécifier votre propre police de base préférée en créant votre propre police composite, et en spécifiant la police à utiliser pour des plages de points de code et des langues spécifiques.You can specify your own font fallback preference by creating your own composite font and specifying what font to use for specific codepoint ranges and languages.

Pour plus d’informations sur les polices composites, consultez FontFamily.For more information on composite fonts see FontFamily.

Localisation de la page d’accueil de MicrosoftLocalizing the Microsoft Homepage

Vous pouvez suivre la même procédure que celle de l’exemple de boîte de dialogue Run pour localiser cette application.You can follow the same steps as the Run Dialog example to localize this application. Le fichier. csv localisé pour l’arabe est disponible dans l’exemple de la page d’accueil de globalisation.The localized .csv file for Arabic is available for you in the Globalization Homepage Sample.