# msgid "" msgstr "" "Project-Id-Version: Connector\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-04-15 22:28+0300\n" "PO-Revision-Date: 2015-05-05 11:55+0100\n" "Last-Translator: Guewen Baconnier <guewen.baconnier@camptocamp.com>\n" "Language-Team: fr <LL@li.org>\n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.5.4\n" #: ../../guides/bootstrap_connector.rst:6 msgid "Boostrapping a connector" msgstr "Amorcer la création un nouveau connecteur" #: ../../guides/bootstrap_connector.rst:8 msgid "We'll see the steps to bootstrap a new connector." msgstr "" "Nous allons voir les étapes pour amorcer la création d'un nouveau connecteur" #: ../../guides/bootstrap_connector.rst:10 msgid "" "Besides that, you may want to use the existing connectors to have some real " "implementation examples:" msgstr "" "À côté de ça, vous devriez utiliser les connecteurs existants pour avoir des " "exemples réels d'implémentation:" #: ../../guides/bootstrap_connector.rst:16 msgid "" "Some boilerplate is necessary, so this document will guide you through some " "steps. Please also take a look on the :ref:`naming-convention`." msgstr "" "Du code boilerplate est nécessaire, donc ce document va vous guider à " "travers différentes étapes. Consultez également les :ref:`naming-convention`." #: ../../guides/bootstrap_connector.rst:59 msgid "Nothing special but 2 things to note:" msgstr "Il y a 2 points à noter :" #: ../../guides/bootstrap_connector.rst:61 msgid "It depends from ``connector``." msgstr "Il dépend de ``connector``." #: ../../guides/bootstrap_connector.rst:62 msgid "The module category should be ``Connector``." msgstr "La catégorie du module doit être ``Connector``." #: ../../guides/bootstrap_connector.rst:64 msgid "" "Of course, we also need to create the ``__init__.py`` file where we will put " "the imports of our python modules." msgstr "" "Bien sûr, nous devons aussi créer le fichier ``__init__.py`` où nous plaçons " "les imports de nos modules Python." #: ../../guides/bootstrap_connector.rst:70 msgid "Install the module in the connector" msgstr "Installation du module dans le connecteur" #: ../../guides/bootstrap_connector.rst:72 msgid "" "Each new module needs to be plugged in the connector's framework. That's " "just a matter of following a convention and creating ``connector_coffee/" "connector.py``" msgstr "" "Chaque nouveau module doit être branché dans le framework du connecteur. " "C'est juste un question de suivre une convention et créer un fichier " "``connector_coffee/connector.py``" #: ../../guides/bootstrap_connector.rst:82 msgid "" "If you miss this line of code, your ConnectorUnit classes won't be found." msgstr "" "Si vous oubliez cette ligne de code, vos classes ConnectorUnit seront " "introuvables." #: ../../guides/bootstrap_connector.rst:90 msgid "" "To prevent this, we use a little trick: create an abstract model and look in " "the registry if it is loaded." msgstr "" "Pour éviter cela, nous utilisons une astuce: créer un « abstract model » et " "regarder dans le registre s'il est chargé." #: ../../guides/bootstrap_connector.rst:96 msgid "Declare the backends" msgstr "Déclaration des backends" #: ../../guides/bootstrap_connector.rst:98 msgid "Our module is compatible with the coffee machines:" msgstr "Notre module est compatible avec les machines à café :" #: ../../guides/bootstrap_connector.rst:100 msgid "Coffee 1900" msgstr "Coffee 1900" #: ../../guides/bootstrap_connector.rst:101 msgid "Coffee 2900" msgstr "Coffee 2900" #: ../../guides/bootstrap_connector.rst:103 msgid "" "So we'll declare a backend `coffee`, the generic entity, and a backend per " "version." msgstr "" "Donc nous allons déclarer un backend `coffee`, l'entité générique, et un " "backend différent par version." #: ../../guides/bootstrap_connector.rst:106 msgid "Put this in ``connector_coffee/backend.py``::" msgstr "Placez ceci dans ``connector_coffee/backend.py``::" #: ../../guides/bootstrap_connector.rst:118 msgid "Backend Model" msgstr "Modèle du backend" #: ../../guides/bootstrap_connector.rst:120 msgid "We declared the backends, but we need a model to configure them." msgstr "" "Nous avons déclaré les backends, mais nous avons besoin d'un modèle pour les " "configurer." #: ../../guides/bootstrap_connector.rst:122 msgid "" "We create a model ``coffee.backend`` which is an ``_inherit`` of ``connector." "backend``. In ``connector_coffee/coffee_model.py``::" msgstr "" "Nous créons un modèle ``coffee.backend`` qui est un ``_inherit`` de " "``connector.backend``. Dans ``connector_coffee/coffee_model.py``::" #: ../../guides/bootstrap_connector.rst:157 msgid "Notes:" msgstr "Notes :" #: ../../guides/bootstrap_connector.rst:159 msgid "" "The ``_backend_type`` must be the same than the name in the backend in " "`Declare the backends`_." msgstr "" "Le ``_backend_type`` doit être le même que le nom du backend dans " "`Déclaration des backends`_." #: ../../guides/bootstrap_connector.rst:161 msgid "" "the versions should be the same than the ones declared in `Declare the " "backends`_." msgstr "" "les versions doivent être les mêmes que celles déclarées dans `Déclaration " "des backends`_." #: ../../guides/bootstrap_connector.rst:162 msgid "" "We may want to add as many fields as we want to configure our connection or " "configuration regarding the backend in that model." msgstr "" "Nous pouvons ajouter dans ce modèle autant de champs que nous voulons pour " "configurer notre connexion ou configuration en rapport avec le backend." #: ../../guides/bootstrap_connector.rst:168 msgid "Abstract Binding" msgstr "Binding abstrait" #: ../../guides/bootstrap_connector.rst:170 msgid "" "If we have many :ref:`binding`, we may want to create an abstract model for " "them." msgstr "" "Si nous avons de nombreux :ref:`binding`, nous pouvons créer un modèle " "abstrait pour eux." #: ../../guides/bootstrap_connector.rst:173 msgid "It can be as follows (in ``connector_coffee/connector.py``)::" msgstr "Cela peut être comme suit (dans ``connector_coffee/connector.py``)::" #: ../../guides/bootstrap_connector.rst:197 ../../guides/concepts.rst:125 msgid "Environment" msgstr "Environnement" #: ../../guides/bootstrap_connector.rst:199 msgid "" "We'll often need to create a new environment to work with. I propose to " "create a helper method which build it for us (in ``connector_coffee/" "connector.py``::" msgstr "" "Nous aurons souvent besoin de créer un nouvel environnement avec lequel " "travailler. Je propose de créer une méthode auxiliaire qui le construit " "(dans ``connector_coffee/connector.py``::" #: ../../guides/bootstrap_connector.rst:218 msgid "" "Note that the part regarding the language definition is totally optional but " "I left it as an example." msgstr "" "Remarquez que la partie qui concerne la définition du langage est " "complètement optionnelle mais elle est conservée pour l'exemple." #: ../../guides/bootstrap_connector.rst:224 msgid "Checkpoints" msgstr "Points de contrôle" #: ../../guides/bootstrap_connector.rst:226 msgid "" "When new records are imported and need a review, :ref:`checkpoint` are " "created. I propose to create a helper too in ``connector_coffee/connector." "py``::" msgstr "" "Quand de nouveaux enregistrements sont importés et ont besoin de " "vérification, des :ref:`checkpoint` sont créés. Je propose de créer aussi un " "auxiliaire dans ``connector_coffee/connector.py``::" #: ../../guides/bootstrap_connector.rst:239 msgid "ConnectorUnit classes" msgstr "Classes ConnectorUnit" #: ../../guides/bootstrap_connector.rst:241 msgid "" "We'll probably need to create synchronizers, mappers, backend adapters, " "binders and maybe our own types of ConnectorUnit classes." msgstr "" "Nous aurons probablement besoin de créer des synchroniseurs, des mappeurs, " "des adaptateurs de backend, des bindings, et peut-être nos propres types de " "classes ConnectorUnit" #: ../../guides/code_overview.rst:5 msgid "Code Overview" msgstr "Survol du code" #: ../../guides/code_overview.rst:7 msgid "Here is an overview of some of the concepts in the framework." msgstr "Voici un survol de certains concepts du framework." #: ../../guides/code_overview.rst:9 msgid "" "As an example, we'll see the steps for exporting an invoice to Magento. The " "steps won't show all the steps, but a simplified excerpt of a real use case " "exposing the main ideas." msgstr "" "Comme exemple, nous allons voir les étapes pour exporter une facture vers " "Magento. Ce n'est pas un exemple complet mais un aperçu d'un cas réel pour " "exposer les idée principales." #: ../../guides/code_overview.rst:15 msgid "Backends" msgstr "Backends" #: ../../guides/code_overview.rst:17 msgid "" "All start with the declaration of the :py:class:`~connector.backend." "Backend`::" msgstr "" "Tout commence par une déclaration du :py:class:`~connector.backend.Backend`::" #: ../../guides/code_overview.rst:27 msgid "" "As you see, Magento is the parent of Magento 1.7. We can define a hierarchy " "of backends." msgstr "" "Comme vous pouvez voir, Magento est parent de Magento 1.7. Nous pouvons donc " "définir une hiérarchie de backends." #: ../../guides/code_overview.rst:32 ../../guides/concepts.rst:213 msgid "Bindings" msgstr "Bindings (Liaisons)" #: ../../guides/code_overview.rst:55 ../../guides/concepts.rst:88 msgid "Session" msgstr "Session" #: ../../guides/code_overview.rst:57 msgid "" "The framework uses :py:class:`~connector.session.ConnectorSession` objects " "to store the ``cr``, ``uid`` and ``context`` in a :class:`openerp.api." "Environment`. So from a session, we can access to the usual ``self.env`` " "(new API) or ``self.pool`` (old API)." msgstr "" "Le framework utilise des objets :py:class:`~connector.session." "ConnectorSession` pour stocker les ``cr``, ``uid`` et ``context`` dans un :" "class:`openerp.api.Environment`. Donc depuis une session, nous pouvons " "accéder aux habituels ``self.env`` (nouvelle API) ou ``self.pool`` (ancienne " "API)." #: ../../guides/code_overview.rst:64 ../../guides/concepts.rst:20 msgid "Events" msgstr "Événements" #: ../../guides/code_overview.rst:66 msgid "" "We can create :py:class:`~connector.event.Event` on which we'll be able to " "subscribe consumers. The connector already integrates the most generic " "ones: :py:meth:`~connector.event.on_record_create`, :py:meth:`~connector." "event.on_record_write`, :py:meth:`~connector.event.on_record_unlink`" msgstr "" "Nous pouvons créer un :py:class:`~connector.event.Event` sur lequel nous " "pouvons abonner des consommateurs. Le connecteur fournit d'origine les plus " "génériques: :py:meth:`~connector.event.on_record_create`, :py:meth:" "`~connector.event.on_record_write`, :py:meth:`~connector.event." "on_record_unlink`" #: ../../guides/code_overview.rst:73 msgid "" "When we create a ``magento.account.invoice`` record, we want to delay a job " "to export it to Magento, so we subscribe a new consumer on :py:meth:" "`~connector.event.on_record_create`::" msgstr "" "À la création d'un enregistrement ``magento.account.invoice``, nous voulons " "lancer un job déporté pour l'exporter vers Magento, donc nous abonnons un " "nouveau consommateur à l'événement :py:meth:`~connector.event." "on_record_create`::" #: ../../guides/code_overview.rst:84 msgid "" "On the last line, you can notice an ``export_invoice.delay``. We'll discuss " "about that in Jobs_" msgstr "" "Sur la dernière ligne, vous pouvez notez un ``export_invoice.delay``. Nous " "parlerons de ceci dans Jobs_" #: ../../guides/code_overview.rst:89 msgid "Jobs" msgstr "Jobs" #: ../../guides/code_overview.rst:91 msgid "" "A :py:class:`~connector.queue.job.Job` is a task to execute later. In that " "case: create the invoice on Magento." msgstr "" "Un :py:class:`~connector.queue.job.Job` est une tâche à exécuter plus tard. " "Dans le cas présent: créer une facture dans Magento." #: ../../guides/code_overview.rst:94 msgid "" "Any function decorated with :py:meth:`~connector.queue.job.job` can be " "posted in the queue of jobs using a ``delay()`` function and will be run as " "soon as possible::" msgstr "" "N'importe quelle fonction décorée avec :py:meth:`~connector.queue.job.job` " "peut être envoyée dans la queue de jobs en utilisant la fonction ``delay()`` " "et sera lancée aussi tôt que possible ::" #: ../../guides/code_overview.rst:107 msgid "There is a few things happening there:" msgstr "Voici les choses qui se passent à ce moment :" #: ../../guides/code_overview.rst:109 msgid "We find the backend on which we'll export the invoice." msgstr "Nous trouvons le backend vers lequel exporter la facture." #: ../../guides/code_overview.rst:110 msgid "" "We build an :py:class:`~connector.connector.Environment` with the current :" "py:class:`~connector.session.ConnectorSession`, the model we work with and " "the target backend." msgstr "" "Nous construisons un :py:class:`~connector.connector.Environment` avec la :" "py:class:`~connector.session.ConnectorSession` actuelle, le modèle avec " "lequel on travaille et le backend cible." #: ../../guides/code_overview.rst:113 msgid "" "We get the :py:class:`~connector.connector.ConnectorUnit` responsible for " "the work using :py:meth:`~connector.connector.Environment." "get_connector_unit` (according the backend version and the model) and we " "call ``run()`` on it." msgstr "" "Nous récupérons la :py:class:`~connector.connector.ConnectorUnit` " "responsable du travail grâce à :py:meth:`~connector.connector.Environment." "get_connector_unit` (en fonction de la version du backend et du modèle) et " "nous appelons sa méthode ``run()``." #: ../../guides/code_overview.rst:122 ../../guides/concepts.rst:143 msgid "ConnectorUnit" msgstr "ConnectorUnit" #: ../../guides/code_overview.rst:124 msgid "" "These are all classes which are responsible for a specific work. The main " "types of :py:class:`~connector.connector.ConnectorUnit` are (the " "implementation of theses classes belongs to the connectors):" msgstr "" "Voici toutes les classes qui sont responsables d'un travail particulier. Les " "principaux types de :py:class:`~connector.connector.ConnectorUnit` sont " "(l'implémentation de ces classes fait partie des connecteurs):" #: ../../guides/code_overview.rst:128 msgid ":py:class:`~connector.connector.Binder`" msgstr ":py:class:`~connector.connector.Binder`" #: ../../guides/code_overview.rst:133 msgid ":py:class:`~connector.unit.mapper.Mapper`" msgstr ":py:class:`~connector.unit.mapper.Mapper`" #: ../../guides/code_overview.rst:138 msgid ":py:class:`~connector.unit.backend_adapter.BackendAdapter`" msgstr ":py:class:`~connector.unit.backend_adapter.BackendAdapter`" #: ../../guides/code_overview.rst:140 msgid "" "The ``adapters`` implements the discussion with the ``backend's`` APIs. They " "usually adapt their APIs to a common interface (CRUD)." msgstr "" "Les ``adaptateurs`` implémentent le dialogue avec les API du ``backend``. " "Elles adaptent habituellement leurs APIs à une interface commune (CRUD)." #: ../../guides/code_overview.rst:143 msgid ":py:class:`~connector.unit.synchronizer.Synchronizer`" msgstr ":py:class:`~connector.unit.synchronizer.Synchronizer`" #: ../../guides/code_overview.rst:145 msgid "" "The ``synchronizers`` are the main piece of a synchronization. They define " "the flow of a synchronization and use the other :py:class:`~connector." "connector.ConnectorUnit` (the ones above or specific ones)." msgstr "" "Les ``synchroniseurs`` sont la partie principale d'une synchronisation. Ils " "définissent le flux de synchronisation et utilisent les :py:class:" "`~connector.connector.ConnectorUnit` (ceux ci-dessus ou des spécifiques)." #: ../../guides/code_overview.rst:150 msgid "" "For the export of the invoice, we just need an ``adapter`` and a " "``synchronizer`` (the real implementation is more complete)::" msgstr "" "Pour l'export de la facture, nous avons juste besoin d'un ``adaptateur`` et " "d'un ``synchroniseur`` (l'implémentation réelle est plus complexe)::" #: ../../guides/concepts.rst:5 msgid "Connector Concepts" msgstr "Concepts du connecteur" #: ../../guides/concepts.rst:7 msgid "" "The framework to develop connectors is decoupled in small pieces of codes " "interacting together. Each of them can be used or not in an implementation." msgstr "" "Le framework pour développer des connecteur est découplé en composants " "interagissant ensemble. Chacun d'eux peut être utilisé ou non dans une " "implémentation." #: ../../guides/concepts.rst:13 msgid "" "This document describes them from a high-level point of view and gives " "pointers to more concrete 'how-to' or small tutorials." msgstr "" "Ce document les décrit d'un point de vue haut-niveau et donne des pointeurs " "vers des « how-to » plus concrets ou de petits tutoriels." #: ../../guides/concepts.rst:25 msgid "" "The basic idea is to declare an :py:class:`~connector.event.Event`, for " "instance :py:class:`~connector.event.on_record_create`. Then each connector " "has the ability to subscribe one or many function on it. The creation of a " "record should fire :py:class:`~connector.event.on_record_create`, which will " "trigger all the subscribed functions." msgstr "" "L'idée de base est de déclarer un :py:class:`~connector.event.Event`, par " "exemple :py:class:`~connector.event.on_record_create`. Grâce à ceci, chaque " "connecteur a la possibilité d'abonner une ou plusieurs fonctions sur " "l'événement. La création de l'enregistrement doit alors exécuter :py:class:" "`~connector.event.on_record_create`, qui va déclencher toutes les fonctions " "abonnées." #: ../../guides/concepts.rst:32 msgid "" "The same event can be shared across several connectors, easing their " "implementation. For instance, the module connector_ecommerce_ which extends " "the framework with common e-commerce capabilities, adds its own events " "common to e-commerce." msgstr "" "Le même événement peut être partagé entre plusieurs connecteurs, facilitant " "ainsi leur implémentation. Par exemple, le module connector_ecommerce_ qui " "est une extension du framework avec des capacités courantes pour le e-" "commerce, ajoute ses propres événements dédiés au e-commerce." #: ../../guides/concepts.rst:38 ../../guides/concepts.rst:81 #: ../../guides/concepts.rst:115 ../../guides/concepts.rst:136 msgid "A connectors developer is mostly interested by:" msgstr "Un développeur de connecteur est principalement intéressé par :" #: ../../guides/concepts.rst:40 msgid "" "register a new function on an event (see :py:class:`connector.event.Event`)" msgstr "" "abonner une nouvelle fonction à un événement (voir :py:class:`connector." "event.Event`)" #: ../../guides/concepts.rst:41 msgid "" "unregister a function from an event (see :py:meth:`connector.event.Event." "unsubscribe`)" msgstr "" "désabonner une fonction d'un événement (voir :py:meth:`connector.event.Event." "unsubscribe`)" #: ../../guides/concepts.rst:42 msgid "" "replace a consumer function by another one (see :py:class:`connector.event." "Event`)" msgstr "" "remplacer une fonction consommatrice par une autre (voir :py:class:" "`connector.event.Event`)" #: ../../guides/concepts.rst:43 msgid "" "filter the events by model, so a subscribed function will be triggered only " "if the event happens on a registered model" msgstr "" "filtrer les événements par modèle, de sorte qu'une fonction abonnée ne soit " "déclenchée que pour l'événement d'un modèle particulier" #: ../../guides/concepts.rst:50 msgid "Jobs Queue" msgstr "Queue de jobs" #: ../../guides/concepts.rst:52 msgid "" "This section summarises the Job's Queue, which articulates around several " "classes, in broad terms, :py:class:`~connector.queue.job.Job` are executed " "by a :py:class:`~connector.queue.worker.Worker` which stores them in a :py:" "class:`~connector.queue.queue.JobsQueue`." msgstr "" "Cette section résume le principe des queues de jobs, qui s'articule autour " "de quelques classes, dans les grandes lignes, les :py:class:`~connector." "queue.job.Job` sont exécutés par un :py:class:`~connector.queue.worker." "Worker` qui les stocke dans une :py:class:`~connector.queue.queue.JobsQueue`." #: ../../guides/concepts.rst:61 msgid "" "Jobs are stored in the :py:class:`~connector.queue.model.QueueJob` model." msgstr "" "Les jobs son stockés dans le modèle :py:class:`~connector.queue.model." "QueueJob`." #: ../../guides/concepts.rst:64 msgid "" "Workers are stored in the :py:class:`~connector.queue.model.QueueWorker` " "model. A :py:class:`~connector.queue.worker.WorkerWatcher` create or destroy " "new workers when new :py:class:`~openerp.modules.registry.Registry` are " "created or destroyed, and signal the aliveness of the workers." msgstr "" "Les workers sont stockés dans le modèle :py:class:`~connector.queue.model." "QueueWorker`. Un :py:class:`~connector.queue.worker.WorkerWatcher` crée ou " "détruit de nouveaux workers quand de nouveaux :py:class:`~openerp.modules." "registry.Registry` sont créés ou détruits, et signale si les workers sont en " "vie ou non." #: ../../guides/concepts.rst:70 msgid "" "Jobs are assigned to a worker in the database by a cron. The worker loads " "all the jobs assigned to itself in memory in the :py:class:`~connector.queue." "queue.JobsQueue`. When a worker is dead, it is removed from the database, so " "the jobs are freeed from the worker and can be assigned to another one." msgstr "" "Les jobs sont affectés à un worker dans la base de données par une tâche " "récurrente (cron). Le worker charge en mémoire tous les jobs qui lui sont " "affectés, dans la :py:class:`~connector.queue.queue.JobsQueue`. Quand un " "worker s'arrête, il est supprimé de la base de données, de façon que les " "jobs soient libérés et affectés à un autre worker." #: ../../guides/concepts.rst:83 msgid "Delay a job (see the decorator :py:func:`~connector.queue.job.job`)" msgstr "" "Déporter un job (voir le décorateur :py:func:`~connector.queue.job.job`)" #: ../../guides/concepts.rst:97 msgid "Backend" msgstr "Backend" #: ../../guides/concepts.rst:99 msgid "" "A :py:class:`~connector.backend.Backend` is a reference to an external " "system or service." msgstr "" "Un :py:class:`~connector.backend.Backend` est une référence à un système ou " "service externe à OpenERP." #: ../../guides/concepts.rst:102 msgid "" "A backend is defined by a name and a version. For instance ``Magento 1.7``." msgstr "" "Un backend est défini par un nom et une version. Par exemple ``Magento 1.7``." #: ../../guides/concepts.rst:105 msgid "" "A reference can have a parent. The instance ``Magento 1.7`` is the child of " "``Magento``." msgstr "" "Une référence peut avoir un parent. L'instance ``Magento 1.7`` est fille de " "``Magento``." #: ../../guides/concepts.rst:108 msgid "" ":py:class:`~connector.connector.ConnectorUnit` classes are registered on the " "backends. Then, we are able to ask a registered class to a backend. If no " "class is found, it will search in its parent backend." msgstr "" "Les classes :py:class:`~connector.connector.ConnectorUnit` sont inscrites " "dans les backends. Ceci permet de récupérer une classe inscrite dans le " "backend. Si aucune classe n'est trouvée, elle est cherchée dans le backend " "parent." #: ../../guides/concepts.rst:112 msgid "" "It is always accompanied by a concrete subclass of the model :py:class:" "`~connector.backend_model.connector_backend`." msgstr "" "Il est toujours accompagné d'une sous-classe concrète du modèle :py:class:" "`~connector.backend_model.connector_backend`." #: ../../guides/concepts.rst:117 msgid "Declare the backends (see :py:class:`connector.backend.Backend`)" msgstr "Déclarer les backends (voir :py:class:`connector.backend.Backend`)" #: ../../guides/concepts.rst:118 msgid "" "Register a ConnectorUnit on a backend (see :py:class:`connector.backend." "Backend`)" msgstr "" "Inscrire un ConnectorUnit dans un backend (voir :py:class:`connector.backend." "Backend`)" #: ../../guides/concepts.rst:119 msgid "" "Replace a ConnectorUnit on a backend (see :py:class:`connector.backend." "Backend`)" msgstr "" "Remplacer un ConnectorUnit dans un backend (voir :py:class:`connector." "backend.Backend`)" #: ../../guides/concepts.rst:120 msgid "" "Use a different ConnectorUnit for a different version of a backend (see :py:" "class:`connector.backend.Backend`)" msgstr "" "Utiliser un ConnectorUnit différent pour une version différente d'un backend " "(voir :py:class:`connector.backend.Backend`)" #: ../../guides/concepts.rst:127 msgid "" "An :py:class:`~connector.connector.Environment` is the scope from which we " "will do synchronizations." msgstr "" "Un :py:class:`~connector.connector.Environment` est le périmètre à partir " "duquel nous allons faire des synchronisations." #: ../../guides/concepts.rst:130 msgid "" "It contains a :py:class:`~connector.backend.Backend`, a record of a concrete " "subclass of the model :py:class:`~connector.backend_model." "connector_backend`, a :py:class:`~connector.session.Session` and the name of " "the model to work with." msgstr "" "Il contient un :py:class:`~connector.backend.Backend`, un enregistrement " "d'une sous-classe concrète du modèle :py:class:`~connector.backend_model." "connector_backend`, une :py:class:`~connector.session.Session` et le nom du " "modèle avec lequel travailler." #: ../../guides/concepts.rst:138 msgid "" "Get a connectorUnit from an environment (:py:meth:`connector.connector." "ConnectorUnit.unit_for`, :py:meth:`connector.connector.ConnectorUnit." "binder_for`)" msgstr "" "Récupère un ConnectorUnit depuis un environnement (:py:meth:`connector." "connector.ConnectorUnit.unit_for`, :py:meth:`connector.connector." "ConnectorUnit.binder_for`)" #: ../../guides/concepts.rst:145 msgid "" ":py:class:`~connector.connector.ConnectorUnit` are pluggable classes used " "for the synchronizations with the external systems." msgstr "" "Les :py:class:`~connector.connector.ConnectorUnit` sont des classes " "modulables utilisées pour la synchronisation avec des systèmes externes." #: ../../guides/concepts.rst:149 msgid "" "The connector defines some base classes, which you can find below. Note that " "you can define your own ConnectorUnits as well." msgstr "" "Le connecteur définit des classes de bases que vous pouvez trouver ci-" "dessous. Notez que vous pouvez aussi définir vos propres ConnectorUnits." #: ../../guides/concepts.rst:153 msgid "Mappings" msgstr "Mappings" #: ../../guides/concepts.rst:155 msgid "The base class is :py:class:`connector.unit.mapper.Mapper`." msgstr "La classe de base est :py:class:`connector.unit.mapper.Mapper`." #: ../../guides/concepts.rst:160 msgid "It supports:" msgstr "Il prend en charge :" #: ../../guides/concepts.rst:163 msgid "direct mappings" msgstr "les mapping directs" #: ../../guides/concepts.rst:163 msgid "Fields *a* is written in field *b*." msgstr "Le champ *a* est écrit dans le champ *b*." #: ../../guides/concepts.rst:169 msgid "method mappings" msgstr "Les mapping par méthode" #: ../../guides/concepts.rst:166 msgid "" "A method is used to convert one or many fields to one or many fields, with " "transformation. It can be filtered, for example only applied when the record " "is created or when the source fields are modified." msgstr "" "Une méthode est utilisée pour convertir un ou plusieurs champs en un ou " "plusieurs autres champs, avec transformation éventuelle. Il peut être " "filtré, par exemple appliqué uniquement lorsque l'enregistrement est créé ou " "quand les champs source sont modifiés." #: ../../guides/concepts.rst:173 msgid "submapping" msgstr "Sous-mapping" #: ../../guides/concepts.rst:172 msgid "a sub-record (lines of a sale order) is converted using another Mapper" msgstr "" "Un sous-enregistrement (ligne d'un bon de commande) est converti grâce à un " "autre Mapper" #: ../../guides/concepts.rst:176 msgid "Synchronizers" msgstr "Synchroniseurs" #: ../../guides/concepts.rst:178 msgid "The base class is :py:class:`connector.unit.synchronizer.Synchronizer`." msgstr "" "La classe de base est :py:class:`connector.unit.synchronizer.Synchronizer`." #: ../../guides/concepts.rst:180 msgid "" "A synchronizer defines the flow of a synchronization with a backend. It can " "be a record's import or export, a deletion of something, or anything else. " "For instance, it will use the mappings to convert the data between both " "systems, the backend adapters to read or write data on the backend and the " "binders to create the link between them." msgstr "" "Un synchroniseur définit le flux de la synchronisation avec un backend. Il " "peut correspondre à un import ou un export, une suppression de quelque " "chose, ou n'importe quoi d'autre. Par exemple, il peut utiliser les mappeurs " "pour convertir des données entre les deux systèmes, les adaptateurs de " "backend pour lire ou écrire les données sur le backend et les binders pour " "créer le lien entre eux." #: ../../guides/concepts.rst:189 msgid "Backend Adapters" msgstr "Adaptateurs de backend" #: ../../guides/concepts.rst:191 msgid "" "The base class is :py:class:`connector.unit.backend_adapter.BackendAdapter`." msgstr "" "La classe de base est :py:class:`connector.unit.backend_adapter." "BackendAdapter`." #: ../../guides/concepts.rst:194 msgid "" "An external adapter has a common interface to speak with the backend. It " "translates the basic orders (search, read, write) to the protocol used by " "the backend." msgstr "" "Un adaptateur externe possède une interface commune pour parler avec le " "backend. Il traduit les commandes basiques (recherche, lecture, écriture) " "vers le protocole utilisé par le backend." #: ../../guides/concepts.rst:199 msgid "Binders" msgstr "Binders (Liants)" #: ../../guides/concepts.rst:201 msgid "The base class is :py:class:`connector.connector.Binder`." msgstr "La classe de base est :py:class:`connector.connector.Binder`." #: ../../guides/concepts.rst:217 msgid "" "The proposed implementation for the connectors widely use the `_inherits` " "capabilities." msgstr "" "L'implémentation proposée pour les connecteurs utilise largement les " "capacités de l'`_inherits`." #: ../../guides/concepts.rst:220 msgid "Say we import a customer from *Magento*." msgstr "Disons que nous importons un client depuis *Magento*." #: ../../guides/concepts.rst:222 msgid "" "We create a `magento.res.partner` model, which `_inherits` `res.partner`." msgstr "" "Nous créons un modèle `magento.res.partner`, qui `_inherits` `res.partner`." #: ../../guides/concepts.rst:228 msgid "" "It also stores all the necessary metadata related to this customer coming " "from Magento." msgstr "" "Il stocke également toutes les métadonnées nécessaires à ce client venant de " "Magento" #: ../../guides/concepts.rst:235 msgid "Checkpoint" msgstr "Point de contrôle" #: ../../guides/concepts.rst:237 msgid "" "A checkpoint is a record in the model `connector.checkpoint` linked to a " "model and a record, the connectors can create a new one when the user needs " "to review imported documents." msgstr "" "Un point de contrôle est un enregistrement du modèle `connector.checkpoint` " "lié à un modèle et un enregistrement. Les connecteurs peuvent en créer de " "nouveaux quand l'utilisateur a besoin de vérifier des documents importés." #: ../../guides/multiprocessing.rst:6 msgid "Use the connector with multiprocessing" msgstr "Connecteur et multiprocessing" #: ../../guides/multiprocessing.rst:22 msgid "Example::" msgstr "Exemple ::" #: ../../guides/multiprocessing.rst:27 msgid "" "The 'Enqueue Jobs' scheduled action is useless when multiprocessing is used." msgstr "L'action planifiée 'Enqueue Jobs' est inutile en mode multi-processus." #: ../../guides/multiprocessing.rst:34 msgid "" "The Magento Connector's buildout contains builtin commands to launch the " "workers: :ref:`connectormagento:installation-with-buildout`" msgstr "" "Le `buildout` du connecteur Magento contient des commandes intégrées pour " "lancer les workers : :ref:`connectormagento:installation-with-buildout`" #: ../../guides/bootstrap_connector.rst:13 msgid "`Odoo Magento Connector`_" msgstr "`Connecteur Odoo Magento`_" #: ../../guides/bootstrap_connector.rst:14 msgid "`Odoo Prestashop Connector`_" msgstr "`Connecteur Odoo Prestashop`_" #: ../../guides/bootstrap_connector.rst:19 msgid "" "For the sake of the example, we'll imagine we have to synchronize Odoo with " "a coffee machine." msgstr "" "Pour cet exemple nous allons imaginer que nous devons synchroniser Odoo avec " "une machine à café." #: ../../guides/bootstrap_connector.rst:24 msgid "Odoo Manifest" msgstr "" #: ../../guides/bootstrap_connector.rst:26 msgid "" "As we want to synchronize Odoo with a coffee machine, we'll name our " "connector connector_coffee." msgstr "" "Comme nous voulons synchroniser Odoo avec une machine à café, nous allons " "nommer notre connecteur connector_coffee" #: ../../guides/bootstrap_connector.rst:29 msgid "" "First, we need to create the Odoo addons itself, editing the " "``connector_coffee/__openerp__.py`` manifest." msgstr "" "Tout d'abord, nous devons créer le module Odoo lui-même, en modifiant le " "fichier ``connector_coffee/__openerp__.py``." #: ../../guides/bootstrap_connector.rst:85 msgid "" "The reason for this is that Odoo may import the Python modules of " "uninstalled modules, so it automatically registers the events and " "ConnectorUnit classes, even for uninstalled modules." msgstr "" "La raison de ce fonctionnement est qu'Odoo importe les modules Python des " "addons non installés, donc il inscrit automatiquement les événements et les " "classes ConnectorUnit, même pour les modules non installés." #: ../../guides/bootstrap_connector.rst:244 msgid "" "Their implementation can vary a lot. Have a look on the `Odoo Magento " "Connector`_ and `Odoo Prestashop Connector`_ projects." msgstr "" "Leur implémentation peut varier énormément. Jetez un œil aux projets " "`Connecteur Odoo Magento`_ et `Connecteur Odoo Prestashop`_." #: ../../guides/code_overview.rst:34 msgid "" "The ``binding`` is the link between an Odoo record and an external record. " "There is no forced implementation for the ``bindings``. The most " "straightforward techniques are: storing the external ID in the same model " "(``account.invoice``), in a new link model or in a new link model which " "``_inherits`` ``account.invoice``. Here we choose the latter solution::" msgstr "" "Un ``binding`` est ce qui permet de lier un enregistrement Odoo et un " "enregistrement externe. Il n'y a pas d'obligation pour l'implémentation des " "``liaisons``. Les techniques les plus évidentes sont: stocker les ID " "externes dans le même modèle (``account.invoice``), dans un modèle de " "liaison ou dans un modèle de laison qui ``_inherits`` ``account.invoice``. " "Ici nous choisissons la dernière solution ::" #: ../../guides/code_overview.rst:130 msgid "" "The ``binders`` give the external ID or Odoo ID from respectively an Odoo ID " "or an external ID." msgstr "" "Les ``binders`` (liants) donnent l'ID externe ou l'ID Odoo en fonction, " "respectivement, d'un ID Odoo ou d'un ID externe." #: ../../guides/code_overview.rst:135 msgid "" "The ``mappers`` transform a external record into an Odoo record or " "conversely." msgstr "" "Les ``mappeurs`` transforment un enregistrement externe en enregistrement " "Odoo ou l'inverse." #: ../../guides/concepts.rst:11 msgid "An example of implementation is the `Odoo Magento Connector`_." msgstr "Un exemple d'implémentation est le `Connecteur Odoo Magento`_." #: ../../guides/concepts.rst:22 msgid "" "Events are hooks in Odoo on which we can plug some actions. They are based " "on an Observer pattern." msgstr "" "Les événements sont des points d'accroche dans Odoo sur lesquels on peut " "brancher des actions. Ils sont basés sur le motif de conception « " "Observateur »." #: ../../guides/concepts.rst:77 msgid "" "When multiple Odoo processes are running, a worker per process is running, " "but only those which are *CronWorkers* enqueue and execute jobs, to avoid to " "clutter the HTTP processes." msgstr "" "Si plusieurs processus Odoo sont en marche, il y a un worker par processus, " "mais seuls ceux qui sont des *CronWorkers* traitent les jobs dans la queue, " "pour éviter d'encombrer les processus HTTP." #: ../../guides/concepts.rst:90 msgid "" "A :py:class:`~connector.session.ConnectorSession` is a container for the " "usual ``cr``, ``uid``, ``context`` used in Odoo. Now, it contains the Odoo " "``Environment`` as ``self.env``. We use them accross the connectors." msgstr "" "Une :py:class:`~connector.session.ConnectorSession` est un conteneur pour " "les classiques ``cr``, ``uid``, ``context`` utilisés dans Odoo. Maintenant " "il contient l'``Environment`` Odoo dans ``self.env``. Nous les utilisons au " "sein des connecteurs." #: ../../guides/concepts.rst:157 msgid "" "A mapping translates an external record to an Odoo record and conversely." msgstr "" "Un mapping convertit un enregistrement externe en un enregistrement Odoo et " "inversement." #: ../../guides/concepts.rst:204 msgid "" "Binders are classes which know how to find the external ID for an Odoo ID, " "how to find the Odoo ID for an external ID and how to create the binding " "between them." msgstr "" "Les Binders sont des classes qui savent comment trouver l'ID externe depuis " "un ID Odoo, comment trouver l'ID Odoo depuis un ID externe et comment créer " "le lien entre elles." #: ../../guides/concepts.rst:215 msgid "Here a binding means the link of a record between Odoo and a backend." msgstr "" "Ici, un « binding » signifie le lien d'un enregistrement entre Odoo et un " "backend." #: ../../guides/concepts.rst:225 msgid "" "This model, called a *binding* model, knows the ID of the partner in Odoo, " "the ID in Magento and the relation to the backend model." msgstr "" "Ce modèle, appelé modèle de *binding* (liaison), connaît les ID du `partner` " "dans Odoo, l'ID dans Magento et la relation avec le modèle backend." #: ../../guides/multiprocessing.rst:8 msgid "" "When Odoo is launched with 1 process, the jobs worker will run threaded in " "the same process." msgstr "" "Quand Odoo est lancé avec un seul processus, le worker de jobs fonctionne " "dans un thread." #: ../../guides/multiprocessing.rst:11 msgid "" "When Odoo is launched with multiple processes using the option ``--" "workers``, the jobs workers are not independant processes, however, you have " "to launch them separately with the script ``openerp-connector-worker`` " "located in the connector module." msgstr "" "Quand Odoo est lancé en multi-processus grâce à l'option ``--workers``, les " "workers de jobs ne sont pas des processus indépendants, mais vous devez les " "lancer séparément avec le script ``openerp-connector-worker`` situé dans le " "module `connector`." #: ../../guides/multiprocessing.rst:16 msgid "" "It takes the same arguments and configuration file than the Odoo server." msgstr "" "Il prend les mêmes arguments et fichier de configuration que le serveur Odoo." #: ../../guides/multiprocessing.rst:19 msgid "" "The Python path must contain the path to the Odoo server when ``openerp-" "connector-worker`` is launched." msgstr "" "Le `path` de Python doit contenir le chemin vers le serveur Odoo quand " "``openerp-connector-worker`` est lancé." #: ../../guides/multiprocessing.rst:30 msgid "" "The ``openerp-connector-worker`` should not be launched alongside Odoo when " "the latter does not run in multiprocess mode, because the interprocess " "signaling would not be done." msgstr "" "Le script ``openerp-connector-worker`` ne doit pas être lancé avec Odoo " "quand ce dernier ne fonctionne pas en multi-processus, parce que les signaux " "inter-processus ne seraient pas transmis." #~ msgid "`OpenERP Magento Connector`_" #~ msgstr "`Connecteur OpenERP Magento`_" #~ msgid "`OpenERP Prestashop Connector`_" #~ msgstr "`Connecteur OpenERP Prestashop`_" #~ msgid "" #~ "For the sake of the example, we'll imagine we have to synchronize OpenERP " #~ "with a coffee machine." #~ msgstr "" #~ "Pour cet exemple nous allons imaginer que nous devons synchroniser " #~ "OpenERP avec une machine à café." #~ msgid "OpenERP Manifest" #~ msgstr "Manifest OpenERP" #~ msgid "" #~ "As we want to synchronize OpenERP with a coffee machine, we'll name our " #~ "connector connector_coffee." #~ msgstr "" #~ "Comme nous voulons synchroniser OpenERP avec une machine à café, nous " #~ "allons nommer notre connecteur connector_coffee" #~ msgid "" #~ "First, we need to create the OpenERP addons itself, editing the " #~ "``connector_coffee/__openerp__.py`` manifest." #~ msgstr "" #~ "Tout d'abord, nous devons créer le module OpenERP lui-même, en modifiant " #~ "le fichier ``connector_coffee/__openerp__.py``." #~ msgid "" #~ "The reason for this is that OpenERP may import the Python modules of " #~ "uninstalled modules, so it automatically registers the events and " #~ "ConnectorUnit classes, even for uninstalled modules." #~ msgstr "" #~ "La raison de ce fonctionnement est qu'OpenERP importe les modules Python " #~ "des addons non installés, donc il inscrit automatiquement les événements " #~ "et les classes ConnectorUnit, même pour les modules non installés." #~ msgid "" #~ "Their implementation can vary a lot. Have a look on the `OpenERP Magento " #~ "Connector`_ and `OpenERP Prestashop Connector`_ projects." #~ msgstr "" #~ "Leur implémentation peut varier énormément. Jetez un œil aux projets " #~ "`Connecteur OpenERP Magento`_ et `Connecteur OpenERP Prestashop`_." #~ msgid "" #~ "The ``binding`` is the link between an OpenERP record and an external " #~ "record. There is no forced implementation for the ``bindings``. The most " #~ "straightforward techniques are: storing the external ID in the same model " #~ "(``account.invoice``), in a new link model or in a new link model which " #~ "``_inherits`` ``account.invoice``. Here we choose the latter solution::" #~ msgstr "" #~ "Un ``binding`` est ce qui permet de lier un enregistrement OpenERP et un " #~ "enregistrement externe. Il n'y a pas d'obligation pour l'implémentation " #~ "des ``liaisons``. Les techniques les plus évidentes sont: stocker les ID " #~ "externes dans le même modèle (``account.invoice``), dans un modèle de " #~ "liaison ou dans un modèle de laison qui ``_inherits`` ``account." #~ "invoice``. Ici nous choisissons la dernière solution ::" #~ msgid "" #~ "The ``binders`` give the external ID or OpenERP ID from respectively an " #~ "OpenERP ID or an external ID." #~ msgstr "" #~ "Les ``binders`` (liants) donnent l'ID externe ou l'ID OpenERP en " #~ "fonction, respectivement, d'un ID OpenERP ou d'un ID externe." #~ msgid "" #~ "The ``mappers`` transform a external record into an OpenERP record or " #~ "conversely." #~ msgstr "" #~ "Les ``mappeurs`` transforment un enregistrement externe en enregistrement " #~ "OpenERP ou l'inverse." #~ msgid "An example of implementation is the `OpenERP Magento Connector`_." #~ msgstr "Un exemple d'implémentation est le `Connecteur OpenERP Magento`_." #~ msgid "" #~ "When multiple OpenERP processes are running, a worker per process is " #~ "running, but only those which are *CronWorkers* enqueue and execute jobs, " #~ "to avoid to clutter the HTTP processes." #~ msgstr "" #~ "Si plusieurs processus OpenERP sont en marche, il y a un worker par " #~ "processus, mais seuls ceux qui sont des *CronWorkers* traitent les jobs " #~ "dans la queue, pour éviter d'encombrer les processus HTTP." #~ msgid "" #~ "A :py:class:`~connector.session.ConnectorSession` is a container for the " #~ "usual ``cr``, ``uid``, ``context`` used in OpenERP. Now, it contains the " #~ "Odoo ``Environment`` as ``self.env``. We use them accross the connectors." #~ msgstr "" #~ "Une :py:class:`~connector.session.ConnectorSession` est un conteneur pour " #~ "les classiques ``cr``, ``uid``, ``context`` utilisés dans OpenERP. " #~ "Maintenant il contient l'``Environment`` Odoo dans ``self.env``. Nous les " #~ "utilisons au sein des connecteurs." #~ msgid "" #~ "A mapping translates an external record to an OpenERP record and " #~ "conversely." #~ msgstr "" #~ "Un mapping convertit un enregistrement externe en un enregistrement " #~ "OpenERP et inversement." #~ msgid "" #~ "Binders are classes which know how to find the external ID for an OpenERP " #~ "ID, how to find the OpenERP ID for an external ID and how to create the " #~ "binding between them." #~ msgstr "" #~ "Les Binders sont des classes qui savent comment trouver l'ID externe " #~ "depuis un ID OpenERP, comment trouver l'ID OpenERP depuis un ID externe " #~ "et comment créer le lien entre elles." #~ msgid "" #~ "Here a binding means the link of a record between OpenERP and a backend." #~ msgstr "" #~ "Ici, un « binding » signifie le lien d'un enregistrement entre OpenERP et " #~ "un backend." #~ msgid "" #~ "This model, called a *binding* model, knows the ID of the partner in " #~ "OpenERP, the ID in Magento and the relation to the backend model." #~ msgstr "" #~ "Ce modèle, appelé modèle de *binding* (liaison), connaît les ID du " #~ "`partner` dans OpenERP, l'ID dans Magento et la relation avec le modèle " #~ "backend." #~ msgid "" #~ "When OpenERP is launched with 1 process, the jobs worker will run " #~ "threaded in the same process." #~ msgstr "" #~ "Quand OpenERP est lancé avec un seul processus, le worker de jobs " #~ "fonctionne dans un thread." #~ msgid "" #~ "When OpenERP is launched with multiple processes using the option ``--" #~ "workers``, the jobs workers are not independant processes, however, you " #~ "have to launch them separately with the script ``openerp-connector-" #~ "worker`` located in the connector module." #~ msgstr "" #~ "Quand OpenERP est lancé en multi-processus grâce à l'option ``--" #~ "workers``, les workers de jobs ne sont pas des processus indépendants, " #~ "mais vous devez les lancer séparément avec le script ``openerp-connector-" #~ "worker`` situé dans le module `connector`." #~ msgid "" #~ "It takes the same arguments and configuration file than the OpenERP " #~ "server." #~ msgstr "" #~ "Il prend les mêmes arguments et fichier de configuration que le serveur " #~ "OpenERP." #~ msgid "" #~ "The Python path must contain the path to the OpenERP server when " #~ "``openerp-connector-worker`` is launched." #~ msgstr "" #~ "Le `path` de Python doit contenir le chemin vers le serveur OpenERP quand " #~ "``openerp-connector-worker`` est lancé." #~ msgid "" #~ "The ``openerp-connector-worker`` should not be launched alongside OpenERP " #~ "when the latter does not run in multiprocess mode, because the " #~ "interprocess signaling would not be done." #~ msgstr "" #~ "Le script ``openerp-connector-worker`` ne doit pas être lancé avec " #~ "OpenERP quand ce dernier ne fonctionne pas en multi-processus, parce que " #~ "les signaux inter-processus ne seraient pas transmis." #~ msgid "" #~ "Events are hooks in OpenERP on which we can plug some actions. They are " #~ "based on an Observer pattern." #~ msgstr "" #~ "Les événements sont des points d'accroche dans OpenERP sur lesquels on " #~ "peut brancher des actions. Ils sont basés sur le motif de conception « " #~ "Observateur »."