Guide pratique pour localiser une application

Ce didacticiel explique comment créer une application localisée à l'aide de l'outil LocBaml.

Remarque

L'outil LocBaml n'est pas une application prête pour la production. Il est présenté comme un exemple qui fait appel à un certain nombre d'API de localisation et montre comment vous pouvez écrire un outil de localisation.

Vue d’ensemble

Cet article vous donne une approche pas à pas de la localisation d’une application. Tout d’abord, vous préparez votre application afin que le texte qui sera traduit puisse être extrait. Une fois le texte traduit, vous fusionnez le texte traduit dans une nouvelle copie de l’application d’origine.

Créer un exemple d’application

Dans cette étape, vous préparez votre application pour la localisation. Dans les exemples WINDOWS Presentation Foundation (WPF), un exemple HelloApp est fourni qui sera utilisé pour les exemples de code de cette discussion. Si vous souhaitez utiliser cet exemple, téléchargez les fichiers XAML (Extensible Application Markup Language) à partir de l’exemple d’outil LocBaml.

  1. Développez votre application jusqu'au point où vous voulez démarrer la localisation.

  2. Spécifiez le langage de développement dans le fichier projet afin que MSBuild génère un assembly principal et un assembly satellite (fichier avec l’extension .resources.dll) pour contenir les ressources linguistiques neutres. Le fichier de projet de l'exemple HelloApp s'intitule HelloApp.csproj. Dans ce fichier, vous trouverez le langage de développement identifié comme suit :

    <UICulture>en-US</UICulture>

  3. Ajoutez Uids à vos fichiers XAML. Les UID permettent de suivre les modifications apportées aux fichiers et d'identifier les éléments qui doivent être traduits. Pour ajouter Uids à vos fichiers, exécutez-le updateuid sur votre fichier projet :

    msbuild -t:updateuid helloapp.csproj

    Pour vérifier que vous n’avez pas d’uids manquants ou dupliqués, exécutez checkuid:

    msbuild -t:checkuid helloapp.csproj

    Après l’exécution updateuid, vos fichiers doivent contenir des uids. Par exemple, dans le fichier Pane1.xaml de HelloApp, vous devez trouver les éléments suivants :

    <StackPanel x:Uid="StackPanel_1">
      <TextBlock x:Uid="TextBlock_1">Hello World</TextBlock>
      <TextBlock x:Uid="TextBlock_2">Goodbye World</TextBlock>
    </StackPanel>
    

Créer l’assembly satellite des ressources neutres

Une fois l’application configurée pour générer un assembly satellite de ressources en langage neutre, vous générez l’application. Cela génère l’assembly d’application principal ainsi que l’assembly satellite de ressources en langage neutre requis par LocBaml pour la localisation.

Pour générer l’application :

  1. Compilez HelloApp pour créer une bibliothèque de liens dynamiques (DLL) :

    msbuild helloapp.csproj

  2. L’assembly d’application principal nouvellement créé, HelloApp.exe, est créé dans le dossier suivant : C :\HelloApp\Bin\Debug

  3. L’assembly satellite de ressources neutres nouvellement créé, HelloApp.resources.dll, est créé dans le dossier suivant : C :\HelloApp\Bin\Debug\en-US

