Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

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 et lang: la valeur du champ lang 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ètre isTranslationActive à 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" :

topic fr e865eImage Removed

⇒ puis sélectionnez la langue dans laquelle votre objet doit être traduit.

topic fr a4518Image Removed

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

topic fr f9193Image Removed

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

The general principle of "duplicating" an entity in a context different from that of origin is called "declination".

Translation is the general principle of "duplicating" an entity in a different language context than the original one.

This section describes the different declination principles where language is the only variable.

For all variations with regard to the concept of a project, please refer to the section "Project variations".

The principle of translation respects the following laws:

  • an entity is translatable if it has the master and lang fields: the value of the lang field is different for each translation

  • a user can create and declassify entities only in the languages of which it has rights in contribution: this information is stored at user level on the contriblangs fields

  • a user can translate an entity if he has the necessary rights to view it and if he can create it in the target language. It must therefore have access to at least two languages as a contribution

  • within the framework of objects that can be declined by project:

    • if the source entity belongs to a project, the project must be in the target language: the project must therefore be multilingual

    • an entity that can be applied to projects of the same group can only be translated in this specific context. It is not possible to translate an entity and translate it into another project at the same time with this function

All the translations of the same instance are presented in a "translations" tab accessible from the visualization action.

Prerequisites for translation

To be able to translate content, you must have the following components installed:

  • an object to be translated must inherit from the object contentobject at least the following information:

    • property master

    • property lang

    • property mediagroup (not required)

    • property media (not required)

    • property notranslation (not required)

  • the product plugin WXM_Mediacore must be enabled and the parameter isTranslationActive must be set to yes

Do a translation

In the back-office, the "translate" functionality allows you to easily perform a translation from the visualization of an object:

In the toolbar, click on "Translate":

topic fr e865eImage Added

then select the language in which your object should be translated.

topic fr a4518Image Added

Ignoring the principle of translation

It is possible to ask the system to ignore the notion of language on an entity. For example, as part of an object storing images, these are not necessarily language-specific (no text displayed) it must therefore be the same body for all languages.

In this case, if the object structure has the property notranslation and this one is set to yes (value 1), then the object will be considered untranslatable:

  • the translate button will not appear in the back office

  • an error is raised if you try to translate it with the action datatranslate

Caution
The value of the lang field will always be filled with the value of language of creation. Unlike the media field, the system does not handle objects whose lang property is empty.

Updating of allocations

topic fr f9193 enImage Added

During the translation action, the system creates a new object for the selected language context by duplicating the source and changing some properties automatically:

  • the language will be the target language

  • if the object to be translated is linked to other object instances via the attribution concept (child, childmulti) and these objects are also translatable, the system will automatically retrieve equivalent translations to update the property

Caution
If no matching object is found in the desired context, the property will be empty. This implies that if the property is required by its structure configuration, an error will be removed and the translation action canceled. (see article on standard errors).
Caution
We don’t do a cascade translation: if you want this kind of behaviour you need to customize it.

Manually configure a property during translation

You can manually overload a property during translation.

Indeed, creating a translation using the WmsUtils module, we pass in parameter a java.util.HashMap with the values that will be object as well as a java.util.HashSet of the objects in the new object collection not to be duplicated (e.g. paragraphs).

The translation action is datatranslate. When creating a translation, we call the following JSPs:

/bov3/datatranslate/initNotCopiedObjects.jsp

initialise la initializes the java.util.HashSet des objets à ne pas copier en objects not to be copied in cascade.
Vous pouvez personnaliser cette JSP dans votre san de cette façon You can customize this JSP in your SAN this way:

<%@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 dof'objets defrontlink' type 'frontlink' lors de la traduction;
objects are not duplicated during translation;
*/
notCopiedObjects.add("frontlink");
//*
 onwe nedo dupliquenot pasduplicate lesthe collections d'objets de type 'paragraph' lors de la traduction;of paragraph objects when translating;
*/
notCopiedObjects.add("paragraph");

request.setAttribute("notCopiedObjects", notCopiedObjects);
%>
/bov3/datatranslate/initForcedValues.jsp

initialise la initializes the 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é.

Exemple

