7.4. Mises en garde sur les modèles

7.4.1. [% %] et [%+ %]

[% %] est utilisé par Template Toolkit pour encadrer du code TT, qui sera souvent remplacé par une variable ou autre chose lors du traitement du modèle.

Généralement, vous devez suivre exactement la disposition du texte de la version anglaise , mais si vous avez besoin de changer la position d'un bloc [% %] dans une ligne, vous devez garder à l'esprit cette règle : quand deux blocs [% %] se suivent, le second membre ne sera pas séparé par une espace du premier membre, même si vous ajoutez une espace entre les deux blocs. Par exemple, ces lignes de code d'un modèle :

  [% ELSIF message_tag == "bug_duplicate_of" %]
    This [% terms.bug %] has been marked as a duplicate of [% terms.bug %] [% dupe_of FILTER html %]

seront affichées dans le navigateur ainsi :

This bug has been marked as duplicate of bug12345

Pour préserver l'espace, vous devez ajouter un signe « + » à l'intérieur du second membre :

  [% ELSIF message_tag == "bug_duplicate_of" %]
     This [% terms.bug %] has been marked as a duplicate of [% terms.bug %] [%+ dupe_of FILTER html %]

Ceci sera alors affiché ainsi :

This bug has been marked as duplicate of bug 12345

Il en est de même lorsqu'un bloc [% %] se trouve au début d'une nouvelle ligne. Ces lignes de code de modèle :

[% IF groups_added_to.size %]
  <li>
    The account has been added to the
    [% groups_added_to.join(', ') FILTER html %]
    group[% 's' IF groups_added_to.size > 1 %].
  </li>
[% END %]

seront affichées ainsi :

The account has been added to thebz_sudo_protect group.

De même, insérez un signe « + » :

        [% IF groups_added_to.size %]
          <li>
            The account has been added to the
            [%+ groups_added_to.join(', ') FILTER html %]
            group[% 's' IF groups_added_to.size > 1 %].
          </li>
        [% END %]

pour que la phrase soit affichée comme ci-dessous :

The account has been added to the bz_sudo_protect group.

Parfois, la marque du pluriel est traitée en utilisant du code Template Toolkit explicite, qui devra être modifié pour votre langue.

Par exemple, si vous voulez localiser l'échantillon de code précédent en français, l'ordre des mots n'est pas correct et les balises doivent être réorganisées. Le membre [% groups_added_to.join(', ') FILTER html %] affichera le nom d'un groupe ou les noms de plusieurs groupes séparés par une virgule et une espace (', '). Le membre [% 's' IF groups_added_to.size > 1 %] ajoutera un « s » au mot « group » s'il y en a plus d'un. En français, le nom du groupe doit être mis après le terme « group » et les mots doivent être déclinés quand le pluriel est utilisé. Cela donnerait par exemple ceci :

[% IF groups_added_to.size %]
  <li>
    Le compte a été ajouté
    [% IF groups_added_to.size > 1 %]
    aux groupes[% ELSE %]au groupe[% END %][%+ groups_added_to.join(', ') FILTER html %].
  </li>
[% END %]

Le navigateur affichera alors pour un groupe :

Le compte a été ajouté au groupe bz_sudo_protect

et pour plusieurs groupes :

Le compte a été ajouté aux groupes bz_sudo_protect, canconfirm, editbugs

7.4.2. Guillemets doubles et simples

Les chaînes Template Toolkit dans les directives sont délimitées par des guillemets, et peuvent être simmples ou doubles. Mias bien évidemment, vous ne pouvez pas mettre de guillemers doubles à l'intérieur d'une chaîne délimitée par des guillemets doubles. L'exemple suivant sera affiché de manière incorrecte dans l'interface utilisateur :

[% ELSIF message_tag == "buglist_adding_field" %]
  [% title = "Adding field to search page..." %]
  [% link  = "Click here if the page "does not" redisplay automatically." %]

Vous devez alors, soit les préfixer avec une barre inverse oblique (« »):

[% ELSIF message_tag == "buglist_adding_field" %]
  [% title = "Adding field to search page..." %]
  [% link  = "Click here if the page \"does not\" redisplay automatically." %]

soit substituer les guillemets double de la chaîne par des guillemets simples :

[% ELSIF message_tag == "buglist_adding_field" %]
  [% title = "Adding field to search page..." %]
  [% link  = 'Click here if the page "does not" redisplay automatically.' %]

7.4.3. Déclinaisons

L'anglais n'utilise qu'une seule forme plurielle et n'a pas de déclinaison. Votre langue pourrait nécessiter de mettre en œuvre des déclinaisons et de réorganiser les mots dans une phrase.

Soit l'exemple suivant :

[% IF !Param("allowbugdeletion") %]
<p>
  Sorry, there

  [% IF comp.bug_count > 1 %]
    are [% comp.bug_count %] [%+ terms.bugs %]
  [% ELSE %]
     is [% comp.bug_count %] [%+ terms.bug %]
  [% END %]

  pending for this component. You should reassign

  [% IF comp.bug_count > 1 %]
     these [% terms.bugs %]
  [% ELSE %]
     this [% terms.bug %]
  [% END %]

  to another component before deleting this component.
