Projet

Général

Profil

Actions

Feature #13608

fermé

Permettre de renseigner les libellés des descripteurs de composant dans des bundle de traduction

Ajouté par Yohann Chastagnier il y a 11 mois. Mis à jour il y a 11 mois.

Statut:
Closed
Priorité:
Normal
Assigné à:
Catégorie:
l10n
Début:
25/05/2023
Echéance:
% réalisé:

100%

Temps estimé:
Livraison en TEST:
Livraison en PROD:

Description

Silverpeas gère déjà aujourd'hui plusieurs langues pour son interface :
  • le français
  • l'anglais
  • l'allemand

Pour chacune de ces langues, il existe généralement un fichier.

Par exemple, pour les libellés transverses, les fichiers bundle sont utilisés :
  • $SILVERPEAS_HOME/properties/org/silverpeas/multilang/generalMultilang_fr.properties pour le français
  • $SILVERPEAS_HOME/properties/org/silverpeas/multilang/generalMultilang_en.properties pour l'anglais
  • $SILVERPEAS_HOME/properties/org/silverpeas/multilang/generalMultilang_de.properties pour l'allemand
Ou alors, pour des contenus plus riches, les fichiers string-template sont utilisés. Par exemple :
  • $SILVERPEAS_HOME/resources/StringTemplates/register_fr.st pour le français
  • $SILVERPEAS_HOME/resources/StringTemplates/register_en.st pour l'anglais
  • $SILVERPEAS_HOME/resources/StringTemplates/register_de.st pour l'allemand

Il est ainsi possible d'ajouter de nouvelles langues en créant les nouveaux fichiers nécessaires pour ces dernières.

Or il existe d'autres ressources dans Silverpeas pour lesquelles il n'y a pas cette structuration des données localisées par fichier.
C'est le cas des descripteur XML des différents composants de Silverpeas, où chacune des traductions est enregistré au sein d'un TAG.

Dans une logique d'ajouter dans le temps de nouvelles langues dans Silverpeas, ce non découpage par fichier/langue présente un frein dans la mise en place d'une mécanique de gestion massive de langues. Ajout après ajout, les descripteurs XML des composants seraient confus et il serait difficile à leur lecture d'en dégager les informations structurelles des informations secondaires (comme celles des informations localisées). De même, si un nombre conséquent de langue est géré, la mémoire (RAM) seraient en partie occupée pour rien.

Il s'agit donc ici de rendre possible de spécifier les informations localisées dans des bundles de traduction pour ces descripteurs.

Mis à jour par Yohann Chastagnier il y a 11 mois

  • Statut changé de Assigned à In progress...

Mis à jour par Yohann Chastagnier il y a 11 mois

  • Statut changé de In progress... à Resolved
  • % réalisé changé de 0 à 100

Il est désormais possible (mais pas obligatoire) de spécifier les données multilingues des descriptions de composant dans des fichiers de propriétés.

Les descripteurs XML actuels des composants ne sont pas modifiés. Les données multilingues qui y sont spécifiées restent utilisées.

Dans une opération de gestion d'une nouvelle langue d'interface pour Silverpeas, plutôt que de compléter le descripteur XML, des ressources l10n doivent être créées.
Ces ressources se caractérisent par des fichiers de propriétés.

Principe de fonctionnement

Pour chaque information localisée d'un composant présentée dans l'interface, le système recherche dans l'ordre de priorité suivant :
  1. dans les fichiers de propriétés, puis si non trouvée
  2. dans le descripteur XML du composant

S'il n'existe pas d'information pour la langue dans les différentes sources, le système tente de l'obtenir dans la langue par défaut de la plate-forme.
Si l'information localisée n'existe ni dans la langue ciblée, ni dans la langue par défaut, une erreur technique est générée (MissingResourceException).

Fichier de propriétés

Emplacement

Pour un composant et une langue donnés, le chemin du fichier de propriétés est le suivant :
$SILVERPEAS_HOME/properties/xmlcomponents/[nom technique du composant]_[langue].properties

Par exemple, pour gérer la langue espagnole de la GED dont le nom technique est kmelia, le fichier suivant doit exister :
$SILVERPEAS_HOME/properties/xmlcomponents/kmelia_es.properties

Structure

