Récupération des termes

Le premier problème s’étant posé lors de l’implémentation de l’internationalisation est la récupération des termes depuis n’importe quel binaire.

Jusqu’alors, la récupération de termes n’était possible qu’en référençant la DLL business d’IC2. Cette dernière ne pouvant pas être fournie à des tiers, il a fallu créer un classe exposant des méthodes pour récupérer les termes tout en accédant à la logique de récupération de la DLL business.

Le second problème était que les termes devaient être récupéré à l’aide de CrudBase (NHibernate) depuis le portail puisque la classe « Translations » d’IC2 ne permettait pas de récupérer les termes sans avoir à fournir la langue désirée.

Enfin les termes de traductions pour FBP devaient être séparés des autres termes de traductions afin d’éviter tout conflit avec les termes servant au fonctionnement du reste d’IC2.

Un patron de conception Stratégie a été implémenté afin de pouvoir externaliser la logique nécessaire à la récupération des termes.

 

Figure 1 - Diagramme de classe

Term (Artionet.IceCube.Interfaces)

Figure 2 - Classe "Term"

Cette classe a été créée afin de pouvoir récupérer des termes de traductions dans le portail et le site de manière transparente. Elle est contenue dans la DLL « Artionet.IceCube.Interfaces » afin d’être exposée au mieux.

Elle peut être utilisée pour remplacer l’utilisation de la classe « Translations » de manière générale dans tous les projets.

« Term » contient un singleton utilisé pour stocker l’instance d’une implémentation de l’interface « ITranslate » (« _instance »). Lors de la première utilisation de l’instance du singleton, le code va rechercher dans les « assemblies » (« GetInheritedTypes ») tous les types implémentant l’interface puis va instancier le type décrit dans l’attribut « DefaultType » de la classe (« GetInstance »).

Après instanciation, la méthode « Initialize » est appelée afin de lancer les traitements qui pourraient être éventuellement nécessaires avant de récupérer les termes de traductions.

La classe fournit des méthodes statiques pour récupérer les termes (« Get »). Elle ne contient pas la logique de récupération mais manipule uniquement des objets héritant de « ITranslate ».

Les méthodes exposées sont uniquement vouées à la récupération des termes, cependant il serait envisageable d’y ajouter des méthodes de création ou modification.

Ces dernières n’ont pas été ajoutées car il est peu probable qu’une application externe le nécessite. De plus, une réflexion est nécessaire quant à disponibilité de telles fonctions (peut-être si IceCube2.Net souhaite être disponible sous forme d’API).

ITranslate (Artionet.IceCube.Interfaces)

Figure 3 - Classe "ITranslate"

Cette interface contient la signature des méthodes qui une fois implémentées contiennent la logique pour récupérer un terme.

Une seule implémentation est disponible à l’heure actuelle, il s’agit de « TranslationsWrapper » qui est disponible dans le fichier de la classe « Translations ».

TranslationsWrapper (IceCube_Business)

Figure 4 - Classe "TranslationsWrapper"

Ce wrapper a été créé car il n’était pas possible d’ajouter directement l’héritage de « ITranslate » sur la classe « Translations », cette dernière étant un singleton.

Cette classe implémente donc les méthodes de « ITranslate » en utilisant « Translations ». Une différence notable est l’ajout d’un contrôle sur la provenance de l’utilisateur (site ou portail) afin de pouvoir retourner le terme en fonction.

En effet, le site et le portail n’utilisent pas la même variable de session afin de stocker la langue de l’interface. De plus la langue française est stockée différemment (vide pour le site et « fr » pour le portail).

« TranslationsWrapper » s’occupe de gérer ces différences évitant ainsi au développeur d’avoir à spécifier la langue.

TermType (Artionet.IceCube.Interfaces)

Figure 5 - Enumération "TermType"

Cette énumération a été créée afin de différencier les termes concernant FBP et les autres utilisés pour le reste d’IC2.

  • All (-1) : Utilisé uniquement dans un but de recherche ou de filtrage des termes ;
  • General (0) : Correspond à tous les termes créés n’étant pas liés à FBP. Ce type est utilisé comme valeur par défaut ;
  • FormBuilder (1) : Correspond à tous les termes étant liés à FBP.

La table « TranslationTerms » a été également modifiée en ajoutant une colonne « Type » (int) ayant pour valeur par défaut « 0 ».

« TermType » est utilisé uniquement par FormBuilder à l’heure actuelle, tous les autres termes étant des termes « généraux ».