HashMap utility and iter on each object’s properties to overload them when copying.
You can customize a field in two ways:

  • if you specify the name or position of the property as a key: you will overload the property globally, i.e. it will be applied regardless of the nature of the object.

  • if you specify as key[object name].property name or index: you will overload the property in a fine way, i.e. it will be applied only for the nature of the specified object.

Example
<%@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();
}
/*
LorsDuring d'unea traductiontranslation, onwe always veutwant systématiquementto viderempty lathe contenanceproduct's ducapacity produitso pourthat
quethe l'utilisateur ressaisisse lauser re-enters the contance enin Onces (Oz) ouor Millilitres (ml) of duthe produitproduct.
*/
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 You can also customize properties by fields by overloading properties in this way:

  • [objects/[nom d’objetobject_name]]/bov3/datatranslate/forcedvalues/properties/[property native type natif de la propriété]/[nature]/[nom de la propriétéproperty name].jsp

  • [objects/[nom d’objetobject_name]]/bov3/datatranslate/forcedvalues/properties/[nom de la propriétéproperty name].jsp

  • [objects/[nom d’objetobject_name]]/bov3/datatranslate/forcedvalues/properties/[property native type natif de la propriété]/[property type de la propriété].jsp

topic fr b5c98

À l’interieur de ces JSPs, vous disposez pour travailler des variables suivantes Within these JSPs, you can work with the following variables:

form_object

nature de l’objet courant en court de traduction

activeRefererObject

objet de référence en court de traductionof the current object in translation short

activeRefererObject

reference object under translation

itemValue

CTObjectField correspondant à la propriété courantecorresponding to the current property

colfield

nom de la propriété courantename of the current property

nature

nature de l’objet pointé dans le cadre d’une relation d’attributionof the object pointed out in the context of an attribution relationship

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

properties to force properties to force

Standard errors

When translating from dataview, errors are displayed via the standard popup.

Here are the error codes you may encounter:

not_connected

votre Your session a expiré, il faut vous reconnecterhas expired, you need to log in again.

object_not_found

l’objet à traduire n’existe pasThe object to translate does not exist.

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 et langYou don’t have the necessary rights to see the instance.

  • This feature is reserved for variations in the same project: The source project must therefore be accessible since we are going to create an version in this same project.

  • The destination language must be accessible to the user, check that they have good access to this one.

  • Security is tested in the init of the datatranslate action, by default we test the action view of the objectdata domain, check the security rules or override this boolean with a rule specific to your developments.

not_compliant

the requested object does not have the necessary properties for the translation function (at least the master and lang fields)

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

    the object has been specified as untranslatable via the notranslation property

    mandatoryFields

    the object could not be created because some mandatory fields are empty. This error is often solved because a match could not be found on an association.
    The value associated with this error is the list of fields that are empty.

    • associations must be translated before translating the requested object

    • the error is raised by a structural obligation. If this obligation is only functional, you can create a facet to render it mandatory only as a back-office contribution

    • Customize the field to manage a default value.

    FAQ

    Why is the Translate button not available on my item or a message tells me that the feature is not available?

    If the object does have properties listed in the pre-required section check the following points:

    • Check that the user performing the test has several contribution languages

    • Does the object belong to a project (media completed)?

      • If yes, then make sure that the project is available in several languages and that there is more than one language in common with the user’s languages. The "Translate" button does not appear if the user has no "destination" languages for translation.

    Why do I always get an error telling me that a field is not filled in when I translate?

    The user tries to translate an object whose structure is defined as a obligatory attribution to another object that can also be translated. However, when translating, the system searches for a match to these documents in the language of destination. Since he finds none, the property will be empty in the translation, which is not allowed.

    To solve this problem, you have three main solutions:

    • This link is mandatory for a reason (data model, technical, functional needs): the user must translate these other linked objects before translating the object that raises the error.

    • You can customize the property that clears the error to assign a Default value (to be defined in the specifications) in this case.

    • If binding was mandatory only in a functional setting, you can change your object configuration to make the field mandatory only through one facet (and more in the structure) the obligation will be carried out in the back office forms but this one will not be tested during the translation process.

      Warning
      If you apply this solution, the new object will not be functionally valid which can be disturbing for the user.