Fonctionnement

Les formulaires étant prévus au niveau structurel pour contenir une seule langue et le fait que les modifications ne doivent pas impacter l’ancien comportement (rétrocompatibilité), la structure de stockage des formulaires n’a pas été modifiée.

Chaque élément du formulaire devant être traduit se voit assigner un terme de traduction IC2 dépendant des identifiants du formulaire, champ, option, etc. Si le terme de traduction n’existe pas, cela signifie que l’ancien comportement (non I18N) est utilisé.

Cette nouvelle implémentation tient également compte de la sérialisation.

La sélection (ou non) du terme de traduction se fait directement au niveau des attributs des objets eux-mêmes.

[DataMember(Name="Title")]
public string _Title { get; set; }
/// <summary>
/// Field's label
/// </summary>
[IgnoreDataMember]
public string Title
{
      get
      {
            return Term.Get(string.Format(FormBuilderTranslationTerm.Instance.Get(FormBuilderElement.Field, FormBuilderAttribute.Title), FormID, ID), _Title);
      }
      set
      {
            _Title = value;
      }
}

Cette structure a été choisie afin d’éviter au développeur d’avoir à récupérer le terme de traduction à chaque utilisation de l’attribut. Nous évitons ainsi tout oubli et donc des traductions partiellement fonctionnelles.

Veillez à faire attention car FormBuilder possède la plupart du temps deux classes représentant le même objet, exemple : « FormBuilderForm » et « Form ». La première classe se base sur du SQL pur afin de récupérer les données, la seconde se base sur Nhibernate. Il est fort probable que la seconde ait été implémentée dans l’optique de remplacer la première, offrant ainsi une flexibilité relative quant au medium de stockage. Les deux classes se sont vues implémenter la logique discutée ci-dessus sur leurs attributs I18N afin d’éviter tout problème tant que la DAL se trouve dans cette transition.

Un seul élément n’a pas pu être implémenté de cette façon. Il s’agit des listes de distribution et plus précisément les « EmailDistributionList » qui servent à l’envoi d’e-mail de confirmation. En effet, ces listes ne possèdent pas une liste d’attributs bien définis mais disposent d’un dictionnaire « string, string » contenant les informations nécessaires.

C’est donc dans la méthode « Process » de la classe « EmailDistributionList », qui permet d’envoyer l’e-mail », lors de la récupération des valeurs dans le dictionnaire, que la récupération des termes de traductions est faite.