• Go DevMENTAL

    Lister toutes vos applications Windows Phone dans chacune d’entre elles

    • 0 Comments

    Christian HissibiniDéveloppeur Windows Phone Christian Hissibini (Histech Solutions) partage comment il a fait la promotion de ses applications à partir de chacune d’entre elles.

    Cet post est aussi disponible en anglais/This post is also available in English

    Note de Susan: Au Canada, dans le cadre du Mouvement des développeurs, amassez des points à chaque étape, puis échangez ceux ci contre des récompenses géniales!

    Assez avec les notes de Susan, vas-y Christian

    La Problème: Comment lister mes applications dans un application Windows Phone

    Nous savons tous que lister l’ensemble de nos propres applications à partir de chacune d’entre elles constitue un moyen efficace et gratuit pour faire leur promotion et aussi leur publicité. De cette manière, nous permettons à nos applications de se vendre d’elles-mêmes.

    clip_image002

    Malheureusement la documentation MSDN ne nous renseigne pas nécessairement sur une méthode officielle pour le faire. Bon nombre de développeurs proposent des méthodes alternatives mais qui sont souvent lourdes d’usage.

    Recherchant une solution légère, on m’avait d’abord suggéré Marketplace Search Task (voir la discussion ici), mais mes applications n’étaient pas les seules à apparaître dans la liste. Ce n’est pas que je ne suis pas gentil, mais c’est juste que les autres n’auraient pas aimé que je leur fasse de la pub gratuite J

    clip_image004

    Ensuite j’ai opté pour une autre méthode plus égoïste, mais moins élégante car elle gâchait l’expérience utilisateur. En fait, il fallait passer par le navigateur via un lien Web et le web Browser Task.

    Tout récemment, en faisant des recherches sur les schémas URI de lancement des applications intégrées pour Windows Phone 8(URI schemes for launching built-in apps for Windows Phone 8), je suis tombé sur un précieux, la solution miracle… Le schéma d’URI Zune !

    La solution : Appel de la méthode LaunchUriAsync(Uri) avec son paramètre associé à un schéma d’URI Zune

    Lol qui a dit que Zune était vraiment mort ? Même s’il s’agit d’un fantôme, c’est le seul qui permet d’afficher à partir du store, toutes les applications d’un seul et unique éditeur dont le nom est spécifié en paramètre.

    La syntaxe du schéma d’URI en question est la suivante :

    . zune:search?publisher=[publisher name]

    Exemple d’implémentation :

    Considérons un bouton associé à l’événement ListMyAppBtn
    Le code donne ceci :

    XAML

    <Button Content="Hint Me" HorizontalAlignment="Left" Margin="68,158,0,0" 
    VerticalAlignment="Top" Height="136" Width="340" Tap="ListMyAppsBtn"/>

    C#

    async void ListMyAppsBtn(object sender, System.Windows.Input.GestureEventArgs e)
    
    {
    
    await Windows.System.Launcher.LaunchUriAsync(new Uri("zune:search?publisher=HisTech Solutions"));
    
    }

    Remarque : Le paramètre [publisher name] est sensible à la casse (it is case sensitive). Par exemple, avec [Histech Solutions] comme paramètre, il ne trouvera rien, pourtant avec [HisTech Solutions] le listing s’affichera correctement.

    Téléchargements

    Exemple ListMyApps

    Pour aller plus loin avec schémas d’URI Zune

    Voici d’autres schémas d’URI Zune qui pourraient être utiles pour la promotion de vos applications :

    Lance le store et affiche le contenu spécifié

    zune:search?keyword=[search keyword]&publisher=[publisher name]&contenttype=app

    Lance le store et affiche les applications en fonction des mots clés spécifiés

    zune:search?keyword=[search keyword]&contenttype=app

    Lance le store et affiche la page d’évaluation de l’application appelante

    zune:reviewapp

    Lance le store et affiche la page d’évaluation de l’application spécifiée

    zune:reviewapp?appid=app[app ID]

    Lance le store et affiche les détails de l’application spécifiée

    zune:navigate?appid=[app ID]

    Documentation

    Retrouvez la liste complète des schémas URI pour le lancement des applications intégrées Windows Phone à partir du lien suivant :

    http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj662937(v=vs.105).aspx

  • Go DevMENTAL

    How to Cross promote your Windows Phone apps

    • 1 Comments

    Christian HissibiniWhy not list all your Windows Phone applications inside each other, so if someone likes one of your apps they can discover other apps you published?

    Windows Phone developer Christian Hissibini (Histech Solutions) shares how he found a way to cross promote his applications, so that his fans could find more of his apps.

    Note from Susan: I hope Christian’s story helps you increase downloads of your own applications, don’t forget Canadian developers can earn rewards for their apps through Developer Movement!

    This blog post is also available in French/ Cette poste est aussi disponible en francais

    Now take it away Christian!

    The problem: How to get a list of all my published apps to display in a phone app

    We all know that listing all our applications within each other is an effective and free way to promote and publicize them. This way we can help our apps sell themselves.

    image

    Unfortunately the MSDN documentation does give us an official way of doing it. A number of developers have proposed different solutions but they are often cumbersome.

    Researching a simpler solution, someone suggested I try the Marketplace Search Task (see the discussion here), but my applications weren’t the only ones returned by the list. It’s not that I’m not a nice person, but I ‘m not sure the other publishers would really want me providing them with free publicity :)

    image

    Next, I tried another more self centered method, but it was less elegant because it affected the user experience. Basically, it went through the browser to a hyperlink with the Web Browser Task.

    Recently, while doing research on the URI schemes for launching applications integrated with Windows Phone 8, I discovered the precious, the miracle solution…the URI Zune Scheme!

    The Solution: Call the LaunchUriAsync(Uri) with a parameter associated to a URI Zune Scheme

    LOL! Who said Zune is dead? Even if it is a ghost, it’s the only way to post from the store, all the applications of a particular publisher where you user the publisher name as the specified parameter.

    The syntax of the URI schema in question is as follows:

    . zune:search?publisher=[publisher name]

    Here’s an example.

    Take a button associated with the event ListMyAppBtn. You get the following code:

    XAML

    <Button Content="Hint Me" HorizontalAlignment="Left" Margin="68,158,0,0" 
    VerticalAlignment="Top" Height="136" Width="340" Tap="ListMyAppsBtn"/>

    C#

    async void ListMyAppsBtn(object sender, System.Windows.Input.GestureEventArgs e)
            {
                await Windows.System.Launcher.LaunchUriAsync(new Uri("zune:search?publisher=HisTech Solutions"));
            }
    

    Note: The parameter publisher name is case sensitive. For example with Histech Solutions as a parameter, it won’t find anything, however with HisTech Solutions the correct results are returned.

    Related Downloads

    Sample ListMyApps

    Download the source code of this example from MSDN

    Going further into Zune URI schemas

    Here are some other URI Zune Schemas which could be useful for promoting your applications:

    Launch the store and post the specified content

    zune:search?keyword=[search keyword]&publisher=[publisher name]&contenttype=app

    Launch the store and list the applications based on specified keywords

    zune:search?keyword=[search keyword]&contenttype=app

    Launch the store and display the page to rate the app making the call

    zune:reviewapp

    Launch the store and display the page to rate the specified app

    zune:reviewapp?appid=app[app ID]

    Launch the store and list the details of the specified application

    zune:navigate?appid=[app ID]

    Documentation

    You can see the complete list of URI Schemes for launching applications integrated with Windows Phone at the following link:

    http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj662937(v=vs.105).aspx

  • Go DevMENTAL

    Internationaliser son application Windows Phone – Pourquoi et Comment ?

    • 0 Comments

    Christian HissibiniDéveloppeur Windows Phone Christian Hissibini (Histech Solutions) partage comment il a crée des applications Windows Phone pour un public international.

    Cet post est aussi disponible en anglais/This post is also available in English

    Note de Susan: Au Canada, dans le cadre du Mouvement des développeurs, amassez des points à chaque étape, puis échangez ceux ci contre des récompenses géniales!

    Assez avec les notes de Susan, vas-y Christian

    Généralement, quand on se lance dans un projet de création d’application, que l’on parte d’une idée de génie ou d’une idée complètement loufoque, on espère secrètement que celle-ci devienne « The Next Big Thing » :)

    Objectif de Mission : « The Next Big Thing »

    Il s’agit ici de séduire le maximum d’utilisateurs… A ce propos, la plateforme Windows Phone nous offre la possibilité de rendre notre application disponible dans le monde entier ou de ne la restreindre qu’à certains pays.

    Mais pour garantir un taux de téléchargements et d’adoptions efficients, l’application se doit d’être conviviale et cela passe par la considération du public visé, de la culture, de la zone géographique et de la langue d’interface; d’où la pratique de l’internationalisation.

    C’est quoi Internationaliser une application ?

    Vous l’avez sans doute déjà deviné, internationaliser une application c’est l’adapter à d’autres langues, marchés, cultures et régions.
    Ici deux notions sont essentielles : Globalisation et Localisation.

    La Globalisation permet à l’application, pendant son fonctionnement, de considérer les paramètres de culture de l’utilisateur (format d’affichage de date, monnaie, etc.).

    La Localisation quant à elle permet à l’application de considérer la langue et les paramètres régionaux de l’utilisateur. Elle consiste entre autre à la traduction de texte, au choix de police (fonte), au sens de lecture, au choix des visuels adéquats, etc.

    Maintenant que nous avons meilleure connaissance du sujet, rappelons quelques avantages de l’internationalisation, histoire d’encourager les plus sceptiques.

    Quels sont les avantages de l’internationalisation ?

    • L’expérience utilisateur est de loin meilleure.
    • Elle permet de toucher un public plus important (on parle ici du monde entier).
    • On récolte forcément beaucoup plus de téléchargements.
    • Le taux d’adoption de l’application est beaucoup plus élevé.
    • Etc.

    Bref tout tourne autour de l’argument « The Next Big Thing » :). Tout ceci a forcément un impact positif sur les ventes dans les différents marchés et génère plus de trafic au sein de l’application.

    Convaincu ? Allons donc voir comment préparer notre application pour qu’elle soit prête pour la conquête du monde. J

    Comment préparer son application pour le marché international ?

    Intégrer la logique de l’internationalisation dès la phase de conception est très avantageux, mais même si vous partez d’un projet existant, soyez sans crainte car grâce à l’infrastructure .NET, l’intégration est super simple à mettre en œuvre. La globalisation et à la localisation deviennent vite un jeu d’enfant.

    1 – Globalisation d’une application Windows phone

    Comme nous l’avons dit tantôt, la globalisation permet à l’utilisateur de retrouver un environnement culturel qui lui est familier.
    Pour ce faire, nous avons recours à la classe CultureInfo. Celle-ci contient déjà les langues adéquates et les codes de pays. Par exemple, en-US pour anglais-Etats Unis ou fr-CA pour français-Canada (qui est différent de fr-FR pour français-France). L’instance est prête à être utilisée pour tous le formatage de chaînes locales (devise, date et heure).

    Exemple : Modification de la culture courante grâce à CultureInfo

    String cul; 
    
    cul = "fr-CA";
    
    CultureInfo newCulture = new CultureInfo(cul); 
    
    Thread.CurrentThread.CurrentCulture = newCulture;
    
    Thread.CurrentThread.CurrentUICulture = newCulture;
    

    Le site Web de MSDN propose dans sa documentation un tutoriel intitulé “How to build a globalized app for Windows Phone”.
    Vous y retrouverez les différents usages dont on a recourt dans la globalisation d’une application et aussi, un exemple d’application globalisée est disponible en téléchargement.

    2 – Localisation d’une application Windows Phone

    Note : Dans ce contexte, localisation signifie adaptation à un groupe linguistique... Donc, aucun lien avec le positionnement GPS...

    Ici aussi la plateforme nous simplifie les choses, car lorsque nous créons un nouveau projet Windows Phone, un dossier de ressources (Resources) est automatiquement ajouté à la solution. Ce dossier contient un fichier appelé AppResources.resx. Ce fichier contient les chaînes traduisibles.

    clip_image001

    Normalement, lorsqu’on clique sur ce fichier, un éditeur de ressources s’ouvre.

    clip_image002

    Comme nous le constatons, par défaut, ce fichier intègre des entrées telles que ResourceLanguage (qui représente la langue par défaut), ResourceFlowDirection (qui détermine le sens directionnel pour la lecture).

    Comment ajouter une nouvelle entrée au fichier de ressources ?

    Pour ajouter une nouvelle entrée, il suffit de cliquer sur une nouvelle ligne et ajouter le nom et la valeur. Il n’y a pas plus simple non!? J

    Bon, une petite illustration ne fera que grand bien

    clip_image004

    A présent que nous savons ajouter de nouvelles entrées dans le fichier de ressources, voyons comment faire pour que notre code vienne lire ces entrées.

    Comment lier le code aux entrées du fichier de ressources ?

    Cette liaison se fait aisément au niveau du XAML.

    En effet, il suffit de remplacer le texte codé en dur entre les guillemets des attributs par le nom attribué à la ressource correspondante.

    Un exemple vaut mieux qu’un long discours :

    Supposons que nous voulons intégrer cette citation « If you lie to the compiler, it will get its revenge. » de Henry Spencer qui devra être traduite plus tard.

    Sans localisation nous avons :

    <TextBlock Text="Si on ment à un compilateur, il prendra sa revanche." 
    Style="{StaticResource PhoneTextNormalStyle}" Margin="12,0"/>

    - Avec localisation ça devient :

    <TextBlock Text="{Binding Path=LocalizedResources.CitationHenry, Source={StaticResource LocalizedStrings}}" 
    Style="{StaticResource PhoneTextNormalStyle}" Margin="12,0"/>

    Dans cette dernière partie, nous avons fait savoir au TextBlock qu’il recevra sa valeur à partir de la ressource nommée CitationHenry, présente dans le fichier AppResources.resx

    Une nouvelle ligne devra donc être obligatoirement ajoutée au fichier de ressources

    clip_image006

    Les moins aveugles d’entre nous ont surement constaté que dans les commentaires générés initialement avec le fichier MainPage.xaml de notre solution, il existe une remarque concernant la localisation.

    <!-- REMARQUE CONCERNANT LA LOCALISATION :
    
    Pour localiser les chaînes affichées, copiez leurs valeurs dans les clés correctes
    
    du fichier de ressources linguistiquement neutre de l'application (AppResources.resx), puis
    
    remplacez le texte codé en dur entre les guillemets des attributs
    
    par la clause de liaison dont le chemin pointe vers ce nom de chaîne.
    
    Par exemple :
    
    Text="{Binding Path=LocalizedResources.ApplicationTitle, Source={StaticResource LocalizedStrings}}"
    
    Cette liaison pointe vers la ressource de chaîne du modèle appelée ApplicationTitle.
    
    L'ajout de langues prises en charge à l'onglet Propriétés du projet crée un
    
    fichier resx par langue qui peut restituer les valeurs traduites de vos
    
    chaînes d'interface utilisateur. La liaison dans ces exemples peut entraîner le retrait de la valeur des
    
    attributs du fichier .resx qui correspond à la valeur
    
    CurrentUICulture de l'application au moment de l'exécution.
    
    -->
    

    Comme quoi il est important de considérer les petits commentaires verts qui se retrouvent dans les fichiers générés automatiquement lors de la création d’un nouveau projet :)

    Dans l’exemple précédent, nous avons vu comment localiser du texte, mais alors qu’en est-il des images ?

    Localisation des images

    Dans la pratique, localiser une image a le même principe que localiser du texte. En fait, il suffit juste de mettre son URI en ressource comme suit :

    <Image Source="{Binding Path=LocalizedResources.ImageURI, Source={StaticResource LocalizedStrings}}"/>

    A présent que nous avons quelques notions sur la localisation des applications, il est temps de voir comment la rendre accessible au plus grand nombre et comme vous vous en doutiez bien, cela passe par la prise en charge multilingue.

    Comment ajouter de nouvelles langues à son application ?

    Ajouter une ou plusieurs nouvelles langues à son application revient à joindre des fichiers de ressources additionnels.

    A ma connaissance, il existe 2 méthodes :

    Méthode 1 : Manuelle


    Pour ce faire, il suffit d’ouvrir les propriétés de notre projet en effectuant un double-clic sur « Properties », ensuite à cocher les langues correspondantes dans le box « cultures prises en charge » et enfin à générer.
    Une fois les fichiers AppResources créés, il faudra juste les renseigner à l’aide des valeurs correspondantes.

    clip_image008

    Méthode 2 : A l’aide du kit de ressources pour application multilingue (Multilingual App Toolkit)

    Cette méthode est ma préférée :) Vous verrez pourquoi…

    Nous devons d’abord télécharger et installer le kit de ressources pour application multilingue. Qui en fait est une extension pour Visual Studio qui vient simplifier tout le processus de traduction.

    Dans la page de téléchargement, je vous conseille de choisir la version française.

    Une fois l’installation complétée, dans le menu de Visual Studio, sélectionnez Outils puis cliquez sur Activer le kit de ressources pour application multilingue.

    Dans l’explorateur de solution, faites un clic droit sur le fichier du projet et sélectionnez Ajouter des langues de traduction.

    Une fois la fenêtre ouverte, sélectionnez la langue désirée. Dans notre exemple allons commencer par offrir le rêve américain à notre application en choisissant Anglais (États-Unis) [en-US]

    clip_image009

    Après avoir cliqué sur le bouton OK, les fichiers ressources en anglais sont automatiquement générés.

    clip_image010

    Si vous cliquez sur ce nouveau fichier de ressources, vous remarquerez que toutes les entrées de votre premier fichier AppResources s’y retrouvent, mais sans aucune traduction.
    A ce niveau, nous avons le choix soit de traduire manuellement chaque entrée ou de passer par l’outil de traduction automatique fourni par le kit de ressources.

    clip_image011

    Il faut noter que la traduction n’est pas souvent parfaite, donc la faire vérifier serait fort utile et ça nous évitera aussi de tomber dans la confusion ou même de déclencher un scandale international J

    A présent que nous avons intégré une nouvelle langue à notre projet, il est temps de tester afin de pouvoir pousser un hourra de joie J

    Comment effectuer des tests ?

    On commence par générer notre solution.
    Ensuite on lance l’application sur l’émulateur (ou notre appareil).
    Enfin dans l’émulateur sélectionner Paramètres à Ensuite langue + région à Modifier la langue du téléphone en anglais (ou toute autre langue choisie pendant la localisation) puis cliquer (ou appuyer) sur Redémarrer le téléphone

    On relance l’application sur l’émulateur (ou notre appareil) et puis quoi ??? On vient de franchir un cap vers la conquête du monde !!! Souvenez-vous de l’objectif de notre mission : The Next Big Thing !!!

    Nous ne pouvons clore cette partie sans citer quelques bonnes pratiques qui nous aideront à réussir efficacement nos localisations.

    Bonnes pratiques pour la localisation

    • Séparer les ressources du code (permet de rendre le code indépendant de la langue et ainsi de supporter des encodages différents…).
    • Ne pas abuser de la localisation (Par exemple, on n’a pas besoin de localiser des balises…)
    • Prévoir des longueurs de chaîne plus grandes (la traduction d’un mot peut être plus longue…)
    • Localiser les phrases au lieu des mots séparément. (Aide à préserver le sens des phrases après traduction…)
    • S’assurer de lister les paramètres dans le bon ordre.
    • Utiliser des attributs uniques pour identifier les ressources
    • Choisir une approche appropriée de traduction.

    Pour plus de détails concernant ces bonnes pratiques, je vous invite à consulter la documentation de MSDN, à la section intitulée « Localization best practices for Windows Phone »

    Pour aller plus loin…

    Voici un rappel de la liste de ressources en ligne qui m’ont été utiles dans la pratique et aussi dans la rédaction de cet article. Elles vous aideront à aller plus loin sur le sujet :

    Conclusion

    Nous avons vu que l’internationalisation des applications Windows Phone comporte de gros avantages et, aussi qu’il est important d’intégrer cette logique dès la phase de conception et enfin, que sa mise en œuvre, à travers la globalisation et la localisation, est aussi simple qu’un jeu d’enfant.
    Si un aspect évoqué dans cet article ne vous semble pas assez clair, n’hésitez pas à poser vos questions.

    Bonne continuation vers «The Next Big Thing » :)

    P.S. N’oubliez pas, cette année au Canada, dans le cadre du Mouvement des développeurs, vous apprendrez sous la tutelle du Sensei du code et maîtriserez l’art de coder! Amassez des points à chaque étape, puis échangez ceux ci contre des récompenses géniales!

  • Go DevMENTAL

    Localizing your Windows Phone app – why and how?

    • 1 Comments

     

    Christian HissibiniWindows Phone developer Christian Hissibini (Histech Solutions) shares how he created apps that target multiple languages and countries. His apps have been successful in both the French France and Canadian English and French stores.

    Note from Susan: I hope Christian’s story helps you build better apps for multiple markets, don’t forget Canadian developers can earn rewards for their apps through Developer Movement!

    This blog post is also available in French/cet post est aussi disponible en francais

    Now take it away Christian!

    Generally, when you start creating a new application, that’s part of a brilliant an idea, or a completely absurd idea, we secretly hope it will become “The Next Big Thing” :).

    Mission Objective: “The Next Big Thing”

    The trick is to seduce the maximum number of users… To this end, the Windows Phone platform offers you the option of making your application available across the entire world or to restrict it to specific countries.

    But to guarantee lots of downloads and good adoption, the application needs to be inviting for a specific public, culture, geographic area and language; hence the practice of localization.

    In this post we will cover

    • What is localizing an application
    • How to prepare your application for an international market
    • Globalizing a Windows Phone application
    • Localizing a Windows Phone application
    • How do you add a new language to your application
    • How do you test your localized applicaiton

    What is localizing an application?

    You have probably already guessed, localizing an application is adapting it to other languages, markets, cultures and regions.

    There are actually two aspects to consider: Globalization and localization.

    Globalization allows an application, when running, to consider cultural aspects for the user (date format, currency, etc…)

    localization is about setting up the application to consider the language and regional parameters of the user. This consists of translating text, reading direction, suitable visuals, etc.

    Now that we have a better understanding of the concepts, let’s take a look at a few advantages of localizing, to try and convert the skeptics.

    What are the advantages of localization?

    • The user experience is far better
    • It allows you to reach a greater market (the whole world)
    • You get more downloads
    • The adoption rate of the application is much higher
    • Etc.

    Put simply, this will help your app become “the Next Big Thing” :). All these points have a positive impact on your application sales in different markets and generate more traffic and users for your application.

    Convinced? Well then lets see how to prepare our application so it’s ready to conquer the world!

    How to prepare your application for an international market?

    Planning to introduce localization from the early stages is easiest, but even if you have a completed project, don’t worry because thanks to the .NET infrastructure, integration is super easy to put in place. Globalization and localization become child's play.

    1. Globalizing a Windows Phone application

    As we said earlier, globalization is all about giving the user a more familiar cultural environment.

    To do this we access the CultureInfo class. This contains language codes for different countries. For example, en-US for US English or fr-CA for French Canada. (which is different from fr-FR for French-France). The instance is ready to be used to format all your local strings (dates, times, currencies).

    Here is a code snippet showing how you can modify the current culture using CultureInfo

    String cul; 
    cul = "fr-CA";
    CultureInfo newCulture = new CultureInfo(cul); 
    Thread.CurrentThread.CurrentCulture = newCulture;
    Thread.CurrentThread.CurrentUICulture = newCulture;
    

    MSDN includes a tutorial “How to build a globalized app for Windows Phone”. In this document you will find different ways to globalize an application and a sample globalized application you can download.

    2. Localizing a Windows Phone application

    Note: in this context, localizing means adapting to the local language and has nothing to do with GPS location…

    Here again, the platform makes our lives easier, because when we create a new Windows Phone project, a resources folder (Resources) is automatically added to the solution. This folder contains a file called AppResources.resx. This file contains strings that you will need to translate. image

    When you click on the AppResources.resx file, the resource editor opens.

    image

     

    As you can see, by default, this file controls values such as ResourceLanguage (which is our application’s default language), ResourceFlowDirection (which determines if the text is read right to left or left to right).

    How do you add a new element to the resources file?

    To add a new element, you just click on a new line and add the name and value for the entry. Couldn’t be simpler right? :)

    Well, still it never hurts to include a screenshot

    image

    Now that we know how to add new values to the resources file, let’s see how we can access these values from our code.

    How to access the resource file from our code?

    The link to the resources file is done through the XAML.

    basically, you just replace the hard-coded text of your attributes with the name of the corresponding resource.

    An example is worth a thousand words.

    Suppose we want to include the following text “If you lie to the compiler, it will get its revenge” a wonderful quote from Henry Spencer which we will need to translate later.

    Without localization, our code would look like this:

    <TextBlock Text="Si on ment à un compilateur, il prendra sa revanche." 
    Style="{StaticResource PhoneTextNormalStyle}" Margin="12,0"/>

    After localization, the code looks like this :

    <TextBlock Text="{Binding Path=LocalizedResources.CitationHenry, Source={StaticResource LocalizedStrings}}" 
    Style="{StaticResource PhoneTextNormalStyle}" Margin="12,0"/>

    In the second example, the TextBlock reads it’s value for the Text attribute from the resource called CitationHenry in the file AppResources.resx.

    In order for this to work, we would of course need to add another entry to our resources file.

    image

     

    The more observant among us will no doubt have noticed that the when you create a new project, if you look at the comments in the default MainPage.xaml of your solution, there are comments regarding localization.

     <!-- LOCALIZATION NOTE:
     To localize the displayed strings copy their values to appropriately named
     keys in the app's neutral language resource file (AppResources.resx) then
     replace the hard-coded text value between the attributes' quotation marks
     with the binding clause whose path points to that string name.
    
     For example:
    
     Text="{Binding Path=LocalizedResources.ApplicationTitle, Source={StaticResource LocalizedStrings}}"
    
     This binding points to the template's string resource named "ApplicationTitle".
    
     Adding supported languages in the Project Properties tab will create a
     new resx file per language that can carry the translated values of your
     UI strings. The binding in these examples will cause the value of the
     attributes to be drawn from the .resx file that matches the
     CurrentUICulture of the app at run time.
     -->

    So it is important to look at those little green comments in the generated files when you create a new project :)

    In the preceding example we saw how to localize our text, but what about images?

    Localizing images

    In practice, localizing an image is the same principle as localizing text. It’s just a matter of specifying the URI for your resource as follows.

      <Image Source="{Binding Path=LocalizedResources.ImageURI, Source={StaticResource LocalizedStrings}}"/>       

    Now that we have a grasp on the principles of localization, it’s time to see how we can make our application accessible to the greatest possible audience and as you have no doubt guessed, that’s done by making it multilingual!

    How do you add a new language to your application?

    Adding one or more languages to your application comes back to adding additional resource files.

    To my knowledge there are 2 ways to do this:

    Method 1 – Manually

    To do it manually, just open the project properties by double clicking on “Properties” in the  Solution Explorer and then selecting the languages you want to support in the “Supported Cultures” list box and the rebuilding the solution to create the corresponding resource files.

    Once the AppResources files are created, you will need to update each file with appropriate corresponding values.

    image

    Method 2 – Using the Multilingual App Toolkit

    This is my favorite method :) and you will quickly see why…

    First you will need to download and install the Multilingual App Toolkit. This is an extension for Visual Studio which simplifies translation.

    When you download the toolkit, choose the language you prefer to work with.

    Once installation is complete, in the Visual Studio menu, choose Tools | Enable Multilingual Toolkit.

    In Solution Explorer, right click on the project and choose Add translation languages.

    A window will open and you can select the desired languages and then when you click OK, the additional resource files are automatically generated.

    image

    here you can see my application ( the original code was in French, so you can see the US English resource files added)

    image

    If you click on this new resource file, you will see that all the entries from your original AppResources file are there, but none of them are translated.

    At this point, you have the choice between translating everything manually or to use the Translation tool provided by the toolkit (check out the Translate button).

    image

    The translation won’t be perfect, so it’s a VERY good idea to proof read or to have a friend who speaks the language proof read your translations, this will avoid confusion and accidental international incidents :)

    Now we have a new language integrated into our project. It’s time to test it and hopefully whoop with joy at our success!

    How to test the application?

    We start by building our solution and launching it in the emulator (or on our phone).

    In the emulator, select Settings | Language + region  then modify the Phone language to French (or whatever language you want to test) then click Restart Phone.

    The application will restart on the emulator (or on your phone) and now??? You have just climbed one more summit towards your goal of world domination!!! Remember our mission objective: The Next Big Thing!!

    We can’t finish this party without sharing a few best practices that will help with strong localization.

    Best practices for localization

    • Separate the resource strings from the code (i.e. avoid having code that sets a hard coded string value, this allows your code to be independent of the language and makes it easier to support additional languages)
    • Do not feel you have to localize everything (you probably don’t need to start localizing button icons, that said there may be times…)
    • Be prepared for longer text strings (often a translated phrase or word is longer than the original)
    • Localize phrases rather than separate words (The sentences will make more sense)
    • Make sure you list parameters in the right order (if your list is in alphabetical order, and you translate the strings, is it still in alphabetical order?)
    • Use unique attributes to identify your resources
    • Pick the right method for translation

    For more details on best practices, check out MSDN “Localization best practices for Windows Phone

    Going further…

    Here are some online resources I found useful both in researching this article and for my own applications. They will help you get further into the world of localization.

    - The superb tutorial « How do you add French to an English Phone app? », by Susan Ibach (@HockeyGeekGirl) (Note from Susan who is reading this because she is translating Christian’s blog post from the original French…thank you, glad you found the post helpful)

    - MSDN article « How to build a globalized app for Windowws Phone».

    - MSDN article « How to build a localized app for Windows Phone »

    - MSDN article « Localization best practices for Windows Phone »

    Conclusion

    We have seen that localizing a Windows Phone application brings some big advantages and it’s important to consider localization logic right from the design phase and finally that making it happen is really child’s play.

    If there is anything in this article you had trouble following, please don’t hesitate to ask questions!
    Good luck with your attempt at the “The Next Big Thing” :)

    P.S. A quick note from Susan – first of all: another great post Christian, thank you! Second, a reminder that Canadian Developers can earn rewards as they learn to code and publish apps on the Windows platforms, visit Developer Movement to find out how you can earn points and cash them in for rewards!

  • Go DevMENTAL

    Visual Studio Tips and Tricks – Formatting your code

    • 1 Comments

    VisualStudioLogoWith a little setup and a keyboard shortcut you can easily keep your code formatted the way you want it!

    We all have our habits in terms of how we format our code. So why not take 5 minutes to modify the Visual Studio settings so the code looks the way you want all the time! No matter what programming language you work with, there are settings you can control that affect the readability of your code.

    Find more Visual Studio tips and tricks here

    In this post I’ll share tips on how to modify a number of formatting settings, including

    • Fonts and Colors
    • Indenting
    • Spacing
    • Braces
    • Line Wrapping

    Fonts and Colors

    In addition to be able to changing the color theme in Visual Studio, you can also modify the font size or the colors used for different highlighting in your code. If you find the green hard to read for comments, you could change the font size, font color, or background color.

    Just go to Tools | Options | Environment | Fonts and Colors (TIP: if you can’t remember that and are in Visual Studio 2012 or higher you could just use Quick Launch to find the Fonts and colors setting!)

    image

    image

    Indenting code

    Is the indenting too much or too little? You decide. The default indentation and tabs is 4 spaces, but you can increase or decrease the indents. Once again, you want to start in Tools | Options | Text Editor | C# | Tabs

    image

    image

    When you return to your code, you will notice the changes have not taken effect. Just use the keyboard shortcut <CTRL><K><D> anywhere in your code to apply your formatting changes. Here you can see the code with the increased indentation after I apply the changes.

    image

    If you are using the Quick Launch featured just search for “tabs”

    In addition to controlling the number of spaces used when code is indented, you can control what is indented. For example, do you prefer to have your braces indented? or inline with the method declaration?

    image

    image

    Braces

    Does the opening brace for a method go after the method name or on the next line? I could start a whole debate over that, but instead I’m just going to let you set it up the way you want it to work! You can control where opening braces appear for method declarations, control blocks and more! Just go to Tools | Options | Text Editor | C# | Formatting | New Lines or search for braces in Quick Launch.

    image

    image

    If you make a change in the settings, don’t forget you will have to use the keyboard shortcut <CTRL><K><D> to apply your formatting changes to existing code.

    Spaces

    Did you know you can control whether you have spaces around parameters in method calls, or expressions in your if statements? Once again this is really a question of personal preference, but great that you can control the settings yourself! Just go to Tools | Options | Text Editor | C# | Formatting | Spacing

    Some people prefer spaces around expressions in if statements to make them more readable.

    image

    image

    Line wrapping

    If you grew up coding in C or using Unix you probably love to fit as much code on one line as you can! But some programmers really like to keep code spaced out across line with clear indentation to make code more readable. Once again, it’s all up to you! Just go to Tools | Options | Text Editor | C# | Formatting | Wrapping and pick the settings you prefer.

    image

    image

    Where can I get Visual Studio 2013?

    All the features above are available in earlier editions of Visual Studio, but there is a lot of great stuff waiting for you in Visual Studio 2013. So if you haven't downloaded a copy yet. Download it and start exploring today.

Page 1 of 3 (11 items) 123