Différencier la traduction d'un objet : menu/liste

Bonjour,

je voudrais différencier la traduction d’un objet entre l’affichage dans le domaine et l’affichage en liste.

J’ai créé un Domaine Gestion dans lequel je veux afficher : “Projets : affectation des instructeurs externe”.
L’objet métier affiché a une traduction “Projets” qui est aussi utilisée dans une zone de vue et la traduction “Projets” convient très bien.

j’ai trouvé un poste Traduction objet dans le menu parlant de singulier et pluriel avec | .
j’ai mis dans ma traduction : “Projets|Projets : affectation des instructeurs externe” pensant que
“Projets” s’afficherait sur la liste et “Projets : affectation des instructeurs externe” dans le menu.
Mais “Projets : affectation des instructeurs externe” s"affiche partout.

y a t’il une solution autre que créer 2 objets ?

Je ne suis pas sûr que ça répond au besoin dans ce cas précis mais il est possible de surcharger la traduction d’un Link cela permet de nommer différemment l’onglet d’un objet lié

ce n’est pas un link mai un objet dont la liste est accessible via le menu et via la home avec 2 titres différents

OK sinon il y a une méthode pour changer la trad d’un objet: https://docs.simplicite.io/4.0/javadoc/com/simplicite/util/ObjectCore.html#setDisplay(java.lang.String)

Ex: A appelere dans le postLoad en fonction du nom d’instance de l’objet

au postLoad, on peut forcer le libellé:

if (isHomeInstance()) setDisplay("Nom pour l'accueil");
if (isMainInstance()) setDisplay("Nom pour le menu, la liste et le formulaire");
if (isPanelInstance()) setDisplay("Nom pour l'onglet d'un objet parent");

Il faudra tester la langue getGrant().getLang() si votre application est multi-langues.

Si vous voulez changer le nom d’une même instance (menu et liste par exemple), il faudra faire du code front.

ça ne fonctionne pas

@Override
public void postLoad() {
	if(isHomeInstance()){
		setDisplay("Projets déposés");
	}
	if(isMainInstance()){
		setDisplay("Affectation des instructeurs externes");
	}
}

le même objet apparait en home et dans le menu et la traduction est toujours la traduction initiale de l’objet

Ce sont des pluriels.
A mon avis il faut aussi donner la traduction au pluriel si vous l’aviez définie à “Projets” dans la traduction.

setDisplay("Projet déposé");
setPluralDisplay("Projets déposés");

Suivant le contexte (menu, liste, form…), la UI prend l’un ou l’autre.

le setPluralDisplay() fonctionne sur la Home mais pas pour le menu :

public void postLoad() {
	if(isHomeInstance()){
		setDisplay("Projets déposés");
		setPluralDisplay("Projets déposés");
	}
	if(isMainInstance()){
		setDisplay("Affectation des instructeurs externes");
		setPluralDisplay("Affectation des instructeurs externes");
	}
}

Pour m’en sortir, j’ai donc déclaré ce que je veux voir apparaitre au niveau du menu dans la traduction de l’objet.

Oui le menu est déjà chargé à l’ouverture de session, et quand l’instance est préparée plus tard, il ne se recharge pas.

Il serait trop couteux/long d’instancier tous les “main objects” en session (passer par les hook preLoad) à l’affichage du menu (au moment où la UI va chercher les droits).

Votre solution est donc la bonne : traduire par paramétrage pour le menu statique + surcharger par code pour plus tard contextuellement.

Sinon on doit encore pouvoir modifier le menu en mémoire au moment des GrantHooks.postLoadGrant, donc avant affichage de la UI.