Partie 3: Traduction des filtres par défaut de SharePoint

Partie 3: Traduction des filtres par défaut de SharePoint


Cet article fait partie d’une série de quatre articles traitant de la traduction des filtres de raffinement dans le composants « Refinement Panel » de Sharepoint 2010.


Dans la deuxième partie de cette série d’articles consacrée à la gestion du multilinguisme avec le Refinement Panel de SharePoint, je vous ai montré comment traduire les filtres de types métadonnée gérée en modifiant la classe TaxonomyFilterGenerator.

A présent, parlons un peu des filtres proposés par SharePoint. Par défaut, il en existe 4 (sans compter celui pour la taxonomie):

  • Result Type: Type de résultats, se basant sur la managed property FileExtension (doc, xls, etc…)
  • Author: Nom de l’auteur du document, se basant sur la managed property Author
  • Site: Site SharePoint dans lequel se trouve l’élément, se basant sur la manaed property SiteName
  • Modified Date: Date de modification de l’élément, se basant sur la managed property Write (ba oui Write pour Modified Date, c’est complétement logique :))

Filtres par défaut

 

On pourrait croire que, à première vue, ces champs correspondent à des colonnes SharePoint de base et qu’il suffirait d’aller chercher la traduction dans la langue courante comme n’importe qu’elle colonne de site en appliquant la même méthode que pour les métadonnées gérées. Simple non? Et bien en fait que nenni! Ces champs ne sont absolument pas des colonnes de sites SharePoint, mais des métadonnées d’un autre type possédant leurs traductions dans un fichier de ressources contenu directement dans la dll Microsoft.Office.Server.Search.Intl! Vous ne me croyez pas ? Démonstration:

Tout d’abord, en explorant la classe ManagedPropertyFilterGenerator de plus près (celle qui gère ces filtres par défaut) par réflection directement dans l’assembly Microsoft.Office.Server.Search, du namespace WebControls, on trouve rapidement comment sont récupérées les valeurs de ces filtres. En effet,  dans le namespace Microsoft.Office.Server.Search, on trouve une classe ScriptResourceManager, avec plusieurs méthodes permettant de récupérer une valeur string « localisée » en fonction d’un fameux LocStringId. En fouillant dans le même namespace, on s’aperçoit que ce paramètre est en fait un bête enum contenant des constantes qui ressemblent fortement à ce que l’on cherche à modifier ;). Bravo, vous avez trouvé les constantes qui correspondent à nos filtres ! Tous ce qui est de la forme « RefinementPanel_OOConfig_xx » est une entrée dans un supposé fichier des ressources nous permettant de récupérer la valeur traduite de celle-ci:

Exploration du code SharePoint

 

Maintenant, il nous faut trouver où se trouve ce fameux fichier de ressource qui contient les vraies valeurs des champs. En fouillant encore un peu, on tombe dans le même namespace sur ceci:

StringResourceManager

Il semblerait que celui-ci se trouve dans l’assembly Microsoft.Office.Server.Search.Intl. Ok allons voir! Et là suprise ;). Dans les ressources de l’assembly on retrouve bien un fichier qui contient nos constantes trouvées plus haut.

Refinement Panel Resources

Sachant maintenant cela, voici comment procéder pour récupérer ces fameuses valeurs:

  1. Créer un XML de configuration qui va nous permettre de gérer les traductions grâce aux constantes du fichier de ressources
  2. Créer une classe qui va nous permettre d’accéder au fichier de ressource directement et récupérer les valeurs qui nous intéressent via les constantes de l’enum « RefinementPanel_OOConfig_blablabla ».
  3. Créer une classe qui contient toutes les valeurs des ces constantes (il n’y en pas tant que ça au final) et les méthodes pour récupérer leur valeur.
  4. Créer un générateur de filtres qui récupere les filtres et les renvoi traduits

XML de configuration

On utilise la valeur des constantes de ressources comme « tokens » pour effectuer la traduction correspondante:

SearchServerResources

Ensuite, la classe qui permet d’accéder au fichier de ressources SharePoint:

RefinementPanellFilterManager

Puis la classe qui permet de récupérer les filtres et les traduire:

La méthode GetFilterLocalizedValue() renvoie la valeur traduite et sa clé pour permettre une remplacement dans le XML de configuration.

ExtendedManagedPropertyFilter

Pour terminer le générateur de filtres, permettant d’effectuer la traduction sur tous les éléments récupérés de la recherche:

Une fois tous ces éléments mis en place, on obtient le résultat suivant sur les filtres natifs SharePoint. Vous pouvez installer autant de packs de langues que vous souhaitez, la solution restera viable car se basant sur les fichiers de ressources Microsoft ;).

Dans le prochain article, j’aborderai l’ajout de filtres basés sur les type de contenus.


+ There are no comments

Add yours