Introduction
Est appelé "déclinaison" le principe général de "dupliquer" une entité dans un contexte différent à celui d’origine.
Est appelé "traduction" le principe général de "dupliquer" une entité dans un contexte de langue différent de celui d’origine.
Cette section décrit les différents principes de déclinaison où la langue est la seule variable.
Pour toutes déclinaisons par rapport à la notion de projet, merci de vous référer à la section "déclinaison projets".
Le principe de traduction respecte les lois suivantes :
-
une entité est traduisible si celle-ci possède les champs
master
etlang
: la valeur du champlang
est différente pour chaque traduction; -
un utilisateur peut créer et décliner des entités uniquement dans les langues dont il possède des droits en contribution : cette information est stockée au niveau de l’utilisateur sur le champs
contriblangs
; -
un utilisateur pourra traduire une entité si il possède les droits nécessaires à la visualisation de celle-ci et si il peut la créer dans la langue de destination. Il faut donc qu’il ait accès en contribution à au moins deux langues;
-
dans le cadre des objets déclinables par projet :
-
si l’entité source appartient à un projet, il faut que celle-ci soit déclinable dans la langue de destination : le projet doit donc être multi-langues;
-
une entité déclinable aux seins de projets d’un même groupe ne pourra être traduite que dans ce contexte précis. Il n’est pas possible de traduire une entité et de la décliner dans un autre projet en même temps avec cette fonction;
-
L’ensemble des traductions d’une même instance est présenté dans un onglet "traductions" accessible depuis l’action de visualisation.
Pré-requis à la traduction
Pour pouvoir traduire un contenu, il vous faut avoir installé les composants suivants :
-
un objet à traduire doit hériter de l’objet
contentobjet
au moins les informations suivantes :-
propriété
master
-
propriété
lang
-
propriété
mediagroup
(non obligatoire) -
propriété
media
(non obligatoire) -
propriété
notranslation
(non obligatoire)
-
-
le plugin produit
WXM_Mediacore
doit être activé et le paramètreisTranslationActive
à oui.
Effectuer une traduction
Dans le back-office, la fonctionnalité "traduire" permet d’effectuer aisaiment une traduction depuis la visualisation d’un objet :
⇒ dans la barre d’outils, cliquez sur "traduire/translate" :
⇒ puis sélectionnez la langue dans laquelle votre objet doit être traduit.
Ignorer le principe de traduction
Il est possible de demander au système d’ignorer la notion de langue sur une entité. Par exemple, dans le cadre d’un objet stockant des images, celles-ci ne sont pas forcement spécifiques à une langue (aucun texte affiché) : il faut donc que ce soit la même instance pour toutes les langues.
Dans ce cas, si la structure de l’objet dispose de la
propriété notranslation
et que celui-ci est à oui (valeur 1), alors l’objet
sera considéré comme non traduisible :
-
le bouton traduire n’apparaîtra pas dans le back-office
-
une erreur est levée si on essai de le traduire avec l’action
datatranslate
Caution
|
La valeur du champ lang sera toujours remplie avec la valeur de
langue de création.
Contrairement au champs media, le système ne gère pas les objets dont la
propriété lang est vide.
|
Mise à jour des attributions
Lors de l’action de traduction, le système crée un nouvel objet pour le contexte de langue sélectionné en dupliquant la source et en changeant certaines propriétés automatiquement :
-
la langue sera celle de destination
-
si l’objet à traduire est lié à d’autres instances d’objet via la notion d’attribution (child, childmulti) et que ces objets sont aussi traduisibles, le système va récupérer automatiquement les traductions équivalentes pour mettre à jour la propriété
Caution
|
Si aucun objet correspondant n’est découvert dans le contexte désiré, la propriété sera vide. Cela implique que si la propriété est obligatoire par sa configuration de structure, une erreur sera levée et l’action de traduction annulée. (cf. article sur les erreurs standards). |
Caution
|
Nous n’effectuons pas de traduction en cascade : si vous désirez ce type de comportement vous devez faire des personnalisations. |
Configurer manuellement une propriété lors de la traduction
Vous pouvez surcharger manuellement une propriété lors de la traduction.
En effet, la création d’une traduction utilisant le module WmsUtils
,
nous passons en paramètre une java.util.HashMap avec les valeurs qui seront
forcées dans le nouvel objet ainsi qu’une java.util.HashSet des objets de
collection à ne pas dupliquer (par exemple des paragraphes).
L’action de traduction est datatranslate
. Lors de la création d’une
traduction, nous appelons les jsp suivantes :
- /bov3/datatranslate/initNotCopiedObjects.jsp
-
initialise la java.util.HashSet des objets à ne pas copier en cascade.
Vous pouvez personnaliser cette JSP dans votre san de cette façon :
<%@page pageEncoding="ISO-8859-15"%>
<%@taglib prefix="noheto" uri="/WEB-INF/noheto.tld" %>
<%@taglib prefix="c" uri="/WEB-INF/c.tld" %>
<%--
/san/bov3/datatranslate/initNotCopiedObjects.jsp
--%>
<%
java.util.Set notCopiedObjects = (java.util.HashSet) request.getAttribute("notCopiedObjects");
if (notCopiedObjects == null) {
notCopiedObjects = new java.util.HashSet();
}
// on ne duplique pas les collections d'objets de type 'frontlink' lors de la traduction;
notCopiedObjects.add("frontlink");
// on ne duplique pas les collections d'objets de type 'paragraph' lors de la traduction;
notCopiedObjects.add("paragraph");
request.setAttribute("notCopiedObjects", notCopiedObjects);
%>
- /bov3/datatranslate/initForcedValues.jsp
-
initialise la java.util.HashMap et itère sur chaque propriétés de l’objet afin de les surcharger lors de la copie Vous pouvez personnaliser un champs de deux manières :
-
si vous indiquez en tant que clé le nom ou la position de la propriété: vous surchargerez la propriété de manière globale, c’est à dire qu’elle sera appliquée quelle que soit la nature de l’objet.
-
si vous indiquez en tant que clé [nom d’objet].[nom de propriété ou indice] : vous surchargerez la propriété de manière fine, c’est à dire quelle ne sera appliquée que pour la nature de l’objet précisé.
-
<%@page pageEncoding="ISO-8859-15"%>
<%@taglib prefix="noheto" uri="/WEB-INF/noheto.tld" %>
<%@taglib prefix="c" uri="/WEB-INF/c.tld" %>
<%--
/san/bov3/datatranslate/initForcedValues.jsp
--%>
<%
java.util.Map forcedValues = (java.util.Map) request.getAttribute("forcedValues");
if (forcedValues == null) {
forcedValues = new java.util.HashMap();
}
/*
Lors d'une traduction, on veut systématiquement vider la contenance du produit pour que
l'utilisateur ressaisisse la contance en Onces (Oz) ou Millilitres (ml) du produit
*/
if (!forcedValues.containsKey("capacity")) {
forcedValues.put("capacity", "");
}
request.setAttribute("forcedValues", forcedValues);
%>
Vous pouvez aussi personnaliser les propriétés par champs en surchargeant les propriétés de cette façon :
-
[objects/[nom d’objet]]/bov3/datatranslate/forcedvalues/properties/[type natif de la propriété]/[nature]/[nom de la propriété].jsp
-
[objects/[nom d’objet]]/bov3/datatranslate/forcedvalues/properties/[nom de la propriété].jsp
-
[objects/[nom d’objet]]/bov3/datatranslate/forcedvalues/properties/[type natif de la propriété]/[type de la propriété].jsp
À l’interieur de ces JSPs, vous disposez pour travailler des variables suivantes :
- form_object
-
nature de l’objet courant en court de traduction
- activeRefererObject
-
objet de référence en court de traduction
- itemValue
-
CTObjectField correspondant à la propriété courante
- colfield
-
nom de la propriété courante
- nature
-
nature de l’objet pointé dans le cadre d’une relation d’attribution
- forcedValues
-
java.util.HashMap des propriétés à forcer
Erreurs standards
Lors d’une traduction depuis le dataview, les erreurs sont affichées via la popup standard.
Voici les codes d’erreur que vous pouvez rencontrez :
- not_connected
-
votre session a expiré, il faut vous reconnecter
- object_not_found
-
l’objet à traduire n’existe pas.
- not_authorized
-
vous n’avez pas les droits nécessaires pour voir l’instance.
-
Cette fonctionnalité est réservée aux déclinaisons dans un même projet : Le projet source doit donc être accessible puisque nous allons créer une version dans ce même projet.
-
La langue de destination doit être accessible à l’utilisateur, vérifiez qu’il a bien accès à celle-ci.
-
La sécurité est testée dans les init de l’action datatranslate, par défaut nous testons l’action view du domaine objectdata, vérifiez les règles de sécurité ou surchargez ce booléen avec une règle spécifique à vos développements.
-
- not_compliant
-
l’objet demandé n’a pas les propriétés nécessaires pour la foncton de traduction (au minimum les champs
master
etlang
) - object_no_translation_selected
-
l’objet a été précisé comme non traduisible via la propriété
notranslation
- mandatoryFields
-
l’objet n’a pu être créé car certains champs obligatoires sont vides. Cette erreur est souvent levée car une correspondance n’a pu être découverte sur une association.
La valeur associée à cette erreur est la liste des champs qui sont vides.-
il faut traduire les associations avant de traduire l’objet demandé
-
l’erreur est levée par une obligation structurelle. Si cette obligation n’est que fonctionnelle, vous pouvez créer une facette pour la rendre obligatoire uniquement en contribution back-office
-
personnalisez le champs pour gérer une valeur par défaut.
-
FAQ
- Pourquoi le bouton traduire n’est pas disponible sur mon objet ou un message m’indique que la fonctionnalité n’est pas disponible ?
-
Si l’objet dispose bien des propriétés listées dans la section pré-requis vérifiez les points suivants :
-
Contrôlez que l’utilisateur effecutant le teste dispose bien de plusieurs langues de contribution;
-
l’objet appartient-il à un projet (media rempli) ?
-
si oui, alors vérifiez que le projet est déclinable dans plusieurs langues et qu’il y en a plus d’une en commun avec celles de l’utilisateur. Le bouton "traduire" n’apparait pas si l’utilisateur n’a pas de langues de "destination" pour la traduction.
-
-
- Pourquoi j’obtiens systématiquement une erreur m’indiquant qu’un champs n’est pas rempli lors de ma traduction ?
-
L’utilisateur essaie de traduire un objet dont la structure défini une attribution obligatoire à un autre objet lui aussi traduisible. Or, lors de la traduction, le système cherche une correspondance à ces attributions dans la langue de destination. Comme il n’en trouve aucune, la propriété sera vide dans la traduction, ce qui n’est pas permis.
Pour résoudre ce problème, vous avez principalement trois solutions :
-
cette liaison est obligatoire pour une raison (modèle de données, besoins technique, fonctionnel) : l’utilisateur doit traduire ces autres objets liés avant de traduire l’objet qui lève l’erreur.
-
vous pouvez personnaliser la propriété qui lève l’erreur pour attribuer une valeur par défaut (à définir dans le cahier des charges) dans ce cas précis.
-
si la liaison était obligatoire seulement dans un cadre fonctionnel, vous pouvez modifier votre configuration d’objet pour rendre le champ obligatoire seulement via une facette (et plus dans la structure) : l’obligation sera effectuée dans les formulaires du back-office mais celle-ci ne sera pas testée lors du processus de traduction.
Attention, si vous appliquez cette solution, le nouvel objet ne sera pas valide fonctionnellement ce qui peut être perturbant pour l’utilisateur.
-