La localisation … vous connaissez ce system miraculeux qui permet à votre application de s’afficher dans la langue de l’utilisateur (à condition de l’avoir intégrée dans votre programme).

Comment mettre en place la localisation dans WF4?

Cette question m’a déjà et posée une paire de fois, donc voici une réponse… il y en a forcément d’autres, mas je pense qu’il s’agit là de l’approche la plus simple pour un ancien développeur de WF3 qui veut capitaliser sur ce qu’il connait déjà.

Avant de ce lancer dans la pratique je vais casser le grand mythe des ActivityDesigner de WF4. Dans WF3, votre designer était écrit avec Winform. Avec WF4 ce designer s’écrit en WPF. On a alors deux couples :

  • WF3 & Windorm.
  • WF4 & WPF.

Dans le premier cas vous avez certainement utiliser les fichiers de ressources pour mettre en place la localisation. Facile, mais peut être morcelé en plusieurs fichiers de ressources pour la même langue, un par control ou formulaire (comportement par défaut de la localisation Winform).

Dans le second cas, j’en vois déjà certain hurler après WPF qui va les obliger à avoir un double dispositif : un pour WF un pour WPF…

Pour WPF, certain experts on fait des articles sur la localisation (je pense notamment à Thomas Lebrun qui ma été bien pratique par le passé). Le kit de formation MCTS sorti il y a peu de temps, propose la même approche…

Et pour WF? Rien? On va avoir deux dispositifs?

Non! non et non! C’est une idée reçue… Et il faut lui mettre du plomb dans l’aille!

De manière générale, votre travail dans WF4 ne se fait en code classique (C#, Vb) ou en WPF. On a donc le droit d’utiliser le fichier de ressources en code. En WPF malgré de nombreuses légendes urbaines, c’est aussi possible! Et en très peu d’étapes!

1) Rendre publique la classe Resources de votre projet (onglet Resources du panneau propriété de votre projet) :

wf4_localisation0

2) On peut déjà en profiter pour créer plusieurs fichiers de ressources (même si il peut s’avèrer plus sage d’attendre de connaitre toutes les chaines de caractères avant de commencer à dupliquer les ressources):

wf4_localisation1

Pour exemple voici une partie de leurs contenus :

wf4_localisation2 wf4_localisation3

J’en profite pour glisser une petite astuce pour gagner du temps lors de la création de fichier de ressources localisées :

a) Créer le fichier de ressources neutre (celui qui serra utilisé par défaut) et y saisir toutes vos données localisées.

b) Ouvrir dans l’explorateur windows le répertoire Properties de votre projet et de faire une copie du fichier Resources. Changer le nom de ce fichier par Resources.x avec x la localisation voulue (exemple fr-CA, es …).

c) Retourner dans Visual Studio, haut au de l’explorateur de solution, on utilise la commande pour rendre visible tout les fichiers.

On devrait alors voir notre nouveau fichier localisé. Il suffit alors de faire un click droit dessus et d’utiliser la commande “Inclure dans le projet”. Et voila ;)

wf4_localisation4

3) L’utilisation

Pour ce sui est d’utiliser les ressources dans votre code, on passe par l’objet Resources et on accède à la string voulue (ou autre ressource localisée). C’est là que le procédé est “magique” : nous n’avons rien à faire de particulier ;)

Pour vos AcitivityDesigners, il faudra commencer par ajouter une référence au namespace dans lequel se trouve la classe contenant les ressources (VotreNamespace.Properties).

Xaml

xmlns:p="clr-namespace:MyLib.WorkFlow4.Properties"

Et par la suite, on utilise l’objet Resources comme ceci. (NewCommande est une string contenu dans mes ressources.

<TextBlock Text="{x:Static p:Resources.NewCommand}" />

Facile non?

Et sans réinventer la roue! On utilise juste l’existant et on capitalise sur ce que l’on savait déjà faire en WinForm pour la localisation ;)