C# / PCL (Portable Class Libraries) et fichiers de ressources, comment internationaliser ?

Le framework .NET est connu pour sa facilité de gestion des langues au sein des applications. Il suffit simplement de créer plusieurs fichiers de ressources (.resx) et d’y ranger les données variant en fonction de la langue.

Windows Phone et Windows 8 n’échappent pas à cette règle.

Si vous souhaitez savoir comment internationaliser votre application pour Windows Phone, je vous invite à lire cet article sur le blog de Pierre Cauchois.  Quant à Windows 8, je vous invite à lire cet autre article d’Eric Vernié.

Premier constat, vous remarquez que les deux façons de procéder sont différentes.

Et lorsque l’on utilise les Portable Class Libraries ?

Il se trouve que dans mon dernier projet (découpé en MVVM, le Model et le ViewModel étant rangés chacun dans un projet de type Portable Class Library), certaines informations avaient besoin d’être internationalisées pour les deux applications, chacune référençant mon ViewModel.

Comment procéder dans ce cas ? Gérer un fichiers de ressources par langue et par projet ? C’est tout à fait possible mais celà implique une double maintenance.

Une autre solution consiste tout simplement à détecter la langue de l’application et à charger le fichier de ressources correspondant.

Pour cela, assurez-vous de nommer vos fichiers de ressources différement.

Fichiers de ressources français et anglais

Attention : N’utilisez pas le point pour les différencier en fonction de la langue mais un autre caractère, comme le tiret par exemple.

var currentCulture = Thread.CurrentThread.CurrentUICulture;
ResourceManager resourceManager;

if(currentCulture.Name.Contains("fr"))
{
   resourceManager = AppResources_fr.ResourceManager;
}
else
{
   resourceManager = AppResources_en.ResourceManager;
}

Note : La propriété Name de l’objet currentCulture retourne une chaîne de caractère sous la forme xx-YYxx représente les 2 premières lettres de la langue et YY les 2 premières lettres du pays.
(Ex: en-US, en-UK, fr-FR, fr-BE, fr-CA…)

Et enfin, pour récupérer l’information voulue en fonction de la langue:

resourceManager.GetString("LABEL_NO_CONNECTION");

Voyons ce que ça donne avec l’émulateur Windows Phone en français et en anglais:

Erreur en français sous Windows PhoneErreur en anglais sous Windows Phone

Désormais, vous pouvez gérer l’internationalisation de vos projets lorsque vos ressources sont stockées dans la Portable Class Library !

Je fais un salut tout particulier à Etienne Baudoux qui m’a aidé à trouver cette solution 😉

Lien Permanent pour cet article : https://www.jbvigneron.fr/parlons-dev/csharp-portable-class-libraries-fichiers-ressources-internationaliser-pcl-resx/

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.

Verified by MonsterInsights