Générer l’outil LocBaml

  1. Tous les fichiers nécessaires pour générer LocBaml se trouvent dans les exemples WPF. Téléchargez les fichiers C# à partir de l’exemple d’outil LocBaml.

  2. Dans la ligne de commande, exécutez le fichier de projet (locbaml.csproj) pour générer l'outil :

    msbuild locbaml.csproj

  3. Accédez au répertoire Bin\Release pour rechercher le fichier exécutable nouvellement créé (locbaml.exe). Exemple : C :\LocBaml\Bin\Release\locbaml.exe

  4. Les options que vous pouvez spécifier lorsque vous exécutez LocBaml sont les suivantes.

    Option Description
    parse ou -p Analyse les fichiers Baml, ressources ou DLL pour générer un fichier .csv ou .txt.
    generate ou -g Génère un fichier binaire localisé à l’aide d’un fichier traduit.
    out ou -o {filedirectory] Nom du fichier de sortie.
    culture ou -cul {culture] Paramètres régionaux des assemblys de sortie.
    translation ou -trans {translation.csv] Fichier traduit ou localisé.
    asmpath ou -asmpath {filedirectory] Si votre code XAML contient des contrôles personnalisés, vous devez fournir l’assembly asmpath de contrôle personnalisé.
    nologo Affiche aucun logo ni aucune information sur le droit d’auteur.
    verbose Affiche les informations en mode détaillé.

    Remarque

    Si vous avez besoin d’une liste des options lorsque vous exécutez l’outil, entrez, puis appuyez LocBaml.exe sur Entrée.

Utiliser LocBaml pour analyser un fichier

Maintenant que vous avez créé l'outil LocBaml, vous êtes prêt à l'utiliser pour analyser HelloApp.resources.dll et ainsi extraire le texte qui sera localisé.

  1. Copiez LocBaml.exe dans le dossier bin\debug de votre application, là où l'assembly d'application principal a été créé.

  2. Pour analyser le fichier d'assembly satellite et stocker la sortie sous forme de fichier .csv, utilisez la commande suivante :

    LocBaml.exe /parse HelloApp.resources.dll /out:Hello.csv

    Remarque

    Si le fichier d'entrée, HelloApp.resources.dll, n'est pas dans le même répertoire que LocBaml.exe, déplacez l'un des deux fichiers de telle sorte qu'ils se trouvent dans le même répertoire.

  3. Quand vous exécutez LocBaml pour analyser les fichiers, la sortie se compose de sept champs délimités par des virgules (fichiers .csv) ou des tabulations (fichiers .txt). Voici le fichier .csv analysé pour HelloApp.resources.dll :

    Fichier .csv analysé
    HelloApp.g.en-US.resources:window1.baml,Stack1:System.Windows.Controls.StackPanel.$Content,Ignore,FALSE, FALSE,,#Text1;#Text2;
    HelloApp.g.en-US.resources:window1.baml,Text1:System.Windows.Controls.TextBlock.$Content,None,TRUE, TRUE,,Hello World
    HelloApp.g.en-US.resources:window1.baml,Text2:System.Windows.Controls.TextBlock.$Content,None,TRUE, TRUE,,Goodbye World

    Les sept champs sont les suivants :

    Le tableau suivant montre comment ces champs sont mappés par rapport aux valeurs délimitées du fichier .csv :

    BAML name Ressources clés Catégorie Readability Modifiability Commentaires Valeur
    HelloApp.g.en-US.resources:window1.baml Stack1:System.Windows.Controls.StackPanel.$Content Ignorer FAUX FAUX #Text1;#Text2
    HelloApp.g.en-US.resources:window1.baml Text1:System.Windows.Controls.TextBlock.$Content Aucun VRAI VRAI Hello World
    HelloApp.g.en-US.resources:window1.baml Text2:System.Windows.Controls.TextBlock.$Content Aucun VRAI VRAI Goodbye World

    Notez que le champ Comments ne contient aucune valeur ; si un champ n’a pas de valeur, il est vide. De même, vous remarquerez que l’élément de la première ligne n’est ni lisible ni modifiable et que le champ Category a la valeur « Ignore », ce qui indique que la valeur n’est pas localisable.

  4. Pour faciliter la découverte des éléments localisables dans les fichiers analysés, en particulier dans les fichiers volumineux, vous pouvez trier ou filtrer les éléments en fonction des champs Category, Readability et Modifiability. Par exemple, vous pouvez filtrer les valeurs illisibles et non modifiables.

Traduire le contenu localisable

