Rendre une application multi-langue est maintenant chose très courante, et SharePoint, reposant sur ASP.NET, propose toute la mécanique pour réaliser cette tâche.
Cependant, tout est faisable lorsque que l’on travaille avec des solutions de type ferme, donc des solutions qui déploient des fichiers sur les serveurs. Il est aisé de déployer des fichiers de ressources, puis de les utiliser depuis notre code. Qu’en est-il des solutions sandbox qui elles, ne peuvent pas, par définition, déployer de fichiers sur le système de fichiers des serveurs de la ferme SharePoint ?
Une solution sandbox est une application SharePoint qui s’exécute dans un processus contrôlé et sécurisé qui a accès à une zone limité de la ferme de serveurs. Il n’est donc pas possible de déployer les fichiers de ressource.
Pour rendre nos applications sandbox multi-langue, nous allons devoir encapsuler les ressources dans la dll directement de notre projet.
Commençons par créer un nouveau projet SharePoint vide, en mode sandbox :


Nous allons ajouter une ressource par défaut à notre projet : clic-droit sur le projet, puis « properties », depuis la section « Resources », créons un nouveau fichier (lien bleu ci-dessous).
Nous allons ajouter à notre projet des « satellites assemblies » :

Ajoutons un nouvel élément à notre ressource, ici en anglais par défaut. Pour la clé « Key » nous spécifions la valeur célébrissime « Hello World » :

Depuis le « solution explorer », localisons le fichier « Resources.resx » créé par Visual studio, puis faisons un copier / coller de ce fichier pour le dupliquer. Renommons ce dernier « Resources.fr-FR.resx ». Nous ajoutons le support de la langue française à notre projet. Bien entendu, Visual Studio ne va pas faire de traduction pour nous … Nous obtenons donc ceci :

Ouvrons la ressource française, et modifions la valeur de la clé « Key » pour ajouter une traduction. Ne me jugez pas sur la traduction, ce n’est pas le but ici 

Ajoutons une web part à notre solution :

Modifions ensuite le code de notre web part pour qu’il ressemble à :
1: namespace SandboxLocalizedSample.SampleWP
2: { 3: [ToolboxItemAttribute(false)]
4: public class SampleWP : WebPart
5: { 6: protected override void CreateChildControls()
7: { 8: string txt = SandboxLocalizedSample.Properties.Resources.Key;
9: Controls.Add(new LiteralControl(txt));
10: }
11: }
12: }
Le plus important ici est la ligne 8 : en effet, depuis la classe statique Properties, nous récupérons la valeur de « Key ». Cette valeur dépendra de la langue de l’utilisateur qui charge cette web part. Cette valeur est ensuite affichée sur la page via le LiteralControl.
Compilons la solution. Attention, juste une compilation, nous n’allons pas encore déployer notre solution car il manque une étape.
Il va falloir en fait inclure dans notre solution SharePoint toutes les dll satellites que Visual Studio a générées pour nous. En fait, nous avons dans cet exemple seulement une dll satellite, la dll contenant la ressource française.
Commençons par ouvrir notre explorateur de package :

Nous allons ensuite utiliser le mode designer pour modifier notre package :

Cliquons sur le mode avancé en bas de page :

Ajoutons ensuite une dll existante à notre package via le bouton « Add » :

Naviguons jusqu’au dossier de sortie de notre projet (bin\Debug par défaut lorsque que le mode debug dans Visual Studio est sélectionné), puis allons dans le sous-dossier fr-FR qui va du coup contenir notre dll satellite pour les ressources françaises :

Attention ici, si vous avez plus d’une langue différente à ajouter, spécifier bien un nom de dossier unique dans la section « Location », ici fr-FR, sinon Visual Studio vous renverra une erreur. En effet, toutes les dll satellites auront le même nom, elles ne pourront donc pas être ajoutées à la racine de votre solution, d’où la nécessité de les stocker dans des sous-dossiers :

Nous pouvons à présent déployer notre solution vers notre site SharePoint. Une fois l’opération terminée, allons sur la page d’accueil de notre site, puis ajoutons notre web part :

Le site étant en anglais, nous avons bien la traduction anglaise de la valeur « Key » :

Si nous basculons en français (Site actions > Language settings (section Site Administration)), en supposant que le pack de langue français est bien installé sur le serveur :

En retournant sur la page d’accueil du site, nous obtenons bien la traduction française :

La procédure est un poil moins simple que lorsque nous développons des solutions de type ferme, mais la localisation reste quelque chose de très important, et doit être prise en compte dès le démarrage d’un projet.
- Julien