Localisation d'applications avec Silverlight

6. July 2010 by Quentin.SALLAT

Introduction

A l’heure de la mondialisation et de l’internet, il n’est pas rare de voir des utilisateurs venir du monde entier pour visiter un site web. Mais un problème se pose alors : celui de la langue. Bien entendu, si vous voulez toucher un maximum de monde, vous réaliserez votre application en Anglais. Cela reste néanmoins loin d’être idéal ! Ces dernières années donc, les développeurs de framework et plug-ins multiplient les solutions de « localisation », c’est à dire les systèmes « automatisant » la gestion des langues. Nous allons donc voir comment utiliser les outils intégrés à Silverlight, afin de réaliser de la localisation dans votre application !

 

Les Ressources

"Localisation" ne veut pas dire traduction automatique. Cette tâche vous revient donc (et entre nous, ce n’est pas plus mal pour l’utilisateur final). Déterminez en premier lieu, quelle langue vous souhaitez proposer à vos utilisateurs. Eventuellement, vous pourrez définir des cultures (Anglais britannique, Anglais Américain sont des cultures, tandis que l’Anglais est la langue associée). Nous n’utiliserons ici que deux langues (Français et Anglais), mais la méthode est la même pour ajouter d’autres idiomes et cultures.

Silverlight gère la localisation à l’aide de fichiers de ressources, qui contiennent des chaines de caractères associées à une clé. On peut imaginer par exemple un champ « labelAccueil », qui contiendrait la chaine « Accueil ».  Afin de réaliser les changements de langue, vous aurez à réaliser ainsi un fichier de ressources par langue.

Un exemple de ressource
Un exemple de ressource



Classe de localisation

Afin de gérer les ressources précédemment créées, nous allons utiliser une classe qui permettra de déterminer quel est le fichier de langue associé à la culture de l’utilisateur. Nous appellerons ici notre classe LocalizatedStrings. Elle disposera d’un objet (nommé ici resource), que nous instancierons lors de la première utilisation de la classe, afin qu’il corresponde au bon fichier de ressources. Cet objet doit être statique, afin de garantir son accès depuis partout. Déclarez également un ResourceManager, lui aussi statique,  qui permettra d’accéder aux chaines contenues dans nos ressources. Nous déclarons également une méthode, qui instanciera notre objet resource, et le resourceManager, suivant la culture de l’utilisateur, accessible via CultureInfo.

private static object resource;

private static ResourceManager resourceManager;

public static object Resource1

{

get

{

if (resource == null)

Determiner_culture();

return resource;

}

}

public static void Determiner_culture()

{

if (CultureInfo.CurrentCulture.TwoLetterISOLanguageName == "fr")

{

resource = new Namespace.localization.StringLibrary();

resourceManager =

new System.Resources.ResourceManager("Namespace.localization.StringLibrary", Assembly.GetExecutingAssembly());

}

else

{

resource = new Namespace.localization.StringLibraryEN();

resourceManager =

new System.Resources.ResourceManager("Namespace.localization.StringLibraryEN", Assembly.GetExecutingAssembly());

}

}

Ici, Namespace correspond au nom de votre assembly, et localization au nom du dossier contenant les fichiers de ressources.



Utiliser les chaines localisées

Maintenant que nos chaines sont bien initialisées suivant la culture de l’utilisateur, nous allons les exploiter coté code behind (avec le ResourceManager) et coté XAML (avec du binding).

Chaines localisées et code behind (C#)

Utiliser les chaines localisées est très simple dans le code behind. Il suffit d’appeler la méthode GetString du ResourceManager, en passant en paramètre la clé correspondante dans les ressources. Imaginons que vous ayez une chaine de clé « LabelAccueil », le code sera :

resourceManager.GetString("LabelAccueil");

Vous l’aurez compris, il vous faudra avoir les mêmes noms de clé dans vos fichiers de ressources, mais des valeurs différentes. En français, la chaine pourra avoir pour valeur « Accueil », tandis qu’en Anglais, elle aura pour valeur « Home ».

Chaines localisées et XAML

Utiliser vos chaines localisées n’est pas plus compliqué en XAML qu’en C#. il suffit de faire un Binding sur l’attribut Text ou Content de votre contrôle comme ceci :

{Binding Path=Resource1.LabelAccueil, Source={StaticResource LocalizedStrings }}

Resource1 correspond à la méthode get de notre objet resource, dans notre classe LocalizatedStrings. Celle-ci est  indiquée en tant que ressource. LabelAccueil correspond à la clé dans vos ressources, comme en code behind. Vous avez donc accès à vos chaines localisées maintenant !



Astuce : tester son système de localisation

Si vous utilisez Windows Vista ou Seven, il y a un moyen très simple de tester votre localisation. Allez dans panneau de configuration, « Horloge,  Langue et Région », « Région et langue », et changez le format sur la culture à tester.

Tester votre localisation est important !
Tester votre localisation est important !



Conclusion

Comme vous le voyez, la localisation en Silverlight se fait aux moyens d’outils relativement puissants, et cela est bien plus aisé qu’avec d’autres langages. Attention toutefois à utiliser les mêmes clés dans vos fichiers de ressources. 

C#, Silverlight, Visual Studio 2010

Add comment




  Country flag

biuquote
  • Comment
  • Preview
Loading

captcha

*