Pierre's Embedded and Mobile Blog

Soulevons le capot des systèmes embarqués et mobiles

September, 2010

Posts
  • Pierre's Embedded and Mobile Blog

    Internationalisez votre application Windows Phone 7

    • 8 Comments

    Le Marketplace de Windows Phone 7 autorise une diffusion mondiale de l’application, mais aussi des diffusions spécifiques dans des marchés localisés. Par exemple vous pouvez avoir envie de diffuser une version Française de votre application sur les terminaux en langue française, et en Allemand sur les terminaux allemands. C’est ce qu’on appelle la localisation. De la même manière, certaines valeurs se représentent différemment d’un pays à l’autre : par exemple la date s’écrit au format mm/jj/aaaa dans les pays anglo-saxons mais jj/mm/aaaa dans les pays francophones. En utilisant les bons outils, on peut indiquer au téléphone d’adapter son affichage en fonction des options choisies par l’utilisateur. C’est ce qu’on appelle la globalisation. Localisation et globalisation forment les deux mamelles de l’internationalisation d’une application, et se servent de plusieurs notions qu’il faut connaitre :

    La notion de culture se réfère à un ensemble de préférences (langage, monnaie, affichage des dates…) qu’on identifie par un code en deux parties : <langage>-<region>. Par exemple, en-us pour anglais-états-unis ou fr-fr pour français-France qui n’est pas la même chose que fr-ca (français-canada). Ce code peut aussi porter le nom de « Locale ».

    Il y a 3 types de « culture » dans le framework : « invariant » qui désigne justement l’absence de culture choisie, «  neutral » qui représente un langage sans association à une région particulière (fr par exemple) et specific qui représente une culture associée à la fois à un langage et une région.

    La classe CultureInfo nous permettra de récupérer les informations à propos de la culture comme celle qui a été paramétrée dans le système, le formatage des différents types de données (date, monnaie, etc) et jusqu’à un calendrier spécifique (et oui, le calendrier hébreu est différent du calendrier japonais !!)

    La notion d’encodage, qui est un outil pour représenter les différents caractères utilisés par une langue de façon numérique : les plus connus sont ASCII, UTF-8, Unicode… Il est bon de savoir que Windows Phone 7 utilise l’Unicode. La classe Encoding vous aidera à vous abstraire des problèmes potentiels d’encodage (par exemple lors du téléchargement de données qui ne sont pas encodées en Unicode)

    La globalisation et l’utilisation de la classe CultureInfo

    La première (et peut-être la seule) chose à savoir est qu’il existe deux instances de la classe CultureInfo dont se sert votre application : il s’agit des propriétés CurrentCulture et CurrentUICulture de l’objet Thread.CurrentThread. Cela permet de savoir par exemple comment un objet de type DateTime sera affiché lors de l’appel à sa méthode ToString(). Pour choisir la façon d’afficher ces types de données d’une manière qui n’est pas celle choisie à l’échelle du système (dans le menu Settings du terminal Windows Phone 7) il suffit de créer une nouvelle instance de la classe CultureInfo en lui passant en paramètre la locale souhaitée (par exemple fr-FR) et assigner cette instance aux propriétés CurrentCulture et CurrentUICulture.

    CultureInfo ci = new CultureInfo("fr-FR");
    Thread.CurrentThread.CurrentCulture = ci;
    Thread.CurrentThread.CurrentUICulture = ci;

    La localisation – bien répartir ses ressources pour supporter proprement différents langages

    Comme par le passé avec le .NET Compact Framework, la première étape de la localisation consiste à utiliser des fichiers de ressources (extension .resx). On peut ajouter ces fichers avec dans le menu « Add -> Add New Item » en choisissant « Resource File ».

    clip_image002

    Attention, pour que le framework retrouve ses petits il faut adopter une stratégie de nommage particulière : d’abord un fichier de ressources par défaut qu’on nomme <NomDuFichierRessources>.resx  puis ensuite les fichiers de ressources localisées qu’on nommera de la façon suivante : <NomDuFichierRessources>.<Locale>.resx.

    Je vous conseille de commencer par créer uniquement le fichier par défaut, y insérer toutes vos chaines de caractères, et ensuite seulement, une fois que toutes les ressources par défaut sont créées, copier/coller et renommer le fichier pour les différentes cultures à supporter, avant de changer le contenu des chaines de caractères : de cette manière vous êtes sûr que toutes les chaines de caractères localisées ont le même nom indépendamment de la culture…

    Il faut ensuite définir la culture par défaut supportée par l’application (celle qui utiliser la fichier <NomDuFichierRessources>.resx). Pour cela dans l’explorateur de solution, cliquez sur le nom du projet et choisissez ses propriétés (Properties). Dans l’onglet Application, cliquez sur le bouton Assembly Information et dans la liste Neutral language choisissez la culture par défaut.

    clip_image004

    Dernière opération « manuelle » s’il en est, fermez votre projet et ouvrez le fichier .csproj dans un éditeur de texte : c’est fait un fichier xml. Trouvez le tag  <SupportedCultures> et ajoutez toutes les locales que votre application doit supporter (y compris la locale par défaut) dans ce tag, séparées par des points-virgules.

    <SupportedCultures>en-US;fr-FR;</SupportedCultures>
    

    Il ne reste plus qu’à utiliser ces fichiers de ressources dans votre projet : là encore, il faut suivre quelques étapes : c’est un peu plus compliqué qu’avec le .NET Compact Framework car il faut que ces chaines de caractères localisées soient accessible à la fois depuis le code et le XAML sous forme de ressources.

    D’abord, ouvrez chacun de vos fichiers ressources et dans la liste « Access Modifier » en haut de l’éditeur sélectionnez la valeur « Public ». Il faut le faire pour chacun des fichiers ressources.

    clip_image006

    Ensuite, il faut créer une nouvelle classe dans votre application (qu’on appellera comme on veut, j’utilise ici « LocalizedStrings » car c’est ce qui est suggéré par la documentation MSDN) dans laquelle on créera une propriété qui reverra vers ces fichiers de ressources fraichement créés : dans le bout de code suivant, LocalizedResources est le nom que j’ai choisi pour mon fichier de ressources, on retrouve donc une classe de ce type dans l’espace de nommage de mon application.

    public class LocalizedStrings
    {
        public LocalizedStrings()
        { }
    
        private static LocalizedResources locTestResources = new LocalizedResources();
        public LocalizedResources LocTestResources { get { return locTestResources; } }
    }

    Après ça, il faut ouvrir le fichier App.xaml et dans la section « <Application.Resources> » il faut rajouter le bout de code suivant :

    <Application.Resources>
        <local:LocalizedStrings xmlns:local="clr-namespace:LocalizationTest" x:Key="LocalizedStrings" />
    </Application.Resources>
    

    Si votre projet dispose de plusieurs fichiers de localisation, il suffit de rajouter des propriétés dans la classe LocalizedStrings.

    Enfin, il n’y a plus qu’à utiliser ces ressources dans le code XAML avec un simple Binding de la façon suivante :

    {Binding Path=LocTestResources.PageName, Source={StaticResource LocalizedStrings}}

    Et dans le code C#, c’est d’une simplicité déconcertante : il suffit d’accéder à la classe LocalizedResources :

    PageTitle.Text = LocalizedResources.PageName;

    Vous voilà maintenant en mesure de supporter plusieurs langages dans une même version de votre application, effort qui saura sans aucun doute séduire vos utilisateurs. Attention cependant à bien réfléchir à vos traductions !!

  • Pierre's Embedded and Mobile Blog

    [Microsoft Days] Session sur Windows Phone 7 pour les développeurs

    • 6 Comments

    Les Microsoft Days c’est reparti, et les rencontres techniques commencent demain à Aix! J’aurai le plaisir d’y animer une session pour développeurs: “Silverlight et XNA: Développeurs, à vous le mobile”. L’occasion de se rencontrer et d’échanger :-)

    Le planning est le suivant:

    • Aix-en-Provence: 30 Septembre
    • Paris: 7 Octobre
    • Lyon: 12 Octobre
    • Toulouse: 14 Octobre
    • Strasbourg: 18 et 19 Octobre
    • Lille: 20 et 21 Octobre
    • Nantes: 02 et 03 Novembre

    Inscrivez-vous et viendez!

  • Pierre's Embedded and Mobile Blog

    Développeurs-bloggeurs: offrez vous un peu de trafic avec Windows Phone 7

    • 0 Comments

    Dans un effort de structurer le contenu Windows Phone 7 francophone à destination des développeurs, le centre de développement Windows Phone 7 se restructure, on y retrouvera des articles techniques, des webcasts sur le développement et le design, un coach pour se former… et des liens vers les articles pertinents de la communauté!

    Nous en avons sélectionnés un certain nombre que nous avons glanés dans nos rss readers et sur le net, mais il doit y en avoir beaucoup plus que ça! si vous voulez profiter du trafic du centre de développement Windows Phone 7 (des dizaines de milliers d’UU par mois) pour renvoyer vers vos blogs, c’est le bon moment!

    Vous pouvez:

    • Nous envoyer directement les liens vers vos posts quand vous les publiez
    • Nous envoyer un lien vers votre flux RSS à propos de Windows Phone 7 (soyez gentils, un peu de filtrage!) et nous publierons nous même le lien
    • Dernier point, et probablement celui qui vous offre le plus de visibilité, c’est carrément de reprendre le template d'article pour MSDN et nous l’envoyer!
  • Pierre's Embedded and Mobile Blog

    Barcamp Windows Phone 7 à la Cantine, organisé par Backélite

    • 0 Comments

    Backelite, l’agence mobile star de la place de Paris, organise un barcamp à la cantine le Samedi 2 Octobre de 10h à 17h:

    http://barcamp.org/WindowsPhone7Camp

    Inscrivez-vous (et venez!) pour tailler le bout de gras avec d’autres développeurs mobiles (on espère en voir de tous bords) et éventuellement (on l’espère aussi) apprendre plein de choses!

  • Pierre's Embedded and Mobile Blog

    [Windows Phone 7] RTM des outils: quoi de neuf pour les développeurs?

    • 0 Comments

    La nouvelle n’aura échappée à personne, les outils de développement Windows Phone 7 sont RTM. Quoi de neuf pour les développeurs?

    En plus de cela, Une équipe chez Microsoft a été chargée de développer un certain nombre de contrôles complémentaires:

    • Context Menu
    • DatePicker
    • TimePicker
    • Gesture Recognizer
    • Toggle Switch
    • WrapPanel

    Disponibles dans le Toolkit Silverlight pour Windows Phone!

    Dernière chose, et pas des moindres: le Mobile Advertising SDK for Windows Phone 7 qui permet d’insérer de la pub dans son application pour augmenter ses revenus :) petit bémol: pour l’instant il n’est disponible que pour les états-unis, mais il devrait arriver rapidement dans les autres pays.

    Bien entendu, le Training Kit a été mis à jour également!

Page 1 of 1 (5 items)