Vous consultez une page technique concernant le logiciel de gestion Mercator. Celle-ci contient des informations spécifiques destinées aux professionnels de Mercator. Souhaitez-vous être redirigés vers des informations plus générales ?


   Ne plus poser cette question

Traduire des données avec l'IA

0000003303     -      22/10/2025

Le paramétrage illustré ici montre comment traduire automatiquement des informations de Mercator à l'aide de l'IA L'exemple est fait pour le signalétique des articles, où l'utilisateur va encoder la désignation de l'article en français (S_MODELE) et demander à l'IA, via un bouton personnalisé, de traduire 

  • vers le néerlandais : S_MODELEN,
  • vers l'anglais : S_MODELEE,
  • vers l'allemand : S_MODELED.

Une fois la traduction effectuée, l'utilisateur pourra continuer à interagir avec l'IA en lui donnant d'éventuelles instructions supplémentaires permettant, le cas échéant, d'améliorer les traductions.

Avec ChatGPT d'OpenAI

Ceci requiert l'installation du plugin MercatorAI.OpenAI et ne fonctionne qu'avec une version Core de Mercator. (Le code est toutefois compilable dans une version classique).

Le code du bouton placé à proximité des quatre champs de désignation est le suivant. On note qu'on utilise ici un chat à réponse structurée. La réponse sera placée dans la classe Trad. L'attribut MercatorAI.FactoryOpenAI.ChatJsonFormat (Description) permet d'indiquer à ChatGPT où il doit placer chaque réponse.

Zoom
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Linq;
using MercatorApi;
using MercatorController;
using System.Windows.Forms;
using MercatorExtensions;
using MercatorDatabase;

// <CompileWithRoslyn />

namespace MercatorUi.MovableControls.ButtonsCodes
{
    public static class Script
    {

        public static void Exec(MercatorUi.MovableControls.MovableButton clickedButton)
        {
            // enter your customized code here
            MercatorUi.Forms.Sig.SigForm sigForm = (MercatorUi.Forms.Sig.SigForm)clickedButton.Form;
            if (string.IsNullOrWhiteSpace(sigForm.StockRecord.S_MODELE))
            {
                MercatorUi.Dialogs.Stop("La désignation en français est vide !");
                return;
            }
            MercatorAI.FactoryOpenAI factory = new MercatorAI.FactoryOpenAI();
            MercatorAI.Interfaces.IOpenAiChat openAiChat = factory.CreateOpenAiChat("gpt-4o-mini", out string error);
            if (!string.IsNullOrEmpty(error))
            {
                MercatorUi.Dialogs.Stop("Impossible d'initialiser le chat d'OpenAI : " + error);
                return;
            }
            string systemMessage = "Tu es un assistant que traduit en néerlandais, anglais et allemand des noms de produits dans un magasin de bricolage.";
            string chatMessage = sigForm.StockRecord.S_MODELE;
            MercatorAI.FactoryOpenAI.ChatOptions chatOptions = new MercatorAI.FactoryOpenAI.ChatOptions
            {
                Temperature = 0.2f, // Limite la créativité mais permet quand même des formulations naturelles
                TopP = 1.0f // Pas besoin de filtrer la probabilité cumulative, surtout pour des phrases courtes et simples
            };
            while (!string.IsNullOrEmpty(chatMessage))
            {
                try
                {
                    MercatorUi.Wait.WaitStatic.WaitWindow(Api.Iif_langue(Globals.Langue, IifLangueEnum.AIisThinking));
                    Trad trad = openAiChat.Ask<Trad>(chatMessage, "Trad_NL_EN_DE", systemMessage: systemMessage, chatOptions: chatOptions);
                    systemMessage = null;
                    sigForm.StockRecord.S_MODELEN = trad.TradNL ?? "";
                    sigForm.StockRecord.S_MODELEE = trad.TradEN ?? "";
                    sigForm.StockRecord.S_MODELED = trad.TradDE ?? "";
                    MercatorUi.Wait.WaitStatic.WaitClear();
                    chatMessage = MercatorUi.Dialogs.AskMemo("Affiner les traductions avec une consigne supplémentaire ?", "");
                }
                catch (Exception ex)
                {
                    MercatorUi.Wait.WaitStatic.WaitClear();
                    MercatorUi.Dialogs.Stop(ex.Message);
                    chatMessage = "";
                }
            }
        }



        public class Trad
        {
            [MercatorAI.FactoryOpenAI.ChatJsonFormat(Description = "Traduction en NL", IsRequired = true)]
            public string TradNL { get; set; }
            [MercatorAI.FactoryOpenAI.ChatJsonFormat(Description = "Traduction en EN", IsRequired = true)]
            public string TradEN { get; set; }
            [MercatorAI.FactoryOpenAI.ChatJsonFormat(Description = "Traduction en DE", IsRequired = true)]
            public string TradDE { get; set; }
        }
    }
}

 