Utilisez n'importe quel outil à votre disposition pour traduire le contenu extrait. Pour ce faire, il est judicieux d’écrire les ressources dans un fichier .csv et de les afficher dans Microsoft Excel, en apportant des modifications de traduction à la dernière colonne (valeur).

Utiliser LocBaml pour générer un nouveau fichier .resources.dll

Le contenu qui a été identifié en analysant HelloApp.resources.dll avec LocBaml a été traduit et doit être fusionné dans l'application d'origine. Utilisez la ou -g l’option generate pour générer un nouveau fichier .resources.dll.

  1. Utilisez la syntaxe suivante pour générer un nouveau fichier HelloApp.resources.dll. Indiquez la culture en-US (/cul:en-US).

    LocBaml.exe /generate HelloApp.resources.dll /trans:Hello.csv /out:c:\ /cul:en-US

    Remarque

    Si le fichier d'entrée, Hello.csv, n'est pas dans le même répertoire que l'exécutable, LocBaml.exe, déplacez l'un des deux fichiers de telle sorte qu'ils se trouvent dans le même répertoire.

  2. Remplacez l’ancien fichier HelloApp.resources.dll dans le répertoire C :\HelloApp\Bin\Debug\en-US\HelloApp.resources.dll par votre fichier HelloApp.resources.dll nouvellement créé.

  3. « Hello World » et « Goodbye World » doivent maintenant être traduits dans votre application.

  4. Pour traduire dans une autre culture, utilisez celle qui correspond à la langue d'arrivée de la traduction. L'exemple suivant montre comment traduire en français du Canada :

    LocBaml.exe /generate HelloApp.resources.dll /trans:Hellofr-CA.csv /out:c:\ /cul:fr-CA

  5. Dans le même assembly que l'assembly d'application principal, créez un dossier propre à la culture pour héberger le nouvel assembly satellite. Pour le français du Canada, le dossier s'intitulerait fr-CA.

  6. Copiez l'assembly satellite généré dans le nouveau dossier.

  7. Pour tester le nouvel assembly satellite, vous devez modifier la culture sous laquelle votre application s'exécutera. Vous pouvez le faire de deux façons :

    • Modifiez les paramètres régionaux de votre système d’exploitation.

    • Dans votre application, ajoutez le code suivant à App.xaml.cs :

      <Application
          xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
          xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
          x:Class="SDKSample.App"
          x:Uid="Application_1"
          StartupUri="Window1.xaml">
      </Application>
      
      using System.Windows;
      using System.Globalization;
      using System.Threading;
      
      namespace SDKSample
      {
          public partial class App : Application
          {
              public App()
              {
                  // Change culture under which this application runs
                  CultureInfo ci = new CultureInfo("fr-CA");
                  Thread.CurrentThread.CurrentCulture = ci;
                  Thread.CurrentThread.CurrentUICulture = ci;
              }
          }
      }
      
      
      Imports System.Windows
      Imports System.Globalization
      Imports System.Threading
      
      Namespace SDKSample
          Partial Public Class App
              Inherits Application
              Public Sub New()
                  ' Change culture under which this application runs
                  Dim ci As New CultureInfo("fr-CA")
                  Thread.CurrentThread.CurrentCulture = ci
                  Thread.CurrentThread.CurrentUICulture = ci
              End Sub
          End Class
      End Namespace
      

Astuces pour l’utilisation de LocBaml

  • Tous les assemblys dépendants qui définissent des contrôles personnalisés doivent être copiés dans le répertoire local de LocBaml ou installés dans le GAC. Cela est nécessaire, car l’API de localisation doit avoir accès aux assemblys dépendants lorsqu’elle lit le code XAML binaire (BAML).

  • Si l'assembly principal est signé, la DLL de ressources générée doit l'être également pour pouvoir être chargée.

  • La version de la DLL de ressources localisées doit être synchronisée avec l'assembly principal.

Voir aussi