</p>
[% ELSE %]

Ici, l'expression comp.bug_count donne le nombre de bogues pour un composant. IF comp.bug_count > 1 signifie « s'il y a plus d'un bogue ».

Imaginons que votre langue doivent gérer trois formes plurielles et que les termes « bug » et « pending » doivent être accordés en conséquence.

Tout d'abord, vous devez renseigner le fichier /template/en/default/global/variables.none.tmpl avec les déclinaisons pour le terme « bug », ce qui donnerait quelque chose comme ceci :

[% terms = {
  "bug0" => "déclinaison pour zéro bogue",
  "bug" => "déclinaison pour un bogue",
  "bug2" => "déclinaison pour deux bogues",
  "bug3" => "déclinaison pour trois bogues",
  "bugs" => "déclinaison pour plus de trois bogues",

Alors, le code précédent ressemblerait à ce qui suit :

[% IF !Param("allowbugdeletion") %]
<p>
  Sorry, there

  [% IF comp.bug_count > 3 %]
    are [% comp.bug_count %] pending [% terms.bugs %]
  [% ELSE %]
    [% IF comp.bug_count == 0 %]
     is [% comp.bug_count %] pending [% terms.bug0 %]
  [% ELSE %]
    [% IF comp.bug_count == 1 %]
     is [% comp.bug_count %] pending [% terms.bug %]
  [% ELSE %]
    [% IF comp.bug_count == 2 %]
     are [% comp.bug_count %] pending [% terms.bug2 %]
  [% ELSE %]
    [% IF comp.bug_count == 3 %]
     are [% comp.bug_count %] pending [% terms.bug3 %]
  [% END %]

  for this component. You should reassign

  [% IF comp.bug_count > 1 %]
     these [% terms.bugs %]
  [% ELSE %]
     this [% terms.bug %]
  [% END %]

  to another component before deleting this component.
</p>
[% ELSE %]

7.4.4. $terms.foo

Comme nous l'avons vu précédemment, la substitution de termes peut être réalisée dans l'ensemble des fichiers modèles. Ces substitutions sont définies dans les fichiers *.none.tmpl, qui sont :

  • template/en/default/global/field-descs.none.tmpl
  • template/en/default/global/variables.none.tmpl
  • template/en/default/global/value-descs.none.tmpl
  • template/en/default/global/reason-descs.none.tmpl
  • template/en/default/global/setting-descs.none.tmpl
  • template/en/default/bug/field-help.none.tmpl

Ces variables apparaissent dans les fichiers modèles sous trois formes différentes. [% terms.foo %] est la substitution standard, simple d'un termes dans un texte. $terms.foo est utilisé pour la substitution dans une chaîne Template Toolkit, et ${terms.foo} est utilisé quand vous devez séparer le nom de la variable du contenu environnant pour éviter tout ambiguïté.

Pour illustrer ce dernier point, durant votre contribution de localisation, vous pouvez réorganiser des phrases, et parfois, une variable de la forme $terms.foo se trouvera en fin de phrase deavnt un point, comme ci-dessous :

  defaultplatform => "Plateforme qui est pré-sélectionnée dans le formulaire de soumission " _
                     "de $terms.bug.<br> " _
                     "Vous pouvez laisser ce champ vide : " _
                     "Bugzilla utilisera alors la plateforme indiquée par le navigateur.",

Laissé comme ceci, la substitution ne se fera pas et le résultat dans l'interface utilisateur sera incorrect. Vous devez alors modifier la forme $terms.foo pour la forme ${terms.foo}, comme ceci :

  defaultplatform => "Plateforme qui est pré-sélectionnée dans le formulaire de soumission " _
                     "de ${terms.bug}.<br> " _
                     "Vous pouvez laisser ce champ vide : " _
                     "Bugzilla utilisera alors la plateforme indiquée par le navigateur.",

7.4.5. b[% %]ug

De temps à autre, vous rencontrerez quelque chose comme ceci :

A b[% %]ug on b[% %]ugs.debian.org.

Vous vous rappelez que le fichier variables.none.tmpl contient les substitutions pour différents termes. Pendant le processus de publication d'une nouvelle version de Bugzilla, un script analyse tous les fichiers modèles pour vérifier si vous avez écrit le mot « bug » au lieu de "$terms.bug" ou similaire, pour s'assurer que cette fonctionnalité est effective.

Dans l'exemple ci-dessus, nous voulons vraiment écrire le terme « bug » et nous ne voulons pas qu'il soit substitué ou que le script renvoie une erreur.

Cette vérification ne survient que pour les termes anglais bug, bugs et Bugzilla. Vous pouvez donc ignorer le [% %] et localiser b[% %]ug, mais vous devez conserver b[% %]ugs.debian.org tel quel car il s'agit d'une URL.