Avec Gemini (Google)

Ceci requiert l'installation du plugin MercatorAI.Gemini et ne fonctionne qu'avec une version Core de Mercator. (Le code est toutefois compilable dans une version classique).

Le code du bouton placé à proximité des quatre champs de désignation est le suivant. On note qu'on utilise ici un chat à réponse structurée. La réponse sera placée dans la classe Trad.

Zoom
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Linq;
using MercatorApi;
using MercatorController;
using System.Windows.Forms;
using MercatorExtensions;
using MercatorDatabase;

// <CompileWithRoslyn />

namespace MercatorUi.MovableControls.ButtonsCodes
{
    public static class Script
    {
        public static void Exec(MercatorUi.MovableControls.MovableButton clickedButton)
        {
            // enter your customized code here
            Forms.Sig.SigForm sigForm = (Forms.Sig.SigForm)clickedButton.Form;
            if (string.IsNullOrWhiteSpace(sigForm.StockRecord.S_MODELE))
            {
                MercatorUi.Dialogs.Stop("La désignation en français est vide !");
                return;
            }
            MercatorAI.FactoryGemini factory = new MercatorAI.FactoryGemini();
            MercatorAI.Interfaces.IGeminiChat geminiChat = factory.CreateGeminiChat("gemini-2.5-flash", out string error);
            if (!string.IsNullOrEmpty(error))
            {
                Dialogs.Stop("Impossible d'initialiser le chat de Gemini : " + error);
                return;
            }

            string systemMessage = "Tu es un assistant que traduit en néerlandais, anglais et allemand des noms de produits dans un magasin de bricolage.";
            string chatMessage = "À traduire : \"" + sigForm.StockRecord.S_MODELE + "\"";
            while (!string.IsNullOrEmpty(chatMessage))
            {
                Wait.WaitStatic.WaitWindowBaseThread(Api.Iif_langue(Globals.Langue, IifLangueEnum.AIisThinking));
                Trad trad = null;
                _BaseClasses.ExclusiveBackgroundWorkerAsync exclusiveBackgroundWorkerAsync = new _BaseClasses.ExclusiveBackgroundWorkerAsync(async () => trad = await geminiChat.AskAsync<Trad>(chatMessage, systemMessage: systemMessage));
                Wait.WaitStatic.WaitClearBaseThread();
                if (exclusiveBackgroundWorkerAsync.ExceptionDuringDoWork != null)
                {
                    Wait.WaitStatic.WaitClearBaseThread();
                    Dialogs.Stop(exclusiveBackgroundWorkerAsync.ExceptionDuringDoWork.Message + (exclusiveBackgroundWorkerAsync.ExceptionDuringDoWork.InnerException != null ? "\r\n" + exclusiveBackgroundWorkerAsync.ExceptionDuringDoWork.InnerException.Message : ""));
                    return;
                }
                sigForm.StockRecord.S_MODELEN = trad.TradNL ?? "";
                sigForm.StockRecord.S_MODELEE = trad.TradEN ?? "";
                sigForm.StockRecord.S_MODELED = trad.TradDE ?? "";
                Wait.WaitStatic.WaitClear();
                string consigneSuppl = Dialogs.AskMemo("Affiner les traductions avec une consigne supplémentaire ?", "");
                if (!string.IsNullOrWhiteSpace(consigneSuppl))
                    chatMessage = consigneSuppl + "\n" + "À traduire : \"" + sigForm.StockRecord.S_MODELE + "\"";
                else
                    return;
            }
        }

        public class Trad
        {
            public string TradNL { get; set; }
            public string TradEN { get; set; }
            public string TradDE { get; set; }
        }
    }
}

 

 Les informations à traduire sont envoyées à un tiers (OpenAI / Google). Il ne faut donc en aucun cas transmettre des données revêtant un caractère confidentiel. 

Les traductions effectuées par ce code sont générées automatiquement à l’aide d’un modèle d’intelligence artificielle (IA). Bien que conçu pour fournir des réponses utiles et pertinentes, ces traductions peuvent être incomplètes, inexactes, partiellement ou totalement.

L’utilisateur reste seul responsable de l'évaluation et de l’utilisation de ces traductions. En aucun cas Mercator ou le fournisseur du service IA ne saurait être tenu responsable des conséquences qui découleraient de l'utilisation de ces traductions.

L'usage de ce service doit être rendu compatible avec les normes relatives au RGPD qui sont en place dans l'entreprise.



Cookies fonctionnels : Cookies nécessaires à l'utilisation du site et cookies de préférence. Ils ne contiennent aucune donnée à caractère personnel. (En savoir plus)

Cookies statistiques : Captation de statistiques liées aux comportements des internautes. (En savoir plus)

Cookies marketing : Pour effectuer le suivi des visiteurs au travers des sites web, à des fins publicitaires. (En savoir plus)