Alors pour traduire un document, il n'est pas du tout recommandé de passer directement par ces méthodes du persistentprovider.
À la place il faut passer par les méthodes
beginI18nWork et
endI18nWork du
RequestContext.
L'utilisation de
beginI18nWork permet de changer globalement la langue de travail. À partir de là, tous les getters et setters appelés sur des documents travailleront sur la traduction dans cette langue du document. Une fois le traitement terminée,
endI18nWork permet de revenir à la langue de travail précédente (derrière on gère une pile de langues, on peut donc imbriquer plusieurs niveaux si nécessaire).
Exemple :$rqc = RequestContext::getInstance();
try
{
$rqc->beginI18nWork($lang);
// Insérer votre code ici.
$rqc->endI18nWork();
}
catch (Exception $rce)
{
$rqc->endI18nWork($rce);
}
Attention, il est important de placer le try/catch autour car si jamais une exception intervient dans votre code, il faut tout de même revenir à la langue de travail d'origine. Notons que
endI18nWork "rethrow" l'exception qu'il reçoit en paramètre.
Dernière remarque : dans le cas où vous modifiez plusieurs traductions d'un même document successivement, il est recommandé de faire un
save pour chaque langue. En effet, lors d'un
save, toutes les traductions modifiées sont bien enregistrées mais les pre et post save ne sont exécutés que pour la langue courante.