En WPF, les fichiers BAML (BinaryApplication Markup Language) sont le résultat de la compilation d’un fichier XAML. Nous verrons dans cet article comment faire la gestion des ressources à l’aide de ces fichiers.
Tout d’abord, présentons un peu plus les fichiers BAML et leur utilité. Ils sont situés dans le dossier obj\Debug de votre application, où chaque contrôle XAML en possèdera un. Pour visualiser le contenu de ces fichiers, voici les étapes à suivre.
1. Installation du Red Gate’s .Net Reflector . Il est l’un des outils les plus connus dans le milieu pour voir le contenu et explorer les assemblies .Net.
2. Installation de l’add-in BAML Viewer pour le .Net Reflector. C’est ce qui fera en sorte que vous serez en mesure de visualiser le contenu des fichiers à partir du Reflector.
3. Dans cet article, nous utiliserons une petite application nommée myPiggyBank pour faire la démonstration. Voici une capture d’écran de la vue proposée par BAML Viewer.
Figure 1 Capture d’écran du .Net Reflector et du BAML Viewer sur un fichier BAML
Pour traduire votre application sans la retoucher à l’aide des fichiers BAML, voici la marche à suivre :
1. Ajout dans le fichier .csproj de votre projet la ligne suivante :
<UICulture>fr-CA</UICulture>
Figure 2 Ligne à ajouter dans le fichier .csproj
2. Enlever le commentaire sur la ligne suivante dans le fichier AssemblyInfo.cs du projet :
[assembly: NeutralResourcesLanguage("fr-CA", UltimateResourceFallbackLocation.Satellite)]
3. Il faut alors assigner un identifiant unique pour tous les contrôles. Cela peut se faire à la main et être long et le risque d’erreur est élevé. Il existe cependant une façon rapide de tout faire générer à la main via msbuild. Pour ce faire, allez dans votre menu Démarrer > Visual Studio 2008 > Visual Studio Tools > Visual Studio 2008 Command prompt et entrez la ligne de commande suivante :
msbuild /t:updateuid myPiggyBank.App.csproj
* Note : Ce processus doit être fait à chaque ajout / retrait des contrôles de votre application. Une bonne pratique serait de mettre la commande dans les commandes à exécuter lors de la compilation.
4. Pour extraire les ressources de votre application, il faut alors télécharger l’utilitaire LocBaml.exe vers le dossier obj\Debug du projet. En ligne de commandes, utilisez la ligne suivante :
LocBaml /parse myPiggyBank.App.g.fr-cA.resources /oututput.csv
5. Vous pouvez maintenant modifier vos ressources sans problème. Une fois ces changements complétés, il faut générer un fichier localisé.
LocBaml /generate /trans:output.csv myPiggyBank.App.g.fr-CA.resources /out:. /cul:en-CA
6. Il faut maintenant compiler l’assembly.
Al.exe /out:myPiggyBank.resources.dll /cultures:en-CA /embed:myPiggyBank.App.g.fr-CA.resources
Voilà, votre application est disponible avec les ressources en en-CA. Il ne vous reste qu’à créer un dossier en-CA dans le répertoire bin\Debug de votre projet.
http://blogs.msdn.com/jimoneil/archive/2009/01/12/b-is-for-baml.aspx
http://www.codeproject.com/KB/WPF/WPFUsingLocbaml.aspx
http://msdn.microsoft.com/en-us/library/ms754231(VS.100).aspx
Donc la conclusion, c’est qu’il s’agit d’une belle méthode pour projets WPF avec plusieurs employés de background assez diversifiés (plusieurs développeurs, responsable de documentation techniques, traducteur / localisateurs) et une portée plus internationale que nationale.
Est-ce que c’est bien ça ?
Exactement.
Cependant, il semble que dans la vie de tous les jours ce ne soit pas la méthode de localisation la plus utilisée compte tenu que l’on recommande tout de même l’utilisation de fichiers de ressources (.resx)tradionnels.
Donc, ces fichiers demeurent même en WPF la meilleure solution pour la localisation.