Les clés dans le fichier de propriétés sont basées sur la structure des descripteur XML :
  • label : le nom fonctionnel du composant
  • description : la description du composant
  • suite : la catégorie dans laquelle le composant est proposé dans l'administration
  • profile.[nom technique d'un rôle utilisateur, 'admin par exemple'].label : le nom fonctionnel d'un rôle utilisateur géré par le composant
  • profile.[nom technique d'un rôle utilisateur, 'admin par exemple'].help : une aide concernant un rôle utilisateur
  • parameter.[nom technique d'un paramètre].label : le nom fonctionnel d'un paramètre (non inclus dans un groupe de paramètre)
  • parameter.[nom technique d'un paramètre].help : une aide concernant un paramètre (non inclus dans un groupe de paramètre)
  • parameter.[nom technique d'un paramètre].warning : une alerte sur changement de valeur concernant un paramètre (non inclus dans un groupe de paramètre)
  • parameter.[nom technique d'un paramètre].option.[valeur technique d'une option].name : la représentation fonctionnelle d'une option d'un paramètre (non inclus dans un groupe de paramètre)

Les clés d'un paramètre définies dans un groupe de paramètre doivent être préfixées avec le nom technique du groupe de paramètre :
parameterGroup.[nom technique du groupe de paramètre]

Les clés sont sensibles à la casse.

Illustration

Soit un descripteur XML de composant nommé techniquement illustration. Son contenu est le suivant :

<WAComponent xmlns="http://silverpeas.org/xml/ns/component" 
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
             xsi:schemaLocation="http://silverpeas.org/xml/ns/component https://www.silverpeas.org/xsd/component.xsd">
  <name>illustration</name>
  <behaviors>
    <behavior>topicTracker</behavior>
  </behaviors>
  <label>
    <message lang="fr">Gestion documentaire I</message>
    <message lang="en">Document management</message>
    <message lang="de">Dokumentenverwaltung</message>
  </label>
  <description>
    <message lang="fr">Les publications...</message>
    <message lang="en">This application...</message>
    <message lang="de">Diese Komponente...</message>
  </description>
  <suite>
    <message lang="fr">01 Gestion Documentaire</message>
    <message lang="en">01 Document Management</message>
    <message lang="de">01 Dokumentenverwaltung</message>
  </suite>
  <visible>true</visible>
  <visibleInPersonalSpace>true</visibleInPersonalSpace>
  <portlet>true</portlet>
  <profiles>
    <profile name="publisher">
      <label>
        <message lang="fr">Publieurs</message>
        <message lang="en">Publishers</message>
        <message lang="de">Herausgeber</message>
      </label>
      <help>
        <message lang="fr">Les publieurs...</message>
        <message lang="en">Publisher...</message>
        <message lang="de">Herausgeber...</message>
      </help>
      <spaceMapping>
        <profile>publisher</profile>
      </spaceMapping>
    </profile>
    <profile name="writer">
      <label>
        <message lang="fr">Rédacteurs</message>
        <message lang="en">Writers</message>
        <message lang="de">Redaktor</message>
      </label>
      <help>
        <message lang="fr">Les rédacteurs créent des publications.</message>
        <message lang="en">Writers create publications.</message>
        <message lang="de">Redaktor</message>
      </help>
      <spaceMapping>
        <profile>writer</profile>
      </spaceMapping>
    </profile>
  </profiles>
  <parameters>
    <parameter>
      <name>nbPubliPerPage</name>
      <label>
        <message lang="fr">Nombre par page</message>
        <message lang="en">Number per page</message>
        <message lang="de">Anzahl der Veröffentlichungen pro Seite</message>
      </label>
      <order>4</order>
      <mandatory>false</mandatory>
      <value></value>
      <type>text</type>
      <size>5</size>
      <updatable>always</updatable>
      <help>
        <message lang="fr">Permet de définir...</message>
        <message lang="en">Defines...</message>
        <message lang="de">Definiert...</message>
      </help>
    </parameter>
  </parameters>
  <groupsOfParameters>
    <groupOfParameters name="files">
      <label>
        <message lang="fr">Fichiers</message>
        <message lang="en">Files</message>
        <message lang="de">Files</message>
      </label>
      <description>
        <message lang="fr">Paramétrez ici le comportement...</message>
        <message lang="en">Set up the behavior...</message>
        <message lang="de">Stellt das Verhalten...</message>
      </description>
      <order>3</order>
      <parameters>
        <parameter>
          <name>importFiles</name>
          <label>
            <message lang="fr">Importation</message>
            <message lang="en">Import</message>
            <message lang="de">Importieren</message>
          </label>
          <order>20</order>
          <mandatory>true</mandatory>
          <value>0</value>
          <options>
            <option>
              <name>
                <message lang="fr">Non</message>
                <message lang="en">No</message>
                <message lang="de">Nein</message>
              </name>
              <value>0</value>
            </option>
            <option>
              <name>
                <message lang="fr">Import unitaire</message>
                <message lang="en">Unit import</message>
                <message lang="de">Einzelimport</message>
              </name>
              <value>1</value>
            </option>
          </options>
          <type>select</type>
          <updatable>always</updatable>
          <help>
            <message lang="fr">Valeurs possibles...</message>
            <message lang="en">Available values...</message>
            <message lang="de">Verfügbare Werte...</message>
          </help>
        </parameter>
        <parameter>
          <name>publicFiles</name>
          <label>
            <message lang="fr">Banque de fichiers</message>
            <message lang="en">Re-usable files</message>
            <message lang="de">Wiederverwendbare Dateien</message>
          </label>
          <order>39</order>
          <mandatory>false</mandatory>
          <value>no</value>
          <type>checkbox</type>
          <updatable>always</updatable>
          <help>
            <message lang="fr">Ce paramètre...</message>
            <message lang="en">This feature...</message>
            <message lang="de">Diese Funktion...</message>
          </help>
          <warning>
            <message lang="fr">En cochant cette case...</message>
            <message lang="en">By checking this box...</message>
            <message lang="de">By checking this box...</message>
          </warning>
        </parameter>
      </parameters>
    </groupOfParameters>
  </groupsOfParameters>
</WAComponent>

Il est décidé pour ce composant, non pas d'ajouter une langue, mais de déporter toutes les données localisées dans des fichiers de propriétés. Les fichiers suivants sont créés :
  • $SILVERPEAS_HOME/properties/xmlcomponents/illustration_fr.properties
  • $SILVERPEAS_HOME/properties/xmlcomponents/illustration_en.properties
  • $SILVERPEAS_HOME/properties/xmlcomponents/illustration_de.properties

Le contenu du fichier de propriétés pour la langue française est le suivant :

label=Gestion documentaire I
description=Les publications...
suite=01 Gestión de documentos
profile.publisher.label=Publieurs
profile.publisher.help=Les publieurs...
profile.writer.label=Rédacteurs
profile.writer.help=Les rédacteurs créent des publications.
parameter.nbPubliPerPage.label=Nombre par page
parameter.nbPubliPerPage.help=Permet de définir...
parameterGroup.files.label=Fichiers
parameterGroup.files.description=Paramétrez ici le comportement...
parameterGroup.files.parameter.importFiles.label=Importation
parameterGroup.files.parameter.importFiles.help=Valeurs possibles...
parameterGroup.files.parameter.importFiles.option.0.name=Non
parameterGroup.files.parameter.importFiles.option.1.name=Import unitaire
parameterGroup.files.parameter.publicFiles.label=Banque de fichiers
parameterGroup.files.parameter.publicFiles.help=Ce paramètre...
parameterGroup.files.parameter.publicFiles.warning=En cochant cette case...

Toutes les données localisées peuvent alors être retirées du descripteur XML :

<WAComponent xmlns="http://silverpeas.org/xml/ns/component" 
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
             xsi:schemaLocation="http://silverpeas.org/xml/ns/component https://www.silverpeas.org/xsd/component.xsd">
  <name>illustration</name>
  <behaviors>
    <behavior>topicTracker</behavior>
  </behaviors>
  <visible>true</visible>
  <visibleInPersonalSpace>true</visibleInPersonalSpace>
  <portlet>true</portlet>
  <profiles>
    <profile name="publisher">
      <spaceMapping>
        <profile>publisher</profile>
      </spaceMapping>
    </profile>
    <profile name="writer">
      <spaceMapping>
        <profile>writer</profile>
      </spaceMapping>
    </profile>
  </profiles>
  <parameters>
    <parameter>
      <name>nbPubliPerPage</name>
      <order>4</order>
      <mandatory>false</mandatory>
      <value></value>
      <type>text</type>
      <size>5</size>
      <updatable>always</updatable>
    </parameter>
  </parameters>
  <groupsOfParameters>
    <groupOfParameters name="files">
      <order>3</order>
      <parameters>
        <parameter>
          <name>importFiles</name>
          <order>20</order>
          <mandatory>true</mandatory>
          <value>0</value>
          <options>
            <option>
              <value>0</value>
            </option>
            <option>
              <value>1</value>
            </option>
          </options>
          <type>select</type>
          <updatable>always</updatable>
        </parameter>
        <parameter>
          <name>publicFiles</name>
          <order>39</order>
          <mandatory>false</mandatory>
          <value>no</value>
          <type>checkbox</type>
          <updatable>always</updatable>
          <warning/>
        </parameter>
      </parameters>
    </groupOfParameters>
  </groupsOfParameters>
</WAComponent>

A noter que pour afficher une alerte sur un changement de valeur d'un paramètre, la balise <warning/> doit être spécifiée dans le descripteur XML. Autrement, une éventuelle alerte indiquée dans un fichier de propriété serait ignorée.


PRs :

Mis à jour par Miguel Moquillon il y a 11 mois

  • Statut changé de Resolved à Integration in progress...

Mis à jour par Miguel Moquillon il y a 11 mois

  • Statut changé de Integration in progress... à Closed

Intégré dans les branches master et master-jackrabbit

Actions

Formats disponibles : Atom PDF