Localisez vos Add In SharePoint !

Bonjour à tous,

Aujourd’hui je souhaite aborder un sujet souvent « remis à plus tard » dans le cadre des projets de développement que j’ai abordé : rendre son code « localizable compatible », et même le localiser.

Pourquoi et qu’entend-t-on par localiser une application ?
Tout simplement la traduire et gérer l’affichage de la bonne langue au bon utilisateur. Avec l’arrivée du store SharePoint et Office, et ma première application publiée, je me suis heurté à ce problème sans penser que cela me prendrait tant de temps de réaliser la traduction, implémenter les bouts de codes qui vont bien pour afficher la traduction, …
Vu que je souhaite que mes apps soient accessibles au plus grand nombre, je les traduis, au moins en anglais pour commencer.

Comment s’y prend-t-on ?
Comme souvent lorsqu’on développe, ça prend moins de temps de bien faire dès le début que de devoir le faire à la fin ^^
Donc, règle numéro une : ne mettez jamais jamais un bout de phrase, voir même un mot de l’UI dans une langue quelconque. Utilisez ce qui est prévu par Microsoft (si vous développez avec les bonnes vieilles techno .Net/C#, et même JS) : les fichiers de ressources.
Pour mes deux premiers add-in, je n’ai pas suivi cette règle, et je m’en suis mordu les doigts.

Si vous suivez un peu, vous savez que les add-in fonctionnent sur deux modèles : SharePoint Hosted et Provider Hosted. Et vous le savez, un add-in Provider Hosted est lui même composé d’une partie SharePoint (qui ressemble à un add-in SharePoint Hosted) et d’une partie réellement Provider Hosted. Vous savez enfin qu’on peut mettre du C# sur les parties Provider Hosted uniquement, mais du JS sur les deux types d’apps. Je ne vous ai même pas encore parlé des fichiers XML … … … … … … Je vous ai perdu…  C’est pourtant la stratégie de Microsoft ^^

Bref, je vous ai fait un petit tableau pour récapituler :

SharePoint Hosted
Add In
Provider hosted Add In
SharePoint Part Provider Part
XML (for SP stuff provisionning) YES YES NO
JS YES YES YES
ASP.Net/HTML Page YES YES YES
C# NO NO YES

Voilà les typologies de fichiers qu’on peut rencontrer dans des Add In, et à quels endroits.

Pour chacun de ces types de fichiers, vous allez trouver des éléments qui vont influer sur l’interface utilisateurs et notamment des textes, à mettre en plusieurs langues.
Le petit « plus Microsoft », c’est qu’en fonction du type de fichier dans lequel vous allez vouloir appeler votre texte, vous allez devoir vous y prendre (radicalement) différement.

Par exemple, pour nommer une liste, une bibliothèque ou une custom action, cela se fait via un fichier ressource .resx. Par contre, si vous souhaitez écrire du texte dans une page .aspx Add In SharePoint Hosted, cela se fait en JavasSript… Comme je ne veux pas à nouveau vous perdre, j’ai également fait un tableau :

SharePoint Hosted Add In Provider hosted Add In
SharePoint Part Provider Part
XML (for SP stuff provisionning) .resx file .resx file NO
JS .js file .js file .resx file
ASP.Net/HTML Page .js file .js file .resx file / .js file
C# / Other NO NO .resx file / other

How to ?
Cela dépend dans quelle case vous vous trouvez.
Pour la partie SharePoint Hosted et SharePoint Part, vous trouverez votre bonheur ici https://msdn.microsoft.com/fr-fr/library/office/FP179919.aspx

Pour la partie Provider Part, le lien ci-dessus ne donne que peu d’information. Il s’agit de « Localiser les composants distants dans une application pour SharePoint »…
Pour ma part, n’étant pas un pur développeur .Net, je tâtonne un tout petit peu sur cette partie, mais je vais trouver dans les jours qui viennent et ne manquerai pas de vous tenir au courant.

Quand même un petit « truc » qui m’a fait perdre pas mal de temps. Microsoft vous propose de charger la culture de SharePoint au moment du chargement de la page. La culture est passée (comme tout ce qui vient de SharePoint) en paramètre de l’URL.

Au PostBack, de manière automatique, le paramètre est doublé : de « fr-FR », il devient « fr-FR,fr-FR ». Les experts du .Net pourront surement nous expliquer ça. Mais le serveur n’aime pas beaucoup, du coup il faut faire un peu de ménage et passer de :

protected override void InitializeCulture()
{
    if (Request.QueryString["SPLanguage"] != null)
    {
        string selectedLanguage = Request.QueryString["SPLanguage"];
        
        // Override the page language.
        UICulture = selectedLanguage;
        Culture = selectedLanguage;

        // Reset the thread language.
        Thread.CurrentThread.CurrentCulture =
            CultureInfo.CreateSpecificCulture(selectedLanguage);
        Thread.CurrentThread.CurrentUICulture = new
            CultureInfo(selectedLanguage);
    }
    base.InitializeCulture();
}

à ça :

protected override void InitializeCulture()  
     {  
       if (Request.QueryString["SPLanguage"] != null)  
       {  
         string selectedLanguage = Request.QueryString["SPLanguage"];  
   
         if (selectedLanguage.Contains(","))  
         {  
           selectedLanguage = selectedLanguage.Split(',')[0];  
         }  
   
         // Override the page language.  
         UICulture = selectedLanguage;  
         Culture = selectedLanguage;  
   
         // Reset the thread language.  
         Thread.CurrentThread.CurrentCulture =  
           CultureInfo.CreateSpecificCulture(selectedLanguage);  
         Thread.CurrentThread.CurrentUICulture = new  
           CultureInfo(selectedLanguage);  
       }  
       base.InitializeCulture();  
     }  

D’ici là, n’hésitez pas si vous avez des questions !

Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s