Voilà une problématique à laquelle j’ai du me frotter dernièrement.
J’ai fais quelques recherches afin de voir ce qui existait pour ce faire. Et je suis tomber sur une dll réalisée par un membre de Code Project, WPF Localization Extension.
Seule chose à déplorer, le fait qu’il n’y est qu’un projet démo pour se faire la main. Donc pour faire rapide je vais résumer en quelques points le fonctionnement de cette dll tel que je l’ai comprise
- Référencer la dll (normale ^^)
- Créer une ressource (resx) avec le nom de votre choix
- Ajouter deux autres ressources, en mettant comme nom, nom_ressource1-fr par exemple. et -en pour anglais.
Ensuite, c’est la que toute la magie opère ^^. Dans vos fichier XAML, vous allez tout d’abords ajouter le namespace lex. xmlns:lex= »http://schemas.root-project.org/xaml/presentation »
Prenons l’exemple du label basique :
<Label Content= »{lex:LocText nomAssembly:nom_ressource1:lblMonLabel} » />
{lex: <== ok pour la compréhension
LocText <== Vous spécifiez que vous voulez « localiser » un texte, car oui, vous verrez que vous pouvez localiser pas mal de choses (images par exemple).
nomAssembly<== le nom de votre assembly, couramment le nom du projet.
nom_resource1 <== le nom de la première ressource que vous avez créé
lblMonLabel <== le nom de la clé du fichier ressource sous lequel vous retrouverez la valeur.
Jusque là, vous allez me dire, ça sert à rien, pas de localisation, et en effet, pas de localisation, on y vient.
Revenons à nos fichier de ressources, normalement, vous devriez retrouver dans le premier fichier de ressource : lblMonLabel avec comme valeur la chaîne de caractère. Maintenant, à la place de cette chaine de caractère, écrivez @lblMonLabel. et maintenant, dans vos autres fichiers de ressources localisables (fr et en), vous allez mettre en clé lblMonLabel et en valeur la chaine de caractère traduite. Comme ça, au moment de chercher la valeur dans le premier fichier de ressource, il sera redirigé vers le fichier localisé pour extraire la valeur.
Oui c’est bien beau, mais comme fait-on pour lui dire tel fichier de ressource?
LocalizeDictionary.Instance.Culture = CultureInfo.GetCultureInfo(« fr »); // fr car j’ai choisi de mettre juste -fr à la fin de mon fichier de ressource localisable.
Mais le plus fun est que dès que cette culture est modifiée, toute notre interface passe dans la langue souhaitée. Pas besoin de relancer l’application. C’est très bien géré.
Ça me semble bon pour cet article.
Voici le projet de test fournit par l’auteur : XamlLocalizationTest Source
Tchuss