From e8ac77ecbc3ad9af50065b87b288b132fcd39eca Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:15:19 +0100 Subject: [PATCH 001/260] New translations backup.md (French) --- website/translated_docs/fr/Backup/backup.md | 90 ++++++++++----------- 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/website/translated_docs/fr/Backup/backup.md b/website/translated_docs/fr/Backup/backup.md index 3b375436408ec3..7f871aa4629a54 100644 --- a/website/translated_docs/fr/Backup/backup.md +++ b/website/translated_docs/fr/Backup/backup.md @@ -4,95 +4,95 @@ title: Sauvegarde --- -## Lancer une sauvegarde +## Starting a backup -Une sauvegarde peut être déclenchée de trois manières : +A backup can be started in three ways: -- Manuellement, via la commande **Sauvegarde...** du menu **Fichier** de 4D ou le bouton **Sauvegarde** du [Centre de sécurité et de maintenance (CSM)](MSC/backup.md). -- Automatiquement, via le programmateur paramétrable dans les Propriétés, -- Par programmation, à l’aide de la commande `BACKUP`. +- Manually, using the **Backup...** item of the 4D **File** menu or the **Backup** button of the [Maintenance and Security Center](MSC/backup.md). +- Automatically, using the scheduler that can be set in the Settings, +- Programmatically, using the `BACKUP` command. -> 4D Server : Il est possible de déclencher “manuellement” une sauvegarde depuis un poste distant, via une méthode appelant la commande `BACKUP`. Dans tous les cas, la commande sera exécutée sur le serveur. +> 4D Server: A backup can be started manually from a remote machine using a method that calls the `BACKUP` command. The command will be executed, in all cases, on the server. -### Sauvegarde manuelle +### Manual backup -1. Choisissez la commande **Sauvegarde...** dans le menu **Fichier** de 4D. - La fenêtre de sauvegarde s’affiche : ![](assets/en/Backup/backup01.png) Vous pouvez visualiser l'emplacement du dossier de sauvegarde à l'aide du pop up menu associé à la zone "Destination de la sauvegarde". Cet emplacement est défini dans la Page **Sauvegarde/Configuration** des Propriétés de la base. +1. Select the **Backup...** command in the 4D **File** menu. + The backup window appears: ![](assets/en/Backup/backup01.png) You can see the location of the backup folder using the pop-up menu next to the "Backup destination" area. This location is set on the **Backup/Configuration** page of the Database Settings. -- Vous pouvez également sélectionner [Centre de sécurité et de maintenance](MSC/overview.md) de 4D et afficher la [Page Sauvegarde](MSC/backup.md). +- You can also open the [Maintenance and Security Center](MSC/overview.md) of 4D and display the [Backup page](MSC/backup.md). -Le bouton **Propriétés de la base...** provoque l’affichage de la boîte de dialogue des Propriétés de structure. +The **Database properties...** button causes the Backup/Configuration page of the Structure Settings to be displayed. - 2. Cliquez sur le bouton **Sauvegarde** pour déclencher la sauvegarde avec les paramètres courants. + 2. Click **Backup** to start the backup using current parameters. -### Sauvegarde automatique périodique +### Scheduled automatic backup -Les sauvegardes périodiques sont déclenchées automatiquement. Elles sont configurées dans la Page **Sauvegarde/Périodicité** des **Propriétés**. +Scheduled backups are started automatically. They are configured in the **Backup/Scheduler** page of the **Settings**. -Les sauvegardes s'effectuent automatiquement au moment défini, sans intervention de l’utilisateur. Pour plus d’informations sur le fonctionnement de cette boîte de dialogue, reportez-vous à la section [Définir des sauvegardes périodiques](settings.md#scheduler). +Backups are automatically performed at the times defined on this page without any type of user intervention. For more information on using this dialog box, refer to [Scheduler in backup settings](settings.md#scheduler). -### Commande BACKUP +### BACKUP command -Lorsque la commande `BACKUP` est exécutée depuis une méthode, la sauvegarde est alors déclenchée avec les paramètres courants définis dans les propriétés. Vous pouvez utiliser la Méthode base `On Backup Startup` et `On Backup Shutdown` afin de contrôler le déroulement de la sauvegarde (cf. le manuel *Langage de 4D*). +When the `BACKUP` 4D language command is executed from any method, the backup starts using the current parameters as defined in the Settings. You can use the `On Backup Startup` and `On Backup Shutdown` database methods for handling the backup process (see the *4D Language Reference* manual). -## Déroulement de la sauvegarde +## Managing the backup processing -Une fois qu’une sauvegarde a été déclenchée, 4D affiche une boîte de dialogue comportant un thermomètre indiquant la progression de l’opération : +Once a backup is started, 4D displays a dialog box with a thermometer indicating the progress of the backup: ![](assets/en/Backup/backupProgress.png) -Le thermomètre est également affiché en bas de la page [“Sauvegarde” du CSM](MSC/backup.md) si vous avez utilisé cette boîte de dialogue. +This thermometer is also displayed on the [Backup page of the MSC](MSC/backup.md) if you have used this dialog box. -Le bouton **Arrêter** permet à l’utilisateur d’interrompre la sauvegarde à tout instant (cf. paragraphe [En cas de problème au cours de la sauvegarde](backup.md#handling-backup-issues)). +The **Stop** button lets the user interrupt the backup at any time (refer to [Handling backup issues](backup.md#handling-backup-issues) below). -Le compte-rendu de la dernière sauvegarde (succès ou échec) est stocké dans la zone "Informations sur la dernière sauvegarde" dans la [Page Sauvegarde du CSM](MSC/backup.md) ou dans la **Page de maintenance** de 4D Server. Il est également enregistré dans le **Backup journal.txt**. +The status of the last backup (successful or failed) is stored in the Last Backup Information area of the [Backup page in the MSC](MSC/backup.md) or in the **Maintenance page** of 4D Server. It is also recorded in the database **Backup journal.txt**. -### Accès à l'application durant la sauvegarde +### Accessing the application during backup -Pendant la sauvegarde, les accès à l'application sont restreints par 4D en fonction du contexte. 4D verrouille les process liés aux types de fichiers inclus dans la sauvegarde : si seul le fichier de structure est sauvegardé, l’accès à la structure est impossible mais l’accès aux données est autorisé. +During a backup, access to the application is restricted by 4D according to the context. 4D locks any processes related to the types of files included in the backup: if only the project files are being backed up, access to the structure is not possible but access to the data will be allowed. -A l’inverse, si seul le fichier de données est sauvegardé, l’accès à la structure reste autorisé. Dans ce cas, les possibilités d’accès à l'application sont les suivantes : +Conversely, if only the data file is being backed up, access to the structure is still allowed. In this case, the application access possibilities are as follows: -- Avec 4D version monoposte, l'application est verrouillée en lecture et en écriture, tous les process sont gelés. Toute action est alors impossible. -- Avec 4D Server, l'application est verrouillée uniquement en écriture, les postes clients peuvent consulter les données. Si un poste client envoie une requête d’ajout, de suppression ou de modification au serveur, il obtient une fenêtre l’invitant à attendre la fin de la sauvegarde. Une fois l'application sauvegardée, la fenêtre disparaît d’elle-même et l’action est exécutée. Pour annuler la requête en cours et ne pas avoir à attendre la fin de la sauvegarde, il suffit de cliquer sur le bouton **Annuler l’opération**. Cependant, si l’action en attente provient d’une méthode lancée avant la sauvegarde, il est déconseillé de l’annuler car seules les opérations restant à effectuer seront annulées. Or, une méthode “à moitié” exécutée peut conduire à des incohérences logiques dans les données. Lorsque l’action en attente provient d’une méthode et que l’utilisateur clique sur le bouton **Annuler l’opération**, 4D Server renvoie l’erreur -9976 (Cette commande ne peut être exécutée car la base est en cours de sauvegarde). +- With the 4D single-user version, the application is locked for both read and write; all processes are frozen. No actions can be performed. +- With 4D Server, the application is only write locked; client machines can view data. If a client machine sends an add, remove or change request to the server, a window appears asking the user to wait until the end of the backup. Once the application is saved, the window disappears and the action is performed. To cancel the request in process and not wait for the end of the backup, simply click the **Cancel operation** button. However, if the action waiting to be executed comes from a method launched prior to the backup, you should not cancel it because only operations remaining to be performed are cancelled. Also, a partially executed method can cause logical inconsistencies in the data. > When the action waiting to be executed comes from a method and the user clicks the **Cancel operation** button, 4D Server returns error -9976 (This command cannot be executed because the database backup is in progress). -### En cas de problème au cours de la sauvegarde +### Handling backup issues -Il est possible qu'une sauvegarde ne s’effectue pas correctement. Les causes de l’échec peuvent être diverses : interruption par l’utilisateur, fichier joint introuvable, disque de destination défaillant, transaction non terminée, etc. 4D traite l'incident selon la cause de l'échec. +It may happen that a backup is not executed properly. There may be several causes of a failed backup: user interruption, attached file not found, destination disk problems, incomplete transaction, etc. 4D processes the incident according to the cause. -Dans tous les cas, le statut de la dernière sauvegarde (succès ou échec) est stocké dans la zone "Informations sur la dernière sauvegarde" dans la [Page Sauvegarde du CSM](MSC/backup.md) ou dans la **Page de maintenance** de 4D Server, ainsi que dans le **Backup journal.txt**. +In all cases, keep in mind that the status of the last backup (successful or failed) is stored in the Last Backup Information area of the [Backup page in the MSC](MSC/backup.md) or in the **Maintenance page** of 4D Server, as well as in the **Backup journal.txt**. -- **Interruption par l’utilisateur** : le bouton **Arrêter** de la boîte de dialogue de progression de la sauvegarde permet aux utilisateurs d’interrompre la sauvegarde à tout instant. Dans ce cas, la copie des éléments est stoppée et l'erreur 1406 est générée. Vous pouvez intercepter cette erreur dans la Méthode base `On Backup Shutdown`. -- **Fichier joint introuvable** : lorsqu’un fichier joint est introuvable, 4D effectue une sauvegarde partielle (sauvegarde des fichiers de l'application et des fichiers joints accessibles) et retourne une erreur. -- **Sauvegarde impossible** (disque plein ou protégé en écriture, disque manquant, panne du disque, transaction non terminée, projet non lancé au moment d’une sauvegarde automatique périodique, etc.) : S’il s’agit du premier échec, 4D effectuera ultérieurement une seconde tentative. Le délai d’attente entre les deux tentatives est défini dans la Page **Sauvegarde/Sauvegarde& et Restitution** des Propriétés. Si la seconde tentative échoue également, une boîte de dialogue d’alerte système est affichée et une erreur est générée. Vous pouvez intercepter cette erreur dans la Méthode base `On Backup Shutdown`. +- **User interruption**: The **Stop** button in the progress dialog box allows users to interrupt the backup at any time. In this case, the copying of elements is stopped and the error 1406 is generated. You can intercept this error in the `On Backup Shutdown` database method. +- **Attached file not found**: When an attached file cannot be found, 4D performs a partial backup (backup of application files and accessible attached files) and returns an error. +- **Backup impossible** (disk is full or write-protected, missing disk, disk failure, incomplete transaction, application not launched at time of scheduled automatic backup, etc.): If this is a first-time error, 4D will then make a second attempt to perform the backup. The wait between the two attempts is defined on the **Backup/Backup & Restore** page of the Settings. If the second attempt fails, a system alert dialog box is displayed and an error is generated. You can intercept this error in the `On Backup Shutdown` database method. -## Journal de sauvegarde (Backup Journal) +## Backup Journal -Pour faciliter le suivi et la vérification des sauvegardes, le module de sauvegarde résume chaque opération effectuée dans un fichier spécial, similaire à un journal d'activité. Comme un manuel intégré, toutes les opérations de la base de données (sauvegardes, restaurations, intégrations de fichiers d'historique) sont consignées dans ce fichier, qu’elles aient été planifiées ou exécutées manuellement. La date et l'heure auxquelles ces opérations ont eu lieu sont également notées dans le journal. +To make following up and verifying backups easier, the backup module writes a summary of each operation performed in a special file, which is similar to an activity journal. Like an on-board manual, all database operations (backups, restores, log file integrations) are logged in this file whether they were scheduled or performed manually. The date and time that these operations occurred are also noted in the journal. -Le journal de sauvegarde s'appelle "Backup Journal[001].txt" et se trouve dans le dossier "Logs" du projet. Le journal de sauvegarde peut être ouvert avec n'importe quel éditeur de texte. +The backup journal is named "Backup Journal[001].txt" and is placed in the "Logs" folder of the project. The backup journal can be opened with any text editor. -#### Gestion de la taille du journal de sauvegarde +#### Management of backup journal size -Dans certaines stratégies de sauvegarde (par exemple, dans le cas où de nombreuses pièces jointes sont sauvegardées), le journal de sauvegarde peut rapidement atteindre une taille importante. Deux mécanismes peuvent être utilisés pour gérer cette taille : +In certain backup strategies (for example, in the case where numerous attached files are being backed up), the backup journal can quickly grow to a large size. Two mechanisms can be used to control this size: -- **Sauvegarde automatique** : Avant chaque sauvegarde, l'application examine la taille du fichier backup journal courant. Si elle est supérieure à 10 Mo, le fichier courant est archivé et un nouveau fichier est créé avec le numéro [xxx] incrémenté, par exemple "Backup Journal[002] .txt”. Une fois le numéro de fichier 999 atteint, la numérotation reprend à 1 et les fichiers existants seront remplacés. -- **Possibilité de réduire la quantité d'informations enregistrées** : Pour ce faire, il suffit de modifier la valeur de la clé `VerboseMode` dans le fichier *Backup.4DSettings* du projet. Par défaut, cette clé est définie sur True. Si vous définissez la valeur de cette clé sur False, seules les informations principales sont stockées dans le journal de sauvegarde : la date et l'heure du début de l'opération et les éventuelles erreurs générées. Les clés XML concernant la configuration de la sauvegarde sont décrites dans le manuel *Sauvegarde des clés XML 4D*. +- **Automatic backup**: Before each backup, the application examines the size of the current backup journal file. If it is greater than 10 MB, the current file is archived and a new file is created with the [xxx] number incremented, for example "Backup Journal[002].txt”. Once file number 999 is reached, the numbering begins at 1 again and the existing files will be replaced. +- **Possibility of reducing the amount of information recorded**: To do this, simply modify the value of the `VerboseMode` key in the *Backup.4DSettings* file of the project. By default, this key is set to True. If you change the value of this key to False, only the main information will be stored in the backup journal: date and time of start of operation and any errors encountered. The XML keys concerning backup configuration are described in the *4D XML Keys Backup* manual. ## backupHistory.json -Toutes les informations concernant les dernières opérations de sauvegarde et de restitution sont stockées dans le fichier **backupHistory.json** de l'application. Ce dernier enregistre le chemin de chaque fichier sauvegardé (y compris les pièces jointes) ainsi que le numéro, la date, l'heure, la durée et le statut de chaque opération. Afin de limiter la taille du fichier, le nombre d'opérations enregistrées et le nombre de sauvegardes disponibles ("Keep only the last X backup files") définies dans les propriétés de sauvegarde est identique. +All information regarding the latest backup and restore operations are stored in the application's **backupHistory.json** file. It logs the path of each saved file (including attachments) as well as number, date, time, duration, and status of each operation. To limit the size of the file, the number of logged operations is the same as the number of available backups ("Keep only the last X backup files") defined in the backup settings. -Le fichier **backupHistory.json** se situe dans le dossier de destination de sauvegarde courant. Vous pouvez obtenir le chemin de ce fichier à l'aide de la déclaration suivante : +The **backupHistory.json** file is created in the current backup destination folder. You can get the actual path for this file using the following statement: ```4d $backupHistory:=Get 4D file(Backup history file) ``` -> **ATTENTION** -> La suppression ou le déplacement du fichier **backupHistory.json** entraînera la réinitialisation du prochain numéro de sauvegarde. -> Le fichier **backupHistory.json** est formaté afin d'être utilisé par l'application 4D. Si vous recherchez un état lisible sur les opérations de sauvegarde, le journal de sauvegarde sera plus précis. +> **WARNING** +> Deleting or moving the **backupHistory.json** file will cause the next backup number to be reset. +> The **backupHistory.json** file is formatted to be used by the 4D application. If you are looking for a human-readable report on backup operations, you might find the Backup journal more accurate. From 34dcecf58c13388e4ac9bde80738a238f2f085f5 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:15:21 +0100 Subject: [PATCH 002/260] New translations $filter.md (French) --- website/translated_docs/fr/REST/$filter.md | 74 +++++++++++----------- 1 file changed, 37 insertions(+), 37 deletions(-) diff --git a/website/translated_docs/fr/REST/$filter.md b/website/translated_docs/fr/REST/$filter.md index 200d5d575ac293..e0b8421cabd9a4 100644 --- a/website/translated_docs/fr/REST/$filter.md +++ b/website/translated_docs/fr/REST/$filter.md @@ -5,53 +5,53 @@ title: '$filter' -Permet de rechercher les données d'une dataclass ou d'une méthode (par exemple, `$filter="firstName!='' AND salary>30000"`) +Allows to query the data in a dataclass or method *(e.g.*, `$filter="firstName!='' AND salary>30000"`) ## Description -Ce paramètre vous permet de définir le filtre de votre dataclass ou de votre méthode. +This parameter allows you to define the filter for your dataclass or method. -### Utiliser un filtre simple +### Using a simple filter -Un filtre est composé des éléments suivants : +A filter is composed of the following elements: -**{attribut} {comparateur} {valeur}** +**{attribute} {comparator} {value}** -Par exemple : `$filter="firstName=john"` où `firstName` est l'**attribut**, `=` est le **comparateur** et `john` est la **valeur**. +For example: `$filter="firstName=john"` where `firstName` is the **attribute**, `=` is the **comparator** and `john` is the **value**. -### Utiliser un filtre complexe +### Using a complex filter -Un filtre plus complexe est composé des éléments suivants, qui joint deux requêtes : +A more compex filter is composed of the following elements, which joins two queries: -**{attribut} {comparateur} {valeur} {AND/OR/EXCEPT} {attribut} {comparateur} {valeur}** +**{attribute} {comparator} {value} {AND/OR/EXCEPT} {attribute} {comparator} {value}** -Par exemple : `$filter="firstName=john AND salary>20000"` où `firstName` et `salary` sont les attributs de la classe de datastore "Employee". +For example: `$filter="firstName=john AND salary>20000"` where `firstName` and `salary` are attributes in the Employee datastore class. -### Utiliser la propriété params +### Using the params property -Vous pouvez également utiliser la propriété params de 4D. +You can also use 4D's params property. -**{attribut} {comparateur} {placeholder} {AND/OR/EXCEPT} {attribut} {comparateur} {placeholder}&$params='["{value1}","{value2}"]"'** +**{attribute} {comparator} {placeholder} {AND/OR/EXCEPT} {attribute} {comparator} {placeholder}&$params='["{value1}","{value2}"]"'** For example: `$filter="firstName=:1 AND salary>:2"&$params='["john",20000]'` where firstName and salary are attributes in the Employee datastore class. -Pour plus d'informations sur la façon de rechercher des données dans 4D, reportez-vous à la documentation de [dataClass.query()](https://doc.4d.com/4Dv18/4D/18/dataClassquery.305-4505887.en.html). -> Lorsque vous insérez des guillemets (') ou des guillemets doubles ("), vous devez les échapper en utilisant leur code de caractère : +For more information regarding how to query data in 4D, refer to the [dataClass.query()](https://doc.4d.com/4Dv18/4D/18/dataClassquery.305-4505887.en.html) documentation. +> When inserting quotes (') or double quotes ("), you must escape them using using their character code: > ->
  • Guillemets ('): \u0027
  • Guillemets doubles ("): \u0022 +>
  • Quotes ('): \u0027
  • Double quotes ("): \u0022 > -> Par exemple, vous pouvez écrire ce qui suit lors du passage d'une valeur avec un guillemet lors de l'utilisation de la propriété *params* : +> For example, you can write the following when passing a value with a quote when using the *params* property: > `http://127.0.0.1:8081/rest/Person/?$filter="lastName=:1"&$params='["O\u0027Reilly"]'` > -> Si vous passez la valeur directement, vous pouvez écrire ce qui suit : `http://127.0.0.1:8081/rest/Person/?$filter="lastName=O'Reilly"` +> If you pass the value directly, you can write the following: `http://127.0.0.1:8081/rest/Person/?$filter="lastName=O'Reilly"` -## Attribut +## Attribute -Si l'attribut se trouve dans la même dataclass, vous pouvez simplement le passer directement (par exemple, `firstName`). Cependant, si vous souhaitez lancer une requête dans une autre dataclass, vous devez inclure le nom de l'attribut relationnel et le nom d'attribut, c'est-à-dire le chemin d'accès (par exemple, employeur.nom). Le nom d'attribut est sensible à la casse (`firstName` n'est pas égal à `FirstName`). +If the attribute is in the same dataclass, you can just pass it directly (*e.g.*, `firstName`). However, if you want to query another dataclass, you must include the relation attribute name plus the attribute name, i.e. the path (*e.g.*, employer.name). The attribute name is case-sensitive (`firstName` is not equal to `FirstName`). -Vous pouvez également rechercher des attributs de type Objet en utilisant la notation par points. Par exemple, si vous avez un attribut dont le nom est "objAttribute" avec la structure suivante : +You can also query attributes of type Object by using dot-notation. For example, if you have an attribute whose name is "objAttribute" with the following structure: ``` { @@ -61,40 +61,40 @@ Vous pouvez également rechercher des attributs de type Objet en utilisant la no } ``` -Vous pouvez rechercher dans l'objet en écrivant ce qui suit : +You can search in the object by writing the following: `GET /rest/Person/?filter="objAttribute.prop2 == 9181"` -## Comparateur +## Comparator -Le comparateur doit être l'une des valeurs suivantes : +The comparator must be one of the following values: -| Comparateur | Description | -| ----------- | ------------------- | -| = | est égal à | -| != | différent de | -| > | supérieur à | -| >= | supérieur ou égal à | -| < | inférieur à | -| <= | inférieur ou égal à | -| begin | commence avec | +| Comparator | Description | +| ---------- | ------------------------ | +| = | equals to | +| != | not equal to | +| > | greater than | +| >= | greater than or equal to | +| < | less than | +| <= | less than or equal to | +| begin | begins with | -## Exemples +## Examples -Dans l'exemple suivant, nous recherchons tous les employés dont le nom de famille commence par un "j" : +In the following example, we look for all employees whose last name begins with a "j": ``` GET /rest/Employee?$filter="lastName begin j" ``` -Dans cet exemple, nous recherchons dans la classe de datastore "Employee" tous les employés d'une entreprise autre que Acmedont et dont le salaire est supérieur à 20 000 : +In this example, we search the Employee datastore class for all employees whose salary is greater than 20,000 and who do not work for a company named Acme: ``` GET /rest/Employee?$filter="salary>20000 AND employer.name!=acme"&$orderby="lastName,firstName" ``` -Dans cet exemple, nous recherchons dans la classe de datastore "Person" toutes les personnes dont la propriété numérique, de l'attribut anotherobj de type Objet, est supérieure à 50 : +In this example, we search the Person datastore class for all the people whose number property in the anotherobj attribute of type Object is greater than 50: ``` GET /rest/Person/?filter="anotherobj.mynum > 50" From d809e6e122c44ad14bf298aed39ac7a7b8d22977 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:15:24 +0100 Subject: [PATCH 003/260] New translations building.md (French) --- website/translated_docs/fr/Admin/building.md | 182 +++++++++---------- 1 file changed, 87 insertions(+), 95 deletions(-) diff --git a/website/translated_docs/fr/Admin/building.md b/website/translated_docs/fr/Admin/building.md index 1ed970ffcc3c7b..d3cc10b53c76bf 100644 --- a/website/translated_docs/fr/Admin/building.md +++ b/website/translated_docs/fr/Admin/building.md @@ -3,111 +3,111 @@ id: building title: Générer un package projet --- -4D Developer inclut un générateur d’application final pour créer un package de projet (version finale). Ce générateur simplifie le processus de finalisation et de déploiement des applications compilées 4D. Il gère automatiquement les fonctionnalités spécifiques de différents systèmes d'exploitation et facilite le déploiement d'applications client-serveur. +4D Developer includes a final application builder to create a project package (final build). This builder simplifies the finalization and deployment process for 4D compiled applications. It automatically handles the specific features of different operating systems and facilitates the deployment of client-server applications. -Le générateur d'applications vous permet de : +The application builder allows you to: -* Générer une structure compilée, sans code interprété, -* Générer une application autonome exécutable, c'est-à-dire fusionnée avec 4D Volume Desktop, le moteur de base de données 4D, -* Générer différentes applications à partir de la même structure compilée via un projet XML, -* Générer des applications client-serveur homogènes, -* Générer des applications client-serveur avec mise à jour automatique des composants client et serveur. -* Enregistrer vos paramètres de génération pour une utilisation ultérieure (bouton *Enregistrer les paramètres*). +* Build a compiled structure, without interpreted code, +* Build a stand-alone, double-clickable application, *i.e.*, merged with 4D Volume Desktop, the 4D database engine, +* Build different applications from the same compiled structure via an XML project, +* Build homogeneous client-server applications, +* Build client-server applications with automatic updating of client and server parts. +* Save your build settings for future use (*Save settings* button). -## Aperçu du générateur d'application +## Build application overview -Générer un package de projet peut être réalisée à l'aide de : +Building a project package can be carried out using: -- soit la commande [BUILD APPLICATION](https://doc.4d.com/4Dv18R4/4D/18-R4/BUILD-APPLICATION.301-4982852.en.html), -- soit la[ fenêtre Générateur d'application](#application-builder). +- either the [BUILD APPLICATION](https://doc.4d.com/4Dv18R4/4D/18-R4/BUILD-APPLICATION.301-4982852.en.html) command, +- or the [Build Application window](#application-builder). -Pour afficher la boîte de dialogue du générateur d'application, sélectionnez **Développement** > **Générer l'application...** dans la barre de menus. +To display the Build Application dialog, select **Design** > **Build Application...** from the menu bar. ![](assets/en/Project/buildappProj.png) -La boîte de dialogue du générateur d'application comprend plusieurs pages accessibles via des onglets : +The Build Application dialog includes several pages that can be accessed using tabs: ![](assets/en/Project/appbuilderProj.png) -La génération ne peut s'effectuer qu'une fois le projet compilé. Si vous sélectionnez cette commande sans avoir préalablement compilé le projet ou si le code compilé ne correspond pas au code interprété, une boîte de dialogue d'avertissement apparaît indiquant que le projet doit être (re)compilé. +Building can only be carried out once the project is compiled. If you select this command without having previously compiled the project, or if the compiled code does not correspond to the interpreted code, a warning dialog box appears indicating that the project must be (re)compiled. -### Paramètres du générateur d'application +### Build application settings -Chaque paramètre de générateur d'application est stocké en tant que clé XML dans le fichier de l'application nommé "buildApp.4DSettings", situé dans le dossier Settings du projet. +Each build application parameter is stored as an XML key in the application project file named "buildApp.4DSettings" XML file, located in the Settings folder of the project. -Les paramètres par défaut sont utilisés lors de la première utilisation de la boîte de dialogue du Générateur d'application. Le contenu du fichier est mis à jour, si nécessaire, lorsque vous cliquez sur **Construire** ou **Enregistrer les paramètres**. Vous pouvez définir plusieurs autres fichiers de paramètres XML pour le même projet et les utiliser à l'aide de la commande [BUILD APPLICATION](https://doc.4d.com/4Dv17R6/4D/17-R6/BUILD-APPLICATION.301-4311300.en.html). +Default parameters are used the first time the Build Application dialog box is used. The contents of the project file are updated, if necessary, when you click **Build** or **Save settings**. You can define several other XML settings file for the same project and employ them using the [BUILD APPLICATION](https://doc.4d.com/4Dv17R6/4D/17-R6/BUILD-APPLICATION.301-4311300.en.html) command. -Les clés XML fournissent des options supplémentaires à celles affichées dans la boîte de dialogue du Générateur d'application. La description de ces clés est détaillée dans le manuel [4D Clés XML BuildApplication](https://doc.4d.com/4Dv17R6/4D/17-R6/4D-XML-Keys-BuildApplication.100-4465602.en.html). +XML keys provide additional options besides those displayed in the Build Application dialog box. The description of these keys are detailed in the [4D XML Keys BuildApplication](https://doc.4d.com/4Dv17R6/4D/17-R6/4D-XML-Keys-BuildApplication.100-4465602.en.html) manual. -### Fichier d'historique +### Log file -Lorsqu'une application est créée, 4D génère un fichier journal nommé *BuildApp.log.xml* dans le dossier **Logs** du projet. Le fichier d'historique stocke les informations suivantes pour chaque génération : +When an application is built, 4D generates a log file named *BuildApp.log.xml* in the **Logs** folder of the project. The log file stores the following information for each build: -- Le début et la fin de la génération des cibles, -- Le nom et le chemin d'accès complet des fichiers générés, -- La date et l'heure de la génération, -- Toutes les erreurs qui se sont produites, -- Tout problème de signature (par exemple, un plug-in non signé). +- The start and end of building of targets, +- The name and full access path of the files generated, +- The date and time of the build, +- Any errors that occurred, +- Any signing issues (e.g. a non-signed plug-in). -La vérification de ce fichier peut vous aider à gagner du temps lors des prochaines étapes de déploiement, si vous avez l'intention, par exemple, de notariser votre application. +Checking this file may help you saving time during the subsequent deployment steps, for example if you intend to notarize your application. -> Utilisez la commande `Get 4D file (Build application log file)` pour obtenir l'emplacement du fichier journal. +> Use the `Get 4D file(Build application log file)` command to get the log file location. -## Nom de l'application et dossier de destination +## Application name and destination folder ![](assets/en/Project/buidappstructureProj.png) -Entrez le nom de l'application dans **Nom de l'application**. +Enter the name of the application in **Application Name**. -Spécifiez le dossier de l'application générée dans le**Dossier de destination**. Si le dossier spécifié n'existe pas déjà, 4D vous créera un dossier *Build*. +Specify the folder for the built application in **Destination Folder**. If the specified folder does not already exist, 4D will create a *Build* folder for you. -## Page de structure compilée +## Compiled structure page -Cet onglet vous permet de générer un fichier de structure compilé standard et/ou un composant compilé : +This tab allows you to build a standard compiled structure file and/or a compiled component: ![](assets/en/Project/appbuilderProj.png) -### Générer une structure compilée +### Build compiled structure -Génère une application contenant uniquement du code compilé. +Builds an application containing only compiled code. -Cette fonctionnalité crée un fichier *.4dz* dans un dossier *Compiled Database/\*. Par exemple, si vous avez nommé votre application «MyProject», 4D créera : +This feature creates a *.4dz* file within a *Compiled Database/\* folder. For example, if you have named your application “MyProject”, 4D will create: *\/Compiled Database/MyProject/MyProject.4dz* -> Un fichier .4dz est essentiellement une version compressée du dossier du projet. Les fichiers .4dz peuvent être utilisés par 4D Server, la licence 4D Volume (applications fusionnées) et 4D Developer (4D). La taille compacte et optimisée des fichiers .4dz facilite le déploiement des packages de projet. +> A .4dz file is essentially a zipped (packed) version of the project folder. .4dz files can be used by 4D Server, 4D Volume license (merged applications), and 4D Developer (4D). The compact and optimized size of .4dz files makes project packages easy to deploy. -#### Inclure les dossiers associés +#### Include related folders -Lorsque vous cochez cette option, tous les dossiers liés au projet sont recopiés dans le dossier Build en tant que dossiers *Components* et *Resources*. Pour plus d'informations sur ces dossiers, veuillez vous reporter à la [description de l'architecture du projet](Project/architecture.md). +When you check this option, any folders related to the project are copied into the Build folder as *Components* and *Resources* folders. For more information about these folders, refer to the [description of project architecture](Project/architecture.md). -### Générer un composant +### Build component -Génère un composant compilé à partir de la structure. +Builds a compiled component from the structure. -Un composant est un fichier de structure 4D standard dans lequel des fonctionnalités spécifiques ont été développées. Une fois le composant configuré et installé dans un autre projet 4D (le projet d'application hôte), ses fonctionnalités sont accessibles depuis le projet hôte. +A component is a standard 4D project in which specific functionalities have been developed. Once the component has been configured and installed in another 4D project (the host application project), its functionalities are accessible from the host project. -Si vous avez nommé votre application *Moncomposant*, 4D créera un dossier *Component* contenant le dossier *MyComponent.4dbase* : +If you have named your application, *MyComponent*, 4D will create a *Components* folder containing *MyComponent.4dbase* folder: *\/Components/MyComponent.4dbase/MyComponent.4DZ*. -Le dossier *MyComponent.4dbase* contient : -- fichier *MyComponent.4DZ* -- Un dossier *Resources* - toutes les ressources associées sont automatiquement copiées dans ce dossier. Les autres composants et/ou dossiers de plugins ne sont pas copiés (un composant ne peut pas utiliser de plug-ins ou d'autres composants). +The *MyComponent.4dbase* folder contains: +- *MyComponent.4DZ* file +- A *Resources* folder - any associated Resources are automatically copied into this folder. Any other components and/or plugins folders are not copied (a component cannot use plug-ins or other components). -## Page Application +## Application page This tab allows you can build a stand-alone, single-user version of your application: @@ -123,43 +123,43 @@ The following elements are required for the build: On Windows, this feature creates an executable file (.exe). On macOS, it handles the creation of software packages. -Le principe consiste à fusionner le fichier 4D Volume Desktop avec votre fichier de structure compilé. Les fonctionnalités offertes par le fichier 4D Volume Desktop sont liées à l’offre commerciale à laquelle vous avez souscrite. Pour plus d’informations sur ce point, reportez-vous à la documentation commerciale et au site Internet de [4D Sas (http://www.4d.com/)](http://www.4d.com/). +The principle consists of merging a compiled structure file with 4D Volume Desktop. The functionality provided by the 4D Volume Desktop file is linked with the product offer to which you have subscribed. For more information about this point, refer to the sales documentation and to the [4D Store](http://www.4d.com/). -Vous pouvez définir un fichier de données par défaut ou permettre à l'utilisateur de créer et d'utiliser son propre fichier de données (cf. section [Gestion du fichier de données dans les applications finales](https://doc.4d.com/4Dv17R6/4D/17-R6/Data-file-management-in-final-applications.300-4354729.en.html)). +You can define a default data file or allow users to create and use their own data file (see the [Data file management in final applications](https://doc.4d.com/4Dv17R6/4D/17-R6/Data-file-management-in-final-applications.300-4354729.en.html) section). -Il est possible d'automatiser la mise à jour des applications monopostes fusionnées moyennant l'utilisation d'une séquence de commandes du langage (cf. section [Mise à jour auto des applications serveur ou monopostes](https://doc.4d.com/4Dv17R6/4D/17-R6/Automatic-updating-of-server-or-single-user-applications.300-4354721.en.html)). +It is possible to automate the update of merged single-user applications by means of a sequence of language commands (see [Automatic updating of server or single-user applications](https://doc.4d.com/4Dv17R6/4D/17-R6/Automatic-updating-of-server-or-single-user-applications.300-4354721.en.html). #### 4D Volume Desktop Location In order to build a stand-alone application, you must first designate the folder containing the 4D Volume Desktop file: -* *sous Windows*, le dossier contient notamment les fichiers 4D Volume Desktop.4DE, 4D Volume Desktop.RSR ainsi que différents fichiers et dossiers nécessaires à son fonctionnement. Ces éléments doivent être placés au premier niveau du dossier sélectionné. -* *sous macOS*, 4D Volume Desktop est fourni sous la forme d’un progiciel structuré contenant divers fichiers et dossiers génériques. +* *Windows* - the folder contains the 4D Volume Desktop.4DE, 4D Volume Desktop.RSR, as well as various files and folders required for its operation. These items must be placed at the same level as the selected folder. +* *macOS* - 4D Volume Desktop is provided in the form of a structured software package containing various generic files and folders. -Pour sélectionner le dossier de 4D Volume Desktop, cliquez sur le bouton **[...]**. Une boîte de dialogue vous permettant de désigner le dossier (Windows) ou le progiciel (macOS) de 4D Volume Desktop apparaît. +To select the 4D Volume Desktop folder, click on the **[...]** button. A dialog box appears allowing you to designate the 4D Volume Desktop folder (Windows) or package (macOS). -Une fois le dossier sélectionné, son chemin d’accès complet est affiché et, s’il contient effectivement 4D Volume Desktop, l’option de génération d’application exécutable est activée. +Once the folder is selected, its complete pathname is displayed and, if it actually contains 4D Volume Desktop, the option for building an executable application is activated. -> Le numéro de version de 4D Volume Desktop doit correspondre à celui du 4D Developer Edition. Par exemple, si vous utilisez 4D Developer v18, vous devez sélectionner un 4D Volume Desktop v18. +> The 4D Volume Desktop version number must match the 4D Developer Edition version number. For example, if you use 4D Developer v18, you must select a 4D Volume Desktop v18. #### Data linking mode This option lets you choose the linking mode between the merged application and the local data file. Two data linking modes are available: -* **By application name** (default) - The 4D application automatically opens the most recently opened data file corresponding to the structure file. Cela vous permet de déplacer librement le dossier de l'application sur le disque. This option should generally be used for merged applications, unless you specifically need to duplicate your application. +* **By application name** (default) - The 4D application automatically opens the most recently opened data file corresponding to the structure file. This allows you to move the application package freely on the disk. This option should generally be used for merged applications, unless you specifically need to duplicate your application. -* **By application path** - The merged 4D application will parse the application's *lastDataPath.xml* file and try to open the data file with an "executablePath" attribute that matches the application's full path. Si cette clé est trouvée, son fichier de données correspondant (défini via son attribut "dataFilePath") est ouvert. Otherwise, the last opened data file is opened (default mode). +* **By application path** - The merged 4D application will parse the application's *lastDataPath.xml* file and try to open the data file with an "executablePath" attribute that matches the application's full path. If such an entry is found, its corresponding data file (defined through its "dataFilePath" attribute) is opened. Otherwise, the last opened data file is opened (default mode). For more information about the data linking mode, refer to the [Last data file opened](#last-data-file-opened) section. -#### Fichiers générés +#### Generated files When you click on the **Build** button, 4D automatically creates a **Final Application** folder in the specified **Destination Folder**. Inside the Final Application folder is a subfolder with the name of the specified application in it. If you have specified "MyProject" as the name of the application, you will find the following files in this subfolder (aka MyProject): -* *Sous Windows* +* *Windows* * MyProject.exe - Your executable and a MyProject.rsr (the application resources) * 4D Extensions folder, Resources folder, various libraries (DLL), Native Components folder, SASL Plugins folder - Files necessary for the operation of the application * Database folder - Includes a Resources folder and MyProject.4DZ file. They make up the compiled structure of the project as well as the project Resources folder. **Note**: This folder also contains the *Default Data* folder, if it has been defined (see [Data file management in final applications](#data-file-management-in-final-applicatons). @@ -170,12 +170,12 @@ If you have specified "MyProject" as the name of the application, you will find All these items must be kept in the same folder in order for the executable to operate. * *macOS* - - A software package named MyProject.app containing your application and all the items necessary for its operation, including the plug-ins, components and licenses. Pour plus d’informations sur l’intégration des composants et des plug-ins, reportez-vous à la section [Page Plugins et composants](#plugins-and-components). Pour plus d’informations sur l’intégration des licences, reportez-vous à la [Page Licences & Certificat](#licenses-and-certificate). **Note**: In macOS, the [Application file](https://doc.4d.com/4Dv18R4/4D/18-R4/Application-file.301-4982855.en.html) command of the 4D language returns the pathname of the ApplicationName file (located in the Contents:macOS folder of the software package) and not that of the .comp file (Contents:Resources folder of the software package). + - A software package named MyProject.app containing your application and all the items necessary for its operation, including the plug-ins, components and licenses. For more information about integrating plug-ins and components, refer to the [Plugins and components](#plugins-and-components) section. For more information about integrating licenses, refer to the [Licenses & Certificate](#licenses-and-certificate) section. **Note**: In macOS, the [Application file](https://doc.4d.com/4Dv18R4/4D/18-R4/Application-file.301-4982855.en.html) command of the 4D language returns the pathname of the ApplicationName file (located in the Contents:macOS folder of the software package) and not that of the .comp file (Contents:Resources folder of the software package). #### Customizing 4D Volume Desktop folder -When building a stand-alone application, 4D copies the contents of the 4D Volume Desktop folder into Destination folder > *Final Application* folder. Vous pouvez donc parfaitement personnaliser le contenu du dossier 4D Volume Desktop d’origine en fonction de vos besoins. You can, for example: +When building a stand-alone application, 4D copies the contents of the 4D Volume Desktop folder into Destination folder > *Final Application* folder. You're then able to customize the contents of the original 4D Volume Desktop folder according to your needs. You can, for example: * Install a 4D Volume Desktop version corresponding to a specific language; * Add a custom *PlugIns* folder; @@ -199,13 +199,13 @@ Items must be installed: -## Page Client/Serveur +## Client/Server page On this tab, you can build customized client-server applications that are homogenous, cross-platform and with an automatic update option. ![](assets/en/Project/buildappCSProj.png) -### Qu'est-ce qu'une application Client/Serveur ? +### What is a Client/Server application? A client/server application comes from the combination of three items: @@ -218,7 +218,7 @@ Once built, a client/server application is composed of two customized parts: the Also, the client/server application is customized and its handling simplified: - To launch the server portion, the user simply double-clicks on the server application. The project file does not need to be selected. -- To launch the client portion, the user simply double-clicks the client application, which connects directly to the server application. You do not need to choose a server in a connection dialog box. Le client cible le serveur soit via son nom, lorsque client et serveur sont sur le même sous-réseau, soit via son adresse IP, à définir via la clé XML `IPAddress` dans le fichier buildapp.4DSettings. Si la connexion échoue, [des mécanismes alternatifs spécifiques peuvent être mis en place](#management-of-client-connections). Il est également possible de “forcer” l’affichage de la boîte de dialogue de connexion standard en maintenant la touche **Option** (macOS) ou **Alt** (Windows) enfoncée lors du lancement de l’application cliente. Seule la partie cliente peut se connecter à la partie serveur correspondante. If a user tries to connect to the server portion using a standard 4D application, an error message is returned and connection is impossible. +- To launch the client portion, the user simply double-clicks the client application, which connects directly to the server application. You do not need to choose a server in a connection dialog box. The client targets the server either using its name, when the client and server are on the same sub-network, or using its IP address, which is set using the `IPAddress` XML key in the buildapp.4DSettings file. If the connection fails, [specific alternative mechanisms can be implemented](#management-of-client-connections). You can "force" the display of the standard connection dialog box by holding down the **Option** (macOS) or **Alt** (Windows) key while launching the client application. Only the client portion can connect to the corresponding server portion. If a user tries to connect to the server portion using a standard 4D application, an error message is returned and connection is impossible. - A client/server application can be set so that the client portion [can be updated automatically over the network](#copy-of-client-applications-in-the-server-application). - It is also possible to automate the update of the server part through the use of a sequence of language commands ([SET UPDATE FOLDER](https://doc.4d.com/4Dv17R6/4D/17-R6/SET-UPDATE-FOLDER.301-4311308.en.html) and [RESTART 4D](https://doc.4d.com/4Dv17R6/4D/17-R6/RESTART-4D.301-4311311.en.html)). @@ -226,7 +226,7 @@ Also, the client/server application is customized and its handling simplified: ### Build server application -Check this option to generate the server part of your application during the building phase. Vous devez désigner sur votre disque l’emplacement de l’application 4D Server à utiliser. Ce 4D Server doit correspondre à la plate-forme courante (qui sera également la plate-forme de l’application du serveur). +Check this option to generate the server part of your application during the building phase. You must designate the location on your disk of the 4D Server application to be used. This 4D Server must correspond to the current platform (which will also be the platform of the server application). #### 4D Server location @@ -234,19 +234,15 @@ Click on the **[...]** button and use the *Browse for folder* dialog box to loca #### Current version -Used to indicate the current version number for the application generated. Vous pourrez par la suite accepter ou refuser les connexions des applications clientes en fonction de leur numéro de version. The interval of compatibility for client and server applications is set using specific [XML keys](#build-application-settings)). - -#### Data linking mode - -This option lets you choose the linking mode between the merged application and the local data file. +Used to indicate the current version number for the application generated. You may then accept or reject connections by client applications according to their version number. The interval of compatibility for client and server applications is set using specific [XML keys](#build-application-settings)). #### Data linking mode This option lets you choose the linking mode between the merged application and the local data file. Two data linking modes are available: -* **By application name** (default) - The 4D application automatically opens the most recently opened data file corresponding to the structure file. Cela vous permet de déplacer librement le dossier de l'application sur le disque. This option should generally be used for merged applications, unless you specifically need to duplicate your application. +* **By application name** (default) - The 4D application automatically opens the most recently opened data file corresponding to the structure file. This allows you to move the application package freely on the disk. This option should generally be used for merged applications, unless you specifically need to duplicate your application. -* **By application path** - The merged 4D application will parse the application's *lastDataPath.xml* file and try to open the data file with an "executablePath" attribute that matches the application's full path. Si cette clé est trouvée, son fichier de données correspondant (défini via son attribut "dataFilePath") est ouvert. Otherwise, the last opened data file is opened (default mode). +* **By application path** - The merged 4D application will parse the application's *lastDataPath.xml* file and try to open the data file with an "executablePath" attribute that matches the application's full path. If such an entry is found, its corresponding data file (defined through its "dataFilePath" attribute) is opened. Otherwise, the last opened data file is opened (default mode). For more information about the data linking mode, refer to the [Last data file opened](#last-data-file-opened) section. @@ -257,11 +253,11 @@ Checking this option generates the client part of your application during the bu #### 4D Volume Desktop -You must designate the location on your disk of the 4D Volume Desktop application to be used. Ce 4D Volume Desktop doit correspondre à la plate-forme courante (qui sera également la plate-forme de l’application cliente). Si vous souhaitez générer une version de l’application cliente pour la plate-forme “concurrente”, vous devez répéter l'opération en utilisant une application 4D tournant sur cette plate-forme. Cette étape est nécessaire uniquement pour la version initiale de l'application cliente car les mises à jour suivantes pourront être gérées directement depuis une seule plate-forme via le mécanisme des mises à jour automatiques. For more information about this point, see [Customizing 4D Server and/or 4D Client folders](#customizing-4d-server-and-or-4d-client-folders). +You must designate the location on your disk of the 4D Volume Desktop application to be used. This 4D Volume Desktop must correspond to the current platform (which will also be the platform of the client application). If you want to build a client application for a “concurrent” platform, you must carry out an additional build operation using a 4D application running on that platform. This is only necessary for the initial version of the client application since subsequent updates can be handled directly on the same platform using the automatic update mechanism. For more information about this point, see [Customizing 4D Server and/or 4D Client folders](#customizing-4d-server-and-or-4d-client-folders). -> Le numéro de version de 4D Volume Desktop doit correspondre à celui du 4D Developer Edition. Par exemple, si vous utilisez 4D Developer v18, vous devez sélectionner un 4D Volume Desktop v18. +> The 4D Volume Desktop version number must match the 4D Developer Edition version number. For example, if you use 4D Developer v18, you must select a 4D Volume Desktop v18. -If you want the client application to connect to the server using a specific address (other than the server name published on the sub-network), you must use the `IPAddress` XML key in the buildapp.4DSettings file. Pour plus d'informations sur ce fichier, reportez-vous à la description de la commande`BUILD APPLICATION`. Vous pouvez également mettre en place des mécanismes spécifiques en cas d'échec de la connexion. The different scenarios proposed are described in the [Management of connections by client applications](#management-of-client-connections) paragraph. +If you want the client application to connect to the server using a specific address (other than the server name published on the sub-network), you must use the `IPAddress` XML key in the buildapp.4DSettings file. For more information about this file, refer to the description of the `BUILD APPLICATION` command. You can also implement specific mechanisms in the event of a connection failure. The different scenarios proposed are described in the [Management of connections by client applications](#management-of-client-connections) paragraph. #### Copy of client applications in the server application @@ -286,16 +282,14 @@ To trigger client application update notifications, simply replace the old versi On the client side, when the “old” client application tries to connect to the updated server application, a dialog box is displayed on the client machine, indicating that a new version is available. The user can either update their version or cancel the dialog box. -* If the user clicks **OK**, the new version is downloaded to the client machine over the network. A l’issue du téléchargement, l’ancienne application client quitte, la nouvelle est lancée et se connecte au serveur. The old version of the application is then placed in the machine’s recycle bin. +* If the user clicks **OK**, the new version is downloaded to the client machine over the network. Once the download is complete, the old client application is closed and the new version is launched and connects to the server. The old version of the application is then placed in the machine’s recycle bin. * If the user clicks **Cancel**, the update is cancelled; if the old version of the client application is not in the range of versions accepted by the server (please refer to the following paragraph), the application is closed and connection is impossible. Otherwise (by default), the connection is established. #### Forcing automatic updates In some cases, you may want to prevent client applications from being able to cancel the update download. For example, if you used a new version of the 4D Server source application, the new version of the client application must absolutely be installed on each client machine. -To force the update, simply exclude the current version number of client applications (X-1 and earlier) in the version number range compatible with the server application. Dans ce cas, le mécanisme de mise à jour n’autorisera pas la connexion des applications clientes non mises à jour. For example, if the new version of the client-server application is 6, you can stipulate that any client application with a version number lower than 6 will not be allowed to connect. - -The [current version number](build-server-application) is set on the Client/Server page of the Build Application dialog box. +To force the update, simply exclude the current version number of client applications (X-1 and earlier) in the version number range compatible with the server application. In this case, the update mechanism will not allow non-updated client applications to connect. For example, if the new version of the client-server application is 6, you can stipulate that any client application with a version number lower than 6 will not be allowed to connect. The [current version number](#current_version) is set on the Client/Server page of the Build Application dialog box. The intervals of authorized numbers are set in the application project using specific [XML keys](#build-application-settings). @@ -310,23 +304,21 @@ There are many possible causes for this error. When you get this message, it is * **Read/write privileges** - On the client machine, check that the current user has write access rights for the client application update. -### Fichiers générés +### Generated files Once a client/server application is built, you will find a new folder in the destination folder named **Client Server executable**. This folder contains two subfolders, *\Client* and *\Server*. > These folders are not generated if an error occurs. In this case, open the [log file](#log-file) in order to find out the cause of the error. -The *\Client* folder contains the client portion of the application corresponding to the execution platform of the application builder. Ce dossier doit être installé sur chaque poste client. Le dossier *\Server* contient la partie serveur de l'application. +The *\Client* folder contains the client portion of the application corresponding to the execution platform of the application builder. This folder must be installed on each client machine. The *\Server* folder contains the server portion of the application. The contents of these folders vary depending on the current platform: * *Windows* - Each folder contains the application executable file, named *\Client.exe* for the client part and *\Server.exe* for the server part as well as the corresponding .rsr files. The folders also contain various files and folders necessary for the applications to work and customized items that may be in the original 4D Volume Desktop and 4D Server folders. -* *macOS* - Each folder contains only the application package, named \ Client for the client part and \ Server for the server part. Chaque progiciel contient tous les éléments nécessaires à son fonctionnement. Under macOS, launch a package by double-clicking it. +* *macOS* - Each folder contains only the application package, named \ Client for the client part and \ Server for the server part. Each package contains all the necessary items for the application to work. Under macOS, launch a package by double-clicking it. > The macOS packages built contain the same items as the Windows subfolders. You can display their contents (**Control+click** on the icon) in order to be able to modify them. -If you checked the “Allow automatic update of client application” option, an additional subfolder called *Upgrade4DClient* is added in the *\Server* folder/package.
  • - -If you checked the “Allow automatic update of client application” option, an additional subfolder called *Upgrade4DClient* is added in the *\Server* folder/package. Ce sous-dossier contient l’application cliente au format macOS et/ou Windows sous forme de fichier compressé. This file is used during the automatic client application update. +If you checked the “Allow automatic update of client application” option, an additional subfolder called *Upgrade4DClient* is added in the *\Server* folder/package. This subfolder contains the client application in macOS and/or Windows format as a compressed file. This file is used during the automatic client application update. #### Location of Web files @@ -379,7 +371,7 @@ The page lists the elements loaded by the current 4D application: ![](assets/en/Project/buildapppluginsProj.png) -* **Active** column - Indicates that the items will be integrated into the application package built. Par défaut, tous les éléments sont inclus. To exclude a plug-in or a component, deselect the check box next to it. +* **Active** column - Indicates that the items will be integrated into the application package built. All the items are checked by default. To exclude a plug-in or a component, deselect the check box next to it. * **Plugins and components** column - Displays the name of the plug-in/component. @@ -408,7 +400,7 @@ The Licences & Certificate page can be used to: ### Licenses -This tab displays the list of available deployment licenses that you can integrate into your application. Par défaut, la liste est vide. Vous devez explicitement ajouter votre licence *4D Developer Professional* ainsi que chaque licence* 4D Desktop Volume* liée à utiliser dans l’application générée. You can add another 4D Developer Professional number and its associated licenses other than the one currently being used. +This tab displays the list of available deployment licenses that you can integrate into your application. By default, the list is empty. You must explicitly add your *4D Developer Professional* license as well as each *4D Desktop Volume* license to be used in the application built. You can add another 4D Developer Professional number and its associated licenses other than the one currently being used. To remove or add a license, use the **[+]** and **[-]** buttons at the bottom of the window. @@ -448,7 +440,7 @@ This option is displayed under both Windows and macOS, but it is only taken into To obtain a developer certificate from Apple, Inc., you can use the commands of the Keychain Access menu or go here: [http://developer.apple.com/library/mac/#documentation/Security/Conceptual/CodeSigningGuide/Procedures/Procedures.html](http://developer.apple.com/library/mac/#documentation/Security/Conceptual/CodeSigningGuide/Procedures/Procedures.html). > This certificate requires the presence of the Apple codesign utility, which is provided by default and usually located in the “/usr/bin/” folder. If an error occurs, make sure that this utility is present on your disk. -* **Generate self-signed certificate** - runs the "Certificate Assistant" that allows you to generate a self-signed certificate. Si vous ne disposez pas d'un certificat de développeur Apple, vous devez fournir un certificat auto-signé. Avec ce certificat, aucun message d'alerte ne s'affiche si l'application est déployée en interne. Si l'application est déployée en externe (c'est-à-dire via http ou e-mail), au lancement, macOS affiche un message d'alerte indiquant que le développeur de l'application n'est pas identifié. L'utilisateur peut "forcer" l'ouverture de l'application.

    In the "Certificate Assistant", be sure to select the appropriate options: ![](assets/en/Admin/Cert1.png) ![](assets/en/Admin/Cert2.png) +* **Generate self-signed certificate** - runs the "Certificate Assistant" that allows you to generate a self-signed certificate. If you do not have an Apple developer certificate, you need to provide a self-signed certificate. With this certificate, no alert message is displayed if the application is deployed internally. If the application is deployed externally (i.e. through http or email), at launch macOS displays an alert message that the application's developer is unidentified. The user can "force" the opening of the application.

    In the "Certificate Assistant", be sure to select the appropriate options: ![](assets/en/Admin/Cert1.png) ![](assets/en/Admin/Cert2.png) > 4D recommends to subscribe to the Apple Developer Program to get access to Developer Certificates that are necessary to notarize applications (see below). @@ -532,7 +524,7 @@ With your compiled applications, 4D automatically uses the last data file opened This may be unsuitable if you want to duplicate a merged application intended to use different data files. Duplicated applications actually share the application's user preferences folder and thus, always use the same data file -- even if the data file is renamed, because the last file used for the application is opened. -4D therefore lets you link the data file path to the application path. Dans ce cas, le fichier de données sera relié via un chemin spécifique et ne sera plus simplement le dernier fichier utilisé. You therefore link your data **by application path**. +4D therefore lets you link the data file path to the application path. In this case, the data file will be linked using a specific path and will not just be the last file opened. You therefore link your data **by application path**. This mode allows you to duplicate your merged applications without breaking the link to the data file. However, with this option, if the application package is moved on the disk, the user will be prompted for a data file, since the application path will no longer match the "executablePath" attribute (after a user has selected a data file, the *lastDataPath.xml* file is updated accordingly). @@ -541,7 +533,7 @@ This mode allows you to duplicate your merged applications without breaking the *Duplication when data linked by application path:* ![](assets/en/Project/datalinking2.png) -You can select the data linking mode during the build application process. Vous pouvez : +You can select the data linking mode during the build application process. You can either: - Use the [Application page](#application) or [Client/Server page](#client-server) of the Build Application dialog box. - Use the **LastDataPathLookup** XML key (single-user application or server application). @@ -549,7 +541,7 @@ You can select the data linking mode during the build application process. Vous ### Defining a default data folder -4D allows you to define a default data file at the application building stage. Au premier lancement de l'application, en l'absence de fichier local (cf. [séquence de lancement décrite ci-dessus](#opening-the-data-file)), le fichier de données par défaut est automatiquement ouvert silencieusement en mode lecture seule par 4D. Cela vous donne un meilleur contrôle sur la création et/ou l'ouverture des fichiers de données lors du premier lancement d'une application fusionnée. +4D allows you to define a default data file at the application building stage. When the application is launched for the first time, if no local data file is found (see [opening sequence described above](#opening-the-data-file)), the default data file is automatically opened silently in read-only mode by 4D. This gives you better control over data file creation and/or opening when launching a merged application for the first time. More specifically, the following cases are covered: @@ -559,7 +551,7 @@ More specifically, the following cases are covered: To define and use a default data file: -- You provide a default data file (named "Default.4DD") and store it in a default folder (named "Default Data") inside the application project folder. This file must be provided along with all other necessary files, depending on the project configuration: index (.4DIndx), external Blobs, journal, etc. Il est de votre responsabilité de livrer un fichier de données par défaut valide. Note however that since a default data file is opened in read-only mode, it is recommended to uncheck the "Use Log File" option in the original structure file before creating the data file. +- You provide a default data file (named "Default.4DD") and store it in a default folder (named "Default Data") inside the application project folder. This file must be provided along with all other necessary files, depending on the project configuration: index (.4DIndx), external Blobs, journal, etc. It is your responsibility to provide a valid default data file. Note however that since a default data file is opened in read-only mode, it is recommended to uncheck the "Use Log File" option in the original structure file before creating the data file. - When the application is built, the default data folder is integrated into the merged application. All files within this default data folder are also embedded. The following graphic illustrates this feature: @@ -594,9 +586,9 @@ The last used and validated server path is automatically saved in a file named " userPrefs:=Get 4D folder(Active 4D Folder) ``` -This mechanism addresses the case where the primary targeted server is temporary unavailable for some reason (maintenance mode for example). Lorsque ce cas se produit pour la première fois, la boîte de dialogue de sélection de serveur est affichée (si elle est autorisée, cf. ci-dessous) et l'utilisateur peut manuellement sélectionner un serveur alternatif, dont le chemin est alors sauvegardé si la connexion est établie et validée. Any subsequent unavailability would be handled automatically through the "lastServer.xml" path information. +This mechanism addresses the case where the primary targeted server is temporary unavailable for some reason (maintenance mode for example). When this case occurs for the first time, the server selection dialog box is displayed (if allowed, see below) and the user can manually select an alternate server, whose path is then saved if the connection is successful. Any subsequent unavailability would be handled automatically through the "lastServer.xml" path information. -> - When client applications cannot permanently benefit from the discovery service, for example because of the network configuration, it is recommended that the developer provide a host name at build time using the [IPAddress](https://doc.4d.com/4Dv17R6/4D/17-R6/IPAddress.300-4465710.en.html) key in the "BuildApp.4DSettings" file. Le mécanisme de sauvegarde du chemin du dernier serveur est conçu pour les cas d'indisponibilité temporaire uniquement. +> - When client applications cannot permanently benefit from the discovery service, for example because of the network configuration, it is recommended that the developer provide a host name at build time using the [IPAddress](https://doc.4d.com/4Dv17R6/4D/17-R6/IPAddress.300-4465710.en.html) key in the "BuildApp.4DSettings" file. The mechanism addresses cases of temporary unavailability. > - Pressing the **Alt/Option** key at startup to display the server selection dialog box is still supported in all cases. @@ -605,7 +597,7 @@ This mechanism addresses the case where the primary targeted server is temporary You can choose whether or not to display the standard server selection dialog box on merged client applications when the server cannot be reached. The configuration depends on the value of the [ServerSelectionAllowed](https://doc.4d.com/4Dv17R6/4D/17-R6/ServerSelectionAllowed.300-4465714.en.html) XML key on the machine where the application was built: -- **Display of an error message with no access possible to the server selection dialog box**. Fonctionnement par défaut. The application can only quit. +- **Display of an error message with no access possible to the server selection dialog box**. Default operation. The application can only quit. `ServerSelectionAllowed`: **False** or key omitted ![](assets/en/Project/connect1.png) - **Display of an error message with access to the server selection dialog box possible**. The user can access the server selection window by clicking on the **Select...** button. From 9a6090cf23f9f3d4906475eb66e0e4f3947fe66b Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:15:28 +0100 Subject: [PATCH 004/260] New translations creating.md (French) --- .../translated_docs/fr/Project/creating.md | 46 +++++++++---------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/website/translated_docs/fr/Project/creating.md b/website/translated_docs/fr/Project/creating.md index 532ddb489f4343..498091ba3f8f27 100644 --- a/website/translated_docs/fr/Project/creating.md +++ b/website/translated_docs/fr/Project/creating.md @@ -1,36 +1,36 @@ --- id: creating -title: Créer ou ouvrir un projet +title: Creating or opening a project --- -## Créer un projet +## Creating a project -De nouveaux projets d'application 4D peuvent être créés à partir de **4D** ou de **4D Server** (voir [Développer un projet](Project/developing.md)). Dans tous les cas, les fichiers de projet sont stockés sur la machine locale. +New 4D application projects can be created from **4D** or **4D Server** (see [Developing a project](Project/developing.md)). In any case, project files are stored on the local machine. -Pour créer un nouveau projet : +To create a new project: -1. Lancez 4D ou 4D Server. -2. Sélectionnez **Nouveau> Projet...** depuis le menu **Fichier** :

    ![](assets/en/getStart/projectCreate1.png)

    OU

    (4D uniquement) Sélectionnez **Projet...** depuis le bouton de la barre d'outils **Nouveau** :

    ![](assets/en/getStart/projectCreate2.png)

    Un dialogue standard **Sauvegarde** apparaît, de façon à ce que vous choisissiez le nom et l'emplacement du dossier principal du projet 4D. +1. Launch 4D or 4D Server. +2. Select **New > Project...** from the **File** menu:

    ![](assets/en/getStart/projectCreate1.png)

    OR

    (4D only) Select **Project...** from the **New** toolbar button:

    ![](assets/en/getStart/projectCreate2.png)

    A standard **Save** dialog appears so you can choose the name and location of the 4D project's main folder. -3. Saisissez le nom du dossier de projet et cliquez sur **Sauvegarder**.

    Ce nom sera utilisé : - - comme le nom du dossier du projet, - - comme nom du fichier .4DProject au premier niveau du dossier "Project". +3. Enter the name of your project folder and click **Save**.

    This name will be used: + - as the name of the entire project folder, + - as the name of the .4DProject file at the first level of the "Project" folder. - Vous pouvez choisir n'importe quel nom autorisé par votre système d'exploitation. Toutefois, si votre projet est destiné à fonctionner sur d'autres systèmes ou à être enregistré via un outil de gestion de version, vous devez tenir compte de leurs recommandations de dénomination spécifiques. + You can choose any name allowed by your operating system. However, if your project is intended to work on other systems or to be saved via a source control tool, you must take their specific naming recommendations into account. -Lorsque vous validez la boîte de dialogue **Enregistrer**, 4D ferme le projet en cours (le cas échéant), crée un dossier de projet à l'emplacement indiqué et y place tous les fichiers nécessaires au projet. Pour plus d'informations, voir [Architecture d'un projet 4D](Project/architecture.md). +When you validate the **Save** dialog, 4D closes the current project (if any), creates a project folder at the indicated location, and puts all files needed for the project into it. For more information, refer to [Architecture of a 4D Project](Project/architecture.md). -Vous pouvez alors commencer à développer votre projet. +You can then start developing your project. -## Ouvrir un projet local +## Opening a local project -Pour ouvrir un projet existant en local depuis 4D : +To open an existing project locally from 4D: -1. Sélectionnez **Ouvrir un projet d'application local** dans la boite de dialogue de l'Assistant de bienvenue

    OU

    Sélectionnez **Ouvrir > Projet local...** à partir du menu **Fichier** ou du bouton **Ouvrir** de la barre d'outils.

    La boîte de dialogue standard d’ouverture de fichiers apparaît. +1. Select **Open a local application project** in the Welcome Wizard dialog,

    OR

    Select **Open/Local Project...** from the **File** menu or the **Open** toolbar button.

    The standard Open dialog appears. -2. Sélectionnez le fichier `.4dproject` du projet et cliquez sur **Ouvrir**.

    By default, the project is opened with its current data file. Other file types are suggested: +2. Select the project's `.4dproject` file and click **Open**.

    By default, the project is opened with its current data file. Other file types are suggested: - *Packed project files*: `.4dz` extension - deployment projects - *Shortcut files*: `.4dlink` extension - store additional parameters needed for opening projects or applications (addresses, identifiers, etc.) @@ -53,7 +53,7 @@ The first time you connect to a 4D Server project via a remote 4D, you will usua To connect remotely to a 4D Server project: -1. Select **Connect to 4D Server** in the Welcome Wizard dialog,

    OU

    Select **Open/Remote Project...** from the **File** menu or the **Open** toolbar button. +1. Select **Connect to 4D Server** in the Welcome Wizard dialog,

    OR

    Select **Open/Remote Project...** from the **File** menu or the **Open** toolbar button. The 4D Server connection dialog appears. This dialog has three tabs: **Recent**, **Available**, and **Custom**. @@ -81,13 +81,13 @@ Once a connection to the server has been established, the remote project will be -## Raccourcis d’ouverture des projets +## Project opening shortcuts -4D propose deux façons d’ouvrir directement des projets, sans passer par la boîte de dialogue d’ouverture : +4D offers two ways to let you open projects directly and bypass the Open dialog: -- via les options du menu : - - *Barre de menu* - **Fichier** > **Ouvrir Projets récents / {project name}** - - *Barre d'outils 4D* - Sélectionnez le projetà partir du menu associé au bouton **Ouvrir** +- via menu options: + - *Menu bar* - **File** > **Open Recent Projects / {project name}** + - *4D Tool bar* - Select the project from the menu associated with the **Open** button -- via les préférences : +- via preferences: - Set the **At startup** general preference to **Open last used project**. \ No newline at end of file From 19bc664d5b374b11a58865aadf5cdbc77a18ecbf Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:15:30 +0100 Subject: [PATCH 005/260] New translations developing.md (French) --- .../translated_docs/fr/Project/developing.md | 60 +++++++++---------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/website/translated_docs/fr/Project/developing.md b/website/translated_docs/fr/Project/developing.md index 1e6ee8961f440f..a5485c3de989a5 100644 --- a/website/translated_docs/fr/Project/developing.md +++ b/website/translated_docs/fr/Project/developing.md @@ -1,46 +1,46 @@ --- id: developing -title: Développer un projet +title: Developing a project --- ## Aperçu -4D projects are developed using the **4D** application. Elle fournit un environnement de développement intégré (IDE) pour les projets 4D ainsi qu'une exécution d'application, permettant de développer, tester et déboguer le projet. +4D projects are developed using the **4D** application. It provides an Integrated Development Environment (IDE) for 4D projects as well as an application runtime, allowing to develop, test, and debug the project. -> La plupart des fichiers de projet 4D étant des fichiers texte, vous pouvez utiliser n'importe quel éditeur de texte pour y travailler. L'accès simultané aux fichiers est géré via un gestionnaire d'accès aux fichiers (voir ci-dessous). +> Because most of the 4D project files are text files, you can use any text editor to work in them. Concurrent file access is handled via a file access manager (see below). -Le développement multi-utilisateur est géré via des outils de contrôle de version standard, qui permettent aux développeurs de travailler sur différentes branches et de comparer, fusionner ou annuler des modifications. +Multi-user development is managed via standard source control tools, which allow developers to work on different branches, and compare, merge, or revert modifications. -## Configurations de développement +## Development configurations -Les projets interprétés (*applicationName.4DProject*, voir [Architecture d'un project 4D](architecture.md)) peuvent être ouverts dans les configurations suivantes : +Interpreted projects (*applicationName.4DProject*, see [Architecture of a 4D project](architecture.md)) can be opened in the following configurations: -- 4D opening **local project files** - in this case, all aspects of the project are available to the developer. Les fichiers projet peuvent être ouverts, modifiés, compilés, etc. The result of the development can be tested at any moment by using the **Test application** menu command from 4D or using the [integrated web server](WebServer/webServerObject.md). -- 4D connection from the **same machine as 4D Server** - in this case, development is supported the same as local projects. Cette fonctionnalité vous permet de développer une application client/serveur dans le même contexte que le contexte de déploiement ([détaillé ci-dessous](#developing-projects-with-4d-server)). -- Connexion 4D depuis une **machine distante** - dans ce cas, 4D Server envoie une version .4dz du projet ([format compressé](Admin/building.md#build-compiled-structure)) à 4D. Par conséquent, tous les fichiers de structure sont en lecture seule. Cette fonctionnalité est utile à des fins de test. +- 4D opening **local project files** - in this case, all aspects of the project are available to the developer. Project files can be created, modified, compiled, etc. The result of the development can be tested at any moment by using the **Test application** menu command from 4D or using the [integrated web server](WebServer/webServerObject.md). +- 4D connection from the **same machine as 4D Server** - in this case, development is supported the same as local projects. This feature allows you to develop a client/server application in the same context as the deployment context ()[detailed below](#developing-projects-with-4d-server)). +- 4D connection from a **remote machine** - in this case, 4D Server sends a .4dz version of the project ([compressed format](Admin/building.md#build-compiled-structure)) to 4D. As a consequence, all structure files are read-only. This feature is useful for testing purposes. -## Développer des projets avec 4D Server +## Developing projects with 4D Server -### Mettre à jour des fichiers de projet sur le serveur +### Updating project files on the server -Le développement d'un projet 4D Server repose sur les principes suivants : +Developing a 4D Server project is based upon the following principles: - You create, test, and modify the project features in a local version of the files using 4D. To work directly with 4D Server, you can [use 4D on the same machine as 4D Server](#using-4d-on-the-same-machine). -> Il est recommandé d'utiliser un outil de gestion de version standard (par exemple Git) afin de travailler avec des branches, d'enregistrer des projets à différentes étapes et/ou d'annuler les modifications si nécessaire. +> It is recommended to use a standard source control tool (e.g. Git) in order to work with branches, to save projects at different steps, and/or to revert changes if necessary. -- 4D Server peut exécuter le fichier projet *.4DProject* (non compressé) en mode interprété, afin que 4D distant puisse se connecter et tester les fonctionnalités. Pour cela, 4D Server crée et envoie automatiquement aux machines distantes une [version .4dz](Admin/building.md#build-compiled-structure) du projet. +- 4D Server can run the *.4DProject* project file (not compressed) in interpreted mode, so that remote 4D can connect and test the features. For this purpose, 4D Server automatically creates and sends the remote machines a [.4dz version](Admin/building.md#build-compiled-structure) of the project. -- Une version .4dz mise à jour du projet est automatiquement produite lorsque cela est nécessaire, c'est-à-dire lorsque le projet a été modifié et rechargé par 4D Server. Le projet est rechargé : +- An updated .4dz version of the project is automatically produced when necessary, *i.e.* when the project has been modified and reloaded by 4D Server. The project is reloaded: - automatically, when the 4D Server application window comes to the front of the OS or when the 4D application on the same machine saves a modification (see below). - when the `RELOAD PROJECT` command is executed. Calling this command is necessary for example when you have pulled a new version of the project from the source control platform. -### Mettre à jour des fichiers de projet sur les machines distantes +### Updating project files on remote machines -Lorsqu'une version .4dz mise à jour du projet a été produite sur 4D Server, les machines 4D distantes connectées doivent se déconnecter et se reconnecter à 4D Server afin de bénéficier de la version mise à jour. +When an updated .4dz version of the project has been produced on 4D Server, connected remote 4D machines must log out and reconnect to 4D Server in order to benefit from the updated version. @@ -48,29 +48,29 @@ Lorsqu'une version .4dz mise à jour du projet a été produite sur 4D Server, l When 4D connects to a 4D Server on the same machine, the application behaves as 4D in single user mode and the design environment allows you to edit project files. Each time 4D performs a **Save all** action from the design environment (explicitly from **File** menu or implicitly by switching to application mode for example), 4D Server synchronously reloads project files. 4D waits for 4D Server to finish reloading the project files before it continues. -Veillez cependant aux différences de comportement suivantes, comparées à [l'architecture projet standard](architecture.md) : +However, you need to pay attention to the following behavior differences compared to [standard project architecture](architecture.md): -- le dossier userPreferences.{username} utilisé par 4D ne correspond pas au même dossier utilisé par 4D Server dans le dossier projet. Instead, it is a dedicated folder, named "userPreferences", stored in the project system folder (i.e., the same location as when opening a .4dz project). +- the userPreferences.{username} folder used by 4D is not the same folder used by 4D Server in the project folder. Instead, it is a dedicated folder, named "userPreferences", stored in the project system folder (i.e., the same location as when opening a .4dz project). - the folder used by 4D for derived data is not the folder named "DerivedData" in the project folder. Instead it is a dedicated folder named "DerivedDataRemote" located in the project system folder. -- the catalog.4DCatalog file is not edited by 4D but by 4D Server. Les informations du catalogue sont synchronisées à l'aide des requêtes client/serveur -- the directory.json file is not edited by 4D but by 4D Server. Les informations du répertoire sont synchronisées à l'aide des requêtes client/serveur +- the catalog.4DCatalog file is not edited by 4D but by 4D Server. Catalog information is synchronised using client/server requests +- the directory.json file is not edited by 4D but by 4D Server. Directory information is synchronised using client/server requests - 4D uses its own internal components and plug-ins instead of those in 4D Server. > It is not recommended to install plug-ins or components at the 4D or 4D Server application level. -## Enregistrement des fichiers +## File saving -Lorsque vous travaillez sur un projet dans 4D, vous pouvez utiliser les éditeurs intégrés de 4D pour créer, modifier ou sauvegarder des éléments de la structure, des méthodes, des formulaires, etc. Les modifications sont enregistrées sur disque lorsque vous sélectionnez un élément de menu **Sauvegarde**, ou lorsque la fenêtre de l'éditeur pert ou récupère le focus. +When working on a project in 4D, you can use built-in 4D editors to create, modify, or save structure items, methods, forms, etc. Modifications are saved to disk when you select a **Save** menu item, or when the editor's window loses or gets the focus. -Les éditeurs utilisant des fichiers sur le disque, d'éventuels conflits peuvent se produire si le même fichier est modifié voire supprimé de différents endroits. Par exemple, si la même méthode est modifiée dans une fenêtre d'éditeur de méthode *et* dans un éditeur de texte, la sauvegarde des deux modifications entraînera un conflit. +Since the editors use files on the disk, potential conflicts could happen if the same file is modified or even deleted from different locations. For example, if the same method is edited in a method editor window *and* in a text editor, saving both modifications will result in a conflict. -Le développement 4D comprend un gestionnaire d’accès aux fichiers permettant de contrôler les accès simultanés : +The 4D development framework includes a file access manager to control concurrent access: - if an open file is read-only at the OS level, a locked icon is displayed in the editor: ![](assets/en/Project/lockicon.png) -- if an open file is edited concurrently from different locations, 4D displays an alert dialog when trying to save the changes:![](assets/en/Project/projectReload.png) - - **Oui** : ignore les modifications de l'éditeur et recharge la version modifiée - - **Non** : enregistrer les modifications et écraser l'autre version - - **Annuler** : ne pas enregistrer +- if an open file is edited concurrently from different locations, 4D displays an alert dialog when trying to save the changes: ![](assets/en/Project/projectReload.png) + - **Yes**: discard editor changes and reload the modified version + - **No**: save changes and overwrite the other version + - **Cancel**: do not save -Cette fonctionnalité est activée pour tous les éditeurs 4D intégrés (Structure, Formulaire, Méthode, Paramètres et Boite à outils). +This feature is enabled for all built-in 4D editors (Structure, Form, Method, Settings, and Toolbox). From 7645d00e03021787eea227ff391aa128e3a235ff Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:15:32 +0100 Subject: [PATCH 006/260] New translations documentation.md (French) --- .../fr/Project/documentation.md | 146 +++++++++--------- 1 file changed, 76 insertions(+), 70 deletions(-) diff --git a/website/translated_docs/fr/Project/documentation.md b/website/translated_docs/fr/Project/documentation.md index ace60a52174ce5..2116d177d9f5f2 100644 --- a/website/translated_docs/fr/Project/documentation.md +++ b/website/translated_docs/fr/Project/documentation.md @@ -1,6 +1,6 @@ --- id: documentation -title: Documenter un projet +title: Documenting a project --- ## Aperçu @@ -8,35 +8,35 @@ title: Documenter un projet In application projects, you can document your methods as well as your forms, tables, or fields. Creating documentation is particularly appropriate for projects being developed by multiple programmers and is generally good programming practice. Documentation can contain a description of an element as well as any information necessary to understand how the element functions in the application. -Les éléments de projet suivants acceptent la documentation : +The following project elements accept documentation: -- Méthodes (méthodes base, méthodes composant, méthodes projet, méthodes formulaire, méthodes 4D Mobile, triggers et classes) -- Formulaires -- Tables et champs +- Methods (database methods, component methods, project methods, form methods, 4D Mobile methods, triggers, and classes) +- Forms +- Tables and Fields -Vos fichiers de documentation sont écrits dans la syntaxe Markdown (fichiers .md) à l'aide de n'importe quel éditeur prenant en charge le Markdown. Ils sont stockés en tant que fichiers indépendants dans votre dossier Project. +Your documentation files are written in Markdown syntax (.md files) using any editor that supports Markdown. They are stored as independant files within your project folder. -La documentation s'affiche dans la zone d'aperçu (panneau de droite) de l'Explorateur : +Documentation is displayed in the preview area (right-side panel) of the Explorer: ![](assets/en/Project/explorer_Doc.png) -Il peut également être partiellement exposé en tant que [conseils de l'éditeur de code](#viewing-documentation-in-the-code-editor). +It can also be partially exposed as [code editor tips](#viewing-documentation-in-the-code-editor). -## Fichiers documentation +## Documentation files -### Nom du fichier de documentation +### Documentation file name -Les fichiers de documentation ont le même nom que l'élément auquel ils sont rattachés, avec l'extension ".md". Par exemple, le fichier de documentation rattaché à la méthode projet `myMethod.4dm` sera nommé `myMethod.md`. +Documentation files have the same name as their attached element, with the ".md" extension. For example, the documentation file attached to the `myMethod.4dm` project method will be named `myMethod.md`. -Dans l'Explorateur, 4D affiche automatiquement le fichier de documentation avec le même nom que l'élément sélectionné (voir ci-dessous). +In the Explorer, 4D automatically displays the documentation file with the same name as the selected element (see below). -### Architecture des fichiers de documentation +### Documentation file architecture -Tous les fichiers de documentation sont stockés dans le dossier `Documentation`, situé au premier niveau du dossier Package. +All documentation files are stored in the `Documentation` folder, located at the first level of the package folder. -L'architecture du dossier `Documentation` est la suivante : +The `Documentation` folder architecture is the following: - **Documentation** + **Classes** @@ -44,7 +44,7 @@ L'architecture du dossier `Documentation` est la suivante : + **DatabaseMethods** * onStartup.md * ... - + **Formulaires** + + **Forms** * loginDial.md * ... + **Méthodes** @@ -59,89 +59,89 @@ L'architecture du dossier `Documentation` est la suivante : * table1.md * ... -- Un formulaire projet et sa méthode de formulaire projet partagent le même fichier de documentation pour le formulaire et la méthode. -- Un formulaire table et sa méthode de formulaire table partagent le même fichier de documentation pour le formulaire et la méthode. +- A project form and its project form method share the same documentation file for form and method. +- A table form and its table form method share the same documentation file for form and method. -> Renommer ou supprimer un élément documenté dans votre projet renomme ou supprime également le fichier Markdown associé à l'élément. +> Renaming or deleting a documented element in your project will also rename or delete the element's associated Markdown file. -## Documentation dans l'Explorateur +## Documentation in the Explorer -### Visualiser la documentation +### Viewing documentation -Pour afficher la documentation dans la fenêtre de l'Explorateur : +To view documentation in the Explorer window: -1. Assurez-vous que la zone d'aperçu est affichée. -2. Sélectionnez l'élément documenté dans la liste de l'Explorateur. -3. Cliquez sur le bouton **Documentation** situé sous la zone d'aperçu. +1. Make sure the preview area is displayed. +2. Select the documented element in the Explorer list. +3. Click the **Documentation** button located below the preview area. ![](assets/en/Project/comments-explo2.png) -- Si aucun fichier de documentation n'a été trouvé pour l'élément sélectionné, un bouton **Créer** s'affiche (voir ci-dessous). +- If no documentation file was found for the selected element, a **Create** button is displayed (see below). -- Sinon, s'il existe un fichier de documentation pour l'élément sélectionné, le contenu est affiché dans la zone. Le contenu n'est pas directement modifiable dans le volet. +- Otherwise, if a documentation file exists for the selected element, the contents are displayed in the area. The contents are not directly editable in the pane. -### Modifier le fichier documentation +### Editing documentation file -Vous pouvez créer et/ou modifier un fichier de documentation Markdown à partir de la fenêtre de l'Explorateur pour l'élément sélectionné. +You can create and/or edit a Markdown documentation file from the Explorer window for the selected element. -S'il n'y a pas de fichier de documentation pour l'élément sélectionné, vous pouvez : +If there is no documentation file for the selected element, you can: -- cliquez sur le bouton **Créer** dans le volet `Documentation` ou, -- choisissez l'option **Modifier la documentation...** dans le menu contextuel ou le menu d'options de l'Explorateur. +- click on the **Create** button in the `Documentation` pane or, +- choose the **Edit Documentation...** option in the contextual menu or options menu of the Explorer. ![](assets/en/Project/comments-explo3.png) -4D crée automatiquement un fichier .md nommé correctement avec un modèle de base à l'emplacement approprié et l'ouvre avec votre éditeur Markdown par défaut. +4D automatically creates an appropriately named .md file with a basic template at the relevant location and opens it with your default Markdown editor. -Si un fichier de documentation existe déjà pour l'élément sélectionné, vous pouvez l'ouvrir avec votre éditeur Markdown en choisissant l'option **Modifier la documentation...** dans le menu contextuel ou le menu d'options de l'Explorateur. +If a documentation file already exists for the selected element, you can open it with your Markdown editor by choosing the **Edit Documentation...** option in the contextual menu or options menu of the Explorer. -## Visualiser la documentation dans l'éditeur de code +## Viewing documentation in the code editor -L'éditeur de code 4D affiche une partie de la documentation d'une méthode dans son info-bulle. +The 4D code editor displays a part of a method's documentation in its help tip. ![](assets/en/Project/codeEditor_Comments.png) -Si un fichier nommé "\.md" existe dans le dossier "\/documentation", l'éditeur de code affiche (par priorité) : +If a file named "\.md" exists in "\/documentation" folder, the code editor displays (by priority): -- Tout texte saisi dans une balise de `commentaire` HTML (*\*) en haut du fichier markdown. +- Any text entered in an HTML `comment` tag (*\*) at the top of the markdown file. -- Ou, si aucune balise de `commentaire` html n'est utilisée, la première phrase après une balise `# Description` du fichier markdown. - Dans ce cas, la première ligne contient le **prototype** de la méthode, généré automatiquement par le parseur du code 4D. +- Or, if no html `comment` tag is used, the first sentence after a `# Description` tag of the markdown file. + In this case, the first line contains the **prototype** of the method, automatically generated by the 4D code parser. - > Sinon, l'éditeur de code affiche [le bloc de commentaire en haut du code de la méthode](https://doc.4d.com/4Dv18R2/4D/18-R2/Writing-a-method.300-4824019.en.html#4618226). + > Otherwise, the code editor displays [the block comment at the top of the method code](https://doc.4d.com/4Dv18R2/4D/18-R2/Writing-a-method.300-4824019.en.html#4618226). -## Définition du fichier de documentation +## Documentation file definition -4D utilise un modèle de base pour créer de nouveaux fichiers de documentation. Ce modèle propose des fonctionnalités spécifiques qui vous permettent [d'afficher des informations dans l'éditeur de code](#viewing-documentation-in-the-code-editor). +4D uses a basic template to create new documentation files. This template suggests specific features that allow you to [display information in the code editor](#viewing-documentation-in-the-code-editor). -Cependant, vous pouvez utiliser toutes les [balises Markdown prises en charge](#supported-markdown). +However, you can use any [supported Markdown tags](#supported-markdown). -De nouveaux fichiers de documentation sont créés avec les contenus par défaut suivants : +New documentation files are created with the following default contents: ![](assets/en/Project/comments-explo4.png) -| Ligne | Description | -| ----------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| \| Commentaire HTML. Utilisé en priorité comme description de méthode dans les [astuces de l'éditeur de code](#viewing-documentation-in-the-code-editor) | -| ## Description | Titre de niveau 2 en Markdown. La première phrase qui suit cette balise est utilisée comme description d'une méthode dans les astuces de l'éditeur de code si le commentaire HTML n'est pas utilisé | -| ## Example | Titre de niveau 2, vous pouvez utiliser cette zone pour afficher un exemple de code | -| \``` 4D
    Insérez votre exemple ici \` `` | Utilisé pour formater des exemples de code 4D (utilise la bibliothèque highlight.js) | +| Line | Description | +| -------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | +| \| HTML comment. Used in priority as the method description in the [code editor tips](#viewing-documentation-in-the-code-editor) | +| ## Description | Heading level 2 in Markdown. The first sentence after this tag is used as the method description in the code editor tips if HTML comment is not used | +| ## Example | Heading level 2, you can use this area to show sample code | +| \``` 4D
    Type your example here \` `` | Used to format 4D code examples (uses highlight.js library) | -### Prise en charge du markdown -- La balise de titre est prise en charge : +### Supported Markdown +- The title tag is supported: ``` # Title 1 ## Title 2 ### Title 3 ``` -- Les balises de style (italique, gras, barré) sont prises en charge : +- The style tags (italic, bold, strikethrough) are supported: ``` _italic_ @@ -151,15 +151,15 @@ _italic_ ``` -- La balise du bloc de code (\```4d ... ```) est supportée avec le surlignage du code 4D : +- The code block tag (\```4d ... ```) is supported with 4D code highlight: \``` 4d -C_TEXT($txt) -$txt:="Hello world!" + C_TEXT($txt) + $txt:="Hello world!" \` `` -- La balise de tableau est prise en charge : +- The table tag is supported: ``` | Parameter | Type | Description | @@ -168,7 +168,7 @@ $txt:="Hello world!" | toolbar | String |Toolbar name | ``` -- La balise de lien est prise en charge : +- The link tag is supported: ``` // Case 1 @@ -180,7 +180,7 @@ The [documentation](https://doc.4d.com) of the command .... [1]: https://blog.4d.com ``` -- Les balises d'image sont prises en charge : +- The image tags are supported: ``` ![image info](pictures/image.png) @@ -189,18 +189,24 @@ The [documentation](https://doc.4d.com) of the command .... [![logo 4D blog with link](https://blog.4d.com/wp-content/uploads/2016/09/logoOrignal-1.png "4D blog logo")](https://blog.4d.com) ``` -[![logo blog 4D avec lien](https://blog.4d.com/wp-content/uploads/2016/09/logoOrignal-1.png "4D blog logo")](https://blog.4d.com) +[![logo 4D blog with link](https://blog.4d.com/wp-content/uploads/2016/09/logoOrignal-1.png "4D blog logo")](https://blog.4d.com) -> Pour plus d'informations, consultez le [guide Markdown GitHug](https://guides.github.com/features/mastering-markdown/). +> For more information, see the [GitHug Markdown guide](https://guides.github.com/features/mastering-markdown/). -## Exemple +## Example -Dans le fichier `WP SwitchToolbar.md`, vous pouvez entrer le code suivant : +In the `WP SwitchToolbar.md` file, you can write: ```4d + + + +GetLogo (size) -> logo + + | Parameter | Type | in/out | Description | | --------- | ------ | ------ | ----------- | | size | Longint | in | Logo style selector (1 to 5) | @@ -209,18 +215,18 @@ Dans le fichier `WP SwitchToolbar.md`, vous pouvez entrer le code suivant : ## Description -Cette méthode retourne un logo de taille spécifique, selon la valeur du paramètre *size*. -1 = plus petite taille, 5 = plus grande taille. +This method returns a logo of a specific size, depending on the value of the *size* parameter value. +1 = smallest size, 5 = largest size. -## Exemple +## Example C_PICTURE($logo) C_LONGINT($size) -//Obtenir le plus grand logo +//Get the largest logo $logo:=GetLogo(5) ``` -- Vue de l'Explorateur : ![](assets/en/Project/explorer_Doc.png) +- Explorer view: ![](assets/en/Project/explorer_Doc.png) -- Vue de l’Éditeur de code : ![](assets/en/Project/comments-explo5.png) +- Code editor view: ![](assets/en/Project/comments-explo5.png) From 4faf1eecb3375e7b1d8ad56d23f19733ea9834fd Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:15:34 +0100 Subject: [PATCH 007/260] New translations $asArray.md (French) --- website/translated_docs/fr/REST/$asArray.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/website/translated_docs/fr/REST/$asArray.md b/website/translated_docs/fr/REST/$asArray.md index 40d937daf77fb2..a0b7b75b361e1e 100644 --- a/website/translated_docs/fr/REST/$asArray.md +++ b/website/translated_docs/fr/REST/$asArray.md @@ -4,19 +4,19 @@ title: '$asArray' --- -Retourne le résultat d'une requête sous forme de tableau (c'est-à-dire une collection) au lieu d'un objet JSON. +Returns the result of a query in an array (i.e. a collection) instead of a JSON object. ## Description -Si vous souhaitez obtenir la réponse sous forme de tableau, il vous suffit d'ajouter `$asArray` à votre requête REST (*ex :*, `$asArray=true`). +If you want to receive the response in an array, you just have to add `$asArray` to your REST request (*e.g.*, `$asArray=true`). -## Exemple -Voici un exemple pour obtenir une réponse sous forme de tableau. +## Example +Here is an example or how to receive the response in an array. `GET /rest/Company/?$filter="name begin a"&$top=3&$asArray=true` -**Réponse** : +**Response**: ```` [ @@ -56,7 +56,7 @@ Voici un exemple pour obtenir une réponse sous forme de tableau. ] ```` -Les mêmes données au format JSON par défaut : +The same data in its default JSON format: ```` { From 897769532eb1890c6f8e771a4ff9de782b630eb1 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:15:36 +0100 Subject: [PATCH 008/260] New translations $atomic_$atonce.md (French) --- website/translated_docs/fr/REST/$atomic_$atonce.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/website/translated_docs/fr/REST/$atomic_$atonce.md b/website/translated_docs/fr/REST/$atomic_$atonce.md index 22a59719ad6326..493f5fbd752900 100644 --- a/website/translated_docs/fr/REST/$atomic_$atonce.md +++ b/website/translated_docs/fr/REST/$atomic_$atonce.md @@ -4,19 +4,19 @@ title: '$atomic/$atonce' --- -Autorise les actions d'une requête REST à faire partie d'une transaction. Si aucune erreur n'est générée, la transaction est validée. Sinon, la transaction est annulée. +Allows the actions in the REST request to be in a transaction. If there are no errors, the transaction is validated. Otherwise, the transaction is cancelled. ## Description -Lorsque plusieurs actions sont réunies, vous pouvez utiliser `$atomic/$atonce` pour vous assurer qu'aucune action ne se réalise si l'une d'elle échoue. Vous pouvez utiliser `$atomic` ou `$atonce`. +When you have multiple actions together, you can use `$atomic/$atonce` to make sure that none of the actions are completed if one of them fails. You can use either `$atomic` or `$atonce`. -## Exemple -Nous appelons la requête REST suivante dans une transaction. +## Example +We call the following REST request in a transaction. `POST /rest/Employee?$method=update&$atomic=true` -**Données POST** : +**POST data**: ```` [ @@ -31,7 +31,7 @@ Nous appelons la requête REST suivante dans une transaction. ] ```` -Nous obtenons l'erreur suivante dans la deuxième entité ; la première entité n'est donc pas sauvegardée : +We get the following error in the second entity and therefore the first entity is not saved either: ```` { @@ -64,4 +64,4 @@ Nous obtenons l'erreur suivante dans la deuxième entité ; la première entité ] } ```` -> Même si le salaire de la première entité porte la valeur 45000, cette valeur n'a pas été sauvegardée sur le serveur et le timestamp (__STAMP)* n'a pas été modifié. Si nous rechargeons l'entité, la valeur précédente s'affichera. +> Even though the salary for the first entity has a value of 45000, this value was not saved to the server and the *timestamp (__STAMP)* was not modified either. If we reload the entity, we will see the previous value. From a4bbe717be55c1ba3cefcc28b16e20197ef1d7fd Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:15:38 +0100 Subject: [PATCH 009/260] New translations $attributes.md (French) --- .../translated_docs/fr/REST/$attributes.md | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/website/translated_docs/fr/REST/$attributes.md b/website/translated_docs/fr/REST/$attributes.md index af8e1f997b291c..bc8b65d3152804 100644 --- a/website/translated_docs/fr/REST/$attributes.md +++ b/website/translated_docs/fr/REST/$attributes.md @@ -3,37 +3,37 @@ id: attributes title: '$attributes' --- -Permet de sélectionner les attributs relationnels à obtenir à partir de la dataclass (par exemple, `Company(1)?$attributes=employees.lastname` or `Employee?$attributes=employer.name`). +Allows selecting the related attribute(s) to get from the dataclass (*e.g.*, `Company(1)?$attributes=employees.lastname` or `Employee?$attributes=employer.name`). ## Description -Lorsque vous avez des attributs relationnels dans une dataclass, utilisez `$attributes` pour définir le chemin des attributs dont vous souhaitez obtenir les valeurs pour l'entité ou les entités associées. +When you have relation attributes in a dataclass, use `$attributes` to define the path of attributes whose values you want to get for the related entity or entities. -Vous pouvez appliquer des `$attributes` à une entité (par exemple, People (1)) ou à une entity selection (par exemple, People/$entityset/0AF4679A5C394746BFEB68D2162A19FF). +You can apply `$attributes` to an entity (*e.g.*, People(1)) or an entity selection (*e.g.*, People/$entityset/0AF4679A5C394746BFEB68D2162A19FF) . -- Si `$attributes` n'est pas spécifié dans une requête, ou si la valeur "*" est passée, tous les attributs disponibles sont extraits. Les attributs **d'entité relative** sont extraits avec la forme simple : un objet avec la propriété `__KEY` (clé primaire) et `URI`. Les attributs des **entités relatives** ne sont pas extraits. +- If `$attributes` is not specified in a query, or if the "*" value is passed, all available attributes are extracted. **Related entity** attributes are extracted with the simple form: an object with property `__KEY` (primary key) and `URI`. **Related entities** attributes are not extracted. -- Si `$attributes` est spécifié pour les attributs **d'entité relative ** : - - `$attributes=relatedEntity` : l'entité relative est retournée sous une forme simple (propriété __KEY différée (clé primaire)) et `URI`. - - `$attributes=relatedEntity.*` : tous les attributs de l'entité relative sont retournés - - `$attributes=relatedEntity.attributePath1, relatedEntity.attributePath2, ...` : seuls ces attributs de l'entité relative sont retournés. +- If `$attributes` is specified for **related entity** attributes: + - `$attributes=relatedEntity`: the related entity is returned with simple form (deferred __KEY property (primary key)) and `URI`. + - `$attributes=relatedEntity.*`: all the attributes of the related entity are returned + - `$attributes=relatedEntity.attributePath1, relatedEntity.attributePath2, ...`: only those attributes of the related entity are returned. -- Si `$attributes` est spécifié pour les attributs **d'entités relatives** : - - `$attributes=relatedEntities.*` : toutes les propriétés des entités relatives sont retournées - - `$attributes=relatedEntities.attributePath1, relatedEntity.attributePath2, ...` : seuls ces attributs des entités relatives sont retournés. +- If `$attributes` is specified for **related entities** attributes: + - `$attributes=relatedEntities.*`: all the properties of all the related entities are returned + - `$attributes=relatedEntities.attributePath1, relatedEntities.attributePath2, ...`: only those attributes of the related entities are returned. -## Exemples avec plusieurs entités relatives +## Example with related entities -Si nous passons la requête REST suivante pour la classe de datastore Company (qui possède un attribut de relation "employees"): +If we pass the following REST request for our Company datastore class (which has a relation attribute "employees"): `GET /rest/Company(1)/?$attributes=employees.lastname` -**Réponse** : +**Response**: ``` { @@ -64,23 +64,23 @@ Si nous passons la requête REST suivante pour la classe de datastore Company (q } ``` -Si vous souhaitez obtenir tous les attributs des employés : +If you want to get all attributes from employees: `GET /rest/Company(1)/?$attributes=employees.*` -Si vous souhaitez obtenir le nom de famille et les attributs de nom de poste des employés : +If you want to get last name and job name attributes from employees: `GET /rest/Company(1)/?$attributes=employees.lastname,employees.jobname` -## Exemples avec une entité relative +## Example with related entity -Si nous passons la requête REST suivante pour la classe de datastore Employee (qui a plusieurs attributs relationnels, y compris "employer") : +If we pass the following REST request for our Employee datastore class (which has several relation attributes, including "employer"): `GET /rest/Employee(1)?$attributes=employer.name` -**Réponse** : +**Response**: ``` { @@ -97,10 +97,10 @@ Si nous passons la requête REST suivante pour la classe de datastore Employee ( } ``` -Si vous souhaitez obtenir tous les attributs de l'employeur : +If you want to get all attributes of the employer: `GET /rest/Employee(1)?$attributes=employer.*` -Si vous souhaitez obtenir les noms de famille de tous les employés de l'employeur : +If you want to get the last names of all employees of the employer: `GET /rest/Employee(1)?$attributes=employer.employees.lastname` \ No newline at end of file From 3d1be34e3ff97d880752b82774fe343464721e5f Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:15:40 +0100 Subject: [PATCH 010/260] New translations $catalog.md (French) --- website/translated_docs/fr/REST/$catalog.md | 112 ++++++++++---------- 1 file changed, 56 insertions(+), 56 deletions(-) diff --git a/website/translated_docs/fr/REST/$catalog.md b/website/translated_docs/fr/REST/$catalog.md index 553e211decc910..9d7ee7f7f892fb 100644 --- a/website/translated_docs/fr/REST/$catalog.md +++ b/website/translated_docs/fr/REST/$catalog.md @@ -4,43 +4,43 @@ title: '$catalog' --- -Le catalogue décrit toutes les dataclass et les attributs disponibles dans le datastore. +The catalog describes all the dataclasses and attributes available in the datastore. -## Syntaxe +## Available syntaxes -| Syntaxe | Exemple | Description | -| --------------------------------------------- | -------------------- | -------------------------------------------------------------------------------------- | -| [**$catalog**](#catalog) | `/$catalog` | Retourne une liste des dataclasse de votre projet avec deux URI | -| [**$catalog/$all**](#catalogall) | `/$catalog/$all` | Retourne des informations sur toutes les dataclasse de votre projet et leurs attributs | -| [**$catalog/{dataClass}**](#catalogdataclass) | `/$catalog/Employee` | Renvoie des informations sur une dataclass et ses attributs | +| Syntax | Example | Description | +| --------------------------------------------- | -------------------- | -------------------------------------------------------------------------------- | +| [**$catalog**](#catalog) | `/$catalog` | Returns a list of the dataclasses in your project along with two URIs | +| [**$catalog/$all**](#catalogall) | `/$catalog/$all` | Returns information about all of your project's dataclasses and their attributes | +| [**$catalog/{dataClass}**](#catalogdataclass) | `/$catalog/Employee` | Returns information about a dataclass and its attributes | ## $catalog -Retourne une liste de dataclass dans votre projet avec deux URI : une pour accéder aux informations sur sa structure et une pour récupérer les données de la dataclass +Returns a list of the dataclasses in your project along with two URIs: one to access the information about its structure and one to retrieve the data in the dataclass ### Description -Lorsque vous appelez `$catalog`, une liste des dataclass est retournée avec deux URI pour chaque dataclass dans le datastore de votre projet. +When you call `$catalog`, a list of the dataclasses is returned along with two URIs for each dataclass in your project's datastore. -Seules les dataclass exposées apparaissent dans cette liste pour le datastore de votre projet. Pour plus d'informations, reportez-vous à la section [**Exposition des tableaux et des champs**](configuration.md#exposing-tables-and-fields). +Only the exposed dataclasses are shown in this list for your project's datastore. For more information, please refer to [**Exposing tables and fields**](configuration.md#exposing-tables-and-fields) section. -Voici une description des propriétés retournées pour chaque dataclass dans le datastore de votre projet : +Here is a description of the properties returned for each dataclass in your project's datastore: -| Propriété | Type | Description | -| --------- | ------ | ------------------------------------------------------------------------------------ | -| name | Chaine | Nom de la dataclass. | -| uri | Chaine | Un URI vous permettant d'obtenir des informations sur la dataclass et ses attributs. | -| dataURI | Chaine | URI vous permettant d'afficher les données dans la dataclass. | +| Property | Type | Description | +| -------- | ------ | --------------------------------------------------------------------------------- | +| name | Chaine | Name of the dataclass. | +| uri | Chaine | A URI allowing you to obtain information about the |dataclass and its attributes. | +| dataURI | Chaine | A URI that allows you to view the data in the dataclass. | -### Exemple +### Example `GET /rest/$catalog` -**Résultat** : +**Result**: ```` { @@ -62,20 +62,20 @@ Voici une description des propriétés retournées pour chaque dataclass dans le ## $catalog/$all -Retourne des informations sur toutes les dataclasse de votre projet et leurs attributs +Returns information about all of your project's dataclasses and their attributes ### Description -En appelant `$catalog/$all`, vous pouvez recevoir des informations détaillées sur les attributs de chacune des classes du datastore du modèle courant de votre projet. +Calling `$catalog/$all` allows you to receive detailed information about the attributes in each of the datastore classes in your project's active model. -Pour plus d'informations sur ce qui est retourné pour chaque classe du datastore et ses attributs, utilisez [`$catalog/{dataClass}`](#catalogdataClass). +For more information about what is returned for each datastore class and its attributes, use [`$catalog/{dataClass}`](#catalogdataClass). -### Exemple +### Example `GET /rest/$catalog/$all` -**Résultat** : +**Result**: ```` { @@ -183,62 +183,62 @@ Pour plus d'informations sur ce qui est retourné pour chaque classe du datastor ## $catalog/{dataClass} -Renvoie des informations sur une dataclass et ses attributs +Returns information about a dataclass and its attributes ### Description -L'appel de `$catalog/{dataClass}` pour une dataclass spécifique retournera les informations suivantes sur la dataclass et les attributs qu'elle contient. Si vous souhaitez récupérer ces informations pour toutes les classes de datastore dans le datastore de votre projet, utilisez [`$catalog/$all`](#catalogall). +Calling `$catalog/{dataClass}` for a specific dataclass will return the following information about the dataclass and the attributes it contains. If you want to retrieve this information for all the datastore classes in your project's datastore, use [`$catalog/$all`](#catalogall). -Les informations que vous récupérez concernent : +The information you retrieve concerns the following: * Dataclass -* Attribut(s) -* Méthode(s) le cas échéant -* Clé primaire +* Attribute(s) +* Method(s) if any +* Primary key ### DataClass -Les propriétés suivantes sont retournées pour une dataclass exposée : +The following properties are returned for an exposed dataclass: -| Propriété | Type | Description | -| -------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------- | -| name | Chaine | Nom de la dataclass | -| collectionName | Chaine | Nom d'une entity selection dans la dataclass | -| tableNumber | Nombre | Numéro de la table dans la base 4D | -| scope | Chaine | Étendue de la dataclass (à noter que seules les classes du datastore dont **l'étendue** (scope) est publique sont affichées) | -| dataURI | Chaine | Un URI aux données de la dataclass | +| Property | Type | Description | +| -------------- | ------ | -------------------------------------------------------------------------------------------------- | +| name | Chaine | Name of the dataclass | +| collectionName | Chaine | Name of an entity selection on the dataclass | +| tableNumber | Number | Table number in the 4D database | +| scope | Chaine | Scope for the dataclass (note that only datastore classes whose **Scope** is public are displayed) | +| dataURI | Chaine | A URI to the data in the dataclass | -### Attribut(s) +### Attribute(s) -Voici les propriétés de chaque attribut exposé qui sont retournées : +Here are the properties for each exposed attribute that are returned: -| Propriété | Type | Description | -| ----------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| name | Chaine | Le nom de l’attribut. | -| kind | Chaine | Type d'attribut (stockage ou relatedEntity). | -| fieldPos | Nombre | Position du champ dans la table de la base. | -| scope | Chaine | Portée de l'attribut (seuls les attributs dont la portée est publique apparaîtront). | -| indexed | Chaine | Si un **type d'index** a été sélectionné, cette propriété retournera true. Sinon, cette propriété n'apparaîtra pas. | -| type | Chaine | Type d'attribut de chaîne (booléen, blob, octet, date, durée, image, long, long64, numérique, chaîne, uuid ou mot) ou la classe de datastore pour un attribut de relation N-> 1. | -| identifying | Booléen | Cette propriété retourne True si l'attribut est la clé primaire. Sinon, cette propriété n'apparaîtra pas. | -| path | Chaine | Nom du lien d'un attribut relatedEntity ou relateEntities. | -| foreignKey | Chaine | Pour un attribut relatedEntity, nom de l'attribut associé. | -| inverseName | Chaine | Nom de la relation opposée pour un attribut relatedEntity ou relatedEntities. | +| Property | Type | Description | +| ----------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | +| name | Chaine | Attribute name. | +| kind | Chaine | Attribute type (storage or relatedEntity). | +| fieldPos | Number | Position of the field in the database table). | +| scope | Chaine | Scope of the attribute (only those attributes whose scope is Public will appear). | +| indexed | Chaine | If any **Index Kind** was selected, this property will return true. Otherwise, this property does not appear. | +| type | Chaine | Attribute type (bool, blob, byte, date, duration, image, long, long64, number, string, uuid, or word) or the datastore class for a N->1 relation attribute. | +| identifying | Booléen | This property returns True if the attribute is the primary key. Otherwise, this property does not appear. | +| path | Chaine | Name of the relation for a relatedEntity or relateEntities attribute. | +| foreignKey | Chaine | For a relatedEntity attribute, name of the related attribute. | +| inverseName | Chaine | Name of the opposite relation for a relatedEntity or relateEntities attribute. | -### Clé primaire +### Primary Key -L'objet clé retourne le nom de l'attribut (**name**) défini comme **clé primaire** pour la classe du datastore. +The key object returns the **name** of the attribute defined as the **Primary Key** for the datastore class. -### Exemple -Vous pouvez récupérer les informations concernant une classe de datastore spécifique. +### Example +You can retrieve the information regarding a specific datastore class. `GET /rest/$catalog/Employee` -**Résultat** : +**Result**: ```` { From 2dab2491999b1871432c11da8d565785f4ac6bcf Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:15:44 +0100 Subject: [PATCH 011/260] New translations $compute.md (French) --- website/translated_docs/fr/REST/$compute.md | 44 ++++++++++----------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/website/translated_docs/fr/REST/$compute.md b/website/translated_docs/fr/REST/$compute.md index 422dda8313774b..d60c8fcfaf6a9a 100644 --- a/website/translated_docs/fr/REST/$compute.md +++ b/website/translated_docs/fr/REST/$compute.md @@ -3,41 +3,41 @@ id: compute title: '$compute' --- -Calculez des attributs spécifiques (par exemple, `Employee/salary/?$compute=sum)` ou dans le cas d'un attribut Objet (par exemple, Employee/objectAtt.property1/?$compute=sum) +Calculate on specific attributes (*e.g.*, `Employee/salary/?$compute=sum)` or in the case of an Object attribute (*e.g.*, Employee/objectAtt.property1/?$compute=sum) ## Description -Ce paramètre vous permet de réaliser des calculs avec vos données. +This parameter allows you to do calculations on your data. -Si vous souhaitez effectuer un calcul avec un attribut, saisissez ce qui suit : +If you want to perform a calculation on an attribute, you write the following: `GET /rest/Employee/salary/?$compute=$all` -Si vous souhaitez passer un attribut Objet, vous devez passer l'une de ses propriétés. Par exemple: +If you want to pass an Object attribute, you must pass one of its property. For example: `GET /rest/Employee/objectAtt.property1/?$compute=$all` -Vous pouvez utiliser l'un des mots clés suivants : +You can use any of the following keywords: -| Mot-clé | Description | -| ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| $all | Un objet JSON qui définit toutes les fonctions de l'attribut (moyenne, nombre, min, max et somme pour les attributs de type Numérique et count, min et max pour les attributs de type Chaîne | -| average | Obtenir la moyenne d'un attribut numérique | -| count | Obtenir le nombre total dans la collection ou la classe de datastore (dans les deux cas, vous devez spécifier un attribut) | -| min | Obtenir la valeur minimale d'un attribut numérique ou la plus petite valeur d'un attribut de type Chaîne | -| max | Obtenir la valeur maximale d'un attribut numérique ou la plus grande valeur d'un attribut de type Chaîne | -| sum | Obtenir la somme d'un attribut numérique | +| Keyword | Description | +| ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| $all | A JSON object that defines all the functions for the attribute (average, count, min, max, and sum for attributes of type Number and count, min, and max for attributes of type String | +| average | Get the average on a numerical attribute | +| count | Get the total number in the collection or datastore class (in both cases you must specify an attribute) | +| min | Get the minimum value on a numerical attribute or the lowest value in an attribute of type String | +| max | Get the maximum value on a numerical attribute or the highest value in an attribute of type String | +| sum | Get the sum on a numerical attribute | -## Exemple +## Example -Si vous souhaitez obtenir tous les calculs pour un attribut de type Numérique, vous pouvez écrire : +If you want to get all the computations for an attribute of type Number, you can write: `GET /rest/Employee/salary/?$compute=$all` -**Réponse** : +**Response**: ```` { @@ -51,11 +51,11 @@ Si vous souhaitez obtenir tous les calculs pour un attribut de type Numérique, } ```` -Si vous souhaitez obtenir tous les calculs pour un attribut de type Chaîne, vous pouvez écrire : +If you want to get all the computations for an attribute of type String, you can write: `GET /rest/Employee/firstName/?$compute=$all` -**Réponse** : +**Response**: ```` { @@ -67,18 +67,18 @@ Si vous souhaitez obtenir tous les calculs pour un attribut de type Chaîne, vou } ```` -Si vous souhaitez obtenir un calcul avec un attribut, vous pouvez écrire ce qui suit : +If you want to just get one calculation on an attribute, you can write the following: `GET /rest/Employee/salary/?$compute=sum` -**Réponse** : +**Response**: `235000` -Si vous souhaitez effectuer un calcul avec un attribut Objet, vous pouvez saisir ce qui suit : +If you want to perform a calculation on an Object attribute, you can write the following: `GET /rest/Employee/objectAttribute.property1/?$compute=sum` -Réponse : +Response: `45` \ No newline at end of file From 12183151e91aec36a4deec5da85ee61dc082bf29 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:15:46 +0100 Subject: [PATCH 012/260] New translations $directory.md (French) --- website/translated_docs/fr/REST/$directory.md | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/website/translated_docs/fr/REST/$directory.md b/website/translated_docs/fr/REST/$directory.md index 6929c768eb70fe..f0ac78e4aea2cf 100644 --- a/website/translated_docs/fr/REST/$directory.md +++ b/website/translated_docs/fr/REST/$directory.md @@ -3,27 +3,27 @@ id: directory title: '$directory' --- -Le répertoire gère l'accès des utilisateurs via les requêtes REST. +The directory handles user access through REST requests. ## $directory/login -Ouvre une session REST sur votre application 4D et connecte l'utilisateur. +Opens a REST session on your 4D application and logs in the user. ### Description -Utilisez `$directory/login` pour ouvrir une session dans votre application 4D via REST et connectez un utilisateur. Vous pouvez également modifier le timeout par défaut de la session 4D. +Use `$directory/login` to open a session in your 4D application through REST and login a user. You can also modify the default 4D session timeout. -Tous les paramètres doivent être passés dans les **en-têtes** d'une méthode POST : +All parameters must be passed in **headers** of a POST method: -| Clé de l'en-tête | Valeur de l'en-tête | -| ------------------ | -------------------------------------------------------------------------------------------------- | -| username-4D | Utilisateur - Non obligatoire | -| password-4D | Mot de passe - Non obligatoire | -| hashed-password-4D | Mot de passe hâché - Non obligatoire | -| session-4D-length | Timeout d'inactivité de la session (en minutes). Ne peut pas être inférieur à 60 - Non obligatoire | +| Header key | Header value | +| ------------------ | ---------------------------------------------------------------------------- | +| username-4D | User - Not mandatory | +| password-4D | Password - Not mandatory | +| hashed-password-4D | Hashed password - Not mandatory | +| session-4D-length | Session inactivity timeout (minutes). Cannot be less than 60 - Not mandatory | -### Exemple +### Example ```4d C_TEXT($response;$body_t) @@ -38,9 +38,9 @@ $hValues{3}:=120 $httpStatus:=HTTP Request(HTTP POST method;"database.example.com:9000";$body_t;$response;$hKey;$hValues) ``` -**Résultat** : +**Result**: -Si la connexion a réussi, le résultat sera le suivant : +If the login was successful, the result will be: ``` { @@ -48,7 +48,7 @@ Si la connexion a réussi, le résultat sera le suivant : } ``` -Sinon, la réponse sera la suivante : +Otherwise, the response will be: ``` { From 9b304e9c3e8f92223025e0e4b1ac868a2162abbc Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:15:48 +0100 Subject: [PATCH 013/260] New translations $distinct.md (French) --- website/translated_docs/fr/REST/$distinct.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/website/translated_docs/fr/REST/$distinct.md b/website/translated_docs/fr/REST/$distinct.md index 77dec14a810381..6c6c98ab886a47 100644 --- a/website/translated_docs/fr/REST/$distinct.md +++ b/website/translated_docs/fr/REST/$distinct.md @@ -4,21 +4,21 @@ title: '$distinct' --- -Retourne les différentes valeurs d'un attribut spécifique dans une collection (par exemple, `Company/name?$filter="name=a*"&$distinct=true`) +Returns the distinct values for a specific attribute in a collection (*e.g.*, `Company/name?$filter="name=a*"&$distinct=true`) ## Description -`$distinct` vous permet de retourner une collection contenant les différentes valeurs d'une requête sur un attribut spécifique. Un seul attribut dans la dataclass peut être spécifié. Généralement, le type Chaîne est idéal; cependant, vous pouvez également l'utiliser sur n'importe quel type d'attribut pouvant contenir plusieurs valeurs. +`$distinct` allows you to return a collection containing the distinct values for a query on a specific attribute. Only one attribute in the dataclass can be specified. Generally, the String type is best; however, you can also use it on any attribute type that could contain multiple values. -Vous pouvez également utiliser `$skip` et `$top/$limit` si vous souhaitez parcourir la sélection avant qu'elle ne soit placée dans un tableau. +You can also use `$skip` and `$top/$limit` as well, if you'd like to navigate the selection before it's placed in an array. -## Exemple -Dans l'exemple ci-dessous, nous souhaitons récupérer les différentes valeurs d'un nom de société commençant par la lettre "a" : +## Example +In our example below, we want to retrieve the distinct values for a company name starting with the letter "a": `GET /rest/Company/name?$filter="name=a*"&$distinct=true` -**Réponse** : +**Response**: ```` [ From 17f901e6ad9b04661a15372b7136f2d32bc97613 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:15:50 +0100 Subject: [PATCH 014/260] New translations $entityset.md (French) --- website/translated_docs/fr/REST/$entityset.md | 70 +++++++++---------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/website/translated_docs/fr/REST/$entityset.md b/website/translated_docs/fr/REST/$entityset.md index b3c8c4efa6cd8b..7835c5075ab54e 100644 --- a/website/translated_docs/fr/REST/$entityset.md +++ b/website/translated_docs/fr/REST/$entityset.md @@ -3,73 +3,73 @@ id: entityset title: '$entityset' --- -Après avoir [créé un ensemble d'entités]($method.md#methodentityset) à l'aide de `$method=entityset`, vous pouvez ensuite l'utiliser ultérieurement. +After [creating an entity set]($method.md#methodentityset) by using `$method=entityset`, you can then use it subsequently. -## Syntaxe +## Available syntaxes -| Syntaxe | Exemple | Description | -| ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | -| [**$entityset/{entitySetID}**](#entitysetentitySetID) | `/People/$entityset/0ANUMBER` | Récupère un ensemble d'entités existant | -| [**$entityset/{entitySetID}?$operator...&$otherCollection**](#entitysetentitysetidoperatorothercollection) | `/Employee/$entityset/0ANUMBER?$logicOperator=AND &$otherCollection=C0ANUMBER` | Crée un nouvel ensemble d'entités à partir de la comparaison d'ensembles d'entités existants | +| Syntax | Example | Description | +| ---------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- | ------------------------------------------------------------ | +| [**$entityset/{entitySetID}**](#entitysetentitySetID) | `/People/$entityset/0ANUMBER` | Retrieves an existing entity set | +| [**$entityset/{entitySetID}?$operator...&$otherCollection**](#entitysetentitysetidoperatorothercollection) | `/Employee/$entityset/0ANUMBER?$logicOperator=AND &$otherCollection=C0ANUMBER` | Creates a new entity set from comparing existing entity sets | ## $entityset/{entitySetID} -Récupère un ensemble d'entités existant (*e.g.*, `People/$entityset/0AF4679A5C394746BFEB68D2162A19FF`) +Retrieves an existing entity set (*e.g.*, `People/$entityset/0AF4679A5C394746BFEB68D2162A19FF`) ### Description -Cette syntaxe vos permet d'exécuter toute opération sur un ensemble d'entités défini. +This syntax allows you to execute any operation on a defined entity set. -Étant donné que les ensembles d'entités sont limités par le temps (par défaut ou bien après avoir appelé `$timeout` pour définir la limite souhaitée), vous pouvez appeler `$savedfilter` et `$savedorderby` pour sauvegarder le filtre et trier par instructions lorsque vous créez un ensemble d'entités. +Because entity sets have a time limit on them (either by default or after calling `$timeout` with your own limit), you can call `$savedfilter` and `$savedorderby` to save the filter and order by statements when you create an entity set. -Lorsque vous récupérez un ensemble d'entités existant stocké dans le cache de 4D Server, vous pouvez également appliquer l'un des éléments suivants à l'ensemble d'entités : [`$expand`]($expand.md), [`$filter`]($filter), [`$orderby`]($orderby), [`$skip`]($skip.md), et [`$top/$limit`]($top_$limit.md). +When you retrieve an existing entity set stored in 4D Server's cache, you can also apply any of the following to the entity set: [`$expand`]($expand.md), [`$filter`]($filter), [`$orderby`]($orderby), [`$skip`]($skip.md), and [`$top/$limit`]($top_$limit.md). -### Exemple +### Example -Après avoir créé un ensemble d'entités, l'ID de l'ensemble d'entités est retourné avec les données. Vous appelez cet ID de la manière suivante : +After you create an entity set, the entity set ID is returned along with the data. You call this ID in the following manner: `GET /rest/Employee/$entityset/9718A30BF61343C796345F3BE5B01CE7` ## $entityset/{entitySetID}?$operator...&$otherCollection -Créez un autre ensemble d'entités basé sur des ensembles d'entités préalablement créés +Create another entity set based on previously created entity sets -| Paramètres | Type | Description | -| ---------------- | ------ | --------------------------------------------------------------------- | -| $operator | Chaine | L'un des opérateurs logiques à tester avec l'autre ensemble d'entités | -| $otherCollection | Chaine | ID de l'ensemble d'entités | +| Parameter | Type | Description | +| ---------------- | ------ | -------------------------------------------------------------- | +| $operator | Chaine | One of the logical operators to test with the other entity set | +| $otherCollection | Chaine | Entity set ID | ### Description -Après avoir créé un ensemble d'entités (ensemble d'entités n°1) à l'aide de `$method=entityset`, vous pouvez ensuite créer un autre ensemble d'entités en utilisant la syntaxe `$entityset/{entitySetID}?$operator... &$otherCollection`, la propriété `$operator` (dont les valeurs sont indiquées ci-dessous), et un autre ensemble d'entités (jeu d'entités n°2) défini par la propriété `$otherCollection`. Les deux ensembles d'entités doivent être dans la même classe de datastore. +After creating an entity set (entity set #1) by using `$method=entityset`, you can then create another entity set by using the `$entityset/{entitySetID}?$operator... &$otherCollection` syntax, the `$operator` property (whose values are shown below), and another entity set (entity set #2) defined by the `$otherCollection` property. The two entity sets must be in the same datastore class. -Vous pouvez ensuite créer un autre ensemble d'entités contenant les résultats de cet appel en utilisant le `$method=entityset` à la fin de la requête REST. +You can then create another entity set containing the results from this call by using the `$method=entityset` at the end of the REST request. -Voici les opérateurs logiques : +Here are the logical operators: -| Opérateur | Description | -| --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| AND | Retourne les entités communes aux deux ensembles d'entités | -| OU | Retourne les entités contenues dans les deux ensembles d'entités | -| EXCEPT | Retourne les entités de l'ensemble d'entités #1 moins celles de l'ensemble d'entités #2 | -| INTERSECT | Retourne true ou false s'il existe une intersection des entités dans les deux ensembles d'entités (ce qui signifie qu'au moins une entité est commune aux deux ensembles d'entités) | -> Les opérateurs logiques ne sont pas sensibles à la casse, vous pouvez donc écrire "AND" ou "and". +| Operator | Description | +| --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | +| AND | Returns the entities in common to both entity sets | +| OR | Returns the entities in both entity sets | +| EXCEPT | Returns the entities in entity set #1 minus those in entity set #2 | +| INTERSECT | Returns either true or false if there is an intersection of the entities in both entity sets (meaning that least one entity is common in both entity sets) | +> The logical operators are not case-sensitive, so you can write "AND" or "and". -Vous trouverez ci-dessous une représentation des opérateurs logiques basés sur deux ensembles d'entités. La section rouge correspond à ce qui est retourné. +Below is a representation of the logical operators based on two entity sets. The red section is what is returned. **AND** ![](assets/en/REST/and.png) -**OU** +**OR** ![](assets/en/REST/or.png) @@ -78,21 +78,21 @@ Vous trouverez ci-dessous une représentation des opérateurs logiques basés su ![](assets/en/REST/except.png) -La syntaxe est la suivante : +The syntax is as follows: `GET /rest/dataClass/$entityset/entitySetID?$logicOperator=AND&$otherCollection=entitySetID` -### Exemple -Dans l'exemple ci-dessous, nous retournons les entités qui se trouvent dans les deux ensembles d'entités puisque nous utilisons l'opérateur logique AND : +### Example +In the example below, we return the entities that are in both entity sets since we are using the AND logical operator: `GET /rest/Employee/$entityset/9718A30BF61343C796345F3BE5B01CE7?$logicOperator=AND&$otherCollection=C05A0D887C664D4DA1B38366DD21629B` -Si nous souhaitons savoir si les deux ensembles d'entités se croisent, nous pouvons écrire ce qui suit : +If we want to know if the two entity sets intersect, we can write the following: `GET /rest/Employee/$entityset/9718A30BF61343C796345F3BE5B01CE7?$logicOperator=intersect&$otherCollection=C05A0D887C664D4DA1B38366DD21629B` -S'il existe une intersection, cette requête retourne true. Sinon, elle retourne false. +If there is an intersection, this query returns true. Otherwise, it returns false. -Dans l'exemple suivant, nous créons un nouvel ensemble d'entités qui combine toutes les entités des deux ensembles d'entités : +In the following example we create a new entity set that combines all the entities in both entity sets: `GET /rest/Employee/$entityset/9718A30BF61343C796345F3BE5B01CE7?$logicOperator=OR&$otherCollection=C05A0D887C664D4DA1B38366DD21629B&$method=entityset` From 20a0d885b679ebc1c41924980505849ad6efa3f7 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:15:52 +0100 Subject: [PATCH 015/260] New translations $expand.md (French) --- website/translated_docs/fr/REST/$expand.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/website/translated_docs/fr/REST/$expand.md b/website/translated_docs/fr/REST/$expand.md index b58a984a7e914e..37e2ce4803fcda 100644 --- a/website/translated_docs/fr/REST/$expand.md +++ b/website/translated_docs/fr/REST/$expand.md @@ -4,22 +4,22 @@ title: '$expand' --- -Développe une image stockée dans un attribut Image (par exemple, `Employee(1)/photo?$imageformat=best&$expand=photo`)
    ou
    Développe un attribut BLOB pour l'enregistrer. +Expands an image stored in an Image attribute (*e.g.*, `Employee(1)/photo?$imageformat=best&$expand=photo`)
    or
    Expands an BLOB attribute to save it. -> **Compatibilité** : pour des raisons de compatibilité, $expand peut être utilisé pour développer un attribut relationnel (par exemple, `Company(1)?$expand= staff` ou `EmployeeEmployee/?$filter="firstName BEGIN a"&$expand=employer`). Il est cependant recommandé d'utiliser [`$attributes`]($attributes.md) pour cette fonctionnalité. +> **Compatibility**: For compatibility reasons, $expand can be used to expand a relational attribute (*e.g.*, `Company(1)?$expand=staff` or `Employee/?$filter="firstName BEGIN a"&$expand=employer`). It is however recommended to use [`$attributes`]($attributes.md) for this feature. -## Affichage d'un attribut d'image +## Viewing an image attribute -Si vous souhaitez afficher intégralement un attribut d'image, saisissez ce qui suit : +If you want to view an image attribute in its entirety, write the following: `GET /rest/Employee(1)/photo?$imageformat=best&$version=1&$expand=photo` -Pour plus d'informations sur les formats d'image, reportez-vous à [`$imageformat`]($imageformat.md). Pour plus d'informations sur le paramètre de version, reportez-vous à [`$version`]($version.md). +For more information about the image formats, refer to [`$imageformat`]($imageformat.md). For more information about the version parameter, refer to [`$version`]($version.md). -## Enregistrement d'un attribut BLOB sur le disque +## Saving a BLOB attribute to disk -Si vous souhaitez enregistrer un BLOB stocké dans votre classe de datastore, vous pouvez écrire ce qui suit en passant également "true" à $binary : +If you want to save a BLOB stored in your datastore class, you can write the following by also passing "true" to $binary: `GET /rest/Company(11)/blobAtt?$binary=true&$expand=blobAtt` \ No newline at end of file From bec1f13e469fd5a0f5694661e7e82046a14afb51 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:15:54 +0100 Subject: [PATCH 016/260] New translations $imageformat.md (French) --- .../translated_docs/fr/REST/$imageformat.md | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/website/translated_docs/fr/REST/$imageformat.md b/website/translated_docs/fr/REST/$imageformat.md index 0e8f9f96611a48..ef61f166a921f0 100644 --- a/website/translated_docs/fr/REST/$imageformat.md +++ b/website/translated_docs/fr/REST/$imageformat.md @@ -3,27 +3,27 @@ id: imageformat title: '$imageformat' --- -Définit le format d'image à utiliser pour récupérer des images (par exemple, `$imageformat=png`) +Defines which image format to use for retrieving images (*e.g.*, `$imageformat=png`) ## Description -Définissez le format à utiliser pour afficher les images. Par défaut, le meilleur format d'image sera choisi. Vous pouvez cependant sélectionner l'un des formats suivants : +Define which format to use to display images. By default, the best format for the image will be chosen. You can, however, select one of the following formats: -| Type | Description | -| ---- | -------------------------------- | -| GIF | Format GIF | -| PNG | Format PNG | -| JPEG | Format JPEG | -| TIFF | Format TIFF | -| best | Meilleur format basé sur l'image | +| Type | Description | +| ---- | ------------------------------ | +| GIF | GIF format | +| PNG | PNG format | +| JPEG | JPEG format | +| TIFF | TIFF format | +| best | Best format based on the image | -Une fois que vous avez défini le format, vous devez passer l'attribut de l'image à [`$expand`]($expand.md) pour charger complètement la photo. +Once you have defined the format, you must pass the image attribute to [`$expand`]($expand.md) to load the photo completely. -S'il n'y a pas d'image à charger ou si le format ne permet pas de charger l'image, la réponse sera vide. +If there is no image to be loaded or the format doesn't allow the image to be loaded, the response will be empty. -## Exemple +## Example -L'exemple suivant définit le format d'image au format JPEG, quel que soit le véritable type de la photo et passe le véritable numéro de version envoyé par le serveur : +The following example defines the image format to JPEG regardless of the actual type of the photo and passes the actual version number sent by the server: `GET /rest/Employee(1)/photo?$imageformat=jpeg&$version=3&$expand=photo` From 19016df0d5046864b8e8e8af3b1b90a129ee4dc0 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:15:56 +0100 Subject: [PATCH 017/260] New translations sdi.md (French) --- website/translated_docs/fr/Menus/sdi.md | 80 ++++++++++++------------- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/website/translated_docs/fr/Menus/sdi.md b/website/translated_docs/fr/Menus/sdi.md index 6d39e417fe3492..7fbf2be4316f4b 100644 --- a/website/translated_docs/fr/Menus/sdi.md +++ b/website/translated_docs/fr/Menus/sdi.md @@ -1,72 +1,72 @@ --- id: sdi -title: Mode SDI sous Windows +title: SDI mode on Windows --- ## Aperçu -Sous Windows, les Développeurs 4D peuvent configurer leurs applications fusionnées pour qu'elles fonctionnent en tant qu'applications SDI (Single-Document Interface). Dans les applications SDI, chaque fenêtre est indépendante des autres et peut avoir sa propre barre de menus. Les applications SDI sont opposées aux applications MDI (Multiple Documents Interface), où toutes les fenêtres sont contenues dans une fenêtre principale, et en dépendent. +On Windows, 4D developers can configure their 4D merged applications to work as SDI (Single-Document Interface) applications. In SDI applications, each window is independant from others and can have its own menu bar. SDI applications are opposed to MDI (Multiple Documents Interface) applications, where all windows are contained in and depend on the main window. -> Le concept SDI/MDI n'existe pas sur macOS. Cette fonctionnalité concerne uniquement des applications Windows, et les options s'y référant sont ignorées sous macOS. +> The concept of SDI/MDI does not exist on macOS. This feature concerns Windows applications only and related options are ignored on macOS. -### Disponibilité du mode SDI -Le mode SDI est disponible uniquement dans l'environnement d'exécution suivant : +### SDI mode availabilty +The SDI mode is available in the following execution environment only: -- Sous Windows -- Application fusionnée, monoposte ou cliente +- Windows +- Merged stand-alone or client 4D application -## Activation du mode SDI +## Enabling the SDI mode -L'activation et l'utilisation du mode SDI dans votre application requiert les étapes suivantes : +Enabling and using the SDI mode in your application require the following steps: 1. Check the **Use SDI mode on Windows** option in the "Interface" page of the Settings dialog box. -2. Générez une application exécutable (monoposte et/ou application cliente). +2. Build a merged application (standalone and/or client application). -Par la suite, lorsqu'elle sera exécutée dans le contexte adéquat (voir ci-dessus), l'application fusionnée fonctionnera automatiquement en mode SDI. +Then, when executed it in a supported context (see above), the merged application will work automatically in SDI mode. -## Gestion des applications en mode SDI +## Managing applications in SDI mode -L'exécution d'une application 4D en mode SDI ne requiert aucune implémentation particulière : les barres de menu existantes sont automatiquement déplacées dans les fenêtres SDI elles-mêmes. Cependant, vous devez être attentif aux principes spécifiques énumérés ci-dessous : +Executing a 4D application in SDI mode does not require any specific implementation: existing menu bars are automatically moved in SDI windows themselves. However, you need to pay attention to specific principles that are listed below. -### Menus dans les fenêtres +### Menus in Windows -En mode SDI, la barre de menu du process s'affiche automatiquement dans chaque fenêtre "document" ouverte durant la durée de vie du process (ceci exclut par exemple les palettes flottantes). Lorsque la barre de menu du process n'est pas visible, les raccourcis des lignes de menu restent toutefois actifs. +In SDI mode, the process menu bar is automatically displayed in every document type window opened during the process life (this excludes, for example, floating palettes). When the process menu bar is not visible, menu item shortcuts remain active however. -Les menus sont ajoutés au-dessus des fenêtres sans modifier la taille de leur contenu : +Menus are added above windows without modifiying their contents size: ![](assets/en/Menus/sdi1.png) -Les fenêtres peuvent donc être utilisées dans les modes MDI ou SDI sans avoir à recalculer la position des objets. +Windows can therefore be used in MDI or SDI modes without having to recalculate the position of objects. -#### A propos de la fenêtre d'accueil +#### About the splash screen -- If the **Splash screen** interface option was selected in the Settings, the splash window will contain any menus that would have been displayed in the MDI window. Notez également que la fermeture de la fenêtre d'accueil entraînera la sortie de l'application, tout comme dans le mode MDI. -- Si l'option Accueil n'a pas été cochée dans la base de données, les menus seront affichés uniquement dans les fenêtres ouvertes, selon les choix du Développeur. +- If the **Splash screen** interface option was selected in the Settings, the splash window will contain any menus that would have been displayed in the MDI window. Note also that closing the splash screen window will result in exiting the application, just like in MDI mode. +- If the Splash screen option was not selected, menus will be displayed in opened windows only, depending on the programmer's choices. -### Arrêt automatique +### Automatic quit -Lorsqu'elle est exécutée en mode MDI, une application 4D quitte simplement lorsque l'utilisateur ferme la fenêtre de l'application (fenêtre MDI). Cependant, lorsqu'elles sont exécutées en mode SDI, les applications 4D n'ont pas de fenêtre d'application et, d'autre part, la fermeture de la dernière fenêtre ouverte ne signifie pas nécessairement que l'utilisateur souhaite quitter l'application (des process sans interface peuvent être exécutés par exemple) -- mais cela peut être le cas. +When executed in MDI mode, a 4D application simply quits when the user closes the application window (MDI window). However, when executed in SDI mode, 4D applications do not have an application window and, on the other hand, closing the last opened window does not necessarily mean that the user wants the application to quit (faceless processes can be running, for example) -- although it could be what they want. -Pour gérer cette situation, les applications 4D exécutées en mode SDI incluent un mécanisme pour quitter automatiquement (en appelant la commande `QUIT 4D`) lorsque les conditions suivantes sont remplies : +To handle this case, 4D applications executed in SDI mode include a mechanism to automatically quit (by calling the `QUIT 4D` command) when the following conditions are met: -- l'utilisateur ne peut plus interagir avec l'application -- il n'y a pas de process utilisateur en cours -- les process 4D ou workers sont en attente d'un événement -- le serveur Web n'est pas lancé. +- the user cannot interact anymore with the application +- there are no live user processes +- 4D processes or worker processes are waiting for an event +- the Web server is not started. -> Lorsqu'un menu avec une action standard associée pour *quitter* est appelé, l'application quitte et toutes les fenêtres sont fermées, quel que soit l'endroit d'où le menu a été appelé. +> When a menu with an associated *quit* standard action is called, the application quits and all windows are closed, wherever the menu was called from. -## Langage +## Language -Bien qu'il soit traité de manière transparente par 4D, le mode SDI introduit de légères variations dans la gestion de l'interface d'application. Les spécificités dans le langage 4D sont listées ci-dessous : +Although it is transparently handled by 4D, the SDI mode introduces small variations in the application interface management. Specificities in the 4D language are listed below. -| Commande/fonctionnalité | Spécificité en mode SDI sous Windows | -| --------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `Open form window` | Options pour supporter les fenêtres flottantes en SDI (`Controller form window`) et pour supprimer la barre de menu (`Form has no menu bar`) | -| `Menu bar height` | Retourne la hauteur en pixels d'une ligne de barre de menu unique, même si la barre de menu a été incluse sur une ou plusieurs lignes. Retourne 0 lorsque la commande est appelée à partir d'un process sans fenêtre formulaire | -| `SHOW MENU BAR` / `HIDE MENU BAR` | Appliqué uniquement à la fenêtre formulaire courante (d'où le code est exécuté) | -| `MAXIMIZE WINDOW` | La fenêtre est maximisée à la taille de l'écran | -| `CONVERT COORDINATES` | `XY Screen` est le système de coordonnées global dans lequel l'écran principal est positionné à (0,0). Les écrans à gauche ou au-dessus de lui peuvent avoir des valeurs de coordonnées négatives et les écrans à droite ou au-dessous de lui peuvent avoir des valeurs de coordonnées supérieures à celles retournées par `Screen height` ou `Screen width`. | -| `GET MOUSE` | Les coordonnées globales sont relatives à l'écran | -| `GET WINDOW RECT` | Lorsque -1 est passé dans le paramètre fenêtre, la commande retourne 0;0;0;0 | -| `On Drop database method` | Non supporté | +| Command/feature | Specificity in SDI mode on Windows | +| --------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Open form window` | Options to support floating windows in SDI (`Controller form window`) and to remove the menu bar (`Form has no menu bar`) | +| `Menu bar height` | Returns the height in pixels of a single menu bar line even if the menu bar has been wrapped on two or more lines. Returns 0 when the command is called from a process without a form window | +| `SHOW MENU BAR` / `HIDE MENU BAR` | Applied to the current form window only (from where the code is executed) | +| `MAXIMIZE WINDOW` | The window is maximized to the screen size | +| `CONVERT COORDINATES` | `XY Screen` is the global coordinate system where the main screen is positioned at (0,0). Screens on its left side or on top of it can have negative coordinates and any screens on its right side or underneath it can have coordinates greater than the values returned by `Screen height` or `Screen width`. | +| `GET MOUSE` | Global coordinates are relative to the screen | +| `GET WINDOW RECT` | When -1 is passed in window parameter, the command returns 0;0;0;0 | +| `On Drop database method` | Not supported | From 9c2a42b68cc096a94c5163815949219cc6cd6222 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:15:58 +0100 Subject: [PATCH 018/260] New translations $info.md (French) --- website/translated_docs/fr/REST/$info.md | 66 ++++++++++++------------ 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/website/translated_docs/fr/REST/$info.md b/website/translated_docs/fr/REST/$info.md index 5eb87a5c17b44b..d199138a916fe8 100644 --- a/website/translated_docs/fr/REST/$info.md +++ b/website/translated_docs/fr/REST/$info.md @@ -3,55 +3,55 @@ id: info title: '$info' --- -Renvoie des informations sur les ensembles d'entités stockés couramment dans le cache de 4D Server ainsi que sur les sessions utilisateur +Returns information about the entity sets currently stored in 4D Server's cache as well as user sessions ## Description -En appelant cette requête pour votre projet, vous récupérez des informations dans les propriétés suivantes : +When you call this request for your project, you retrieve information in the following properties: -| Propriété | Type | Description | -| -------------- | ---------- | --------------------------------------------------------------------------------------------------- | -| cacheSize | Nombre | Taille du cache du serveur 4D. | -| usedCache | Nombre | La quantité de cache du serveur 4D utilisée. | -| entitySetCount | Nombre | Nombre de sélections d'entités. | -| entitySet | Collection | Une collection dans laquelle chaque objet contient des informations sur chaque sélection d'entités. | -| ProgressInfo | Collection | Une collection contenant des informations sur les indicateurs de progression. | -| sessionInfo | Collection | Une collection dans laquelle chaque objet contient des informations sur chaque session utilisateur. | +| Property | Type | Description | +| -------------- | ---------- | ----------------------------------------------------------------------------------- | +| cacheSize | Number | 4D Server's cache size. | +| usedCache | Number | How much of 4D Server's cache has been used. | +| entitySetCount | Number | Number of entity selections. | +| entitySet | Collection | A collection in which each object contains information about each entity selection. | +| ProgressInfo | Collection | A collection containing information about progress indicator information. | +| sessionInfo | Collection | A collection in which each object contains information about each user session. | ### entitySet -Pour chaque sélection d'entités stocké dans le cache de 4D Server, les informations retournées sont les suivantes : +For each entity selection currently stored in 4D Server's cache, the following information is returned: -| Propriété | Type | Description | -| ------------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| id | Chaine | Un UUID qui référence l'ensemble d'entités. | -| dataClass | Chaine | Nom de la classe du datastore. | -| selectionSize | Nombre | Nombre d'entités dans la sélection d'entités. | -| sorted | Booléen | Retourne vrai si l'ensemble a été trié (à l'aide de `$orderby`) ou faux s'il n'est pas trié. | -| refreshed | Date | Date de création de l'ensemble d'entités ou de la dernière utilisation. | -| expires | Date | Date d'expiration de l'ensemble d'entités (cette date/heure change chaque fois que l'ensemble d'entités est actualisé). La différence entre actualisé et expire est le timeout d'un ensemble d'entités. Cette valeur correspond soit à deux heures par défaut, soit à la valeur que vous avez définie à l'aide de `$timeout`. | +| Property | Type | Description | +| ------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| id | Chaine | A UUID that references the entity set. | +| dataClass | Chaine | Name of the datastore class. | +| selectionSize | Number | Number of entities in the entity selection. | +| sorted | Booléen | Returns true if the set was sorted (using `$orderby`) or false if it's not sorted. | +| refreshed | Date | When the entity set was created or the last time it was used. | +| expires | Date | When the entity set will expire (this date/time changes each time when the entity set is refreshed). The difference between refreshed and expires is the timeout for an entity set. This value is either two hours by default or what you defined using `$timeout`. | -Pour plus d'informations sur la création d'une sélection d'entités, reportez-vous à `$method=entityset`. Si vous souhaitez supprimer la sélection d'entités du cache de 4D Server, utilisez `$method=release`. -> 4D crée également ses propres sélections d'entités à des fins d'optimisation, de sorte que ceux que vous créez avec `$method=entityset` ne soient pas les seuls à être retournés. -> **IMPORTANT** Si votre projet est en **mode d'accès administrateur contrôlé**, vous devez d'abord vous connecter au projet en tant qu'utilisateur du groupe Admin. +For information about how to create an entity selection, refer to `$method=entityset`. If you want to remove the entity selection from 4D Server's cache, use `$method=release`. +> 4D also creates its own entity selections for optimization purposes, so the ones you create with `$method=entityset` are not the only ones returned. +> **IMPORTANT** If your project is in **Controlled Admin Access Mode**, you must first log into the project as a user in the Admin group. ### sessionInfo -Pour chaque session utilisateur, les informations suivantes sont retournées dans la collection *sessionInfo* : +For each user session, the following information is returned in the *sessionInfo* collection: -| Propriété | Type | Description | -| ---------- | ------ | ----------------------------------------------------------------- | -| sessionID | Chaine | Un UUID qui référence la session. | -| userName | Chaine | Nom de l'utilisateur qui lance la session. | -| lifeTime | Nombre | La durée d'une session utilisateur en secondes (3600 par défaut). | -| expiration | Date | Date et heure d'expiration courante de la session utilisateur. | +| Property | Type | Description | +| ---------- | ------ | ------------------------------------------------------------ | +| sessionID | Chaine | A UUID that references the session. | +| userName | Chaine | The name of the user who runs the session. | +| lifeTime | Number | The lifetime of a user session in seconds (3600 by default). | +| expiration | Date | The current expiration date and time of the user session. | -## Exemple +## Example -Retourne des informations sur les ensembles d'entités stockés couramment dans le cache de 4D Server ainsi que sur les sessions utilisateur: +Retrieve information about the entity sets currently stored in 4D Server's cache as well as user sessions: `GET /rest/$info` -**Résultat** : +**Result**: ``` { @@ -114,4 +114,4 @@ sessionInfo: [ ] } ``` -> Les informations de l'indicateur de progression répertoriées après les sélections d'entités sont utilisées en interne par 4D. \ No newline at end of file +> The progress indicator information listed after the entity selections is used internally by 4D. \ No newline at end of file From 7bbc2c5a34b1d705a73abe7b817eb1635cf66fca Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:16:00 +0100 Subject: [PATCH 019/260] New translations $method.md (French) --- website/translated_docs/fr/REST/$method.md | 122 ++++++++++----------- 1 file changed, 61 insertions(+), 61 deletions(-) diff --git a/website/translated_docs/fr/REST/$method.md b/website/translated_docs/fr/REST/$method.md index 141a96a07a56e5..c9e72360ff205f 100644 --- a/website/translated_docs/fr/REST/$method.md +++ b/website/translated_docs/fr/REST/$method.md @@ -3,17 +3,17 @@ id: method title: '$method' --- -Ce paramètre vous permet de définir l'opération à exécuter avec l'entité ou la sélection d'entité (entity selection) retournée. +This parameter allows you to define the operation to execute with the returned entity or entity selection. -## Syntaxe +## Available syntaxes -| Syntaxe | Exemple | Description | -| ----------------------------------------------- | ----------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- | -| [**$method=delete**](#methoddelete) | `POST /Employee?$filter="ID=11"& $method=delete` | Supprime l'entité, collection d'entités ou sélection d'entité courante | -| [**$method=entityset**](#methodentityset) | `GET /People/?$filter="ID>320"& $method=entityset& $timeout=600` | Crée un ensemble d'entités dans le cache de 4D Server basé sur la collection d'entités définies dans la requête REST | -| [**$method=release**](#methodrelease) | `GET /Employee/$entityset/?$method=release` | Affiche un ensemble d'entités existant stocké dans le cache de 4D Server | -| [**$method=subentityset**](#methodsubentityset) | `GET /Company(1)/staff?$expand=staff& $method=subentityset& $subOrderby=lastName ASC` | Crée un ensemble d'entités basé sur la collection d'entités relatives définies dans la requête REST | -| [**$method=update**](#methodupdate) | `POST /Person/?$method=update` | Met à jour et/ou crée une ou plusieurs entités | +| Syntax | Example | Description | +| ----------------------------------------------- | ----------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | +| [**$method=delete**](#methoddelete) | `POST /Employee?$filter="ID=11"& $method=delete` | Deletes the current entity, entity collection, or entity selection | +| [**$method=entityset**](#methodentityset) | `GET /People/?$filter="ID>320"& $method=entityset& $timeout=600` | Creates an entity set in 4D Server's cache based on the collection of entities defined in the REST request | +| [**$method=release**](#methodrelease) | `GET /Employee/$entityset/?$method=release` | Releases an existing entity set stored in 4D Server's cache | +| [**$method=subentityset**](#methodsubentityset) | `GET /Company(1)/staff?$expand=staff& $method=subentityset& $subOrderby=lastName ASC` | Creates an entity set based on the collection of related entities defined in the REST request | +| [**$method=update**](#methodupdate) | `POST /Person/?$method=update` | Updates and/or creates one or more entities | @@ -21,29 +21,29 @@ Ce paramètre vous permet de définir l'opération à exécuter avec l'entité o ## $method=delete -Supprime l'entité, collection d'entités ou sélection d'entité courante (créée via REST) +Deletes the current entity, entity collection, or entity selection (created through REST) ### Description -Avec `$method=delete`, vous pouvez supprimer une entité ou une collection d'entités entière. Vous pouvez définir la collection d'entités en utilisant, par exemple, [`$filter`]($filter.md) ou en en spécifiant une directement à l'aide de [`{dataClass}({key})`](%7BdataClass%7D.html#dataclasskey) (par exemple, /Employee(22)). +With `$method=delete`, you can delete an entity or an entire entity collection. You can define the collection of entities by using, for example, [`$filter`]($filter.md) or specifying one directly using [`{dataClass}({key})`](%7BdataClass%7D.html#dataclasskey) *(e.g.*, /Employee(22)). -Vous pouvez également supprimer les entités d'un ensemble d'entités en appelant [`$entityset/{entitySetID}`]($entityset.md#entitysetentitysetid). +You can also delete the entities in an entity set, by calling [`$entityset/{entitySetID}`]($entityset.md#entitysetentitysetid). -## Exemple -Vous pouvez ensuite saisir la requête REST suivante pour supprimer l'entité dont la clé porte le numéro 22 : +## Example +You can then write the following REST request to delete the entity whose key is 22: `POST /rest/Employee(22)/?$method=delete` -Vous pouvez également faire une requête en utilisant $ filter : +You can also do a query as well using $filter: `POST /rest/Employee?$filter="ID=11"&$method=delete` -Vous pouvez également supprimer un ensemble d'entités utilisant $entityset/{entitySetID} : +You can also delete an entity set using $entityset/{entitySetID}: `POST /rest/Employee/$entityset/73F46BE3A0734EAA9A33CA8B14433570?$method=delete` -Réponse : +Response: ``` { @@ -55,28 +55,28 @@ Réponse : ## $method=entityset -Crée un ensemble d'entités dans le cache de 4D Server basé sur la collection d'entités définies dans la requête REST +Creates an entity set in 4D Server's cache based on the collection of entities defined in the REST request ### Description -Lorsque vous créez une collection d'entités dans REST, vous pouvez également créer un ensemble d'entités qui sera enregistré dans le cache de 4D Server. L'ensemble d'entités aura un numéro de référence que vous pouvez passer à `$entityset/{entitySetID}` pour y accéder. Par défaut, il est valable deux heures; vous pouvez toutefois modifier cette durée en passant une valeur (en secondes) à $timeout. +When you create a collection of entities in REST, you can also create an entity set that will be saved in 4D Server's cache. The entity set will have a reference number that you can pass to `$entityset/{entitySetID}` to access it. By default, it is valid for two hours; however, you can modify that amount of time by passing a value (in seconds) to $timeout. -Si vous avez utilisé `$savedfilter` et/ou `$savedorderby` (avec `$filter` et/ou `$orderby`) lors de la création de votre ensemble d'entités, vous pouvez le recréer avec le même ID de référence même s'il a été supprimé du cache de 4D Server. +If you have used `$savedfilter` and/or `$savedorderby` (in conjunction with `$filter` and/or `$orderby`) when you created your entity set, you can recreate it with the same reference ID even if it has been removed from 4D Server's cache. -### Exemple +### Example -Pour créer un ensemble d'entités, qui sera enregistré dans le cache de 4D Server pendant deux heures, ajoutez `$method=entityset` à la fin de votre requête REST : +To create an entity set, which will be saved in 4D Server's cache for two hours, add `$method=entityset` at the end of your REST request: `GET /rest/People/?$filter="ID>320"&$method=entityset` -Vous pouvez créer un ensemble d'entités qui sera stocké dans le cache de 4D Server pendant seulement dix minutes en passant un nouveau timeout à `$timeout` : +You can create an entity set that will be stored in 4D Server's cache for only ten minutes by passing a new timeout to `$timeout`: `GET /rest/People/?$filter="ID>320"&$method=entityset&$timeout=600` -Vous pouvez également enregistrer le filtre et trier, en passant true à `$savedfilter` et `$savedorderby`. -> `$skip` et `$top/$limit` ne sont pas pris en compte lors de l'enregistrement d'un ensemble d'entités. +You can also save the filter and order by, by passing true to `$savedfilter` and `$savedorderby`. +> `$skip` and `$top/$limit` are not taken into consideration when saving an entity set. -Après avoir créé un ensemble d'entités, le premier élément, `__ENTITYSET` est ajouté à l'objet retourné et indique l'URI à utiliser pour accéder à l'ensemble d'entités : +After you create an entity set, the first element, `__ENTITYSET`, is added to the object returned and indicates the URI to use to access the entity set: `__ENTITYSET: "http://127.0.0.1:8081/rest/Employee/$entityset/9718A30BF61343C796345F3BE5B01CE7"` @@ -85,27 +85,27 @@ Après avoir créé un ensemble d'entités, le premier élément, `__ENTITYSET` ## $method=release -Affiche un ensemble d'entités existant stocké dans le cache de 4D Server. +Releases an existing entity set stored in 4D Server's cache. ### Description -Vous pouvez afficher un ensemble d'entités, que vous avez créé à l'aide de [`$method=entityset`](#methodentityset), à partir du cache de 4D Server. +You can release an entity set, which you created using [`$method=entityset`](#methodentityset), from 4D Server's cache. -### Exemple +### Example -Affiche un ensemble d'entités existant : +Release an existing entity set: `GET /rest/Employee/$entityset/4C51204DD8184B65AC7D79F09A077F24?$method=release` -#### Réponse : +#### Response: -Si la requête a abouti, la réponse suivante est retournée : +If the request was successful, the following response is returned: ``` { "ok": true } -Si l'entite n'as pas été trouvée, une erreur est retournée : +If the entity set wasn't found, an error is returned: { "__ERROR": [ @@ -121,24 +121,24 @@ Si l'entite n'as pas été trouvée, une erreur est retournée : ## $method=subentityset -Crée un ensemble d'entités dans le cache de 4D Server basé sur la collection d'entités relatives définies dans la requête REST +Creates an entity set in 4D Server's cache based on the collection of related entities defined in the REST request ### Description -`$method=subentityset` vous permet de trier les données retournées par l'attribut relationnel défini dans la requête REST. +`$method=subentityset` allows you to sort the data returned by the relation attribute defined in the REST request. -Pour trier les données, utilisez la propriété `$subOrderby`. Pour chaque attribut, définissez l'ordre sur ASC (ou asc) pour l'ordre croissant et sur DESC (desc) pour l'ordre décroissant. Par défaut, les données sont triées par ordre croissant. +To sort the data, you use the `$subOrderby` property. For each attribute, you specify the order as ASC (or asc) for ascending order and DESC (desc) for descending order. By default, the data is sorted in ascending order. -Si vous souhaitez spécifier plusieurs attributs, vous pouvez les délimiter avec une virgule, µ, `$subOrderby="lastName desc, firstName asc"`. +If you want to specify multiple attributes, you can delimit them with a comma, µ, `$subOrderby="lastName desc, firstName asc"`. -### Exemple +### Example -Si vous souhaitez récupérer uniquement les entités relatives pour une entité spécifique, vous pouvez lancer la requête REST suivante, dans laquelle "staff" est l'attribut relationnel dans la dataclass "Company" liée à la dataclass "Employee": +If you want to retrieve only the related entities for a specific entity, you can make the following REST request where staff is the relation attribute in the Company dataclass linked to the Employee dataclass: `GET /rest/Company(1)/staff?$expand=staff&$method=subentityset&$subOrderby=lastName ASC` -#### Réponse : +#### Response: ``` { @@ -186,34 +186,34 @@ Si vous souhaitez récupérer uniquement les entités relatives pour une entité ## $method=update -Met à jour et/ou crée une ou plusieurs entités +Updates and/or creates one or more entities ### Description -`$method=update` vous permet de mettre à jour et/ou de créer une ou plusieurs entités dans un seul **POST**. Si vous mettez à jour et/ou créez une entité, cela s'effectue dans un objet avec, pour chaque propriété, un attribut et sa valeur, par exemple `{lastName: "Smith"}`. Si vous mettez à jour et/ou créez plusieurs entités, vous devez créer une collection d'objets. +`$method=update` allows you to update and/or create one or more entities in a single **POST**. If you update and/or create one entity, it is done in an object with each property an attribute with its value, *e.g.*, `{ lastName: "Smith" }`. If you update and/or create multiple entities, you must create a collection of objects. In any cases, you must set the **POST** data in the **body** of the request. -Pour mettre à jour une entité, vous devez passer les paramètres `__KEY` et `__STAMP` dans l'objet avec tous les attributs modifiés. Si ces deux paramètres sont manquants, une entité sera ajoutée avec les valeurs de l'objet que vous envoyez dans le corps de votre **POST**. +To update an entity, you must pass the `__KEY` and `__STAMP` parameters in the object along with any modified attributes. If both of these parameters are missing, an entity will be added with the values in the object you send in the body of your **POST**. -Triggers are executed immediately when saving the entity to the server. La réponse contient toutes les données telles qu'elles existent sur le serveur. +Triggers are executed immediately when saving the entity to the server. The response contains all the data as it exists on the server. -Vous pouvez également placer ces requêtes pour créer ou mettre à jour des entités dans une transaction en appelant `$atomic/$atonce`. Si des erreurs se produisent lors de la validation des données, aucune des entités n'est sauvegardée. Vous pouvez également utiliser $method=validate pour valider les entités avant de les créer ou de les mettre à jour. +You can also put these requests to create or update entities in a transaction by calling `$atomic/$atonce`. If any errors occur during data validation, none of the entities are saved. You can also use $method=validate to validate the entities before creating or updating them. -Si un problème survient lors de l'ajout ou de la modification d'une entité, une erreur vous sera retournée avec ces informations. -> A noter pour les types d'attributs spécifiques : +If a problem arises while adding or modifying an entity, an error will be returned to you with that information. +> Notes for specific attribute types: > -> * **Les dates** doivent être exprimées au format JS : YYYY-MM-DDTHH:MM:SSZ (par exemple, "2010-10-05T23:00:00Z"). Si vous avez sélectionné la propriété Date uniquement pour votre attribut Date, le fuseau horaire et l'heure (heure, minutes et secondes) seront supprimés. Dans ce cas, vous pouvez également envoyer la date au format qui vous est retourné dd!mm!yyyy (par exemple, 05!10!2013). -> * Les valeurs des **booléens** sont vrai ou faux. -> * Les fichiers téléchargés à l'aide de `$upload` peuvent s'appliquer à un attribut de type Image ou BLOB en passant l'objet retourné au format suivant {"ID": "D507BC03E613487E9B4C2F6A0512FE50"} +> * **Dates** must be expressed in JS format: YYYY-MM-DDTHH:MM:SSZ (e.g., "2010-10-05T23:00:00Z"). If you have selected the Date only property for your Date attribute, the time zone and time (hour, minutes, and seconds) will be removed. In this case, you can also send the date in the format that it is returned to you dd!mm!yyyy (e.g., 05!10!2013). +> * **Booleans** are either true or false. +> * Uploaded files using `$upload` can be applied to an attribute of type Image or BLOB by passing the object returned in the following format { "ID": "D507BC03E613487E9B4C2F6A0512FE50"} -### Exemple +### Example -Pour mettre à jour une entité spécifique, utilisez l'URL suivante : +To update a specific entity, you use the following URL: `POST /rest/Person/?$method=update` -**Données POST :** +**POST data:** ``` { @@ -224,13 +224,13 @@ Pour mettre à jour une entité spécifique, utilisez l'URL suivante : } ``` -Les attributs firstName et lastName de l'entité indiquée ci-dessus seront modifiés en laissant inchangés tous les autres attributs (sauf ceux calculés sur la base de ces attributs). +The firstName and lastName attributes in the entity indicated above will be modified leaving all other attributes (except calculated ones based on these attributes) unchanged. -Si vous souhaitez créer une entité, vous pouvez envoyer, via POST, les attributs à l'aide de cette URL : +If you want to create an entity, you can POST the attributes using this URL: `POST /rest/Person/?$method=update` -**Données POST :** +**POST data:** ``` { @@ -239,11 +239,11 @@ Si vous souhaitez créer une entité, vous pouvez envoyer, via POST, les attribu } ``` -Vous pouvez également créer et mettre à jour plusieurs entités en même temps en utilisant la même URL ci-dessus en passant plusieurs objets d'un tableau au POST : +You can also create and update multiple entities at the same time using the same URL above by passing multiple objects in an array to the POST: `POST /rest/Person/?$method=update` -**Données POST :** +**POST data:** ``` [{ @@ -258,9 +258,9 @@ Vous pouvez également créer et mettre à jour plusieurs entités en même temp }] ``` -**Réponse :** +**Response:** -Lorsque vous ajoutez ou modifiez une entité, elle vous est retournée avec les attributs qui ont été modifiés. Par exemple, si vous créez le nouvel employé ci-dessus, les informations suivantes seront renvoyées : +When you add or modify an entity, it is returned to you with the attributes that were modified. For example, if you create the new employee above, the following will be returned: ``` { @@ -274,7 +274,7 @@ Lorsque vous ajoutez ou modifiez une entité, elle vous est retournée avec les } ``` -Si, par exemple, le tampon n'est pas correct, l'erreur suivante est retournée : +If, for example, the stamp is not correct, the following error is returned: ``` { From 6f8811f1d8b47381e7f8b4243f5af750652c35f0 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:16:04 +0100 Subject: [PATCH 020/260] New translations $orderby.md (French) --- website/translated_docs/fr/REST/$orderby.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/website/translated_docs/fr/REST/$orderby.md b/website/translated_docs/fr/REST/$orderby.md index d5f864c4a7a864..17481423abd973 100644 --- a/website/translated_docs/fr/REST/$orderby.md +++ b/website/translated_docs/fr/REST/$orderby.md @@ -4,24 +4,24 @@ title: '$orderby' --- -Trie les données retournées par l'attribut et l'ordre de tri définis (par exemple,`$orderby="lastName desc, salaire asc"`) +Sorts the data returned by the attribute and sorting order defined (*e.g.*, `$orderby="lastName desc, salary asc"`) ## Description -`$orderby` ordonne les entités retournées par la requête REST. Pour chaque attribut, définissez l'ordre sur `ASC` (ou `asc`) pour l'ordre croissant et sur `DESC` (`desc`) pour l'ordre décroissant. Par défaut, les données sont triées par ordre croissant. Si vous souhaitez spécifier plusieurs attributs, vous pouvez les délimiter avec une virgule, par exemple, `$orderby="lastName desc, firstName asc"`. +`$orderby` orders the entities returned by the REST request. For each attribute, you specify the order as `ASC` (or `asc`) for ascending order and `DESC` (`desc`) for descending order. By default, the data is sorted in ascending order. If you want to specify multiple attributes, you can delimit them with a comma, *e.g.*, `$orderby="lastName desc, firstName asc"`. -## Exemple +## Example -Dans cet exemple, nous récupérons les entités et les trions en même temps : +In this example, we retrieve entities and sort them at the same time: `GET /rest/Employee/?$filter="salary!=0"&$orderby="salary DESC,lastName ASC,firstName ASC"` -L'exemple ci-dessous trie l'entité définie par l'attribut lastName dans l'ordre croissant : +The example below sorts the entity set by lastName attribute in ascending order: `GET /rest/Employee/$entityset/CB1BCC603DB0416D939B4ED379277F02?$orderby="lastName"` -**Résultat** : +**Result**: ``` { @@ -44,7 +44,7 @@ L'exemple ci-dessous trie l'entité définie par l'attribut lastName dans l'ordr lastName: "O'Leary", salary: 80000 }, -// plus d'entités +// more entities ] } ``` From 55f313dd90541ace3c5bd110d7ee6291a8fda026 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:16:06 +0100 Subject: [PATCH 021/260] New translations $querypath.md (French) --- website/translated_docs/fr/REST/$querypath.md | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/website/translated_docs/fr/REST/$querypath.md b/website/translated_docs/fr/REST/$querypath.md index e637a6fc3aed28..96ab616e620d74 100644 --- a/website/translated_docs/fr/REST/$querypath.md +++ b/website/translated_docs/fr/REST/$querypath.md @@ -3,34 +3,34 @@ id: querypath title: '$querypath' --- -Retourne la requête telle qu'elle a été exécutée par 4D Server (par exemple, `$querypath=true`) +Returns the query as it was executed by 4D Server (*e.g.*, `$querypath=true`) ## Description -`$querypath` retourne la requête telle qu'elle a été exécutée par 4D Server. Si, par exemple, une partie de la requête passée ne retourne aucune entité, le reste de la requête n'est pas exécuté. La requête lancée est optimisée, comme vous pouvez le voir dans ce $ `$querypath`. +`$querypath` returns the query as it was executed by 4D Server. If, for example, a part of the query passed returns no entities, the rest of the query is not executed. The query requested is optimized as you can see in this `$querypath`. -Pour plus d'informations sur les chemins de requête, reportez-vous à [queryPlan ete queryPath](genInfo.md#querypath-and-queryplan). +For more information about query paths, refer to [queryPlan and queryPath](genInfo.md#querypath-and-queryplan). -Dans la collection d'étapes, il existe un objet avec les propriétés suivantes qui définissent la requête exécutée : +In the steps collection, there is an object with the following properties defining the query executed: -| Propriété | Type | Description | -| ------------- | ---------- | --------------------------------------------------------------------------------- | -| description | Chaine | Requête exécutée ou "AND" lorsqu'il existe plusieurs étapes | -| time | Nombre | Nombre de millisecondes nécessaires pour exécuter la requête | -| recordsfounds | Nombre | Nombre d'enregistrements trouvés | -| steps | Collection | Une collection avec un objet définissant l'étape suivante du chemin de la requête | +| Property | Type | Description | +| ------------- | ---------- | --------------------------------------------------------------------------- | +| description | Chaine | Actual query executed or "AND" when there are multiple steps | +| time | Number | Number of milliseconds needed to execute the query | +| recordsfounds | Number | Number of records found | +| steps | Collection | An collection with an object defining the subsequent step of the query path | -## Exemple +## Example -Si vous exécutez la requête suivante : +If you passed the following query: `GET /rest/Employee/$filter="employer.name=acme AND lastName=Jones"&$querypath=true` -Et si aucune entité n'a été trouvée, le chemin de la requête suivant sera retourné si vous saisissez ce qui suit : +And no entities were found, the following query path would be returned, if you write the following: `GET /rest/$querypath` -**Réponse** : +**Response**: ``` __queryPath: { @@ -64,15 +64,15 @@ __queryPath: { } ``` -En revanche, si la première requête retourne plus d'une entité, la seconde sera exécutée. Si nous exécutons la requête suivante : +If, on the other hand, the first query returns more than one entity, the second one will be executed. If we execute the following query: `GET /rest/Employee/$filter="employer.name=a* AND lastName!=smith"&$querypath=true` -Si au moins une entité a été trouvée, le chemin de la requête suivant sera retourné si vous saisissez ce qui suit : +If at least one entity was found, the following query path would be returned, if you write the following: `GET /rest/$querypath` -**Réponse** : +**Respose**: ``` "__queryPath": { From a181905e2e777b9085e19d3060773ecf80d0d5b4 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:16:08 +0100 Subject: [PATCH 022/260] New translations $queryplan.md (French) --- website/translated_docs/fr/REST/$queryplan.md | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/website/translated_docs/fr/REST/$queryplan.md b/website/translated_docs/fr/REST/$queryplan.md index 91d132777cd12f..33f46d219d5b50 100644 --- a/website/translated_docs/fr/REST/$queryplan.md +++ b/website/translated_docs/fr/REST/$queryplan.md @@ -4,24 +4,24 @@ title: '$queryplan' --- -Retourne la requête telle qu'elle a été passée au 4D Server (par exemple, `$queryplan=true`) +Returns the query as it was passed to 4D Server (*e.g.*, `$queryplan=true`) ## Description -$queryplan retourne le plan de la requête telle qu'il a été exécuté par 4D Server. +$queryplan returns the query plan as it was passed to 4D Server. -| Propriété | Type | Description | -| --------- | ------- | ------------------------------------------------------------------------------------------------------------------------ | -| item | Chaine | Requête exécutée | -| subquery | Tableau | S'il existe une sous-requête, un objet supplémentaire contenant une propriété d'élément (comme celle indiquée ci-dessus) | +| Property | Type | Description | +| -------- | ------ | ------------------------------------------------------------------------------------------- | +| item | Chaine | Actual query executed | +| subquery | Array | If there is a subquery, an additional object containing an item property (as the one above) | -Pour plus d'informations sur les plans de requête, reportez-vous à [queryPlan ete queryPath](genInfo.md#querypath-and-queryplan). +For more information about query plans, refer to [queryPlan and queryPath](genInfo.md#querypath-and-queryplan). -## Exemple -Si vous passez la requête suivante : +## Example +If you pass the following query: `GET /rest/People/$filter="employer.name=acme AND lastName=Jones"&$queryplan=true` -#### Réponse : +#### Response: ``` __queryPlan: { From 6a82844775defa256069597b376b14c4dbe58f40 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:16:10 +0100 Subject: [PATCH 023/260] New translations $savedfilter.md (French) --- .../translated_docs/fr/REST/$savedfilter.md | 20 ++++++++----------- 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/website/translated_docs/fr/REST/$savedfilter.md b/website/translated_docs/fr/REST/$savedfilter.md index afc8c5e9d2e207..0c144247101d85 100644 --- a/website/translated_docs/fr/REST/$savedfilter.md +++ b/website/translated_docs/fr/REST/$savedfilter.md @@ -3,28 +3,24 @@ id: savedfilter title: '$savedfilter' --- -Enregistre le filtre défini par $filter lors de la création d'un ensemble d'entités (par exemple, `$savedfilter="{filter}"`) +Saves the filter defined by $filter when creating an entity set (*e.g.*, `$savedfilter="{filter}"`) ## Description -Lorsque vous créez un ensemble d'entités, vous pouvez, par sécurité, enregistrer le filtre utilisé pour sa création. Si l'ensemble d'entités que vous avez créé est supprimé du cache de 4D Server (en raison du timeout, du besoin d'espace sur le serveur ou de la suppression après avoir appelé [`$method=release`]($method.md#methodrelease)). +When you create an entity set, you can save the filter that you used to create it as a measure of security. If the entity set that you created is removed from 4D Server's cache (due to the timeout, the server's need for space, or your removing it by calling [`$method=release`]($method.md#methodrelease)). -Utilisez `$savedfilter` pour enregistrer le filtre que vous avez défini lors de la création de votre ensemble d'entités, puis passez `$savedfilter` avec votre appel, pour récupérer à chaque fois l'ensemble d'entités. +You use `$savedfilter` to save the filter you defined when creating your entity set and then pass `$savedfilter` along with your call to retrieve the entity set each time. -Si l'ensemble d'entités n'est plus dans le cache de 4D Server, il sera recréé avec un nouveau timeout de 10 minutes. L'ensemble d'entités sera actualisé (certaines entités peuvent être incluses tandis que d'autres peuvent être supprimées) depuis la dernière fois qu'il a été créé, s'il n'existait plus avant de le recréer. +If the entity set is no longer in 4D Server's cache, it will be recreated with a new default timeout of 10 minutes. The entity set will be refreshed (certain entities might be included while others might be removed) since the last time it was created, if it no longer existed before recreating it. -Si vous avez utilisé à la fois `$savedfilter` et +If you have used both `$savedfilter` and [`$savedorderby`]($savedorderby.md) in your call when creating an entity set and then you omit one of them, the new entity set, which will have the same reference number, will reflect that. -[`$savedorderby`]($savedorderby.md) dans votre appel lors de la création d'un ensemble d'entités et que vous en omettez un, le nouvel ensemble d'entités, qui aura le même numéro de référence, le reflétera.

    +## Example - - -## Exemple - -Dans notre exemple, nous appelons d'abord ``$savedfilter` avec l'appel initial pour créer un ensemble d'entités comme indiqué ci-dessous : +In our example, we first call ``$savedfilter` with the initial call to create an entity set as shown below: `GET /rest/People/?$filter="employer.name=Apple"&$savedfilter="employer.name=Apple"&$method=entityset` -Puis, lorsque vous accédez à votre ensemble d'entités, saisissez ce qui suit pour vous assurer que l'ensemble d'entités est toujours valide : +Then, when you access your entity set, you write the following to ensure that the entity set is always valid: `GET /rest/People/$entityset/AEA452C2668B4F6E98B6FD2A1ED4A5A8?$savedfilter="employer.name=Apple"` From fad1bf18b08c56d243fc6d6fd444ee7880f921c5 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:16:12 +0100 Subject: [PATCH 024/260] New translations $savedorderby.md (French) --- website/translated_docs/fr/REST/$savedorderby.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/website/translated_docs/fr/REST/$savedorderby.md b/website/translated_docs/fr/REST/$savedorderby.md index 17c85f54ad11c9..180b3ff16b7bce 100644 --- a/website/translated_docs/fr/REST/$savedorderby.md +++ b/website/translated_docs/fr/REST/$savedorderby.md @@ -3,21 +3,21 @@ id: savedorderby title: '$savedorderby' --- -Enregistre le tri défini par `$orderby` lors de la création d'un ensemble d'entités (par exemple, `$savedorderby="{orderby}"`) +Saves the order by defined by `$orderby` when creating an entity set (*e.g.*, `$savedorderby="{orderby}"`) ## Description -Lorsque vous créez un ensemble d'entités, vous pouvez, par sécurité, enregistrer l'ordre de tri et le filtre utilisés pour sa création. Si l'ensemble d'entités que vous avez créé est supprimé du cache de 4D Server (en raison du timeout, du besoin d'espace sur le serveur ou de la suppression après avoir appelé [`$method=release`]($method.md#methodrelease)). +When you create an entity set, you can save the sort order along with the filter that you used to create it as a measure of security. If the entity set that you created is removed from 4D Server's cache (due to the timeout, the server's need for space, or your removing it by calling [`$method=release`]($method.md#methodrelease)). -Utilisez `$savedorderby` pour enregistrer l'ordre que vous avez défini lors de la création de votre ensemble d'entités, puis passez `$savedorderby` avec votre appel, pour récupérer à chaque fois l'ensemble d'entités. +You use `$savedorderby` to save the order you defined when creating your entity set, you then pass `$savedorderby` along with your call to retrieve the entity set each time. -Si l'ensemble d'entités n'est plus dans le cache de 4D Server, il sera recréé avec un nouveau timeout de 10 minutes. Si vous avez utilisé à la fois [`$savedfilter`]($savedfilter.md) et `$savedorderby` dans votre appel lors de la création d'un ensemble d'entités et que vous en omettez un, le nouvel ensemble d'entités, qui aura le même numéro de référence, le reflétera. +If the entity set is no longer in 4D Server's cache, it will be recreated with a new default timeout of 10 minutes. If you have used both [`$savedfilter`]($savedfilter.md) and `$savedorderby` in your call when creating an entity set and then you omit one of them, the new entity set, having the same reference number, will reflect that. -## Exemple -Appelez d'abord `$savedorderby`, dans l'appel initial, pour créer un ensemble d'entités : +## Example +You first call `$savedorderby` with the initial call to create an entity set: `GET /rest/People/?$filter="lastName!=''"&$savedfilter="lastName!=''"&$orderby="salary"&$savedorderby="salary"&$method=entityset` -Ensuite, lorsque vous accédez à votre ensemble d'entités, écrivez ce qui suit (en utilisant à la fois $savedfilter et $savedorderby) pour vous assurer que le filtre et son ordre de tri existent toujours : +Then, when you access your entity set, you write the following (using both $savedfilter and $savedorderby) to ensure that the filter and its sort order always exists: `GET /rest/People/$entityset/AEA452C2668B4F6E98B6FD2A1ED4A5A8?$savedfilter="lastName!=''"&$savedorderby="salary"` From 3d0db57dce421e6de6377478b91803ae7714419b Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:16:14 +0100 Subject: [PATCH 025/260] New translations $skip.md (French) --- website/translated_docs/fr/REST/$skip.md | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/website/translated_docs/fr/REST/$skip.md b/website/translated_docs/fr/REST/$skip.md index 8a235e6e4551bf..1feb4d28be386e 100644 --- a/website/translated_docs/fr/REST/$skip.md +++ b/website/translated_docs/fr/REST/$skip.md @@ -3,21 +3,17 @@ id: skip title: '$skip' --- -Démarre l'entité définie par ce numéro dans la collection (par exemple, `$skip=10`) +Starts the entity defined by this number in the collection (*e.g.*, `$skip=10`) ## Description -`$skip` définit l'entité de la collection par laquelle commencer. Par défaut, la collection envoyée commence par la première entité. Pour commencer avec la 10e entité de la collection, passez 10. +`$skip` defines which entity in the collection to start with. By default, the collection sent starts with the first entity. To start with the 10th entity in the collection, pass 10. -`$skip` est généralement utilisé avec +`$skip` is generally used in conjunction with [`$top/$limit`]($top_$limit.md) to navigate through an entity collection. - [`$top/$limit`]($top_$limit.md) pour naviguer dans une entity collection.

    +## Example +In the following example, we go to the 20th entity in our entity set: - -## Exemple - -Dans l'exemple suivant, nous allons à la 20e entité de notre ensemble d'entités : - -`GET /rest/Employee/$entityset/CB1BCC603DB0416D939B4ED379277F02?$skip=20` \ No newline at end of file + `GET /rest/Employee/$entityset/CB1BCC603DB0416D939B4ED379277F02?$skip=20` \ No newline at end of file From 31a34137375a0b7b8c718c8befdddf83d30bbfc2 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:16:16 +0100 Subject: [PATCH 026/260] New translations $timeout.md (French) --- website/translated_docs/fr/REST/$timeout.md | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/website/translated_docs/fr/REST/$timeout.md b/website/translated_docs/fr/REST/$timeout.md index 1ac3a4e7a4aa87..2eac9ac71f3f27 100644 --- a/website/translated_docs/fr/REST/$timeout.md +++ b/website/translated_docs/fr/REST/$timeout.md @@ -4,22 +4,18 @@ title: '$timeout' --- -Définit le nombre de secondes pour enregistrer un ensemble d'entités dans le cache de 4D Server (par exemple, `$timeout=1800`) +Defines the number of seconds to save an entity set in 4D Server's cache (*e.g.*, `$timeout=1800`) ## Description -Pour définir un timeout à un ensemble d'entités que vous créez à l'aide de +To define a timeout for an entity set that you create using [`$method=entityset`]($method.md#methodentityset), pass the number of seconds to `$timeout`. For example, if you want to set the timeout to 20 minutes, pass 1200. By default, the timeout is two (2) hours. -[`$method=entityset`]($method.md#methodentityset), passez le nombre de secondes à `$timeout`. Par exemple, si vous souhaitez définir le timeout sur 20 minutes, passez 1200. Par défaut, le timeout est de deux (2) heures.

    +Once the timeout has been defined, each time an entity set is called upon (by using `$method=entityset`), the timeout is recalculated based on the current time and the timeout. -Une fois le timeout défini, chaque fois qu'un ensemble d'entités est appelé (via `$method=entityset`), le timeout est recalculé en fonction de l'heure courante et du timeout. +If an entity set is removed and then recreated using `$method=entityset` along with [`$savedfilter`]($savedfilter.md), the new default timeout is 10 minutes regardless of the timeout you defined when calling `$timeout`. -Si un ensemble d'entités est supprimé puis recréé à l'aide de `$method=entityset` avec [`$savedfilter`]($savedfilter.md), le nouveau timeout par défaut est de 10 minutes, quel que soit le timeout que vous avez défini lors de l'appel de `$timeout`.

    +## Example - - -## Exemple - -Dans l'ensemble d'entités que nous créons, nous définissons le timeout sur 20 minutes : +In our entity set that we're creating, we define the timeout to 20 minutes: `GET /rest/Employee/?$filter="salary!=0"&$method=entityset&$timeout=1200` \ No newline at end of file From 781ea4094179c2601e3dfe717c4888971cb552e3 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:16:18 +0100 Subject: [PATCH 027/260] New translations $top_$limit.md (French) --- website/translated_docs/fr/REST/$top_$limit.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/website/translated_docs/fr/REST/$top_$limit.md b/website/translated_docs/fr/REST/$top_$limit.md index 98d5010c85d680..8539277f771f3e 100644 --- a/website/translated_docs/fr/REST/$top_$limit.md +++ b/website/translated_docs/fr/REST/$top_$limit.md @@ -3,16 +3,16 @@ id: top_$limit title: '$top/$limit' --- -Limite le nombre d'entités à retourner (par exemple, `$top=50`) +Limits the number of entities to return (e.g., `$top=50`) ## Description -`$top/$limit` définit la limite des entités à retourner. Par défaut, leur nombre est limité à 100. Vous pouvez utiliser l'un des mots clés suivant : `$top` ou `$limit`. +`$top/$limit` defines the limit of entities to return. By default, the number is limited to 100. You can use either keyword: `$top` or `$limit`. -Lorsqu'il est utilisé avec [`$skip`]($skip.md), vous pouvez parcourir la sélection d'entités retournée par la requête REST. +When used in conjunction with [`$skip`]($skip.md), you can navigate through the entity selection returned by the REST request. -## Exemple +## Example -Dans l'exemple suivant, nous recherchons les dix entités qui suivent la 20e entité : +In the following example, we request the next ten entities after the 20th entity: `GET /rest/Employee/$entityset/CB1BCC603DB0416D939B4ED379277F02?$skip=20&$top=10` \ No newline at end of file From 6441f89d139e1cb196c28d6120d63a9b8866bc09 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:16:20 +0100 Subject: [PATCH 028/260] New translations $upload.md (French) --- website/translated_docs/fr/REST/$upload.md | 29 +++++++++------------- 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/website/translated_docs/fr/REST/$upload.md b/website/translated_docs/fr/REST/$upload.md index 3a7bcb84dfa23e..9b8159b841e27e 100644 --- a/website/translated_docs/fr/REST/$upload.md +++ b/website/translated_docs/fr/REST/$upload.md @@ -4,31 +4,29 @@ title: '$upload' --- -Retourne un ID du fichier téléchargé sur le serveur +Returns an ID of the file uploaded to the server ## Description -Publiez cette requête lorsque vous vous souhaitez télécharger un fichier sur le serveur. S'il s'agit d'une image, passez `$rawPict=true`. Pour tous les autres fichiers, passez `$binary=true`. +Post this request when you have a file that you want to upload to the Server. If you have an image, you pass `$rawPict=true`. For all other files, you pass `$binary=true`. -Vous pouvez modifier le timeout, qui est par défaut de 120 secondes, en passant une valeur au paramètre `$timeout`. +You can modify the timeout, which by default is 120 seconds, by passing a value to the `$timeout parameter`. -## Exemple de téléchargement d'image -Pour télécharger une image, vous devez d'abord sélectionner l'objet fichier sur le client à l'aide de l'API intégré HTML 5 pour utiliser le fichier à partir d'une application Web. 4D utilise l'attribut de type MIME de l'objet fichier afin de le gérer correctement. +## Image upload example +To upload an image, you must first select the file object on the client using the HTML 5 built-in API for using file from a web application. 4D uses the MIME type attribute of the file object so it can handle it appropriately. -Téléchargez ensuite l'image sélectionnée sur 4D Server : +Then, we upload the selected image to 4D Server: `POST /rest/$upload?$rawPict=true` -**Résultat** : +**Result**: `{ "ID": "D507BC03E613487E9B4C2F6A0512FE50" }` - Utilisez ensuite cet ID pour l'ajouter à un attribut en utilisant[`$method=update`]($method.md#methodupdate) pour ajouter l'image à une entité :

    - -`POST /rest/Employee/?$method=update` - -**Données POST** : + Afterwards, you use this ID to add it to an attribute using [`$method=update`]($method.md#methodupdate) to add the image to an entity: + `POST /rest/Employee/?$method=update` +**POST data**: ```` { @@ -38,12 +36,9 @@ Téléchargez ensuite l'image sélectionnée sur 4D Server : } ```` +**Response**: -**Réponse** : - -L'entité modifiée est retournée : - - +The modified entity is returned: ```` { From e5e85d6400b5800a4ff5cd7d2ba4ff56df0dd1cf Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:16:22 +0100 Subject: [PATCH 029/260] New translations $version.md (French) --- website/translated_docs/fr/REST/$version.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/website/translated_docs/fr/REST/$version.md b/website/translated_docs/fr/REST/$version.md index 61a60b83549fdd..e80c60a3b08c92 100644 --- a/website/translated_docs/fr/REST/$version.md +++ b/website/translated_docs/fr/REST/$version.md @@ -3,16 +3,16 @@ id: version title: '$version' --- -Numéro de version de l'image +Image version number ## Description -`$version` est le numéro de version de l'image retourné par le serveur. Le numéro de version, qui est envoyé par le serveur, fonctionne autour du cache du navigateur afin que vous soyez sûr de récupérer la bonne image. +`$version` is the image's version number returned by the server. The version number, which is sent by the server, works around the browser's cache so that you are sure to retrieve the correct image. -La valeur du paramètre de version de l'image est modifiée par le serveur. +The value of the image's version parameter is modified by the server. -## Exemple +## Example -L'exemple suivant définit le format d'image au format JPEG, quel que soit le véritable type de la photo et passe le véritable numéro de version envoyé par le serveur : +The following example defines the image format to JPEG regardless of the actual type of the photo and passes the actual version number sent by the server: `GET /rest/Employee(1)/photo?$imageformat=jpeg&$version=3&$expand=photo` \ No newline at end of file From 6e3de37571a13eccf372764210157b786319e87a Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:16:24 +0100 Subject: [PATCH 030/260] New translations REST_requests.md (French) --- .../translated_docs/fr/REST/REST_requests.md | 48 +++++++++---------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/website/translated_docs/fr/REST/REST_requests.md b/website/translated_docs/fr/REST/REST_requests.md index 37a65d4dec5aed..cf2ab3ccad554e 100644 --- a/website/translated_docs/fr/REST/REST_requests.md +++ b/website/translated_docs/fr/REST/REST_requests.md @@ -1,50 +1,50 @@ --- id: REST_requests -title: A propos des requêtes REST +title: About REST Requests --- -Les structures suivantes sont prises en charge par les requêtes REST : +The following structures are supported for REST requests: -| URI | Resource (Input) | /? ou &{filter} (Output) | +| URI | Resource (Input) | /? or &{filter} (Output) | | -------------------------------- | --------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | | http://{servername}:{port}/rest/ | [{dataClass}](%7BdataClass%7D.html) | [$filter]($filter.md), [$attributes]($attributes.md), [$skip]($skip.md), [$method=...]($method.md)... | | | [{dataClass}](%7BdataClass%7D.html)/[$entityset/{entitySetID}](entityset.html#entitysetentitysetid) | [$method=...]($method.md) | -| | [{dataClass}({clé})](%7BdataClass%7D.html#dataclasskey) | [$attributes]($attributes.md) | +| | [{dataClass}({key})](%7BdataClass%7D.html#dataclasskey) | [$attributes]($attributes.md) | | | [{dataClass}:{attribute}(value)](%7BdataClass%7D.html#dataclassattributevalue) | | -Si toutes les requêtes REST doivent contenir les paramètres URI et Resource, les filtres d'Output (qui filtrent les données retournées) sont facultatifs. +While all REST requests must contain the URI and Resource parameters, the Output (which filters the data returned) is optional. -Comme pour tous les URI, le premier paramètre est délimité par un «?» et tous les paramètres suivants par un «&». Par exemple: +As with all URIs, the first parameter is delimited by a “?” and all subsequent parameters by a “&”. For example: `GET /rest/Person/?$filter="lastName!=Jones"&$method=entityset&$timeout=600` -> Vous pouvez placer toutes les valeurs entre guillemets en cas de doute. Par exemple, dans notre exemple ci-dessus, nous aurions pu saisir la valeur du nom de famille entre guillemets simples "lastName!='Jones'". +> You can place all values in quotes in case of ambiguity. For example, in our above example, we could have put the value for the last name in single quotes: "lastName!='Jones'". -Les paramètres vous permettent de manipuler des données dans des dataclass de votre projet 4D. Outre la récupération de données à l'aide des méthodes HTTP `GET`, vous pouvez également ajouter, mettre à jour et supprimer des entités d'une classe de datastore à l'aide des méthodes HTTP `POST`. +The parameters allow you to manipulate data in dataclasses in your 4D project. Besides retrieving data using `GET` HTTP methods, you can also add, update, and delete entities in a datastore class using `POST` HTTP methods. -Si vous souhaitez que les données soient retournées dans un tableau au lieu d'un JSON, utilisez le paramètre [`$asArray`]($asArray.md). +If you want the data to be returned in an array instead of JSON, use the [`$asArray`]($asArray.md) parameter. -## Statut et réponse REST -À chaque requête REST, le serveur retourne l'état et une réponse (avec ou sans erreur). +## REST Status and Response +With each REST request, the server returns the status and a response (with or without an error). -### Statut de la requête -Avec chaque requête REST, vous obtenez le statut et la réponse. Voici quelques exemples de statuts : +### Request Status +With each REST request, you get the status along with the response. Below are a few of the statuses that can arise: -| Statut | Description | -| ------------------------- | -------------------------------------------------------------------------------- | -| 0 | Requête non traitée (le serveur n'est peut-être pas été lancé). | -| 200 OK | Requête traitée sans erreur. | -| 401 Unauthorized | Erreur d'autorisation (vérifiez les autorisations de l'utilisateur). | -| 402 No session | Nombre maximal de sessions ayant été atteint. | -| 404 Not Found | La data n'est pas accessible via REST ou bien l'ensemble d'entités n'existe pas. | -| 500 Internal Server Error | Erreur lors du traitement de la requête REST. | +| Status | Description | +| ------------------------- | -------------------------------------------------------------------------- | +| 0 | Request not processed (server might not be started). | +| 200 OK | Request processed without error. | +| 401 Unauthorized | Permissions error (check user's permissions). | +| 402 No session | Maximum number of sessions has been reached. | +| 404 Not Found | The data class is not accessible via REST or the entity set doesn't exist. | +| 500 Internal Server Error | Error processing the REST request. | -### Réponse +### Response -La réponse (au format JSON) varie en fonction de la requête. +The response (in JSON format) varies depending on the request. -Si une erreur survient, elle sera envoyée avec la réponse du serveur ou bien ce sera la réponse du serveur. +If an error arises, it will be sent along with the response from the server or it will be the response from the server. From 0e6c318d6e5b53668fce1217ec8879374a589092 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:16:26 +0100 Subject: [PATCH 031/260] New translations authUsers.md (French) --- website/translated_docs/fr/REST/authUsers.md | 28 ++++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/website/translated_docs/fr/REST/authUsers.md b/website/translated_docs/fr/REST/authUsers.md index 80db4f7a91ffcf..4930c8a4d31d09 100644 --- a/website/translated_docs/fr/REST/authUsers.md +++ b/website/translated_docs/fr/REST/authUsers.md @@ -1,37 +1,37 @@ --- id: authUsers -title: Sessions et utilisateurs +title: Users and sessions --- -## Authentification des utilisateurs +## Authenticating users As a first step to open a REST session on the 4D server, the user sending the request must be authenticated. -Connectez un utilisateur à votre application en passant le nom et le mot de passe de l'utilisateur dans [`$directory/login`]($directory.md#directorylogin). +You log in a user to your application by passing the user's name and password to [`$directory/login`]($directory.md#directorylogin). Once a user is successfully logged, a session is open. See below to know how to handle the session cookie in subsequent client requests, if necessary. The session will automatically be closed once the timeout is reached. -## Cookie de session +## Session cookie -Chaque requête REST est gérée via une session spécifique sur le serveur 4D. +Each REST request is handled through a specific session on the 4D server. -Lorsqu'une première requête REST valide est reçue, le serveur crée la session et envoie un cookie de session nommé `WASID4D` dans l'**en-tête de réponse "Set-Cookie"**, contenant l'UUID de session, par exemple : +When a first valid REST request is received, the server creates the session and sends a session cookie named `WASID4D` in the **"Set-Cookie" response header**, containing the session UUID, for example: ``` WASID4D=EA0400C4D58FF04F94C0A4XXXXXX3 ``` -Assurez-vous, dans les requêtes REST, que ce cookie est inclus dans **l'en-tête "Cookie"** afin de réutiliser la même session. Sinon, une nouvelle session sera ouverte et une autre licence utilisée. +In the subsequent REST requests, make sure this cookie is included in the **"Cookie" request header** so that you will reuse the same session. Otherwise, a new session will be opened, and another license used. -### Exemple +### Example -La gestion des cookies de session dépend de votre client HTTP. Cet exemple montre comment extraire et renvoyer le cookie de session dans le contexte des requêtes traitées via la commande 4D `HTTP Request`. +The way to handle session cookies actually depends on your HTTP client. This example shows how to extract and resend the session cookie in the context of requests handled through the 4D `HTTP Request` command. ```4d -// Créer des en-têtes +// Creating headers ARRAY TEXT(headerNames;0) ARRAY TEXT(headerValues;0) @@ -46,21 +46,21 @@ APPEND TO ARRAY(headerValues;Generate digest("test";4D digest)) C_OBJECT($response) $response:=New object -//Cette requête ouvre une session à l'utilisateur "kind user" +//This request opens a session for the user "kind user" $result:=HTTP Request(HTTP POST method;"127.0.0.1:8044/rest/$directory/login";"";\ $response;headerNames;headerValues;*) -//Créer de nouveaux tableaux pour les en-têtes uniquement avec le cookie WASID4D +//Build new arrays for headers with only the cookie WASID4D buildHeader(->headerNames;->headerValues) -//Cette autre requête n'ouvrira pas une nouvelle session +//This other request will not open a new session $result:=HTTP Request(HTTP GET method;"127.0.0.1:8044/rest/$catalog";"";\ $response;headerNames;headerValues;*) ``` ```4d -// méthode projet buildHeader +// buildHeader project method C_POINTER($pointerNames;$1;$pointerValues;$2) ARRAY TEXT($headerNames;0) From b72c5a6045d8b7c2f93fd7192e37cb1eae9a852d Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:16:28 +0100 Subject: [PATCH 032/260] New translations architecture.md (French) --- .../fr/Project/architecture.md | 252 +++++++++--------- 1 file changed, 126 insertions(+), 126 deletions(-) diff --git a/website/translated_docs/fr/Project/architecture.md b/website/translated_docs/fr/Project/architecture.md index 3c07ac1abdcc73..aa56ba3deaf788 100644 --- a/website/translated_docs/fr/Project/architecture.md +++ b/website/translated_docs/fr/Project/architecture.md @@ -3,11 +3,11 @@ id: architecture title: Architecture of a project --- -Un projet 4D est constitué de plusieurs fichiers et dossiers, stockés dans un seul dossier parent de l'application (dossier package). Par exemple: +A 4D project is made of several folders and files, stored within a single parent application folder (package folder). For example: -- MonProjet +- MyProject - Composants - - Données + - Data - Logs - Settings - Documentation @@ -21,212 +21,212 @@ Un projet 4D est constitué de plusieurs fichiers et dossiers, stockés dans un - userPreferences.username - WebFolder -> Si votre projet a été converti depuis une base binaire, des dossiers supplémentaires peuvent être présents. Voir "Conversion de bases en projets" sur [doc.4d.com](https://doc.4d.com). +> If your project has been converted from a binary database, additional folders may be present. See "Converting databases to projects" on [doc.4d.com](https://doc.4d.com). -## Dossier Project +## Project folder -La hiérarchie du dossier Project se présente généralement comme suit : +The Project folder typically contains the following hierarchy: -- Fichier *nomApplication*.4DProject +- *applicationName*.4DProject file - Sources + Classes + DatabaseMethods + Méthodes - + Formulaires + + Forms + TableForms + Triggers - DerivedData -- Trash (le cas échéant) +- Trash (if any) -### Fichier *nomApplication*.4DProject +### *applicationName*.4DProject file -Le fichier de développement de projet, utilisé pour désigner et lancer le projet. Ce fichier peut être ouvert par : +Project development file, used to designate and launch the project. This file can be opened by: - 4D -- 4D Server (lecture seule, voir [Développer un projet](developing.md)) +- 4D Server (read-only, see [Developing a project](developing.md)) -> Dans les projets 4D, le développement est réalisé avec 4D et le développement multi-utilisateurs est géré par des outils de contrôle de version. 4D Server peut ouvrir des fichiers .4DProject à des fins de test. +> In 4D projects, development is done with 4D and multi-user development is managed through source control tools. 4D Server can open .4DProject files for testing purposes. -### Dossier Sources +### Sources folder -| Contenu | Description | Format | -| ----------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | -| catalog.4DCatalog | Définit des tables et des champs | XML | -| folders.json | Définitions des dossiers de l'Explorateur | JSON | -| menus.json | Définit les menus | JSON | -| settings.4DSettings | Propriétés de la base *Structure*. Elles ne sont pas prises en compte si les *[paramètres utilisateur](#settings-folder-1)* ou les *[paramètres utilisateur des données](#settings-folder)* sont définis.

    **Attention** : dans les applications compilées, les paramètres de structure sont stockés dans le fichier .4dz (lecture seule). Pour le déploiement, il est nécessaire d'utiliser les *paramètres utilisateur* ou les *paramètres utilisateur pour les données* afin de définir des paramètres personnalisés. | XML | -| tips.json | Définit les messages d'aide | JSON | -| lists.json | Listes définies | JSON | -| filters.json | Filtres définis | JSON | -| styleSheets.css | Feuilles de style CSS | CSS | -| styleSheets_mac.css | Feuilles de style css sur Mac (à partir d'une base binaire convertie) | CSS | -| styleSheets_windows.css | Feuilles de style css sur Windows (à partir d'une base binaire convertie) | CSS | +| Contents | Description | Format | +| ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | +| catalog.4DCatalog | Table and field definitions | XML | +| folders.json | Explorer folder definitions | JSON | +| menus.json | Menu definitions | JSON | +| settings.4DSettings | *Structure* database settings. They are not taken into account if *[user settings](#settings-folder-1)* or *[user settings for data](#settings-folder)* are defined.

    **Warning**: In compiled applications, structure settings are stored in the .4dz file (read-only). For deployment needs, it is necessary to use *user settings* or *user settings for data* to define custom settings. | XML | +| tips.json | Defined tips | JSON | +| lists.json | Defined lists | JSON | +| filters.json | Defined filters | JSON | +| styleSheets.css | CSS style sheets | CSS | +| styleSheets_mac.css | Mac css style sheets (from converted binary database) | CSS | +| styleSheets_windows.css | Windows css style sheets (from converted binary database) | CSS | -#### Dossier DatabaseMethods +#### DatabaseMethods folder -| Contenu | Description | Format | -| ------------------------ | ------------------------------------------------------------------ | ------ | -| *databaseMethodName*.4dm | Méthodes base définies dans le projet. Un fichier par méthode base | Texte | +| Contents | Description | Format | +| ------------------------ | --------------------------------------------------------------------- | ------ | +| *databaseMethodName*.4dm | Database methods defined in the project. One file per database method | text | -#### Dossier Methods +#### Methods folder -| Contenu | Description | Format | -| ---------------- | --------------------------------------------------------------- | ------ | -| *methodName*.4dm | Méthodes projet définies dans le projet. Un fichier par méthode | Texte | +| Contents | Description | Format | +| ---------------- | ----------------------------------------------------------- | ------ | +| *methodName*.4dm | Project methods defined in the project. One file per method | text | -#### Dossier Classes +#### Classes folder -| Contenu | Description | Format | -| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | -| *className*.4dm | Méthode de définition de classe utilisateur, permettant d'instancier des objets spécifiques. Un fichier par classe, le nom du fichier est le nom de la classe | Texte | +| Contents | Description | Format | +| --------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ------ | +| *className*.4dm | User class definition method, allowing to instantiate specific objects. One file per class, the name of the file is the class name | text | -#### Dossier Forms +#### Forms folder -| Contenu | Description | Format | -| ----------------------------------------- | -------------------------------------------- | ------- | -| *formName*/form.4DForm | Description du formulaire projet | json | -| *formName*/method.4dm | Méthode formulaire projet | Texte | -| *formName*/Images/*pictureName* | Image statique du formulaire projet | picture | -| *formName*/ObjectMethods/*objectName*.4dm | Méthodes objet. Un fichier par méthode objet | Texte | +| Contents | Description | Format | +| ----------------------------------------- | ------------------------------------------ | ------- | +| *formName*/form.4DForm | Project form description | json | +| *formName*/method.4dm | Project form method | text | +| *formName*/Images/*pictureName* | Project form static picture | picture | +| *formName*/ObjectMethods/*objectName*.4dm | Object methods. One file per object method | text | -#### Dossier TableForms +#### TableForms folder -| Contenu | Description | Format | -| ---------------------------------------------------- | ---------------------------------------------------------------------------- | ------- | -| *n*/Input/*formName*/form.4DForm | Description du formulaire d'entrée de la table (n étant le numéro de table) | json | -| *n*/Input/*formName*/Images/*pictureName* | Images statiques du formulaire d'entrée de la table | picture | -| *n*/Input/*formName*/method.4dm | Méthode du formulaire d'entrée de la table | Texte | -| *n*/Input/*formName*/ObjectMethods/*objectName*.4dm | Méthodes objet du formulaire d'entrée. Un fichier par méthode objet | Texte | -| *n*/Output/*formName*/form.4DForm | Description du formulaire de sortie de la table (n étant le numéro de table) | json | -| *n*/Output/*formName*/Images/*pictureName* | Images statiques du formulaire de sortie de la table | picture | -| *n*/Output/*formName*/method.4dm | Méthode du formulaire de sortie de la table | Texte | -| *n*/Output/*formName*/ObjectMethods/*objectName*.4dm | Méthodes objet du formulaire de sortie. Un fichier par méthode objet | Texte | +| Contents | Description | Format | +| ---------------------------------------------------- | ------------------------------------------------------ | ------- | +| *n*/Input/*formName*/form.4DForm | Input table form description (n is the table number) | json | +| *n*/Input/*formName*/Images/*pictureName* | Input table form static pictures | picture | +| *n*/Input/*formName*/method.4dm | Input table form method | text | +| *n*/Input/*formName*/ObjectMethods/*objectName*.4dm | Input form object methods. One file per object method | text | +| *n*/Output/*formName*/form.4DForm | Output table form description (n is the table number) | json | +| *n*/Output/*formName*/Images/*pictureName* | Output table form static pictures | picture | +| *n*/Output/*formName*/method.4dm | Output table form method | text | +| *n*/Output/*formName*/ObjectMethods/*objectName*.4dm | Output form object methods. One file per object method | text | -#### Dossier Triggers +#### Triggers folder -| Contenu | Description | Format | -| ------------- | ------------------------------------------------------------------------------------------------------ | ------ | -| table_*n*.4dm | Méthodes trigger définies dans le projet. Un fichier de trigger par table (n étant le numéro de table) | Texte | +| Contents | Description | Format | +| ------------- | ------------------------------------------------------------------------------------------ | ------ | +| table_*n*.4dm | Trigger methods defined in the project. One trigger file per table (n is the table number) | text | -**Note :** L'extension de fichier .4dm est un format de fichier texte contenant le code d'une méthode 4D. Il est compatible avec les outils de contrôle de version. +**Note:** The .4dm file extension is a text-based file format, containing the code of a 4D method. It is compliant with source control tools. -### Dossier Trash +### Trash folder -Le dossier Trash contient des méthodes et des formulaires qui ont été supprimés du projet (le cas échéant). Il peut contenir les dossiers suivants : +The Trash folder contains methods and forms that were deleted from the project (if any). It can contain the following folders: - Méthodes -- Formulaires +- Forms - TableForms -Dans ces dossiers, les noms des éléments supprimés sont entre parenthèses, par exemple. "(myMethod).4dm". L'organisation des dossiers est identique à celle du dossier [Sources](#sources). +Within these folders, deleted element names are in parentheses, e.g. "(myMethod).4dm". The folder organization is identical to the [Sources](#sources) folder. -### Dossier DerivedData +### DerivedData folder -Le dossier DerivedData contient des données en cache utilisées en interne par 4D pour optimiser le traitement. Il est automatiquement créé ou recréé si nécessaire. Vous pouvez ignorer ce dossier. +The DerivedData folder contains cached data used internally by 4D to optimize processing. It is automatically created or recreated when necessary. You can ignore this folder. -## Dossier Resources +## Resources folder -Le dossier Resources contient tous les fichiers et dossiers de ressources personnalisés du projet. Dans ce dossier, vous pouvez placer tous les fichiers nécessaires à la traduction ou à la personnalisation de l'interface de l'application (fichiers image, fichiers texte, fichiers XLIFF, etc.). 4D utilise des mécanismes automatiques pour manipuler le contenu de ce dossier, notamment pour le traitement des fichiers XLIFF et des images statiques. Pour l'utilisation en mode distant, le dossier Resources vous permet de partager des fichiers entre le serveur et tous les ordinateurs clients. Voir le *Manuel 4D Server - Référence*. +The Resources folder contains any custom project resource files and folders. In this folder, you can place all the files needed for the translation or customization of the application interface (picture files, text files, XLIFF files, etc.). 4D uses automatic mechanisms to work with the contents of this folder, in particular for the handling of XLIFF files and static pictures. For using in remote mode, the Resources folder lets you share files between the server machine and all the client machines. See the *4D Server Reference Manual*. -| Contenu | Description | Format | -| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -| *item* | Fichiers et dossiers de ressources de la base | variés | -| Images/Library/*item* | Images de la bibliothèque d'images sous forme de fichiers séparés(*). Les noms de ces éléments deviennent des noms de fichiers. Si un élément dupliqué existe, un numéro est ajouté au nom. | picture | +| Contents | Description | Format | +| --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | +| *item* | Project resource files and folders | various | +| Images/Library/*item* | Pictures from the Picture Library as separate files(*). Names of these items become file names. If a duplicate exists, a number is added to the name. | picture | -(*) uniquement si le projet a été exporté depuis une base binaire .4db. +(*) only if the project was exported from a .4db binary database. -## Dossier Data +## Data folder -Le dossier Data contient le fichier de données ainsi que tous les fichiers et dossiers relatifs aux données. +The data folder contains the data file and all files and folders relating to the data. -| Contenu | Description | Format | -| ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | -| data.4dd(*) | Fichier de données contenant les données saisies dans les enregistrements et toutes les données appartenant aux enregistrements. Lorsque vous ouvrez un projet 4D, l'application ouvre par défaut le fichier de données courant. Si vous modifiez le nom ou l'emplacement de ce fichier, la boîte de dialogue *Ouvrir un fichier de données* apparaît alors pour vous permettre de sélectionner le fichier de données à utiliser ou d'en créer un nouveau | binaire | -| data.journal | Créé uniquement lorsque la base de données utilise un fichier journal. Le fichier journal est utilisé pour assurer la sécurité des données entre les sauvegardes. Toutes les opérations effectuées sur les données sont enregistrées séquentiellement dans ce fichier. Par conséquent, chaque opération sur les données entraîne deux actions simultanées : la première sur les données (l'instruction est exécutée normalement) et la seconde dans le fichier journal (une description de l'opération est enregistrée). Le fichier journal est construit indépendamment, sans perturber ni ralentir le travail de l'utilisateur. Une base de données ne peut fonctionner qu'avec un seul fichier journal à la fois. Le fichier journal enregistre des opérations telles que des ajouts, des modifications ou des suppressions d'enregistrements, des transactions, etc. Il est généré par défaut lors de la création d'une base de données. | binaire | -| data.match | (interne) UUID correspondant au numéro de la table | XML | +| Contents | Description | Format | +| ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | +| data.4dd(*) | Data file containing data entered in the records and all the data belonging to the records. When you open a 4D project, the application opens the current data file by default. If you change the name or location of this file, the *Open data file* dialog box will then appear so that you can select the data file to use or create a new one | binary | +| data.journal | Created only when the database uses a log file. The log file is used to ensure the security of the data between backups. All operations carried out on the data are recorded sequentially in this file. Therefore, each operation on the data causes two simultaneous actions: the first on the data (the statement is executed normally) and the second in the log file (a description of the operation is recorded). The log file is constructed independently, without disturbing or slowing down the user’s work. A database can only work with a single log file at a time. The log file records operations such as additions, modifications or deletions of records, transactions, etc. It is generated by default when a database is created. | binary | +| data.match | (internal) UUID matching table number | XML | -(*) Lorsque le projet est créé depuis une base binaire .4b, le fichier de données demeure inchangé. Ainsi, il peut être nommé différemment et placé dans un autre emplacement. +(*) When the project is created from a .4db binary database, the data file is left untouched. Thus, it can be named differently and placed in another location. -### Dossier Settings +### Settings folder -Ce dossier contient des **fichiers de propriétés utilisateur des données** utilisés pour l'administration de l'application. +This folder contains **user settings files for data** used for application administration. -> Ces paramètres ont la priorité sur les **[fichiers de propriétés utilisateur](#settings-folder-1)** et les fichiers de **[propriétés structure](#sources-folder)**. +> These settings take priority over **[user settings files](#settings-folder-1)** and **[structure settings](#sources-folder)** files. -| Contenu | Description | Format | -| ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | -| directory.json | Description des groupes et utilisateurs 4D et de leurs droits d'accès lorsque l'application est lancée avec ce fichier de données. | JSON | -| Backup.4DSettings | Paramètres de sauvegarde de la base de données, utilisés pour définir les [options de sauvegarde](Backup/settings.md)) lorsque la base est lancée avec ce fichier de données. Les clés concernant la configuration de la sauvegarde sont décrites dans le manuel *Sauvegarde des clés XML 4D*. | XML | -| settings.4DSettings | Propriétés de la base personnalisées pour ce fichier de données. | XML | +| Contents | Description | Format | +| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | +| directory.json | Description of 4D groups, users, and their access rights when the application is run with this data file. | JSON | +| Backup.4DSettings | Database backup settings, used to set the [backup options](Backup/settings.md) when the database is run with this data file. Keys concerning backup configuration are described in the *4D XML Keys Backup* manual. | XML | +| settings.4DSettings | Custom database settings for this data file. | XML | -### Dossier Logs +### Logs folder -Le dossier Logs contient tous les fichiers journaux utilisés par le projet. Les fichiers journaux comprennent notamment : +The Logs folder contains all log files used by the project. Log files include, in particular: -- conversion de base de données, -- requêtes de serveur Web, -- journal des activités de sauvegarde/restitution (*Journal de sauvegarde\[xxx].txt*, voir [Journal de sauvegarde](Backup/backup.md#backup-journal)) -- débogage de commandes, -- Requêtes 4D Server (générées sur les postes clients et sur le serveur). +- database conversion, +- web server requests, +- backup/restore activities journal (*Backup Journal\[xxx].txt*, see [Backup journal](Backup/backup.md#backup-journal)) +- command debugging, +- 4D Server requests (generated on client machines and on the server). -> Un dossier Logs supplémentaire est disponible dans le dossier des préférences utilisateur du système (dossier 4D actif, voir la commande [Get 4D folder](https://doc.4d.com/4Dv18R4/4D/18-R4/Get-4D-folder.301-4982857.en.html)) pour les fichiers journaux de maintenance et dans les cas où le dossier de données est en lecture seule. +> An additional Logs folder is available in the system user preferences folder (active 4D folder, see [Get 4D folder](https://doc.4d.com/4Dv18R4/4D/18-R4/Get-4D-folder.301-4982857.en.html) command) for maintenance log files and in cases where data folder is read-only. -## Dossier Settings +## Settings folder -Ce dossier contient des **fichiers de propriétés utilisateur** utilisés pour l'administration de l'application. +This folder contains **user settings files** used for application administration. -> Ces paramètres ont la priorité sur les fichiers de **[propriétés structure](#sources-folder)**. Toutefois, si un **[fichier de paramètres utilisateur](#settings-folder)** existe, il est prioritaire par rapport au fichier des propriétés utilisateur. +> These settings take priority over **[structure settings](#sources-folder)** files. However, if a **[user settings file for data](#settings-folder)** exists, it takes priority over user settings file. -| Contenu | Description | Format | -| ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ | -| directory.json | Description des groupes et utilisateurs 4D pour l'application, ainsi que leurs droits d'accès | JSON | -| Backup.4DSettings | Paramètres de sauvegarde de la base de données, utilisés pour définir les [options de sauvegarde](Backup/settings.md)) à chaque lancement de sauvegarde. Ce fichier peut également être utilisé pour lire ou définir des options supplémentaires, telles que la quantité d'informations stockées dans le *journal de sauvegarde*. Les clés concernant la configuration de la sauvegarde sont décrites dans le manuel *Sauvegarde des clés XML 4D*. | XML | -| BuildApp.4DSettings | Fichier de paramètres de génération, créé automatiquement lors de l'utilisation de la boîte de dialogue du générateur d'applications ou de la commande `BUILD APPLICATION` | XML | +| Contents | Description | Format | +| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------ | +| directory.json | Description of 4D groups and users for the application, as well as their access rights | JSON | +| Backup.4DSettings | Database backup settings, used to set the [backup options](Backup/settings.md)) when each backup is launched. This file can also be used to read or set additional options, such as the amount of information stored in the *backup journal*. Keys concerning backup configuration are described in the *4D XML Keys Backup* manual. | XML | +| BuildApp.4DSettings | Build settings file, created automatically when using the application builder dialog box or the `BUILD APPLICATION` command | XML | -## Dossier userPreferences.*userName* +## userPreferences.*userName* folder -Ce dossier contient des fichiers qui mémorisent les configurations utilisateur, par exemple la position des points de rupture. Vous pouvez simplement ignorer ce dossier. Il contient par exemple : +This folder contains files that memorize user configurations, e.g. break point positions. You can just ignore this folder. It contains for example: -| Contenu | Description | Format | -| ---------------------------- | --------------------------------------------------------------------- | ------ | -| methodPreferences.json | Préférences de l'éditeur de méthodes de l'utilisateur courant | JSON | -| methodWindowPositions.json | Position de la fenêtre de l'utilisateur courant pour les méthodes | JSON | -| formWindowPositions.json | Position de la fenêtre de l'utilisateur courant pour les formulaires | JSON | -| workspace.json | Liste de fenêtres ouvertes : sous macOS, ordre des fenêtres à onglets | JSON | -| debuggerCatches.json | Appels vers commandes | JSON | -| recentTables.json | Liste ordonée de tables | JSON | -| preferencesv15.4DPreferences | Préférences utilisateur | JSON | +| Contents | Description | Format | +| ---------------------------- | ------------------------------------------------------ | ------ | +| methodPreferences.json | Current user method editor preferences | JSON | +| methodWindowPositions.json | Current user window positions for methods | JSON | +| formWindowPositions.json | Current user window positions for forms | JSON | +| workspace.json | List of opened windows; on macOS, order of tab windows | JSON | +| debuggerCatches.json | Caught calls to commands | JSON | +| recentTables.json | Ordered list of tables | JSON | +| preferencesv15.4DPreferences | User preferences | JSON | -## Dossier Components +## Components folder -Ce dossier contient les composants disponibles dans le projet d'application uniquement. Il doit être stocké au même niveau que le dossier Project. +This folder contains the components to be available in the application project only. It must be stored at the same level as the Project folder. -> Une application projet peut être elle-même un composant : - à des fins de développement : insérer un alias du fichier .4dproject dans le dossier Components du projet hôte. - à des fins de déploiement : [créer le composant](Admin/building.md#build-component) et insérer le fichier .4dz résultant dans un dossier .4dbase dans le dossier Components de l'application hôte. +> An application project can be used itself as a component: - for development: put an alias of the .4dproject file in the Components folder of the host project. - for deployment: [build the component](Admin/building.md#build-component) and put the resulting .4dz file in a .4dbase folder in the Components folder of the host application. -## Dossier Plugins +## Plugins folder -Ce dossier contient les plug-ins disponibles dans le projet d'application uniquement. Il doit être stocké au même niveau que le dossier Project. +This folder contains the plug-ins to be available in the application project only. It must be stored at the same level as the Project folder. -## Dossier documentation +## Documentation folder -Ce dossier contient tous les fichiers de documentation (.md) créés pour les éléments du projet, tels que les classes, les méthodes ou les formulaires. Les fichiers de documentation sont gérés et affichés dans l'Explorateur 4D. +This folder contains all documentation files (.md) created for the project elements such as classes, methods, or forms. Documentation files are managed and displayed in the 4D Explorer. -Pour plus d'informations, reportez-vous à [Documenter un projet](Project/documentation.md). +For more information, refer to [Documenting a project](Project/documentation.md). ## WebFolder -Il s'agit du dossier racine par défaut du serveur Web 4D pour les pages, les images, etc. Il est automatiquement créé lors du premier lancement du serveur Web. \ No newline at end of file +Defaut root folder of the 4D Web server for pages, pictures, etc. It is automatically created when the Web server is launched for the first time. \ No newline at end of file From 3635b9b62fbac44f39e889343d7e4911b869c448 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:16:31 +0100 Subject: [PATCH 033/260] New translations properties.md (French) --- .../translated_docs/fr/Menus/properties.md | 199 +++++++++--------- 1 file changed, 100 insertions(+), 99 deletions(-) diff --git a/website/translated_docs/fr/Menus/properties.md b/website/translated_docs/fr/Menus/properties.md index fd7236674ee2ff..48cad9add69074 100644 --- a/website/translated_docs/fr/Menus/properties.md +++ b/website/translated_docs/fr/Menus/properties.md @@ -1,175 +1,176 @@ --- id: properties -title: Propriétés des menus +title: Menu item properties --- -Vous pouvez définir plusieurs propriétés à partir des lignes de menu, telles que des actions, des styles de police, les lignes de séparation, des raccourcis clavier ou des icônes. +You can set various properties for menu items such as action, font style, separator lines, keyboard shortcuts or icons. -## Titre de menu +## Title -La propriété **Title** contient le libellé d'un menu ou d'une ligne de menu, tel qu'il sera affiché dans l'interface de l'application. +The **Title** property contains the label of a menu or menu item as it will be displayed on the application interface. -Dans l'éditeur de menus, vous pouvez saisir directement le libellé "en dur". Vous pouvez également saisir une référence pour une variable ou un élément XLIFF, ce qui facilitera la mise à jour et la traduction des applications. Vous pouvez utiliser types de références suivants : +In the Menu editor, you can directly enter the label as "hard coded". Or, you can enter a reference for a variable or an XLIFF element, which will facilitate the maintenance and translation of applications. You can use the following types of references: -- Une référence à une ressource XLIFF, du type :xliff:MonLibellé. Pour plus d’informations sur les références XLIFF, reportez-vous à la section *Annexe B : Architecture XLIFF* du *Mode Développement 4D*. -- Un nom de variable interprocess suivi d’un chiffre, par exemple :<>vlang,3. Il suffit de changer le contenu de cette variable pour modifier le libellé du menu lors de son affichage. Dans ce cas, le libellé fera appel à une ressource XLIFF. La valeur contenue dans la variable <>vlang correspond à l’attribut *id* de l’élément *group*. La seconde valeur (3 dans cet exemple) désigne l’attribut *id* de l’élément *trans-unit*. +- An XLIFF resource reference of the type :xliff:MyLabel. For more information about XLIFF references, refer to *XLIFF Architecture* section in *4D Design Reference*. +- An interprocess variable name followed by a number, for example: :<>vlang,3. Changing the contents of this variable will modify the menu label when it is displayed. In this case, the label will call an XLIFF resource. The value contained in the <>vlang variable corresponds to the *id* attribute of the *group* element. The second value (3 in this example) designates the *id* attribute of the *trans-unit* element. -En utilisant le langage 4D, vous définissez la propriété Title à l'aide du paramètre *itemText* des commandes `APPEND MENU ITEM`, `INSERT MENU ITEM`, et `SET MENU ITEM`. +Using the 4D language, you set the title property through the *itemText* parameter of the `APPEND MENU ITEM`, `INSERT MENU ITEM`, and `SET MENU ITEM` commands. -### Caractères de contrôle +### Using control characters -Il est possible de définir les propriétés des lignes de menus en insérant des caractères de contrôle (“métacaractères”) directement dans les libellés des commandes de menus. Cette possibilité est utile pour la création de menus par programmation. Par exemple, vous pouvez associer le raccourci-clavier Ctrl+G (ou Commande+G sous macOS) à une ligne de menu en plaçant les caractères "/G" dans son libellé. +You can set some properties of the menu commands by using control characters (metacharacters) directly in the menu command labels. For instance, you can assign the keyboard shortcut Ctrl+G (Windows) or Command+G (macOS) for a menu command by placing the "/G" characters in the label of the menu item label. -Les caractères de contrôle n’apparaissent pas dans les libellés des commandes de menus. Vous devez donc les éviter afin de ne pas obtenir d’effets indésirables. Ces caractères sont les suivants : +Control characters do not appear in the menu command labels. You should therefore avoid using them so as not to have any undesirable effects. The control characters are the following: -| Caractère | Description | Utilisation | -| ----------- | ----------------------------- | -------------------------------------------------------------------------- | -| ( | parenthèse ouvrante | Désactiver la ligne | -| Lorsque vous utilisez des actions standard, il est conseillé de conserver les raccourcis clavier qui leur sont associés par défaut. +> We recommend that you keep the default keyboard shortcuts that are associated with standard actions. -Vous pouvez utiliser toute touche alphanumérique comme raccourci clavier, hormis celles qui sont utilisées par les commandes de menus standard qui apparaissent dans les menus **Editer** et **Fichier**, et les clés réservées aux commandes de menu 4D. +You can use any alphanumeric keys as a keyboard shortcut, except for the keys reserved by standard menu commands that appear in the **Edit** and **File** menus, and the keys reserved for 4D menu commands. -Les combinaisons réservées sont décrites dans le tableau suivant : +These reserved key combinations are listed in the following table: -| Clé (Windows) | Clé (macOS) | Opération | -| -------------- | ------------------ | ----------------------- | -| Ctrl+C | Commande+C | Copier | -| Ctrl+Q | Commande+Q | Quitter | -| Ctrl+V | Commande+V | Coller | -| Ctrl+X | Commande+X | Couper | -| Ctrl+Z | Commande+Z | Annuler | -| Ctrl+. (point) | Commande+. (point) | Arrêter action en cours | +| Key (Windows) | Key (macOS) | Operation | +| --------------- | ------------------ | ----------- | +| Ctrl+C | Command+C | Copy | +| Ctrl+Q | Command+Q | Quit | +| Ctrl+V | Command+V | Paste | +| Ctrl+X | Command+X | Cut | +| Ctrl+Z | Command+Z | Undo | +| Ctrl+. (period) | Command+. (period) | Stop action | -Pour affecter un raccourci clavier dans l'éditeur de menus : +To assign a keyboard shortcut in the Menu editor: -Sélectionnez la ligne de menu à laquelle vous souhaitez affecter un raccourci clavier. Cliquez sur le bouton [...] à droite de la zone “Raccourci clavier”. La fenêtre suivante apparaît : +Select the menu item to which you want to assign a keyboard shortcut. Click on the [...] button to the right of the "Shortcut" entry area. The following window appears: ![](assets/en/Menus/Shortcut.png) -Saisissez le caractère à utiliser puis (facultatif) cochez les options **Majuscule** et/ou **Alt** (**Option**) en fonction de la combinaison que vous souhaitez obtenir. Vous pouvez également appuyer sur les touches constituant la combinaison (n’appuyez pas sur la touche **Ctrl/Commande**). +Enter the character to use then (optional) click the **Shift** and/or **Alt** (**Option**) checkboxes according to the combination desired. You can also directly press the keys that make up the desired combination (do not press the **Ctrl/Command** key). -> Il n’est pas possible de désélectionner la touche Ctrl/Commande, elle est obligatoire dans les raccourcis clavier des menus. Pour recommencer, cliquez sur la touche **Effacer**. Cliquez sur **OK** pour valider la modification. Le raccourci défini est représenté dans la zone “Raccourci clavier” . +> You cannot deselect the Ctrl/Command key, which is mandatory for keyboard shortcuts for menus. To start over, click on **Clear**. Click **OK** to validate the changes. The shortcut defined is shown in the "Shortcut" entry area. -Pour affecter un raccourci clavier à l'aide du langage 4D, utilisez la commande `SET ITEM SHORTCUT`. +To assign a keyboard shortcut using the 4D language, use the `SET ITEM SHORTCUT` command. -> Un objet actif peut aussi avoir un raccourci clavier. Si la touche **Ctrl/Commande** est sujette à un conflit, l’objet actif sera prioritaire. +> An active object can also have a keyboard shortcut. If the **Ctrl/Command** key assignments conflict, the active object takes precedence. -### Ligne active +### Enabled item -Dans l'éditeur de menus, vous pouvez spécifier si une ligne est activée ou désactivée. Une commande de menu activée peut être choisie par l’utilisateur ; une commande de menu désactivée est grisée et ne peut pas être choisie. Pour désactiver une ligne de menu, désélectionnez l’option **Ligne active**. Dans ce cas, la ligne apparaît grisée dans le menu et ne peut pas être sélectionnée. +In the Menu editor, you can specify whether a menu item will appear enabled or disabled. An enabled menu command can be chosen by the user; a disabled menu command is dimmed and cannot be chosen. When the **Enabled Item** check box is unchecked, the menu command appears dimmed, indicating that it cannot be chosen. -Par défaut, 4D active automatiquement toute commande de menu ajoutée à un menu personnalisé. Vous pouvez désactiver une commande afin, par exemple, de l’activer uniquement par programmation (commandes `ENABLE MENU ITEM` et `DISABLE MENU ITEM`). +Unless you specify otherwise, 4D automatically enables each menu item you add to a custom menu. You can disable an item in order, for example, to enable it only using programming with `ENABLE MENU ITEM` and `DISABLE MENU ITEM` commands. -### Coche +### Check mark -Cette option de l'éditeur de menus permet d’associer par défaut une coche système à la ligne de menu. Vous pourrez ensuite gérer (masquer ou afficher) la coche au moyen des commandes du langage (`SET MENU ITEM MARK` et `Get menu item mark`). +This Menu editor option can be used to associate a system check mark with a menu item. You can then manage the display of the check mark using language commands (`SET MENU ITEM MARK` and `Get menu item mark`). -Les coches sont généralement utilisées pour des menus à action permanente et indiquent que l’action est en cours. +Check marks are generally used for continuous action menu items and indicate that the action is currently underway. -### Styles des polices +### Font styles -4D vous permet de personnaliser les menus en appliquant différents styles de caractères aux commandes de menus. Vous pouvez personnaliser vos menus avec les styles Gras, Italique ou Souligné, ou à l'aide de la commande `SET MENU ITEM STYLE`. +4D lets you customize menus by applying different font styles to the menu commands. You can customize your menus with the Bold, Italic or Underline styles through options in the Menu editor, or using the `SET MENU ITEM STYLE` language command. -En règle générale, les styles de police doivent être appliqués à vos menus avec parcimonie, afin d’éviter de conférer une apparence confuse à votre application. -> Vous pouvez également appliquer un style en saisissant des caractères spéciaux dans le titre du menu (voir ci-dessus).

    -> -> ### Icône ligne -> -> Vous pouvez associer une icône à une ligne de menu. Elle sera affichée directement dans le menu, à côté de la ligne : -> -> ![](assets/en/Menus/iconMenu.png) -> -> Pour définir l’icône dans l'éditeur de menu, choisissez l'option **Ouvrir** pour ouvrir un fichier image à partir du disque. If you select a picture file that is not already stored in the project resources folder, it is automatically copied in that folder. Une fois définie, l’icône de ligne apparaît dans la zone d’aperçu : -> -> ![](assets/en/Menus/iconpreview.png) -> -> Pour supprimer l’icône de ligne, choisissez l’option **Pas d’icône** dans le menu de la zone “Icône ligne”. -> -> Pour définir ds icônes de ligne à l'aide du langage 4D, appelez la commande `SET MENU ITEM ICON`. \ No newline at end of file +As a general rule, apply font styles sparingly to your menus — too many styles will be distracting to the user and give a cluttered look to your application. +> You can also apply styles by inserting special characters in the menu title (see [Using control characters](properties.md#using-control-characters) above). + + +### Item icon + +You can associate an icon with a menu item. It will displayed directly in the menu, next to the item: + +![](assets/en/Menus/iconMenu.png) + +To define the icon in the Menu editor, click on the "Item icon" area and select **Open** to open a picture from the disk. If you select a picture file that is not already stored in the project resources folder, it is automatically copied in that folder. Once set, the item icon appears in the preview area: + +![](assets/en/Menus/iconpreview.png) + +To remove the icon from the item, choose the **No Icon** option from the "Item Icon" area. + +To define item icons using the 4D language, call the `SET MENU ITEM ICON` command. \ No newline at end of file From de076f822784f88bb34dde81163a1483a5b23df6 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:16:33 +0100 Subject: [PATCH 034/260] New translations genInfo.md (French) --- website/translated_docs/fr/REST/genInfo.md | 32 +++++++++++----------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/website/translated_docs/fr/REST/genInfo.md b/website/translated_docs/fr/REST/genInfo.md index 313a6e7bdc804b..f0733a46c9c7c2 100644 --- a/website/translated_docs/fr/REST/genInfo.md +++ b/website/translated_docs/fr/REST/genInfo.md @@ -1,36 +1,36 @@ --- id: genInfo -title: Obtenir des informations du serveur +title: Getting Server Information --- -Vous pouvez obtenir plusieurs informations du serveur REST : +You can get several information from the REST server: -- les datastores exposées et leurs attributs -- le contenu du cache du serveur REST, y compris les sessions utilisateur. +- the exposed datastores and their attributes +- the REST server cache contents, including user sessions. -## Catalogue +## Catalog -Utilisez les paramètres [`$catalog`]($catalog.md),[`$catalog/{dataClass}`]($catalog.md#catalogdataclass), ou [`$catalog/$all`]($catalog.md#catalogall) pour obtenir la liste [des classes du datastore exposées et leurs attributs](configuration.md#exposing-tables-and-fields). +Use the [`$catalog`]($catalog.md), [`$catalog/{dataClass}`]($catalog.md#catalogdataclass), or [`$catalog/$all`]($catalog.md#catalogall) parameters to get the list of [exposed datastore classes and their attributes](configuration.md#exposing-tables-and-fields). -Pour obtenir la collection de toutes les dataclass exposées avec leurs attributs : +To get the collection of all exposed dataclasses along with their attributes: `GET /rest/$catalog/$all` -## Informations sur le cache +## Cache info -Utilisez le paramètre [`$info`]($info.md) pour obtenir des informations sur les sélections d'entités stockées dans le cache du 4D Server et sur l'exécution des sessions utilisateur. +Use the [`$info`]($info.md) parameter to get information about the entity selections currently stored in 4D Server's cache as well as running user sessions. -## queryPath et queryPlan +## queryPath and queryPlan -Les sélections d'entité générées par les requêtes peuvent avoir les deux propriétés suivantes : `queryPlan` et `queryPath`. Pour calculer et retourner ces propriétés, il vous suffit d'ajouter [`$queryPlan`]($queryplan.md) et/ou [`$queryPath`]($querypath.md) dans la demande REST. +Entity selections that are generated through queries can have the following two properties: `queryPlan` and `queryPath`. To calculate and return these properties, you just need to add [`$queryPlan`]($queryplan.md) and/or [`$queryPath`]($querypath.md) in the REST request. -Par exemple: +For example: `GET /rest/People/$filter="employer.name=acme AND lastName=Jones"&$queryplan=true&$querypath=true` -Ces propriétés sont des objets contenant des informations sur la façon dont le serveur exécute les requêtes composites en interne via des dataclass et des relations : -- **queryPlan** : objet contenant la description détaillée de la requête juste avant son exécution (c'est-à-dire la requête planifiée). -- **queryPath** : objet contenant la description détaillée de la requête telle qu'elle a été réellement effectuée. +These properties are objects that contain information about how the server performs composite queries internally through dataclasses and relations: +- **queryPlan**: object containing the detailed description of the query just before it was executed (i.e., the planned query). +- **queryPath**: object containing the detailed description of the query as it was actually performed. -Les informations enregistrées incluent le type de requête (indexé et séquentiel) et chaque sous-requête nécessaire ainsi que les opérateurs de conjonction. Les chemins d'accès des requêtes contiennent également le nombre d'entités identifiées et la durée d'exécution de chaque critère de recherche. Il peut être utile d'analyser ces informations lors du développement de votre application. Généralement, la description du plan de requête et son chemin d'accès sont identiques mais ils peuvent différer car 4D peut intégrer des optimisations dynamiques lorsqu'une requête est exécutée, afin d'améliorer les performances. Par exemple, le moteur 4D peut convertir dynamiquement une requête indexée en requête séquentielle s'il estime que ce processus est plus rapide. Ce cas particulier peut se produire lorsque le nombre d'entités recherchées est faible. \ No newline at end of file +The information recorded includes the query type (indexed and sequential) and each necessary subquery along with conjunction operators. Query paths also contain the number of entities found and the time required to execute each search criterion. You may find it useful to analyze this information while developing your application. Generally, the description of the query plan and its path are identical but they can differ because 4D can implement dynamic optimizations when a query is executed in order to improve performance. For example, the 4D engine can dynamically convert an indexed query into a sequential one if it estimates that it is faster. This particular case can occur when the number of entities being searched for is low. \ No newline at end of file From 0458ba5cd96f7c89b58b1dcb7d82c0b35f5c1805 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:16:35 +0100 Subject: [PATCH 035/260] New translations subform_overview.md (French) --- .../fr/FormObjects/subform_overview.md | 110 +++++++++--------- 1 file changed, 55 insertions(+), 55 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/subform_overview.md b/website/translated_docs/fr/FormObjects/subform_overview.md index 0b1108670d49dd..8160fc35b1de6b 100644 --- a/website/translated_docs/fr/FormObjects/subform_overview.md +++ b/website/translated_docs/fr/FormObjects/subform_overview.md @@ -1,89 +1,89 @@ --- id: subformOverview -title: Sous-formulaire +title: Subform --- ## Aperçu -Un sous-formulaire est un formulaire inclus dans un autre formulaire. +A subform is a form included in another form. -### Terminologie +### Terminology -Afin de bien définir les notions mises en oeuvre avec les sous-formulaires, voici quelques définitions relatives aux termes employés : +In order to clearly define the concepts implemented with subforms, here are some definitions for certain terms used: * **Subform**: a form intended for inclusion in another form, itself called the parent form. * **Parent form**: a form containing one or more subform(s). * **Subform container**: an object included in the parent form, displaying an instance of the subform. -* **Subform instance**: the representation of a subform in a parent form. Cette notion est importante car il est possible d’afficher plusieurs instances d’un même sous-formulaire dans un formulaire parent. +* **Subform instance**: the representation of a subform in a parent form. This concept is important because it is possible to display several instances of the same subform in a parent form. * **List form**: instance of subform displayed as a list. * **Detail form**: page-type input form associated with a list-type subform that can be accessed by double-clicking in the list. -## Sous-formulaires en liste +## List subforms -Un sous-formulaire en liste vous permet de saisir, visualiser et modifier des données dans d’autres tables. Les sous-formulaires en liste sont généralement utilisés avec les bases de données utilisant des liens de type 1 vers N. Un sous-formulaire en liste affiche les enregistrements de la table N liée par un lien automatique de type 1 vers N. Vous pouvez disposer de plusieurs sous-formulaires provenant de différentes tables dans le même formulaire. En revanche, il n’est pas possible de placer deux sous-formulaires appartenant à la même table dans une même page de formulaire. +A list subform lets you enter, view, and modify data in other tables. You usually use list subforms in databases in which you have established One to Many relations. A list subform on a form in a related One table lets you view, enter, and modify data in a related Many table. You can have several subforms coming from different tables in the same form. However, it is not possible to place two subforms that belong to the same table on the same page of a form. -Par exemple, une base de gestion de contacts peut utiliser une instance de sous-formulaire en liste pour afficher tous les contacts d’une société. Bien que les contacts apparaissent dans l’écran général, l’information est en fait stockée dans la table liée. A l’aide d’un lien 1 vers N, la conception de cette base de données rend facile le stockage d’un nombre illimité de contacts pour chacune des sociétés. Avec des liens automatiques, vous pouvez permettre la saisie de données dans la table liée sans programmation. +For example, a Contacts manager database might use a list subform to display all the telephone numbers for a particular contact. Although the telephone numbers appear on the Contacts screen, the information is actually stored in a related table. Using a One to Many relation, this database design makes it easy to store an unlimited number of telephone numbers per contact. With automatic relations, you can support data entry directly into the related Many table without programming. -Bien que les sous-formulaires en liste soient généralement associés aux tables N, une instance de sous-formulaire peut afficher des enregistrements de toute autre table de la base de données. +Although list subforms are generally associated with Many tables, a subform instance can display the records of any other database table. -Vous pouvez également permettre à l’utilisateur de saisir des données dans le formulaire liste. Suivant la configuration du sous-formulaire, l’utilisateur pourra afficher le formulaire détaillé en double-cliquant sur un sous-enregistrement ou en utilisant les commandes d’ajout et de modification des sous-enregistrements. +You can also allow the user to enter data in the List form. Depending on the configuration of the subform, the user may display the detail form by double-clicking on a subrecord or by using the commands for adding and editing subrecords. -> 4D propose trois actions standard, permettant de répondre aux besoins élémentaires de gestion des sous-enregistrements : `Modifier sous-enregistrement`, `Supprimer sous-enregistrement` et `Ajouter sous-enregistrement`. Lorsque le formulaire comporte plusieurs instances de sous-formulaires, l’action s’applique au sous-formulaire ayant le focus. +> 4D offers three standard actions to meet the basic needs for managing subrecords: `Edit Subrecord`, `Delete Subrecord`, and `Add Subrecord`. When the form includes several subform instances, the action will apply to the subform that has the focus. -## Sous-formulaires en page +## Page subforms -Les sous-formulaires en mode page peuvent afficher des données relatives à l'enregistrement courant ou toute valeur pertinente en fonction du contexte (variables, images, etc.). Il peuvent également, et c'est là leur intérêt majeur, comporter des fonctionnalités avancées et interagir avec le formulaire parent (widgets). Les sous-formulaires en page bénéficient de propriétés et d'événements spécifiques, et peuvent être entièrement contrôlés par programmation. +Page subforms can display the data of the current subrecord or any type of pertinent value depending on the context (variables, pictures, and so on). One of the main advantages of using page subforms is that they can include advanced functionalities and can interact directly with the parent form (widgets). Page subforms also have their own specific properties and events; you can manage them entirely by programming. -Le sous-formulaire en page utilise le formulaire entrée désigné par la propriété [Formulaire détaillé](properties_Subform.md#detail-form). A la différence d’un sous-formulaire en mode liste, le formulaire utilisé peut provenir de la même table que le formulaire parent. Il est également possible d’utiliser un formulaire projet. En exécution, un sous-formulaire en mode page dispose des caractéristiques d’affichage standard d’un formulaire entrée. +The page subform uses the input form indicated by the [Detail Form](properties_Subform.md#detail-form) property. Unlike a list subform, the form used can come from the same table as the parent form. It is also possible to use a project form. When executed, a page subform has the same standard display characteristics as an input form. -> Les widgets 4D sont des objets composés prédéfinis. Pour plus de détails sur les widgets, consultez le manuel [4D Widgets](https://doc.4d.com/4Dv17R6/4D/17-R6/4D-Widgets.100-4465257.en.html). +> 4D Widgets are predefined compound objects based upon page subforms. They are described in detail in a separate manual, [4D Widgets](https://doc.4d.com/4Dv17R6/4D/17-R6/4D-Widgets.100-4465257.en.html). -### Gestion de la variable liée +### Managing the bound variable -La [variable](properties_Object.md#variable-or-expression) liée au sous-formulaire permet de relier les deux contextes (formulaire et sous-formulaire) pour mettre au point des interfaces sophistiquées. Imaginons par exemple un sous-formulaire représentant une pendule dynamique, inséré dans un formulaire parent contenant une variable saisissable de type heure : +The [variable](properties_Object.md#variable-or-expression) bound to a page subform lets you link the parent form and subform contexts to put the finishing touches on sophisticated interfaces. For example, imagine a subform representing a dynamic clock, inserted into a parent form containing an enterable variable of the Time type: ![](assets/en/FormObjects/subforms1.png) -Both objects (time variable and subform container) *have the same variable name*. Dans ce cas, à l’ouverture du formulaire parent, les deux valeurs sont automatiquement synchronisées par 4D. Si la valeur de la variable est définie à plusieurs emplacements, la valeur utilisée sera celle qui aura été chargée en dernier lieu. L’ordre de chargement suivant est appliqué : 1-Méthodes objet du sous-formulaire 2-Méthode formulaire du sous-formulaire 3-Méthodes objet du formulaire parent 4-Méthode formulaire du formulaire parent +Both objects (time variable and subform container) *have the same variable name*. In this case, when you open the parent form, 4D synchronizes both values automatically. If the variable value is set at several locations, 4D uses the value that was loaded last. It applies the following loading order: 1-Object methods of subform 2-Form method of subform 3-Object methods of parent form 4-Form method of parent form -A l’exécution du formulaire parent, la synchronisation des variables doit être effectuée par le développeur à l’aide des événements formulaires adéquats. Deux types d’interactions peuvent se produire : du formulaire vers le sous-formulaire et inversement. +When the parent form is executed, the developer must take care to synchronize the variables using appropriate form events. Two types of interactions can occur: form to subform and vice versa. -#### Mise à jour du contenu du sous-formulaire -Scénario 1 : La valeur de la variable du formulaire parent est modifiée et cette modification doit être répercutée dans le sous-formulaire. Dans notre exemple, l’heure de Heureparis passe à 12:15:00, soit parce que l’utilisateur l’a saisie, soit parce qu’elle est mise à jour dynamiquement (via la commande `Current time` par exemple). +#### Updating subform contents +Case 1: The value of the parent form variable is modified and this modification must be passed on to the subform. In our example, the time of ParisTime changes to 12:15:00, either because the user entered it, or because it was updated dynamically (via the `Current time` command for example). -Dans ce cas, vous devez utiliser l'événement formulaire Sur modif variable liée. Cet événement doit être coché dans les propriétés du sous-formulaire, il sera généré dans la méthode formulaire du sous-formulaire. +In this case, you must use the On Bound Variable Change form event. This event must be selected in the subform properties; it is generated in the form method of the subform. ![](assets/en/FormObjects/subforms2.png) -L’événement formulaire `Sur modif variable liée` est généré : +The `On Bound Variable Change` form event is generated: -- dès qu’une valeur est affectée à la variable du formulaire parent, même si la même valeur est réaffectée, -- si le sous-formulaire appartient à la page formulaire courante ou à la page 0. +- as soon as a value is assigned to the variable of the parent form, even if the same value is reassigned, +- if the subform belongs to the current form page or to page 0. -A noter que, comme dans l’exemple ci-dessus, il est préférable d’utiliser la commande `OBJECT Get pointer` qui retourne un pointeur vers le conteneur de sous-formulaire plutôt que sa variable car il est possible d’insérer plusieurs sous-formulaires dans un même formulaire parent (par exemple, une fenêtre affichant des fuseaux horaires contiendrait plusieurs pendules). Dans ce cas, seul un pointeur permet de connaître le conteneur de sous-formulaire à l’origine de l’événement. +Note that, as in the above example, it is preferable to use the `OBJECT Get pointer` command which returns a pointer to the subform container rather than its variable because it is possible to insert several subforms in the same parent form (for example, a window displaying different time zones contains several clocks). In this case, only a pointer lets you know which subform container is at the origin of the event. -#### Mise à jour du contenu du formulaire parent +#### Updating parent form contents -Scénario 2 : Le contenu du sous-formulaire est modifié et cette modification doit être répercutée dans le formulaire parent. Dans notre exemple, imaginons que l’interface du sous-formulaire permette à l’utilisateur de déplacer "manuellement" les aiguilles. +Case 2: The contents of the subform are modified and this modification must be passed on to the parent form. In our example, imagine that the subform interface lets the user "manually" move the hands of the clock. -Dans ce cas, vous devez affecter la valeur de l’objet à la variable du conteneur du sous-formulaire parent depuis le sous-formulaire. Comme dans l’exemple précédent, il est conseillé d’utiliser pour cela la commande `OBJECT Get pointer` avec le sélecteur `Objet conteneur sous formulaire` qui retourne un pointeur vers le conteneur du sous-formulaire. +In this case, from the subform, you must assign the object value to the variable of the parent subform container. As in the previous example, we recommend that you use the `OBJECT Get pointer` command with the `Object subform container` selector which returns a pointer to the subform container. -Cette affectation génère l’événement formulaire `Sur données modifiées` dans la méthode de l’objet conteneur du sous-formulaire parent, ce qui vous permet d’effectuer tout type d’action. L’événement doit être coché dans les propriétés du conteneur de sous-formulaire. +Assigning the value to the variable generates the `On Data Change` form event in the object method of the parent subform container, which lets you perform any type of action. The event must be selected in the properties of the subform container. ![](assets/en/FormObjects/subforms3.png) > If you "manually" move the hands of the clock, this also generates the `On Data Change` form event in the object method of the *clockValue* variable in the subform. -### Utiliser l'objet associé au sous-formulaire +### Using the subform bound object -4D associe automatiquement un objet de langage (`C_OBJECT`) à chaque sous-formulaire. Le contenu de cet objet peut être lu et/ou modifié depuis le contexte du sous-formulaire, ce qui vous permet de partager des valeurs dans un contexte local. +4D automatically binds an object (`C_OBJECT`) to each subform. The contents of this object can be read and/or modified from within the context of the subform, allowing you to share values in a local context. -L'objet peut être créé automatiquement ou être la variable du conteneur parent, si elle a été explicitement nommée et typée Objet (voir ci-dessus). Dans tous les cas, l'objet est retourné par la commande `Form`, qui peut être appelée directement dans le sous-formulaire (l'usage d'un pointeur est inutile). Comme les objets sont toujours passés par référence, si l'utilisateur modifie une valeur de propriété dans le sous-formulaire, elle sera automatiquement mise à jour dans l'objet lui-même. +The object can be created automatically or be the parent container variable, if explicitely named and typed as Object (see below). In all cases, the object is returned by the `Form` command, which can be called directy the subform (using a pointer is useless). Since objects are always passed by reference, if the user modifies a property value in the subform, it will automatically be saved in the object itself. -Par exemple, dans votre sous-formulaire, les libellés des champs sont stockés dans l'objet associé afin de vous permettre d'afficher différentes langues : +For example, in your subform, field labels are stored in the bound object so that you can display different languages: ![](assets/en/FormObjects/subforms4.png) @@ -104,49 +104,49 @@ You can modify the labels from the subform by assigning values to the *InvoiceAd ![](assets/en/FormObjects/subforms5.png) -### Programmation inter-formulaires avancée -La communication entre le formulaire parent et les instances des sous-formulaires peut nécessiter d’aller au-delà de l’échange d’une valeur via la variable associée. En effet, vous pouvez souhaiter mettre à jour des variables dans les sous-formulaires en fonction d’actions effectuées dans le formulaire parent et inversement. Si l’on reprend l’exemple du sous-formulaire de type "pendule dynamique", on peut souhaiter définir une ou plusieurs heures d’alerte par pendule. +### Advanced inter-form programming +Communication between the parent form and the instances of the subform may require going beyond the exchange of a value through the bound variable. In fact, you may want to update variables in subforms according to the actions carried out in the parent form and vice versa. If we use the previous example of the "dynamic clock" type subform, we may want to set one or more alarm times for each clock. -Pour répondre à ces besoins, 4D propose les mécanismes suivants : +4D has implemented the following mechanisms to meet these needs: -- Utilisation du paramètre "sous-formulaire" avec la commande `OBJECT Get name` afin de désigner l’objet sous-formulaire et commande `OBJECT Get pointer`. -- Appel de l’objet conteneur depuis le sous-formulaire via la commande `CALL SUBFORM CONTAINER`, -- Exécution d’une méthode dans le contexte du sous-formulaire via la commande `EXECUTE METHOD IN SUBFORM`. +- Use of the "subform" parameter with the `OBJECT Get name` command to specify the subform object and the `OBJECT Get pointer` command. +- Calling of a container object from the subform using the `CALL SUBFORM CONTAINER` command, +- Execution of a method in the context of the subform via the `EXECUTE METHOD IN SUBFORM` command. -#### Commandes Object get pointer et Object get name -Outre le sélecteur `Objet conteneur sous formulaire`, la commande `OBJECT Get pointer` admet un paramètre permettant de préciser dans quel sous-formulaire chercher l’objet dont le nom est passé en deuxième paramètre. Cette syntaxe n’est utilisable que lorsque le sélecteur Objet nommé est passé. +#### Object get pointer and Object get name commands +In addition to the `Object subform container` selector, the `OBJECT Get pointer` command accepts a parameter that indicates in which subform to search for the object whose name is specified in the second parameter. This syntax can only be used when the Object named selector is passed. -Par exemple, l’instruction suivante : +For example, the following statement: ```4d $ptr:=OBJECT Get pointer(Object named;"MyButton";"MySubForm") ``` -... retrieves a pointer to the "MyButton" variable that is located in the "MySubForm" subform object. Cette syntaxe permet d’accéder depuis le formulaire parent à tout objet se trouvant dans un sous-formulaire. A noter également la commande `OBJECT Get name` qui permet de récupérer le nom de l’objet ayant le focus. +... retrieves a pointer to the "MyButton" variable that is located in the "MySubForm" subform object. This syntax can be used to access from the parent form any object found in a subform. Also note the `OBJECT Get name` command which can be used to retrieve the name of the object that has the focus. -#### Commande CALL SUBFORM CONTAINER +#### CALL SUBFORM CONTAINER command -La commande `CALL SUBFORM CONTAINER` permet à une instance de sous-formulaire d’envoyer un événement à l’objet conteneur du sous-formulaire, qui peut alors le traiter dans le contexte du formulaire parent. L’événement est reçu dans la méthode de l’objet conteneur. Il peut s’agir à l’origine de tout événement détecté par le sous-formulaire (clic, glisser-déposer, etc.). +The `CALL SUBFORM CONTAINER` command lets a subform instance send an event to the subform container object, which can then process it in the context of the parent form. The event is received in the container object method. It may be at the origin of any event detected by the subform (click, drag-and-drop, etc.). -Le code de l’événement est libre (par exemple, 20000 ou -100). Vous pouvez soit utiliser un code correspondant à un événement existant (par exemple, 3 pour `Sur validation`), soit utiliser un code personnalisé. Dans le premier cas, seuls les événements présents dans la liste des événements "cochables" des conteneurs de sous-formulaire peuvent être utilisés (cf. Liste des propriétés). L'événement doit en outre être coché. Dans le second cas, le code ne doit correspondre à aucun événement formulaire existant. Il est conseillé d’utiliser une valeur négative pour avoir l’assurance que 4D n’utilisera pas ce code dans les versions futures. +The code of the event is unrestricted (for example, 20000 or -100). You can use a code that corresponds to an existing event (for example, 3 for `On Validate`), or use a custom code. In the first case, you can only use events that you have checked in the Property List for subform containers. In the second case, the code must not correspond to any existing form event. It is recommended to use a negative value to be sure that this code will not be used by 4D in future versions. -Pour plus d'informations, reportez-vous à la description de la commande `CALL SUBFORM CONTAINER`. +For more information, refer to the description of the `CALL SUBFORM CONTAINER` command. -#### Commande EXECUTE METHOD IN SUBFORM -La commande `EXECUTE METHOD IN SUBFORM` permet à un formulaire ou à l’un de ses objets de demander l’exécution d’une méthode dans le contexte de l’instance du sous-formulaire, ce qui lui donne accès aux variables, objets, etc., du sous-formulaire. Cette méthode peut en outre recevoir des paramètres. +#### EXECUTE METHOD IN SUBFORM command +The `EXECUTE METHOD IN SUBFORM` command lets a form or one of its objects request the execution of a method in the context of the subform instance, which gives it access to the subform variables, objects, etc. This method can also receive parameters. -Ce mécanisme est illustré dans le schéma suivant : +This mechanism is illustrated in the following diagram: ![](assets/en/FormObjects/subforms6.png) -Pour plus d'informations, reportez-vous à la description de la commande `EXECUTE METHOD IN SUBFORM`. +For more information, refer to the description of the `EXECUTE METHOD IN SUBFORM` command. -#### Commande GOTO OBJECT -La commande `GOTO OBJECT` peut rechercher l’objet de destination dans le formulaire parent même si elle exécutée depuis un sous-formulaire. +#### GOTO OBJECT command +The `GOTO OBJECT` command looks for the destination object in the parent form even if it is executed from a subform. -## Propriétés prises en charge +## Supported Properties [Border Line Style](properties_BackgroundAndBorder.md#border-line-style) - [Bottom](properties_CoordinatesAndSizing.md#bottom) - [Class](properties_Object.md#css-class) - [Detail Form](properties_Subform.md#detail-form) - [Double click on empty row](properties_Subform.md#double-click-on-empty-row) - [Double click on row](properties_Subform.md#double-click-on-row) - [Enterable in list](properties_Subform.md#enterable-in-list) - [Expression Type](properties_Object.md#expression-type) - [Focusable](properties_Entry.md#focusable) - [Height](properties_CoordinatesAndSizing.md#height) - [Hide focus rectangle](properties_Appearance.md#hide-focus-rectangle) - [Horizontal Scroll Bar](properties_Appearance.md#horizontal-scroll-bar) - [Horizontal Sizing](properties_ResizingOptions.md#horizontal-sizing) - [Left](properties_CoordinatesAndSizing.md#left) - [List Form](properties_Subform.md#list-form) - [Method](properties_Action.md#method) - [Object Name](properties_Object.md#object-name) - [Print Frame](properties_Print.md#print-frame) - [Right](properties_CoordinatesAndSizing.md#right) - [Selection mode](properties_Subform.md#selection-mode) - [Source](properties_Subform.md#source) - [Top](properties_CoordinatesAndSizing.md#top) - [Type](properties_Object.md#type) - [Variable or Expression](properties_Object.md#variable-or-expression) - [Vertical Scroll Bar](properties_Appearance.md#vertical-scroll-bar) - [Vertical Sizing](properties_ResizingOptions.md#vertical-sizing) - [Visibility](properties_Display.md#visibility) - [Width](properties_CoordinatesAndSizing.md#width) From 268d6e0efe3bce759fe50c1b56dd220fa144742e Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:16:39 +0100 Subject: [PATCH 036/260] New translations properties_Reference.md (French) --- .../fr/FormObjects/properties_Reference.md | 388 +++++++++--------- 1 file changed, 194 insertions(+), 194 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/properties_Reference.md b/website/translated_docs/fr/FormObjects/properties_Reference.md index 37d847425a7ae7..cc76eb5ed5ac7c 100644 --- a/website/translated_docs/fr/FormObjects/properties_Reference.md +++ b/website/translated_docs/fr/FormObjects/properties_Reference.md @@ -1,203 +1,203 @@ --- id: propertiesReference -title: Liste de propriétés JSON +title: JSON property list --- -Vous trouverez dans cette page une liste complète de toutes les propriétés d'objets triées selon leur nom JSON. Cliquez sur un nom de propriété pour accéder à sa description détaillée. -> Dans le chapitre "Propriétés des objets de formulaire", les propriétés sont triées en fonction des noms et des thèmes de la liste des propriétés. +You will find in this page a comprehensive list of all object properties sorted through their JSON name. Click on a property name to access its detailed description. +> In the "Form Object Properties" chapter, properties are sorted according the Property List names and themes. [a](#a) - [b](#b) - [c](#c) - [d](#d) - [e](#e) - [f](#f) - [g](#g) - [h](#h) - [i](#i) - [j](#j) - [k](#k) - [l](#l) - [m](#m) - [n](#n) - [p](#p) - [r](#r) - [s](#s) - [t](#t) - [u](#u) - [v](#v) - [w](#w) - [z](#z) -| Propriété | Description | Valeurs possibles | -| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **a** | | | -| [action](properties_Action.md#standard-action) | Une action à exécuter. | Nom d'une action standard valide. | -| [allowFontColorPicker](properties_Text.md#allow-font-color-picker) | Permet d'afficher le sélecteur de polices système ou le sélecteur de couleurs pour modifier les attributs d'un objet | true, false (par défaut) | -| [alternateFill](properties_BackgroundAndBorder.md#alternate-background-color) | Permet de définir une couleur d'arrière-plan différente pour les lignes / colonnes impaires dans une list box. | Toute valeur CSS; "transparent"; "automatic" | -| [automaticInsertion](properties_DataSource.md#automatic-insertion) | Permet d'ajouter automatiquement une valeur à une liste lorsqu'un utilisateur saisit une valeur qui ne se trouve pas dans l'énumération associée à l'objet. | true, false | -| **b** | | | -| [booleanFormat](properties_Display.md#text-when-false-text-when-true) | Indique seulement deux valeurs possibles. | true, false | -| [borderRadius](properties_CoordinatesAndSizing.md#corner-radius) | La valeur du rayon d'arrondi pour les rectangles à coins arrondis. | minimum : 0 | -| [borderStyle](properties_BackgroundAndBorder.md#border-line-style-dotted-line-type) | Permet de définir un style standard pour la bordure de l'objet. | "system", "none", "solid", "dotted", "raised", "sunken", "double" | -| [bottom](properties_CoordinatesAndSizing.md#bottom) | Positionne un objet en bas (centré). | minimum : 0 | -| **c** | | | -| [choiceList](properties_DataSource.md#choice-list) | Associe une énumération à un objet | Une énumération | -| [class](properties_Object.md#css-class) | A list of space-separated words used as class selectors in css files. | Une liste de noms de classes | -| [columnCount](properties_Crop.md#columns) | Nombre de colonnes. | minimum: 1 | -| [columns](properties_ListBox.md#columns) | Une collection de colonnes list box | Collection d'objets colonne avec des propriétés de colonnes définies | -| [contextMenu](properties_Entry.md#context-menu) | Provides the user access to a standard context menu in the selected area. | "automatic", "none" | -| [continuousExecution](properties_Action.md#execute-object-method) | Designates whether or not to run the method of an object while the user is tracking the control. | true, false | -| [controlType](properties_Display.md#display-type) | Specifies how the value should be rendered in a list box cell. | "input", "checkbox" (pour les colonnes booléen / numérique), "automatic", "popup" (uniquement pour les colonnes booléens) | -| [currentItemSource](properties_DataSource.md#current-item) | The last selected item in a list box. | Expression d'objet | -| [currentItemPositionSource](properties_DataSource.md#current-item-position) | The position of the last selected item in a list box. | Expression numérique | -| [customBackgroundPicture](properties_TextAndPicture.md#background-pathname) | Sets the picture that will be drawn in the background of a button. | Chemin relatif en syntaxe POSIX. Doit être utilisé avec l'option "Personnalisé" de la propriété "Style". | -| [customBorderX](properties_TextAndPicture.md#horizontal-margin) | Sets the size (in pixels) of the internal horizontal margins of an object. Must be used with the style property with the "custom" option. | minimum : 0 | -| [customBorderY](properties_TextAndPicture.md#vertical-margin) | Sets the size (in pixels) of the internal vertical margins of an object. Must be used with the style property with the "custom" option. | minimum : 0 | -| [customOffset](properties_TextAndPicture.md#icon-offset) | Sets a custom offset value in pixels. Must be used with the style property with the "custom" option. | minimum : 0 | -| [customProperties](properties_Plugins.md#advanced-properties) | Advanced properties (if any) | Chaîne JSON ou chaîne encodée en base64 | -| **d** | | | -| [dataSource](properties_Object.md#variable-or-expression) (objets)
    [dataSource](properties_Subform.md#source) (sous-formulaires)
    [dataSource](properties_Object.md#data-source) (list box array)
    [dataSource](properties_Object.md#collection-or-entity-selection) (List box Collection ou entity selection
    [dataSource](properties_DataSource.md#expression) (colonne list box)
    [dataSource](properties_Hierarchy.md#hierarchical-list-box) (list box hiérarchique) | Specifies the source of the data. | A 4D variable, field name, or an arbitrary complex language expression. | -| [dataSourceTypeHint](properties_Object.md#expression-type) (objects)
    [dataSourceTypeHint](properties_DataSource.md#data-type) (colonne list box) | Indicates the variable type. | "integer", "number", "boolean", "picture", "text", date", "time", "arrayText", "collection", "object", "undefined" | -| [dateFormat](properties_Display.md#date-format) | Controls the way dates appear when displayed or printed. Must only be selected among the 4D built-in formats. | "systemShort", "systemMedium", "systemLong", "iso8601", "rfc822", "short", "shortCentury", "abbreviated", "long", "blankIfNull" (can be combined with the other possible values) | -| [defaultButton](properties_Appearance.md#default-button) | Modifies a button's appearance in order to indicate the recommended choice to the user. | true, false | -| [defaultValue](properties_RangeOfValues.md#default-value) | Defines a value or a stamp to be entered by default in an input object | String or "#D", "#H", "#N" | -| [deletableInList](properties_Subform.md#allow-deletion) | Specifies if the user can delete subrecords in a list subform | true, false | -| [detailForm](properties_ListBox.md#detail-form-name) (list box)
    [detailForm](properties_Subform.md#detail-form) (sous-formulaire) | Associates a detail form with a list subform. | Name (string) of table or project form, a POSIX path (string) to a .json file describing the form, or an object describing the form | -| [display](properties_Display.md#not-rendered) | The object is drawn or not on the form. | true, false | -| [doubleClickInEmptyAreaAction](properties_Subform.md#double-click-on-empty-row) | Action to perform in case of a double-click on an empty line of a list subform. | "addSubrecord" ou "" to do nothing | -| [doubleClickInRowAction](properties_ListBox.md#double-click-on-row) (list box)
    [doubleClickInRowAction](properties_Subform.md#double-click-on-row) (sous-formulaire) | Action to perform in case of a double-click on a record. | "editSubrecord", "displaySubrecord" | -| [dpi](properties_Appearance.md#resolution) | Screen resolution for the 4D Write Pro area contents. | 0=automatic, 72, 96 | -| [dragging](properties_Action.md#draggable) | Enables dragging function. | "none", "custom", "automatic" (hors énumération, list box) | -| [dropping](properties_Action.md#droppable) | Enables dropping function. | "none", "custom", "automatic" (hors énumération, list box) | -| **e** | | | -| [enterable](properties_Entry.md#enterable) | Indicates whether users can enter values into the object. | true, false | -| [enterableInList](properties_Subform.md#enterable-in-list) | Indicates whether users can modify record data directly in the list subform. | true, false | -| [entryFilter](properties_Entry.md#entry-filter) | Associates an entry filter with the object or column cells. This property is not accessible if the Enterable property is not enabled. | Text to narrow entries | -| [events](Events/overview.md) | List of all events selected for the object or form | Collection of event names, e.g. ["onClick","onDataChange"...]. | -| [excludedList](properties_RangeOfValues.md#excluded-list) | Allows setting a list whose values cannot be entered in the column. | Une liste de valeurs à exclure. | -| **f** | | | -| [border-style](properties_BackgroundAndBorder.md#background-color-fill-color) | Définit la couleur de fond d'un objet. | Any CSS value, "transparent", "automatic" | -| [focusable](properties_Entry.md#focusable) | Indicates whether the object can have the focus (and can thus be activated by the keyboard for instance) | true, false | -| [fontFamily](properties_Text.md#font) | Specifies the name of font family used in the object. | Nom d'une famille de police CSS | -| [fontSize](properties_Text.md#font-size) | Sets the font size in points when no font theme is selected | minimum : 0 | -| [fontStyle](properties_Text.md#italic) | Le texte sélectionné est légèrement penché vers la droite. | "normal", "italic" | -| [fontTheme](properties_Text.md#font-theme) | Sets the automatic style | "normal", "main", "additional" | -| [fontWeight](properties_Text.md#bold) | Le texte sélectionné est plus foncé et plus épais. | "normal", "bold" | -| [footerHeight](properties_Headers.md#height) | Used to set the row height | pattern (\\d+)(p|em)?$ (positive decimal + px/em ) | -| [frameDelay](properties_Animation.md#switch-every-x-ticks) | Permet de parcourir le contenu du bouton d'image à la vitesse spécifiée (en graduations). | minimum : 0 | -| **g** | | | -| [graduationStep](properties_Scale.md#graduation-step) | Scale display measurement. | minimum : 0 | -| **h** | | | -| [header](properties_Headers.md#headers) | Defines the header of a list box column | Object with properties "text", "name", "icon", "dataSource", "fontWeight", "fontStyle", "tooltip" | -| [headerHeight](properties_Headers.md#height) | Used to set the row height | pattern ^(\\d+)(px|em)?$ (positive decimal + px/em ) | -| [height](properties_CoordinatesAndSizing.md#height) | Designates an object's vertical size | minimum : 0 | -| [hideExtraBlankRows](properties_BackgroundAndBorder.md#hide-extra-blank-rows) | Deactivates the visibility of extra, empty rows. | true, false | -| [hideFocusRing](properties_Appearance.md#hide-focus-rectangle) | Hides the selection rectangle when the object has the focus. | true, false | -| [hideSystemHighlight](properties_Appearance.md#hide-selection-highlight) | Used to specify hiding highlighted records in the list box. | true, false | -| [highlightSet](properties_ListBox.md#highlight-set) | string | Name of the set. | -| [horizontalLineStroke](properties_Gridlines.md#horizontal-line-color) | Définit la couleur des lignes horizontales dans une list box (gris par défaut). | Any CSS value, "'transparent", "automatic" | -| **i** | | | -| [icon](properties_TextAndPicture.md#picture-pathname) | The pathname of the picture used for buttons, check boxes, radio buttons, list box headers. | Chemin relatif ou filesystem en syntaxe POSIX. | -| [iconFrames](properties_TextAndPicture.md#number-of-states) | Sets the exact number of states present in the picture. | minimum: 1 | -| [iconPlacement](properties_TextAndPicture.md#icon-location) | Désigne l'emplacement d'une icône par rapport à l'objet formulaire. | "aucun", "gauche", "droite" | -| **k** | | | -| [keyboardDialect](properties_Entry.md#keyboardDialect) | To associate a specific keyboard layout to an input. | A keyboard code string, e.g. "ar-ma" | -| **l** | | | -| [labels](properties_DataSource.md#choice-list-static-list) | A list of values to be used as tab control labels | ex: "a", "b, "c", ... | -| [labelsPlacement](properties_Scale.md#label-location) (objets)
    [labelsPlacement](properties_Appearance.md#tab-control-direction) (splitter/onglet) | Specifies the location of an object's displayed text. | "none", "top", "bottom", "left", "right" | -| [layoutMode](properties_Appearance.md#view-mode) | Mode for displaying the 4D Write Pro document in the form area. | "page", "draft", "embedded" | -| [left](properties_CoordinatesAndSizing.md#left) | Positions an object on the left. | minimum : 0 | -| list, see [choiceList](properties_DataSource.md#choice-list) | A list of choices associated with a hierarchical list | Une énumération | -| [listboxType](properties_Object.md#data-source) | The list box data source. | "array", "currentSelection", "namedSelection", "collection" | -| [listForm](properties_Subform.md#list-form) | List form to use in the subform. | Name (string) of table or project form, a POSIX path (string) to a .json file describing the form, or an object describing the form | -| [lockedColumnCount](properties_ListBox.md#number-of-locked-columns) | Number of columns that must stay permanently displayed in the left part of a list box. | minimum : 0 | -| [loopBackToFirstFrame](properties_Animation.md#loop-back-to-first-frame) | Les images sont affichées en boucle continue. | true, false | -| **m** | | | -| [max](properties_Scale.md#maximum) | The maximum allowed value. For numeric steppers, these properties represent seconds when the object is associated with a time type value and are ignored when it is associated with a date type value. | minimum: 0 (for numeric data types) | -| [maxWidth](properties_CoordinatesAndSizing.md#maximum-width) | Designates the largest size allowed for list box columns. | minimum : 0 | -| [metaSource](properties_Text.md#meta-info-expression) | A meta object containing style and selection settings. | An object expression | -| [method](properties_Action.md#method) | A project method name. | The name of an existing project method | -| [methodsAccessibility](properties_WebArea.md#access-4d-methods) | Which 4D methods can be called from a Web area | "none" (par défaut), "all" | -| [min](properties_Scale.md#minimum) | The minimum allowed value. For numeric steppers, these properties represent seconds when the object is associated with a time type value and are ignored when it is associated with a date type value. | minimum: 0 (for numeric data types) | -| [minWidth](properties_CoordinatesAndSizing.md#minimum-width) | Designates the smallest size allowed for list box columns. | minimum : 0 | -| [movableRows](properties_Action.md#movable-rows) | Autorise le déplacement des lignes pendant l'exécution. | true, false | -| [multiline](properties_Entry.md#multiline) | Handles multiline contents. | "yes", "no", "automatic" | -| **n** | | | -| [name](properties_Object.md#object-name) | The name of the form object. (Optional for the form) | Any name which does not belong to an already existing object | -| [numberFormat](properties_Display.md#number-format) | Controls the way the alphanumeric fields and variables appear when displayed or printed. | Numbers (including a decimal point or minus sign if necessary) | -| **p** | | | -| [picture](properties_Picture.md#pathname) | The pathname of the picture for picture buttons, picture pop-up menus, or static pictures | Chemin relatif ou filesystem en syntaxe POSIX. | -| [pictureFormat](properties_Display.md#picture-format) (input, list box column or footer)
    [pictureFormat](properties_Picture.md#display) (static picture) | Controls how pictures appear when displayed or printed. | "truncatedTopLeft", "scaled", "truncatedCenter", "tiled", "proportionalTopLeft" (excluding static pictures), "proportionalCenter"(excluding static pictures) | -| [placeholder](properties_Entry.md#placeholder) | Grays out text when the data source value is empty. | Text to be grayed out. | -| [pluginAreaKind](properties_Object.md#plug-in-kind) | Describes the type of plug-in. | The type of plug-in. | -| [popupPlacement](properties_TextAndPicture.md#with-pop-up-menu) | Allows displaying a symbol that appears as a triangle in the button, which indicates that there is a pop-up menu attached. | "None", Linked", "Separated" | -| [printFrame](properties_Print.md#print-frame) | Print mode for objects whose size can vary from one record to another depending on their contents | "fixed", "variable", (sous-formulaire uniquement) "fixedMultiple" | -| [progressSource](properties_WebArea.md#progression) | A value between 0 and 100, representing the page load completion percentage in the Web area. La variable est mise à jour automatiquement par 4D. Il n’est pas possible de la modifier manuellement. | minimum : 0 | -| **r** | | | -| [radioGroup](properties_Object.md#radio-group) | Enables radio buttons to be used in coordinated sets: only one button at a time can be selected in the set. | Radio group name | -| [requiredList](properties_RangeOfValues.md#required-list) | Allows setting a list where only certain values can be inserted. | Une liste de valeurs obligatoires. | -| [resizable](properties_ResizingOptions.md#resizable) | Designates if the size of an object can be modified by the user. | "true", "false" | -| [resizingMode](properties_ResizingOptions.md#column-auto-resizing) | Specifies if a list box column should be automatically resized | "rightToLeft", "legacy" | -| [right](properties_CoordinatesAndSizing.md#right) | Positions an object on the right. | minimum : 0 | -| [rowControlSource](properties_ListBox.md#row-control-array) | A 4D array defining the list box rows. | Tableau | -| [rowCount](properties_Crop.md#rows) | Sets the number of rows. | minimum: 1 | -| [rowFillSource](properties_BackgroundAndBorder.md#row-background-color-array) (array list box)
    [rowFillSource](properties_BackgroundAndBorder.md#background-color-expression) (selection or collection list box) | The name of an array or expression to apply a custom background color to each row of a list box. | The name of an array or expression. | -| [rowHeight](properties_CoordinatesAndSizing.md#row-height) | Sets the height of list box rows. | CSS value unit "em" or "px" (default) | -| [rowHeightAuto](properties_CoordinatesAndSizing.md#automatic-row-height) | boolean | "true", "false" | -| [rowHeightAutoMax](properties_CoordinatesAndSizing.md#maximum-width) | Designates the largest height allowed for list box rows. | CSS value unit "em" or "px" (default). minimum : 0 | -| [rowHeightAutoMin](properties_CoordinatesAndSizing.md#minimum-width) | Designates the smallest height allowed for list box rows. | CSS value unit "em" or "px" (default). minimum : 0 | -| [rowHeightSource](properties_CoordinatesAndSizing.md#row-height-array) | An array defining different heights for the rows in a list box. | Nom d'une variable tableau 4D. | -| [rowStrokeSource](properties_Text.md#row-font-color-array) (array list box)
    [rowStrokeSource](properties_Text.md#font-color-expression) (selection or collection/entity selection list box) | An array or expression for managing row colors. | Name of array or expression. | -| [rowStyleSource](properties_Text.md#row-style-array) (array list box)
    [rowStyleSource](properties_Text.md#style-expression) (selection or collection/entity selection list box) | An array or expression for managing row styles. | Name of array or expression. | -| **s** | | | -| [scrollbarHorizontal](properties_Appearance.md#horizontal-scroll-bar) | A tool allowing the user to move the viewing area to the left or right. | "visible", "hidden", "automatic" | -| [scrollbarVertical](properties_Appearance.md#vertical-scroll-bar) | A tool allowing the user to move the viewing area up or down. | "visible", "hidden", "automatic" | -| [selectedItemsSource](properties_DataSource.md#selected-items) | Collection of the selected items in a list box. | Collection expression | -| [selectionMode](properties_Action.md#multi-selectable) (hierarchical list)
    [selectionMode](properties_ListBox.md#selection-mode) (list box)
    [selectionMode](properties_Subform.md#selection-mode) (subform) | Allows the selection of multiple records/rows. | "multiple", "single", "none" | -| [shortcutAccel](properties_Entry.md#shortcut) | Specifies the system to use, Windows or Mac. | true, false | -| [shortcutAlt](properties_Entry.md#shortcut) | Designates the Alt key | true, false | -| [shortcutCommand](properties_Entry.md#shortcut) | Designates the Command key (macOS) | true, false | -| [shortcutControl](properties_Entry.md#shortcut) | Designates the Control key (Windows) | true, false | -| [shortcutKey](properties_Entry.md#shortcut) | The letter or name of a special meaning key. | "[F1]" -> "[F15]", "[Return]", "[Enter]", "[Backspace]", "[Tab]", "[Esc]", "[Del]", "[Home]", "[End]", "[Help]", "[Page up]", "[Page down]", "[left arrow]", "[right arrow]", "[up arrow]", "[down arrow]" | -| [shortcutShift](properties_Entry.md#shortcut) | Designates the Shift key | true, false | -| [showFooters](properties_Footers.md#display-footers) | Displays or hides column footers. | true, false | -| [showGraduations](properties_Scale.md#display-graduation) | Displays/Hides the graduations next to the labels. | true, false | -| [showHeaders](properties_Headers.md#display-headers) | Displays or hides column headers. | true, false | -| [showHiddenChars](properties_Appearance.md#show-hidden-characters) | Displays/hides invisible characters. | true, false | -| [showHorizontalRuler](properties_Appearance.md#show-horizontal-ruler) | Displays/hides the horizontal ruler when the document view is in Page view mode | true, false | -| [showHTMLWysiwyg](properties_Appearance.md#show-html-wysiwyg) | Enables/disables the HTML WYSIWYG view | true, false | -| [showPageFrames](properties_Appearance.md#show-page-frame) | Displays/hides the page frame when the document view is in Page view mode | true, false | -| [showReferences](properties_Appearance.md#show-references) | Displays all 4D expressions inserted in the 4D Write Pro document as *references* | true, false | -| [showSelection](properties_Entry.md#selection-always-visible) | Keeps the selection visible within the object after it has lost the focus | true, false | -| [showVerticalRuler](properties_Appearance.md#show-vertical-ruler) | Displays/hides the vertical ruler when the document view is in Page view mode | true, false | -| [singleClickEdit](properties_Entry.md#single-click-edit) | Enables direct passage to edit mode. | true, false | -| [sizingX](properties_ResizingOptions.md#horizontal-sizing) | Specifies if the horizontal size of an object should be moved or resized when a user resizes the form. | "grow", "move", "fixed" | -| [sizingY](properties_ResizingOptions.md#horizontal-sizing) | Specifies if the vertical size of an object should be moved or resized when a user resizes the form. | "grow", "move", "fixed" | -| [sortable](properties_Action.md#sortable) | Allows sorting column data by clicking the header. | true, false | -| [spellcheck](properties_Entry.md#auto-spellcheck) | Activates the spell-check for the object | true, false | -| [splitterMode](properties_ResizingOptions.md#pusher) | When a splitter object has this property, other objects to its right (vertical splitter) or below it (horizontal splitter) are pushed at the same time as the splitter, with no stop. | "grow", "move", "fixed" | -| [startPoint](shapes_overview.md#startpoint-property) | Starting point for drawing a line object (only available in JSON Grammar). | "bottomLeft", topLeft" | -| [staticColumnCount](properties_ListBox.md#number-of-static-columns) | Number of columns that cannot be moved during execution. | minimum : 0 | -| [step](properties_Scale.md#step) | Minimum interval accepted between values during use. For numeric steppers, this property represents seconds when the object is associated with a time type value and days when it is associated with a date type value. | minimum: 1 | -| [storeDefaultStyle](properties_Text.md#store-with-default-style-tags) | Store the style tags with the text, even if no modification has been made | true, false | -| [stroke](properties_Text.md#font-color) (texte)
    [stroke](properties_BackgroundAndBorder.md#line-color) (lignes)
    [stroke](properties_BackgroundAndBorder.md#transparent) (list box) | Specifies the color of the font or line used in the object. | Any CSS value, "transparent", "automatic" | -| [strokeDashArray](properties_BackgroundAndBorder.md#dotted-line-type) | Describes dotted line type as a sequence of black and white points | Number array or string | -| [strokeWidth](properties_BackgroundAndBorder.md#line-width) | Désigne l'épaisseur d'une ligne. | An integer or 0 for smallest width on a printed form | -| [style](properties_TextAndPicture.md#multi-style) | Permet de définir l'apparence générale du bouton. Pour plus d'informations, voir Style de bouton. | "regular", "flat", "toolbar", "bevel", "roundedBevel", "gradientBevel", "texturedBevel", "office", "help", "circular", "disclosure", "roundedDisclosure", "custom" | -| [styledText](properties_Text.md#style) | Permet d'utiliser des styles spécifiques dans la zone sélectionnée. | true, false | -| [switchBackWhenReleased](properties_Animation.md#switch-back-when-released) | Affiche la première image en permanence, sauf lorsque l'utilisateur clique sur le bouton. Affiche la deuxième image jusqu'à ce que le bouton de la souris soit relâché. | true, false | -| [switchContinuously](properties_Animation.md#switch-continuously-on-clicks) | Permet à l'utilisateur de maintenir le bouton de la souris enfoncé pour afficher les images en continu (c'est-à-dire sous forme d'animation). | true, false | -| [switchWhenRollover](properties_Animation.md#switch-when-roll-over) | Modifie le contenu du bouton image lorsque le curseur de la souris passe dessus. L'image initiale s'affiche lorsque le curseur quitte la zone du bouton. | true, false | -| **t** | | | -| [table](properties_Subform.md#source) | Table that the list subform belongs to (if any). | 4D table name, or "" | -| [Texte](properties_Object.md#title) | The title of the form object | Any text | -| [textAlign](properties_Text.md#horizontal-alignment) | Emplacement horizontal du texte dans la zone où il apparait. | "automatic", "right", "center", "justify", "left" | -| [textAngle](properties_Text.md#orientation) | Modifies the orientation (rotation) of the text area. | 0, 90, 180, 270 | -| [textDecoration](properties_Text.md#underline) | Sets the selected text to have a line running beneath it. | "normal", "underline" | -| [textFormat](properties_Display.md#alpha-format) | Controls the way the alphanumeric fields and variables appear when displayed or printed. | "### ####", "(###) ### ####", "### ### ####", "### ## ####", "00000", custom formats | -| [textPlacement](properties_TextAndPicture.md#title-picture-position) | Relative location of the button title in relation to the associated icon. | "left", "top", "right", "bottom", "center" | -| [threeState](properties_Display.md#three-states) | Allows a check box object to accept a third state. | true, false | -| [timeFormat](properties_Display.md#time-format) | Controls the way times appear when displayed or printed. Must only be selected among the 4D built-in formats. | "systemShort", "systemMedium", "systemLong", "iso8601", "hh_mm_ss", "hh_mm", "hh_mm_am", "mm_ss", "HH_MM_SS", "HH_MM", "MM_SS", "blankIfNull" (can be combined with the other possible values) | -| [truncateMode](properties_Display.md#truncate-with-ellipsis) | Controls the display of values when list box columns are too narrow to show their full contents. | "withEllipsis", "none" | -| [type](properties_Object.md#type) | Mandatory. Designates the data type of the form object. | "text", "rectangle", "groupBox", "tab", "line", "button", "checkbox", "radio", "dropdown", "combo", "webArea", "write", "subform", "plugin", "splitter", "buttonGrid", "progress", "ruler", "spinner", "stepper", "list", "pictureButton", "picturePopup", "listbox", "input", "view" | -| [tooltip](properties_Help.md) | Provide users with additional information about a field. | Additional information to help a user | -| [top](properties_CoordinatesAndSizing.md#top) | Positions an object at the top (centered). | minimum : 0 | -| **u** | | | -| [urlSource](properties_WebArea.md#url) | Designates the the URL loaded or being loading by the associated Web area. | Une URL. | -| [useLastFrameAsDisabled](properties_Animation.md#use-last-frame-as-disabled) | Permet de définir la dernière vignette comme étant celle à afficher lorsque le bouton est désactivé. | true, false | -| [userInterface](properties_Appearance.md#user-interface) | 4D View Pro area interface. | "none" (default), "ribbon", "toolbar" | -| **v** | | | -| [values](properties_DataSource.md#default-list-values) | List of default values for an array listbox column | ex: "A","B","42"... | -| [variableCalculation](properties_Object.md#variable-calculation) | Allows mathematical calculations to be performed. | "none", "minimum", "maximum", "sum", "count", "average", "standardDeviation", "variance", "sumSquare" | -| [verticalAlign](properties_Text.md#vertical-alignment) | Emplacement vertical du texte dans la zone où il apparait. | "automatic", "top", "middle", "bottom" | -| [verticalLineStroke](properties_Gridlines.md#vertical-line-color) | Définit la couleur des lignes verticales d'une list box (gris par défaut). | Any CSS value, "'transparent", "automatic" | -| [visibility](properties_Display.md#visibility) | Allows hiding the object in the Application environment. | "visible", "hidden", "selectedRows", "unselectedRows" | -| **w** | | | -| [webEngine](properties_WebArea.md#use-embedded-web-rendering-engine) | Used to choose between two rendering engines for the Web area, depending on the specifics of the application. | "embedded", "system" | -| [width](properties_CoordinatesAndSizing.md#width) | Designates an object's horizontal size | minimum : 0 | -| [withFormulaBar](properties_Appearance.md#show-formula-bar) | Manages the display of a formula bar with the Toolbar interface in the 4D View Pro area. | true, false | -| [wordwrap](properties_Display.md#wordwrap) | Manages the display of contents when it exceeds the width of the object. | "automatic" (excluding list box), "normal", "none" | -| **z** | | | -| [zoom](properties_Appearance.md#zoom) | Zoom percentage for displaying 4D Write Pro area | number (minimum=0) | +| Property | Description | Possible Values | +| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **a** | | | +| [action](properties_Action.md#standard-action) | Typical activity to be performed. | The name of a valid standard action. | +| [allowFontColorPicker](properties_Text.md#allow-font-color-picker) | Allows displaying system font picker or color picker to edit object attributes | true, false (default) | +| [alternateFill](properties_BackgroundAndBorder.md#alternate-background-color) | Allows setting a different background color for odd-numbered rows/columns in a list box. | Any CSS value; "transparent"; "automatic" | +| [automaticInsertion](properties_DataSource.md#automatic-insertion) | Enables automatically adding a value to a list when a user enters a value that is not in the object's associated choice list. | true, false | +| **b** | | | +| [booleanFormat](properties_Display.md#text-when-false-text-when-true) | Specifies only two possible values. | true, false | +| [borderRadius](properties_CoordinatesAndSizing.md#corner-radius) | The radius value for round rectangles. | minimum: 0 | +| [borderStyle](properties_BackgroundAndBorder.md#border-line-style-dotted-line-type) | Allows setting a standard style for the object border. | "system", "none", "solid", "dotted", "raised", "sunken", "double" | +| [bottom](properties_CoordinatesAndSizing.md#bottom) | Positions an object at the bottom (centered). | minimum: 0 | +| **c** | | | +| [choiceList](properties_DataSource.md#choice-list) | A list of choices associated with an object | A list of choices | +| [class](properties_Object.md#css-class) | A list of space-separated words used as class selectors in css files. | A list of class names | +| [columnCount](properties_Crop.md#columns) | Number of columns. | minimum: 1 | +| [columns](properties_ListBox.md#columns) | A collection of list box columns | Collection of column objects with defined column properties | +| [contextMenu](properties_Entry.md#context-menu) | Provides the user access to a standard context menu in the selected area. | "automatic", "none" | +| [continuousExecution](properties_Action.md#execute-object-method) | Designates whether or not to run the method of an object while the user is tracking the control. | true, false | +| [controlType](properties_Display.md#display-type) | Specifies how the value should be rendered in a list box cell. | "input", "checkbox" (for boolean / numeric columns), "automatic", "popup" (only for boolean columns) | +| [currentItemSource](properties_DataSource.md#current-item) | The last selected item in a list box. | Object expression | +| [currentItemPositionSource](properties_DataSource.md#current-item-position) | The position of the last selected item in a list box. | Number expression | +| [customBackgroundPicture](properties_TextAndPicture.md#background-pathname) | Sets the picture that will be drawn in the background of a button. | Relative path in POSIX syntax. Must be used in conjunction with the style property with the "custom" option. | +| [customBorderX](properties_TextAndPicture.md#horizontal-margin) | Sets the size (in pixels) of the internal horizontal margins of an object. Must be used with the style property with the "custom" option. | minimum: 0 | +| [customBorderY](properties_TextAndPicture.md#vertical-margin) | Sets the size (in pixels) of the internal vertical margins of an object. Must be used with the style property with the "custom" option. | minimum: 0 | +| [customOffset](properties_TextAndPicture.md#icon-offset) | Sets a custom offset value in pixels. Must be used with the style property with the "custom" option. | minimum: 0 | +| [customProperties](properties_Plugins.md#advanced-properties) | Advanced properties (if any) | JSON string or base64 encoded string | +| **d** | | | +| [dataSource](properties_Object.md#variable-or-expression) (objects)
    [dataSource](properties_Subform.md#source) (subforms)
    [dataSource](properties_Object.md#data-source) (array list box)
    [dataSource](properties_Object.md#collection-or-entity-selection) (Collection or entity selection list box)
    [dataSource](properties_DataSource.md#expression) (list box column)
    [dataSource](properties_Hierarchy.md#hierarchical-list-box) (hierarchical list box) | Specifies the source of the data. | A 4D variable, field name, or an arbitrary complex language expression. | +| [dataSourceTypeHint](properties_Object.md#expression-type) (objects)
    [dataSourceTypeHint](properties_DataSource.md#data-type) (list box column) | Indicates the variable type. | "integer", "number", "boolean", "picture", "text", date", "time", "arrayText", "collection", "object", "undefined" | +| [dateFormat](properties_Display.md#date-format) | Controls the way dates appear when displayed or printed. Must only be selected among the 4D built-in formats. | "systemShort", "systemMedium", "systemLong", "iso8601", "rfc822", "short", "shortCentury", "abbreviated", "long", "blankIfNull" (can be combined with the other possible values) | +| [defaultButton](properties_Appearance.md#default-button) | Modifies a button's appearance in order to indicate the recommended choice to the user. | true, false | +| [defaultValue](properties_RangeOfValues.md#default-value) | Defines a value or a stamp to be entered by default in an input object | String or "#D", "#H", "#N" | +| [deletableInList](properties_Subform.md#allow-deletion) | Specifies if the user can delete subrecords in a list subform | true, false | +| [detailForm](properties_ListBox.md#detail-form-name) (list box)
    [detailForm](properties_Subform.md#detail-form) (subform) | Associates a detail form with a list subform. | Name (string) of table or project form, a POSIX path (string) to a .json file describing the form, or an object describing the form | +| [display](properties_Display.md#not-rendered) | The object is drawn or not on the form. | true, false | +| [doubleClickInEmptyAreaAction](properties_Subform.md#double-click-on-empty-row) | Action to perform in case of a double-click on an empty line of a list subform. | "addSubrecord" or "" to do nothing | +| [doubleClickInRowAction](properties_ListBox.md#double-click-on-row) (list box)
    [doubleClickInRowAction](properties_Subform.md#double-click-on-row) (subform) | Action to perform in case of a double-click on a record. | "editSubrecord", "displaySubrecord" | +| [dpi](properties_Appearance.md#resolution) | Screen resolution for the 4D Write Pro area contents. | 0=automatic, 72, 96 | +| [dragging](properties_Action.md#draggable) | Enables dragging function. | "none", "custom", "automatic" (excluding list, list box) | +| [dropping](properties_Action.md#droppable) | Enables dropping function. | "none", "custom", "automatic" (excluding list, list box) | +| **e** | | | +| [enterable](properties_Entry.md#enterable) | Indicates whether users can enter values into the object. | true, false | +| [enterableInList](properties_Subform.md#enterable-in-list) | Indicates whether users can modify record data directly in the list subform. | true, false | +| [entryFilter](properties_Entry.md#entry-filter) | Associates an entry filter with the object or column cells. This property is not accessible if the Enterable property is not enabled. | Text to narrow entries | +| [events](Events/overview.md) | List of all events selected for the object or form | Collection of event names, e.g. ["onClick","onDataChange"...]. | +| [excludedList](properties_RangeOfValues.md#excluded-list) | Allows setting a list whose values cannot be entered in the column. | A list of values to be excluded. | +| **f** | | | +| [fill](properties_BackgroundAndBorder.md#background-color-fill-color) | Defines the background color of an object. | Any CSS value, "transparent", "automatic" | +| [focusable](properties_Entry.md#focusable) | Indicates whether the object can have the focus (and can thus be activated by the keyboard for instance) | true, false | +| [fontFamily](properties_Text.md#font) | Specifies the name of font family used in the object. | CSS font family name | +| [fontSize](properties_Text.md#font-size) | Sets the font size in points when no font theme is selected | minimum: 0 | +| [fontStyle](properties_Text.md#italic) | Sets the selected text to slant slightly to the right. | "normal", "italic" | +| [fontTheme](properties_Text.md#font-theme) | Sets the automatic style | "normal", "main", "additional" | +| [fontWeight](properties_Text.md#bold) | Sets the selected text to appear darker and heavier. | "normal", "bold" | +| [footerHeight](properties_Footers.md#height) | Used to set the row height | pattern (\\d+)(p|em)?$ (positive decimal + px/em ) | +| [frameDelay](properties_Animation.md#switch-every-x-ticks) | Enables cycling through the contents of the picture button at the specified speed (in ticks). | minimum: 0 | +| **g** | | | +| [graduationStep](properties_Scale.md#graduation-step) | Scale display measurement. | minimum: 0 | +| **h** | | | +| [header](properties_Headers.md#headers) | Defines the header of a list box column | Object with properties "text", "name", "icon", "dataSource", "fontWeight", "fontStyle", "tooltip" | +| [headerHeight](properties_Headers.md#height) | Used to set the row height | pattern ^(\\d+)(px|em)?$ (positive decimal + px/em ) | +| [height](properties_CoordinatesAndSizing.md#height) | Designates an object's vertical size | minimum: 0 | +| [hideExtraBlankRows](properties_BackgroundAndBorder.md#hide-extra-blank-rows) | Deactivates the visibility of extra, empty rows. | true, false | +| [hideFocusRing](properties_Appearance.md#hide-focus-rectangle) | Hides the selection rectangle when the object has the focus. | true, false | +| [hideSystemHighlight](properties_Appearance.md#hide-selection-highlight) | Used to specify hiding highlighted records in the list box. | true, false | +| [highlightSet](properties_ListBox.md#highlight-set) | string | Name of the set. | +| [horizontalLineStroke](properties_Gridlines.md#horizontal-line-color) | Defines the color of the horizontal lines in a list box (gray by default). | Any CSS value, "'transparent", "automatic" | +| **i** | | | +| [icon](properties_TextAndPicture.md#picture-pathname) | The pathname of the picture used for buttons, check boxes, radio buttons, list box headers. | Relative or filesystem path in POSIX syntax. | +| [iconFrames](properties_TextAndPicture.md#number-of-states) | Sets the exact number of states present in the picture. | minimum: 1 | +| [iconPlacement](properties_TextAndPicture.md#icon-location) | Designates the placement of an icon in relation to the form object. | "none", "left", "right" | +| **k** | | | +| [keyboardDialect](properties_Entry.md#keyboardDialect) | To associate a specific keyboard layout to an input. | A keyboard code string, e.g. "ar-ma" | +| **l** | | | +| [labels](properties_DataSource.md#choice-list-static-list) | A list of values to be used as tab control labels | ex: "a", "b, "c", ... | +| [labelsPlacement](properties_Scale.md#label-location) (objects)
    [labelsPlacement](properties_Appearance.md#tab-control-direction) (splitter / tab control) | Specifies the location of an object's displayed text. | "none", "top", "bottom", "left", "right" | +| [layoutMode](properties_Appearance.md#view-mode) | Mode for displaying the 4D Write Pro document in the form area. | "page", "draft", "embedded" | +| [left](properties_CoordinatesAndSizing.md#left) | Positions an object on the left. | minimum: 0 | +| list, see [choiceList](properties_DataSource.md#choice-list) | A list of choices associated with a hierarchical list | A list of choices | +| [listboxType](properties_Object.md#data-source) | The list box data source. | "array", "currentSelection", "namedSelection", "collection" | +| [listForm](properties_Subform.md#list-form) | List form to use in the subform. | Name (string) of table or project form, a POSIX path (string) to a .json file describing the form, or an object describing the form | +| [lockedColumnCount](properties_ListBox.md#number-of-locked-columns) | Number of columns that must stay permanently displayed in the left part of a list box. | minimum: 0 | +| [loopBackToFirstFrame](properties_Animation.md#loop-back-to-first-frame) | Pictures are displayed in a continuous loop. | true, false | +| **m** | | | +| [max](properties_Scale.md#maximum) | The maximum allowed value. For numeric steppers, these properties represent seconds when the object is associated with a time type value and are ignored when it is associated with a date type value. | minimum: 0 (for numeric data types) | +| [maxWidth](properties_CoordinatesAndSizing.md#maximum-width) | Designates the largest size allowed for list box columns. | minimum: 0 | +| [metaSource](properties_Text.md#meta-info-expression) | A meta object containing style and selection settings. | An object expression | +| [method](properties_Action.md#method) | A project method name. | The name of an existing project method | +| [methodsAccessibility](properties_WebArea.md#access-4d-methods) | Which 4D methods can be called from a Web area | "none" (default), "all" | +| [min](properties_Scale.md#minimum) | The minimum allowed value. For numeric steppers, these properties represent seconds when the object is associated with a time type value and are ignored when it is associated with a date type value. | minimum: 0 (for numeric data types) | +| [minWidth](properties_CoordinatesAndSizing.md#minimum-width) | Designates the smallest size allowed for list box columns. | minimum: 0 | +| [movableRows](properties_Action.md#movable-rows) | Authorizes the movement of rows during execution. | true, false | +| [multiline](properties_Entry.md#multiline) | Handles multiline contents. | "yes", "no", "automatic" | +| **n** | | | +| [name](properties_Object.md#object-name) | The name of the form object. (Optional for the form) | Any name which does not belong to an already existing object | +| [numberFormat](properties_Display.md#number-format) | Controls the way the alphanumeric fields and variables appear when displayed or printed. | Numbers (including a decimal point or minus sign if necessary) | +| **p** | | | +| [picture](properties_Picture.md#pathname) | The pathname of the picture for picture buttons, picture pop-up menus, or static pictures | Relative or filesystem path in POSIX syntax. | +| [pictureFormat](properties_Display.md#picture-format) (input, list box column or footer)
    [pictureFormat](properties_Picture.md#display) (static picture) | Controls how pictures appear when displayed or printed. | "truncatedTopLeft", "scaled", "truncatedCenter", "tiled", "proportionalTopLeft" (excluding static pictures), "proportionalCenter"(excluding static pictures) | +| [placeholder](properties_Entry.md#placeholder) | Grays out text when the data source value is empty. | Text to be grayed out. | +| [pluginAreaKind](properties_Object.md#plug-in-kind) | Describes the type of plug-in. | The type of plug-in. | +| [popupPlacement](properties_TextAndPicture.md#with-pop-up-menu) | Allows displaying a symbol that appears as a triangle in the button, which indicates that there is a pop-up menu attached. | "None", Linked", "Separated" | +| [printFrame](properties_Print.md#print-frame) | Print mode for objects whose size can vary from one record to another depending on their contents | "fixed", "variable", (subform only) "fixedMultiple" | +| [progressSource](properties_WebArea.md#progression) | A value between 0 and 100, representing the page load completion percentage in the Web area. Automatically updated by 4D, cannot be modified manually. | minimum: 0 | +| **r** | | | +| [radioGroup](properties_Object.md#radio-group) | Enables radio buttons to be used in coordinated sets: only one button at a time can be selected in the set. | Radio group name | +| [requiredList](properties_RangeOfValues.md#required-list) | Allows setting a list where only certain values can be inserted. | A list of mandatory values. | +| [resizable](properties_ResizingOptions.md#resizable) | Designates if the size of an object can be modified by the user. | "true", "false" | +| [resizingMode](properties_ResizingOptions.md#column-auto-resizing) | Specifies if a list box column should be automatically resized | "rightToLeft", "legacy" | +| [right](properties_CoordinatesAndSizing.md#right) | Positions an object on the right. | minimum: 0 | +| [rowControlSource](properties_ListBox.md#row-control-array) | A 4D array defining the list box rows. | Array | +| [rowCount](properties_Crop.md#rows) | Sets the number of rows. | minimum: 1 | +| [rowFillSource](properties_BackgroundAndBorder.md#row-background-color-array) (array list box)
    [rowFillSource](properties_BackgroundAndBorder.md#background-color-expression) (selection or collection list box) | The name of an array or expression to apply a custom background color to each row of a list box. | The name of an array or expression. | +| [rowHeight](properties_CoordinatesAndSizing.md#row-height) | Sets the height of list box rows. | CSS value unit "em" or "px" (default) | +| [rowHeightAuto](properties_CoordinatesAndSizing.md#automatic-row-height) | boolean | "true", "false" | +| [rowHeightAutoMax](properties_CoordinatesAndSizing.md#maximum-width) | Designates the largest height allowed for list box rows. | CSS value unit "em" or "px" (default). minimum: 0 | +| [rowHeightAutoMin](properties_CoordinatesAndSizing.md#minimum-width) | Designates the smallest height allowed for list box rows. | CSS value unit "em" or "px" (default). minimum: 0 | +| [rowHeightSource](properties_CoordinatesAndSizing.md#row-height-array) | An array defining different heights for the rows in a list box. | Name of a 4D array variable. | +| [rowStrokeSource](properties_Text.md#row-font-color-array) (array list box)
    [rowStrokeSource](properties_Text.md#font-color-expression) (selection or collection/entity selection list box) | An array or expression for managing row colors. | Name of array or expression. | +| [rowStyleSource](properties_Text.md#row-style-array) (array list box)
    [rowStyleSource](properties_Text.md#style-expression) (selection or collection/entity selection list box) | An array or expression for managing row styles. | Name of array or expression. | +| **s** | | | +| [scrollbarHorizontal](properties_Appearance.md#horizontal-scroll-bar) | A tool allowing the user to move the viewing area to the left or right. | "visible", "hidden", "automatic" | +| [scrollbarVertical](properties_Appearance.md#vertical-scroll-bar) | A tool allowing the user to move the viewing area up or down. | "visible", "hidden", "automatic" | +| [selectedItemsSource](properties_DataSource.md#selected-items) | Collection of the selected items in a list box. | Collection expression | +| [selectionMode](properties_Action.md#multi-selectable) (hierarchical list)
    [selectionMode](properties_ListBox.md#selection-mode) (list box)
    [selectionMode](properties_Subform.md#selection-mode) (subform) | Allows the selection of multiple records/rows. | "multiple", "single", "none" | +| [shortcutAccel](properties_Entry.md#shortcut) | Specifies the system to use, Windows or Mac. | true, false | +| [shortcutAlt](properties_Entry.md#shortcut) | Designates the Alt key | true, false | +| [shortcutCommand](properties_Entry.md#shortcut) | Designates the Command key (macOS) | true, false | +| [shortcutControl](properties_Entry.md#shortcut) | Designates the Control key (Windows) | true, false | +| [shortcutKey](properties_Entry.md#shortcut) | The letter or name of a special meaning key. | "[F1]" -> "[F15]", "[Return]", "[Enter]", "[Backspace]", "[Tab]", "[Esc]", "[Del]", "[Home]", "[End]", "[Help]", "[Page up]", "[Page down]", "[left arrow]", "[right arrow]", "[up arrow]", "[down arrow]" | +| [shortcutShift](properties_Entry.md#shortcut) | Designates the Shift key | true, false | +| [showFooters](properties_Footers.md#display-footers) | Displays or hides column footers. | true, false | +| [showGraduations](properties_Scale.md#display-graduation) | Displays/Hides the graduations next to the labels. | true, false | +| [showHeaders](properties_Headers.md#display-headers) | Displays or hides column headers. | true, false | +| [showHiddenChars](properties_Appearance.md#show-hidden-characters) | Displays/hides invisible characters. | true, false | +| [showHorizontalRuler](properties_Appearance.md#show-horizontal-ruler) | Displays/hides the horizontal ruler when the document view is in Page view mode | true, false | +| [showHTMLWysiwyg](properties_Appearance.md#show-html-wysiwyg) | Enables/disables the HTML WYSIWYG view | true, false | +| [showPageFrames](properties_Appearance.md#show-page-frame) | Displays/hides the page frame when the document view is in Page view mode | true, false | +| [showReferences](properties_Appearance.md#show-references) | Displays all 4D expressions inserted in the 4D Write Pro document as *references* | true, false | +| [showSelection](properties_Entry.md#selection-always-visible) | Keeps the selection visible within the object after it has lost the focus | true, false | +| [showVerticalRuler](properties_Appearance.md#show-vertical-ruler) | Displays/hides the vertical ruler when the document view is in Page view mode | true, false | +| [singleClickEdit](properties_Entry.md#single-click-edit) | Enables direct passage to edit mode. | true, false | +| [sizingX](properties_ResizingOptions.md#horizontal-sizing) | Specifies if the horizontal size of an object should be moved or resized when a user resizes the form. | "grow", "move", "fixed" | +| [sizingY](properties_ResizingOptions.md#horizontal-sizing) | Specifies if the vertical size of an object should be moved or resized when a user resizes the form. | "grow", "move", "fixed" | +| [sortable](properties_Action.md#sortable) | Allows sorting column data by clicking the header. | true, false | +| [spellcheck](properties_Entry.md#auto-spellcheck) | Activates the spell-check for the object | true, false | +| [splitterMode](properties_ResizingOptions.md#pusher) | When a splitter object has this property, other objects to its right (vertical splitter) or below it (horizontal splitter) are pushed at the same time as the splitter, with no stop. | "grow", "move", "fixed" | +| [startPoint](shapes_overview.md#startpoint-property) | Starting point for drawing a line object (only available in JSON Grammar). | "bottomLeft", topLeft" | +| [staticColumnCount](properties_ListBox.md#number-of-static-columns) | Number of columns that cannot be moved during execution. | minimum: 0 | +| [step](properties_Scale.md#step) | Minimum interval accepted between values during use. For numeric steppers, this property represents seconds when the object is associated with a time type value and days when it is associated with a date type value. | minimum: 1 | +| [storeDefaultStyle](properties_Text.md#store-with-default-style-tags) | Store the style tags with the text, even if no modification has been made | true, false | +| [stroke](properties_Text.md#font-color) (text)
    [stroke](properties_BackgroundAndBorder.md#line-color) (lines)
    [stroke](properties_BackgroundAndBorder.md#transparent) (list box) | Specifies the color of the font or line used in the object. | Any CSS value, "transparent", "automatic" | +| [strokeDashArray](properties_BackgroundAndBorder.md#dotted-line-type) | Describes dotted line type as a sequence of black and white points | Number array or string | +| [strokeWidth](properties_BackgroundAndBorder.md#line-width) | Designates the thickness of a line. | An integer or 0 for smallest width on a printed form | +| [style](properties_TextAndPicture.md#multi-style) | Allows setting the general appearance of the button. See Button Style for more information. | "regular", "flat", "toolbar", "bevel", "roundedBevel", "gradientBevel", "texturedBevel", "office", "help", "circular", "disclosure", "roundedDisclosure", "custom" | +| [styledText](properties_Text.md#style) | Enables the possibility of using specific styles in the selected area. | true, false | +| [switchBackWhenReleased](properties_Animation.md#switch-back-when-released) | Displays the first picture all the time except when the user clicks the button. Displays the second picture until the mouse button is released. | true, false | +| [switchContinuously](properties_Animation.md#switch-continuously-on-clicks) | Allows the user to hold down the mouse button to display the pictures continuously (i.e., as an animation). | true, false | +| [switchWhenRollover](properties_Animation.md#switch-when-roll-over) | Modifies the contents of the picture button when the mouse cursor passes over it. The initial picture is displayed when the cursor leaves the button’s area. | true, false | +| **t** | | | +| [table](properties_Subform.md#source) | Table that the list subform belongs to (if any). | 4D table name, or "" | +| [text](properties_Object.md#title) | The title of the form object | Any text | +| [textAlign](properties_Text.md#horizontal-alignment) | Horizontal location of text within the area that contains it. | "automatic", "right", "center", "justify", "left" | +| [textAngle](properties_Text.md#orientation) | Modifies the orientation (rotation) of the text area. | 0, 90, 180, 270 | +| [textDecoration](properties_Text.md#underline) | Sets the selected text to have a line running beneath it. | "normal", "underline" | +| [textFormat](properties_Display.md#alpha-format) | Controls the way the alphanumeric fields and variables appear when displayed or printed. | "### ####", "(###) ### ####", "### ### ####", "### ## ####", "00000", custom formats | +| [textPlacement](properties_TextAndPicture.md#title-picture-position) | Relative location of the button title in relation to the associated icon. | "left", "top", "right", "bottom", "center" | +| [threeState](properties_Display.md#three-states) | Allows a check box object to accept a third state. | true, false | +| [timeFormat](properties_Display.md#time-format) | Controls the way times appear when displayed or printed. Must only be selected among the 4D built-in formats. | "systemShort", "systemMedium", "systemLong", "iso8601", "hh_mm_ss", "hh_mm", "hh_mm_am", "mm_ss", "HH_MM_SS", "HH_MM", "MM_SS", "blankIfNull" (can be combined with the other possible values) | +| [truncateMode](properties_Display.md#truncate-with-ellipsis) | Controls the display of values when list box columns are too narrow to show their full contents. | "withEllipsis", "none" | +| [type](properties_Object.md#type) | Mandatory. Designates the data type of the form object. | "text", "rectangle", "groupBox", "tab", "line", "button", "checkbox", "radio", "dropdown", "combo", "webArea", "write", "subform", "plugin", "splitter", "buttonGrid", "progress", "ruler", "spinner", "stepper", "list", "pictureButton", "picturePopup", "listbox", "input", "view" | +| [tooltip](properties_Help.md) | Provide users with additional information about a field. | Additional information to help a user | +| [top](properties_CoordinatesAndSizing.md#top) | Positions an object at the top (centered). | minimum: 0 | +| **u** | | | +| [urlSource](properties_WebArea.md#url) | Designates the the URL loaded or being loading by the associated Web area. | A URL. | +| [useLastFrameAsDisabled](properties_Animation.md#use-last-frame-as-disabled) | Enables setting the last thumbnail as the one to display when the button is disabled. | true, false | +| [userInterface](properties_Appearance.md#user-interface) | 4D View Pro area interface. | "none" (default), "ribbon", "toolbar" | +| **v** | | | +| [values](properties_DataSource.md#default-list-values) | List of default values for an array listbox column | ex: "A","B","42"... | +| [variableCalculation](properties_Object.md#variable-calculation) | Allows mathematical calculations to be performed. | "none", "minimum", "maximum", "sum", "count", "average", "standardDeviation", "variance", "sumSquare" | +| [verticalAlign](properties_Text.md#vertical-alignment) | Vertical location of text within the area that contains it. | "automatic", "top", "middle", "bottom" | +| [verticalLineStroke](properties_Gridlines.md#vertical-line-color) | Defines the color of the vertical lines in a list box (gray by default). | Any CSS value, "'transparent", "automatic" | +| [visibility](properties_Display.md#visibility) | Allows hiding the object in the Application environment. | "visible", "hidden", "selectedRows", "unselectedRows" | +| **w** | | | +| [webEngine](properties_WebArea.md#use-embedded-web-rendering-engine) | Used to choose between two rendering engines for the Web area, depending on the specifics of the application. | "embedded", "system" | +| [width](properties_CoordinatesAndSizing.md#width) | Designates an object's horizontal size | minimum: 0 | +| [withFormulaBar](properties_Appearance.md#show-formula-bar) | Manages the display of a formula bar with the Toolbar interface in the 4D View Pro area. | true, false | +| [wordwrap](properties_Display.md#wordwrap) | Manages the display of contents when it exceeds the width of the object. | "automatic" (excluding list box), "normal", "none" | +| **z** | | | +| [zoom](properties_Appearance.md#zoom) | Zoom percentage for displaying 4D Write Pro area | number (minimum=0) | From 8fd8ce376f5712d166fe234d8a709b671e6ec8d5 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:16:42 +0100 Subject: [PATCH 037/260] New translations properties_ResizingOptions.md (French) --- .../FormObjects/properties_ResizingOptions.md | 90 +++++++++---------- 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/properties_ResizingOptions.md b/website/translated_docs/fr/FormObjects/properties_ResizingOptions.md index 57b8ba11d93762..cd6e74cd96423c 100644 --- a/website/translated_docs/fr/FormObjects/properties_ResizingOptions.md +++ b/website/translated_docs/fr/FormObjects/properties_ResizingOptions.md @@ -1,10 +1,10 @@ --- id: propertiesResizingOptions -title: Options de redimensionnement +title: Resizing Options --- --- -## Redimensionnement colonnes auto +## Column Auto-Resizing When this property is enabled (`rightToLeft` value in JSON), list box columns are automatically resized along with the list box, within the limits of the [minimum](properties_CoordinatesAndSizing.md#minimum-width) and [maximum](properties_CoordinatesAndSizing.md#maximum-width) widths defined. @@ -31,13 +31,13 @@ The fake header and/or footer can be clicked but this does not have any effect o If a cell in the fake column is clicked, the [LISTBOX GET CELL POSITION](https://doc.4d.com/4Dv17R6/4D/17-R6/LISTBOX-GET-CELL-POSITION.301-4311145.en.html) command returns "X+1" for its column number (where X is the number of existing columns). -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------------ | --------------- | ----------------------- | -| resizingMode | string | "rightToLeft", "legacy" | +| Name | Data Type | Possible Values | +| ------------ | --------- | ----------------------- | +| resizingMode | string | "rightToLeft", "legacy" | -#### Objets pris en charge +#### Objects Supported [List Box](listbox_overview.md) @@ -45,58 +45,58 @@ If a cell in the fake column is clicked, the [LISTBOX GET CELL POSITION](https:/ --- -## Dimensionnement horizontal +## Horizontal Sizing This property specifies if the horizontal size of an object should be moved or resized when a user resizes the form. It can also be set dynamically by the `OBJECT SET RESIZING OPTIONS` language command. Three options are available: -| Option | Valeur JSON | Résultat | -| -------- | ----------- | ---------------------------------------------------------------------------------------------------------------------- | -| Agrandir | "grow" | The same percentage is applied to the object’s width when the user resizes the width of the window, | -| Déplacer | "move" | The object is moved the same amount left or right as the width increase when the user resizes the width of the window, | -| Aucun | "fixed" | The object remains stationary when the form is resized | +| Option | JSON value | Result | +| ------ | ---------- | ---------------------------------------------------------------------------------------------------------------------- | +| Grow | "grow" | The same percentage is applied to the object’s width when the user resizes the width of the window, | +| Move | "move" | The object is moved the same amount left or right as the width increase when the user resizes the width of the window, | +| None | "fixed" | The object remains stationary when the form is resized | > This property works in conjunction with the [Vertical Sizing](#vertical-sizing) property. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------- | --------------- | ----------------------- | -| sizingX | string | "grow", "move", "fixed" | +| Name | Data Type | Possible Values | +| ------- | --------- | ----------------------- | +| sizingX | string | "grow", "move", "fixed" | -#### Objets pris en charge +#### Objects Supported -[Zone 4D View Pro](viewProArea_overview.md) - [Zone 4D Write Pro](writeProArea_overview.md) - [Bouton](button_overview.md) - [Grille de boutons](buttonGrid_overview.md) - [Case à cocher](checkbox_overview.md) - [Combo Box](comboBox_overview.md) - [Liste déroulante](dropdownList_Overview.md) - [Group Box](groupBox.md) - [Liste hiérarchique](list_overview.md#overview) - [Zone de saisie](input_overview.md) - [List Box](listbox_overview.md#overview) - [Ligne](shapes_overview.md#line) - [Colonne List Box](listbox_overview.md#list-box-columns) - [Ovale](shapes_overview.md#oval) - [Bouton image](pictureButton_overview.md) - [Pop up menu image](picturePopupMenu_overview.md) - [Zone de plug-in](pluginArea_overview.md#overview) - [Indicateur de progression](progressIndicator.md) - [Bouton radio](radio_overview.md) - [Règle](ruler.md) - [ Rectangle](shapes_overview.md#rectangle) - [Spinner](spinner.md) - [Splitter](splitters.md) - [Image statique](staticPicture.md) [Stepper](stepper.md) - [Sous-formulaire](subform_overview.md) - [Onglet](tabControl.md) - [Zone de texte](text.md) +[4D View Pro Area](viewProArea_overview.md) - [4D Write Pro Area](writeProArea_overview.md) - [Button](button_overview.md) - [Button Grid](buttonGrid_overview.md) - [Check Box](checkbox_overview.md) - [Combo Box](comboBox_overview.md) - [Dropdown list](dropdownList_Overview.md) - [Group Box](groupBox.md) - [Hierarchical List](list_overview.md#overview) - [Input](input_overview.md) - [List Box](listbox_overview.md#overview) - [Line](shapes_overview.md#line) - [List Box Column](listbox_overview.md#list-box-columns) - [Oval](shapes_overview.md#oval) - [Picture Button](pictureButton_overview.md) - [Picture Pop up menu](picturePopupMenu_overview.md) - [Plug-in Area](pluginArea_overview.md#overview) - [Progress Indicators](progressIndicator.md) - [Radio Button](radio_overview.md) - [Ruler](ruler.md) - [Rectangle](shapes_overview.md#rectangle) - [Spinner](spinner.md) - [Splitter](splitters.md) - [Static Picture](staticPicture.md) - [Stepper](stepper.md) - [Subform](subform_overview.md) - [Tab control](tabControl.md) - [Web Area](webArea_overview.md#overview) --- -## Dimensionnement vertical +## Vertical Sizing This property specifies if the vertical size of an object should be moved or resized when a user resizes the form. It can also be set dynamically by the `OBJECT SET RESIZING OPTIONS` language command. Three options are available: -| Option | Valeur JSON | Résultat | -| -------- | ----------- | -------------------------------------------------------------------------------------------------------------------- | -| Agrandir | "grow" | The same percentage is applied to the object's height when the user resizes the width of the window, | -| Déplacer | "move" | The object is moved the same amount up or down as the height increase when the user resizes the width of the window, | -| Aucun | "fixed" | The object remains stationary when the form is resized | +| Option | JSON value | Result | +| ------ | ---------- | -------------------------------------------------------------------------------------------------------------------- | +| Grow | "grow" | The same percentage is applied to the object's height when the user resizes the width of the window, | +| Move | "move" | The object is moved the same amount up or down as the height increase when the user resizes the width of the window, | +| None | "fixed" | The object remains stationary when the form is resized | > This property works in conjunction with the [Horizontal Sizing](#horizontal-sizing) property. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------- | --------------- | ----------------------- | -| sizingY | string | "grow", "move", "fixed" | +| Name | Data Type | Possible Values | +| ------- | --------- | ----------------------- | +| sizingY | string | "grow", "move", "fixed" | -#### Objets pris en charge +#### Objects Supported -[Zone 4D View Pro](viewProArea_overview.md) - [Zone 4D Write Pro](writeProArea_overview.md) - [Bouton](button_overview.md) - [Grille de boutons](buttonGrid_overview.md) - [Case à cocher](checkbox_overview.md) - [Combo Box](comboBox_overview.md) - [Liste déroulante](dropdownList_Overview.md) - [Group Box](groupBox.md) - [Liste hiérarchique](list_overview.md#overview) - [Zone de saisie](input_overview.md) - [List Box](listbox_overview.md#overview) - [Ligne](shapes_overview.md#line) - [Colonne List Box](listbox_overview.md#list-box-columns) - [Ovale](shapes_overview.md#oval) - [Bouton image](pictureButton_overview.md) - [Pop up menu image](picturePopupMenu_overview.md) - [Zone de plug-in](pluginArea_overview.md#overview) - [Indicateur de progression](progressIndicator.md) - [Bouton radio](radio_overview.md) - [Règle](ruler.md) - [ Rectangle](shapes_overview.md#rectangle) - [Spinner](spinner.md) - [Splitter](splitters.md) - [Image statique](staticPicture.md) [Stepper](stepper.md) - [Sous-formulaire](subform_overview.md) - [Onglet](tabControl.md) - [Zone de texte](text.md) +[4D View Pro Area](viewProArea_overview.md) - [4D Write Pro Area](writeProArea_overview.md) - [Button](button_overview.md) - [Button Grid](buttonGrid_overview.md) - [Check Box](checkbox_overview.md) - [Combo Box](comboBox_overview.md) - [Dropdown list](dropdownList_Overview.md) - [Group Box](groupBox.md) - [Hierarchical List](list_overview.md#overview) - [Input](input_overview.md) - [List Box](listbox_overview.md#overview) - [Line](shapes_overview.md#line) - [List Box Column](listbox_overview.md#list-box-columns) - [Oval](shapes_overview.md#oval) - [Picture Button](pictureButton_overview.md) - [Picture Pop up menu](picturePopupMenu_overview.md) - [Plug-in Area](pluginArea_overview.md#overview) - [Progress Indicators](progressIndicator.md) - [Radio Button](radio_overview.md) - [Ruler](ruler.md) - [Rectangle](shapes_overview.md#rectangle) - [Spinner](spinner.md) - [Splitter](splitters.md) - [Static Picture](staticPicture.md) - [Stepper](stepper.md) - [Subform](subform_overview.md) - [Tab control](tabControl.md) - [Web Area](webArea_overview.md#overview) --- -## Pousseur +## Pusher When a splitter object has this property, other objects to its right (vertical splitter) or below it (horizontal splitter) are pushed at the same time as the splitter, with no stop. @@ -109,33 +109,33 @@ When this property is not applied to the splitter, the result is as follows: ![](assets/en/FormObjects/splitter_pusher2.png) -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -|:------------ |:---------------:|:------------------------------------:| -| splitterMode | string | "move" (pusher), "resize" (standard) | +| Name | Data Type | Possible Values | +|:------------ |:---------:|:------------------------------------:| +| splitterMode | string | "move" (pusher), "resize" (standard) | -#### Objets pris en charge +#### Objects Supported -[Séparateur](splitterTabControlOverview#splitters) +[Splitter](splitterTabControlOverview#splitters) --- -## Redimensionnable +## Resizable Designates if the size of the column can be modified by the user. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -|:--------- |:---------------:|:-----------------:| -| resizable | boolean | "true", "false" | +| Name | Data Type | Possible Values | +|:--------- |:---------:|:---------------:| +| resizable | boolean | "true", "false" | -#### Objets pris en charge +#### Objects Supported -[Colonne de list box](listbox_overview.md#list-box-columns) +[List Box Column](listbox_overview.md#list-box-columns) From 62f97a2150d53a001f5d3fd5567dc2721edae2e8 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:16:45 +0100 Subject: [PATCH 038/260] New translations properties_Scale.md (French) --- .../fr/FormObjects/properties_Scale.md | 72 +++++++++---------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/properties_Scale.md b/website/translated_docs/fr/FormObjects/properties_Scale.md index 24e19af6949db8..c5fec5f7494574 100644 --- a/website/translated_docs/fr/FormObjects/properties_Scale.md +++ b/website/translated_docs/fr/FormObjects/properties_Scale.md @@ -1,6 +1,6 @@ --- id: propertiesScale -title: Echelle +title: Scale --- --- @@ -8,13 +8,13 @@ title: Echelle Enables the "barber shop" variant for the thermometer. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -|:---------------:|:---------------:| ----------------------------------------------------------- | -| [max](#maximum) | number | NOT passed = enabled; passed = disabled (basic thermometer) | +| Name | Data Type | Possible Values | +|:---------------:|:---------:| ----------------------------------------------------------- | +| [max](#maximum) | number | NOT passed = enabled; passed = disabled (basic thermometer) | -#### Objets pris en charge +#### Objects Supported [Barber shop](progressIndicator.md#barber-shop) @@ -25,13 +25,13 @@ Enables the "barber shop" variant for the thermometer. Displays/Hides the graduations next to the labels. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -|:---------------:|:---------------:| ----------------- | -| showGraduations | boolean | "true", "false" | +| Name | Data Type | Possible Values | +|:---------------:|:---------:| --------------- | +| showGraduations | boolean | "true", "false" | -#### Objets pris en charge +#### Objects Supported [Thermometer](progressIndicator.md#thermometer) - [Ruler](ruler.md#ruler) @@ -42,14 +42,14 @@ Displays/Hides the graduations next to the labels. Scale display measurement. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -|:--------------:|:---------------:| ----------------- | -| graduationStep | integer | minimum : 0 | +| Name | Data Type | Possible Values | +|:--------------:|:---------:| --------------- | +| graduationStep | integer | minimum: 0 | -#### Objets pris en charge +#### Objects Supported [Thermometer](progressIndicator.md#thermometer) - [Ruler](ruler.md#ruler) @@ -64,13 +64,13 @@ Specifies the location of an object's displayed text. * Top - Displays labels to the left of or above an indicator * Bottom - Displays labels to the right of or below an indicator -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -|:---------------:|:---------------:| ---------------------------------------- | -| labelsPlacement | string | "none", "top", "bottom", "left", "right" | +| Name | Data Type | Possible Values | +|:---------------:|:---------:| ---------------------------------------- | +| labelsPlacement | string | "none", "top", "bottom", "left", "right" | -#### Objets pris en charge +#### Objects Supported [Thermometer](progressIndicator.md#thermometer) - [Ruler](ruler.md#ruler) @@ -84,13 +84,13 @@ Maximum value of an indicator. - For numeric steppers, this property represent seconds when the object is associated with a time type value and are ignored when it is associated with a date type value. - To enable [Barber shop thermometers](progressIndicator.md#barber-shop), this property must be omitted. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -|:---:|:---------------:| ----------------------------------- | -| max | string / number | minimum: 0 (for numeric data types) | +| Name | Data Type | Possible Values | +|:----:|:---------------:| ----------------------------------- | +| max | string / number | minimum: 0 (for numeric data types) | -#### Objets pris en charge +#### Objects Supported [Thermometer](progressIndicator.md#thermometer) - [Ruler](ruler.md#ruler) - [Stepper](stepper.md#stepper) @@ -101,13 +101,13 @@ Maximum value of an indicator. Minimum value of an indicator. For numeric steppers, this property represent seconds when the object is associated with a time type value and are ignored when it is associated with a date type value. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -|:---:|:---------------:| ----------------------------------- | -| min | string / number | minimum: 0 (for numeric data types) | +| Name | Data Type | Possible Values | +|:----:|:---------------:| ----------------------------------- | +| min | string / number | minimum: 0 (for numeric data types) | -#### Objets pris en charge +#### Objects Supported [Thermometer](progressIndicator.md#thermometer) - [Ruler](ruler.md#ruler) - [Stepper](stepper.md#stepper) @@ -119,14 +119,14 @@ Minimum value of an indicator. For numeric steppers, this property represent sec Minimum interval accepted between values during use. For numeric steppers, this property represents seconds when the object is associated with a time type value and days when it is associated with a date type value. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -|:----:|:---------------:| ----------------- | -| step | integer | minimum: 1 | +| Name | Data Type | Possible Values | +|:----:|:---------:| --------------- | +| step | integer | minimum: 1 | -#### Objets pris en charge +#### Objects Supported [Thermometer](progressIndicator.md#thermometer) - [Ruler](ruler.md#ruler) - [Stepper](stepper.md#stepper) From 364feb08d6866a95ba8dc6b4da74c9a80cf7f228 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:16:47 +0100 Subject: [PATCH 039/260] New translations properties_Subform.md (French) --- .../fr/FormObjects/properties_Subform.md | 138 +++++++++--------- 1 file changed, 69 insertions(+), 69 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/properties_Subform.md b/website/translated_docs/fr/FormObjects/properties_Subform.md index 7bc31dfbbaf12d..9fd370f2ba2796 100644 --- a/website/translated_docs/fr/FormObjects/properties_Subform.md +++ b/website/translated_docs/fr/FormObjects/properties_Subform.md @@ -1,69 +1,69 @@ --- id: propertiesSubform -title: Sous-formulaire +title: Subform --- --- -## Autoriser la suppression +## Allow Deletion -Indique si l’utilisateur peut supprimer des sous-enregistrements dans un sous-formulaire liste. +Specifies if the user can delete subrecords in a list subform. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| --------------- | --------------- | ------------------------------- | -| deletableInList | boolean | true, false (par défaut : true) | +| Name | Data Type | Possible Values | +| --------------- | --------- | --------------------------- | +| deletableInList | boolean | true, false (default: true) | -#### Objets pris en charge +#### Objects Supported -[Sous-formulaire](subform_overview.md) +[Subform](subform_overview.md) --- -## Formulaire détaillé +## Detail Form -Cette option permet de désigner un formulaire détaillé à utiliser dans un sous-formulaire. Il peut être : +You use this property to declare the detail form to use in the subform. It can be: -- un widget, c'est-à-dire un sous-formulaire de type page doté de fonctions spécifiques. Dans ce cas, [le sous-formulaire de liste](#list-form) et les propriétés [Source](#source) doivent être vides ou non présents. - Vous pouvez sélectionner un nom de formulaire de composant lorsqu'il est publié dans le composant. -> Vous pouvez générer des [composants](Concepts/components.md) fournissant des fonctionnalités supplémentaires via des sous-formulaires. +- a widget, i.e. a page-type subform endowed with specific functions. In this case, the [list subform](#list-form) and [Source](#source) properties must be empty or not present. + You can select a component form name when it is published in the component. +> You can generate [components](Concepts/components.md) providing additional functionalities through subforms. -- le formulaire détaillé à associer au [sous-formulaire de liste](#list-form). The detail form can be used to enter or view subrecords. It generally contains more information than the list subform. Naturally, the detail form must belong to the same table as the subform. You normally use an Output form as the list form and an Input form as the detail form. If you do not specify the form to use for full page entry, 4D automatically uses the default Input format of the table. +- the detail form to associate a with the [list subform](#list-form). The detail form can be used to enter or view subrecords. It generally contains more information than the list subform. Naturally, the detail form must belong to the same table as the subform. You normally use an Output form as the list form and an Input form as the detail form. If you do not specify the form to use for full page entry, 4D automatically uses the default Input format of the table. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ---------- | --------------- | ----------------------------------------------------------------------------------------------------------------------------------- | -| detailForm | string | Name (string) of table or project form, a POSIX path (string) to a .json file describing the form, or an object describing the form | +| Name | Data Type | Possible Values | +| ---------- | --------- | ----------------------------------------------------------------------------------------------------------------------------------- | +| detailForm | string | Name (string) of table or project form, a POSIX path (string) to a .json file describing the form, or an object describing the form | -#### Objets pris en charge +#### Objects Supported -[Sous-formulaire](subform_overview.md) +[Subform](subform_overview.md) --- ## Double-click on empty row -Action to perform in case of a double-click on an empty line of a list subform. Les options suivantes sont disponibles : -- Ne rien faire : ignore le double-clic. -- Ajouter un enregistrement : crée un nouvel enregistrement dans le sous-formulaire et passe en mode édition. L'enregistrement sera créé directement dans la liste si la propriété [Saisissable dans la liste] est activée. Sinon, il sera créé en mode page, dans le [formulaire détaillé](detail-form) associé au sous-formulaire. +Action to perform in case of a double-click on an empty line of a list subform. The following options are available: +- Do nothing: Ignores double-click. +- Add Record: Creates a new record in the subform and changes to editing mode. The record will be created directly in the list if the [Enterable in List] property is enabled. Otherwise, it will be created in page mode, in the [detail form](detail-form) associated with the subform. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ---------------------------- | --------------- | ---------------------------------- | -| doubleClickInEmptyAreaAction | string | "addSubrecord" ou "" to do nothing | +| Name | Data Type | Possible Values | +| ---------------------------- | --------- | ---------------------------------- | +| doubleClickInEmptyAreaAction | string | "addSubrecord" or "" to do nothing | -#### Objets pris en charge +#### Objects Supported -[Sous-formulaire](subform_overview.md) +[Subform](subform_overview.md) -#### Voir également +#### See also [Double click on row](#double-click-on-row) --- -## Double-clic sur ligne +## Double-click on row `List subform` @@ -77,76 +77,76 @@ Regardless of the action selected/chosen, the `On Double clicked` form event is For the last two actions, the On `Open Detail` form event is also generated. The `On Close Detail` is then generated when a record displayed in the detail form associated with the list box is about to be closed (regardless of whether or not the record was modified). -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ---------------------- | --------------- | ----------------------------------- | -| doubleClickInRowAction | string | "editSubrecord", "displaySubrecord" | +| Name | Data Type | Possible Values | +| ---------------------- | --------- | ----------------------------------- | +| doubleClickInRowAction | string | "editSubrecord", "displaySubrecord" | -#### Objets pris en charge +#### Objects Supported -[Sous-formulaire](subform_overview.md) +[Subform](subform_overview.md) -#### Voir également +#### See also [Double click on empty row](#double-click-on-empty-row) --- ## Enterable in list -Lorsque cette propriété est activée pour un sous-formulaire de liste, l'utilisateur peut modifier les données de l'enregistrement directement dans la liste, sans avoir à utiliser le [formulaire détaillé associé](#detail-form). +When a list subform has this property enabled, the user can modify record data directly in the list, without having to use the [associated detail form](#detail-form). -> Pour cela, il vous suffit de cliquer deux fois sur le champ à modifier afin de le passer en mode édition (veillez à laisser suffisamment de temps entre les deux clics pour ne pas générer de double-clic). +> To do this, simply click twice on the field to be modified in order to switch it to editing mode (make sure to leave enough time between the two clicks so as not to generate a double-click). -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| --------------- | --------------- | ----------------- | -| enterableInList | boolean | true, false | +| Name | Data Type | Possible Values | +| --------------- | --------- | --------------- | +| enterableInList | boolean | true, false | -#### Objets pris en charge +#### Objects Supported -[Sous-formulaire](subform_overview.md) +[Subform](subform_overview.md) --- ## List Form -Cette option permet de désigner un formulaire liste à utiliser dans un sous-formulaire. Un sous-formulaire en liste vous permet de saisir, visualiser et modifier des données dans d’autres tables. +You use this property to declare the list form to use in the subform. A list subform lets you enter, view, and modify data in other tables. -Les sous-formulaires de liste peuvent être utilisés pour la saisie de données de deux manières : l'utilisateur peut saisir des données directement dans le sous-formulaire ou les saisir dans un [formulaire de saisie](#detail-form). Dans cette configuration, le formulaire utilisé comme sous-formulaire est appelé formulaire Liste. Le formulaire de saisie est appelé le formulaire détaillé. +List subforms can be used for data entry in two ways: the user can enter data directly in the subform, or enter it in an [input form](#detail-form). In this configuration, the form used as the subform is referred to as the List form. The input form is referred to as the Detail form. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| -------- | --------------- | ----------------------------------------------------------------------------------------------------------------------------------- | -| listForm | string | Name (string) of table or project form, a POSIX path (string) to a .json file describing the form, or an object describing the form | +| Name | Data Type | Possible Values | +| -------- | --------- | ----------------------------------------------------------------------------------------------------------------------------------- | +| listForm | string | Name (string) of table or project form, a POSIX path (string) to a .json file describing the form, or an object describing the form | -#### Objets pris en charge +#### Objects Supported -[Sous-formulaire](subform_overview.md) +[Subform](subform_overview.md) --- ## Source -Spécifie la table à laquelle appartient le sous-formulaire Liste (le cas échéant). +Specifies the table that the list subform belongs to (if any). -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ----- | --------------- | ----------------------------------------------------- | -| table | string | Nom de la table 4D, ou "" s'il n'existe aucune table. | +| Name | Data Type | Possible Values | +| ----- | --------- | --------------------------------- | +| table | string | 4D table name, or "" if no table. | -#### Objets pris en charge +#### Objects Supported -[Sous-formulaire](subform_overview.md) +[Subform](subform_overview.md) --- -## Mode de sélection +## Selection Mode Designates the option for allowing users to select rows: - **None**: Rows cannot be selected if this mode is chosen. Clicking on the list will have no effect unless the [Enterable in list](subform_overview.md#enterable-in-list) option is enabled. The navigation keys only cause the list to scroll; the `On Selection Change` form event is not generated. @@ -158,12 +158,12 @@ Designates the option for allowing users to select rows: - A **Ctrl+click** (Windows) or **Command+click** (macOS) on a record toggles its state (between selected or not). The Up and Down arrow keys select the previous/next record in the list. The other navigation keys scroll the list. The `On Selection Change` form event is generated every time the selected record is changed. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------------- | --------------- | ---------------------------- | -| selectionMode | string | "multiple", "single", "none" | +| Name | Data Type | Possible Values | +| ------------- | --------- | ---------------------------- | +| selectionMode | string | "multiple", "single", "none" | -#### Objets pris en charge +#### Objects Supported -[Sous-formulaire](subform_overview.md) +[Subform](subform_overview.md) From 652f5b3f69aab74f14c8c5b6ccbd988ec9bc5233 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:16:50 +0100 Subject: [PATCH 040/260] New translations properties_Text.md (French) --- .../fr/FormObjects/properties_Text.md | 418 +++++++++--------- 1 file changed, 209 insertions(+), 209 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/properties_Text.md b/website/translated_docs/fr/FormObjects/properties_Text.md index 55761294fca7da..9f8a8d39be6bf7 100644 --- a/website/translated_docs/fr/FormObjects/properties_Text.md +++ b/website/translated_docs/fr/FormObjects/properties_Text.md @@ -1,78 +1,78 @@ --- id: propertiesText -title: Texte +title: Text --- --- -## Autoriser sélecteur police/couleur +## Allow font/color picker -Lorsque cette propriété est activée, les commandes [OPEN FONT PICKER](https://doc.4d.com/4Dv18/4D/18/OPEN-FONT-PICKER.301-4505612.en.html) et [OPEN COLOR PICKER](https://doc.4d.com/4Dv18/4D/18/OPEN-COLOR-PICKER.301-4505611.en.html) peuvent être appelées pour afficher les fenêtres de sélecteur de la police système et de couleurs. A l'aide de ces fenêtres, les utilisateurs peuvent modifier la police ou la couleur d'un objet formulaire dont le focus est accessible directement au clic. Lorsque cette propriété est désactivée (par défaut), les commandes d'ouverture du sélecteur ne produisent aucun effet. +When this property is enabled, the [OPEN FONT PICKER](https://doc.4d.com/4Dv18/4D/18/OPEN-FONT-PICKER.301-4505612.en.html) and [OPEN COLOR PICKER](https://doc.4d.com/4Dv18/4D/18/OPEN-COLOR-PICKER.301-4505611.en.html) commands can be called to display the system font and color picker windows. Using these windows, the users can change the font or color of a form object that has the focus directly by clicking. When this property is disabled (default), the open picker commands have no effect. -#### Grammaire JSON +#### JSON Grammar -| Propriété | Type de données | Valeurs possibles | -| -------------------- | --------------- | ------------------------ | -| allowFontColorPicker | boolean | false (par défaut), true | +| Property | Data Type | Possible Values | +| -------------------- | --------- | --------------------- | +| allowFontColorPicker | boolean | false (default), true | -#### Objets pris en charge +#### Objects Supported [Input](input_overview.md) --- -## Gras +## Bold -Le texte sélectionné est plus foncé et plus épais. +Sets the selected text to appear darker and heavier. -Vous pouvez également définir cette propriété à l'aide de la commande [**OBJECT SET FONT STYLE**](https://doc.4d.com/4Dv17R5/4D/17-R5/OBJECT-SET-FONT-STYLE.301-4128244.en.html). -> Ceci est un texte normal.
    **Ceci est un texte en gras.** +You can set this property using the [**OBJECT SET FONT STYLE**](https://doc.4d.com/4Dv17R5/4D/17-R5/OBJECT-SET-FONT-STYLE.301-4128244.en.html) command. +> This is normal text.
    **This is bold text.** -#### Grammaire JSON +#### JSON Grammar -| Propriété | Type de données | Valeurs possibles | -| ---------- | --------------- | ----------------- | -| fontWeight | Texte | "normal", "bold" | +| Property | Data Type | Possible Values | +| ---------- | --------- | ---------------- | +| fontWeight | text | "normal", "bold" | -#### Objets pris en charge +#### Objects Supported -[Bouton](button_overview.md) - [Case à cocher](checkbox_overview.md) - [Combo Box](comboBox_overview.md) - [Liste déroulante](dropdownList_Overview.md) - [Group Box](groupBox.md) - [Liste hiérarchique](list_overview.md#overview) - [Zone de saisie](input_overview.md) - [List Box](listbox_overview.md#overview) - [Colonne List Box](listbox_overview.md#list-box-columns) - [Pied List Box](listbox_overview.md#list-box-footers) - [En-tête List Box](listbox_overview.md#list-box-headers) - [Bouton Radio](radio_overview.md) - [Zone de texte](text.md) +[Button](button_overview.md) - [Check Box](checkbox_overview.md) - [Combo Box](comboBox_overview.md) - [Drop-down List](dropdownList_Overview.md) - [Group Box](groupBox.md) - [Hierarchical List](list_overview.md#overview) - [Input](input_overview.md) - [List Box](listbox_overview.md#overview) - [List Box Column](listbox_overview.md#list-box-columns) - [List Box Footer](listbox_overview.md#list-box-footers) - [List Box Header](listbox_overview.md#list-box-headers) - [Radio Button](radio_overview.md) - [Text Area](text.md) --- -## Italique +## Italic -Le texte sélectionné est légèrement penché vers la droite. +Sets the selected text to slant slightly to the right. -Vous pouvez également définir cette propriété à l'aide de la commande [**OBJECT SET FONT STYLE**](https://doc.4d.com/4Dv17R5/4D/17-R5/OBJECT-SET-FONT-STYLE.301-4128244.en.html). -> Ceci est un texte normal.
    *Ceci est un texte en italique.* +You can also set this property via the [**OBJECT SET FONT STYLE**](https://doc.4d.com/4Dv17R5/4D/17-R5/OBJECT-SET-FONT-STYLE.301-4128244.en.html) command. +> This is normal text.
    *This is text in italics.* -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| --------- | --------------- | ------------------ | -| fontStyle | string | "normal", "italic" | +| Name | Data Type | Possible Values | +| --------- | --------- | ------------------ | +| fontStyle | string | "normal", "italic" | -#### Objets pris en charge +#### Objects Supported -[Bouton](button_overview.md) - [Case à cocher](checkbox_overview.md) - [Combo Box](comboBox_overview.md) - [Liste déroulante](dropdownList_Overview.md) - [Group Box](groupBox.md) - [Liste hiérarchique](list_overview.md#overview) - [Zone de saisie](input_overview.md) - [List Box](listbox_overview.md#overview) - [Colonne List Box](listbox_overview.md#list-box-columns) - [Pied List Box](listbox_overview.md#list-box-footers) - [En-tête List Box](listbox_overview.md#list-box-headers) - [Bouton Radio](radio_overview.md) - [Zone de texte](text.md) +[Button](button_overview.md) - [Check Box](checkbox_overview.md) - [Combo Box](comboBox_overview.md) - [Drop-down List](dropdownList_Overview.md) - [Group Box](groupBox.md) - [Hierarchical List](list_overview.md#overview) - [Input](input_overview.md) - [List Box](listbox_overview.md#overview) - [List Box Column](listbox_overview.md#list-box-columns) - [List Box Footer](listbox_overview.md#list-box-footers) - [List Box Header](listbox_overview.md#list-box-headers) - [Radio Button](radio_overview.md) - [Text Area](text.md) --- -## Souligné -Une ligne est placée sous le texte. -> Ceci est un texte normal.
    Ceci est un texte souligné.. +## Underline +Sets the text to have a line running beneath it. +> This is normal text.
    This is underlined text. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| -------------- | --------------- | --------------------- | -| textDecoration | string | "normal", "underline" | +| Name | Data Type | Possible Values | +| -------------- | --------- | --------------------- | +| textDecoration | string | "normal", "underline" | -#### Objets pris en charge +#### Objects Supported -[Bouton](button_overview.md) - [Case à cocher](checkbox_overview.md) - [Combo Box](comboBox_overview.md) - [Liste déroulante](dropdownList_Overview.md) - [Group Box](groupBox.md) - [Liste hiérarchique](list_overview.md#overview) - [Zone de saisie](input_overview.md) - [List Box](listbox_overview.md#overview) - [Colonne List Box](listbox_overview.md#list-box-columns) - [Pied List Box](listbox_overview.md#list-box-footers) - [En-tête List Box](listbox_overview.md#list-box-headers) - [Bouton Radio](radio_overview.md) - [Zone de texte](text.md) +[Button](button_overview.md) - [Check Box](checkbox_overview.md) - [Combo Box](comboBox_overview.md) - [Drop-down List](dropdownList_Overview.md) - [Group Box](groupBox.md) - [Hierarchical List](list_overview.md#overview) - [Input](input_overview.md) - [List Box](listbox_overview.md#overview) - [List Box Column](listbox_overview.md#list-box-columns) - [List Box Footer](listbox_overview.md#list-box-footers) - [List Box Header](listbox_overview.md#list-box-headers) - [Radio Button](radio_overview.md) - [Text Area](text.md) @@ -80,171 +80,171 @@ Une ligne est placée sous le texte. --- -## Police +## Font -Cette propriété vous permet d'indiquer le **thème de la police** ou la **famille de police** utilisé(e) dans l'objet. -> Les propriétés du **thème** et de la **famille** de police sont mutuellement exclusives. Un thème de police prend en charge les attributs de police, y compris la taille. Une famille de polices vous permet de définir le nom de la police, sa taille et sa couleur. +This property allows you to specify either the **font theme** or the **font family** used in the object. +> **Font theme** and **font family** properties are mutually exclusive. A font theme takes hold of font attributes, including size. A font family allows you to define font name, font size and font color. -### Thème de police +### Font Theme -La propriété de thème de police désigne un nom de style automatique. Les styles automatiques déterminent de manière dynamique la famille de police, la taille et la couleur de police à utiliser pour l'objet, en fonction des paramètres système. Ces paramètres dépendent de : +The font theme property designates an automatic style name. Automatic styles determine the font family, font size and font color to be used for the object dynamically according to system parameters. These parameters depend on: -- la plateforme, -- la langue du système, -- et le type d'objet de formulaire. +- the platform, +- the system language, +- and the type of form object. -Avec le thème de police, vous avez la garantie que les titres s'affichent toujours conformément aux normes de l'interface du système. Cependant, leur taille peut varier d'une machine à l'autre. +With the font theme, you are guaranteed that titles are always displayed in accordance with the current interface standards of the system. However, their size may vary from one machine to another. -Trois thèmes de polices sont disponibles : -- **normal** : style automatique, appliqué par défaut à tout nouvel objet créé dans l'éditeur de formulaires. -- Les thèmes de polices **principaux** et **supplémentaires** ne sont pris en charge uniquement par les [zones de texte](text.md) et les [zones de saisie](input_overview.md). Ces thèmes sont principalement destinés à la conception de boîtes de dialogue. Ils font référence aux styles de police utilisés respectivement pour le texte principal et les informations supplémentaires dans vos fenêtres d'interface. Voici les boîtes de dialogue typiques (macOS et Windows) utilisant ces thèmes de polices : +Three font themes are available: +- **normal**: automatic style, applied by default to any new object created in the Form editor. +- **main** and **additional** font themes are only supported by [text areas](text.md) and [inputs](input_overview.md). These themes are primarily intended for designing dialog boxes. They refer to font styles used, respectively, for main text and additional information in your interface windows. Here are typical dialog boxes (macOS and Windows) using these font themes: ![](assets/en/FormObjects/FontThemes.png) -> Les thèmes de polices gèrent la police ainsi que sa taille et sa couleur. Vous pouvez appliquer des propriétés de style personnalisées (Gras, Italique ou Souligné) sans modifier son fonctionnement. +> Font themes manage the font as well as its size and color. You can apply custom style properties (Bold, Italic or Underline) without altering its functioning. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| --------- | --------------- | ------------------------------ | -| fontTheme | string | "normal", "main", "additional" | +| Name | Data Type | Possible Values | +| --------- | --------- | ------------------------------ | +| fontTheme | string | "normal", "main", "additional" | -#### Objets pris en charge +#### Objects Supported -[Bouton](button_overview.md) - [Case à cocher](checkbox_overview.md) - [Combo Box](comboBox_overview.md) - [Liste déroulante](dropdownList_Overview.md) - [Group Box](groupBox.md) - [Liste hiérarchique](list_overview.md#overview) - [Zone de saisie](input_overview.md) - [List Box](listbox_overview.md#overview) - [Colonne List Box](listbox_overview.md#list-box-columns) - [Pied List Box](listbox_overview.md#list-box-footers) - [En-tête List Box](listbox_overview.md#list-box-headers) - [Bouton Radio](radio_overview.md) - [Zone de texte](text.md) +[Button](button_overview.md) - [Check Box](checkbox_overview.md) - [Combo Box](comboBox_overview.md) - [Drop-down List](dropdownList_Overview.md) - [Group Box](groupBox.md) - [Hierarchical List](list_overview.md#overview) - [Input](input_overview.md) - [List Box](listbox_overview.md#overview) - [List Box Column](listbox_overview.md#list-box-columns) - [List Box Footer](listbox_overview.md#list-box-footers) - [List Box Header](listbox_overview.md#list-box-headers) - [Radio Button](radio_overview.md) - [Text Area](text.md) -### Famille de police +### Font Family -Il existe deux types de noms de familles de polices : +There are two types of font family names: -* *family-name :* Le nom d'une famille de polices, comme "times", "courier", "arial", etc. -* *generic-family *: Le nom d'une famille générique, comme "serif", "sans-serif", "cursive", "fantasy", "monospace". +* *family-name:* The name of a font-family, like "times", "courier", "arial", etc. +* *generic-family:* The name of a generic-family, like "serif", "sans-serif", "cursive", "fantasy", "monospace". -Vous pouvez la définir à l'aide de la commande [**OBJECT SET FONT**](https://doc.4d.com/4Dv17R5/4D/17-R5/OBJECT-SET-FONT.301-4054834.en.html) . -> Ceci est une police Times New Roman.
    Ceci est une police Calibri.
    Ceci est une police Papyrus. +You can set this using the [**OBJECT SET FONT**](https://doc.4d.com/4Dv17R5/4D/17-R5/OBJECT-SET-FONT.301-4054834.en.html) command. +> This is Times New Roman font.
    This is Calibri font.
    This is Papyrus font. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ---------- | --------------- | ------------------------------- | -| fontFamily | string | Nom d'une famille de police CSS | -> 4D recommande d'utiliser uniquement les polices de [sécurité Web](https://www.w3schools.com/cssref/css_websafe_fonts.asp). +| Name | Data Type | Possible Values | +| ---------- | --------- | -------------------- | +| fontFamily | string | CSS font family name | +> 4D recommends using only [web safe](https://www.w3schools.com/cssref/css_websafe_fonts.asp) fonts. -#### Objets pris en charge +#### Objects Supported -[Bouton](button_overview.md) - [Case à cocher](checkbox_overview.md) - [Combo Box](comboBox_overview.md) - [Liste déroulante](dropdownList_Overview.md) - [Group Box](groupBox.md) - [Liste hiérarchique](list_overview.md#overview) - [Zone de saisie](input_overview.md) - [List Box](listbox_overview.md#overview) - [Colonne List Box](listbox_overview.md#list-box-columns) - [Pied List Box](listbox_overview.md#list-box-footers) - [En-tête List Box](listbox_overview.md#list-box-headers) - [Bouton Radio](radio_overview.md) - [Zone de texte](text.md) +[Button](button_overview.md) - [Check Box](checkbox_overview.md) - [Combo Box](comboBox_overview.md) - [Drop-down List](dropdownList_Overview.md) - [Group Box](groupBox.md) - [Hierarchical List](list_overview.md#overview) - [Input](input_overview.md) - [List Box](listbox_overview.md#overview) - [List Box Column](listbox_overview.md#list-box-columns) - [List Box Footer](listbox_overview.md#list-box-footers) - [List Box Header](listbox_overview.md#list-box-headers) - [Radio Button](radio_overview.md) - [Text Area](text.md) --- -## Taille +## Font Size -Permet de définir en points la taille de police de l'objet. +Allows defining the object's font size in points. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| -------- | --------------- | -------------------------------------------------- | -| fontSize | integer | Taille de la police en points. Valeur minimale : 0 | +| Name | Data Type | Possible Values | +| -------- | --------- | ------------------------------------- | +| fontSize | integer | Font size in points. Minimum value: 0 | -#### Objets pris en charge +#### Objects Supported -[Bouton](button_overview.md) - [Case à cocher](checkbox_overview.md) - [Combo Box](comboBox_overview.md) - [Liste déroulante](dropdownList_Overview.md) - [Group Box](groupBox.md) - [Liste hiérarchique](list_overview.md#overview) - [Zone de saisie](input_overview.md) - [List Box](listbox_overview.md#overview) - [Colonne List Box](listbox_overview.md#list-box-columns) - [Pied List Box](listbox_overview.md#list-box-footers) - [En-tête List Box](listbox_overview.md#list-box-headers) - [Bouton Radio](radio_overview.md) - [Zone de texte](text.md) +[Button](button_overview.md) - [Check Box](checkbox_overview.md) - [Combo Box](comboBox_overview.md) - [Drop-down List](dropdownList_Overview.md) - [Group Box](groupBox.md) - [Hierarchical List](list_overview.md#overview) - [Input](input_overview.md) - [List Box](listbox_overview.md#overview) - [List Box Column](listbox_overview.md#list-box-columns) - [List Box Footer](listbox_overview.md#list-box-footers) - [List Box Header](listbox_overview.md#list-box-headers) - [Radio Button](radio_overview.md) - [Text Area](text.md) --- -## Couleur de la police +## Font Color -Désigne la couleur de la police. +Designates the font color. -> Cette propriété définit également la couleur de [bordure](#border-line-style-dotted-line-type) (le cas échéant) de l'objet lorsque le style "plein" ou "pointillé" est utilisé. +> This property also sets the color of object's [border](#border-line-style-dotted-line-type) (if any) when "plain" or "dotted" style is used. -La couleur peut être spécifiée par : +The color can be specified by: -* un nom de couleur - comme "red" -* une valeur HEX - comme "# ff0000" -* une valeur RVB - comme "rgb (255,0,0)" +* a color name - like "red" +* a HEX value - like "#ff0000" +* an RGB value - like "rgb(255,0,0)" -Vous pouvez également définir cette propriété à l'aide de la commande [**OBJECT SET RGB COLORS**](https://doc.4d.com/4Dv18/4D/18/OBJECT-SET-RGB-COLORS.301-4505456.en.html). +You can also set this property using the [**OBJECT SET RGB COLORS**](https://doc.4d.com/4Dv18/4D/18/OBJECT-SET-RGB-COLORS.301-4505456.en.html) command. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------ | --------------- | ------------------------------------------ | -| stroke | string | une valeur css; "transparent"; "automatic" | +| Name | Data Type | Possible Values | +| ------ | --------- | ----------------------------------------- | +| stroke | string | any css value, "transparent", "automatic" | -#### Objets pris en charge +#### Objects Supported -[Bouton](button_overview.md) - [Case à cocher](checkbox_overview.md) - [Combo Box](comboBox_overview.md) - [Liste déroulante](dropdownList_Overview.md) - [Group Box](groupBox.md) - [Liste hiérarchique](list_overview.md#overview) - [Zone de saisie](input_overview.md) - [List Box](listbox_overview.md#overview) - [Colonne List Box](listbox_overview.md#list-box-columns) - [Pied List Box](listbox_overview.md#list-box-footers) - [En-tête List Box](listbox_overview.md#list-box-headers) - [Indicateurs de progression](progressIndicator.md) - [Règle](ruler.md) - [Bouton Radio](radio_overview.md) - [Zone de texte](text.md) +[Button](button_overview.md) - [Check Box](checkbox_overview.md) - [Combo Box](comboBox_overview.md) - [Drop-down List](dropdownList_Overview.md) - [Group Box](groupBox.md) - [Hierarchical List](list_overview.md#overview) - [Input](input_overview.md) - [List Box](listbox_overview.md#overview) - [List Box Column](listbox_overview.md#list-box-columns) - [List Box Footer](listbox_overview.md#list-box-footers) - [List Box Header](listbox_overview.md#list-box-headers) - [Progress Indicators](progressIndicator.md) - [Ruler](ruler.md) - [Radio Button](radio_overview.md) - [Text Area](text.md) --- -## Expression couleur police +## Font Color Expression -`List box de type collection/sélection d'entité` +`Selection and collection/entity selection type list boxes` -Utilisée pour appliquer une couleur de police personnalisée à chaque ligne de la list box. Vous devez utiliser des valeurs de couleur RVB. Pour plus d'informations à ce sujet, reportez-vous à la description de la commande [OBJECT SET RGB COLORS](https://doc.4d.com/4Dv17R6/4D/17-R6/OBJECT-SET-RGB-COLORS.301-4311385.en.html) dans le manuel Langage 4D. +Used to apply a custom font color to each row of the list box. You must use RGB color values. For more information about this, refer to the description of the [OBJECT SET RGB COLORS](https://doc.4d.com/4Dv17R6/4D/17-R6/OBJECT-SET-RGB-COLORS.301-4311385.en.html) command in the 4D Language Reference manual. -Vous devez saisir une expression ou une variable (les variables de type tableau ne peuvent pas être utilisées). L'expression ou la variable sera évaluée pour chaque ligne affichée. Vous pouvez utiliser les constantes du thème [SET RGB COLORS](https://doc.4d.com/4Dv17R6/4D/17-R6/SET-RGB-COLORS.302-4310385.en.html). +You must enter an expression or a variable (array type variables cannot be used). The expression or variable will be evaluated for each row displayed. You can use the constants of the [SET RGB COLORS](https://doc.4d.com/4Dv17R6/4D/17-R6/SET-RGB-COLORS.302-4310385.en.html) theme. -Vous pouvez également définir cette propriété à l'aide de la commande `LISTBOX SET PROPERTY` avec la constante `lk font color expression`. -> Cette propriété peut également être définie à l'aide d'une [expression Meta Info](properties_Text.md#meta-info-expression). +You can also set this property using the `LISTBOX SET PROPERTY` command with `lk font color expression` constant. +> This property can also be set using a [Meta Info Expression](properties_Text.md#meta-info-expression). -L'exemple suivant utilise un nom de variable : entrez *CompanyColor* pour l'**expression couleur police** et, dans la méthode formulaire, entrez le code suivant : +The following example uses a variable name: enter *CompanyColor* for the **Font Color Expression** and, in the form method, write the following code: ```4d CompanyColor:=Choose([Companies]ID;Background color;Light shadow color; Foreground color;Dark shadow color) ``` -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| --------------- | --------------- | ------------------------- | -| rowStrokeSource | string | Expression couleur police | +| Name | Data Type | Possible Values | +| --------------- | --------- | --------------------- | +| rowStrokeSource | string | Font color expression | -#### Objets pris en charge +#### Objects Supported [List Box](listbox_overview.md#overview) --- -## Expression style +## Style Expression -`List box de type collection/sélection d'entité` +`Selection and collection/entity selection type list boxes` -Utilisé pour appliquer un style de police personnalisé à chaque ligne de list box ou de chaque cellule de la colonne. +Used to apply a custom character style to each row of the list box or each cell of the column. -Vous devez saisir une expression ou une variable (les variables de type tableau ne peuvent pas être utilisées). L'expression ou variable sera évaluée pour chaque ligne affichée (si elle s'applique à la list box) ou chaque cellule affichée (si elle s'applique à la list box). Vous pouvez utiliser les constantes du thème [Styles de caractères](https://doc.4d.com/4Dv17R6/4D/17-R6/Font-Styles.302-4310343.en.html). +You must enter an expression or a variable (array type variables cannot be used). The expression or variable will be evaluated for each row displayed (if applied to the list box) or each cell displayed (if applied to a column). You can use the constants of the [Font Styles](https://doc.4d.com/4Dv17R6/4D/17-R6/Font-Styles.302-4310343.en.html) theme. -Exemple : +Example: ```4d Choose([Companies]ID;Bold;Plain;Italic;Underline) ``` -Vous pouvez également définir cette propriété à l'aide de la commande `LISTBOX SET PROPERTY` avec la constante `lk font style expression`. -> Cette propriété peut également être définie à l'aide d'une [expression Meta Info](properties_Text.md#meta-info-expression). +You can also set this property using the `LISTBOX SET PROPERTY` command with `lk font style expression` constant. +> This property can also be set using a [Meta Info Expression](properties_Text.md#meta-info-expression). -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| -------------- | --------------- | -------------------------------------------------------- | -| rowStyleSource | string | Expression de style à évaluer pour chaque ligne/cellule. | +| Name | Data Type | Possible Values | +| -------------- | --------- | ----------------------------------------------- | +| rowStyleSource | string | Style expression to evaluate for each row/cell. | -#### Objets pris en charge +#### Objects Supported -[List Box](listbox_overview.md) - [Colonne List Box](listbox_overview.md#list-box-columns) +[List Box](listbox_overview.md) - [List Box Column](listbox_overview.md#list-box-columns) @@ -252,42 +252,42 @@ Vous pouvez également définir cette propriété à l'aide de la commande `LIST --- -## Alignement horizontal +## Horizontal Alignment -Emplacement horizontal du texte dans la zone où il apparait. +Horizontal location of text within the area that contains it. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| --------- | --------------- | ------------------------------------------------- | -| textAlign | string | "automatic", "right", "center", "justify", "left" | +| Name | Data Type | Possible Values | +| --------- | --------- | ------------------------------------------------- | +| textAlign | string | "automatic", "right", "center", "justify", "left" | -#### Objets pris en charge +#### Objects Supported -[Group Box](groupBox.md) - [List Box](listbox_overview.md#overview) - [Colonne List Box](listbox_overview.md#list-box-columns) - [En-tête List Box](listbox_overview.md#list-box-headers) - [Pied List Box](listbox_overview.md#list-box-footers) - [Zone de texte](text.md) +[Group Box](groupBox.md) - [List Box](listbox_overview.md#overview) - [List Box Column](listbox_overview.md#list-box-columns) - [List Box Header](listbox_overview.md#list-box-headers) - [List Box Footer](listbox_overview.md#list-box-footers) - [Text Area](text.md) --- -## Alignement vertical +## Vertical Alignment -Emplacement vertical du texte dans la zone où il apparait. +Vertical location of text within the area that contains it. -L'option **Default** (valeur JSON `automatique`) définit l'alignement en fonction du type de données identifiées dans chaque colonne : -- `bas` pour toutes les données (sauf les images) et -- `haut` pour les données de type image. +The **Default** option (`automatic` JSON value) sets the alignment according to the type of data found in each column: +- `bottom` for all data (except pictures) and +- `top` for picture type data. -Cette propriété peut également être gérée par les commandes [OBJECT Get vertical alignment](https://doc.4d.com/4Dv18/4D/18/OBJECT-Get-vertical-alignment.301-4505442.en.html) et [OBJECT SET VERTICAL ALIGNMENT](https://doc.4d.com/4Dv18/4D/18/OBJECT-SET-VERTICAL-ALIGNMENT.301-4505430.en.html). +This property can also be handled by the [OBJECT Get vertical alignment](https://doc.4d.com/4Dv18/4D/18/OBJECT-Get-vertical-alignment.301-4505442.en.html) and [OBJECT SET VERTICAL ALIGNMENT](https://doc.4d.com/4Dv18/4D/18/OBJECT-SET-VERTICAL-ALIGNMENT.301-4505430.en.html) commands. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------------- | --------------- | -------------------------------------- | -| verticalAlign | string | "automatic", "top", "middle", "bottom" | +| Name | Data Type | Possible Values | +| ------------- | --------- | -------------------------------------- | +| verticalAlign | string | "automatic", "top", "middle", "bottom" | -#### Objets pris en charge +#### Objects Supported -[List Box](listbox_overview.md) - [Colonne List Box](listbox_overview.md#list-box-columns) - [Pied List Box](listbox_overview.md#list-box-footers) - [En-tête List Box](listbox_overview.md#list-box-headers) +[List Box](listbox_overview.md) - [List Box Column](listbox_overview.md#list-box-columns) - [List Box Footer](listbox_overview.md#list-box-footers) - [List Box Header](listbox_overview.md#list-box-headers) @@ -298,25 +298,25 @@ Cette propriété peut également être gérée par les commandes [OBJECT Get ve --- -## Meta Info expression -`List box de type collection ou entity selection (sélection d'entité)` +## Meta Info Expression +`Collection or entity selection type list boxes` -Indique une expression ou une variable qui sera évaluée pour chaque ligne affichée. Elle permet de définir un ensemble d'attributs texte des lignes. Vous devez passer une **variable objet** ou une **expression qui retourne un objet**. Les propriétés suivantes sont prises en charge : +Specifies an expression or a variable which will be evaluated for each row displayed. It allows defining a whole set of row text attributes. You must pass an **object variable** or an **expression that returns an object**. The following properties are supported: -| Nom de propriété | Type | Description | -| ------------------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| stroke | string | Couleur de la police. Toute couleur CSS (ex : "#FF00FF"), "automatic", "transparent" | -| border-style | string | Couleur de fond. Toute couleur CSS (ex : "#FF00FF"), "automatic", "transparent" | -| fontStyle | string | "normal","italic" | -| fontWeight | string | "normal","bold" | -| textDecoration | string | "normal","underline" | -| unselectable | boolean | Désigne la ligne correspondante comme n'étant pas sélectionnable (c'est-à-dire que le surlignage n'est pas possible). Les zones saisissables ne sont plus saisissables si cette option est activée, à moins que l'option «Single-click Edit » ne soit également activée. Les contrôles tels que les cases à cocher et les listes restent fonctionnels. This setting is ignored if the list box selection mode is "None". Valeurs par défaut : False. | -| disabled | boolean | Désactive la ligne correspondante. Les zones saisissables ne sont plus saisissables si cette option est activée. Le texte et les contrôles (cases à cocher, listes, etc.) sont grisés. Valeurs par défaut : False. | -| cell.\ | object | Permet d'appliquer la propriété à une seule colonne. Passez dans \ le nom d'objet de la colonne de list box. **Note** : les propriétés "unselectable" et "disabled" ne peuvent être définies qu'au niveau de la ligne. Elles sont ignorées si elles sont passées dans l'objet "cell" | +| Property name | Type | Description | +| ------------------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| stroke | string | Font color. Any CSS color (ex: "#FF00FF"), "automatic", "transparent" | +| fill | string | Background color. Any CSS color (ex: "#F00FFF"), "automatic", "transparent" | +| fontStyle | string | "normal","italic" | +| fontWeight | string | "normal","bold" | +| textDecoration | string | "normal","underline" | +| unselectable | boolean | Designates the corresponding row as not being selectable (*i.e.*, highlighting is not possible). Enterable areas are no longer enterable if this option is enabled unless the "Single-Click Edit" option is also enabled. Controls such as checkboxes and lists remain functional. This setting is ignored if the list box selection mode is "None". Default value: False. | +| disabled | boolean | Disables the corresponding row. Enterable areas are no longer enterable if this option is enabled. Text and controls (checkboxes, lists, etc.) appear dimmed or grayed out. Default value: False. | +| cell.\ | object | Allows applying the property to a single column. Pass in \ the object name of the list box column. **Note**: "unselectable" and "disabled" properties can only be defined at row level. They are ignored if passed in the "cell" object | -> Les paramètres de style définis avec cette propriété sont ignorés si d'autres paramètres de style sont déjà définis via des expressions (par exemple, [Style Expression](#style-expression), [Font Color Expression](#font-color-expression), [Background Color Expression](#background-color-expression)). +> Style settings made with this property are ignored if other style settings are already defined through expressions (*i.e.*, [Style Expression](#style-expression), [Font Color Expression](#font-color-expression), [Background Color Expression](#background-color-expression)). -**Exemple** +**Example** In the *Color* project method, write the following code: @@ -358,13 +358,13 @@ Then, the *Color* method would contain: -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ---------- | --------------- | ---------------------------------------------------------- | -| metaSource | string | Expression de l'objet à évaluer pour chaque ligne/cellule. | +| Name | Data Type | Possible Values | +| ---------- | --------- | ------------------------------------------------ | +| metaSource | string | Object expression to evaluate for each row/cell. | -#### Objets pris en charge +#### Objects Supported [List Box](listbox_overview.md) @@ -376,32 +376,32 @@ Then, the *Color* method would contain: --- -## Multistyle +## Multi-style -Cette propriété permet d'utiliser des styles spécifiques dans la zone sélectionnée. Lorsque cette option est cochée, 4D interprète toutes les balises \ HTML présentes dans la zone.

    +This property enables the possibility of using specific styles in the selected area. When this option is checked, 4D interprets any \ HTML tags found in the area.

    - Par défaut, cette option n'est pas activée. + By default, this option is not enabled.

    - Grammaire JSON + JSON Grammar

    @@ -421,7 +421,7 @@ Cette propriété permet d'utiliser des styles spécifiques dans la zone sélect
    - Nom + Name - Type de données + Data Type - Valeurs possibles + Possible Values

    - Objets pris en charge + Objects Supported

    @@ -441,23 +441,23 @@ Cette propriété permet d'utiliser des styles spécifiques dans la zone sélect

    - Modifie l'orientation (rotation) d'une zone de texte. Les zones de texte peuvent être pivotées par incréments de 90°. Chaque valeur d'orientation est appliquée tout en conservant le même point de départ inférieur gauche pour l'objet : + Modifies the orientation (rotation) of a text area. Text areas can be rotated by increments of 90°. Each orientation value is applied while keeping the same lower left starting point for the object:

    - Valeur d'orientation + Orientation value - Résultat + Result
    - 0 (par défaut) + 0 (default) @@ -497,28 +497,28 @@ Cette propriété permet d'utiliser des styles spécifiques dans la zone sélect

    - En plus des zones de texte statiques, les objets de texte des zones de saisie peuvent être pivotés lorsqu'ils ne sont pas saisissables. Lorsqu'une propriété de rotation est appliquée à un objet de saisie, la propriété saisissable est supprimée (le cas échéant). Cet objet est alors exclu de l'ordre de saisie. + In addition to static text areas, input text objects can be rotated when they are non-enterable. When a rotation property is applied to an input object, the enterable property is removed (if any). This object is then excluded from the entry order.

    - Grammaire JSON + JSON Grammar

    @@ -538,11 +538,11 @@ Cette propriété permet d'utiliser des styles spécifiques dans la zone sélect
    - Nom + Name - Type de données + Data Type - Valeurs possibles + Possible Values

    - Objets pris en charge + Objects Supported

    - Zone de saisie (non saisissable) - Zone de texte + Input (non-enterable) - Text Area

    @@ -551,37 +551,37 @@ Cette propriété permet d'utiliser des styles spécifiques dans la zone sélect

    - Tableau couleurs de police + Row Font Color Array

    - List box de type tableau + Array type list boxes

    - Permet de définir une couleur de police personnalisée à chaque ligne de list box ou de chaque cellule de la colonne. + Allows setting a custom font color to each row of the list box or cell of the column.

    - Le nom d'un tableau Entier Long doit être utilisé. Chaque élément de ce tableau correspond à une ligne de la zone de list box (si elle est appliquée à la liste box) ou à une cellule de la colonne (si elle est appliquée à une colonne), le tableau doit donc avoir la même taille que le tableau associé à la colonne. Vous pouvez utiliser les constantes du thème SET RGB COLORS. Si vous souhaitez que la cellule hérite de la couleur d'arrière-plan définie au niveau supérieur, passez la valeur -255 à l'élément de tableau correspondant. + The name of a Longint array must be used. Each element of this array corresponds to a row of the list box (if applied to the list box) or to a cell of the column (if applied to a column), so the array must be the same size as the array associated with the column. You can use the constants of the SET RGB COLORS theme. If you want the cell to inherit the background color defined at the higher level, pass the value -255 to the corresponding array element.

    - Grammaire JSON + JSON Grammar

    @@ -595,17 +595,17 @@ Cette propriété permet d'utiliser des styles spécifiques dans la zone sélect
    - Nom + Name - Type de données + Data Type - Valeurs possibles + Possible Values
    - Nom d'un tableau entier long + The name of a longint array

    - Objets pris en charge + Objects Supported

    - List Box - Colonne List Box + List Box - List Box Column

    @@ -614,38 +614,38 @@ Cette propriété permet d'utiliser des styles spécifiques dans la zone sélect

    - Tableau de styles + Row Style Array

    - List box de type tableau + Array type list boxes

    - Permet de définir un style de police personnalisé à chaque ligne de list box ou de chaque cellule de la colonne. + Allows setting a custom font style to each row of the list box or each cell of the column.

    - Le nom d'un tableau Entier Long doit être utilisé. Chaque élément de ce tableau correspond à une ligne de la zone de list box (si elle est appliquée à la liste box) ou à une cellule de la colonne (si elle est appliquée à une colonne), le tableau doit donc avoir la même taille que le tableau associé à la colonne. Pour remplir le tableau (à l'aide d'une méthode), utilisez les constantes du thème Styles de caractères. Vous pouvez ajouter des constantes ensemble pour combiner plusieurs styles. Si vous souhaitez que la cellule hérite du style défini au niveau supérieur, passez la valeur -255 à l'élément de tableau correspondant. + The name of a Longint array must be used. Each element of this array corresponds to a row of the list box (if applied to the list box) or to a cell of the column (if applied to a column), so the array must be the same size as the array associated with the column. To fill the array (using a method), use the constants of the Font Styles theme. You can add constants together to combine styles. If you want the cell to inherit the style defined at the higher level, pass the value -255 to the corresponding array element.

    - Grammaire JSON + JSON Grammar

    @@ -659,32 +659,32 @@ Cette propriété permet d'utiliser des styles spécifiques dans la zone sélect
    - Nom + Name - Type de données + Data Type - Valeurs possibles + Possible Values
    - Nom d'un tableau entier long. + The name of a longint array.

    - Objets pris en charge + Objects Supported

    - List Box - Colonne List Box + List Box - List Box Column


    - Stocker les balises par défaut + Store with default style tags

    - Cette propriété n'est disponible que pour une zone de saisie multi-styles. Lorsque cette propriété est activée, la zone stockera les balises de style avec le texte, même si aucune modification n'a été apportée. Dans ce cas, les balises correspondent au style par défaut. Lorsque cette propriété est désactivée, seules les balises de style modifiées sont stockées. + This property is only available for a Multi-style input area. When this property is enabled, the area will store the style tags with the text, even if no modification has been made. In this case, the tags correspond to the default style. When this property is disabled, only modified style tags are stored.

    - Par exemple, voici un texte qui inclut une modification de style : + For example, here is a text that includes a style modification:

    @@ -692,35 +692,35 @@ Cette propriété permet d'utiliser des styles spécifiques dans la zone sélect

    - Lorsque la propriété est désactivée, la zone ne stocke que la modification qui a été apportée. Les contenus stockés sont donc : + When the property is disabled, the area only stores the modification. The stored contents are therefore:

    -
    Quelle <SPAN STYLE="font-size:13.5pt">belle</SPAN> journée !
    +
    What a <SPAN STYLE="font-size:13.5pt">beautiful</SPAN> day!
     

    - Lorsque la propriété est activée, la zone stocke toutes les informations de mise en forme. La première balise générique décrit le style par défaut puis chaque variation fait l'objet d'une paire de balises imbriquées. Les contenus stockés dans la zone sont donc : + When the property is enabled, the area stores all the formatting information. The first generic tag describes the default style then each variation is the subject of a pair of nested tags. The contents stored in the area are therefore:

    <SPAN STYLE="font-family:'Arial';font-size:9pt;text-align:left;font-weight:normal;font-style:normal;text-decoration:none;color:#000000;background-color:#FFFFFF">What a <SPAN STYLE="font-size:13.5pt">beautiful</SPAN> day!</SPAN>
     

    - Grammaire JSON + JSON Grammar

    @@ -734,13 +734,13 @@ Cette propriété permet d'utiliser des styles spécifiques dans la zone sélect
    - Nom + Name - Type de données + Data Type - Valeurs possibles + Possible Values
    - true, false (par défaut). + true, false (default).

    - Objets pris en charge + Objects Supported

    From 6c2ba9170063542555785cbe63c6056109476ad2 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:16:53 +0100 Subject: [PATCH 041/260] New translations properties_TextAndPicture.md (French) --- .../FormObjects/properties_TextAndPicture.md | 228 +++++++++--------- 1 file changed, 114 insertions(+), 114 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/properties_TextAndPicture.md b/website/translated_docs/fr/FormObjects/properties_TextAndPicture.md index ad739488600b6a..f106908f5563b5 100644 --- a/website/translated_docs/fr/FormObjects/properties_TextAndPicture.md +++ b/website/translated_docs/fr/FormObjects/properties_TextAndPicture.md @@ -1,252 +1,252 @@ --- id: propertiesTextAndPicture -title: Texte et Image +title: Text and Picture --- --- -## Chemin d'accès arrière-plan +## Background pathname -Définit le chemin d'accès de l'image qui sera dessinée en arrière-plan de l'objet. Si l'objet utilise une [icône](#picture-pathname) avec [différents états](#number-of-states), l'image de fond prendra automatiquement en charge le même nombre d'états. +Sets the path of the picture that will be drawn in the background of the object. If the object uses an [icon](#picture-pathname) with [different states](#number-of-states), the background picture will automatically support the same number of states. -Le chemin d'accès à saisir est identique à celui de [la propriété Chemin d'accès pour les images statiques](properties_Picture.md#pathname). +The pathname to enter is similar as for the [Pathname property for static pictures](properties_Picture.md#pathname). -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ----------------------- | --------------- | -------------------------------------------------------------------------------------------------------- | -| customBackgroundPicture | string | Chemin relatif en syntaxe POSIX. Doit être utilisé avec l'option "Personnalisé" de la propriété "Style". | +| Name | Data Type | Possible Values | +| ----------------------- | --------- | ------------------------------------------------------------------------------------------------------------ | +| customBackgroundPicture | string | Relative path in POSIX syntax. Must be used in conjunction with the style property with the "custom" option. | -#### Objets pris en charge +#### Objects Supported -[Bouton personnalisé](button_overview.md#custom) - [Case à cocher personnalisée](checkbox_overview.md#custom) - [Bouton radio personnalisé](radio_overview.md#custom) +[Custom Button](button_overview.md#custom) - [Custom Check Box](checkbox_overview.md#custom) - [Custom Radio Button](radio_overview.md#custom) --- -## Styles de bouton +## Button Style -Aspect général du bouton. Le style du bouton joue également un rôle dans la disponibilité de certaines options. +General appearance of the button. The button style also plays a part in the availability of certain options. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -|:-----:|:---------------:| ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| style | Texte | "regular", "flat", "toolbar", "bevel", "roundedBevel", "gradientBevel", "texturedBevel", "office", "help", "circular", "disclosure", "roundedDisclosure", "custom" | +| Name | Data Type | Possible Values | +|:-----:|:---------:| ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| style | text | "regular", "flat", "toolbar", "bevel", "roundedBevel", "gradientBevel", "texturedBevel", "office", "help", "circular", "disclosure", "roundedDisclosure", "custom" | -#### Objets pris en charge +#### Objects Supported -[Bouton](button_overview.md) - [Bouton radio](radio_overview.md) - [Case à cocher](checkbox_overview.md) - [Bouton radio](radio_overview.md) +[Button](button_overview.md) - [Radio Button](radio_overview.md) - [Check Box](checkbox_overview.md) - [Radio Button](radio_overview.md) --- -## Marge horizontale +## Horizontal Margin -Cette propriété permet de définir la taille (en pixels) des marges horizontales du bouton. Cette marge délimite la zone que l'icône et le titre du bouton ne doivent pas dépasser. +This property allows setting the size (in pixels) of the horizontal margins of the button. This margin delimits the area that the button icon and title must not surpass. -Ce paramètre est utile, par exemple, lorsque l'image de fond contient des bordures : +This parameter is useful, for example, when the background picture contains borders: -| Avec / Sans | Exemple | +| With / Without | Example | | -------------------- | --------------------------------------------------------- | -| Sans marge | ![](assets/en/FormObjects/property_horizontalMargin1.png) | -| Avec marge 13 pixels | ![](assets/en/FormObjects/property_horizontalMargin2.png) | -> Cette propriété fonctionne avec la propriété [Marge verticale](#vertical-margin). +| Without margin | ![](assets/en/FormObjects/property_horizontalMargin1.png) | +| With 13-pixel margin | ![](assets/en/FormObjects/property_horizontalMargin2.png) | +> This property works in conjunction with the [Vertical Margin](#vertical-margin) property. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------------- | --------------- | ---------------------------------------------------- | -| customBorderX | number | A utiliser avec le style "personnalisé". Minimum : 0 | +| Name | Data Type | Possible Values | +| ------------- | --------- | --------------------------------------- | +| customBorderX | number | For use with "custom" style. Minimum: 0 | -#### Objets pris en charge +#### Objects Supported -[Bouton personnalisé](button_overview.md#custom) - [Case à cocher personnalisée](checkbox_overview.md#custom) - [Bouton radio personnalisé](radio_overview.md#custom) +[Custom Button](button_overview.md#custom) - [Custom Check Box](checkbox_overview.md#custom) - [Custom Radio Button](radio_overview.md#custom) --- -## Emplacement de l'icône +## Icon Location -Désigne l'emplacement d'une icône par rapport à l'objet formulaire. +Designates the placement of an icon in relation to the form object. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------------- | --------------- | --------------------------- | -| iconPlacement | string | "aucun", "gauche", "droite" | +| Name | Data Type | Possible Values | +| ------------- | --------- | ----------------------- | +| iconPlacement | string | "none", "left", "right" | -#### Objets pris en charge +#### Objects Supported -[Entête de List Box](listbox_overview.md#list-box-headers) +[List Box Header](listbox_overview.md#list-box-headers) --- -## Décalage icône +## Icon Offset -Définit une valeur de décalage personnalisée en pixels, qui sera utilisée lorsque le bouton est cliqué +Sets a custom offset value in pixels, which will be used when the button is clicked -Le titre du bouton sera décalé vers la droite et vers le bas pour le nombre de pixels saisis. Cela permet d'appliquer un effet 3D personnalisé lorsque le bouton est cliqué. +The title of the button will be shifted to the right and toward the bottom for the number of pixels entered. This allows applying a customized 3D effect when the button is clicked. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------------ | --------------- | ----------------- | -| customOffset | number | minimum : 0 | +| Name | Data Type | Possible Values | +| ------------ | --------- | --------------- | +| customOffset | number | minimum: 0 | -#### Objets pris en charge +#### Objects Supported -[Bouton personnalisé](button_overview.md#custom) - [Case à cocher personnalisée](checkbox_overview.md#custom) - [Bouton radio personnalisé](radio_overview.md#custom) +[Custom Button](button_overview.md#custom) - [Custom Check Box](checkbox_overview.md#custom) - [Custom Radio Button](radio_overview.md#custom) --- -## Nombre d'états +## Number of States -Cette propriété définit le nombre exact d'états présents dans l'image utilisée comme icône pour un [bouton avec icône](button_overview.md), une [case à cocher](checkbox_overview.md) ou un [bouton radio](radio_overview.md) personnalisé. En général, une icône de bouton comprend quatre états : actif, cliqué, survolé et inactif. +This property sets the exact number of states present in the picture used as the icon for a [button with icon](button_overview.md), a [check box](checkbox_overview.md) or a custom [radio button](radio_overview.md). In general, a button icon includes four states: active, clicked, mouse over and inactive. -Chaque état est représenté par une image différente. Dans l'image source, les états doivent être empilés verticalement : +Each state is represented by a different picture. In the source picture, the states must be stacked vertically: ![](assets/en/property_numberOfStates.png) -Les états suivants sont représentés : -1. bouton non cliqué / case non cochée (valeur de la variable = 0) -2. bouton cliqué / case cochée (valeur de la variable = 1) -3. survolé +The following states are represented: +1. button not clicked / check box unchecked (variable value=0) +2. button clicked / check box checked (variable value=1) +3. roll over 4. disabled -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ---------- | --------------- | ----------------- | -| iconFrames | number | minimum: 1 | +| Name | Data Type | Possible Values | +| ---------- | --------- | --------------- | +| iconFrames | number | minimum: 1 | -#### Objets pris en charge +#### Objects Supported -[Bouton](button_overview.md) (tous les styles sauf[Aide](button_overview.md#help)) - [Case à cocher](checkbox_overview.md) - [Bouton radio](radio_overview.md) +[Button](button_overview.md) (all styles except [Help](button_overview.md#help)) - [Check Box](checkbox_overview.md) - [Radio Button](radio_overview.md) --- -## Chemin d'accès de l'image +## Picture pathname -Définit le chemin d'accès de l'image qui sera utilisée comme icône de l'objet. +Sets the path of the picture that will be used as icon for the object. -Le chemin d'accès à saisir est identique à celui de [la propriété Chemin d'accès pour les images statiques](properties_Picture.md#pathname). +The pathname to enter is similar as for the [Pathname property for static pictures](properties_Picture.md#pathname). -> Lorsqu'elle est utilisée comme icône pour les objets actifs, l'image doit être conçue pour prendre en charge [un nombre d'états](#number-of-states) variable. +> When used as icon for active objects, the picture must be designed to support a variable [number of states](#number-of-states). -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ---- | --------------- | ---------------------------------------------- | -| icon | picture | Chemin relatif ou filesystem en syntaxe POSIX. | +| Name | Data Type | Possible Values | +| ---- | --------- | -------------------------------------------- | +| icon | picture | Relative or filesystem path in POSIX syntax. | -#### Objets pris en charge +#### Objects Supported -[Bouton](button_overview.md) (tous les styles sauf[Aide](button_overview.md#help)) - [Case à cocher](checkbox_overview.md) - [En-tête List box](listbox_overview.md#list-box-headers)[Bouton radio](listbox_overview.md#list-box-headers) +[Button](button_overview.md) (all styles except [Help](button_overview.md#help)) - [Check Box](checkbox_overview.md) - [List Box Header](listbox_overview.md#list-box-headers) - [Radio Button](radio_overview.md) --- -## Position Titre/Image +## Title/Picture Position -Cette propriété permet de modifier l’emplacement relatif du titre par rapport à l’icône associée. Cette propriété n’a pas d’effet lorsque le bouton contient uniquement un titre (pas d’image associée) ou une image (pas de titre). Par défaut, lorsqu’un bouton 3D contient un titre et une image, le texte est placé en-dessous de l’image. +This property allows modifying the relative location of the button title in relation to the associated icon. This property has no effect when the button contains only a title (no associated picture) or a picture (no title). By default, when a button contains a title and a picture, the text is placed below the picture. -Voici le résultat des différentes options de cette propriété : +Here are the results using the various options for this property: -| Option | Description | Exemple | -| ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------- | -| **Gauche** | Le texte est placé à gauche de l’icône. Le contenu du bouton est aligné à droite. | ![](assets/en/FormObjects/property_titlePosition_left.en.png) | -| **Haut** | Le texte est placé au-dessus de l’icône. Le contenu du bouton est centré. | ![](assets/en/FormObjects/property_titlePosition_top.png) | -| **Droite** | Le texte est placé à droite de l’icône. Le contenu du bouton est aligné à gauche. | ![](assets/en/FormObjects/property_titlePosition_right.png) | -| **Bas** | Le texte est placé en-dessous de l’icône. Le contenu du bouton est centré. | ![](assets/en/FormObjects/property_titlePosition_bottom.png) | -| **Centre** | Le texte de l’icône est centré verticalement et horizontalement dans le bouton. Ce paramétrage convient par exemple pour du texte inclus dans une icône. | ![](assets/en/FormObjects/property_titlePosition_centered.png) | +| Option | Description | Example | +| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------- | +| **Left** | The text is placed to the left of the icon. The contents of the button are aligned to the right. | ![](assets/en/FormObjects/property_titlePosition_left.en.png) | +| **Top** | The text is placed above the icon. The contents of the button are centered. | ![](assets/en/FormObjects/property_titlePosition_top.png) | +| **Right** | The text is placed to the right of the icon. The contents of the button are aligned to the left. | ![](assets/en/FormObjects/property_titlePosition_right.png) | +| **Bottom** | The text is placed below the icon. The contents of the button are centered. | ![](assets/en/FormObjects/property_titlePosition_bottom.png) | +| **Centered** | The text of the icon is centered vertically and horizontally in the button. This parameter is useful, for example, for text included in an icon. | ![](assets/en/FormObjects/property_titlePosition_centered.png) | -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------------- | --------------- | ------------------------------------------ | -| textPlacement | string | "left", "top", "right", "bottom", "center" | +| Name | Data Type | Possible Values | +| ------------- | --------- | ------------------------------------------ | +| textPlacement | string | "left", "top", "right", "bottom", "center" | -#### Objets pris en charge +#### Objects Supported -[Bouton](button_overview.md) (tous les styles sauf[Aide](button_overview.md#help)) - [Case à cocher](checkbox_overview.md) - [Bouton radio](radio_overview.md) +[Button](button_overview.md) (all styles except [Help](button_overview.md#help)) - [Check Box](checkbox_overview.md) - [Radio Button](radio_overview.md) --- -## Marge verticale +## Vertical Margin -Cette propriété permet de définir la taille (en pixels) des marges verticales du bouton. Cette marge délimite la zone que l'icône et le titre du bouton ne doivent pas dépasser. +This property allows setting the size (in pixels) of the vertical margins of the button. This margin delimits the area that the button icon and title must not surpass. -Ce paramètre est utile, par exemple, lorsque l'image de fond contient des bordures. +This parameter is useful, for example, when the background picture contains borders. -> Cette propriété fonctionne avec la propriété [Marge horizontale](#horizontal-margin). +> This property works in conjunction with the [Horizontal Margin](#horizontal-margin) property. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------------- | --------------- | ---------------------------------------------------- | -| customBorderY | number | A utiliser avec le style "personnalisé". Minimum : 0 | +| Name | Data Type | Possible Values | +| ------------- | --------- | --------------------------------------- | +| customBorderY | number | For use with "custom" style. Minimum: 0 | -#### Objets pris en charge +#### Objects Supported -[Bouton personnalisé](button_overview.md#custom) - [Case à cocher personnalisée](checkbox_overview.md#custom) - [Bouton radio personnalisé](radio_overview.md#custom) +[Custom Button](button_overview.md#custom) - [Custom Check Box](checkbox_overview.md#custom) - [Custom Radio Button](radio_overview.md#custom) --- -## Avec pop-up menu +## With pop-up menu -Cette propriété permet d’afficher un symbole en forme de triangle indiquant qu’un pop up menu lui est associé : +This property allows displaying a symbol that appears as a triangle in the button to indicate the presence of an attached pop-up menu: ![](assets/en/FormObjects/property_popup.png) -L’apparence et l’emplacement de ce symbole dépend du style de bouton et de la plate-forme courante. +The appearance and location of this symbol depends on the button style and the current platform. -### Séparé et Lié +### Linked and Separated -Pour associer un symbole de pop up menu à un bouton, vous disposez de deux options d’affichage : +To attach a pop-up menu symbol to a button, there are two display options available: -| Séparé | Et Lié | +| Linked | Separated | |:----------------------------------------------------:|:-------------------------------------------------------:| | ![](assets/en/FormObjects/property_popup_linked.png) | ![](assets/en/FormObjects/property_popup_separated.png) | -> La disponibilité effective d’un mode “Séparé” dépend du style de bouton et de la plate-forme. +> The actual availability of a "separated" mode depends on the style of the button and the platform. -Chaque option précise la relation entre le bouton et le pop up menu associé : +Each option specifies the relation between the button and the attached pop-up menu: -

  • Lorsque le pop up menu est **séparé**, un clic sur la partie gauche du bouton exécute directement l’action courante du bouton ; cette action peut être modifiée via le pop up menu accessible dans la partie droite du bouton.
  • Lorsque le pop up menu est **lié**, un simple clic sur le bouton ne déclenche aucune autre action que l’affichage du pop up menu. Seule la sélection de l’action dans le pop up menu provoque son déclenchement. +
  • When the pop-up menu is **separated**, clicking on the left part of the button directly executes the current action of the button; this action can be modified using the pop-up menu accessible in the right part of the button.
  • When the pop-up menu is **linked**, a simple click on the button only displays the pop-up menu. Only the selection of the action in the pop-up menu causes its execution. -### Gestion du pop up menu +### Managing the pop-up menu -Il est important de noter que la propriété “Avec pop up menu” gère uniquement l’aspect graphique du bouton. L’affichage du pop up menu et de ses valeurs doivent être entièrement gérés par le développeur, notamment à l’aide des `événements formulaire` et des commandes **[Pop up menu dynamique](https://doc.4d.com/4Dv18/4D/18/Dynamic-pop-up-menu.301-4505524.en.html)** et **[Pop up menu](https://doc.4d.com/4Dv17R5/4D/17-R5/Pop-up-menu.301-4127438.en.html)**. +It is important to note that the "With Pop-up Menu" property only manages the graphic aspect of the button. The display of the pop-up menu and its values must be handled entirely by the developer, more particularly using `form events` and the **[Dynamic pop up menu](https://doc.4d.com/4Dv18/4D/18/Dynamic-pop-up-menu.301-4505524.en.html)** and **[Pop up menu](https://doc.4d.com/4Dv17R5/4D/17-R5/Pop-up-menu.301-4127438.en.html)** commands. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -|:-------------- | --------------- | ---------------------------------------------------------------------------------------------------- | -| popupPlacement | string |
  • "none"
  • "linked"
  • "separated" | +| Name | Data Type | Possible Values | +|:-------------- | --------- | ---------------------------------------------------------------------------------------------------- | +| popupPlacement | string |
  • "none"
  • "linked"
  • "separated" | -#### Objets pris en charge +#### Objects Supported -[Bouton barre outils](button_overview.md#toolbar) - [Bouton Bevel](button_overview.md#bevel) - [Bouton bevel circulaire](button_overview.md#Rounded-bevel) - [Bouton OS X Gradient](button_overview.md#os-x-gradient) - [Bouton OS X Textured](button_overview.md#os-x-textured) - [Bouton Office XP](button_overview.md#office-XP) - [Bouton cercle](button_overview.md#circle) - [Personnalisé](button_overview.md#custom) \ No newline at end of file +[Toolbar Button](button_overview.md#toolbar) - [Bevel Button](button_overview.md#bevel) - [Rounded Bevel Button](button_overview.md#Rounded-bevel) - [OS X Gradient Button](button_overview.md#os-x-gradient) - [OS X Textured Button](button_overview.md#os-x-textured) - [Office XP Button](button_overview.md#office-XP) - [Circle Button](button_overview.md#circle) - [Custom](button_overview.md#custom) \ No newline at end of file From f8b4e4b7659630b5bf32dae583dd805c01429624 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:16:55 +0100 Subject: [PATCH 042/260] New translations properties_WebArea.md (French) --- .../fr/FormObjects/properties_WebArea.md | 100 +++++++++--------- 1 file changed, 50 insertions(+), 50 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/properties_WebArea.md b/website/translated_docs/fr/FormObjects/properties_WebArea.md index 6ac82c6f4b0282..a690347b17a8e4 100644 --- a/website/translated_docs/fr/FormObjects/properties_WebArea.md +++ b/website/translated_docs/fr/FormObjects/properties_WebArea.md @@ -1,75 +1,75 @@ --- id: propertiesWebArea -title: Zone Web +title: Web Area --- --- -## Accéder aux méthodes 4D +## Access 4D methods -Il est possible d’appeler des méthodes 4D depuis le code JavaScript exécuté dans une zone Web et de recevoir des valeurs en retour. Pour pouvoir appeler des méthodes 4D depuis la zone Web, vous devez cocher l'option Accès méthodes 4D pour la zone dans la Liste des propriétés . +You can call 4D methods from the JavaScript code executed in a Web area and get values in return. To be able to call 4D methods from a Web area, you must activate the 4D methods accessibility property ("all"). -> Cette option n’apparaît que si l’option [Utiliser le moteur de rendu Web intégré](#use-embedded-web-rendering-engine) est cochée. +> This property is only available if the Web area [uses the embedded Web rendering engine](#use-embedded-web-rendering-engine). -Lorsque cette propriété est cochée, un objet JavaScript spécial `$4d` est instancié dans la zone Web et permet de [gérer les appels aux méthodes projet de 4D](webArea_overview.md#4d-object). +When this property is on, a special JavaScript object named `$4d` is instantiated in the Web area, which you can [use to manage calls to 4D project methods](webArea_overview.md#4d-object). -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| -------------------- | --------------- | -------------------------- | -| methodsAccessibility | string | "none" (par défaut), "all" | +| Name | Data Type | Possible Values | +| -------------------- | --------- | ----------------------- | +| methodsAccessibility | string | "none" (default), "all" | -#### Objets pris en charge +#### Objects Supported -[Zone Web](webArea_overview.md) +[Web Area](webArea_overview.md) --- -## Variable Progression +## Progression -La variable "Progression" est de type Entier long. Elle contient une valeur entre 0 et 100, représentant le pourcentage du chargement complet de la page affichée dans la zone Web. La variable est mise à jour automatiquement par 4D. Il n’est pas possible de la modifier manuellement. +Name of a Longint type variable. This variable will receive a value between 0 and 100, representing the page load completion percentage in the Web area. Automatically updated by 4D, cannot be modified manually. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| -------------- | --------------- | ------------------------------ | -| progressSource | string | Nom d'une variable Entier long | +| Name | Data Type | Possible Values | +| -------------- | --------- | -------------------------- | +| progressSource | string | Name of a Longint variable | -#### Objets pris en charge +#### Objects Supported -[Zone Web](webArea_overview.md) +[Web Area](webArea_overview.md) --- -## Variable URL +## URL -La variable "URL" est de type chaîne. Elle contient l’URL chargé ou en cours de chargement par la zone Web associée. L’association entre la variable et la zone Web s’effectue dans les deux sens : +A String type variable that designates the URL loaded or being loading by the associated Web area. The association between the variable and the Web area works in both directions: -* Si l’utilisateur affecte un nouvel URL à la variable, l’URL est automatiquement chargé par la zone Web. -* Toute navigation effectuée à l’intérieur de la zone Web met automatiquement à jour le contenu de la variable. +* If the user assigns a new URL to the variable, this URL is automatically loaded by the Web area. +* Any browsing done within the Web area will automatically update the contents of the variable. -Schématiquement, cette variable fonctionne comme la zone d’adresse d’un navigateur Web. Vous pouvez la représenter par une zone de texte située au-dessus de la zone Web. +Schematically, this variable functions like the address area of a Web browser. You can represent it via a text area above the Web area. -### Variable URL et commande WA OUVRIR URL +### URL Variable and WA OPEN URL command -La variable URL produit les mêmes effets que la commande [WA OUVRIR URL](https://doc.4d.com/4Dv18/4D/18/WA-OPEN-URL.301-4504841.en.html). Les différences suivantes sont toutefois à noter : -- Pour les accès aux documents, la variable accepte uniquement des URLs conformes aux RFC ("file://c:/Mon%20Doc") et non les chemins d’accès système ("c:\MonDoc"). La commande [WA OPEN URL](https://doc.4d.com/4Dv18/4D/18/WA-OPEN-URL.301-4504841.en.html) accepte les deux notations. -- Si la variable URL contient une chaîne vide, la zone Web ne tente pas de charger l’URL. La commande [WA OPEN URL](https://doc.4d.com/4Dv18/4D/18/WA-OPEN-URL.301-4504841.en.html) génère une erreur dans ce cas. -- Si la variable URL ne contient pas de protocole (http, mailto, file, etc.), la zone Web ajoute "http://", ce qui n’est pas le cas pour la commande [WA OPEN URL](https://doc.4d.com/4Dv18/4D/18/WA-OPEN-URL.301-4504841.en.html). -- Lorsque la zone Web n’est pas affichée dans le formulaire (lorsqu’elle se trouve sur une autre page du formulaire), l’exécution de la commande[WA OPEN URL](https://doc.4d.com/4Dv18/4D/18/WA-OPEN-URL.301-4504841.en.html) est sans effet tandis que la valorisation de la variable URL permet de mettre à jour l’URL courant. +The URL variable produces the same effects as the [WA OPEN URL](https://doc.4d.com/4Dv18/4D/18/WA-OPEN-URL.301-4504841.en.html) command. The following differences should nevertheless be noted: +- For access to documents, this variable only accepts URLs that are RFC-compliant ("file://c:/My%20Doc") and not system pathnames ("c:\MyDoc"). The [WA OPEN URL](https://doc.4d.com/4Dv18/4D/18/WA-OPEN-URL.301-4504841.en.html) command accepts both notations. +- If the URL variable contains an empty string, the Web area does not attempt to load the URL. The [WA OPEN URL](https://doc.4d.com/4Dv18/4D/18/WA-OPEN-URL.301-4504841.en.html) command generates an error in this case. +- If the URL variable does not contain a protocol (http, mailto, file, etc.), the Web area adds "http://", which is not the case for the [WA OPEN URL](https://doc.4d.com/4Dv18/4D/18/WA-OPEN-URL.301-4504841.en.html) command. +- When the Web area is not displayed in the form (when it is located on another page of the form), executing the [WA OPEN URL](https://doc.4d.com/4Dv18/4D/18/WA-OPEN-URL.301-4504841.en.html) command has no effect, whereas assigning a value to the URL variable can be used to update the current URL. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| --------- | --------------- | ----------------- | -| urlSource | string | Une URL. | +| Name | Data Type | Possible Values | +| --------- | --------- | --------------- | +| urlSource | string | A URL. | -#### Objets pris en charge +#### Objects Supported -[Zone Web](webArea_overview.md) +[Web Area](webArea_overview.md) @@ -77,27 +77,27 @@ La variable URL produit les mêmes effets que la commande [WA OUVRIR URL](https: --- -## Utiliser le moteur de rendu Web intégré +## Use embedded Web rendering engine -Cette option vous permet de choisir entre deux moteurs de rendus pour la zone Web, en fonction des spécificités de votre application : +This option allows choosing between two rendering engines for the Web area, depending on the specifics of your application: -* **unchecked** - `JSON value: system` (default): In this case, 4D uses the "best" engine corresponding to the system. Sous Windows, 4D utilise automatiquement la plus version la plus récente du navigateur présent sur la machine (IE11, MS Edge, etc.). Sur macOS, 4D utilise la version courante du WebKit (Safari). Ce fonctionnement vous permet de bénéficier automatiquement des dernières avancées en matière de rendu Web, via HTML5 ou JavaScript. En revanche, vous pouvez rencontrer des différences de rendu entre les implémentations d’Internet Explorer/Edge et de WebKit. -* **checked** - `JSON value: embedded`: In this case, 4D uses Blink engine from Google. L’utilisation d'un moteur Web intégré vous permet d’avoir l’assurance que le rendu et le fonctionnement des zones Web de votre application seront quasiment identiques, quelle que soit la plate-forme d’exécution de 4D (de légères variations de pixels ou des différences liées à l’implémentation réseau pourront toutefois être constatées). En contrepartie, vous ne bénéficiez plus des mises à jour automatiques du moteur Web effectuées par le système d’exploitation. Des nouvelles versions du moteur seront toutefois proposées via 4D. +* **unchecked** - `JSON value: system` (default): In this case, 4D uses the "best" engine corresponding to the system. On Windows, 4D automatically uses the most recent version of the browser found on the machine (IE11, MS Edge, etc.). On macOS, 4D uses the current version of WebKit (Safari). This means that you automatically benefit from the latest advances in Web rendering, through HTML5 or JavaScript. However, you may notice some rendering differences between Internet Explorer/Edge implementations and Web Kit ones. +* **checked** - `JSON value: embedded`: In this case, 4D uses Blink engine from Google. Using the embedded Web engine means that Web area rendering and their functioning in your application are identical regardless of the platform used to run 4D (slight variations of pixels or differences related to network implementation may nevertheless be observed). When this option is chosen, you no longer benefit from automatic updates of the Web engine performed by the operating system; however, new versions of the engines are provided through 4D. - A noter que le moteur Blink est soumis aux restrictions suivantes : - * [WA SET PAGE CONTENT](https://doc.4d.com/4Dv17R6/4D/17-R6/WA-SET-PAGE-CONTENT.301-4310783.en.html) : l'utilisation de cette commande nécessite le chargement d'au moins une page dans la zone (via un appel à la commande [WA OPEN URL](https://doc.4d.com/4Dv17R6/4D/17-R6/WA-OPEN-URL.301-4310772.en.html) ou via une affectation à la variable URL associée à la zone). - * L'exécution d'applets Java, JavaScript et de plugins est toujours autorisée et ne peut pas être désactivée dans les zones Web de Blink. Les sélecteurs suivants des commandes [WA SET PREFERENCE](https://doc.4d.com/4Dv17R6/4D/17-R6/WA-SET-PREFERENCE.301-4310780.en.html) et [WA GET PREFERENCE](https://doc.4d.com/4Dv17R6/4D/17-R6/WA-GET-PREFERENCE.301-4310763.en.html) sont ignorés : + Note that the Blink engine has the following limitations: + * [WA SET PAGE CONTENT](https://doc.4d.com/4Dv17R6/4D/17-R6/WA-SET-PAGE-CONTENT.301-4310783.en.html): using this command requires that at least one page is already loaded in the area (through a call to [WA OPEN URL](https://doc.4d.com/4Dv17R6/4D/17-R6/WA-OPEN-URL.301-4310772.en.html) or an assignment to the URL variable associated to the area). + * Execution of Java applets, JavaScripts and plug-ins is always enabled and cannot be disabled in Web areas in Blink. The following selectors of the [WA SET PREFERENCE](https://doc.4d.com/4Dv17R6/4D/17-R6/WA-SET-PREFERENCE.301-4310780.en.html) and [WA GET PREFERENCE](https://doc.4d.com/4Dv17R6/4D/17-R6/WA-GET-PREFERENCE.301-4310763.en.html) commands are ignored: * `WA enable Java applets` * `WA enable JavaScript` * `WA enable plugins` - * Lorsque les déposer d'URL sont rendus possibles par le sélecteur `WA enable URL drop` de la commande [WA SET PREFERENCE](https://doc.4d.com/4Dv17R6/4D/17-R6/WA-SET-PREFERENCE.301-4310780.en.html), le premier déposer doit être précédé d'au moins un appel à la commande [WA OPEN URL](https://doc.4d.com/4Dv17R6/4D/17-R6/WA-OPEN-URL.301-4310772.en.html) ou d'une affectation vers la variable d'URL associée à la zone. + * When URL drops are enabled by the `WA enable URL drop` selector of the [WA SET PREFERENCE](https://doc.4d.com/4Dv17R6/4D/17-R6/WA-SET-PREFERENCE.301-4310780.en.html) command, the first drop must be preceded by at least one call to [WA OPEN URL](https://doc.4d.com/4Dv17R6/4D/17-R6/WA-OPEN-URL.301-4310772.en.html) or one assignment to the URL variable associated to the area. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| --------- | --------------- | -------------------- | -| webEngine | string | "embedded", "system" | +| Name | Data Type | Possible Values | +| --------- | --------- | -------------------- | +| webEngine | string | "embedded", "system" | -#### Objets pris en charge +#### Objects Supported -[Zone Web](webArea_overview.md) \ No newline at end of file +[Web Area](webArea_overview.md) \ No newline at end of file From e72dc2cc8c47741b21f24b2e9af90dda726573ff Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:16:57 +0100 Subject: [PATCH 043/260] New translations radio_overview.md (French) --- .../fr/FormObjects/radio_overview.md | 110 +++++++++--------- 1 file changed, 55 insertions(+), 55 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/radio_overview.md b/website/translated_docs/fr/FormObjects/radio_overview.md index 5741d76a0f24a4..e8515725aa1e66 100644 --- a/website/translated_docs/fr/FormObjects/radio_overview.md +++ b/website/translated_docs/fr/FormObjects/radio_overview.md @@ -1,116 +1,116 @@ --- id: radiobuttonOverview -title: Bouton radio +title: Radio Button --- ## Aperçu -Les boutons radio sont des objets qui permettent à l’utilisateur de sélectionner une valeur parmi un groupe de valeurs. +Radio buttons are objects that allow the user to select one of a group of buttons. -Un bouton radio apparaît sous la forme d’un texte suivi d’un cercle. Cependant, les boutons radio peuvent avoir [différentes apparences](#button-styles). +Usually, a radio button shows a small bullseye with text. However, radio buttons can have [various appearances](#button-styles). ![](assets/en/FormObjects/radio1.png) -Un bouton radio est sélectionné : -- lorsque l'utilisateur clique dessus -- lorsqu'il a le focus et que l'utilisateur appuie sur la touche **Espace**. +A radio button is selected: +- when the user clicks on it +- when it has the focus and the user presses the **Space bar** key. -## Configuration des boutons radio +## Configuring radio buttons -Les boutons radio sont utilisés sous forme d’ensembles coordonnés : un seul bouton peut être sélectionné à la fois parmi l’ensemble. Afin de fonctionner de manière coordonnée, un ensemble de boutons radio doit partager la même propriété de [groupe radio](properties_Object.md#radio-group). +Radio buttons are used in coordinated sets: only one button at a time can be selected in the set. In order to operate in a coordinated manner, a set of radio buttons must share the same [Radio Group](properties_Object.md#radio-group) property. -Les boutons radio sont contrôlés par des méthodes. Comme pour tous les boutons, la variable associée au bouton radio est initialisée à 0 (zéro) lorsque le formulaire est ouvert pour la première fois. Une méthode associée à un bouton radio est exécutée lorsqu’il est sélectionné. L’exemple suivant représente des boutons radio utilisés dans une base de données d’enregistrements audio et se rapporte à la vitesse d’enregistrement : +Radio buttons are controlled with methods. Like all buttons, a radio button is set to 0 when the form is first opened. A method associated with a radio button executes when the button is selected. The following is an example of a group of radio buttons used in a video collection database to enter the speed of the recording (SP, LP, or EP): ![](assets/en/FormObjects/radio2.png) -Sélectionner un bouton radio d’un groupe met ce bouton à 1 et les autres boutons du groupe à 0. Un seul bouton radio du groupe peut être sélectionné à la fois. -> Vous pouvez associer [des expressions de type booléen](properties_Object.md#variable-or-expression) à des boutons radio. Dans ce cas, lorsqu'un bouton radio d'un groupe est sélectionné, sa variable est True et les variables des autres boutons radio du groupe sont False. +Selecting one radio button in a group sets that button to 1 and all of the others in the group to 0. Only one radio button can be selected at a time. +> You can associate [Boolean type expressions](properties_Object.md#variable-or-expression) with radio buttons. In this case, when a radio button in a group is selected, its variable is True and the variables for the group's other radio buttons are False. -La valeur contenue dans un objet bouton radio n’est pas sauvegardée automatiquement (hormis s'il s'agit de la représentation d'un champ booléen) ; les valeurs des boutons radio doivent être stockées dans leurs variables et gérées à l’aide de méthodes. +The value contained in a radio button object is not saved automatically (except if it is the representation of a Boolean field); radio button values must be stored in their variables and managed with methods. -## Styles de bouton +## Button Styles -[Les styles de bouton](properties_TextAndPicture.md#button-style) radio contrôlent l'apparence générale du bouton radio ainsi que ses propriétés disponibles. Il est possible d'appliquer différents styles prédéfinis aux boutons radio. Cependant, le même style de bouton doit être appliqué à tous les boutons radio d'un groupe afin qu'ils fonctionnent comme prévu. +Radio [button styles](properties_TextAndPicture.md#button-style) control radio button's general appearance as well as its available properties. It is possible to apply different predefined styles to radio buttons. However, the same button style must be applied to all radio buttons in a group so that they work as expected. -4D propose des boutons radio dans les styles prédéfinis suivants : +4D provides radio buttons in the following predefined styles: -### Classique +### Regular -Le style de bouton radio Classique est un bouton système standard (c'est-à-dire une bulle avec un libellé) qui exécute le code lorsqu'un utilisateur clique dessus. +The Regular radio button style is a standard system button (*i.e.*, a small bullseye with text) which executes code when a user clicks on it. ![](assets/en/FormObjects/radio_regular.png) -En plus de lancer l'exécution du code, le style de bouton radio Classique change la couleur de la bulle lors du survol. +In addition to initiating code execution, the Regular radio button style changes bullsey color when being hovered. -### A plat +### Flat -Le style de bouton radio A plat est un bouton système standard (c'est-à-dire une bulle avec un libellé) qui exécute le code lorsqu'un utilisateur clique dessus. +The Flat radio button style is a standard system button (*i.e.*, a small bullseye with text) which executes code when a user clicks on it. ![](assets/en/FormObjects/radio_flat.png) -Par défaut, le style A plat a une apparence minimaliste. Le style graphique du bouton A plat est particulièrement utile pour les formulaires à imprimer. +By default, the Flat style has a minimalist appearance. The Flat button style's graphic nature is particularly useful for forms that will be printed. -### Barre d’outils +### Toolbar -Le style du bouton radio Barre d'outils est initialement destiné à être intégré dans une barre d'outils. +The Toolbar radio button style is primarily intended for integration in a toolbar. -Par défaut, le style bouton Barre d'outils a un fond transparent avec un libellé au centre. En fonction du système d'exploitation, le design du bouton peut changer lorsque la souris le survole : +By default, the Toolbar style has a transparent background with a label in the center. The appearance of the button can be different when the cursor hovers over it depending on the OS: - - *Sous Windows* - le contour du bouton apparaît. + - *Windows* - the button is highlighted. ![](assets/en/FormObjects/radio_toolbar.png) - - *Sous macOS* - le contour du bouton n’apparaît jamais. + - *macOS* - the highlight of the button never appears. ### Bevel -Le style de bouton radio Bevel est similaire au comportement du style [barre d'outils](#toolbar), à la seule différence qu'il possède un arrière-plan gris clair et un contour gris. En fonction du système d'exploitation, le design du bouton peut changer lorsque la souris le survole : +The Bevel radio button style is similar to the [Toolbar](#toolbar) style's behavior, except that it has a light gray background and a gray outline. The appearance of the button can be different when the cursor hovers over it depending on the OS: - - *Sous Windows* - le contour du bouton apparaît. + - *Windows* - the button is highlighted. ![](assets/en/FormObjects/radio_bevel.png) - - *Sous macOS* - le contour du bouton n’apparaît jamais. + - *macOS* - the highlight of the button never appears. -### Bevel arrondi +### Rounded Bevel -Le style du bouton Bevel arrondi est presque identique au style [Bevel](#bevel), à l'exception des coins du bouton qui peuvent, selon le système d'exploitation, être arrondis. +The Rounded Bevel button style is nearly identical to the [Bevel](#bevel) style except, depending on the OS, the corners of the button may be rounded. - - *Sous Windows* - ce bouton est identique au style [Bevel](#bevel). + - *Windows* - the button is identical to the [Bevel](#bevel) style. - - *Sous macOS* - les coins du bouton sont arrondis. ![](assets/en/FormObjects/roundedBevel.png) + - *macOS* - the corners of the button are rounded. ![](assets/en/FormObjects/roundedBevel.png) ### OS X Gradient -Le style du bouton OS X Gradient est presque identique au style [Bevel](#bevel), à l'exception de son apparence qui peut, en fonction du système d'exploitation, avoir deux tons. +The OS X Gradient button style is nearly identical to the [Bevel](#bevel) style except, depending on the OS, it may have a two-toned appearance. - - *Sous Windows* - ce bouton est identique au style [Bevel](#bevel). + - *Windows* - the button is identical to the [Bevel](#bevel) style. - - *Sous macOs* - le bouton s'affiche comme un bouton à deux tons. + - *macOS* - the button is displayed as a two-tone system button. -### OS X Texture +### OS X Textured -Le style du bouton radio OS X Textured est presque identique au style [Barre d'outils](#toolbar), à l'exception de son apparence qui peut, en fonction du système d'exploitation, être différente et ne pas afficher le survol. +The OS X Textured radio button style is nearly identical to the [Toolbar](#toolbar) style except, depending on the OS, it may have a different appearance and does not display hover. -Par défaut, le style OS X Textured apparaît comme : +By default, the OS X Textured style appears as: - - *Sous Windows* - un bouton en forme de barre d'outils avec une étiquette au centre et l'arrière-plan est toujours affiché. + - *Windows* - a toolbar-like button with a label in the center and the background is always displayed. - - *Sous macOS* - un bouton système standard affichant un changement de couleur du gris clair au gris foncé. Sa hauteur est prédéfinie : il n'est pas possible de l'agrandir ou de la réduire. + - *macOS* - a standard system button displaying a color change from light to dark gray. Its height is predefined: it is not possible to enlarge or reduce it. ![](assets/en/FormObjects/OSXTextured.png) @@ -120,43 +120,43 @@ Par défaut, le style OS X Textured apparaît comme : The Office XP button style combines the appearance of the [Regular](#regular) style (standard system button) with the [Toolbar](#toolbar) style's behavior. -Les couleurs (surbrillance et arrière-plan) d'un bouton au style Office XP sont basées sur les couleurs du système. En fonction du système d'exploitation, le design du bouton peut changer lorsque la souris le survole : +The colors (highlight and background) of a button with the Office XP style are based on the system colors. The appearance of the button can be different when the cursor hovers over it depending on the OS: - - *Sous Windows* - son arrière-plan n'apparaît que lorsque la souris le survole. + - *Windows* - its background only appears when the mouse rolls over it. ![](assets/en/FormObjects/radio_xp.png) - - *Sous macOS* - son arrière-plan est toujours affiché. + - *macOS* - its background is always displayed. -### Contracter/Déployer +### Collapse / Expand -Ce style de bouton peut être utilisé pour ajouter une icône standard contracter/déployer. Ces boutons sont utilisés nativement dans les listes hiérarchiques. Sous Windows, le bouton ressemble à un [+] ou un [-]; sous macOS, cela ressemble à un triangle pointant vers la droite ou vers le bas. +This button style can be used to add a standard collapse/expand icon. These buttons are used natively in hierarchical lists. In Windows, the button looks like a [+] or a [-]; in macOS, it looks like a triangle pointing right or down. ![](assets/en/FormObjects/checkbox_collapse.png) -### Bouton disclosure +### Disclosure Button -Le style de bouton radio disclosure affiche le bouton radio comme un bouton disclosure standard, généralement utilisé pour afficher/masquer des informations supplémentaires. Le symbole du bouton pointe vers le bas avec la valeur 0 et vers le haut avec la valeur 1. +The disclosure radio button style displays the radio button as a standard disclosure button, usually used to show/hide additional information. The button symbol points downwards with value 0 and upwards with value 1. ![](assets/en/FormObjects/checkbox_disclosure.png) -### Personnalisé +### Custom -Le style de bouton radio Personnalisé accepte une image d'arrière-plan personnalisée et permet de gérer des paramètres supplémentaires tels que le [décalage de l'icône](properties_TextAndPicture.md#icon-offset) et les [marges](properties_TextAndPicture.md#horizontalMargin). +The Custom radio button style accepts a personalized background picture and allows managing additional parameters such as [icon offset](properties_TextAndPicture.md#icon-offset) and [margins](properties_TextAndPicture.md#horizontalMargin). -## Propriétés prises en charge +## Supported properties -Tous les boutons radio partagent une même série de propriétés de base : +All radio buttons share the same set of basic properties: [Bold](properties_Text.md#bold) - [Bottom](properties_CoordinatesAndSizing.md#bottom) - [Button Style](properties_TextAndPicture.md#button-style) - [Class](properties_Object.md#css-class) - [Expression Type](properties_Object.md#expression-type) - [Focusable](properties_Entry.md#focusable) - [Font](properties_Text.md#font) - [Font Color](properties_Text.md#font-color) - [Height](properties_CoordinatesAndSizing.md#height) - [Help Tip](properties_Help.md#help-tip) - [Horizontal Sizing](properties_ResizingOptions.md#horizontal-sizing) - [Italic](properties_Text.md#italic) - [Left](properties_CoordinatesAndSizing.md#left) - [Method](properties_Action.md#method) - [Object Name](properties_Object.md#object-name) - [Radio Group](properties_Object.md#radio-group) - [Right](properties_CoordinatesAndSizing.md#right) - [Save value](properties_Object.md#save-value) - [Shortcut](properties_Entry.md#shortcut) - [Title](properties_Object.md#title) - [Top](properties_CoordinatesAndSizing.md#top) - [Type](properties_Object.md#type) - [Underline](properties_Text.md#underline) - [Variable or Expression](properties_Object.md#variable-or-expression) - [Vertical Sizing](properties_ResizingOptions.md#vertical-sizing) - [Visibility](properties_Display.md#visibility) - [Width](properties_CoordinatesAndSizing.md#width) -Des propriétés spécifiques supplémentaires sont disponibles en fonction du [style de bouton](#button-styles) : +Additional specific properties are available depending on the [button style](#button-styles): -- [Chemin d'accès arrière-plan](properties_TextAndPicture.md#backgroundPathname) - [Marge horizontale](properties_TextAndPicture.md#horizontalMargin) - [Décalage icône](properties_TextAndPicture.md#icon-offset) - [Marge verticale](properties_TextAndPicture.md#verticalMargin) (Personnalisé) -- [Nombre d'états](properties_TextAndPicture.md#number-of-states) - [Chemin d'accès image](properties_TextAndPicture.md#picture-pathname) - [Position Titre/Image](properties_TextAndPicture.md#title-picture-position) (Bouton barre outils, Bevel, Bevel arrondi, OS X Gradient, OS X Textured, Office XP, Personnalisé) \ No newline at end of file +- [Background pathname](properties_TextAndPicture.md#backgroundPathname) - [Horizontal Margin](properties_TextAndPicture.md#horizontalMargin) - [Icon Offset](properties_TextAndPicture.md#icon-offset) - [Vertical Margin](properties_TextAndPicture.md#verticalMargin) (Custom) +- [Number of States](properties_TextAndPicture.md#number-of-states) - [Picture pathname](properties_TextAndPicture.md#picture-pathname) - [Title/Picture Position](properties_TextAndPicture.md#title-picture-position) (Toolbar button, Bevel, Rounded Bevel, OS X Gradient, OS X Textured, Office XP, Custom) \ No newline at end of file From 90acec5d404c8dc1074dfa047cc2df9b485a3a50 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:16:59 +0100 Subject: [PATCH 044/260] New translations ruler.md (French) --- .../translated_docs/fr/FormObjects/ruler.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/ruler.md b/website/translated_docs/fr/FormObjects/ruler.md index bb18750db04da5..4090f0b440ded0 100644 --- a/website/translated_docs/fr/FormObjects/ruler.md +++ b/website/translated_docs/fr/FormObjects/ruler.md @@ -1,21 +1,21 @@ --- id: ruler -title: Règle +title: Ruler --- ## Aperçu -La règle est un objet d'interface standard permettant de définir ou de lire une valeur à l'aide d'un curseur placé sur une règle généralement graduée. +The ruler is a standard interface object used to set or get values using a cursor moved along its graduations. ![](assets/en/FormObjects/indicator_ruler.png) -[La variable ou expression associée](properties_Object.md#expression-type) à l’objet peut être affectée à une zone saisissable (champ ou variable) afin de stocker ou modifier la valeur courante de l’objet. +You can assign its [associated variable or expression](properties_Object.md#expression-type) to an enterable area (field or variable) to store or modify the current value of the object. -Pour plus d'informations, veuillez vous reporter à la section [Utiliser des indicateurs](progressIndicator.md#using-indicatire) de la page "Indicateurs de progression". +For more information, please refer to [Using indicators](progressIndicator.md#using-indicatire) in the "Progress Indicator" page. -### Propriétés prises en charge -[Gras](properties_Text.md#bold) - [Style de la bordure](properties_BackgroundAndBorder.md#border-line-style) -[Bas](properties_CoordinatesAndSizing.md#bottom) - [Class](properties_Object.md#css-class) - [Afficher graduation](properties_Scale.md#display-graduation) - [Saisissable](properties_Entry.md#enterable) - [Exécuter méthode objet](properties_Action.md#execute-object-method) - [Type d'expression](properties_Object.md#expression-type) - [Hauteur](properties_CoordinatesAndSizing.md#height) - [Unité de graduation](properties_Scale.md#graduation-step) -[Message d'aide](properties_Help.md#help-tip) - [Dim. horizontal](properties_ResizingOptions.md#horizontal-sizing) - [Emplacement du libellé](properties_Scale.md#label-location) - [Gauche](properties_CoordinatesAndSizing.md#left) - [Maximum](properties_Scale.md#maximum) - [Minimum](properties_Scale.md#minimum) - [Format numérique](properties_Display.md#number-format) - [Nom](properties_Object.md#object-name) - [Droite](properties_CoordinatesAndSizing.md#right) - [Pas](properties_Scale.md#step) - [Haut](properties_CoordinatesAndSizing.md#top) - [Type](properties_Object.md#type) - [Variable ou expression](properties_Object.md#variable-or-expression) - [Dim. vertical](properties_ResizingOptions.md#vertical-sizing) - [Visibilité](properties_Display.md#visibility) - [Largeur](properties_CoordinatesAndSizing.md#width) +### Supported Properties +[Bold](properties_Text.md#bold) - [Border Line Style](properties_BackgroundAndBorder.md#border-line-style) -[Bottom](properties_CoordinatesAndSizing.md#bottom) - [Class](properties_Object.md#css-class) - [Display graduation](properties_Scale.md#display-graduation) - [Enterable](properties_Entry.md#enterable) - [Execute object method](properties_Action.md#execute-object-method) - [Expression Type](properties_Object.md#expression-type) - [Height](properties_CoordinatesAndSizing.md#height) - [Graduation step](properties_Scale.md#graduation-step) -[Help Tip](properties_Help.md#help-tip) - [Horizontal Sizing](properties_ResizingOptions.md#horizontal-sizing) - [Label Location](properties_Scale.md#label-location) - [Left](properties_CoordinatesAndSizing.md#left) - [Maximum](properties_Scale.md#maximum) - [Minimum](properties_Scale.md#minimum) - [Number Format](properties_Display.md#number-format) - [Object Name](properties_Object.md#object-name) - [Right](properties_CoordinatesAndSizing.md#right) - [Step](properties_Scale.md#step) - [Top](properties_CoordinatesAndSizing.md#top) - [Type](properties_Object.md#type) - [Variable or Expression](properties_Object.md#variable-or-expression) - [Vertical Sizing](properties_ResizingOptions.md#vertical-sizing) - [Visibility](properties_Display.md#visibility) - [Width](properties_CoordinatesAndSizing.md#width) -## Voir également -- [indicateurs de progression](progressIndicator.md) -- [stepper](stepper.md) \ No newline at end of file +## See also +- [progress indicators](progressIndicator.md) +- [steppers](stepper.md) \ No newline at end of file From c3043188dc94b653ebfc8ef970167fc65e969a46 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:17:01 +0100 Subject: [PATCH 045/260] New translations shapes_overview.md (French) --- .../fr/FormObjects/shapes_overview.md | 84 +++++++++---------- 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/shapes_overview.md b/website/translated_docs/fr/FormObjects/shapes_overview.md index bb8a4d3f6859c8..4300a81e4c25e8 100644 --- a/website/translated_docs/fr/FormObjects/shapes_overview.md +++ b/website/translated_docs/fr/FormObjects/shapes_overview.md @@ -1,57 +1,57 @@ --- id: shapesOverview -title: Formes +title: Shapes --- -Les formes sont des [objets statiques](formObjects_overview.md#active-and-static-objects) qui peuvent être ajoutées à des formes 4D. +Shapes are [static objects](formObjects_overview.md#active-and-static-objects) that can be added to 4D forms. -Les formes 4D prennent en charge les formes basiques suivantes : +4D forms support the following basic shapes: - rectangles -- lignes -- ovales +- lines +- ovals ## Rectangle -Un rectangle statique est un objet décoratif contenu dans les formulaires. Les rectangles sont limités à des formes carrées. +A static rectangle is a decorative object for forms. Rectangles are constrained to squared shapes. -Les rectangles sont créés à l'aide de plusieurs propriétés (couleur, épaisseur de ligne, motif, etc.). L'[arrondi](properties_CoordinatesAndSizing.md#corner-radius), en particulier, des coins du rectangle peuvent être définis. +The design of rectangles is controlled through many properties (color, line thickness, pattern, etc.). Specifically, the [roundness](properties_CoordinatesAndSizing.md#corner-radius) of its corners can be defined. ![](assets/en/FormObjects/shapes_rectangle2.png) -#### Exemple JSON : +#### JSON Example: ```4d "myRectangle": { - "type": "rectangle", //définit le type d'objet - "left": 60, //position sur la gauche du formulaire - "top": 160, //position en haut du formulaire - "width": 100, //largeur de l'objet - "height": 20, //hauteur de l'objet - "borderRadius": 20 //définit le rayon d'arrondi + "type": "rectangle", //define the type of object + "left": 60, //left position on the form + "top": 160, //top position on the form + "width": 100, //width of the object + "height": 20, //height of the object + "borderRadius": 20 //define the roundness of the corners } ``` -#### Propriétés prises en charge -[Bas](properties_CoordinatesAndSizing.md#bottom) - [Css Class](properties_Object.md#css-class) - [Rayon d'arrondi](properties_CoordinatesAndSizing.md#corner-radius) - [Type de pointillé](properties_BackgroundAndBorder.md#dotted-line-type) - [Couleur de fond](properties_BackgroundAndBorder.md#background-color-fill-color) - [Hauteur](properties_CoordinatesAndSizing.md#height) - [Dimensionnement horizontal](properties_ResizingOptions.md#horizontal-sizing) - [Gauche](properties_CoordinatesAndSizing.md#left) - [Couleur de ligne](properties_BackgroundAndBorder.md#line-color) - [Épaisseur du trait](properties_BackgroundAndBorder.md#line-width) - [Nom](properties_Object.md#object-name) - [Droite](properties_CoordinatesAndSizing.md#right) - [Haut](properties_CoordinatesAndSizing.md#top) - [Type](properties_Object.md#type) - [Dimensionnement vertical](properties_ResizingOptions.md#vertical-sizing) - [Visibilité](properties_Display.md#visibility) - [Largeur](properties_CoordinatesAndSizing.md#width) +#### Supported Properties +[Bottom](properties_CoordinatesAndSizing.md#bottom) - [Class](properties_Object.md#css-class) - [Corner radius](properties_CoordinatesAndSizing.md#corner-radius) - [Dotted Line Type](properties_BackgroundAndBorder.md#dotted-line-type) - [Fill Color](properties_BackgroundAndBorder.md#background-color-fill-color) - [Height](properties_CoordinatesAndSizing.md#height) - [Horizontal Sizing](properties_ResizingOptions.md#horizontal-sizing) - [Left](properties_CoordinatesAndSizing.md#left) - [Line Color](properties_BackgroundAndBorder.md#line-color) - [Line Width](properties_BackgroundAndBorder.md#line-width) - [Object Name](properties_Object.md#object-name) - [Right](properties_CoordinatesAndSizing.md#right) - [Top](properties_CoordinatesAndSizing.md#top) - [Type](properties_Object.md#type) - [Vertical Sizing](properties_ResizingOptions.md#vertical-sizing) - [Visibility](properties_Display.md#visibility) - [Width](properties_CoordinatesAndSizing.md#width) -## Ligne +## Line -Une ligne statique est un objet décoratif pour les formulaires, entre deux tracés. Les lignes peuvent être horizontales, verticales ou de toute forme d'angle. +A static line is a decorative object for forms, drawn between two plots. Lines can be horizontal, vertical, or of any angle shapes. -Les lignes sont créées à l'aide de plusieurs propriétés (couleur, épaisseur de ligne, etc.). +The design of lines is controlled through many properties (color, line thickness, etc.). -### propriété startPoint -La propriété JSON `startPoint` définit à partir de quelle coordonnée la ligne peut être dessinée (voir l'exemple). +### startPoint property +The `startPoint` JSON property defines from which coordinate to draw the line (see example). -> la propriété `startPoint` n'est pas exposée dans la liste des propriétés, où la direction du dessin de ligne est visible. +> the `startPoint` property is not exposed in the Property List, where the line drawing direction is visible. -#### Exemple JSON : +#### JSON Examples: ``` "myLine": { @@ -60,11 +60,11 @@ La propriété JSON `startPoint` définit à partir de quelle coordonnée la lig "top": 40, "width": 100, "height": 80, - "startPoint": "topLeft", //première orientation - "strokeDashArray": "6 2" //pointillé + "startPoint": "topLeft", //first direction + "strokeDashArray": "6 2" //dashed } ``` -Résultat : ![](assets/en/FormObjects/shape_line1.png) +Result: ![](assets/en/FormObjects/shape_line1.png) ``` @@ -74,36 +74,36 @@ Résultat : ![](assets/en/FormObjects/shape_line1.png) "top": 40, "width": 100, "height": 80, - "startPoint": "bottomLeft", //deuxième orientation - "strokeDashArray": "6 2" //pointillé + "startPoint": "bottomLeft", //2nd direction + "strokeDashArray": "6 2" //dashed } ``` -Résultat : ![](assets/en/FormObjects/shape_line2.png) +Result: ![](assets/en/FormObjects/shape_line2.png) -#### Propriétés prises en charge -[Bas](properties_CoordinatesAndSizing.md#bottom) - [Css Class](properties_Object.md#css-class) - [Type de pointillé](properties_BackgroundAndBorder.md#dotted-line-type) - [Hauteur](properties_CoordinatesAndSizing.md#height) - [Dimensionnement horizontal](properties_ResizingOptions.md#horizontal-sizing) - [Gauche](properties_CoordinatesAndSizing.md#left) - [Couleur du trait](properties_BackgroundAndBorder.md#line-color) - [Épaisseur du trait](properties_BackgroundAndBorder.md#line-width) - [Nom](properties_Object.md#object-name) - [Droite](properties_CoordinatesAndSizing.md#right) - [startPoint](#startpoint-property) - [Haut](properties_CoordinatesAndSizing.md#top) - [Type](properties_Object.md#type) - [Dimensionnement vertical](properties_ResizingOptions.md#vertical-sizing) - [Visibilité](properties_Display.md#visibility) - [Largeur](properties_CoordinatesAndSizing.md#width) +#### Supported Properties +[Bottom](properties_CoordinatesAndSizing.md#bottom) - [Class](properties_Object.md#css-class) - [Dotted Line Type](properties_BackgroundAndBorder.md#dotted-line-type) - [Height](properties_CoordinatesAndSizing.md#height) - [Horizontal Sizing](properties_ResizingOptions.md#horizontal-sizing) - [Left](properties_CoordinatesAndSizing.md#left) - [Line Color](properties_BackgroundAndBorder.md#line-color) - [Line Width](properties_BackgroundAndBorder.md#line-width) - [Object Name](properties_Object.md#object-name) - [Right](properties_CoordinatesAndSizing.md#right) - [startPoint](#startpoint-property) - [Top](properties_CoordinatesAndSizing.md#top) - [Type](properties_Object.md#type) - [Vertical Sizing](properties_ResizingOptions.md#vertical-sizing) - [Visibility](properties_Display.md#visibility) - [Width](properties_CoordinatesAndSizing.md#width) -## Ovale +## Oval -Un ovale statique est un objet décoratif contenu dans les formulaires. Les objets de forme ovale peuvent être utilisés pour dessiner des formes circulaires (lorsque les propriétés [largeur](properties_CoordinatesAndSizing.md#width) et [hauteur](properties_CoordinatesAndSizing.md#height) sont identiques). +A static oval is a decorative object for forms. Oval objects can be used to draw circular shapes (when [width](properties_CoordinatesAndSizing.md#width) and [height](properties_CoordinatesAndSizing.md#height) properties are equal). ![](assets/en/FormObjects/shape_oval.png) -#### Exemple JSON : +#### JSON Example: ```4d "myOval": { - "type": "oval", //définit le type d'objet - "left": 60, //position sur la gauche du formulaire - "top": 160, //position en haut du formulaire - "width": 100, //largeur de l'objet - "height": 20, //hauteur de l'objet - "borderRadius": 20 //définit la couleur de fond + "type": "oval", //define the type of object + "left": 60, //left position on the form + "top": 160, //top position on the form + "width": 100, //width of the object + "height": 20, //height of the object + "fill": "blue" //define the background color } ``` -#### Propriétés prises en charge -[Bas](properties_CoordinatesAndSizing.md#bottom) - [Css Class](properties_Object.md#css-class) - [Type de pointillé](properties_BackgroundAndBorder.md#dotted-line-type) - [Couleur de fond](properties_BackgroundAndBorder.md#background-color-fill-color) - [Hauteur](properties_CoordinatesAndSizing.md#height) - [Dimensionnement horizontal](properties_ResizingOptions.md#horizontal-sizing) - [Gauche](properties_CoordinatesAndSizing.md#left) - [Couleur du trait](properties_BackgroundAndBorder.md#line-color) - [Épaisseur du trait](properties_BackgroundAndBorder.md#line-width) - [Nom](properties_Object.md#object-name) - [Droite](properties_CoordinatesAndSizing.md#right) - [Haut](properties_CoordinatesAndSizing.md#top) - [Type](properties_Object.md#type) - [Dimensionnement vertical](properties_ResizingOptions.md#vertical-sizing) - [Visibilité](properties_Display.md#visibility) - [Largeur](properties_CoordinatesAndSizing.md#width) \ No newline at end of file +#### Supported Properties +[Bottom](properties_CoordinatesAndSizing.md#bottom) - [Class](properties_Object.md#css-class) - [Dotted Line Type](properties_BackgroundAndBorder.md#dotted-line-type) - [Fill Color](properties_BackgroundAndBorder.md#background-color-fill-color) - [Height](properties_CoordinatesAndSizing.md#height) - [Horizontal Sizing](properties_ResizingOptions.md#horizontal-sizing) - [Left](properties_CoordinatesAndSizing.md#left) - [Line Color](properties_BackgroundAndBorder.md#line-color) - [Line Width](properties_BackgroundAndBorder.md#line-width) - [Object Name](properties_Object.md#object-name) - [Right](properties_CoordinatesAndSizing.md#right) - [Top](properties_CoordinatesAndSizing.md#top) - [Type](properties_Object.md#type) - [Vertical Sizing](properties_ResizingOptions.md#vertical-sizing) - [Visibility](properties_Display.md#visibility) - [Width](properties_CoordinatesAndSizing.md#width) \ No newline at end of file From 8bf4d029067e8da1a081600bf70f338e676ac103 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:17:03 +0100 Subject: [PATCH 046/260] New translations spinner.md (French) --- website/translated_docs/fr/FormObjects/spinner.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/spinner.md b/website/translated_docs/fr/FormObjects/spinner.md index d9ce3a338e855a..a052959581e2ac 100644 --- a/website/translated_docs/fr/FormObjects/spinner.md +++ b/website/translated_docs/fr/FormObjects/spinner.md @@ -5,17 +5,17 @@ title: Spinner ## Aperçu -Le spinner est un indicateur circulaire qui affiche une animation continue, telle que le [Barber shop](progressIndicator.md#barber-shop). +The spinner is a circular indicator that displays a continuous animation, like the [Barber shop](progressIndicator.md#barber-shop). ![](assets/en/FormObjects/spinner.gif) -Ce type d'objet vous permet d'indiquer une opération telle que la recherche de connexion réseau ou le calcul est en cours. Lorsque cet indicateur est sélectionné, [les propriétés "Graduations"](properties_Scale.md) ne sont pas disponibles. +You use this type of object to indicate that an operation such as establishing a network connection or a performing a calculation is underway. When this indicator is selected, [graphical Scale properties](properties_Scale.md) are not available. -A l’exécution du formulaire, l'objet n’est pas animé. Vous devez gérer l’animation en passant une valeur à [la variable ou expression qui lui est associée](properties_Object.md#variable-or-expression) : +When the form is executed, the object is not animated. You manage the animation by passing a value to its [associated variable or expression](properties_Object.md#variable-or-expression): -* 1 (ou toute valeur différente de 0) = Démarrer l’animation, -* 0 = Stopper l’animation +* 1 (or any value other than 0) = Start animation, +* 0 = Stop animation -### Propriétés prises en charge -[Style de la bordure](properties_BackgroundAndBorder.md#border-line-style) - [Bas](properties_CoordinatesAndSizing.md#bottom) - [Class](properties_Object.md#css-class) - [Type d'expression](properties_Object.md#expression-type) - [Hauteur](properties_CoordinatesAndSizing.md#height) -[Message d'aide](properties_Help.md#help-tip) - [Dim. horizontal](properties_ResizingOptions.md#horizontal-sizing) - [Gauche](properties_CoordinatesAndSizing.md#left) - [Nom](properties_Object.md#object-name) - [Droite](properties_CoordinatesAndSizing.md#right) - [Haut](properties_CoordinatesAndSizing.md#top) - [Type](properties_Object.md#type) - [Variable ou expression](properties_Object.md#variable-or-expression) - [Dim. vertical](properties_ResizingOptions.md#vertical-sizing) - [Visibilité](properties_Display.md#visibility) - [Largeur](properties_CoordinatesAndSizing.md#width) +### Supported Properties +[Border Line Style](properties_BackgroundAndBorder.md#border-line-style) - [Bottom](properties_CoordinatesAndSizing.md#bottom) - [Class](properties_Object.md#css-class) - [Expression Type](properties_Object.md#expression-type) - [Height](properties_CoordinatesAndSizing.md#height) -[Help Tip](properties_Help.md#help-tip) - [Horizontal Sizing](properties_ResizingOptions.md#horizontal-sizing) - [Left](properties_CoordinatesAndSizing.md#left) - [Object Name](properties_Object.md#object-name) - [Right](properties_CoordinatesAndSizing.md#right) - [Top](properties_CoordinatesAndSizing.md#top) - [Type](properties_Object.md#type) - [Variable or Expression](properties_Object.md#variable-or-expression) - [Vertical Sizing](properties_ResizingOptions.md#vertical-sizing) - [Visibility](properties_Display.md#visibility) - [Width](properties_CoordinatesAndSizing.md#width) \ No newline at end of file From 796fbca3648b0f9fc4fe6c5036ac435a332c3ba2 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:17:05 +0100 Subject: [PATCH 047/260] New translations splitters.md (French) --- .../fr/FormObjects/splitters.md | 56 +++++++++---------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/splitters.md b/website/translated_docs/fr/FormObjects/splitters.md index b030c73a34311e..de3da9a5bb063c 100644 --- a/website/translated_docs/fr/FormObjects/splitters.md +++ b/website/translated_docs/fr/FormObjects/splitters.md @@ -1,27 +1,27 @@ --- id: splitters -title: Séparateur +title: Splitter --- ## Aperçu -Un séparateur divise un formulaire en deux zones. Il permet à l’utilisateur d’agrandir ou de réduire chaque zone en le déplaçant. Un séparateur peut être horizontal ou vertical. The splitter takes into account each object’s resizing properties, which means that you can completely customize your application's interface. Un séparateur peut être “pousseur” ou non +A splitter divides a form into two areas, allowing the user to enlarge and reduce the areas by moving the splitter one way or the other. A splitter can be either horizontal or vertical. The splitter takes into account each object’s resizing properties, which means that you can completely customize your application's interface. A splitter may or may not be a “pusher.” -L’utilisation type du séparateur est le formulaire de sortie dans lequel les colonnes peuvent être redimensionnées : +Splitter are used for example in output forms so that columns can be resized: ![](assets/en/FormObjects/split1.png) -Les caractéristiques générales des séparateurs sont les suivantes : +Some of the splitter’s general characteristics: -* Vous pouvez placer autant de séparateurs que vous voulez dans tout type de formulaire. De même, il est possible de mêler des séparateurs horizontaux et verticaux dans un même formulaire. -* Un séparateur peut traverser un objet. Celui-ci sera redimensionné lors du déplacement du séparateur. -* Les butées des séparateurs sont calculées de manière à ce que les objets déplacés restent entièrement visibles dans le formulaire ou ne passent pas sous/à côté d’un autre séparateur. Lorsque la propriété [Pousseur](properties_ResizingOptions.md#pusher) est associée à un séparateur, son déplacement vers la droite ou vers le bas ne rencontre pas de butée. -* Les redimensionnements effectués dans les formulaires à l’aide des séparateurs ne sont conservés que durant l’affichage du formulaire. Une fois le formulaire refermé, les dimensions initiales sont restaurées. +* You can place as many splitters as you want in any type of form and use a mixture of horizontal and vertical splitters in the same form. +* A splitter can cross (overlap) an object. This object will be resized when the splitter is moved. +* Splitter stops are calculated so that the objects moved remain entirely visible in the form or do not pass under/next to another splitter. When the [Pusher](properties_ResizingOptions.md#pusher) property is associated with a splitter, its movement to the right or downward does not encounter any stops. +* If you resize a form using a splitter, the new dimensions of the form are saved only while the form is being displayed. Once a form is closed, the initial dimensions are restored. -Une fois inséré, un séparateur se présente sous la forme d’un trait. Vous pouvez modifier son [style de bordure](properties_BackgroundAndBorder.md#border-line-style-dotted-line-type) afin d’obtenir un trait plus ou moins épais, ou [modifier sa couleur](properties_BackgroundAndBorder.md##font-color-line-color). +Once it is inserted, the splitter appears as a line. You can modify its [border style](properties_BackgroundAndBorder.md#border-line-style-dotted-line-type) to obtain a thinner line or [change its color](properties_BackgroundAndBorder.md##font-color-line-color). -#### Exemple JSON : +#### JSON Example: ```4d "mySplitter": { @@ -30,36 +30,36 @@ Une fois inséré, un séparateur se présente sous la forme d’un trait. Vous "top": 160, "width": 100, "height": 20, - "splitterMode": "move" //pousseur + "splitterMode": "move" //pusher } ``` -### Propriétés prises en charge +### Supported Properties [Border Line Style](properties_BackgroundAndBorder.md##border-line-style-dotted-line-type) - [Bottom](properties_CoordinatesAndSizing.md#bottom) - [Class](properties_Object.md#css-class) - [Height](properties_CoordinatesAndSizing.md#height) - [Help Tip](properties_Help.md#help-tip) - [Horizontal Sizing](properties_ResizingOptions.md#horizontal-sizing) - [Left](properties_CoordinatesAndSizing.md#left) - [Line Color](properties_BackgroundAndBorder.md##font-color-line-color) - [Object Name](properties_Object.md#object-name) - [Pusher](properties_ResizingOptions.md#pusher) - [Right](properties_CoordinatesAndSizing.md#right) - [Top](properties_CoordinatesAndSizing.md#top) - [Type](properties_Object.md#type) - [Vertical Sizing](properties_ResizingOptions.md#vertical-sizing) - [Variable or Expression](properties_Object.md#variable-or-expression) - [Visibility](properties_Display.md#visibility) - [Width](properties_CoordinatesAndSizing.md#width) -## Interaction avec les propriétés des objets environnants +## Interaction with the properties of neighboring objects -Dans un formulaire, les séparateurs interagissent sur les objets qui les entourent suivant les options de redimensionnement de ces objets : +In a form, splitters interact with the objects that are around them according to these objects’ resizing options: -| Options de redimensionnement du ou des objet(s) | Objet(s) au-dessus du séparateur horizontal ou à gauche du séparateur vertical (1) | Object(s) below an horizontal *non-Pusher* splitter or to the right of a vertical *non-Pusher* splitter | Object(s) below an horizontal *Pusher* splitter or to the right of a vertical *Pusher* splitter | -| ----------------------------------------------- | ---------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- | -| Aucun | Restent tel que | Sont déplacés avec le séparateur (conservent leur position relative) jusqu’à la butée suivante. La butée du déplacement vers le bas ou vers la droite est soit le bord de la fenêtre, soit un autre séparateur. | Sont déplacés sans limites avec le séparateur (conservent leur position relative). Aucune butée n’est appliquée (cf. paragraphe suivant) | -| Redimensionnement | Gardent leur position d’origine mais sont redimensionnés en fonction de la nouvelle position du séparateur | | | -| Déplacer | Se déplacent avec le séparateur | | | +| Resizing options for the object(s) | Object(s) above an horizontal splitter or to the left of a vertical splitter (1) | Object(s) below an horizontal *non-Pusher* splitter or to the right of a vertical *non-Pusher* splitter | Object(s) below an horizontal *Pusher* splitter or to the right of a vertical *Pusher* splitter | +| ---------------------------------- | ----------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | +| None | Remain as is | Are moved with the splitter (position relative to the splitter is not modified) until the next stop. The stop when moving to the bottom or right is either the window’s border, or another splitter. | Are moved with the splitter (position relative to the splitter is not modified) indefinitely. No stop is applied (see the next paragraph) | +| Resize | Keep original position(s), but are resized according to the splitter’s new position | | | +| Move | Are moved with the splitter | | | -*(1) Un objet situé à cet emplacement sert de butée en cas de déplacement vers le haut (séparateur horizontal) ou vers la gauche (séparateur vertical) s’il ne comporte aucune option de redimensionnement.* -> Un objet entièrement contenu dans le rectangle définissant le séparateur est déplacé en même temps que le séparateur lui-même. +*(1) You cannot drag the splitter past the right (horizontal) or bottom (vertical) side of an object located in this position.* +> An object completely contained in the rectangle that defines the splitter is moved at the same time as the splitter. -## Gestion programmée des séparateurs +## Managing splitters programmatically -Vous pouvez associer une méthode objet à un séparateur. Cette méthode sera appelée avec l’événement `On Clicked` durant tout le déplacement. +You can associate an object method with a splitter and it will be called with the `On Clicked` event throughout the entire movement. -A [variable](properties_Object.md#variable-or-expression) of the *Longint* type is associated with each splitter. Cette variable peut être utilisée dans vos méthodes objet et/ou formulaire. Elle prend pour valeur le déplacement courant, en pixels, du séparateur. +A [variable](properties_Object.md#variable-or-expression) of the *Longint* type is associated with each splitter. This variable can be used in your object and/or form methods. Its value indicates the splitter’s current position, in pixels, in relation to its initial position. -* Si elle est négative : le déplacement a été effectué vers le haut ou vers la gauche, -* Si elle est positive : le déplacement a été effectué vers le bas ou vers la droite, -* Si elle est égale à 0 : le séparateur a été relâché à son emplacement d’origine. +* If the value is negative: the splitter was moved toward the top or toward the left, +* If the value is positive: the splitter was moved toward the bottom or toward the right, +* If the value is 0: the splitter was moved to its original position. -Vous pouvez également déplacer le séparateur par programmation : il suffit de modifier la valeur de la variable associée. Imaginons par exemple qu’un séparateur vertical soit associé à la variable `sépara1`. Si vous écrivez `sépara1:=-10`, le séparateur sera déplacé de 10 pixels vers la gauche — comme si l’utilisateur l’avait fait manuellement. Le déplacement s’effectue au terme de l’exécution de la méthode objet ou formulaire contenant l’instruction. +You can also move the splitter programmatically: you just have to set the value of the associated variable. For example, if a vertical splitter is associated with a variable named `split1`, and if you execute the following statement: `split1:=-10`, the splitter will be moved 10 pixels to the left — as if the user did it manually. The move is actually performed at the end of the execution of the form or object method containing the statement. From 9b19989ce49b0b6945f0e863f0248ad77bd8dacc Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:17:07 +0100 Subject: [PATCH 048/260] New translations staticPicture.md (French) --- .../fr/FormObjects/staticPicture.md | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/staticPicture.md b/website/translated_docs/fr/FormObjects/staticPicture.md index 4b75eed1049b27..cb48120f90738e 100644 --- a/website/translated_docs/fr/FormObjects/staticPicture.md +++ b/website/translated_docs/fr/FormObjects/staticPicture.md @@ -1,31 +1,31 @@ --- id: staticPicture -title: Image statique +title: Static picture --- ## Aperçu -Les images statiques sont des [objets statiques](formObjects_overview.md#active-and-static-objects) pouvant être utilisées à des fins diverses dans les formulaires 4D, notamment comme décor, arrière-plan ou interface utilisateur : +Static pictures are [static objects](formObjects_overview.md#active-and-static-objects) that can be used for various purposes in 4D forms, including decoration, background, or user interface: ![](assets/en/FormObjects/StaticPict.png) -Les images statiques sont stockées à l’extérieur des formulaires et insérées par référence. Dans l'éditeur de formules, les objets image statique sont créées par copier-coller ou par glisser-déposer. +Static pictures are stored outside the forms and inserted by reference. In the form editor, static picture objects are created by copy/paste or drag and drop operations. -> Si vous placez une image statique dans la page 0 d’un formulaire multi-pages, elle apparaîtra comme élément d’arrière-plan de toutes les pages. Vous pouvez également l’inclure dans un formulaire hérité, qui s'applique à l'arrière-plan de différents autres formulaires. Either way, your application will run faster than if the picture was pasted into each page. +> If you place a static picture on page 0 of a multi-page form, it will appear automatically as a background element on all pages. You can also include it in an inherited form, applied in the background of other different forms. Either way, your application will run faster than if the picture was pasted into each page. -## Format et emplacement +## Format and location -L'image d'origine doit être stockée dans un format géré nativement par 4D (4D reconnaît les principaux formats d'image : JPEG, PNG, BMP, SVG, GIF, etc.). +The original picture must be stored in a format managed natively by 4D (4D recognizes the main picture formats: JPEG, PNG, BMP, SVG, GIF, etc.). -Deux emplacements principaux peuvent être utilisés pour le chemin d'image statique : +Two main locations can be used for static picture path: -- in the **Resources** folder of the project. Appropriate when you want to share static pictures between several forms in the project. Dans ce cas, le chemin d'accès se trouve dans "/RESOURCES/\". -- dans un dossier d'images (nommé **Images** par exemple) dans le dossier du formulaire. Convient lorsque les images statiques sont utilisées uniquement dans le formulaire et/ou lorsque vous souhaitez pouvoir déplacer ou dupliquer le formulaire entier dans un ou plusieurs projets. Dans ce cas, le chemin d'accès est "<\picture path\>" et est résolu à partir de la racine du dossier du formulaire. +- in the **Resources** folder of the project. Appropriate when you want to share static pictures between several forms in the project. In this case, the Pathname is in the "/RESOURCES/\". +- in an image folder (e.g. named **Images**) within the form folder. Appropriate when the static pictures are used only in the form and/or yon want to be able to move or duplicate the whole form within the project or different projects. In this case, the Pathname is "<\picture path\>" and is resolved from the root of the form folder. -## Propriétés prises en charge +## Supported Properties -[Bas](properties_CoordinatesAndSizing.md#bottom) - [CSS Class](properties_Object.md#css-class) - [Affichage](properties_Picture.md#display) - [Hauteur](properties_CoordinatesAndSizing.md#height) - [Dim. horizontal](properties_ResizingOptions.md#horizontal-sizing) - [Gauche](properties_CoordinatesAndSizing.md#left) - [Nom](properties_Object.md#object-name) - [Pathname](properties_Picture.md#pathname) - [Droite](properties_CoordinatesAndSizing.md#right) - [Haut](properties_CoordinatesAndSizing.md#top) - [Type](properties_Object.md#type) - [Dim. vertical](properties_ResizingOptions.md#vertical-sizing) - [Visibilité](properties_Display.md#visibility) - [Largeur](properties_CoordinatesAndSizing.md#width) +[Bottom](properties_CoordinatesAndSizing.md#bottom) - [CSS Class](properties_Object.md#css-class) - [Display](properties_Picture.md#display) - [Height](properties_CoordinatesAndSizing.md#height) - [Horizontal Sizing](properties_ResizingOptions.md#horizontal-sizing) - [Left](properties_CoordinatesAndSizing.md#left) - [Object Name](properties_Object.md#object-name) - [Pathname](properties_Picture.md#pathname) - [Right](properties_CoordinatesAndSizing.md#right) - [Top](properties_CoordinatesAndSizing.md#top) - [Type](properties_Object.md#type) - [Vertical Sizing](properties_ResizingOptions.md#vertical-sizing) - [Visibility](properties_Display.md#visibility) - [Width](properties_CoordinatesAndSizing.md#width) From 6a535b8abe3544c68af1a38933892fe88e5b5352 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:17:09 +0100 Subject: [PATCH 049/260] New translations stepper.md (French) --- .../translated_docs/fr/FormObjects/stepper.md | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/stepper.md b/website/translated_docs/fr/FormObjects/stepper.md index 62c28393ba4fc4..873ad9038a73a0 100644 --- a/website/translated_docs/fr/FormObjects/stepper.md +++ b/website/translated_docs/fr/FormObjects/stepper.md @@ -5,32 +5,32 @@ title: Stepper ## Aperçu -Un stepper permet à l'utilisateur de faire défiler des valeurs numériques, des durées (heures) ou des dates par des étapes pré-définies en cliquant sur les boutons de direction. +A stepper lets the user scroll through numeric values, durations (times) or dates by predefined steps by clicking on the arrow buttons. ![](assets/en/FormObjects/indicator_numericStepper.png) -## Utilisation du stepper +## Using steppers -La variable associée à l’objet peut être affectée à une zone saisissable (champ ou variable) afin de stocker ou modifier la valeur courante de l’objet. +You can assign the variable associated with the object to an enterable area (field or variable) to store or modify the current value of the object. -Un stepper peut être directement associé à une variable numérique, heure ou date. +A stepper can be associated directly with a number, time or date variable. -* Pour les valeurs de type heure, les propriétés Minimum, Maximum et Pas représentent des secondes. Par exemple, pour définir un stepper de 8h00 à 18h00 avec des pas de 10 minutes : +* For values of the time type, the Minimum, Maximum and Step properties represent seconds. For example, to set a stepper from 8:00 to 18:00 with 10-minute steps: * [minimum](properties_Scale.md#minium) = 28 800 (8\*60\*60) * [maximum](properties_Scale.md#maximum) = 64 800 (18\*60\*60) * [step](properties_Scale.md#step) = 600 (10\*60) -* Pour les valeurs de type date, la valeur saisie dans la propriété [Pas](properties_Scale.md#step) représente des jours. Les propriétés Minimum et Maximum sont ignorées. -> Pour que le stepper fonctionne avec une variable heure ou date, il est impératif de définir son type dans la Liste de propriétés ET de la déclarer explicitement via la commande [C_TIME](https://doc.4d.com/4Dv17R5/4D/17-R5/C-TIME.301-4128557.en.html) ou [C_DATE](https://doc.4d.com/4Dv17R5/4D/17-R5/C-DATE.301-4128570.en.html). +* For values of the date type, the value entered in the [step](properties_Scale.md#step) property represents days. The Minimum and Maximum properties are ignored. +> For the stepper to work with a time or date variable, it is imperative to set its type in the form AND to declare it explicitly via the [C_TIME](https://doc.4d.com/4Dv17R5/4D/17-R5/C-TIME.301-4128557.en.html) or [C_DATE](https://doc.4d.com/4Dv17R5/4D/17-R5/C-DATE.301-4128570.en.html) command. -Pour plus d'informations, veuillez vous reporter à la section [Utiliser des indicateurs](progressIndicator.md#using-indicatire) de la page "Indicateurs de progression". +For more information, please refer to [Using indicators](progressIndicator.md#using-indicatire) in the "Progress Indicator" page. -## Propriétés prises en charge +## Supported Properties [Border Line Style](properties_BackgroundAndBorder.md#border-line-style) - [Bottom](properties_CoordinatesAndSizing.md#bottom) - [Class](properties_Object.md#css-class) - [Enterable](properties_Entry.md#enterable) - [Execute object method](properties_Action.md#execute-object-method) - [Expression Type](properties_Object.md#expression-type) (only "integer", "number", "date", or "time") - [Height](properties_CoordinatesAndSizing.md#height) - [Help Tip](properties_Help.md#help-tip) - [Horizontal Sizing](properties_ResizingOptions.md#horizontal-sizing) - [Left](properties_CoordinatesAndSizing.md#left) - [Maximum](properties_Scale.md#maximum) - [Minimum](properties_Scale.md#minimum) - [Object Name](properties_Object.md#object-name) - [Right](properties_CoordinatesAndSizing.md#right) - [Step](properties_Scale.md#step) - [Top](properties_CoordinatesAndSizing.md#top) - [Type](properties_Object.md#type) - [Variable or Expression](properties_Object.md#variable-or-expression) - [Vertical Sizing](properties_ResizingOptions.md#vertical-sizing) - [Visibility](properties_Display.md#visibility) - [Width](properties_CoordinatesAndSizing.md#width) -## Voir également -- [indicateurs de progression](progressIndicator.md) -- [règle](ruler.md) +## See also +- [progress indicators](progressIndicator.md) +- [rulers](ruler.md) From 037caf54446ce3d51811f3497aabe03f5b944907 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:17:11 +0100 Subject: [PATCH 050/260] New translations tabControl.md (French) --- .../fr/FormObjects/tabControl.md | 58 +++++++++---------- 1 file changed, 27 insertions(+), 31 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/tabControl.md b/website/translated_docs/fr/FormObjects/tabControl.md index 1e9ac6fdcaa868..7aee07cb5e64ca 100644 --- a/website/translated_docs/fr/FormObjects/tabControl.md +++ b/website/translated_docs/fr/FormObjects/tabControl.md @@ -1,32 +1,32 @@ --- id: tabControl -title: Onglets +title: Tab Controls --- -Un onglet crée un objet qui permet à l’utilisateur de choisir entre plusieurs écrans virtuels affichés dans les limites de l’onglet. L’utilisateur accède à chaque écran en cliquant sur l’onglet correspondant. +A tab control creates an object that lets the user choose among a set of virtual screens that are enclosed by the tab control object. Each screen is accessed by clicking its tab. -Le formulaire multi-pages suivant utilise un onglet : +The following multi-page form uses a tab control object: ![](assets/en/FormObjects/tabControl1.png) -Pour passer d’un écran à l’autre, l’utilisateur clique simplement sur l’onglet correspondant. +To navigate from screen to screen, the user simply clicks the desired tab. -Un onglet peut être utilisé, entre autres, pour gérer la navigation entre les pages d’un formulaire multi-pages. Dans ce cas, la commande [FORM GOTO PAGE](https://doc.4d.com/4Dv17R5/4D/17-R5/FORM-GOTO-PAGE.301-4128536.en.html) ou l’action standard `gotoPage` devra être appelée lorsque l’utilisateur cliquera sur l’onglet. +The screens can represent pages in a multi-page form or an object that changes when the user clicks a tab. If the tab control is used as a page navigation tool, then the [FORM GOTO PAGE](https://doc.4d.com/4Dv17R5/4D/17-R5/FORM-GOTO-PAGE.301-4128536.en.html) command or the `gotoPage` standard action would be used when a user clicks a tab. -Un onglet peut aussi être utilisé pour contrôler les données qui sont affichées dans un sous-formulaire. On peut, par exemple, implémenter un rolodex à l’aide d’un onglet. Chaque onglet afficherait alors une des lettres de l’alphabet et l’action de l’onglet serait de charger les informations correspondantes à la lettre sur lequel l’utilisateur a cliqué. +Another use of the tab control is to control the data that is displayed in a subform. For example, a Rolodex could be implemented using a tab control. The tabs would display the letters of the alphabet and the tab control’s action would be to load the data corresponding to the letter that the user clicked. -Chaque onglet peut afficher des intitulés ou des intitulés et des petites icônes. Si vous placez des icônes, elles apparaissent à gauche de chaque intitulé. Voici un exemple d’onglet qui utilise des icônes : +Each tab can display labels or labels and a small icon. If you include icons, they appear to the left of each label. Here is an example of a tab control that uses icons: ![](assets/en/FormObjects/tabControl2.png) -Lorsque vous créez un onglet, 4D gère l’espacement et le placement des onglets. Vous n’avez à fournir à 4D que les intitulés sous la forme d’un tableau ou les icônes et intitulés sous la forme d’une énumération hiérarchique. +When you create a tab control, 4D manages the spacing and placement of the tabs. You only need to supply the labels in the form of an array, or the icons and labels in the form of a hierarchical list. -Si l’onglet est assez large, il affiche les intitulés et les icônes. S’il ne peut pas afficher toutes les icônes à la fois, il place des flèches de défilement à droite du dernier onglet visible. Les flèches de défilement permettent à l’utilisateur de faire défiler des onglets vers la droite ou vers la gauche. +If the tab control is wide enough to display all the tabs with both the labels and icons, it displays both. If the tab control is not wide enough to display both the labels and icons, 4D displays the icons only. If it can’t fit all the icons, it places scroll arrows to the right of the last visible tab. The scroll arrows allow the user to scroll the icons to the left or right. -Sous macOS, les onglets peuvent être orientés, en plus de la position standard (en haut), à droite, à gauche ou en bas. +Under macOS, in addition to the standard position (top), the tab controls can also be aligned to the bottom. -### Exemple JSON : +### JSON Example: ```4d "myTab": { @@ -35,18 +35,18 @@ Sous macOS, les onglets peuvent être orientés, en plus de la position standard "top": 160, "width": 100, "height": 20, - "labelsPlacement": "bottom" //définit l'orientation + "labelsPlacement": "bottom" //define the direction } ``` -## Ajouter les intitulés dans un onglet +## Adding labels to a tab control -Pour placer des intitulés dans un onglet, plusieurs possibilités se présentent à vous : +There are several ways to supply the labels for a tab control: -* Vous pouvez associer à l’onglet [une liste de valeurs](properties_DataSource.md#choice-list-static-list), accessible via une collection (liste statique) ou un pointeur JSON ("$ref") vers une liste json. Les icônes associées à des éléments de liste dans l'éditeur de listes seront affichées dans l'onglet. -* Vous pouvez créer un tableau Texte qui contient les noms de chaque page du formulaire. Le code doit être exécuté avant que le formulaire soit présenté à l’utilisateur. Par exemple, vous pouvez placer ce code dans l’événement formulaire `Sur chargement`. +* You can assign a [choice list](properties_DataSource.md#choice-list-static-list) to the tab control, either through a collection (static list) or a JSON pointer ("$ref") to a json list. Icons associated with list items in the Lists editor will be displayed in the tob control. +* You can create a Text array that contains the names of each page of the form. This code must be executed before the form is presented to the user. For example, you could place the code in the object method of the tab control and execute it when the `On Load` event occurs. ```4d ARRAY TEXT(arrPages;3) @@ -54,22 +54,22 @@ Pour placer des intitulés dans un onglet, plusieurs possibilités se présenten arrPages{2}:="Address" arrPages{3}:="Notes" ``` -> Vous pouvez aussi stocker les noms des pages dans une liste hiérarchique et utiliser la commande `Load list` pour charger les valeurs dans le tableau. +> You can also store the names of the pages in a hierarchical list and use the `Load list` command to load the values into the array. -## Gérer les onglets par programmation +## Managing tabs programmatically -### Commande FORM GOTO PAGE +### FORM GOTO PAGE command -Vous pouvez utiliser la commande [FORM GOTO PAGE](https://doc.4d.com/4Dv17R5/4D/17-R5/FORM-GOTO-PAGE.301-4128536.en.html) dans la méthode objet de l’onglet pour naviguer parmi les pages du formulaire : +You can use the [FORM GOTO PAGE](https://doc.4d.com/4Dv17R5/4D/17-R5/FORM-GOTO-PAGE.301-4128536.en.html) command in the tab control’s method: ```4d FORM GOTO PAGE(arrPages) ``` -Cette commande devra être exécutée dans l’événement formulaire `Sur clic`. Il est préférable d’effacer le tableau dans l’événement formulaire `Sur libération`. +The command is executed when the `On Clicked` event occurs. You should then clear the array when the `On Unload` event occurs. -Vous pouvez, par exemple, écrire le code suivant : +Here is an example object method: ```4d Case of @@ -82,16 +82,12 @@ Vous pouvez, par exemple, écrire le code suivant : End case ``` -### Action Goto Page +### Goto Page action -Lorsque vous associez l’[](properties_Action.md#standard-action)action standard - `gotoPage` à un objet de type Onglet, 4D affiche automatiquement la page du formulaire correspondant au numéro de l’onglet sélectionné.

    +When you assign the `gotoPage` [standard action](properties_Action.md#standard-action) to a tab control, 4D will automatically display the page of the form that corresponds to the number of the tab that is selected. -Par exemple, si l’utilisateur clique sur le 3e onglet, 4D affichera la page 3 du formulaire courant (si elle existe). +For example, if the user selects the 3rd tab, 4D will display the third page of the current form (if it exists). - - -## Propriétés prises en charge - -[Gras](properties_Text.md#bold) - [Bas](properties_CoordinatesAndSizing.md#bottom) - [Énumération](properties_DataSource.md#choice-list-static-list) - [Css Class](properties_Object.md#css-class) - [Type d'expression](properties_Object.md#expression-type) - [Police](properties_Text.md#font) - [Taille ](properties_Text.md#font-size) - [Hauteur](properties_CoordinatesAndSizing.md#height) - [Message d'aide](properties_Help.md#help-tip) - [Dim. horizontal](properties_ResizingOptions.md#horizontal-sizing) - [Italique](properties_Text.md#italic) - [Gauche](properties_CoordinatesAndSizing.md#left) - [Nom](properties_Object.md#object-name) - [Droite](properties_CoordinatesAndSizing.md#right) - [Valeur standard](properties_Object.md#save-value) - [Action standard](properties_Action.md#standard-action) - [Orientation onglets](properties_Appearance.md#tab-control-direction) - [Haut](properties_CoordinatesAndSizing.md#top) - [Type](properties_Object.md#type) - [Souligné](properties_Text.md#underline) - [Dim. vertical](properties_ResizingOptions.md#vertical-sizing) - [Variable ou expression](properties_Object.md#variable-or-expression) - [Visibilité](properties_Display.md#visibility) - [Largeur](properties_CoordinatesAndSizing.md#width) +## Supported Properties +[Bold](properties_Text.md#bold) - [Bottom](properties_CoordinatesAndSizing.md#bottom) - [Choice List](properties_DataSource.md#choice-list-static-list) - [Class](properties_Object.md#css-class) - [Expression Type](properties_Object.md#expression-type) - [Font](properties_Text.md#font) - [Font Size](properties_Text.md#font-size) - [Height](properties_CoordinatesAndSizing.md#height) - [Help Tip](properties_Help.md#help-tip) - [Horizontal Sizing](properties_ResizingOptions.md#horizontal-sizing) - [Italic](properties_Text.md#italic) - [Left](properties_CoordinatesAndSizing.md#left) - [Object Name](properties_Object.md#object-name) - [Right](properties_CoordinatesAndSizing.md#right) - [Save value](properties_Object.md#save-value) - [Standard action](properties_Action.md#standard-action) - [Tab Control Direction](properties_Appearance.md#tab-control-direction) - [Top](properties_CoordinatesAndSizing.md#top) - [Type](properties_Object.md#type) - [Underline](properties_Text.md#underline) - [Vertical Sizing](properties_ResizingOptions.md#vertical-sizing) - [Variable or Expression](properties_Object.md#variable-or-expression) - [Visibility](properties_Display.md#visibility) - [Width](properties_CoordinatesAndSizing.md#width) From 9d2249b456df95dc441267a52608d4c386a05a4a Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:17:13 +0100 Subject: [PATCH 051/260] New translations overview.md (French) --- website/translated_docs/fr/Menus/overview.md | 28 ++++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/website/translated_docs/fr/Menus/overview.md b/website/translated_docs/fr/Menus/overview.md index 83821460ef9e4d..707456910db70c 100644 --- a/website/translated_docs/fr/Menus/overview.md +++ b/website/translated_docs/fr/Menus/overview.md @@ -7,28 +7,28 @@ You can create menu bars and menus for your 4D applications. Because pull-down m ![](assets/en/Menus/menubar.png) -Une **barre de menus** est un groupe de menus qui peuvent être affichés dans le même écran. Chaque **menu** d’une barre de menus peut posséder plusieurs commandes dont certaines peuvent faire appel à des sous-menus en cascade (on parle alors de sous-menus hiérarchiques). Lorsque l’utilisateur choisit une commande de menu ou de sous-menu, il appelle une méthode projet ou une action standard qui réalise une opération. +A **menu bar** is a group of menus that can be displayed on a screen together. Each **menu** on a menu bar can have numerous menu commands in it, including some that call cascading submenus (or hierarchical submenus). When the user chooses a menu or submenu command, it calls a project method or a standard action that performs an operation. -You can have many separate menu bars for each application. For example, you can use one menu bar that contains menus for standard operations on the database and another that becomes active only for reporting. Une barre de menus peut contenir des commandes destinées à la saisie d’enregistrements. La barre de menus qui apparaît avec le formulaire de saisie peut contenir le même menu, mais ses commandes peuvent être désactivées car inutiles pour la saisie dans le formulaire. +You can have many separate menu bars for each application. For example, you can use one menu bar that contains menus for standard operations on the database and another that becomes active only for reporting. One menu bar may contain a menu with menu commands for entering records. The menu bar appearing with the input form may contain the same menu, but the menu commands are disabled because the user doesn’t need them during data entry. -Vous pouvez utiliser le même menu dans plusieurs barres de menus et menus, ou ne pas l’attacher et le gérer uniquement par programmation (on parle dans ce cas de menu indépendant). +You can use the same menu in several menu bars or other menus, or you can leave it unattached and manage it only by programming (in this case, it is known as an independent menu). -Lorsque vous créez des menus, il est utile de garder à l’esprit les deux règles suivantes : -- N’utilisez les menus que pour des tâches qui leurs sont adaptées : Les commandes de menus doivent réaliser des tâches telles que l’ajout d’un enregistrement, les recherches ou les impressions. -- Groupez les commandes de menus par fonctions : l’utilisateur doit pouvoir être capable de s’orienter dans un ordre logique de menus. Par exemple, toutes les commandes de menu qui permettent de naviguer dans la base doivent être placées dans le même menu. +When you design menus, keep the following two rules in mind: +- Use menus for functions that are suited to menus: Menu commands should perform tasks such as adding a record, searching for records, or printing a report. +- Group menu commands by function: For example, all menu commands that print reports should be in the same menu. For another example, you might have all the operations for a certain table in one menu. -Pour créer des menus et des barres de menus, vous pouvez utiliser soit : +To create menus and menu bars, you can use either: -- l’éditeur de menus, -- les commandes du langage, -- un mélange des deux. +- the Menu editor from the Toolbox, +- language commands for the "Menus" theme, +- a combination of both. -## Éditeur de menus -L’éditeur de menus est accessible via le bouton **Menus** de la Boîte à outils. +## Menu editor +The Menu editor is accessed using the **Menus** button of the Toolbox. ![](assets/en/Menus/editor1.png) -Les barres de menus et les menus sont affichés sous forme de deux éléments d’une même liste hiérarchique, dans la partie gauche de la fenêtre. Chaque menu peut être attaché à une barre de menus ou à un autre menu. Dans le deuxième cas, le menu devient un sous-menu. +Menus and menu bars are displayed as two items of the same hierarchical list, on the left side of the dialog box. Each menu can be attached to a menu bar or to another menu. In the second case, the menu becomes a sub-menu. -4D affecte des numéros de barre de menus séquentiellement -- Menu Bar #1 apparait en premier. Vous pouvez renommer des barres de menu mais vous ne pouvez pas modifier leur numéro. Ces derniers sont utilisés par les commandes du langage. +4D assigns menu bar numbers sequentially — Menu Bar #1 appears first. You can rename menu bars but you cannot change their numbers. These numbers are used by the language commands. From 096e9bec1d6cd3d9b849331689a6804694f730ec Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:17:15 +0100 Subject: [PATCH 052/260] New translations viewProArea_overview.md (French) --- .../fr/FormObjects/viewProArea_overview.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/viewProArea_overview.md b/website/translated_docs/fr/FormObjects/viewProArea_overview.md index ac568f88fab96f..0e0a565395139f 100644 --- a/website/translated_docs/fr/FormObjects/viewProArea_overview.md +++ b/website/translated_docs/fr/FormObjects/viewProArea_overview.md @@ -1,20 +1,20 @@ --- id: viewProAreaOverview -title: Zone 4D View Pro +title: 4D View Pro area --- -4D View Pro vous permet d'insérer et d'afficher une zone de tableur dans vos formulaires 4D. Une tableur est une application contenant une grille de cellules dans lesquelles vous pouvez saisir des informations, effectuer des calculs ou afficher des images. +4D View Pro allows you to insert and display a spreadsheet area in your 4D forms. A spreadsheet is an application containing a grid of cells into which you can enter information, execute calculations, or display pictures. ![](assets/en/FormObjects/viewPro2.png) -Une fois que vous utilisez les zones 4D View Pro dans vos formulaires, vous pouvez importer et exporter des feuilles de calcul. +Once you use 4D View Pro areas in your forms, you can import and export spreadsheets documents. -## Utiliser des zones 4D View Pro +## Using 4D View Pro areas -Les zones 4D View Pro sont documentées dans le manuel [4D View Pro](https://doc.4d.com/4Dv17R6/4D/17-R6/4D-View-Pro-Reference.100-4351323.en.html). +4D View Pro areas are documented in the [4D View Pro Reference](https://doc.4d.com/4Dv17R6/4D/17-R6/4D-View-Pro-Reference.100-4351323.en.html) manual. -## Propriétés prises en charge +## Supported Properties -[Style de la bordure](properties_BackgroundAndBorder.md#border-line-style) - [Bas](properties_CoordinatesAndSizing.md#bottom) - [Css Class](properties_Object.md#css-class) - [Haut](properties_CoordinatesAndSizing.md#height) - [Dim. horizontal](properties_ResizingOptions.md#horizontal-sizing) - [Gauche](properties_CoordinatesAndSizing.md#left) - [Méthode](properties_Action.md#method) - [Nom](properties_Object.md#object-name) - [Droite](properties_CoordinatesAndSizing.md#right) - [Afficher barre de formule](properties_Appearance.md#show-formula-bar) - [Type](properties_Object.md#type) - [Interface utilisateur](properties_Appearance.md#user-interface) - [Dim. vertical](properties_ResizingOptions.md#vertical-sizing) - [Visibilité](properties_Display.md#visibility) - [Largeur](properties_CoordinatesAndSizing.md#width) +[Border Line Style](properties_BackgroundAndBorder.md#border-line-style) - [Bottom](properties_CoordinatesAndSizing.md#bottom) - [Class](properties_Object.md#css-class) - [Height](properties_CoordinatesAndSizing.md#height) - [Horizontal Sizing](properties_ResizingOptions.md#horizontal-sizing) - [Left](properties_CoordinatesAndSizing.md#left) - [Method](properties_Action.md#method) - [Object Name](properties_Object.md#object-name) - [Right](properties_CoordinatesAndSizing.md#right) - [Show Formula Bar](properties_Appearance.md#show-formula-bar) - [Type](properties_Object.md#type) - [User Interface](properties_Appearance.md#user-interface) - [Vertical Sizing](properties_ResizingOptions.md#vertical-sizing) - [Visibility](properties_Display.md#visibility) - [Width](properties_CoordinatesAndSizing.md#width) From f33c97af0838411abf4c6092e6d378f2d538d843 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:17:18 +0100 Subject: [PATCH 053/260] New translations webArea_overview.md (French) --- .../fr/FormObjects/webArea_overview.md | 80 +++++++++---------- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/webArea_overview.md b/website/translated_docs/fr/FormObjects/webArea_overview.md index 39ea89d9a52ab2..55c6ca744f73db 100644 --- a/website/translated_docs/fr/FormObjects/webArea_overview.md +++ b/website/translated_docs/fr/FormObjects/webArea_overview.md @@ -1,6 +1,6 @@ --- id: webAreaOverview -title: Zone Web +title: Web Area --- ## Aperçu @@ -9,60 +9,60 @@ Web areas can display various types of web content within your forms: HTML pages It is possible to create several web areas in the same form. Note, however, that the use of web areas must follow [several rules](#web-areas-rules). -Several dedicated [standard actions](#standard-actions), numerous [language commands](https://doc.4d.com/4Dv18/4D/18/Web-Area.201-4504309.en.html) as well as generic and specific [form events](#form-events) allow the developer to control the functioning of web areas. Des variables spécifiques permettent d’échanger des informations entre la zone et l’environnement 4D. +Several dedicated [standard actions](#standard-actions), numerous [language commands](https://doc.4d.com/4Dv18/4D/18/Web-Area.201-4504309.en.html) as well as generic and specific [form events](#form-events) allow the developer to control the functioning of web areas. Specific variables can be used to exchange information between the area and the 4D environment. > The use of web plugins and Java applets is not recommended in web areas because they may lead to instability in the operation of 4D, particularly at the event management level. -## Propriétés spécifiques +## Specific properties -### Variables associées +### Associated variables Two specific variables can be associated with each web area: - [`URL`](properties_WebArea.md#url) --to control the URL displayed by the web area - [`Progression`](properties_WebArea.md#progression) -- to control the loading percentage of the page displayed in the web area. -### Moteur de rendu Web +### Web rendering engine You can choose between [two rendering engines](properties_WebArea.md#use-embedded-web-rendering-engine) for the web area, depending on the specifics of your application. Selecting the embedded web rendering engine allows you to call 4D methods from the web area. -### Accéder aux méthodes 4D +### Access 4D methods When the [Access 4D methods](properties_WebArea.md#access-4d-methods) property is selected, you can call 4D methods from a web area. > This property is only available if the web area [uses the embedded web rendering engine](#use-embedded-web-rendering-engine). -### Objet $4d +### $4d object The [4D embedded web rendering engine](#use-embedded-web-rendering-engine) supplies the area with a JavaScript object named $4d that you can associate with any 4D project method using the "." object notation. -Par exemple, pour appeler la méthode 4D `HelloWorld`, vous devez simplement exécuter la déclaration suivante : +For example, to call the `HelloWorld` 4D method, you just execute the following statement: ```codeJS $4d.HelloWorld(); ``` -> JavaScript est sensible à la casse. Il est donc important de noter que l'objet est nommé $4d (avec un "d" minuscule). +> JavaScript is case sensitive so it is important to note that the object is named $4d (with a lowercase "d"). -La syntaxe des appels aux méthodes 4D est la suivante : +The syntax of calls to 4D methods is as follows: ```codeJS $4d.4DMethodName(param1,paramN,function(result){}) ``` -- `param1...paramN` : Vous pouvez passer autant de paramètres que vous le souhaitez dans la méthode 4D. Ces paramètres peuvent être de n'importe quel type pris en charge par JavaScript (chaîne, numérique, tableau, objet). +- `param1...paramN`: You can pass as many parameters as you need to the 4D method. These parameters can be of any type supported by JavaScript (string, number, array, object). -- `function(result)` : Fonction à passer comme dernier argument. Cette fonction "callback" est appelée de manière sychronisée une fois que la méthode 4D a fini de s'exécuter. Elle reçoit le paramètre `result`. +- `function(result)`: Function to pass as last argument. This "callback" function is called synchronously once the 4D method finishes executing. It receives the `result` parameter. -- `result`: Résultat de l'exécution de la méthode 4D, retournée dans l'expression "$0". Ce résultat peut être de n'importe quel type pris en charge par JavaScript (chaîne, numérique, tableau, objet). Vous pouvez utiliser la commande `C_OBJECT` pour retourner les objets. +- `result`: Execution result of the 4D method, returned in the "$0" expression. This result can be of any type supported by JavaScript (string, number, array, object). You can use the `C_OBJECT` command to return the objects. -> Par défaut, 4D opère en UTF-8. Lorsque vous retournez du texte contenant des caractères étendus, tels que des caractères avec des accents, assurez-vous que l'encodage de la page affiché dans la zone Web est déclaré en UTF-8, sinon les caractères risquent de ne pas être retournés correctement. Dans ce cas, ajoutez la ligne suivante dans la page HTML pour déclarer l'encodage : `` +> By default, 4D works in UTF-8. When you return text containing extended characters, for example characters with accents, make sure the encoding of the page displayed in the Web area is declared as UTF-8, otherwise the characters may be rendered incorrectly. In this case, add the following line in the HTML page to declare the encoding: `` -#### Exemple 1 -Considérons une méthode projet 4D nommée `today` qui ne reçoit pas de paramètres et qui retourne la date courante dans une chaîne. +#### Example 1 +Given a 4D project method named `today` that does not receive parameters and returns the current date as a string. -Code 4D de la méthode `today` : +4D code of `today` method: ```4d C_TEXT($0) @@ -75,9 +75,9 @@ In the web area, the 4D method can be called with the following syntax: $4d.today() ``` -La méthode 4D ne reçoit aucun paramètre mais elle retourne la valeur $0 à la fonction callback appelée par 4D après avoir exécuté la méthode. We want to display the date in the HTML page that is loaded by the web area. +The 4D method does not receive any parameters but it does return the value of $0 to the callback function called by 4D after the execution of the method. We want to display the date in the HTML page that is loaded by the web area. -Voici le code de la page HTML : +Here is the code of the HTML page: ```html @@ -96,15 +96,15 @@ $4d.today(function(dollarZero) ``` -#### Exemple 2 +#### Example 2 -La méthode projet 4D `calcSum` reçoit des paramètres (`$1...$n`) et retourne leur somme dans `$0` : +The 4D project method `calcSum` receives parameters (`$1...$n`) and returns their sum in `$0`: -Code 4D de la méthode `calcSum` : +4D code of `calcSum` method: ```4d - C_REAL(${1}) // reçoit n paramètres de type REEL - C_REAL($0) // retourne un Réel + C_REAL(${1}) // receives n REAL type parameters + C_REAL($0) // returns a Real C_LONGINT($i;$n) $n:=Count parameters For($i;1;$n) @@ -117,17 +117,17 @@ The JavaScript code run in the web area is: ```js $4d.calcSum(33, 45, 75, 102.5, 7, function(dollarZero) { - var result = dollarZero // le résultat est 262.5 + var result = dollarZero // result is 262.5 }); ``` -## Actions standard +## Standard actions -Quatre actions standard sont disponibles pour gérer automatiquement les zones Web : `Open Back URL`, `Open Next URL`, `Refresh Current URL` and `Stop Loading URL`. These actions can be associated with buttons or menu commands and allow quick implementation of basic web interfaces. Ces actions sont décrites dans [Actions standard](https://doc.4d.com/4Dv17R6/4D/17-R6/Standard-actions.300-4354791.en.html). +Four specific standard actions are available for managing web areas automatically: `Open Back URL`, `Open Next URL`, `Refresh Current URL` and `Stop Loading URL`. These actions can be associated with buttons or menu commands and allow quick implementation of basic web interfaces. These actions are described in [Standard actions](https://doc.4d.com/4Dv17R6/4D/17-R6/Standard-actions.300-4354791.en.html). -## Evénements formulaire +## Form events Specific form events are intended for programmed management of web areas, more particularly concerning the activation of links: @@ -147,33 +147,33 @@ In addition, web areas support the following generic form events: - `On Losing Focus` -## Notes d'utilisation des zones Web +## Web area rules -### Interface utilisateur +### User interface When the form is executed, standard browser interface functions are available to the user in the web area, which permit interaction with other form areas: - **Edit menu commands**: When the web area has the focus, the **Edit** menu commands can be used to carry out actions such as copy, paste, select all, etc., according to the selection. -- **Context menu**: It is possible to use the standard [context menu](properties_Entry.md#context-menu) of the system with the web area. L’affichage de ce menu peut également être contrôlé via la commande `WA SET PREFERENCE`. +- **Context menu**: It is possible to use the standard [context menu](properties_Entry.md#context-menu) of the system with the web area. Display of the context menu can be controlled using the `WA SET PREFERENCE` command. - **Drag and drop**: The user can drag and drop text, pictures and documents within the web area or between a web area and the 4D form objects, according to the 4D object properties. For security reasons, changing the contents of a web area by means of dragging and dropping a file or URL is not allowed by default. In this case, the cursor displays a "forbidden" icon ![](assets/en/FormObjects/forbidden.png). You have to use the `WA SET PREFERENCE` command to explicitly allow the dropping of URLs or files in the web area. -### Sous-formulaires +### Subforms For reasons related to window redrawing mechanisms, the insertion of a web area into a subform is subject to the following constraints: -- Le sous-formulaire ne doit pas pouvoir défiler, +- The subform must not be able to scroll - The limits of the web area must not exceed the size of the subform > Superimposing a web area on top of or beneath other form objects is not supported. -### Conflit Zone Web et serveur Web (Windows) +### Web Area and Web server conflict (Windows) In Windows, it is not recommended to access, via a web area, the Web server of the 4D application containing the area because this configuration could lead to a conflict that freezes the application. Of course, a remote 4D can access the Web server of 4D Server, but not its own web server. -### Plugins Web et applets Java +### Web plugins and Java applets The use of web plugins and Java applets is not recommended in web areas because they may lead to instability in the operation of 4D, particularly at the event management level. -### Insertion du protocole (macOS) -The URLs handled by programming in web areas in macOS must begin with the protocol. Par exemple, vous devez passer la chaîne "http://www.monsite.fr" et non uniquement "www.monsite.fr". +### Insertion of protocol (macOS) +The URLs handled by programming in web areas in macOS must begin with the protocol. For example, you need to pass the string "http://www.mysite.com" and not just "www.mysite.com". ## Access to web inspector @@ -196,16 +196,16 @@ To display the web inspector, you can either execute the `WA OPEN WEB INSPECTOR` For more information, refer to the description of the `WA SET PREFERENCE` command. ### Using the web inspector -Lorsque les paramétrages décrits ci-dessus sont effectués, vous disposez de nouvelles options telles que **Inspect Element** dans le menu contextuel de la zone. When you select this option, the web inspector window is displayed. +When you have done the settings as described above, you then have new options such as **Inspect Element** in the context menu of the area. When you select this option, the web inspector window is displayed. > The web inspector is included in the embedded web rendering engine. For a detailed description of the features of this debugger, refer to the documentation provided by the web rendering engine. -## Propriétés prises en charge +## Supported Properties -[Style de la bordure](properties_BackgroundAndBorder.md#border-line-style) - [Bas](properties_CoordinatesAndSizing.md#bottom) - [CSS Class](properties_Object.md#css-class) - [Menu contextuel](properties_Entry.md#context-menu) - [Hauteur](properties_CoordinatesAndSizing.md#height) - [Dim. horizontal](properties_ResizingOptions.md#horizontal-sizing) - [Gauche](properties_CoordinatesAndSizing.md#left) - [Méthode](properties_Action.md#method) - [Nom](properties_Object.md#object-name) - [Progression](properties_WebArea.md#progression) - [Droite](properties_CoordinatesAndSizing.md#right) - [Haut](properties_CoordinatesAndSizing.md#top) - [Type](properties_Object.md#type) - URL<13> - [Utiliser le moteur de rendu Web intégré](properties_WebArea.md#use-embedded-web-rendering-engine) - [Variable ou expression](properties_Object.md#variable-or-expression) - [Dim. vertical](properties_ResizingOptions.md#vertical-sizing) - [Visibilité](properties_Display.md#visibility) - [Largeur](properties_CoordinatesAndSizing.md#width)

    +[Border Line Style](properties_BackgroundAndBorder.md#border-line-style) - [Bottom](properties_CoordinatesAndSizing.md#bottom) - [Class](properties_Object.md#css-class) - [Context Menu](properties_Entry.md#context-menu) - [Height](properties_CoordinatesAndSizing.md#height) - [Horizontal Sizing](properties_ResizingOptions.md#horizontal-sizing) - [Left](properties_CoordinatesAndSizing.md#left) - [Method](properties_Action.md#method) - [Object Name](properties_Object.md#object-name) - [Progression](properties_WebArea.md#progression) - [Right](properties_CoordinatesAndSizing.md#right) - [Top](properties_CoordinatesAndSizing.md#top) - [Type](properties_Object.md#type) - [URL](properties_WebArea.md#url) - [Use embedded Web rendering engine](properties_WebArea.md#use-embedded-web-rendering-engine) - [Variable or Expression](properties_Object.md#variable-or-expression) - [Vertical Sizing](properties_ResizingOptions.md#vertical-sizing) - [Visibilty](properties_Display.md#visibility) - [Width](properties_CoordinatesAndSizing.md#width) From 191b991dd30f31205f27b5461be2edd899ad4920 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:17:20 +0100 Subject: [PATCH 054/260] New translations writeProArea_overview.md (French) --- .../fr/FormObjects/writeProArea_overview.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/writeProArea_overview.md b/website/translated_docs/fr/FormObjects/writeProArea_overview.md index 75038463774d8e..e249b6d5e2505e 100644 --- a/website/translated_docs/fr/FormObjects/writeProArea_overview.md +++ b/website/translated_docs/fr/FormObjects/writeProArea_overview.md @@ -1,19 +1,19 @@ --- id: writeProAreaOverview -title: Zone 4D Write Pro +title: 4D Write Pro area --- -4D Write Pro offers 4D users an advanced word-processing tool, fully integrated with your 4D application. En utilisant 4D Write Pro, vous pouvez rédiger des e-mails et/ou des lettres pré-configurés contenant des images, une signature, du texte formaté et des placeholders pour des variables dynamiques. Vous pouvez également générer dynamiquement des factures ou des rapports, contenant du texte et des images formatés. +4D Write Pro offers 4D users an advanced word-processing tool, fully integrated with your 4D application. Using 4D Write Pro, you can write pre-formatted emails and/or letters containing images, a scanned signature, formatted text and placeholders for dynamic variables. You can also create invoices or reports dynamically, including formatted text and images. ![](assets/en/FormObjects/writePro2.png) -## Utiliser des zones 4D Write Pro +## Using 4D Write Pro areas -Les zones 4D Write Pro sont documentées dans le manuel [4D Write Pro](https://doc.4d.com/4Dv17R6/4D/17-R6/4D-Write-Pro.100-4433851.fe.html). +4D Write Pro areas are documented in the [4D Write Pro Reference](https://doc.4d.com/4Dv17R6/4D/17-R6/4D-Write-Pro.100-4433851.fe.html) manual. -## Propriétés prises en charge +## Supported Properties [Auto Spellcheck](properties_Entry.md#auto-spellcheck) - [Border Line Style](properties_BackgroundAndBorder.md#border-line-style) - [Bottom](properties_CoordinatesAndSizing.md#bottom) - [Class](properties_Object.md#css-class) - [Context Menu](properties_Entry.md#context-menu) - [Enterable](properties_Entry.md#enterable) - [Focusable](properties_Entry.md#focusable) - [Height](properties_CoordinatesAndSizing.md#height) - [Hide focus rectangle](properties_Appearance.md#hide-focus-rectangle) - [Horizontal Scroll Bar](properties_Appearance.md#horizontal-scroll-bar) - [Horizontal Sizing](properties_ResizingOptions.md#horizontal-sizing) - [Keyboard Layout](properties_Entry.md#keyboard-layout) - [Left](properties_CoordinatesAndSizing.md#left) - [Method](properties_Action.md#method) - [Object Name](properties_Object.md#object-name) - [Print Variable Frame](properties_Print.md#print-frame) - [Resolution](properties_Appearance.md#resolution) - [Right](properties_CoordinatesAndSizing.md#right) - [Selection always visible](properties_Entry.md#selection-always-visible) - [Show background](properties_Appearance.md#show-background) - [Show footers](properties_Appearance.md#show-footers) - [Show Formula Bar](properties_Appearance.md#show-formula-bar) - [Show headers](properties_Appearance.md#show-headers) - [Show hidden characters](properties_Appearance.md#show-hidden-characters) - [Show horizontal ruler](properties_Appearance.md#show-horizontal-ruler) - [Show HTML WYSIWYG](properties_Appearance.md#show-html-wysiwyg) - [Show page frame](properties_Appearance.md#show-page-frame) - [Show references](properties_Appearance.md#show-references) - [Show vertical ruler](properties_Appearance.md#show-vertical-ruler) - [Type](properties_Object.md#type) - [User Interface](properties_Appearance.md#user-interface) - [Vertical Sizing](properties_ResizingOptions.md#vertical-sizing) - [Vertical Scroll Bar](properties_Appearance.md#vertical-scroll-bar) - [View mode](properties_Appearance.md#view-mode) - [Visibility](properties_Display.md#visibility) - [Width](properties_CoordinatesAndSizing.md#width) - [Zoom](properties_Appearance.md#zoom) From ddae2c6e00db8bd788d9affdc5acc7f96e2ce94e Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:17:22 +0100 Subject: [PATCH 055/260] New translations Installation.md (French) --- .../fr/GettingStarted/Installation.md | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/website/translated_docs/fr/GettingStarted/Installation.md b/website/translated_docs/fr/GettingStarted/Installation.md index e29f8c092f4200..a37fe892d1d25a 100644 --- a/website/translated_docs/fr/GettingStarted/Installation.md +++ b/website/translated_docs/fr/GettingStarted/Installation.md @@ -3,46 +3,46 @@ id: installation title: Installation --- -Bienvenue à 4D ! Cette page regroupe toutes les informations nécessaires sur l'installation et le lancement de votre produit 4D. +Welcome to 4D! On this page, you will find all of the necessary information about installing and launching your 4D product. -## Configuration requise +## Required configuration -La page [Téléchargements](https://us.4d.com/product-download) dut site de 4D fournit des informations sur les pré-requis macOS / Windows nécessaires à la gamme 4D. +The [Product Download](https://us.4d.com/product-download) page on the 4D website provides information about the minimum macOS / Windows system requirements for your 4D series. -Des détails techniques supplémentaires sont disponibles sur la [page Ressources](https://us.4d.com/resources/feature-release) du site web de 4D. +Additional technical details are available on the 4D website's [Resources page](https://us.4d.com/resources/feature-release). -## Installation sur disque +## Installation on disk -Les produits 4D sont installés à partir du site web de 4D : +4D products are installed from the 4D website: -1. Connectez-vous au site internet de 4D puis consultez la page [Téléchargements](https://us.4d.com/product-download). +1. Connect to the 4D website and go to the [Downloads](https://us.4d.com/product-download) page. -2. Cliquez sur le lien de téléchargement du produit 4D de votre choix, puis suivez les instructions qui s'affichent à l'écran. +2. Click on the download link for your 4D product and follow the on-screen instructions. -## Connexion +## Sign in -Une fois l'installation terminée, vous pouvez lancer 4D et vous connecter. Pour ce faire, double-cliquez sur l'icône du produit 4D. +Once you have completed the installation, you can start 4D and sign in. To do so, double-click on the 4D product icon. ![](assets/en/getStart/logo4d.png) -Apparaît ensuite l'assistant de bienvenue : +The Welcome Wizard then appears: ![](assets/en/getStart/welcome2.png) -- Si vous souhaitez découvrir et explorer 4D, cliquez sur le lien **essai gratuit**. Il vous sera demandé de vous connecter ou de créer un compte 4D. +- If you want to discover and explore 4D, click on the **free trial** link. You will only be asked to sign in or to create a 4D account. -- Si vous possédez déjà un compte 4D, cliquez sur le lien **Se connecter** sur le côté supérieur droit de l'assistant d'installation et saisissez les informations relatives à votre compte. Toute licence 4D préalablement enregistrée est automatiquement mise à jour (ou les packs d'extension supplémentaires sont chargés) sur votre machine. +- If you already have a 4D account, click on the **Sign in** link in the upper right side of the Welcome Wizard dialog and enter your account information. Any already registered 4D licenses are automatically updated (or additional expansion packs loaded) on your machine. -Élargissez la zone **Ouvrir ou créer un projet d'application** et sélectionnez l'action que vous souhaitez exécuter : +Expand the **Open or create project application** area and select the action you want to perform: -- **Connectez-vous au 4D Server** - utilisez 4D en tant que client et connectez--vous à une application déjà chargée par 4D Server. +- **Connect to 4D Server** - use 4D as a remote client and connect to an application that is already loaded by 4D Server. -- **Ouvrez un projet d'application local** - chargez un projet d'application existant stocké sur votre disque. +- **Open a local application project** - load an existing application project stored on your disk. -- **Créez un nouveau projet d'application** - créez un nouveau projet d'application vide sur votre disque. +- **Create a new application project** - create a new, empty application project on your disk. -Nous vous souhaitons une excellente expérience 4D ! +Enjoy your 4D experience! From 50a6e58ed38d6b380472e2c3899f07fb2a8d7721 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:17:24 +0100 Subject: [PATCH 056/260] New translations analysis.md (French) --- website/translated_docs/fr/MSC/analysis.md | 76 +++++++++++----------- 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/website/translated_docs/fr/MSC/analysis.md b/website/translated_docs/fr/MSC/analysis.md index e77fe19dcc4f98..dfe013a5039a16 100644 --- a/website/translated_docs/fr/MSC/analysis.md +++ b/website/translated_docs/fr/MSC/analysis.md @@ -1,43 +1,43 @@ --- id: analysis -title: Page Analyse d'activités -sidebar_label: Page Analyse d'activités +title: Activity analysis Page +sidebar_label: Activity analysis Page --- -La page Analyse d'activités du CSM permet de visualiser le contenu du fichier d’historique courant. This function is useful for parsing the use of an application or detecting the operation(s) that caused errors or malfunctions. In the case of an application in client-server mode, it allows verifying operations performed by each client machine. -> Il est également possible de revenir en arrière parmi les opérations effectuées sur les données de la base. Pour plus d’informations sur ce point, reportez-vous à la section [Page Retour](rollback.md) arrière. - -![](assets/fr/MSC/MSC_analysis.png) - -Chaque opération élémentaire enregistrée dans le fichier d’historique apparaît sous forme d’une ligne. Les colonnes fournissent diverses informations concernant l’opération. Vous pouvez réorganiser les colonnes comme vous le souhaitez en cliquant sur leur en-tête. - -Les informations affichées permettent d’identifier la source et le contexte de chaque opération : - -- **Opération** : numéro de séquence de l’opération dans le fichier d’historique. -- **Action** : type d’opération effectuée. Cette colonne peut contenir les opérations suivantes : - - Ouverture du fichier de données : ouverture d’un fichier de données. - - Fermeture du fichier de données : fermeture du fichier de données ouvert. - - Création d’un contexte : création d’un process définissant un contexte d’exécution. - - Fermeture d’un contexte : fermeture d’un process. - - Ajout : création et stockage d’un enregistrement. - - Ajout d’un BLOB : stockage d’un BLOB dans un champ BLOB. - - Suppression : suppression d’un enregistrement. - - Modification : modification d’un enregistrement. - - Début de transaction : transaction démarrée. - - Validation de transaction : transaction validée. - - Annulation de transaction : transaction annulée. - - Contexte de mise à jour : modification des données supplémentaires (ex : un appel à `CHANGE CURRENT USER` ou `SET USER ALIAS`). - -- **Table** : table à laquelle appartient l’enregistrement ajouté/supprimé/modifié ou le BLOB. -- **Clé primaire/BLOB** : contenu de la clé primaire de l'enregistrement (lorsque la clé primaire est composée de plusieurs champs, les valeurs sont séparées par des points-virgules), ou numéro de séquence du BLOB impliqué dans l’opération. -- **Process** : numéro interne du process dans lequel l’opération a été effectuée. Ce numéro interne correspond au contexte de l’opération. Taille : taille en octets des données traitées par l’opération. -- **Taille** : taille (en octets) des données traitées par l’opération. -- **Date et Heure** : date et heure à laquelle l’opération a été effectuée. -- **4D User**: 4D user name of the user that performed the operation. Si un alias est défini pour l'utilisateur, l'alias s'affiche à la place du nom d'utilisateur 4D. -- **System User**: System name of the user that performed the operation. Si un alias est défini pour l'utilisateur, l'alias s'affiche à la place du nom d'utilisateur 4D. -- **Valeurs** : valeurs des champs de l’enregistrement en cas d’ajout ou de modification. Les valeurs sont séparées par des “;”. Seules les valeurs représentables sous forme alphanumérique sont affichées. - ***Note** : Si la base est chiffrée et si aucune clé de données valide correspondant au fichier d'historique n'a été fournie, les valeurs chiffrées ne sont pas affichées dans cette colonne.* -- **Enregistrements** : Numéro de l’enregistrement. - -Click on **Analyze** to update the contents of the current log file of the selected application (named by default dataname.journal). The Browse button can be used to select and open another log file for the application. Le bouton **Exporter...** vous permet d’exporter le contenu du fichier sous forme de texte. +The Activity analysis page allows viewing the contents of the current log file. This function is useful for parsing the use of an application or detecting the operation(s) that caused errors or malfunctions. In the case of an application in client-server mode, it allows verifying operations performed by each client machine. +> It is also possible to rollback the operations carried out on the data of the database. For more information, refer to [Rollback page](rollback.md). + +![](assets/en/MSC/MSC_analysis.png) + +Every operation recorded in the log file appears as a row. The columns provide various information on the operation. You can reorganize the columns as desired by clicking on their headers. + +This information allows you to identify the source and context of each operation: + +- **Operation**: Sequence number of operation in the log file. +- **Action**: Type of operation performed on the data. This column can contain one of the following operations: + - Opening of Data File: Opening of a data file. + - Closing of Data File: Closing of an open data file. + - Creation of a Context: Creation of a process that specifies an execution context. + - Closing of a Context: Closing of process. + - Addition: Creation and storage of a record. + - Adding a BLOB: Storage of a BLOB in a BLOB field. + - Deletion: Deletion of a record. + - Modification: Modification of a record. + - Start of Transaction: Transaction started. + - Validation of Transaction: Transaction validated. + - Cancellation of Transaction: Transaction cancelled. + - Update context: Change in extra data (e.g. a call to `CHANGE CURRENT USER` or `SET USER ALIAS`). + +- **Table**: Table to which the added/deleted/modified record or BLOB belongs. +- **Primary Key/BLOB**: contents of the primary key for each record (when the primary key consists of several fields, the values are separated by semi-colons) or sequence number of the BLOB involved in the operation. +- **Process**: Internal number of process in which the operation was carried out. This internal number corresponds to the context of the operation. +- **Size**: Size (in bytes) of data processed by the operation. +- **Date and Hour**: Date and hour when the operation was performed. +- **System User**: System name of the user that performed the operation. In client-server mode, the name of the client-side machine is displayed; in single-user mode, the session name of the user is displayed. +- **4D User**: 4D user name of the user that performed the operation. If an alias is defined for the user, the alias is displayed instead of the 4D user name. +- **Values**: Values of fields for the record in the case of addition or modification. The values are separated by “;”. Only values represented in alphanumeric form are displayed. + ***Note:** If the database is encrypted and no valid data key corresponding to the open log file has been provided, encrypted values are not displayed in this column.* +- **Records**: Record number. + +Click on **Analyze** to update the contents of the current log file of the selected application (named by default dataname.journal). The Browse button can be used to select and open another log file for the application. The **Export...** button can be used to export the contents of the file as text. From 9a2bf83ebeee63f6ea5a9a368c6ca0efc19cd172 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:17:26 +0100 Subject: [PATCH 057/260] New translations compact.md (French) --- website/translated_docs/fr/MSC/compact.md | 76 +++++++++++------------ 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/website/translated_docs/fr/MSC/compact.md b/website/translated_docs/fr/MSC/compact.md index a702160cd1567a..6b5abb40ca8ab4 100644 --- a/website/translated_docs/fr/MSC/compact.md +++ b/website/translated_docs/fr/MSC/compact.md @@ -1,71 +1,71 @@ --- id: compact -title: Page compactage -sidebar_label: Page compactage +title: Compact Page +sidebar_label: Compact Page --- -Cette page permet d’accéder aux fonctions de compactage du fichier de données et de structure. +You use this page to access the data file compacting functions. -## Pourquoi compacter ? +## Why compact your files? -Le compactage d'un fichier répond à deux types de besoins : +Compacting files meets two types of needs: -- **Réduction de taille et optimisation des fichiers** : les fichiers peuvent comporter des emplacements inutilisés (des “trous”). En effet, lorsque vous supprimez des enregistrements, des formulaires, etc., l’emplacement qu’ils occupaient précédemment dans le fichier devient vacant. 4D réutilise ces emplacements vides lorsque c’est possible, mais la taille des données étant variable, les suppressions ou modifications successives génèrent inévitablement des espaces inutilisables pour le programme. Il en va de même lorsqu’une grande quantité de données vient d’être supprimée : les emplacements vides restent inaffectés dans le fichier. Le rapport entre la taille du fichier de données et l’espace réellement utilisé pour les données est le taux d’occupation des données. Un taux trop faible peut entraîner, outre un gaspillage de place, une dégradation des performances de la base. La fonction de compactage permet de réorganiser et d’optimiser le stockage des données afin de faire disparaître les “trous”. Les zones “Informations” résument les données relatives à la fragmentation des fichiers et suggèrent les opérations à effectuer. Les onglets de la page [Informations](information.md#data) du CSM indiquent la fragmentation courante des fichiers de la base. +- **Reducing size and optimization of files**: Files may contain unused spaces (“holes”). In fact, when you delete records, the space that they occupied previously in the file becomes empty. 4D reuses these empty spaces whenever possible, but since data size is variable, successive deletions or modifications will inevitably generate unusable space for the program. The same goes when a large quantity of data has just been deleted: the empty spaces remain unassigned in the file. The ratio between the size of the data file and the space actually used for the data is the occupation rate of the data. A rate that is too low can lead, in addition to a waste of space, to the deterioration of database performance. Compacting can be used to reorganize and optimize storage of the data in order to remove the “holes”. The “Information” area summarizes the data concerning the fragmentation of the file and suggests operations to be carried out. The [Data](information.md#data) tab on the “Information” page of the MSC indicates the fragmentation of the current data file. -- **Réenregistrement intégral des données** en appliquant le formatage courant défini dans le fichier de structure. Ce principe est utile lorsque les données d'une même table ont été stockées dans différents formats, par exemple après un changement dans la structure de la base. -> Le compactage n’est disponible qu’en mode maintenance. Si vous tentez d’effectuer cette opération en mode standard, une boîte de dialogue d’alerte vous prévient que l'application va être fermée puis relancée en mode maintenance. Il est possible de compacter un fichier de données non ouvert par l'application (cf. paragraphe [Compacter les enregistrements et les index](#compact-records-and-indexes) ci-dessous). +- **Complete updating of data** by applying the current formatting set in the structure file. This is useful when data from the same table were stored in different formats, for example after a change in the database structure. +> Compacting is only available in maintenance mode. If you attempt to carry out this operation in standard mode, a warning dialog box will inform you that the application will be closed and restarted in maintenance mode. You can compact a data file that is not opened by the application (see [Compact records and indexes](#compact-records-and-indexes) below). -## Le compactage standard +## Standard compacting -Pour démarrer directement le compactage du fichier de données ou de structure, cliquez sur le bouton correspondant dans la fenêtre du CSM. +To directly begin the compacting of the data file, click on the compacting button in the MSC window. ![](assets/en/MSC/MSC_compact.png) -> Le compactage entraînant la duplication du fichier d’origine, le bouton est désactivé si la place sur le disque contenant le fichier est insuffisante. +> Since compacting involves the duplication of the original file, the button is disabled when there is not adequate space available on the disk containing the file. -Cette opération défragmente le fichier principal ainsi que les éventuels fichiers d’index. 4D effectue une copie des fichiers d’origine et les place dans un dossier nommé **Replaced Files (Compacting)**, créé à côté du fichier d’origine. Si vous effectuez plusieurs compactages, un nouveau dossier est créé à chaque fois. Il est nommé “Replaced Files (Compacting)_1”, “Replaced Files (Compacting)_2”, etc. Vous pouvez modifier le dossier dans lequel les fichiers d’origine sont sauvegardés via le mode avancé. +This operation compacts the main file as well as any index files. 4D copies the original files and puts them in a folder named **Replaced Files (Compacting)**, which is created next to the original file. If you have carried out several compacting operations, a new folder is created each time. It will be named “Replaced Files (Compacting)_1”, “Replaced Files (Compacting)_2”, and so on. You can modify the folder where the original files are saved using the advanced mode. -A l’issue de l’opération, les fichiers défragmentés remplacent automatiquement les fichiers d’origine. L'application est immédiatement opérationnelle sans aucune autre manipulation. -> Lorsque la base est chiffrée, le compactage comprend le chiffrement et le déchiffrement et requiert ainsi la clé de chiffrement des données courante. Si aucune clé de chiffrement valide n'a encore été fournie, une boîte de dialogue s'affiche pour vous demander de saisir la phrase secrète ou la clé des données. +When the operation is completed, the compacted files automatically replace the original files. The application is immediately operational without any further manipulation. +> When the database is encrypted, compacting includes decryption and encryption steps and thus, requires the current data encryption key. If no valid data key has already been provided, a dialog box requesting the passphrase or the data key is displayed. -**Attention :** Chaque compactage entraîne la duplication du fichier d’origine et donc l’augmentation de la taille du dossier de l’application. Il est important de tenir compte de ce mécanisme (notamment sous macOS où les applications 4D apparaissent sous forme de packages) pour que l’application ne grossisse pas de façon excessive. Une intervention manuelle à l’intérieur du package peut être utile afin de supprimer les copies des fichiers d’origine. +**Warning:** Each compacting operation involves the duplication of the original file which increases the size of the application folder. It is important to take this into account (especially under macOS where 4D applications appear as packages) so that the size of the application does not increase excessively. Manually removing the copies of the original file inside the package can be useful in order to keep the package size down. -## Voir le compte rendu +## Open log file -Une fois le compactage terminé, 4D génère un fichier de compte-rendu dans le dossier Logs du projet. Ce fichier liste l’ensemble des opérations qui ont été menées. Il est créé au format xml et est nommé *ApplicationName**_Compact_Log_yyyy-mm-dd hh-mm-ss.xml*" où : +After compacting is completed, 4D generates a log file in the Logs folder of the project. This file allows you to view all the operations carried out. It is created in XML format and named: *ApplicationName**_Compact_Log_yyyy-mm-dd hh-mm-ss.xml*" where: -- *ApplicationName* est le nom du fichier de structure sans extension, par exemple "Factures", -- *aaaa-mm-jj hh-mm-ss* est l'horodatage du fichier, basé sur la date et l'heure système locales au moment du lancement de l'opération de vérification, par exemple "2019-02-11 15-20-45". +- *ApplicationName* is the name of the project file without any extension, for example "Invoices", +- *yyyy-mm-dd hh-mm-ss* is the timestamp of the file, based upon the local system time when the maintenance operation was started, for example "2019-02-11 15-20-45". -Lorsque vous cliquez sur le bouton **Voir le compte rendu**, 4D affiche le fichier de compte-rendu le plus récent dans le navigateur par défaut de l’ordinateur. +When you click on the **Open log file** button, 4D displays the most recent log file in the default browser of the machine. -## Mode avancé +## Advanced mode -La page Compactage comporte un bouton **Avancé**, permettant d’accéder à une page d’options pour le compactage des fichiers de données et de structure. +The Compact page contains an **Advanced>** button, which can be used to access an options page for compacting data file. -### Compacter les enregistrements et les index +### Compact records and indexes -La zone **Compacter les enregistrements et les index** affiche le chemin d’accès du fichier de données courant ainsi qu’un bouton **[...]** permettant de désigner un autre fichier de données. Lorsque vous cliquez sur ce bouton, une boîte de dialogue standard d’ouverture de documents s’affiche, vous permettant de désigner le fichier de données à compacter. Vous devez sélectionner un fichier de données compatible avec le fichier de structure ouvert. Une fois la boîte de dialogue validée, le chemin d’accès du fichier à compacter est indiqué dans la fenêtre. +The **Compact records and indexes** area displays the pathname of the current data file as well as a **[...]** button that can be used to specify another data file. When you click on this button, a standard Open document dialog box is displayed so that you can designate the data file to be compacted. You must select a data file that is compatible with the open structure file. Once this dialog box has been validated, the pathname of the file to be compacted is indicated in the window. -Le second bouton **[...]** permet de désigner un autre emplacement pour les sauvegardes des fichiers originaux effectuées avant compactage. Cette option permet notamment de compacter des fichiers volumineux en utilisant différents disques. +The second **[...]** button can be used to specify another location for the original files to be saved before the compacting operation. This option can be used more particularly when compacting voluminous files while using different disks. -### Forcer la mise à jour des enregistrements +### Force updating of the records -Lorsque cette option est cochée, 4D réécrit chaque enregistrement de chaque table lors de l’opération de compactage, en fonction de sa description en structure. Lorsque l’option n’est pas cochée, 4D réorganise uniquement le stockage des données sur le disque. Cette option est utile dans les cas suivants : +When this option is checked, 4D rewrites every record for each table during the compacting operation, according to its description in the structure. If this option is not checked, 4D just reorganizes the data storage on disk. This option is useful in the following cases: -- Lorsque des modifications de types de champs ont été apportées à la structure d’une application après que des données ont été saisies. Par exemple, vous pouvez avoir changé le type d’un champ Entier long en Réel. 4D autorise même des modifications entre des types très différents (avec risques de pertes de données), par exemple un champ Réel peut être changé en Texte et inversement. Dans ce cas, 4D ne convertit pas rétroactivement les données déjà saisies, elles ne sont converties que si les enregistrements sont chargés puis sauvegardés. L’option permet de forcer la conversion de toutes les données. +- When field types are changed in the application structure after data were entered. For example, you may have changed a Longint field to a Real type. 4D even allows changes between two very different types (with risks of data loss), for instance a Real field can be changed to Text and vice versa. In this case, 4D does not convert data already entered retroactively; data is converted only when records are loaded and then saved. This option forces all data to be converted. -- Lorsqu’une option de stockage externe des données de type Texte, Image ou BLOB a été modifiée après que des données aient été saisies. Ce cas peut notamment se produire après conversion d’une base en version 4D antérieure à la v13. Comme pour le cas du retypage ci-dessus, 4D ne modifie pas rétroactivement les données déjà saisies. Pour cela, vous pouvez forcer la mise à jour des enregistrements afin d’appliquer le nouveau mode de stockage aux enregistrements déjà saisis. +- When an external storage option for Text, Picture or BLOB data has been changed after data were entered. This can happen when databases are converted from a version prior to v13. As is the case with the retyping described above, 4D does not convert data already entered retroactively. To do this, you can force records to be updated in order to apply the new storage mode to records that have already been entered. -- Lorsque des champs ou des tables ont été supprimé(e)s. Dans ce cas, le compactage avec mise à jour des enregistrements permet de récupérer la place de ces données supprimées et donc de réduire la taille du fichier. -> La sélection de cette option entraîne la mise à jour de tous les index. +- When tables or fields were deleted. In this case, compacting with updating of records recovers the space of these removed data and thus reduces file size. +> All the indexes are updated when this option is selected. -### Compacter la table d’adresses -(option accessible uniquement lorsque la précédente est cochée) +### Compact address table +(option only active when preceding option is checked) -Cette option provoque la reconstruction complète de la table d’adresses des enregistrements au moment du compactage. Cette opération permet d’optimiser la taille de la table d’adresses. Elle est principalement utile dans les bases de données où de très nombreux enregistrements ont été créés puis supprimés. Dans les autres cas, l’optimisation ne sera pas déterminante. +This option completely rebuilds the address table for the records during compacting. This optimizes the size of the address table and is mainly used for databases where large volumes of data were created and then deleted. In other cases, optimization is not a decisive factor. -A noter que cette option ralentit le compactage de façon conséquente et qu’elle rend invalides les ensembles sauvegardés via la commande `SAVE SET`. Il est d’ailleurs fortement recommandé dans ce cas de supprimer les ensembles sauvegardés car leur utilisation peut conduire à des sélections de données erronées. -> - Le compactage tient compte des enregistrements des tables placées dans la corbeille. La présence d’un grand nombre d’enregistrements dans la corbeille peut constituer un facteur de ralentissement supplémentaire pour l’opération. -> - L'utilisation de cette option rend la table d'adresses, et donc la base de données, incompatibles avec le fichier d'historique courant (s'il en existe un). Il sera automatiquement sauvegardé et un nouveau fichier d'historique devra être créé au prochain lancement de l'application. -> - Vous pouvez déterminer si la table d'adresses a besoin d'être compactée en comparant sa taille avec le nombre total d'enregistrements dans la Page [Informations](information.md) du CSM. +Note that this option substantially slows compacting and invalidates any sets saved using the `SAVE SET` command. Moreover, we strongly recommend deleting saved sets in this case because their use can lead to selections of incorrect data. +> - Compacting takes records of tables that have been put into the Trash into account. If there are a large number of records in the Trash, this can be an additional factor that may slow down the operation. +> - Using this option makes the address table, and thus the database, incompatible with the current journal file (if there is one). It will be saved automatically and a new journal file will have to be created the next time the application is launched. +> - You can decide if the address table needs to be compacted by comparing the total number of records and the address table size in the [Information](information.md) page of the MSC. From a391c8db1e494688e015a886200a092c9120e320 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:17:28 +0100 Subject: [PATCH 058/260] New translations encrypt.md (French) --- website/translated_docs/fr/MSC/encrypt.md | 108 +++++++++++----------- 1 file changed, 54 insertions(+), 54 deletions(-) diff --git a/website/translated_docs/fr/MSC/encrypt.md b/website/translated_docs/fr/MSC/encrypt.md index cfe8ba1343375c..0dc76b76e7259c 100644 --- a/website/translated_docs/fr/MSC/encrypt.md +++ b/website/translated_docs/fr/MSC/encrypt.md @@ -1,94 +1,94 @@ --- id: encrypt -title: Page chiffrement -sidebar_label: Page chiffrement +title: Encrypt Page +sidebar_label: Encrypt Page --- -Vous pouvez vous aider de cette page pour chiffrer ou *déchiffrer* (i.e. enlever le chiffrement) le fichier de données, en fonction du statut de l'attribut **Chiffrable** défini pour chaque table de la base. For detailed information about data encryption in 4D, please refer to the "Encrypting data" section in the *Design Reference* manual. +You can use this page to encrypt or *decrypt* (i.e. remove encryption from) the data file, according to the **Encryptable** attribute status defined for each table in the database. For detailed information about data encryption in 4D, please refer to the "Encrypting data" section in the *Design Reference* manual. -Un nouveau dossier est créé à chaque opération de chiffrement/déchiffrement. Il est nommé "Replaced Files (Encrypting) *yyyy-mm-dd hh-mm-ss*" ou "Replaced Files (Decrypting) *yyyy-mm-dd hh-mm-ss*". -> Le chiffrement est disponible uniquement en [mode maintenance](overview.md#display-in-maintenance-mode). Si vous tentez d’effectuer cette opération en mode standard, une boîte de dialogue d’alerte vous prévient que l'application va être fermée puis relancée en mode maintenance +A new folder is created each time you perform an encryption/decryption operation. It is named "Replaced Files (Encrypting) *yyyy-mm-dd hh-mm-ss*> or "Replaced Files (Decrypting) *yyyy-mm-dd hh-mm-ss*". +> Encryption is only available in [maintenance mode](overview.md#display-in-maintenance-mode). If you attempt to carry out this operation in standard mode, a warning dialog will inform you that the application will be closed and restarted in maintenance mode -**Attention :** -- Le chiffrement d'un fichier de données est une opération de longue durée. Un indicateur de progression de l'opération s'affiche (et peut être interrompu par l'utilisateur). À noter également que le chiffrement d'une application comprend toujours une étape de compactage. -- Chaque opération de chiffrement génère une copie du fichier de données, ce qui augmente la taille du dossier de l'application. Il est important de prendre cela en considération (notamment sous macOS, où les applications 4D apparaissent sous forme de paquet) afin de ne pas augmenter excessivement la taille de l'application. Le déplacement ou la suppression manuels des copies du fichier original dans le paquet peut aider à réduire la taille du paquet. +**Warning:** +- Encrypting a data file is a lengthy operation. It displays a progress indicator (which could be interrupted by the user). Note also that an application encryption operation always includes a compacting step. +- Each encryption operation produces a copy of the data file, which increases the size of the application folder. It is important to take this into account (especially in macOS where 4D applications appear as packages) so that the size of the application does not increase excessively. Manually moving or removing the copies of the original file inside the package can be useful in order to minimize the package size. -## Chiffrer des données pour la première fois -Trois étapes sont nécessaires pour effectuer le tout premier chiffrement de vos données à l'aide du CSM : +## Encrypting data for the first time +Encrypting your data for the first time using the MSC requires the following steps: -1. Dans l'éditeur de structure, cochez l'attribut **Chiffrable** pour chaque table dont vous souhaitez chiffrer les données. Consultez la section "Propriétés des tables". -2. Ouvrez la page Chiffrement du CSM. If you open the page without setting any tables as **Encryptable**, the following message is displayed in the page: ![](assets/en/MSC/MSC_encrypt1.png) Otherwise, the following message is displayed: ![](assets/en/MSC/MSC_encrypt2.png)

    This means that the **Encryptable** status for at least one table has been modified and the data file still has not been encrypted. **Note : **Le même message s'affiche lorsque le statut **Chiffrable** a été modifié dans un fichier de données déjà chiffré ou après le déchiffrement d'un fichier de données (voir ci-dessous). -3. Cliquez sur le bouton de Chiffrement. +1. In the Structure editor, check the **Encryptable** attribute for each table whose data you want to encrypt. See the "Table properties" section. +2. Open the Encrypt page of the MSC. If you open the page without setting any tables as **Encryptable**, the following message is displayed in the page: ![](assets/en/MSC/MSC_encrypt1.png) Otherwise, the following message is displayed: ![](assets/en/MSC/MSC_encrypt2.png)

    This means that the **Encryptable** status for at least one table has been modified and the data file still has not been encrypted. **Note: **The same message is displayed when the **Encryptable** status has been modified in an already encrypted data file or after the data file has been decrypted (see below). +3. Click on the Encrypt picture button. ![](assets/en/MSC/MSC_encrypt3.png) - Vous serez ensuite invité à saisir une phrase secrète pour votre fichier de données : ![](assets/fr/MSC/MSC_encrypt4.png) La phrase secrète est utilisée pour générer la clé de chiffrement des données. Une phrase secrète est une version plus sécurisée d'un mot de passe et peut contenir un grand nombre de caractères. For example, you could enter a passphrases such as "We all came out to Montreux" or "My 1st Great Passphrase!!" The security level indicator can help you evaluate the strength of your passphrase: ![](assets/en/MSC/MSC_encrypt5.png) (deep green is the highest level) -4. Tapez sur Entrée pour confirmer votre phrase secrète sécurisée. + You will be prompted to enter a passphrase for your data file: ![](assets/en/MSC/MSC_encrypt4.png) The passphrase is used to generate the data encryption key. A passphrase is a more secure version of a password and can contain a large number of characters. For example, you could enter a passphrases such as "We all came out to Montreux" or "My 1st Great Passphrase!!" The security level indicator can help you evaluate the strength of your passphrase: ![](assets/en/MSC/MSC_encrypt5.png) (deep green is the highest level) +4. Enter to confirm your secured passphrase. -Le processus de chiffrement est alors lancé. If the MSC was opened in standard mode, the application is reopened in maintenance mode. +The encrypting process is then launched. If the MSC was opened in standard mode, the application is reopened in maintenance mode. -4D propose de sauvegarder la clé de chiffrement (voir le paragraphe [Sauvegarder la clé de chiffrement](#saving-the-encryption-key) ci-dessous). Vous pouvez la sauvegarder à ce moment précis ou bien ultérieurement. Vous pouvez également ouvrir le fichier d'historique du chiffrement. +4D offers to save the encryption key (see [Saving the encryption key](#saving-the-encryption-key) below). You can do it at this moment or later. You can also open the encryption log file. -Si le processus de chiffrement est réussi, la page Chiffrement affiche les boutons Opérations de maintenance liées au chiffrement. +If the encryption process is successful, the Encrypt page displays Encryption maintenance operations buttons. -**Attention :** Durant l'opération de chiffrement, 4D créé un nouveau fichier de données vide et y insère des données à partir du fichier de données original. Les enregistrements correspondant aux tables "chiffrées" sont chiffrés puis copiés ; les autres enregistrements sont uniquement copiés (une opération de compactage est également exécutée). Si l'opération est réussie, le fichier de données original est déplacé vers un dossier "Replaced Files (Encrypting)". If you intend to deliver an encrypted data file, make sure to move/remove any unencrypted data file from the application folder beforehand. +**Warning:** During the encryption operation, 4D creates a new, empty data file and fills it with data from the original data file. Records belonging to "encryptable" tables are encrypted then copied, other records are only copied (a compacting operation is also executed). If the operation is successful, the original data file is moved to a "Replaced Files (Encrypting)" folder. If you intend to deliver an encrypted data file, make sure to move/remove any unencrypted data file from the application folder beforehand. -## Opérations de maintenance liées au chiffrement -When an application is encrypted (see above), the Encrypt page provides several encryption maintenance operations, corresponding to standard scenarios. ![](assets/fr/MSC/MSC_encrypt6.png) +## Encryption maintenance operations +When an application is encrypted (see above), the Encrypt page provides several encryption maintenance operations, corresponding to standard scenarios. ![](assets/en/MSC/MSC_encrypt6.png) -### Fournir la clé de chiffrement des données actuelle -Pour des raisons de sécurité, toutes les opérations de maintenance liées au chiffrement nécessitent la clé de chiffrement des données actuelle. +### Providing the current data encryption key +For security reasons, all encryption maintenance operations require that the current data encryption key be provided. -- Si la clé de chiffrement des données est déjà chargée dans le trousseau 4D(1), elle est automatiquement réutilisée par 4D. -- Si la clé de chiffrement des données n'est pas identifiée, vous devez la fournir. La boîte de dialogue suivante s'affiche : ![](assets/fr/MSC/MSC_encrypt7.png) +- If the data encryption key is already loaded in the 4D keychain(1), it is automatically reused by 4D. +- If the data encryption key is not found, you must provide it. The following dialog is displayed: ![](assets/en/MSC/MSC_encrypt7.png) -À ce stade, deux options s'offrent à vous : -- entrer la phrase secrète actuelle(2) et cliquer sur **OK**. OU -- connecter un appareil tel qu'une clé USB et cliquer sur le bouton **Scanner les disques**. +At this step, you have two options: +- enter the current passphrase(2) and click **OK**. OR +- connect a device such as a USB key and click the **Scan devices** button. -(1) Le trousseau de 4D stocke toutes les clés de chiffrement de données valides saisies durant la session d'application session. -(2) Le mot de passe actuel correspond au mot de passe utilisé pour générer la clé de chiffrement actuelle. +(1) The 4D keychain stores all valid data encrpytion keys entered during the application session. +(2) The current passphrase is the passphrase used to generate the current encryption key. -Dans tous les cas, si des informations valides sont fournies, 4D redémarre en mode maintenance (si ce n'est pas déjà le cas) et exécute l'opération. +In all cases, if valid information is provided, 4D restarts in maintenance mode (if not already the case) and executes the operation. -### Re-chiffrer les données à l'aide de la clé de chiffrement actuelle +### Re-encrypt data with the current encryption key -Cette opération est utile lorsque l'attribut **Chiffrable** a été modifié pour une ou plusieurs tables contenant des données. Dans ce cas, afin d'éviter toute incohérence dans le fichier de données, 4D désactive l'accès en écriture aux enregistrements des tables dans l'application. Il est alors nécessaire de re-chiffrer les données pour restituer un statut de chiffrement valide. +This operation is useful when the **Encryptable** attribute has been modified for one or more tables containing data. In this case, to prevent inconsistencies in the data file, 4D disallows any write access to the records of the tables in the application. Re-encrypting data is then necessary to restore a valid encryption status. -1. Cliquez sur **Re-chiffrer les données à l'aide de la clé actuelle**. -2. Saisissez la clé de chiffrement des données actuelle. +1. Click on **Re-encrypt data with the current encryption key**. +2. Enter the current data encryption key. -Le fichier de données est correctement re-chiffré à l'aide de la clé actuelle et un message de confirmation s'affiche : ![](assets/fr/MSC/MSC_encrypt8.png) +The data file is properly re-encrypted with the current key and a confirmation message is displayed: ![](assets/en/MSC/MSC_encrypt8.png) -### Changer votre phrase secrète et re-chiffrer les données -Cette opération est utile en cas de modification de la clé de chiffrement des données actuelle. Par exemple, il se peut que vous la modifiiez pour vous conformer aux règles de sécurité (telles que la nécessité de modifier la phrase secrète tous les trois mois). +### Change your passphrase and re-encrypt data +This operation is useful when you need to change the current encryption data key. For example, you may need to do so to comply with security rules (such as requiring changing the passphrase every three months). -1. Cliquez sur **Changer votre phrase secrète et re-chiffrer les données**. -2. Saisissez la clé de chiffrement des données actuelle. -3. Saisissez la nouvelle phrase secrète (pour plus de sécurité, il vous est demandé de la saisir deux fois) : ![](assets/en/MSC/MSC_encrypt9.png) Le fichier de données est entièrement déchiffré et un message de confirmation s'affiche : ![](assets/fr/MSC/MSC_encrypt8.png) +1. Click on **Change your passphrase and re-encrypt data**. +2. Enter the current data encryption key. +3. Enter the new passphrase (for added security, you are prompted to enter it twice): ![](assets/en/MSC/MSC_encrypt9.png) The data file is encrypted with the new key and the confirmation message is displayed. ![](assets/en/MSC/MSC_encrypt8.png) -### Enlever le chiffrement de toutes les données -Cette opération supprime tout le chiffrement du fichier de données. Si vous ne souhaitez plus que vos données soient chiffrées : +### Decrypt all data +This operation removes all encryption from the data file. If you no longer want to have your data encrypted: -1. Cliquez sur **Enlever le chiffrement de toutes les données**. -2. Saisissez la clé de chiffrement de données actuelle (voir Fournir la clé de chiffrement des données actuelle). +1. Click on **Decrypt all data**. +2. Enter the current data encryption key (see Providing the current data encryption key). -Le fichier de données est entièrement déchiffré et un message de confirmation s'affiche : ![](assets/en/MSC/MSC_encrypt10.png) -> Une fois que le fichier de données est déchiffré, le statut de chiffrement des tables ne correspond plus à leur attribut Chiffrable. Pour restituer un statut de mise en correspondance, vous devez décocher tous les attributs **Chiffrable** au niveau de la structure de la base. +The data file is fully decrypted and a confirmation message is displayed: ![](assets/en/MSC/MSC_encrypt10.png) +> Once the data file is decrypted, the encryption status of tables do not match their Encryptable attributes. To restore a matching status, you must deselect all **Encryptable** attributes at the database structure level. -## Sauvegarder la clé de chiffrement +## Saving the encryption key -4D vous permet de sauvegarder la clé de chiffrement des données dans un fichier créé à cet effet. Storing this file on an external device such a USB key will facilitate the use of an encrypted application, since the user would only need to connect the device to provide the key before opening the application in order to access encrypted data. +4D allows you to save the data encryption key in a dedicated file. Storing this file on an external device such a USB key will facilitate the use of an encrypted application, since the user would only need to connect the device to provide the key before opening the application in order to access encrypted data. -Vous pouvez sauvegarder la clé de chiffrement chaque fois qu'une nouvelle phrase secrète est fournie : +You can save the encryption key each time a new passphrase has been provided: - when the application is encrypted for the first time, - when the application is re-encrypted with a new passphrase. -Les clés de chiffrement successives peuvent être sauvegardées sur le même appareil. +Successive encryption keys can be stored on the same device. -## Fichier d'historique +## Log file After an encryption operation has been completed, 4D generates a file in the Logs folder of the application. It is created in XML format and named "*ApplicationName_Encrypt_Log_yyyy-mm-dd hh-mm-ss.xml*" or "*ApplicationName_Decrypt_Log_yyyy-mm-dd hh-mm-ss.xml*". -Chaque fois qu'un nouveau fichier d'historique est généré, un bouton Voir le compte rendu s'affiche dans la page CSM. +An Open log file button is displayed on the MSC page each time a new log file has been generated. -Le fichier d'historique liste toutes les opérations internes liées au processus de chiffrement/déchiffrement qui ont été exécutées, ainsi que les erreurs (le cas échéant). +The log file lists all internal operations executed pertaining to the encryption/decryption process, as well as errors (if any). From 7257341e430eb1ef93589496727346411278e7d4 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:17:30 +0100 Subject: [PATCH 059/260] New translations information.md (French) --- website/translated_docs/fr/MSC/information.md | 54 +++++++++---------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/website/translated_docs/fr/MSC/information.md b/website/translated_docs/fr/MSC/information.md index 0913e92c790b4d..ade0d827d2ee49 100644 --- a/website/translated_docs/fr/MSC/information.md +++ b/website/translated_docs/fr/MSC/information.md @@ -1,52 +1,52 @@ --- id: information -title: Page informations -sidebar_label: Page informations +title: Information Page +sidebar_label: Information Page --- -La page “Informations” fournit diverses informations relatives à l’environnement 4D et l’environnement système, la base de données et les fichiers de l’application. Chaque page d’information est accessible via des onglets situés dans la partie supérieure de la fenêtre. +The Information page provides information about the 4D and system environments, as well as the database and application files. Each page can be displayed using tab controls at the top of the window. -## Programme +## Program -Cette page affiche le nom, la version et l’emplacement de l’application ainsi que du dossier 4D actif (pour plus d’informations sur le dossier 4D actif, reportez-vous à la description de la commande `Get 4D folder` du manuel *Langage 4D*). +This page indicates the name, version and location of the application as well as the active 4D folder (for more information about the active 4D folder, refer to the description of the `Get 4D folder` command in the *4D Language Reference* manual). The central part of the window indicates the name and location of the project and data files as well as the log file (if any). The lower part of the window indicates the name of the 4D license holder, the type of license, and the name of the current 4D user. -- **Affichage et sélection des chemins d’accès** : dans la page **Programme**, les chemins d’accès sont affichés sous forme de pop up menus contenant l’enchaînement des dossiers à partir du disque : - ![](assets/fr/MSC/MSC_popup.png) Si vous sélectionnez un élément du menu (disque ou dossier), il s’affiche dans une nouvelle fenêtre système. La commande **Copier le chemin** copie le chemin d’accès complet dans le Presse-papiers sous forme de texte, et en utilisant les séparateurs de la plate-forme courante. +- **Display and selection of pathnames**: On the **Program** tab, pathnames are displayed in pop-up menus containing the folder sequence as found on the disk: + ![](assets/en/MSC/MSC_popup.png) If you select a menu item (disk or folder), it is displayed in a new system window. The **Copy the path** command copies the complete pathname as text to the clipboard, using the separators of the current platform. -- **Dossier “Licenses”** Le bouton **Dossier “Licenses”** permet d’afficher le contenu du dossier Licenses actif dans une nouvelle fenêtre système. Tous les fichiers de licence installés dans votre environnement 4D sont regroupés dans ce dossier, placé sur votre disque dur. Lorsqu’ils sont ouverts avec un navigateur Web, ces fichiers affichent des informations relatives aux licences qu’ils contiennent et à leurs caractéristiques. L’emplacement du dossier "Licenses" peut varier en fonction de la version ou de la langue de votre système d’exploitation. For more information about the location of this folder, refer to the `Get 4D folder` command. ***Note :** Vous pouvez également accéder à ce dossier depuis la boîte de dialogue “Mise à jour des licences” (accessible depuis le menu Aide).* +- **"Licenses" Folder** The **"Licenses" Folder** button displays the contents of the active Licenses folder in a new system window. All the license files installed in your 4D environment are grouped together in this folder, on your hard disk. When they are opened with a Web browser, these files display information concerning the licenses they contain and their characteristics. The location of the "Licenses" folder can vary depending on the version of your operating system. For more information about the location of this folder, refer to the `Get 4D folder` command. ***Note:** You can also access this folder from the “Update License” dialog box (available in the Help menu).* ## Tables -Cette page propose une vue d'ensemble de la base : +This page provides an overview of the tables in your database: -![](assets/fr/MSC/MSC_Tables.png) -> Les informations présentes dans cette page sont disponibles en mode standard et en mode maintenance. +![](assets/en/MSC/MSC_Tables.png) +> Information on this page is available in both standard and maintenance modes. -La page liste toutes les tables de la base (y compris les tables invisibles) ainsi que leurs caractéristiques : +The page lists all the tables of the database (including invisible tables) as well as their characteristics: -- **No.** : Numéros internes des tables. -- **Tables** : Noms des tables. Les noms des tables supprimées sont affichés entre parenthèses (lorsqu'elles sont dans la corbeille). -- **Enregistrements** : Nombre total d'enregistrements de chaque table. Si un enregistrement est endommagé ou ne peut pas être lu, le mot *Erreur* est affiché à la place du total. Dans ce cas, vous devez envisager d'utiliser les outils de vérification et de réparation. -- **Champs** : Nombre de champs dans la table. Les champs invisibles sont comptés, en revanche les champs supprimés ne le sont pas. -- **Index** : Nombre d'index de tout type associés à la table +- **ID**: Internal number of the table. +- **Tables**: Name of the table. Names of deleted tables are displayed with parenthesis (if they are still in the trash). +- **Records**: Total number of records in the table. If a record is damaged or cannot be read, *Error* is displayed instead of the number. In this case, you can consider using the verify and repair tools. +- **Fields**: Number of fields in the table. Invisible fields are counted, however, deleted fields are not counted. +- **Indexes**: Number of indexes of any kind in the table - **Encryptable**: If checked, the **Encryptable** attribute is selected for the table at the structure level (see "Encryptable" paragraph in the Design Reference Manual). -- **Chiffrée** : Si cet attribut est coché, les enregistrements de la table sont chiffrés dans le fichier de données. ***Note**: Any inconstency between Encryptable and Encrypted options requires that you check the encryption status of the data file in the Encrypt page of the MSC.* -- **Taille table adresses** : Taille de la table d'adresses pour chaque table. La table d'adresses est une table interne qui stocke un élément par enregistrement créé dans la table. Elle établit le lien entre les enregistrements et leur adresse physique. Pour des raisons de performance, elle n'est pas redimensionnée lorsque des enregistrements sont supprimés. Sa taille peut donc être différente du nombre d'enregistrements actuel de la table. À noter que si cette différence est significative, il peut être intéressant de compacter les données avec l'option "Compacter la table d'adresses" afin d'optimiser la taille de la table d'adresses (voir [Page Compactage](compact.md)). ***Note :** Des différences entre la taille de la table d'adresses et le nombre d'enregistrements peuvent également résulter d'un incident durant l'écriture du cache sur le disque. * +- **Encrypted**: If checked, the records of the table are encrypted in the data file. ***Note**: Any inconstency between Encryptable and Encrypted options requires that you check the encryption status of the data file in the Encrypt page of the MSC.* +- **Address Table Size**: Size of the address table for each table. The address table is an internal table which stores one element per record created in the table. It actually links records to their physical address. For performance reasons, it is not resized when records are deleted, thus its size can be different from the current number of records in the table. If this difference is significant, a data compacting operation with the "Compact address table" option checked can be executed to optimize the address table size (see [Compact](compact.md) page). ***Note:** Differences between address table size and record number can also result from an incident during the cache flush.* -## Données +## Data -La page **Données** fournit des informations sur l'espace de stockage libre et occupé dans les fichiers de données et la structure de la base. -> Cette page n'est pas accessible en mode maintenance +The **Data** page provides information about the available and used storage space in the data file. +> This page cannot be accessed in maintenance mode -Ces informations sont fournies sous forme de valeurs en octets et sont également représentées sous forme graphique : +The information is provided in graph form: -![](assets/fr/MSC/MSC_Data.png) -> La page Données ne tient pas compte de la taille des données éventuellement stockées à l’extérieur du fichier de données (cf. section Stockage externe des données). +![](assets/en/MSC/MSC_Data.png) +> This page does not take into account any data that may be stored outside of the data file (see "External storage"). -Des fichiers trop fragmentés réduisent les performances du disque dur et donc de la base. Si le taux d’occupation est trop faible, 4D vous le signale par une icône d’avertissement (qui apparaît dans le bouton Informations et dans l’onglet du type de fichier correspondant) et indique qu’un compactage est requis :![](assets/fr/MSC/MSC_infowarn.png) +Files that are too fragmented reduce disk, and thus, database performance. If the occupation rate is too low, 4D will indicate this by a warning icon (which is displayed on the Information button and on the tab of the corresponding file type) and specify that compacting is necessary:![](assets/en/MSC/MSC_infowarn.png) -Une icône d’avertissement est également affichée sur le bouton de la Page [Compactage](compact.md) : ![](assets/fr/MSC/MSC_compactwarn.png) +A warning icon is also displayed on the button of the [Compact](compact.md) page: ![](assets/en/MSC/MSC_compactwarn.png) From 3f9e49045a9e1bc83eb54e30cbd0d9152eb5c7a5 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:17:32 +0100 Subject: [PATCH 060/260] New translations repair.md (French) --- website/translated_docs/fr/MSC/repair.md | 76 ++++++++++++------------ 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/website/translated_docs/fr/MSC/repair.md b/website/translated_docs/fr/MSC/repair.md index ec413bcfa8e8f7..55bc4e7794c9b0 100644 --- a/website/translated_docs/fr/MSC/repair.md +++ b/website/translated_docs/fr/MSC/repair.md @@ -1,71 +1,71 @@ --- id: repair -title: Page Réparation -sidebar_label: Page Réparation +title: Repair Page +sidebar_label: Repair Page --- -Cette page permet de réparer le fichier de données ou le fichier de structure lorsqu’il a été endommagé. Generally, you will only use these functions at the request of 4D, when anomalies have been detected while opening the application or following a [verification](verify.md). +This page is used to repair the data file when it has been damaged. Generally, you will only use these functions at the request of 4D, when anomalies have been detected while opening the application or following a [verification](verify.md). -**Attention :** Chaque réparation entraîne la duplication du fichier d’origine et donc l’augmentation de la taille du dossier de l’application. Il est important de prendre cela en considération (notamment sous macOS, où les applications 4D apparaissent sous forme de paquet) afin de ne pas augmenter excessivement la taille de l'application. Une intervention manuelle à l’intérieur du package peut être utile afin de supprimer les copies des fichiers d’origine. -> La réparation n’est disponible qu’en mode maintenance. If you attempt to carry out this operation in standard mode, a warning dialog will inform you that the application will be closed and restarted in maintenance mode. -> Lorsque la base est chiffrée, la réparation des données comprend le déchiffrage et le chiffrage et nécessite ainsi la clé de chiffrement de données courante. Si aucune clé de chiffrement valide n'a déjà été fournie, une boite de dialogue s'affiche pour demander pour demander le mot de passe ou la clé de chiffrement (voir Page Chiffrement). +**Warning:** Each repair operation involves the duplication of the original file, which increases the size of the application folder. It is important to take this into account (especially in macOS where 4D applications appear as packages) so that the size of the application does not increase excessively. Manually removing the copies of the original file inside the package can be useful to minimize the package size. +> Repairing is only available in maintenance mode. If you attempt to carry out this operation in standard mode, a warning dialog will inform you that the application will be closed and restarted in maintenance mode. +> When the database is encrypted, repairing data includes decryption and encryption steps and thus, requires the current data encryption key. If no valid encryption key has already been provided, a dialog requesting the passphrase or the encryption key is displayed (see Encrypt page). -## Fichiers +## File overview -### Fichier de données à réparer -Chemin d’accès du fichier de données courant. Le bouton **[...]** permet de désigner un autre fichier de données. Lorsque vous cliquez sur ce bouton, une boîte de dialogue standard d’ouverture de documents s’affiche, vous permettant de désigner le fichier de données à réparer. Si vous effectuez une [réparation standard](#standard_repair), vous devez sélectionner un fichier de données compatible avec le fichier de structure ouvert. Si vous effectuez une réparation par [récupération des en-têtes d'enregistrements](#recover-by-record-headers), vous pouvez sélectionner tout fichier de données. Une fois cette boîte de dialogue validée, le chemin d’accès du fichier à réparer est indiqué dans la fenêtre. +### Data file to be repaired +Pathname of the current data file. The **[...]** button can be used to specify another data file. When you click on this button, a standard Open document dialog is displayed so that you can designate the data file to be repaired. If you perform a [standard repair](#standard_repair), you must select a data file that is compatible with the open project file. If you perform a [recover by record headers](#recover-by-record-headers) repair, you can select any data file. Once this dialog has been validated, the pathname of the file to be repaired is indicated in the window. -### Dossier de sauvegarde -Par défaut, le fichier de données original sera dupliqué avant réparation. It will be placed in a subfolder named “Replaced files (repairing)” in the application folder. Le second bouton **[...]** permet de désigner un autre emplacement pour les sauvegardes des fichiers originaux effectuées avant réparation. Cette option permet notamment de réparer des fichiers volumineux en utilisant différents disques. +### Original files backup folder +By default, the original data file will be duplicated before the repair operation. It will be placed in a subfolder named “Replaced files (repairing)” in the application folder. The second **[...]** button can be used to specify another location for the original files to be saved before repairing begins. This option can be used more particularly when repairing voluminous files while using different disks. -### Fichiers réparés -4D crée un nouveau fichier de données vide à l’emplacement du fichier d’origine. The original file is moved into the folder named "\Replaced Files (Repairing) date time" whose location is set in the "Original files backup folder" area (application folder by default). Le fichier vide est rempli avec les données récupérées. +### Repaired files +4D creates a new blank data file at the location of the original file. The original file is moved into the folder named "\Replaced Files (Repairing) date time" whose location is set in the "Original files backup folder" area (application folder by default). The blank file is filled with the recovered data. -## Réparation standard +## Standard repair -La réparation standard permet de réparer des données dans lesquelles seuls quelques enregistrements ou index sont endommagés (les tables d'adresses sont intactes). Les données sont compactées et réparées. A noter que ce type de réparation ne peut être effectué que si le fichier de données et le fichier de structure correspondent. +Standard repair should be chosen when only a few records or indexes are damaged (address tables are intact). The data is compacted and repaired. This type of repair can only be performed when the data and structure file match. -A l’issue de la procédure, la page "Réparation" du CSM est affichée. Un message indique si la réparation a été effectuée avec succès. If so, you can open the application immediately. ![](assets/fr/MSC/MSC_RepairOK.png) +When the repair procedure is finished, the "Repair" page of the MSC is displayed. A message indicates if the repair was successful. If so, you can open the application immediately. ![](assets/en/MSC/MSC_RepairOK.png) -## Réparation par en-têtes d'enregistrements -Cette option de réparation de bas niveau est à utiliser uniquement dans le cas où le fichier de données a été fortement endommagé et une fois que toutes les autres solutions (restitution de sauvegarde, réparation standard) se sont avérées inefficaces. +## Recover by record headers +Use this low-level repair option only when the data file is severely damaged and after all other solutions (restoring from a backup, standard repair) have proven to be ineffective. -Les enregistrements de 4D sont de taille variable : il est donc nécessaire, pour les retrouver, de conserver dans une table spéciale l’endroit où ils sont stockés sur votre disque. Le programme accède donc à l’adresse de l’enregistrement par l’intermédiaire d’un index et d’une table d’adresses. Si seuls des enregistrements ou des index sont endommagés, l’option de réparation standard suffira généralement pour résoudre le problème. C’est lorsque la table d’adresses est touchée qu’il faudra en venir à une récupération plus sophistiquée, puisqu’il faut la reconstituer. Pour réaliser cette opération, le CSM utilise le marqueur qui se trouve en en-tête de chaque enregistrement. Les marqueurs peuvent être comparés à des résumés des enregistrements, comportant l’essentiel de leurs informations, et à partir desquels une reconstitution de la table d’adresses est possible. +4D records vary in size, so it is necessary to keep the location where they are stored on disk in a specific table, named address table, in order to find them again. The program therefore accesses the address of the record via an index and the address table. If only records or indexes are damaged, the standard repair option is usually sufficient to resolve the problem. However, when the address table itself is affected, it requires a more sophisticated recovery since it will be necessary to reconstitute it. To do this, the MSC uses the marker located in the header of each record. The markers are compared to a summary of the record, including the bulk of their information, and from which it is possible to reconstruct the address table. > If you have deselected the **Records definitively deleted** option in the properties of a table in the structure, performing a recovery by header markers may cause records that were previously deleted to reappear. > -> La récupération par en-têtes ne tient pas compte des éventuelles contraintes d’intégrité. En particulier, à l’issue de cette opération, vous pouvez obtenir des valeurs dupliquées avec des champs uniques ou des valeurs NULL avec des champs déclarés **non NULL**. +> Recovery by headers does not take integrity constraints into account. More specifically, after this operation you may get duplicated values with unique fields or NULL values with fields declared **Never Null**. -Lorsque vous cliquez sur le bouton **Réparer**, 4D effectue une analyse complète du fichier de données. A l’issue de cette analyse, le résultat est affiché dans la fenêtre suivante : +When you click on **Scan and repair...**, 4D performs a complete scan of the data file. When the scan is complete, the results appear in the following window: -![](assets/fr/MSC/mscrepair2.png) -> Si tous les enregistrements et toutes les tables ont été attribués, seule la zone principale est affichée. +![](assets/en/MSC/mscrepair2.png) +> If all the records and all the tables have been assigned, only the main area is displayed. -La zone "Enregistrements trouvés dans le fichier de données" comporte deux tableaux synthétisant les informations issues de l’analyse du fichier de données. +The "Records found in the data file" area includes two tables summarizing the information from the scan of the data file. -- Le premier tableau liste les informations issues de l’analyse du fichier de données. Chaque ligne représente un groupe d’enregistrements récupérables dans le fichier de données : - - La colonne **Ordre** indique l’ordre de récupération des groupes d’enregistrements. - - La colonne **Nombre** indique le nombre d'enregistrements contenus dans la table. - - La colonne **Table de destination** indique le nom des tables ayant pu être automatiquement associées aux groupes d’enregistrements identifiés. Les noms des tables attribuées automatiquement sont affichés en caractères verts. Les groupes qui n'ont pas encore été attribués, c'est-à-dire, les tables qui n'ont pas pu être associées à des enregistrements sont affichées en caractères rouges. - - La colonne **Récupérer** permet vous permet d’indiquer pour chaque groupe si vous souhaitez récupérer les enregistrements. Par défaut, l’option est cochée pour tous les groupes avec les enregistrements qui peuvent être associés à une table. +- The first table lists the information from the data file scan. Each row shows a group of recoverable records in the data file: + - The **Order** column indicates the recovery order for the group of records. + - The **Count** column indicates the number of the records in the table. + - The **Destination table** column indicates the names of tables that were automatically assigned to the groups of identified records. The names of tables assigned automatically appear in green. Groups that were not assigned, i.e. tables that could not be associated with any records appear in red. + - The **Recover** column lets you indicate, for each group, whether you want to recover the records. By default, this option is checked for every group with records that can be associated with a table. -- Le deuxième tableau liste les tables du fichier de structure. +- The second table lists the tables of the project file. -### Attribution manuelle -Si, du fait de l’endommagement de la table d’adresses, un ou plusieurs groupes d’enregistrements n’ont pas pu être attribués à des tables, vous pouvez les attribuer manuellement. Pour attribuer une table à un groupe non identifié, sélectionnez le groupe dans le premier tableau. Lorsque vous sélectionnez des enregistrements non identifiés, la zone "Contenu des enregistrements" affiche une prévisualisation du contenu des premiers enregistrements du groupe afin de vous permettre de les attribuer plus facilement : +### Manual assigning +If several groups of records could not be assigned to tables due to a damaged address table, you can assign them manually. To do this, first select an unassigned group of records in the first table. The "Content of the records" area then displays a preview of the contents of the first records of the group to make it easier to assign them: ![](assets/en/MSC/mscrepair3.png) -Sélectionnez ensuite la table à attribuer dans le tableau des "Tables non attribuées" puis cliquez sur le bouton **Identifier table**. Vous pouvez également attribuer une table par glisser-déposer. Le groupe d’enregistrements est alors associé à la table, il sera récupéré dans cette table. Les noms des tables attribuées manuellement sont affichés en caractères noirs. Le bouton **Ignorer enregistrements** permet de supprimer l’association effectuée manuellement entre une table et un groupe d’enregistrements. +Next select the table you want to assign to the group in the "Unassigned tables" table and click on the **Identify table** button. You can also assign a table using drag and drop. The group of records is then associated with the table and it will be recovered in this table. The names of tables that are assigned manually appear in black. Use the **Ignore records** button to remove the association made manually between the table and the group of records. -## Voir le compte rendu +## Open log file -After repair is completed, 4D generates a log file in the Logs folder of the project. Ce fichier liste l’ensemble des opérations qui ont été menées. It is created in XML format and named: *ApplicationName**_Repair_Log_yyyy-mm-dd hh-mm-ss.xml*" where: +After repair is completed, 4D generates a log file in the Logs folder of the project. This file allows you to view all the operations carried out. It is created in XML format and named: *ApplicationName**_Repair_Log_yyyy-mm-dd hh-mm-ss.xml*" where: -- *ApplicationName* est le nom du fichier de structure sans extension, par exemple "Factures", -- *aaaa-mm-jj hh-mm-ss* est l'horodatage du fichier, basé sur la date et l'heure système locales au moment du lancement de l'opération de vérification, par exemple "2019-02-11 15-20-45". +- *ApplicationName* is the name of the project file without any extension, for example "Invoices", +- *yyyy-mm-dd hh-mm-ss* is the timestamp of the file, based upon the local system time when the maintenance operation was started, for example "2019-02-11 15-20-45". -Lorsque vous cliquez sur le bouton **Voir le compte rendu**, 4D affiche le fichier de compte-rendu le plus récent dans le navigateur par défaut de l’ordinateur. \ No newline at end of file +When you click on the **Open log file** button, 4D displays the most recent log file in the default browser of the machine. \ No newline at end of file From 03471a404853f7f28ea9a783814092266cf98c45 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:17:34 +0100 Subject: [PATCH 061/260] New translations restore.md (French) --- website/translated_docs/fr/MSC/restore.md | 80 +++++++++++------------ 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/website/translated_docs/fr/MSC/restore.md b/website/translated_docs/fr/MSC/restore.md index c75efb99c88449..4f6d4be7cc8b6a 100644 --- a/website/translated_docs/fr/MSC/restore.md +++ b/website/translated_docs/fr/MSC/restore.md @@ -1,10 +1,10 @@ --- id: restore -title: Page restitution -sidebar_label: Page restitution +title: Restore Page +sidebar_label: Restore Page --- -## Restauration d'une sauvegarde +## Restoring a backup You can manually restore an archive of the current application using the **Restore** page. This page provides several options that can be used to control the restoration: @@ -12,54 +12,54 @@ You can manually restore an archive of the current application using the **Resto > 4D automatic recovery systems restore applications and include data log file when necessary. -The list found in the left part of the window displays any existing backups of the application. You can also click on the **Browse...** button found just under the area in order to open any other archive file from a different location. Il est alors ajouté à la liste des archives. +The list found in the left part of the window displays any existing backups of the application. You can also click on the **Browse...** button found just under the area in order to open any other archive file from a different location. It is then added to the list of archives. -Lorsque vous sélectionnez une sauvegarde dans cette liste, la partie droite de la fenêtre affiche les informations relatives à cette sauvegarde : +When you select a backup in this list, the right part of the window displays the information concerning this particular backup: -- **Chemin d’accès** : chemin d’accès complet du fichier de sauvegarde sélectionné. Le bouton Montrer ouvre le dossier de sauvegarde dans une fenêtre système. -- **Date et heure** : date et heure de la sauvegarde. -- **Contenu** : contenu du fichier de sauvegarde. Chaque élément de la liste est associé à une case à cocher, permettant de spécifier si vous souhaitez ou non le restituer. Vous pouvez utiliser les boutons **Tout sélectionner** ou **Tout désélectionner** pour paramétrer la liste des éléments à restituer. -- **Emplacement des fichiers restitués** : dossier dans lequel seront placés les fichiers restitués. By default, 4D restores the files in a folder named “Archivename” (no extension) that is placed next to the Project folder. Pour modifier cet emplacement, cliquez sur le bouton **[...]** et désignez le dossier dans lequel vous souhaitez effectuer la restitution. +- **Path**: Complete pathname of the selected backup file. Clicking the Show button opens the backup file in a system window. +- **Date and Time**: Date and time of backup. +- **Content**: Contents of the backup file. Each item in the list has a check box next to it which can be used to indicate whether or not you want to restore it. You can also use the **Check All** or **Uncheck All** buttons to set the list of items to be restored. +- **Destination folder of the restored files**: Folder where the restored files will be placed. By default, 4D restores the files in a folder named “Archivename” (no extension) that is placed next to the Project folder. To change this location, click on **[...]** and specify the folder where you want the restored files to be placed. -Le bouton **Restituer** lance la restitution manuelle des éléments sélectionnés. +The **Restore** button launches the manual restoration of the selected element(s). -## Intégration successive de plusieurs fichiers d’historiques +## Successive integration of several data log files -The **Integrate one or more log file(s) after restore** option allows you to integrate several data log files successively into an application. If, for example, you have 4 journal file archives (.4BL) corresponding to 4 backups, you can restore the first backup then integrate the journal (data log) archives one by one. Ce principe permet par exemple de récupérer un fichier de données alors que les derniers fichiers de sauvegarde de la base sont manquants. +The **Integrate one or more log file(s) after restore** option allows you to integrate several data log files successively into an application. If, for example, you have 4 journal file archives (.4BL) corresponding to 4 backups, you can restore the first backup then integrate the journal (data log) archives one by one. This means that you can, for example, recover a data file even when the last backup files are missing. -Lorsque cette option est cochée, 4D affiche une boîte de dialogue standard d’ouverture de fichiers à l’issue de la restitution, vous permettant de sélectionner la sauvegarde d’historique à intégrer. La boîte de dialogue d’ouverture est affichée de nouveau après chaque intégration, jusqu’à ce qu’elle soit annulée. +When this option is checked, 4D displays the standard Open file dialog box after the restore, which can be used to select journal file to be integrated. The Open file dialog box is displayed again after each integration until it is cancelled. -## Restituer une base chiffrée +## Restoring an encrypted database -Keep in mind that the data encryption key (passphrase) may have been changed through several versions of backup files (.4BK), .journal files (.4BL) and the current application. Il est important que les clés de chiffrement soient toujours mises en correspondance. +Keep in mind that the data encryption key (passphrase) may have been changed through several versions of backup files (.4BK), .journal files (.4BL) and the current application. Matching encryption keys must always be provided. -Au moment de restituer une sauvegarde et d'intégrer le fichier d'historique courant dans une base chiffrée : +When restoring a backup and integrating the current log file in a encrypted database: -- Si vous restituez une sauvegarde à l'aide d'une ancienne phrase secrète, cette dernière sera demandée au prochain démarrage de la base. -- Après un chiffrement, à l'ouverture du fichier de données chiffrées, une sauvegarde est exécutée et un nouveau fichier journal est créé. Ainsi, il n'est pas possible de restituer un fichier chiffré .4BK avec une clé et d'intégrer les fichiers chiffrés .4BL avec une autre clé. +- If you restore a backup using an old passphrase, this passphrase will be required at the next database startup. +- After an encryption, when opening the encrypted data file, a backup is run and a new journal file is created. Thus, it is not possible to restore a .4BK file encrypted with one key and integrate .4BL files encrypted with another key. -La séquence suivante illustre les principes d'une opération de clé multiple de sauvegarde/restitution : +The following sequence illustrates the principles of a multi-key backup/restore operation: -| Opération | Fichiers générés | Commentaire | -| ---------------------------------------- | -------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| New data file | | | -| Ajouter des données (enregistrement # 1) | | | -| Sauvegarder la base de données | 0000.4BL et 0001.4BK | | -| Ajouter des données (enregistrement # 2) | | | -| Sauvegarder la base de données | 0001.4BL et 0002.4BK | | -| Ajouter des données (enregistrement # 3) | | | -| Chiffrer un fichier de données avec clé1 | Fichier 0003.4BK (chiffré avec clé1) | Le chiffrement sauvegarde les fichiers originaux (y compris le fichier journal) dans le dossier "Replaced files (Encrypting) YYY-DD-MM HH-MM-SS". À l'ouverture du fichier de données chiffrées, un nouveau fichier journal est créé et une sauvegarde est effectuée pour activer ce fichier journal. | -| Ajouter des données (enregistrement # 4) | | | -| Sauvegarder la base de données | Fichiers 0003.4BL et 0004.4BK (chiffrés avec clé1) | Il est possible de restituer 0003.4BK et d'intégrer 0003.4BL | -| Ajouter des données (enregistrement # 5) | | | -| Sauvegarder la base de données | Fichiers 0004.4BL et 0005.4BK (chiffrés avec clé1) | Il est possible de restituer 0003.4BK et d'intégrer 0003.4BL + 0004.4BL. Il est possible de restituer 0004.4BK et d'intégrer 0004.4BL | -| Ajouter des données (enregistrement # 6) | | | -| Chiffrer un fichier de données avec clé2 | Fichier 0006.4BK (chiffré avec clé2) | Le chiffrement sauvegarde les fichiers originaux (y compris le fichier journal) dans le dossier "Replaced files (Encrypting) YYY-DD-MM HH-MM-SS". À l'ouverture du fichier de données chiffrées, un nouveau fichier journal est créé et une sauvegarde est effectuée pour activer ce fichier journal. | -| Ajouter des données (enregistrement # 7) | | | -| Sauvegarder la base de données | Fichiers 0006.4BL et 0007.4BK (chiffrés avec clé2) | Il est possible de restituer 0006.4BK et d'intégrer 0006.4BL | -| Ajouter des données (enregistrement # 8) | | | -| Sauvegarder la base de données | Fichiers 0007.4BL et 0008.4BK (chiffrés avec clé2) | Il est possible de restituer 0006.4BK et d'intégrer 0006.4BL + 0007.4BL. Il est possible de restituer 0007.4BK et d'intégrer 0007.4BL | -> Au moment de restituer une sauvegarde et d'intégrer un ou plusieurs fichiers .4BL, les fichiers restitués .4BK et .4BL doivent avoir la même clé de chiffrement. Durant le processus d'intégration, si aucune clé de chiffrement valide n'est trouvée dans le trousseau de 4D lors de l'intégration du fichier .4BL, une erreur est générée. +| Operation | Generated files | Comment | +| --------------------------- | ------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| New data file | | | +| Add data (record # 1) | | | +| Backup database | 0000.4BL and 0001.4BK | | +| Add data (record # 2) | | | +| Backup database | 0001.4BL and 0002.4BK | | +| Add data (record # 3) | | | +| Encrypt data file with key1 | 0003.4BK file (encrypted with key1) | Encryption saves original files (including journal) in folder "Replaced files (Encrypting) YYY-DD-MM HH-MM-SS". When opening the encrypted data file, a new journal is created and a backup is made to activate this journal | +| Add data (record #4) | | | +| Backup database | 0003.4BL and 0004.4BK files (encrypted with key1) | We can restore 0003.4BK and integrate 0003.4BL | +| Add data (record # 5) | | | +| Backup database | 0004.4BL and 0005.4BK files (encrypted with key1) | We can restore 0003.4BK and integrate 0003.4BL + 0004.4BL. We can restore 0004.4BK and integrate 0004.4BL | +| Add data (record # 6) | | | +| Encrypt data file with key2 | 0006.4BK file (encrypted with key2) | Encryption saves original files (including journal) in folder "Replaced files (Encrypting) YYY-DD-MM HH-MM-SS". When opening the encrypted data file, a new journal is created and a backup is made to activate this journal | +| Add data (record # 7) | | | +| Backup database | 0006.4BL and 0007.4BK files (encrypted with key2) | We can restore 0006.4BK and integrate 0006.4BL | +| Add data (record # 8) | | | +| Backup database | 0007.4BL and 0008.4BK files (encrypted with key2) | We can restore 0006.4BK and integrate 0006.4BL + 0007.4BL. We can restore 0007.4BK and integrate 0007.4BL | +> When restoring a backup and integrating one or several .4BL files, the restored .4BK and .4BL files must have the same encryption key. During the integration process, if no valid encryption key is found in the 4D keychain when the .4BL file is integrated, an error is generated. > -> Si vous avez stocké plusieurs clés de données sur le même appareil externe, la restitution d'une sauvegarde et l'intégration de fichiers d'historique permettront de trouver automatiquement la clé correspondant à l'appareil connecté. +> If you have stored successive data keys on the same external device, restoring a backup and integrating log files will automatically find the matching key if the device is connected. From 51ea11400efe3badf11ff7df76a682af48d02fec Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:17:37 +0100 Subject: [PATCH 062/260] New translations rollback.md (French) --- website/translated_docs/fr/MSC/rollback.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/website/translated_docs/fr/MSC/rollback.md b/website/translated_docs/fr/MSC/rollback.md index ed2b64070281ac..ded1eb72f1edfa 100644 --- a/website/translated_docs/fr/MSC/rollback.md +++ b/website/translated_docs/fr/MSC/rollback.md @@ -1,25 +1,25 @@ --- id: rollback -title: Page Retour en arrière -sidebar_label: Page Retour en arrière +title: Rollback Page +sidebar_label: Rollback Page --- -La page Retour arrière du CSM permet d’accéder à la fonction de retour en arrière parmi les opérations effectuées dans le fichier de données. Elle s’apparente à une fonction d’annulation multi-niveaux. Elle est utile notamment lorsqu’un enregistrement a été supprimé par erreur dans la base de données. +You use the Rollback page to access the rollback function among the operations carried out on the data file. It resembles an undo function applied over several levels. It is particularly useful when a record has been deleted by mistake in a database. This function is only available when the application functions with a data log file. ![](assets/en/MSC/MSC_rollback1.png) -> Si la base de données est chiffrée et si aucune clé de données valide correspondant au fichier d'historique ouvert n'a été fournie, les valeurs chiffrées ne s'affichent pas dans la colonne **Valeurs** et un dialogue s'affiche, demandant la saisie d'une phrase secrète ou de la clé de données, si vous cliquez sur le bouton **Revenir en arrière**. +> If the database is encrypted and no valid data key corresponding to the open log file has been provided, encrypted values are not displayed in the **Values** column and a dialog requesting the passphrase or the data key is displayed if you click the **Rollback** button. -Le contenu et le fonctionnement de la liste des opérations sont identiques à ceux de la fenêtre [d’analyse d’activités](analysis.md). Pour plus d’informations, reportez-vous à la section Page Analyse d'activités. +The contents and functioning of the list of operations are the same as for the [Activity analysis](analysis.md) window. -Pour effectuer un retour en arrière parmi les opérations, vous devez sélectionner la ligne située après laquelle toutes les opérations doivent être annulées. L’opération de la ligne sélectionnée sera la dernière conservée. Si par exemple vous souhaitez annuler une suppression, sélectionnez l’opération située juste avant la suppression. L'opération de suppression et les opérations suivantes seront annulées. +To perform a rollback among the operations, select the row after which all operations must be cancelled. The operation of the selected row will be the last kept. If, for example, you wish to cancel a deletion, select the operation located just before it. The deletion operation, as well as all subsequent operations, will be cancelled. ![](assets/en/MSC/MSC_rollback2.png) -Cliquez ensuite sur le bouton **Revenir en arrière**. 4D vous demande de confirmer l’opération. Si vous cliquez sur **OK**, les données sont alors restituées dans l’état exact où elles se trouvaient au moment de l’action sélectionnée. +Next click on the **Rollback** button. 4D asks you to confirm the operation. If you click **OK**, the data is then restored to the exact state it was in at the moment of the selected action. -Le menu situé en bas de la fenêtre vous permet de sélectionner le fichier d’historique à utiliser lorsque vous appliquez la fonction de retour en arrière à une base restituée. Dans ce cas, vous devez désigner le fichier d’historique correspondant à l’archive. +You use the menu found at the bottom of the window to select a data log file to be used when you apply the rollback function to a database restored from an archive file. In this case, you must specify the data log file corresponding to the archive. -Le principe mis en oeuvre pour la fonction de retour arrière est le suivant : lorsque l’utilisateur clique sur le bouton **Revenir en arrière**, 4D referme la base de données courante et restitue la dernière sauvegarde des données de la base. La base restituée est ensuite ouverte et 4D intègre les opérations de l’historique jusqu’à l’opération sélectionnée. Si la base n’avait pas encore été sauvegardée, 4D repart d’un fichier de données vierge. \ No newline at end of file +Here is how the rollback function works: when the user clicks the **Rollback** button, 4D shuts the current database and restores the last backup of the database data. The restored database is then opened and 4D integrates the operations of the data log file up through to the selected operation. If the database has not yet been saved, 4D starts with a blank data file. \ No newline at end of file From 8fd71b5254f5f6c152bce9136915dbaa4d0f45de Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:17:39 +0100 Subject: [PATCH 063/260] New translations verify.md (French) --- website/translated_docs/fr/MSC/verify.md | 56 ++++++++++++------------ 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/website/translated_docs/fr/MSC/verify.md b/website/translated_docs/fr/MSC/verify.md index 2bf649b6051ca7..5cd0434a37019e 100644 --- a/website/translated_docs/fr/MSC/verify.md +++ b/website/translated_docs/fr/MSC/verify.md @@ -1,56 +1,56 @@ --- id: verify -title: Page Vérification -sidebar_label: Page Vérification +title: Verify Page +sidebar_label: Verify Page --- -Cette page permet de vérifier l’intégrité des données et de la structure. La vérification peut porter sur les enregistrements et/ou les index ainsi que sur les objets du développement (méthodes, formulaires...). La page effectue uniquement une vérification des objets. Si des erreurs sont trouvées et des réparations requises, il vous sera nécessaire d’utiliser la [Page Réparation](repair.md). +You use this page to verify data integrity. The verification can be carried out on records and/or indexes. This page only checks the data integrity. If errors are found and repairs are needed, you will be advised to use the [Repair page](repair.md). ## Actions -La page comporte quatre boutons d’action permettant un accès direct aux fonctions de vérification. -> Lorsque la base est chiffrée, la cohérence des données chiffrées est vérifiée. Si aucune clé de données valide n'a été fournie, une boîte de dialogue s'affiche pour vous demander de saisir une phrase secrète ou la clé des données. +The page contains action buttons that provide direct access to the verification functions. +> When the database is encrypted, verification includes validation of encrypted data consistency. If no valid data key has already been provided, a dialog requesting the passphrase or the data key is displayed. -- **Vérifier les enregistrements et les index :** lance la procédure de vérification globale des données. -- **Vérifier uniquement les enregistrements :** lance la procédure de vérification des enregistrements uniquement (les index ne sont pas vérifiés). -- **Vérifier uniquement les index :** lance la procédure de vérification des index uniquement (les enregistrements ne sont pas vérifiés). -> La vérification des enregistrements et des index peut également être effectuée en mode détaillé, table par table (cf. paragraphe “Détails” ci-dessous). +- **Verify the records and the indexes:** Starts the total data verification procedure. +- **Verify the records only**: Starts the verification procedure for records only (indexes are not verified). +- **Verify the indexes only**: Starts the verification procedure for indexes only (records are not verified). +> Verification of records and indexes can also be carried out in detail mode, table by table (see the Details section below). -## Voir le compte rendu +## Open log file -Regardless of the verification requested, 4D generates a log file in the `Logs` folder of the application. Ce fichier liste l’ensemble des vérifications effectuées et signale chaque erreur rencontrée, le cas échéant ([OK] est affiché lorsque la vérification est correcte). It is created in XML format and is named: *ApplicationName*_Verify_Log_*yyyy-mm-dd hh-mm-ss*.xml where: +Regardless of the verification requested, 4D generates a log file in the `Logs` folder of the application. This file lists all the verifications carried out and indicates any errors encountered, when applicable ([OK] is displayed when the verification is correct). It is created in XML format and is named: *ApplicationName*_Verify_Log_*yyyy-mm-dd hh-mm-ss*.xml where: -- *ApplicationName* est le nom du fichier de structure sans extension, par exemple "Factures", -- *aaaa-mm-jj hh-mm-ss* est l'horodatage du fichier, basé sur la date et l'heure système locales au moment du lancement de l'opération de vérification, par exemple "2019-02-11 15-20-45". +- *ApplicationName* is the name of the project file without any extension, for example "Invoices", +- *yyyy-mm-dd hh-mm-ss* is the timestamp of the file, based upon the local system time when the maintenance operation was started, for example "2019-02-11 15-20-45". -Lorsque vous cliquez sur le bouton **Voir le compte rendu**, 4D affiche le fichier de compte-rendu le plus récent dans le navigateur par défaut de l’ordinateur. +When you click on the **Open log file** button, 4D displays the most recent log file in the default browser of the machine. -## Détails +## Details -Le bouton **Liste des tables** provoque l’affichage d’une page détaillée permettant de visualiser et de sélectionner les enregistrements et les index à vérifier : +The **Table list** button displays a detailed page that can be used to view and select the actual records and indexes to be checked: ![](assets/en/MSC/MSC_Verify.png) -La désignation des éléments à vérifier permet notamment de gagner du temps lors de la vérification. +Specifying the items to be verified lets you save time during the verification procedure. -La liste principale affiche toutes les tables de la base. Pour chaque table, vous pouvez limiter la vérification aux enregistrements et/ou à chaque index. Cliquez sur l’icône en forme de triangle pour déployer le contenu d’une table ou les index d’un champ et sélectionnez/ désélectionnez les cases à cocher en fonction de vos souhaits. Par défaut, tout est sélectionné. Vous pouvez également utiliser les boutons raccourcis **Tout sélectionner**, **Tout désélectionner**, **Tous les enregistrements** et **Tous les index**. +The main list displays all the tables of the database. For each table, you can limit the verification to the records and/or indexes. Expand the contents of a table or the indexed fields and select/deselect the checkboxes as desired. By default, everything is selected. You can also use the **Select all**, **Deselect all**, **All records** and **All indexes** shortcut buttons. -Pour chaque ligne de table, la colonne “Action” résume les opérations à effectuer. Lorsque la table est déployée, les lignes “Enregistrements” et “Champs indexés” indiquent le nombre d’éléments concernés. +For each row of the table, the "Action" column indicates the operations to be carried out. When the table is expanded, the "Records" and "Indexed fields" rows indicate the number of items concerned. -La colonne "Etat" affiche le statut de la vérification de chaque élément à l’aide de symboles : +The "Status" column displays the verification status of each item using symbols: -| ![](assets/en/MSC/MSC_OK.png) | Vérification effectuée, pas de problème | -| ------------------------------ | -------------------------------------------- | -| ![](assets/en/MSC/MSC_KO2.png) | Vérification effectuée, problèmes rencontrés | -| ![](assets/en/MSC/MSC_KO3.png) | Vérification partielle effectuée | -| ![](assets/en/MSC/MSC_KO.png) | Vérification non effectuée | +| ![](assets/en/MSC/MSC_OK.png) | Verification carried out with no problem | +| ------------------------------ | ---------------------------------------------- | +| ![](assets/en/MSC/MSC_KO2.png) | Verification carried out, problems encountered | +| ![](assets/en/MSC/MSC_KO3.png) | Verification partially carried out | +| ![](assets/en/MSC/MSC_KO.png) | Verification not carried out | -Cliquez sur le bouton **Vérifier** pour lancer la vérification ou sur le bouton **Standard** pour retourner à la page standard. +Click on **Verify** to begin the verification or on **Standard** to go back to the standard page. -Le bouton **Voir le compte rendu** permet d’afficher le fichier de compte-rendu dans le navigateur par défaut de l’ordinateur (cf. paragraphe [Voir le compte rendu](#open-log-file) ci-dessus). -> La page standard ne tient pas compte des modifications effectuées dans la page détaillée : lorsque vous cliquez sur un bouton de vérification dans la page standard, tous les éléments sont vérifiés. En revanche, les paramétrages effectués dans la page détaillée sont conservés d’une session à l’autre. +The **Open log file** button can be used to display the log file in the default browser of the machine (see [Open log file](#open-log-file) above). +> The standard page will not take any modifications made on the detailed page into account: when you click on a verification button on the standard page, all the items are verified. On the other hand, the settings made on the detailed page are kept from one session to another. From 7473c154be5460f66f6468a0f1ae6605782a03ed Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:17:41 +0100 Subject: [PATCH 064/260] New translations bars.md (French) --- website/translated_docs/fr/Menus/bars.md | 34 ++++++++++++------------ 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/website/translated_docs/fr/Menus/bars.md b/website/translated_docs/fr/Menus/bars.md index 4580550b0f2dc6..fcfcc4c0d99d5d 100644 --- a/website/translated_docs/fr/Menus/bars.md +++ b/website/translated_docs/fr/Menus/bars.md @@ -1,43 +1,43 @@ --- id: bars -title: Barres de menus +title: Menu bar features --- -Les barres de menu fournissent la principale interface des applications personnalisées. Pour chaque application personnalisée, vous devez créer au moins une barre de menu avec au moins un menu. Par défaut, Menu Bar #1 est la barre de menu qui est affichée dans l'application. Vous pouvez modifier la barre de menu affichée à l'aide de la commande `SET MENU BAR`. +Menu bars provide the major interface for custom applications. For each custom application, you must create at least one menu bar with at least one menu. By default, Menu Bar #1 is the menu bar displayed in the Application environment. You can change which menu bar is displayed using the `SET MENU BAR` command. -4D vous permet d’associer une image d’accueil personnalisée à chaque barre de menus et de prévisualiser une barre à tout moment. +4D lets you associate a custom splash screen picture with each menu bar and to preview this menu bar at any time. -## Image d'accueil +## Splash screen -Vous pouvez enrichir l’apparence de chaque barre de menus en lui associant une image d’accueil personnalisée. La fenêtre contenant l’image d’accueil est affichée en-dessous de la barre de menus lorsqu’elle apparaît. Elle peut contenir un logo ou tout type d’image. Par défaut, 4D affiche un logo comme image dans la fenêtre d’accueil : +You can enhance the appearance of each menu bar by associating a custom splash screen with it. The window containing the splash screen is displayed below the menu bar when it appears. It can contain a logo or any type of picture. By default, 4D displays the 4D logo in the splash screen: -![](assets/fr/Menus/splash1.png) +![](assets/en/Menus/splash1.png) -Une image d’accueil personnalisée peut provenir de toute application graphique. 4D vous permet de coller une image du presse-papiers, d’utiliser une image de la bibliothèque ou toute image présente sur votre disque dur. Tous les formats d’image standard pris en charge par 4D sont utilisables. +A custom splash screen picture can come from any graphic application. 4D lets you paste a clipboard picture or use any picture present on your hard disk. Any standard picture format supported by 4D can be used. -L'image d'accueil peut être uniquement paramétrée dans l'éditeur de menus : sélectionnez la barre de menus à laquelle vous souhaitez associer une image d’accueil personnalisée. Notez la zone "Image de fond" à droite de la fenêtre. Pour ouvrir directement une image stockée sur votre disque, cliquez sur le bouton **Ouvrir** ou cliquez dans la zone “Image de fond”. Un pop up menu apparaît : -- Pour coller une image se trouvant dans le Presse-papiers, choisissez la commande **Coller**. -- Pour ouvrir une image stockée dans un fichier disque, choisissez la commande **Ouvrir**. Si vous avez choisi la commande Ouvrir, une boîte de dialogue standard d’ouverture de fichiers apparaît, vous permettant de sélectionner le fichier image à utiliser. Une fois définie, l’image s’affiche en taille réduite dans la zone. Elle est alors associée à la barre de menus. +The splash screen picture can be set only in the Menu editor: select the menu bar with which you want to associate the custom splash screen. Note the "Background Image" area in the right-hand part of the window. To open a picture stored on your disk directly, click on the **Open** button or click in the "Background Image" area. A pop-up menu appears: +- To paste a picture from the clipboard, choose **Paste**. +- To open a picture stored in a disk file, choose **Open**. If you choose Open, a standard Open file dialog box will appear so that you can select the picture file to be used. Once set, the picture is displayed in miniature in the area. It is then associated with the menu bar. ![](assets/en/Menus/splash2.png) -Vous pouvez visualiser le résultat final en testant la barre de menus (cf. paragraphe suivant). En mode Application, l’image est affichée dans la fenêtre d’accueil avec un format du type “tronqué centré”. +You can view the final result by testing the menu bar (see the following section). In Application mode, the picture is displayed in the splash screen with the "Truncated (Centered)" type format. > You can choose whether to display or hide this window using the **Display toolbar** option in the Settings. -Pour supprimer l’image personnalisée et afficher l’image par défaut, cliquez sur le bouton **Effacer** ou cliquez dans la zone “Image de fond” et choisissez la commande **Effacer** dans le pop up menu. +To remove the custom picture and display the default one instead, click on the **Clear** button or select **Clear** in the area pop-up menu. -## Prévisualiser la barre de menus +## Previewing menu bars -L’éditeur de menus vous permet de visualiser à tout moment les menus personnalisés et la fenêtre d’accueil sans quitter la fenêtre de la boîte à outils. +The Menu Bar editor lets you view the custom menus and splash screen at any time, without closing the toolbox window. -Pour cela, il vous suffit de sélectionner la barre de menus et de choisir la commande **Tester la barre de menus “Barre n°N”** dans le menu contextuel ou le menu d’options de l’éditeur. +To do so, simply select the menu bar and choose **Test the menu bar "Menu Bar #X"** in the context menu or the options menu of the editor. -![](assets/fr/Menus/splash3.png) +![](assets/en/Menus/splash3.png) -4D affiche un aperçu de la barre de menus ainsi que de l’écran d’accueil. Vous pouvez dérouler les menus et les sous-menus pour prévisualiser leur contenu. En revanche, les menus ne sont pas actifs. Pour pouvoir tester le fonctionnement des menus et la barre d’outils, vous devez utiliser la commande **Tester l’application** dans le menu **Exécution**. +4D displays a preview of the menu bar as well as the splash screen. You can scroll down the menus and sub-menus to preview their contents. However, these menus are not active. To test the functioning of menus and the toolbar, you must use the **Test Application** command from the **Run** menu. From 996bd5d2a6db7154f50b68dd9fa64be75d3b0ad7 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:17:44 +0100 Subject: [PATCH 065/260] New translations creating.md (French) --- website/translated_docs/fr/Menus/creating.md | 110 +++++++++---------- 1 file changed, 55 insertions(+), 55 deletions(-) diff --git a/website/translated_docs/fr/Menus/creating.md b/website/translated_docs/fr/Menus/creating.md index 475d5014f3d955..a6d7779decc98e 100644 --- a/website/translated_docs/fr/Menus/creating.md +++ b/website/translated_docs/fr/Menus/creating.md @@ -1,105 +1,105 @@ --- id: creating -title: Créer des menus et des barres de menus +title: Creating menus and menu bars --- -Les barres de menus peuvent être définies : +You can create menus and menu bars: -- dans l'éditeur de menus de la fenêtre de Boîte à outils 4D. Dans ce cas, les menus et barres de menus sont stockés dans la structure de l'application. -- dynamiquement, à l'aide des commandes du langage depuis le thème "Menus". Dans ce cas, les menus et barres de menus ne sont pas stockés, ils existent uniquement dans la mémoire. +- using the Menus editor of the 4D Toolbox window. In this case, menus and menu bars are stored in the application's structure. +- dynamically, using the language commands from the "Menus" theme. In this case, menus and menu bars are not stored, they only exist in memory. -Vous pouvez combiner les deux fonctionnalités et utiliser les menus créés dans la structure comme templates pour définir des menus dans la mémoire. +You can combine both features and use menus created in structure as templates to define menus in memory. -## Barre de menu par défaut +## Default menu bar -Une application personnalisée doit contenir au moins une barre de menu avec un menu. By default, when you create a new project, 4D automatically creates a default menu bar (Menu Bar #1) so that you can access the Application environment. La barre de menus par défaut (Barre n°1) comporte des menus standard et une commande de retour au mode Développement. +A custom application must contain at least one menu bar with one menu. By default, when you create a new project, 4D automatically creates a default menu bar (Menu Bar #1) so that you can access the Application environment. The default menu bar includes standard menus and a command for returning to the Design mode. -This allows the user to access the Application environment as soon as the project is created. La barre de menus n°1 est automatiquement appelée lorsque la commande **Tester l’application** est sélectionnée dans le menu **Exécution**. +This allows the user to access the Application environment as soon as the project is created. Menu Bar #1 is called automatically when the **Test Application** command is chosen in the **Run** menu. -La barre de menus par défaut contient trois menus : Fichier, Edition et Mode. +The default menu bar includes three menus: -- **Fichier** : ce menu comporte uniquement la commande **Quitter**. L’action automatique *Quitter* est associée à la commande, ce qui a pour effet de provoquer la fermeture de l’application. -- **Edition** : menu standard et entièrement modifiable. Editing functions such as copy, paste, etc. are defined using standard actions. -- **Mode** : par défaut, ce menu contient la commande **Retour au mode Développement**, permettant de sortir du mode Application. -> Les libellés apparaissent *en caractères italiques* car il s’agit de références et non de textes en dur. Pour plus d’informations sur ce point, reportez-vous à la section [Utiliser des références dans les titres de menus](properties.md#title). +- **File**: only includes the **Quit** command. The *Quit* standard action is associated with the command, which causes the application to quit. +- **Edit**: standard and completely modifiable. Editing functions such as copy, paste, etc. are defined using standard actions. +- **Mode**: contains, by default, the **Return to Design mode** command, which is used to exit the Application mode. +> Menu items appear *in italics* because they consist of references and not hard-coded text. Refer to [Title property](properties.md#title). -Vous pouvez modifier cette barre de menus comme vous le souhaitez ou créer des barres de menus supplémentaires. +You can modify this menu bar as desired or create additional ones. -## Créer des menus +## Creating menus -### A l'aide de l'éditeur de menus +### Using the Menu editor -1. Sélectionnez la ligne de menu que vous souhaitez créer et cliquez sur le bouton d'ajout ![](assets/en/Menus/PlussNew.png) sous la zone de liste des barres de menu. OU Choisissez la commande **Créer une nouvelle barre de menus** ou **Créer un nouveau menu** dans le menu contextuel de la liste ou dans le menu d’options situé sous la liste. Si vous avez créé une barre de menu, une nouvelle barre de menus apparaît dans la liste, contenant les menus par défaut (Fichier et Edition). -2. (Facultatif) Effectuez un double-clic sur le nom du menu/de la barre de menus afin de le rendre éditable et saisissez un nom personnalisé. OU Saisissez le nom personnalisé dans la zone “Titre”. Les noms des barres de menu doivent être uniques. Ils peuvent comporter jusqu’à 31 caractères. You can enter the name as "hard coded" or enter a reference (see [information about the Title property](properties.md#title)). +1. Select the item you want to create and click the add ![](assets/en/Menus/PlussNew.png) button below the menu bar area. OR Choose **Create a new menu bar** or **Create a new menu** from the context menu of the list or the options menu below the list. If you created a menu bar, a new bar appears in the list containing the default menus (File and Edit). +2. (optional) Double-click on the name of the menu bar/menu to switch it to editing mode and enter a custom name. OR Enter the custom name in the "Title" area. Menu bar names must be unique. They may contain up to 31 characters. You can enter the name as "hard coded" or enter a reference (see [information about the Title property](properties.md#title)). -### A l'aide du langage 4D -Utilisez la commande de `Create menu` pour créer une nouvelle barre de menu ou une référence de menu (*MenuRef*) en mémoire. +### Using the 4D language +Use the `Create menu` command to create a new menu bar or menu reference (*MenuRef*) in memory. -Lorsque les menus sont gérés par des références *MenuRef*, il n'y a pas de différence en soi entre un menu et une barre de menus. Dans les deux cas, il s'agit d'une liste d'éléments. Seul leur utilisation diffère. Dans le cas d'une barre de menus, chaque élément correspond à un menu lui-même composé d'éléments. +When menus are handled by means of *MenuRef* references, there is no difference per se between a menu and a menu bar. In both cases, it consists of a list of items. Only their use differs. In the case of a menu bar, each item corresponds to a menu which is itself composed of items. -`Créer un menu` permet de créer des menus vides (à remplir à l'aide de l'option `APPEND MENU ITEM` ou `INSERT MENU ITEM`) ou des menus créés à partir de menus conçus dans l'éditeur de menus. +`Create menu` can create empty menus (to fill using `APPEND MENU ITEM` or `INSERT MENU ITEM`) or by menus built upon menus designed in the Menu editor. -## Ajouter des lignes -Pour chacun des menus, vous devez ajouter les commandes qui apparaissent lorsque le menu est déroulé. Vous pouvez insérer des lignes qui seront associées à des méthodes ou à des actions standard, ou rattacher d’autres menus (sous-menus). +## Adding items +For each of the menus, you must add the commands that appear when the menu drops down. You can insert items that will be associated with methods or standard actions, or attach other menus (submenus). -### A l'aide de l'éditeur de menus -Pour ajouter une ligne de menu : +### Using the Menu editor +To add a menu item: -1. Dans la liste des menus source, sélectionnez le menu auquel vous souhaitez ajouter une commande. Si le menu contient déjà des commandes, elles seront affichées dans la liste centrale. Si vous souhaitez insérer la nouvelle commande, sélectionnez celle que vous souhaitez voir apparaître ci-dessus. Il est toujours possible de réorganiser le menu ultérieurement par glisser-déposer. -2. Choisissez **Add an item to menu “MenuName”** dans le menu d'options de l'éditeur ou depuis le menu contextuel (clic droit dans la liste centrale). OU Cliquez sur le bouton Ajouter ![](assets/en/Menus/PlussNew.png) situé sous la liste centrale. 4D ajoute une nouvelle ligne avec le nom par défaut “Ligne X”, où X représente le nombre de lignes déjà créées. -3. Double-cliquez sur le nom de la commande pour passer en mode édition et saisissez un nom personnalisé. OU Saisissez le nom personnalisé dans la zone “Titre”. Il peut comporter jusqu’à 31 caractères. Vous pouvez saisir le nom comme "en dur" ou saisir une référence (voir ci-dessous). +1. In the list of source menus, select the menu to which you want to add a command. If the menu already has commands, they will be displayed in the central list. If you want to insert the new command, select the command that you want it to appear above. It is still be possible to reorder the menu subsequently using drag and drop. +2. Choose **Add an item to menu “MenuName”** in the options menu of the editor or from the context menu (right click in the central list). OR Click on the add ![](assets/en/Menus/PlussNew.png) button located below the central list. 4D adds a new item with the default name “Item X” where X is the number of items already created. +3. Double-click on the name of the command in order to switch it to editing mode and enter a custom name. OR Enter the custom name in the "Title" area. It may contain up to 31 characters. You can enter the name as "hard coded" or enter a reference (see below). -### A l'aide du langage 4D +### Using the 4D language -Utilisez `INSERT MENU ITEM` ou `APPEND MENU ITEM` pour insérer ou ajouter des lignes de menu dans les références de menu existantes. +Use `INSERT MENU ITEM` or `APPEND MENU ITEM` to insert or to add menu items in existing menu references. -## Supprimer des menus et des lignes de menus +## Deleting menus and items -### A l'aide de l'éditeur de menus -Vous pouvez supprimer une barre de menus, un menu ou une ligne de menu à tout moment. A noter qu’il n’existe qu’une seule référence d’un menu ou barre de menus. Lorsqu’un menu est rattaché à différentes barres ou différents menus, toute modification ou suppression effectuée dans ce menu est immédiatement reportée dans toutes les instances de ce menu. Supprimer un menu supprimera uniquement une référence. Lorsque vous supprimez la dernière référence d'un menu, 4D affiche une alerte. +### Using the Menu editor +You can delete a menu bar, a menu or a menu item in the Menu editor at any time. Note that each menu or menu bar has only one reference. When a menu is attached to different bars or different menus, any modification or deletion made to the menu is immediately carried out in all other occurrences of this menu. Deleting a menu will only delete a reference. When you delete the last reference of a menu, 4D displays an alert. -Pour supprimer une barre de menus, un menu ou une ligne de menu, vous disposez de deux possibilités : +To delete a menu bar, menu or menu item: -- Sélectionner l’élément à supprimer et de cliquer sur le bouton de suppression ![](assets/en/Menus/MinussNew.png) situé sous la liste. -- ou, utiliser la commande **Supprimer ...** dans le menu contextuel ou le menu d’options de l’éditeur. +- Select the item to be deleted and click on the delete ![](assets/en/Menus/MinussNew.png) button located beneath the list. +- or, use the appropriate **Delete...** command from the context menu or the options menu of the editor. -> Il est impossible de supprimer Menu Bar #1. +> It is not possible to delete Menu Bar #1. -### A l'aide du langage 4D +### Using the 4D language -Utilisez la commandes `SUPPRIMER LIGNE DE MENU` pour supprimer une ligne de la barre de menus. Utilisez la commande `EFFACER MENU` pour ne pas charger le menu de la mémoire. +Use `DELETE MENU ITEM` to remove an item from a menu reference. Use `RELEASE MENU` to unload the menu reference from the memory. -## Rattacher des menus +## Attaching menus -Une fois que vous avez créé un menu, vous pouvez le rattacher à une ou plusieurs barres de menus ou à un ou plusieurs autres menus (sous-menus). +Once you have created a menu, you can attach it to one or several other menus (sub-menu) or menu bar(s). -Les sous-menus permettent de regrouper des fonctions thématiques à l’intérieur d’un même menu. Les sous-menus et leurs lignes peuvent disposer des mêmes attributs que les menus (actions, méthodes, raccourcis, icônes, etc.). Les lignes du sous-menu conservent leurs caractéristiques et leurs propriétés, le fonctionnement du sous-menu est identique à celui d’un menu standard. +Sub-menus can be used to group together functions organized according to subject within the same menu. Sub-menus and their items can have the same attributes as the menus themselves (actions, methods, shortcuts, icons, and so on). The items of the sub-menu keep their original characteristics and properties and the functioning of the sub-menu is identical to that of a standard menu. -Vous pouvez créer des sous-menus de sous-menus sur une profondeur virtuellement illimitée. A noter toutefois que pour des raisons d’ergonomie d’interface, il n’est généralement pas conseillé de dépasser deux niveaux de sous-menus. +You can create sub-menus of sub-menus to a virtually unlimited depth. Note, however, that for reasons concerning interface ergonomics, it is generally not recommended to go beyond two levels of sub-menus. -A l'exécution, si un menu rattaché est modifié par programmation, toute autre élément du menu reflétera ces modifications. +At runtime, if an attached menu is modified by programming, every other instance of the menu will reflect these changes. -### A l'aide de l'éditeur de menus +### Using the Menu editor -Un menu peut être attaché à une barre de menus ou à un autre menu. +A menu can be attached to a menu bar or to another menu. -- Pour rattacher un menu à une barre de menus : faites un clic droit sur la barre de menus et sélectionnez **Attach a menu to the menu bar "nom de la barre"**, puis choisissez le menu à rattacher à la barre de menus : ![](assets/en/Menus/attach.png) Vous pouvez également sélectionner une barre de menus puis cliquez sur le bouton des options situé sous la liste. -- Pour rattacher un menu à un autre menu : sélectionnez le menu dans la partie gauche puis faites un clic droit sur la ligne de menus et sélectionnez **Attach a menu to the menu bar "nom de la barre"**, puis choisissez le menu à utiliser comme sous-menu : - ![](assets/en/Menus/attach2.png) Vous pouvez également sélectionner une ligne de menus puis cliquez sur le bouton des options situé sous la liste. Le menu que vous êtes en train de rattacher deviendra un sous-menu. Le titre de la ligne est maintenu (le nom initial du sous-menu est ignoré), mais il peut être modifié. +- To attach a menu to a menu bar: right-click on the menu bar and select **Attach a menu to the menu bar "bar name" >**, then choose the menu to be attached to the menu bar: ![](assets/en/Menus/attach.png) You can also select a menu bar then click on the options button found below the list. +- To attach a menu to another menu: select the menu in the left-hand area, then right-click on the menu item and select **Attach a sub-menu to the item "item name">**, then choose the menu you want to use as sub-menu: + ![](assets/en/Menus/attach2.png) You can also select a menu item then click on the options button found below the list. The menu being attached thus becomes a sub-menu. The title of the item is kept (the original sub-menu name is ignored), but this title can be modified. -#### Détacher des menus +#### Detaching menus -Vous pouvez à tout moment détacher un menu d’une barre ou un sous-menu d’un menu. Le menu détaché n’est alors plus disponible dans la barre ou le sous-menu, mais reste présent dans la liste des menus. +You can detach a menu from a menu bar or a sub-menu from a menu at any time. The detached menu is then no longer available in the menu bar or sub-menu as the case may be, but it is still present in the list of menus. -Pour détacher un menu, cliquez avec le bouton droit dans la liste centrale sur le menu ou le sous-menu à détacher puis choisissez la commande **Détacher le menu “nom menu” de la barre “nom barre”** ou **Détacher le sous-menu de la ligne “nom ligne”** +To detach a menu, right-click with the right button on the menu or sub-menu that you want to detach in the central list, then choose the **Detach the menu(...)** or **Detach the sub-menu(...)** -### A l'aide du langage 4D +### Using the 4D language -Etant donné qu'il n'y a pas de différence entre les menus et les barres de menus dans le langage de 4D, rattacher des menus ou des sous-menus se fait de la même manière : utilisez le paramètre *sous-menu* de la commande `APPEND MENU ITEM` pour rattacher un menu à une barre de menu ou à un autre menu. +Since there is no difference between menus and menu bars in the 4D language, attaching menus or sub-menus is done in the same manner: use the *subMenu* parameter of the `APPEND MENU ITEM` command to attach a menu to a menu bar or an menu. From bd183a86081087cfa2aa985f1291e9d4fd705282 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:17:46 +0100 Subject: [PATCH 066/260] New translations configuration.md (French) --- .../translated_docs/fr/REST/configuration.md | 71 ++++++++++--------- 1 file changed, 36 insertions(+), 35 deletions(-) diff --git a/website/translated_docs/fr/REST/configuration.md b/website/translated_docs/fr/REST/configuration.md index 52638caa8a1a85..e3c8d7dfdeb7fd 100644 --- a/website/translated_docs/fr/REST/configuration.md +++ b/website/translated_docs/fr/REST/configuration.md @@ -1,89 +1,90 @@ --- id: configuration -title: Configuration du serveur +title: Server Configuration --- Using standard HTTP requests, the 4D REST Server allows external applications to access the data of your application directly, *i.e.* to retrieve information about the dataclasses in your project, manipulate data, log into your web application, and much more. -Pour commencer à utiliser les fonctionnalités REST, vous devez démarrer et configurer le serveur 4D REST. +To start using the REST features, you need to start and configure the 4D REST server. -> - Sur 4D Server, l'ouverture d'une session REST nécessite une licence client 4D gratuite disponible.
    -> - Sur 4D monoposte, vous pouvez ouvrir jusqu'à trois sessions REST à des fins de test. Vous devez gérer le [cookie de session](authUsers.md#session-cookie) pour utiliser la même session pour votre application. +> - On 4D Server, opening a REST session requires that a free 4D client licence is available.
    +> - On 4D single-user, you can open up to three REST sessions for testing purposes. +> You need to manage the [session cookie](authUsers.md#session-cookie) to use the same session for your requesting application. -## Démarrage du serveur REST +## Starting the REST Server -Pour des raisons de sécurité, par défaut, 4D ne répond pas aux requêtes REST. If you want to start the REST Server, you must check the **Expose as REST server** option in the "Web/REST resource" page of the structure settings in order for REST requests to be processed. +For security reasons, by default, 4D does not respond to REST requests. If you want to start the REST Server, you must check the **Expose as REST server** option in the "Web/REST resource" page of the structure settings in order for REST requests to be processed. ![alt-text](assets/en/REST/Settings.png) -> Les services REST utilisent le serveur HTTP 4D; vous devez donc vous assurer que le serveur Web 4D est lancé. +> REST services use the 4D HTTP server, so you need to make sure that the 4D Web server is started. -Le message d'avertissement "Attention, vérifiez les privilèges d'accès" s'affiche lorsque vous cochez cette option, pour attirer votre attention sur le fait que lorsque les services REST sont activés, l'accès par défaut aux objets de base de données est gratuit tant que les accès REST n'ont pas été configurés. +The warning message "Caution, check the access privileges" is displayed when you check this option to draw your attention to the fact that when REST services are activated, by default access to database objects is free as long as the REST accesses have not been configured. -## Configuration de l'accès REST +## Configuring REST access -Par défaut, les accès REST sont ouverts à tous les utilisateurs, ce qui n'est évidemment pas recommandé pour des raisons de sécurité et de contrôle de l'utilisation des licences clientes. +By default, REST accesses are open to all users which is obviously not recommended for security reasons, and also to control client licenses usage. -Vous pouvez configurer les accès REST de l'une des manières suivantes : +You can configuring REST accesses with one of the following means: - assigning a **Read/Write** user group to REST services in the "Web/REST resource" page of the Structure Settings; -- saisir d'une méthode base `On REST Authentication`pour intercepter et gérer chaque demande REST initiale. +- writing an `On REST Authentication` database method to intercept and handle every initial REST request. -> Vous ne pouvez pas utiliser les deux fonctionnalités simultanément. Once an `On REST Authentication` database method has been defined, 4D fully delegates control of REST requests to it: any setting made using the "Read/Write" menu on the Web/REST resource page of the Structure Settings is ignored. +> You cannot use both features simultaneously. Once an `On REST Authentication` database method has been defined, 4D fully delegates control of REST requests to it: any setting made using the "Read/Write" menu on the Web/REST resource page of the Structure Settings is ignored. ### Using the Structure Settings The **Read/Write** menu in the "Web/REST resource" page of the structure settings specifies a group of 4D users that is authorized to establish the link to the 4D application using REST queries. -By default, the menu displays **\**, which means that REST accesses are open to all users. Une fois que vous avez spécifié un groupe, seul un compte utilisateur 4D appartenant à ce groupe peut être utilisé pour [accéder à 4D via une requête REST](authUsers.md). Si un compte utilisé n'appartient pas à ce groupe, 4D renvoie une erreur d'authentification à l'expéditeur de la requête. +By default, the menu displays **\**, which means that REST accesses are open to all users. Once you have specified a group, only a 4D user account that belongs to this group may be used to [access 4D by means of a REST request](authUsers.md). If an account is used that does not belong to this group, 4D returns an authentication error to the sender of the request. -> Pour que ce paramètre prenne effet, la méthode base `On REST Authentication` ne doit pas être définie. If it exists, 4D ignores access settings defined in the Structure Settings. +> In order for this setting to take effect, the `On REST Authentication` database method must not be defined. If it exists, 4D ignores access settings defined in the Structure Settings. -### Méthode base On REST Authentication -La méthode base `On REST Authentication` vous permet de contrôler de manière personnalisée l’ouverture des sessions REST sur 4D. Cette méthode base est automatiquement appelée lorsqu'une nouvelle session est ouverte à l'aide d'une requête REST. Lorsqu'une [requête d’ouverture de session REST](authUsers.md) est reçue, les identifiants de connexion sont fournis dans l’en-tête de la requête. La méthode base `On REST Authentication` est appelée afin de vous permettre d’évaluer ces identifiants. You can use the list of users for the 4D application or you can use your own table of identifiers. Pour obtenir plus d'informations, veuillez vous reporter à la [documentation](https://doc.4d.com/4Dv18/4D/18/On-REST-Authentication-database-method.301-4505004.fe.html) de la méthode base `On REST Authentication`. +### Using the On REST Authentication database method +The `On REST Authentication` database method provides you with a custom way of controlling the opening of REST sessions on 4D. This database method is automatically called when a new session is opened through a REST request. When a [request to open a REST session](authUsers.md) is received, the connection identifiers are provided in the header of the request. The `On REST Authentication` database method is called so that you can evaluate these identifiers. You can use the list of users for the 4D application or you can use your own table of identifiers. For more information, refer to the `On REST Authentication` database method [documentation](https://doc.4d.com/4Dv18/4D/18/On-REST-Authentication-database-method.301-4505004.en.html). -## Exposer les tables et les champs +## Exposing tables and fields -Once REST services are enabled in the 4D application, by default a REST session can access all tables and fields of the 4D database through the [datastore interface](ORDA/dsMapping.md#datastore). Thus, it can use their data. Par exemple, si votre base de données contient une table [Employee], il est possible d'écrire : +Once REST services are enabled in the 4D application, by default a REST session can access all tables and fields of the 4D database through the [datastore interface](ORDA/dsMapping.md#datastore). Thus, it can use their data. For example, if your database contains an [Employee] table, it is possible to write: ``` http://127.0.0.1:8044/rest/Employee/?$filter="salary>10000" ``` -Cette requête retournera tous les employés dont le champ "salary" est supérieur à 10 000. +This request will return all employees whose salary field is higher than 10000. -> Les tables et/ou champs 4D dont l'attribut est "invisible" sont également exposés par défaut dans REST. +> 4D tables and/or fields that have the "Invisible" attribute are also exposed in REST by default. -Si vous souhaitez personnaliser les objets du datastore accessibles via REST, vous devez désactiver l'exposition de chaque table et/ou champ que vous souhaitez masquer. Lorsqu'une requête REST tente d'accéder à une ressource non autorisée, 4D retourne une erreur. +If you want to customize the datastore objects accessible through REST, you must disable the exposure of each table and/or field that you want to hide. When a REST request attempts to access an unauthorized resource, 4D returns an error. -### Exposer des tables +### Exposing tables -Par défaut, toutes les tables sont exposées dans REST. +By default, all tables are exposed in REST. -Pour des raisons de sécurité, vous pouvez choisir d'exposer uniquement certaines tables du datastore aux appels REST. Par exemple, si vous avez créé une table [Users] stockant les noms d'utilisateur et les mots de passe, il serait préférable de ne pas l'exposer. +For security reasons, you may want to only expose certain tables of your datastore to REST calls. For instance, if you created a [Users] table storing user names and passwords, it would be better not to expose it. -Pour supprimer l'exposition REST d'une table : +To remove the REST exposure for a table: -1. Affichez l'Inspecteur de table dans l'Editeur de structure et sélectionnez la table à modifier. +1. Display the Table Inspector in the Structure editor and select the table you want to modify. -2. Décochez l'option **Exposer en tant que ressource REST** : ![alt-text](assets/en/REST/table.png) Procédez ainsi pour chaque table dont l'exposition doit être modifiée. +2. Uncheck the **Expose as REST resource** option: ![alt-text](assets/en/REST/table.png) Do this for each table whose exposure needs to be modified. -### Exposer des champs +### Exposing fields -Par défaut, touts les champs d'une base 4D sont exposés dans REST. +By default, all 4D database fields are exposed in REST. -Vous pouvez choisir d'exposer certains champs de vos tables à REST. Par exemple, si vous ne souhaitez pas exposer le champ [Employees]Salary. +You may not want to expose certain fields of your tables to REST. For example, you may not want to expose the [Employees]Salary field. -Pour supprimer l'exposition REST d'un champ : +To remove the REST exposure for a field: -1. Affichez l'Inspecteur de champ dans l'Editeur de structure et sélectionnez le champ à modifier. +1. Display the Field Inspector in the Structure editor and select the field you want to modify. -2. Décochez la case **Exposer en tant que ressource REST** pour le champ. ![alt-text](assets/en/REST/field.png) Répétez cette opération pour chaque champ dont l'exposition doit être modifiée. +2. Uncheck the **Expose as REST resource** for the field. ![alt-text](assets/en/REST/field.png) Repeat this for each field whose exposure needs to be modified. -> Pour qu'un champ soit accessible via REST, la table parente doit l'être également. Si la table parente n'est pas exposée, aucun de ses champs ne le sera, quel que soit leur statut. +> In order for a field to be accessible through REST, the parent table must be as well. If the parent table is not exposed, none of its fields will be, regardless of their status. From 778b6b33099ad685ac0270725836945d378d2b3f Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:17:50 +0100 Subject: [PATCH 067/260] New translations gettingStarted.md (French) --- .../translated_docs/fr/REST/gettingStarted.md | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/website/translated_docs/fr/REST/gettingStarted.md b/website/translated_docs/fr/REST/gettingStarted.md index a503cbec3f4764..abc25c50c7872e 100644 --- a/website/translated_docs/fr/REST/gettingStarted.md +++ b/website/translated_docs/fr/REST/gettingStarted.md @@ -1,55 +1,55 @@ --- id: gettingStarted -title: Prise en main +title: Getting Started --- 4D provides you with a powerful REST server, that allows direct access to data stored in your 4D applications. The REST server is included in 4D and 4D Server, it is automatically available in your 4D applications [once it is configured](configuration.md). -Cette section est destinée à vous familiariser avec la fonctionnalité REST à l'aide d'un exemple simple. Nous allons : +This section is intended to help familiarize you with REST functionality by means of a simple example. We are going to: - create and configure a basic 4D application project - access data from the 4D project through REST using a standard browser. -To keep the example simple, we’re going to use 4D and a browser that are running on the same machine. Bien entendu, vous pouvez également utiliser une architecture distante. +To keep the example simple, we’re going to use 4D and a browser that are running on the same machine. Of course, you could also use a remote architecture. ## Creating and configuring the 4D project -1. Launch your 4D or 4D Server application and create a new project. Vous pouvez, par exemple, le nommer "Emp4D". +1. Launch your 4D or 4D Server application and create a new project. You can name it "Emp4D", for example. -2. Dans l'éditeur de structure, créez une table [Employees] et ajoutez-y les champs suivants : +2. In the Structure editor, create an [Employees] table and add the following fields to it: - Lastname (Alpha) - Firstname (Alpha) - Salary (Longint) ![](assets/en/REST/getstarted1.png) -> L'option "Exposer une ressource REST" est cochée par défaut pour la table et pour chaque champ ; ne modifiez pas ce paramètre. +> The "Expose a REST resource" option is checked by default for the table and every field; do not change this setting. -3. Créez des formulaires, puis créez quelques employés : +3. Create forms, then create a few employees: ![](assets/en/REST/getstarted2.png) 4. Display the **Web/REST resource** page of the Settings dialog box and [check the Expose as REST server](configuration.md#starting-the-rest-server) option. -5. Dans le menu **Exécuter**, sélectionnez **Démarrer le serveur Web** (si nécessaire), puis sélectionnez **Tester le serveur Web**. +5. In the **Run** menu, select **Start Web Server** (if necessary), then select **Test Web Server**. -4D affiche la page d'accueil par défaut du serveur Web 4D. +4D displays the default home page of the 4D Web Server. -## Accéder aux données 4D avec le navigateur +## Accessing 4D data through the browser -Vous pouvez désormais lire et modifier des données dans 4D uniquement via les requêtes REST. +You can now read and edit data within 4D only through REST requests. -Toute requête d'URL 4D REST commence par `/ rest`, pour être insérée après la zone `adress:port`. Par exemple, pour voir le contenu du datastore 4D, vous pouvez écrire : +Any 4D REST URL request starts with `/rest`, to be inserted after the `address:port` area. For example, to see what's inside the 4D datastore, you can write: ``` http://127.0.0.1/rest/$catalog ``` -Le serveur REST répond : +The REST server replies: ``` { @@ -64,19 +64,19 @@ Le serveur REST répond : } ``` -Cela signifie que le datastore contient le dataclass Employees. You can see the dataclass attributes by typing: +It means that the datastore contains the Employees dataclass. You can see the dataclass attributes by typing: ``` /rest/$catalog/Employees ``` -Si vous souhaitez obtenir toutes les entités de la dataclass Employee, vous pouvez écrire : +If you want to get all entities of the Employee dataclass, you write: ``` /rest/Employees ``` -**Réponse :** +**Response:** ``` { @@ -117,13 +117,13 @@ Si vous souhaitez obtenir toutes les entités de la dataclass Employee, vous pou } ``` -Il existe plusieurs possibilités pour filtrer les données à recevoir. Par exemple, pour obtenir uniquement la valeur de l'attribut "Lastname" de la 2ème entité, vous pouvez simplement écrire : +You have many possibilities to filter data to receive. For example, to get only the "Lastname" attribute value from the 2nd entity, you can just write: ``` /rest/Employees(2)/Lastname ``` -**Réponse :** +**Response:** ``` { From fef9a422d807680a064ef95ef6f75ac4fffa34e6 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:17:52 +0100 Subject: [PATCH 068/260] New translations properties_Print.md (French) --- .../fr/FormObjects/properties_Print.md | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/properties_Print.md b/website/translated_docs/fr/FormObjects/properties_Print.md index a20df95975ca6a..89f16c006d3f9f 100644 --- a/website/translated_docs/fr/FormObjects/properties_Print.md +++ b/website/translated_docs/fr/FormObjects/properties_Print.md @@ -1,36 +1,36 @@ --- id: propertiesPrint -title: Imprimer +title: Print --- --- -## Impression cadre +## Print frame -Cette propriété permet de gérer le mode d'impression des objets dont la taille peut varier d'un enregistrement à l'autre en fonction de leur contenu. Ces objets peuvent être imprimés sur une hauteur de taille fixe ou variable. Un cadre de taille fixe provoque l’impression de l’objet dans les limites définies lors de la création de l’objet dans le formulaire. Un cadre de taille variable s’étend si nécessaire lors de l’impression afin d’imprimer l’intégralité de l’objet. A noter que la largeur des objets imprimés en taille variable n'est pas affectée par cette option; seule la hauteur varie automatiquement en fonction du contenu de l'objet. +This property handles the print mode for objects whose size can vary from one record to another depending on their contents. These objects can be set to print with either a fixed or variable frame. Fixed frame objects print within the confines of the object as it was created on the form. Variable frame objects expand during printing to include the entire contents of the object. Note that the width of objects printed as a variable size is not affected by this property; only the height varies automatically based on the contents of the object. -Vous ne pouvez pas placer deux objets (ou plus) avec une taille variable côte à côte dans un formulaire. Vous pouvez placer des objets de taille fixe à côté d’un objet qui sera imprimé avec une taille variable si l’objet de taille variable est plus long d’au moins une ligne que l’objet placé à son côté et que leurs limites supérieures sont alignées. Si cette condition n’est pas respectée, le contenu des autres champs sera répété pour toute tranche horizontale de l’objet de taille variable. +You cannot place more than one variable frame object side-by-side on a form. You can place non-variable frame objects on either side of an object that will be printed with a variable size provided that the variable frame object is at least one line longer than the object beside it and that all objects are aligned on the top. If this condition is not respected, the contents of the other fields will be repeated for every horizontal slice of the variable frame object. -> Les commandes `Print object` et `Print form` ne sont pas compatibles avec cette option. +> The `Print object` and `Print form` commands do not support this property. -Les options d'impression sont les suivantes : +The print options are: -- L'option **Variable** / **Impression taille variable** cochée : 4D agrandit ou réduit la zone de l'objet du formulaire afin d'imprimer tous les sous-enregistrements. +- **Variable** option / **Print Variable Frame** checked: 4D enlarges or reduces the form object area in order to print all the subrecords. -- L'option **Fixe (Tronqué)** / **Impression taille variable** non cochée : 4D imprime uniquement le contenu qui apparaît dans la zone de l'objet. Le formulaire n'est imprimé qu'une seule fois et le contenu non imprimé est ignoré. +- **Fixed (Truncation)** option / **Print Variable Frame** unchecked: 4D only prints the contents that appear in the object area. The form is only printed once and the contents not printed are ignored. -- **Fixe (Enregistrements multiples)** (sous-formulaires uniquement) : la taille initiale de la zone de sous-formulaire est conservée mais 4D imprime le formulaire plusieurs fois afin d'imprimer tous les enregistrements. +- **Fixed (Multiple Records)** (subforms only): the initial size of the subform area is kept but 4D prints the form several times in order to print all the records. -> Cette propriété peut être définie par programmation à l'aide de la commande `OBJECT SET PRINT VARIABLE FRAME`. +> This property can be set by programming using the `OBJECT SET PRINT VARIABLE FRAME` command. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -|:----------:|:---------------:| ----------------------------------------------------------------- | -| printFrame | string | "fixed", "variable", (sous-formulaire uniquement) "fixedMultiple" | +| Name | Data Type | Possible Values | +|:----------:|:---------:| --------------------------------------------------- | +| printFrame | string | "fixed", "variable", (subform only) "fixedMultiple" | -#### Objets pris en charge +#### Objects Supported -[Zone de saisie](input_overview.md) - [Sous-formulaires](subform_overview.md) (sous-formulaires liste uniquement) - [Zones 4D Write Pro](writeProArea_overview.md) +[Input](input_overview.md) - [Subforms](subform_overview.md) (list subforms only) - [4D Write Pro areas](writeProArea_overview.md) From 6a3d076ed983a974f262637a20cb069123e3a277 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:18:20 +0100 Subject: [PATCH 069/260] New translations log.md (French) --- website/translated_docs/fr/Backup/log.md | 34 ++++++++++++------------ 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/website/translated_docs/fr/Backup/log.md b/website/translated_docs/fr/Backup/log.md index 36a487885b346b..b7f1cd538d7b2e 100644 --- a/website/translated_docs/fr/Backup/log.md +++ b/website/translated_docs/fr/Backup/log.md @@ -3,17 +3,17 @@ id: log title: Fichier d'historique (.journal) --- -Une application exploitée de manière continue enregistre en permanence des modifications, des ajouts ou des suppressions d’enregistrements. Réaliser des sauvegardes régulières des données est important mais ne permet pas, en cas d’incident, de récupérer les données saisies depuis la dernière sauvegarde. Pour répondre à ce besoin, 4D dispose d’un outil particulier : le fichier d’historique. Ce fichier permet d’assurer la sécurité permanente des données. +A continuously-used application is always recording changes, additions or deletions. Réaliser des sauvegardes régulières des données est important mais ne permet pas, en cas d’incident, de récupérer les données saisies depuis la dernière sauvegarde. Pour répondre à ce besoin, 4D dispose d’un outil particulier : le fichier d’historique. This file allows ensuring permanent security of data. -En outre, 4D travaille en permanence avec un cache de données situé en mémoire. Toute modification effectuée sur les données de l'application est stockée provisoirement dans le cache avant d’être écrite sur le disque dur. Ce principe permet d’accélérer le fonctionnement des applications ; en effet, les accès mémoire sont bien plus rapides que les accès disque. Si un incident survient sur l'application avant que les données stockées dans le cache aient pu être écrites sur le disque, vous devrez intégrer le fichier d’historique courant afin de récupérer entièrement l'application. +En outre, 4D travaille en permanence avec un cache de données situé en mémoire. Any changes made to the application data are stored temporarily in the cache before being written to the hard disk. Ce principe permet d’accélérer le fonctionnement des applications ; en effet, les accès mémoire sont bien plus rapides que les accès disque. If an incident occurs in the application before the data stored in the cache could be written to the disk, you must include the current log file in order to restore the application entirely. -Enfin, 4D dispose d'une fonction d'analyse du contenu du fichier d'historique, permettant également de faire remonter en arrière les opérations exécutées sur les données de l'application. Ces fonctions sont accessibles via le CSM : reportez-vous aux sections [Page Analyse d'activités](MSC/analysis.md) et [Page Retour arrière](MSC/rollback.md). +Finally, 4D has functions that analyze the contents of the log file, making it possible to rollback the operations carried out on the application data. Ces fonctions sont accessibles via le CSM : reportez-vous aux sections [Page Analyse d'activités](MSC/analysis.md) et [Page Retour arrière](MSC/rollback.md). ## Fonctionnement du fichier d'historique -L’historique généré par 4D se présente sous la forme d’un fichier dans lequel toutes les opérations effectuées sur les données des tables journalisées de l'application viennent s’inscrire séquentiellement. Par défaut, toutes les tables sont journalisées, c'est-à-dire incluses dans l'historique, mais vous pouvez en désélectionner certaines via la propriété **Inclure dans le fichier d'historique**. +The log file generated by 4D contains a description of all operations performed on the data of journaled tables, which are logged sequentially. Par défaut, toutes les tables sont journalisées, c'est-à-dire incluses dans l'historique, mais vous pouvez en désélectionner certaines via la propriété **Inclure dans le fichier d'historique**. -Ainsi, chaque opération effectuée par un utilisateur provoque deux actions simultanées : une première sur le fichier de données (l’instruction est exécutée normalement) et une seconde dans le fichier d’historique (la description de l’opération y est enregistrée). Le fichier d’historique se construit de manière indépendante, sans gêner ni ralentir le travail de l’utilisateur. Une application ne peut travailler qu’avec un seul fichier d’historique à la fois. Le fichier d’historique enregistre les types d’opérations suivants : +As such, each operation performed by a user causes two simultaneous actions: the first one in the data file (instruction is executed normally) and the second one in the log file (the description of the operation is recorded). Le fichier d’historique se construit de manière indépendante, sans gêner ni ralentir le travail de l’utilisateur. An application can only work with one log file at a time. Le fichier d’historique enregistre les types d’opérations suivants : - Ouvertures et fermetures du fichier de données, - Ouvertures et fermetures de process (contextes), @@ -34,33 +34,33 @@ Ce schéma résume le principe général de fonctionnement du fichier d’histor Le fichier d’historique courant est automatiquement sauvegardé avec le fichier de données courant. Ce mécanisme procure deux avantages principaux : - Eviter la saturation du disque accueillant le fichier d’historique. En effet, sans sauvegarde, l’historique grossirait indéfiniment au fur et à mesure de l’exploitation de la base et finirait par saturer votre disque. A chaque sauvegarde du fichier de données, 4D ou 4D Server ferme le fichier d’historique courant et débute immédiatement un nouveau fichier vide, évitant ainsi le risque de saturation. L’ancien fichier d’historique est alors archivé puis éventuellement détruit, conformément au mécanisme des jeux de sauvegarde. -- Conserver les fichiers d’historique correspondant aux sauvegardes, afin de pouvoir analyser ou réparer a posteriori une application. En effet, l’intégration du fichier d’historique ne peut se faire que dans l'application qui lui correspond. Il est donc important, pour pouvoir intégrer correctement un fichier d’historique dans une sauvegarde, de disposer de sauvegardes et d’historiques archivés simultanément. +- It keeps log files corresponding to backups in order to be able to parse or repair an application at a later point in time. The integration of a log file can only be done in the application to which it corresponds. Il est donc important, pour pouvoir intégrer correctement un fichier d’historique dans une sauvegarde, de disposer de sauvegardes et d’historiques archivés simultanément. ## Créer le fichier d’historique -Par défaut, toute application créée avec 4D utilise un fichier d’historique (option définie dans la Page **Général** des Préférences de 4D). Le fichier d’historique est nommé par défaut *data.journal* et est placé dans le dossier Data. +By default, any application project created with 4D uses a log file (option set in the **General** page of the Preferences). Le fichier d’historique est nommé par défaut *data.journal* et est placé dans le dossier Data. -Vous pouvez à tout moment savoir si votre application utilise un fichier d’historique : l’option **Utiliser le fichier d’historique** est cochée dans la Page **Sauvegarde/Configuration** des Propriétés. Si vous avez désélectionné cette option ou si vous utilisez une application sans fichier d’historique et souhaitez mettre en place une stratégie de sauvegarde avec fichier d’historique, il vous appartient d’en créer un. +You can find out if your application uses a log file at any time: just check whether the **Use Log** option is selected on the **Backup/Configuration** page of the Settings. If you deselected this option, or if you use an application without a log file and wish to set up a backup strategy with a log file, you will have to create one. Pour créer un fichier d’historique : -1. Dans la Page **Sauvegarde/Configuration** des Propriétés de structure, cochez l’option **Utiliser le fichier d’historique**. Le programme affiche une boîte de dialogue standard de création de fichier. Par défaut, le fichier d’historique est baptisé *data.journal*. +1. On the **Backup/Configuration** page of the Structure Settings, check the **Use Log** option. Le programme affiche une boîte de dialogue standard de création de fichier. Par défaut, le fichier d’historique est baptisé *data.journal*. -2. Conservez le nom du fichier par défaut ou choisissez-en un autre et déterminez l’emplacement du fichier. Si vous disposez d’au moins deux disques durs, il est recommandé de placer le fichier d'historique sur un autre disque que celui contenant le projet d'application. Si le disque dur de l'application est perdu, vous pouvez toujours rappeler votre fichier d'historique. +2. Conservez le nom du fichier par défaut ou choisissez-en un autre et déterminez l’emplacement du fichier. If you have at least two hard drives, it is recommended that you place the log file on a disk other than the one containing the application project. If the application hard drive is lost, you can still recall your log file. 3. Cliquez sur le bouton **Enregistrer**. Le disque et le nom du fichier d’historique ouvert s’affichent alors dans la zone **“Utiliser le fichier d’historique”** de la boîte de dialogue. Vous pouvez cliquer dans cette zone afin d’afficher un pop up menu contenant l’enchaînement des dossiers à partir du disque. -4. Validez la boîte de dialogue des Propriétés. +4. Validate the Settings dialog box. -Pour que vous puissiez directement créer un fichier d’historique, les données doivent se trouver dans une des situations suivantes : +In order for you to be able to create a log file directly, the data must be in one of the following situations: - Le fichier de données est vierge, -- Vous venez d’effectuer une sauvegarde et aucune modification sur les données n’a encore été effectuée. +- You just performed a backup and no changes have yet been made to the data. -Dans tous les autres cas, au moment où vous validez la fenêtre des Propriétés, une boîte de dialogue d’alerte vous informe qu’une sauvegarde est nécessaire. Si vous cliquez sur **OK**, la sauvegarde démarre immédiatement puis l’historique est activé. Si vous cliquez sur **Annuler**, la requête est enregistrée mais la création du fichier d’historique est différée et sera créée uniquement après la prochaine sauvegarde de l'application. Cette précaution est indispensable car il vous faudra, pour restituer une application après un éventuel incident, disposer d’une copie de l'application dans laquelle pourront s’intégrer les opérations enregistrées dans le fichier d’historique. +In all other cases, when you validate the Settings dialog box, an alert dialog box will appear to inform you that it is necessary to perform a backup. Si vous cliquez sur **OK**, la sauvegarde démarre immédiatement puis l’historique est activé. If you click **Cancel**, the request is saved but the creation of the log file is postponed and it will actually be created only after the next backup of the application. This precaution is indispensable because, in order to restore an application after any incidents, you will need a copy of the application into which the operations recorded in the log file will be integrated. -Sans autre manipulation de votre part, toutes les opérations effectuées sur les données s’inscriront dans ce fichier, et il sera utilisé également lors des ouvertures ultérieures de l'application. +Without having to do anything else, all operations performed on the data are logged in this file and it will be used in the future when the application is opened. Vous devrez créer un autre fichier d’historique si vous créez un nouveau fichier de données. Vous devrez désigner ou créer un autre fichier d’historique si vous ouvrez un autre fichier de données non associé à un fichier d’historique (ou si le fichier d’historique est manquant). @@ -68,13 +68,13 @@ Vous devrez créer un autre fichier d’historique si vous créez un nouveau fic ## Fermer l’historique -Si vous souhaitez interrompre l’enregistrement du fichier d’historique courant, désélectionnez l’option **Utiliser le fichier d’historique** dans la Page **Sauvegarde/Configuration** des Propriétés. +If you would like to stop logging operations to the current log file, simply deselect the **Use Log** option on the **Backup/Configuration** page of the Settings. 4D affiche alors un message d’alerte afin d’attirer votre attention sur le fait que cette action vous prive de la sécurité apportée par le fichier d’historique : ![](assets/en/Backup/backup06.png) -Si vous cliquez sur le bouton **Fermer**, le fichier d’historique courant est immédiatement refermé (il n’est pas nécessaire que la boîte de dialogue des Propriétés soit ensuite validée). +If you click **Stop**, the current log file is immediately closed (the Settings dialog box does not need to be validated afterwards). Si vous souhaitez fermer votre fichier d’historique courant parce qu’il devient trop important, il est préférable d’effectuer une sauvegarde du fichier de données, ce qui entraînera la sauvegarde de l’historique. From b6eea53f1a38a72b65453e51d7df83c43e4bcabe Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:18:24 +0100 Subject: [PATCH 070/260] New translations manData.md (French) --- website/translated_docs/fr/REST/manData.md | 112 ++++++++++----------- 1 file changed, 56 insertions(+), 56 deletions(-) diff --git a/website/translated_docs/fr/REST/manData.md b/website/translated_docs/fr/REST/manData.md index 05a3762edff742..e1474017d610ae 100644 --- a/website/translated_docs/fr/REST/manData.md +++ b/website/translated_docs/fr/REST/manData.md @@ -1,13 +1,13 @@ --- id: manData -title: Manipulation des données +title: Manipulating Data --- -Tous [les attributs, dataclasses exposés](configuration.md#exposing-tables-and-fields) et toutes les [fonctions](classFunctions.md) sont accessibles via REST. Les noms de dataclass, d'attributs et de fonctions sont sensibles à la casse; contrairement aux données des requêtes. +All [exposed dataclasses, attributes](configuration.md#exposing-tables-and-fields) and [functions](classFunctions.md) can be accessed through REST. Dataclass, attribute, and function names are case-sensitive; however, the data for queries is not. -## Rechercher des données +## Querying data -Pour rechercher directement des données, vous pouvez utiliser la fonction [`$filter`]($filter.md). Par exemple, pour trouver une personne nommée "Smith", vous pouvez écrire : +To query data directly, you can do so using the [`$filter`]($filter.md) function. For example, to find a person named "Smith", you could write: `http://127.0.0.1:8081/rest/Person/?$filter="lastName=Smith"` @@ -16,105 +16,105 @@ Pour rechercher directement des données, vous pouvez utiliser la fonction [`$fi ## Adding, modifying, and deleting entities -Avec l'API REST, vous pouvez effectuer toutes les manipulations de données souhaitées dans 4D. +With the REST API, you can perform all the manipulations to data as you can in 4D. -Pour ajouter et modifier des entités, vous pouvez appeler [`$method=update`]($method.md#methodupdate). Si vous souhaitez supprimer une ou plusieurs entités, vous pouvez utiliser [`$method=delete`]($method.md#methoddelete). +To add and modify entities, you can call [`$method=update`]($method.md#methodupdate). If you want to delete one or more entities, you can use [`$method=delete`]($method.md#methoddelete). -Outre la récupération d'un attribut dans une dataclass à l'aide de [{dataClass}({key})](%7BdataClass%7D_%7Bkey%7D.html), vous pouvez également écrire une [fonction de classe (class function)](classFunctions.md#function-calls) qui retourne une entity selection (ou une collection). +Besides retrieving a single entity in a dataclass using [{dataClass}({key})](%7BdataClass%7D_%7Bkey%7D.html), you can also write a [class function](classFunctions.md#function-calls) that returns an entity selection (or a collection). -Avant de retourner la sélection, vous pouvez également la trier en utilisant [`$orderby`]($orderby.md) un ou plusieurs attributs (même les attributs de relation). +Before returning a selection, you can also sort it by using [`$orderby`]($orderby.md) one one or more attributes (even relation attributes). ## Navigating data -Ajoutez le [`$skip`]($skip.md) (pour définir avec quelle entité commencer) et [`$top/$limit`]($top_$limit.md) (pour définir le nombre d'entités à retourner) des requêtes REST à vos requêtes ou entity selections pour parcourir la collection d'entités. +Add the [`$skip`]($skip.md) (to define with which entity to start) and [`$top/$limit`]($top_$limit.md) (to define how many entities to return) REST requests to your queries or entity selections to navigate the collection of entities. ## Creating and managing entity set -Un ensemble d'entités (également appelé *entity set* ou <0>entity selection) est une collection d'entités obtenue via une requête REST stockée dans le cache de 4D Server. L'utilisation d'un entity set vous empêche de lancer continuellement des requêtes à votre application pour obtenir les mêmes résultats. L'accès à un entity set est beaucoup plus rapide et peut améliorer la vitesse de votre application. +An entity set (aka *entity selection*) is a collection of entities obtained through a REST request that is stored in 4D Server's cache. Using an entity set prevents you from continually querying your application for the same results. Accessing an entity set is much quicker and can improve the speed of your application. -Pour créer un entity set, appelez [`$method=entityset`]($method.md#methodentityset) dans votre requête REST. Par mesure de sécurité, vous pouvez également utiliser [`$savedfilter`]($savedfilter.md) et/ou [`$savedorderby`]($savedorderby.md) lorsque vous appelez [`$filter`]($filter.md) et/ou [`$orderby`]($orderby.md) afin que l'entité définie puisse être rapidement récupérée avec le même ID que précédemment, dans le cas où elle expireait ou serait supprimée du serveur. +To create an entity set, call [`$method=entityset`]($method.md#methodentityset) in your REST request. As a measure of security, you can also use [`$savedfilter`]($savedfilter.md) and/or [`$savedorderby`]($savedorderby.md) when you call [`$filter`]($filter.md) and/or [`$orderby`]($orderby.md) so that if ever the entity set timed out or was removed from the server, it can be quickly retrieved with the same ID as before. -Pour accéder à l'entity set, vous devez utiliser `$entityset/{entitySetID}`, par exemple : +To access the entity set, you must use `$entityset/{entitySetID}`, for example: `/rest/People/$entityset/0AF4679A5C394746BFEB68D2162A19FF` -Par défaut, un entity set est stocké pendant deux heures; cependant, vous pouvez modifier le timeout en passant une nouvelle valeur à [`$timeout`]($timeout.md). Le timeout est continuellement réinitialisé à la valeur définie (soit par défaut soit à celle que vous définissez) chaque fois que vous l'utilisez. +By default, an entity set is stored for two hours; however, you can change the timeout by passing a new value to [`$timeout`]($timeout.md). The timeout is continually being reset to the value defined for its timeout (either the default one or the one you define) each time you use it. -Si vous souhaitez supprimer un entity set du cache de 4D Server, vous pouvez utiliser [`$method=release`]($method.md#methodrelease). +If you want to remove an entity set from 4D Server's cache, you can use [`$method=release`]($method.md#methodrelease). -Si vous modifiez l'un des attributs de l'entité dans l'entity set, les valeurs seront mises à jour. Toutefois, si vous modifiez une valeur qui faisait partie de la requête exécutée pour créer l'entity set, elle ne sera pas supprimée de l'entity set même si elle ne correspond plus aux critères de recherche. Bien entendu, les entités que vous supprimez ne feront plus partie de l'entity set. +If you modify any of the entity's attributes in the entity set, the values will be updated. However, if you modify a value that was a part of the query executed to create the entity set, it will not be removed from the entity set even if it no longer fits the search criteria. Any entities you delete will, of course, no longer be a part of the entity set. -Si l'ensemble d'entités ne se trouve plus dans le cache de 4D Server, il sera recréé avec un nouveau timeout de 10 minutes. L'ensemble d'entités sera actualisé (certaines entités peuvent être incluses tandis que d'autres peuvent être supprimées) depuis la dernière fois qu'il a été créé, s'il n'existait plus avant de le recréer. +If the entity set no longer exists in 4D Server's cache, it will be recreated with a new default timeout of 10 minutes. The entity set will be refreshed (certain entities might be included while others might be removed) since the last time it was created, if it no longer existed before recreating it. -Using [`$entityset/{entitySetID}?$logicOperator... &$otherCollection`]($entityset.md#entitysetentitysetidoperatorothercollection), you can combine two entity sets that you previously created. Vous pouvez combiner les résultats dans les deux, retourner uniquement ce qui est commun aux deux, ou renvoyer ce qui n'est pas commun aux deux. +Using [`$entityset/{entitySetID}?$logicOperator... &$otherCollection`]($entityset.md#entitysetentitysetidoperatorothercollection), you can combine two entity sets that you previously created. You can either combine the results in both, return only what is common between the two, or return what is not common between the two. -Une nouvelle sélection d'entités est renvoyée; vous pouvez néanmoins créer un nouvel ensemble d'entités en appelant [`$method=entityset`]($method.md#methodentityset) à la fin de la requête REST. +A new selection of entities is returned; however, you can also create a new entity set by calling [`$method=entityset`]($method.md#methodentityset) at the end of the REST request. ## Calculating data -En utilisant [`$compute`]($compute.md), vous pouvez calculer la **moyenne**, le **nombre**, le **min**, le **max** ou la **somme** pour un attribut spécifique d'une dataclass. Vous pouvez également calculer toutes les valeurs avec le mot clé $all. +By using [`$compute`]($compute.md), you can compute the **average**, **count**, **min**, **max**, or **sum** for a specific attribute in a dataclass. You can also compute all values with the $all keyword. -Par exemple, pour obtenir le salaire le plus élevé : +For example, to get the highest salary: `/rest/Employee/salary/?$compute=sum` -Pour calculer toutes les valeurs et retourner un objet JSON : +To compute all values and return a JSON object: `/rest/Employee/salary/?$compute=$all` -## Appeler les fonctions de classe du modèle de données +## Calling Data model class functions -Vous pouvez appeler des [fonctions de classe utilisateurs](classFunctions.md) ORDA du modèle de données via des requêtes POST, afin de pouvoir bénéficier de l'API de l'application ciblée. Par exemple, si vous avez défini une fonction `getCity()` dans la dataclass City, vous pouvez l'appeler à l'aide de la requête suivante : +You can call ORDA Data Model [user class functions](classFunctions.md) through POST requests, so that you can benefit from the exposed API of the targeted application. For example, if you have defined a `getCity()` function in the City dataclass class, you could call it using the following request: `/rest/City/getCity` -avec des données contenues dans le corps de la requête : `["Paris"]` +with data in the body of the request: `["Paris"]` -> Les appels aux méthodes projet 4D exposées en tant que service REST sont toujours pris en charge mais sont obsolètes. +> Calls to 4D project methods that are exposed as REST Service are still supported but are deprecated. ## Selecting Attributes to get -Vous pouvez toujours définir les attributs à retourner dans la réponse REST après une requête initiale en passant leur chemin d'accès dans la requête (par exemple, `Company(1)/name,revenues/`) +You can always define which attributes to return in the REST response after an initial request by passing their path in the request (*e.g.*, `Company(1)/name,revenues/`) -Vous pouvez appliquer ce filtre comme suit : +You can apply this filter in the following ways: -| Objet | Syntaxe | Exemple | -| -------------------- | --------------------------------------------------- | ------------------------------------------------------------- | -| Dataclass | {dataClass}/{att1,att2...} | /People/firstName,lastName | -| Collection d'entités | {dataClass}/{att1,att2...}/?$filter="{filter}" | /People/firstName,lastName/?$filter="lastName='a@'" | -| Entité spécifique | {dataClass}({ID})/{att1,att2...} | /People(1)/firstName,lastName | -| | {dataClass}:{attribute}(value)/{att1,att2...}/ | /People:firstName(Larry)/firstName,lastName/ | -| Entity selection | {dataClass}/{att1,att2...}/$entityset/{entitySetID} | /People/firstName/$entityset/528BF90F10894915A4290158B4281E61 | +| Objet | Syntax | Example | +| ---------------------- | --------------------------------------------------- | ------------------------------------------------------------- | +| Dataclass | {dataClass}/{att1,att2...} | /People/firstName,lastName | +| Collection of entities | {dataClass}/{att1,att2...}/?$filter="{filter}" | /People/firstName,lastName/?$filter="lastName='a@'" | +| Specific entity | {dataClass}({ID})/{att1,att2...} | /People(1)/firstName,lastName | +| | {dataClass}:{attribute}(value)/{att1,att2...}/ | /People:firstName(Larry)/firstName,lastName/ | +| Entity selection | {dataClass}/{att1,att2...}/$entityset/{entitySetID} | /People/firstName/$entityset/528BF90F10894915A4290158B4281E61 | -Les attributs doivent être délimités par une virgule, c'est-à-dire `/Employee/firstName,lastName,salary`. Des attributs de stockage ou des attributs relationnels peuvent être transmis. +The attributes must be delimited by a comma, *i.e.*, `/Employee/firstName,lastName,salary`. Storage or relation attributes can be passed. -### Exemples -Voici quelques exemples vous permettant d'indiquer les attributs à retourner en fonction de la méthode employée pour récupérer les entités. +### Examples +Here are a few examples, showing you how to specify which attributes to return depending on the technique used to retrieve entities. -Vous pouvez appliquer cette méthode à : +You can apply this technique to: -- Dataclass (tout ou une collection d'entités dans une dataclass) -- Entités spécifiques +- Dataclasses (all or a collection of entities in a dataclass) +- Specific entities - Entity sets -#### Exemple avec une dataclass +#### Dataclass Example -Les requêtes suivantes retournent uniquement le prénom et le nom de la datastore class People (soit la datastore class entière, soit une sélection d'entités basée sur la recherche définie dans `$filter`). +The following requests returns only the first name and last name from the People datastore class (either the entire datastore class or a selection of entities based on the search defined in `$filter`). `GET /rest/People/firstName,lastName/` -**Résultat** : +**Result**: ```` { @@ -154,7 +154,7 @@ Les requêtes suivantes retournent uniquement le prénom et le nom de la datasto `GET /rest/People/firstName,lastName/?$filter="lastName='A@'"/` -**Résultat** : +**Result**: ```` { @@ -174,13 +174,13 @@ Les requêtes suivantes retournent uniquement le prénom et le nom de la datasto ```` -#### Exemple d'entité +#### Entity Example -La requête suivante retourne uniquement les attributs de prénom et nom à partir d'une entité spécifique de la dataclass People : +The following request returns only the first name and last name attributes from a specific entity in the People dataclass: `GET /rest/People(3)/firstName,lastName/` -**Résultat** : +**Result**: ```` { @@ -195,7 +195,7 @@ La requête suivante retourne uniquement les attributs de prénom et nom à part `GET /rest/People(3)/` -**Résultat** : +**Result**: ```` { @@ -218,31 +218,31 @@ La requête suivante retourne uniquement les attributs de prénom et nom à part } ```` -#### Exemple d'ensemble d'entités +#### Entity Set Example Once you have [created an entity set](#creating-and-managing-entity-set), you can filter the information in it by defining which attributes to return: `GET /rest/People/firstName,employer.name/$entityset/BDCD8AABE13144118A4CF8641D5883F5?$expand=employer` -## Affichage d'un attribut d'image +## Viewing an image attribute -Si vous souhaitez afficher intégralement un attribut d'image, saisissez ce qui suit : +If you want to view an image attribute in its entirety, write the following: `GET /rest/Employee(1)/photo?$imageformat=best&$version=1&$expand=photo` -Pour plus d'informations sur les formats d'image, reportez-vous à [`$imageformat`]($imageformat.md). Pour plus d'informations sur le paramètre de version, reportez-vous à [`$version`]($version.md). +For more information about the image formats, refer to [`$imageformat`]($imageformat.md). For more information about the version parameter, refer to [`$version`]($version.md). -## Enregistrement d'un attribut BLOB sur le disque +## Saving a BLOB attribute to disk -Si vous souhaitez enregistrer un BLOB stocké dans votre dataclass, vous pouvez écrire ce qui suit : +If you want to save a BLOB stored in your dataclass, you can write the following: `GET /rest/Company(11)/blobAtt?$binary=true&$expand=blobAtt` -## Récupérer une seule entité +## Retrieving only one entity -Vous pouvez utiliser la syntaxe[`{dataClass}:{attribute}(value)`](%7BdataClass%7D.html#dataclassattributevalue) lorsque vous souhaitez récupérer une seule entité. C'est particulièrement utile lorsque vous souhaitez lancer une recherche associée qui n'est pas créée sur la clé primaire de la dataclass. Par exemple, vous pouvez écrire : +You can use the [`{dataClass}:{attribute}(value)`](%7BdataClass%7D.html#dataclassattributevalue) syntax when you want to retrieve only one entity. It's especially useful when you want to do a related search that isn't created on the dataclass's primary key. For example, you can write: `GET /rest/Company:companyCode("Acme001")` From cba6b3403d6ede26473f86170267d8cf89d8b5ab Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:18:27 +0100 Subject: [PATCH 071/260] New translations handling_users_groups.md (French) --- .../fr/Users/handling_users_groups.md | 152 +++++++++--------- 1 file changed, 76 insertions(+), 76 deletions(-) diff --git a/website/translated_docs/fr/Users/handling_users_groups.md b/website/translated_docs/fr/Users/handling_users_groups.md index b96f398016accb..caa789f952a4b2 100644 --- a/website/translated_docs/fr/Users/handling_users_groups.md +++ b/website/translated_docs/fr/Users/handling_users_groups.md @@ -1,153 +1,153 @@ --- id: editing -title: Gestion des groupes et utilisateurs 4D +title: Managing 4D users and groups --- -## Super_Utilisateur et Administrateur +## Designer and Administrator -4D fournit à certains utilisateurs des privilèges d’accès standard ainsi que des prérogatives spécifiques. Une fois qu’un système d’utilisateurs et de groupes a été créé, ces privilèges standard prennent effet. +4D provides users with certain standard access privileges and certain powers. Once a users and groups system has been initiated, these standard privileges take effect. -L’utilisateur le plus puissant est le **Super_Utilisateur**. Aucune partie de l'application n’est inaccessible au Super_Utilisateur. Le Super_Utilisateur peut : -- accéder à tous les serveurs de l'application sans restrictions, -- créer des utilisateurs et des groupes, -- affecter des privilèges d’accès aux groupes, -- utiliser le mode Développement. En monoposte, les droits d'accès du Super_Utilisateur sont toujours utilisés. En mode client/serveur, l'affectation d'un mot de passe au Super_Utilisateur affiche la boîte de dialogue de connexion. L'accès au mode Développement est en lecture seule. +The most powerful user is named **Designer**. No aspect of the application is closed to the Designer. The Designer can: +- access all application servers without restriction, +- create users and groups, +- assign access privileges to groups, +- access the Design environment. In single-user environment, Designer access rights are always used. In client/server environment, assigning a password to the Designer activates the display of the 4D user login dialog. Access to Design environment is read-only. -Après le Super_Utilisateur, le second plus puissant utilisateur est **l’Administrateur**, qui est en général responsable de la gestion du système d’accès et des fonctionnalités d'administration. +After the Designer, the next most powerful user is the **Administrator**, who is usually given the tasks of managing the access system and administration features. -L'Administrateur peut : -- créer des utilisateurs et des groupes, -- accéder au moniteur et à la fenêtre d'administration de 4D Server -- accéder à la fenêtre CSM pour gérer les sauvegardes, restitutions ou le serveur. +The Administrator can: +- create users and groups, +- access the 4D Server Administration window and monitor +- access the MSC window to monitor backup, restore, or server. -L'Administrateur ne peut pas : -- modifier l'utilisateur Super_Utilisateur -- par défaut, accéder à des objets protégés de l'application. En particulier, l'Administrateur ne peut pas accéder au mode Développement s'il est restreint. L'Administrateur doit faire partie d'un ou plusieurs groupes pour avoir des privilèges d’accès dans l'application. Il est placé dans tous les nouveaux groupes, mais vous pouvez cependant l'exclure de ces groupes. +The Administrator cannot: +- edit the Designer user +- by default, access to protected parts of the application. In particular, the Administrator cannot access to the Design mode if it is restricted. The Administrator must be part of one or more groups to have access privileges in the application. The Administrator is placed in every new group, but you can remove the Administrator’s name from any group. -Par défaut, le Super_Utilisateur et l'Administrateur se trouvent dans toutes les applications. Dans la [boîte de dialogue de gestion des utilisateurs](#users-and-groups-editor), les icônes du Super_Utilisateur et de l’Administrateur ont des icônes respectivement rouge et verte : +Both the Designer and Administrator are available by default in all applications. In the [user management dialog box](#users-and-groups-editor), the icons of the Designer and Administrator are displayed in red and green respectively: -- Icône du Super_Utilisateur : ![](assets/en/Users/iconDesigner.png) -- Icône de l'Administrateur : ![](assets/en/Users/iconAdmin.png) +- Designer icon: ![](assets/en/Users/iconDesigner.png) +- Administrator icon: ![](assets/en/Users/iconAdmin.png) -Vous pouvez renommer les utilisateurs Super_Utilisateur et Administrateur. Dans le langage, Super_Utilisateur porte toujours l'identifiant 1 et l'Administrateur l'identifiant 2. +You can rename the Designer and Administrator users. In the language, the Designer ID is always 1 and the Administrator ID is always 2. -Le Super_Utilisateur et l’Administrateur peuvent créer chacun 16 000 groupes et 16 000 utilisateurs. +The Designer and Administrator can each create up to 16,000 groups and 16,000 users. -## Éditeur d'utilisateurs +## Users editor -L'éditeur des utilisateurs se trouve dans la boîte à outils de 4D. +The editor for users is located in the Toolbox of 4D. ![](assets/en/Users/editor.png) -### Ajouter et modifier des utilisateurs +### Adding and modifying users -Vous utilisez l’éditeur d’utilisateurs pour créer des comptes utilisateurs, définir leurs propriétés et leur appartenance aux différents groupes. +You use the users editor to create user accounts, set their properties and assign them to various groups. -Pour ajouter un utilisateur depuis la boite à outils : +To add a user from the Toolbox : -1. Sélectionnez **Boîte à outils > Utilisateurs** dans le menu **Développement** ou cliquez sur le bouton **Boîte outils** de la barre d’outils de 4D. 4D affiche la fenêtre d’édition des utilisateurs. +1. Select **Tool Box > Users** from the **Design** menu or click on the **Tool Box** button of the 4D toolbar. 4D displays the users editor. -La liste des utilisateurs affiche tous les utilisateurs, y compris [le Super_Utilisateur et l'l’Administrateur](#designer-and-administrator). +The list of users displays all the users, including the [Designer and the Administrator](#designer-and-administrator). -2. Cliquez sur le bouton d’ajout ![](assets/en/Users/PlussNew.png) situé au-dessous de la Liste des utilisateurs. OU Cliquez avec le bouton droit de la souris dans la Liste des utilisateurs et choisissez la commande **Ajouter** ou **Dupliquer** dans le menu contextuel. +2. Click on the ![](assets/en/Users/PlussNew.png) button located below the list of users. OR Right-click in the list of users and choose **Add** or **Duplicate** in the context menu. -> La commande **Dupliquer** permet de créer rapidement plusieurs utilisateurs ayant des caractéristiques communes. +> The **Duplicate** command can be used to create several users having the same characteristics quickly. -4D ajoute un nouvel utilisateur à la liste, nommé par défaut "Nouvel utilisateurN". +4D adds a new user to the list, named "New userX" by default. -3. Saisissez le nom du nouvel utilisateur. Ce nom sera utilisé par l’utilisateur pour ouvrir l'application. Vous pouvez renommer un utilisateur à tout moment en utilisant la commande **Renommer** du menu contextuel, ou en utilisant la combinaison Alt+clic (Windows) ou Option+clic (macOS) ou en cliquant deux fois sur un nom. +3. Enter the user name. This name will be used by the user to open the application. You can rename a user at any time using the **Rename** command of the context menu, or by using the Alt+click (Windows) or Option+click (macOS) shortcuts, or by clicking twice on the name you want to change. -4. Pour saisir le mot de passe de l’utilisateur, cliquez sur le bouton **Modifier...** dans la zone des propriétés de l’utilisateur et saisissez deux fois le mot de passe dans la boite de dialogue. Vous pouvez saisir jusqu’à 15 caractères alphanumériques. L’éditeur de mots de passe tient compte de la casse des caractères (majuscules ou minuscules). +4. To enter a password for the user, click the **Edit...** button in the user properties area and enter the password twice in the dialog box. You can use up to 15 alphanumeric characters for a password. The password editor is case sensitive. -> Les utilisateurs peuvent modifier leur mot de passe à tout moment en fonction des options de la page Sécurité des propriétés de la structure, ou à l'aide de la commande `CHANGE PASSWORD`. +> Users can change their password at any time according to the options in the "Security" page of the structure settings, or using the `CHANGE PASSWORD` command. -5. Définissez le ou les groupe(s) d’appartenance de l’utilisateur à l’aide du tableau “Membre des groupes”. Vous pouvez ajouter l’utilisateur sélectionné à un groupe en cochant l’option correspondante dans la colonne Membre. +5. Set the group(s) to which the user belongs using the "Member of Groups" table. You can add or remove the selected user to/from a group by checking the corresponding option in the Member column. -L’appartenance des utilisateurs aux groupes peut également être définie par groupe dans la [page Groupes](#configuring-access-groups). +The membership of users to different groups can also be set by group on the [Groups page](#configuring-access-groups). -### Supprimer un utilisateur +### Deleting a user -Pour supprimer un utilisateur, sélectionnez-le puis cliquez sur le bouton de suppression ou utilisez la commande **Supprimer** du menu contextuel. ![](assets/en/Users/MinussNew.png) +To delete a user, select it then click the deletion button or use the **Delete** command of the context menu. ![](assets/en/Users/MinussNew.png) -Les utilisateurs supprimés n'apparaissent plus dans la liste de l'éditeur d'utilisateurs. A noter que les numéros des utilisateurs supprimés peuvent être réattribués lors de la création de nouveaux comptes. +Deleted user names no longer appear in the Users editor. Note that the IDs for deleted users are reassigned when new user accounts are created. -### Propriétés des utilisateurs +### User properties -- Le champ **Type d’utilisateur** : le champ Type d’utilisateur contient "Super_Utilisateur", "Administrateur", ou (pour tous les autres utilisateurs) "Utilisateur". +- **User Kind**: The User Kind field contains "Designer", "Administrator", or (for all other users) "User". -- **Méthodes de démarrage** : Nom d'une méthode associée qui sera automatiquement associée lorsque l'utilisateur ouvre l'application (facultatif). Cette méthode peut être utilisée par exemple pour charger les préférences utilisateur. +- **Startup Method**: Name of an associated method that will be automatically executed when the user opens the application (optional). This method can be used for example to load the user preferences. -## Éditeur de groupes +## Groups editor -L'éditeur de groupes se trouve dans la boîte à outils de 4D. +The editor for groups is located in the Toolbox of 4D. -### Configurer des groupes +### Configuring groups -Vous utilisez l’éditeur de groupes pour définir les éléments qu’ils contiennent (utilisateurs et/ou autres groupes) et pour répartir les accès aux plug-ins. +You use the groups editor to set the elements that each group contains (users and/or other groups) and to distribute access to plug-ins. -Attention, une fois créé, un groupe ne peut pas être supprimé. Si vous souhaitez désactiver un groupe, il vous suffit de retirer tous les utilisateurs qu’il contient. +Keep in mind that once a group has been created, it cannot be deleted. If you want to deactivate a group, you just need to remove any users it contains. -Pour créer un groupe : +To create a group: -1. Sélectionnez **Boîte à outils > Groupes** dans le menu **Développement** ou cliquez sur le bouton **Boîte outils** de la barre d’outils de 4D puis cliquez sur le bouton **Groupes**. 4D affiche la fenêtre d’édition des groupes. La liste des groupes affiche tous les groupes du projet d'application. +1. Select **Tool Box > Groups** in the **Design** menu or click on the **Tool Box** button of the 4D toolbar then on the **Groups** button. 4D displays the groups editor window. The list of groups displays all the groups of the application project. -2. Cliquez sur le bouton ![](assets/en/Users/PlussNew.png) situé en-dessous de la liste des groupes. - OU - Faites un clic droit sur la liste de groupes et sélectionnez la commande **Ajouter** ou **Dupliquer** dans le menu contextuel. +2. Click on the ![](assets/en/Users/PlussNew.png) button located below the list of groups. + OR + Right-click in the list of groups and choose the **Add** or **Duplicate** command in the context menu. -> La commande Dupliquer permet de créer rapidement plusieurs groupes ayant des caractéristiques communes. +> The Duplicate command can be used to create several groups having the same characteristics quickly. -4D ajoute un nouveau groupe à la liste, nommé par défaut "Nouveau groupe1". +4D adds a new group to the list, named "New groupX" by default. -3. Saisissez le nom du nouveau groupe. Le nom du groupe peut avoir une longueur maximale de 15 caractères. Vous pouvez renommer un groupe à tout moment en utilisant la commande **Renommer** du menu contextuel, ou en utilisant la combinaison Alt+clic (Windows) ou Option+clic (macOS) ou en cliquant deux fois sur un nom. +3. Enter the name of the new group. The group name can be up to 15 characters long. You can rename a group at any time using the **Rename** command of the context menu, or by using the Alt+click (Windows) or Option+click (macOS) shortcuts, or by clicking twice on the name you want to change. -### Placer des utilisateurs ou des groupes dans des groupes +### Placing users or groups into groups -Vous pouvez placer tout utilisateur ou tout groupe dans un groupe et vous pouvez aussi le placer dans plusieurs groupes. Il n’est pas obligatoire de placer un utilisateur dans un groupe. +You can place any user or group into a group, and you can also place the group itself into several other groups. It is not mandatory to place a user in a group. -Pour placer un utilisateur ou un groupe dans un groupe, il suffit de sélectionner le groupe dans la liste puis de cocher l’option "Membre" pour chaque utilisateur ou groupe dans la zone d’attribution des membres : +To place a user or group in a group, you simply need to check the "Member" option for each user or group in the member attribution area: ![](assets/en/Users/groups.png) -Si vous cochez le nom d’un utilisateur, l’utilisateur est ajouté au groupe. Si vous cochez un nom de groupe, tous les utilisateurs du groupe sont ajoutés au nouveau groupe. L’utilisateur ou le groupe affilié dispose alors des privilèges d’accès affectés au nouveau groupe. +If you check the name of a user, this user is added to the group. If you check the name of a group, all the users of the group are added to the new group. The affiliated user or group will then have the same access privileges as those assigned to the new group. -Placer des groupes dans d’autres groupes permet de créer une hiérarchie d’utilisateurs. Les utilisateurs d’un groupe placé dans un autre groupe disposent des autorisations d’accès des deux groupes. Reportez-vous au paragraphe [Un schéma d’accès hiérarchique](#an-access-hierarchy-scheme) ci-dessous. +Placing groups into other groups lets you create a user hierarchy. The users of a group placed in another group will have the access privileges of both groups. See "[An access hierarchy scheme](#an-access-hierarchy-scheme)" below. -Pour supprimer un utilisateur ou un groupe d’un autre groupe, il suffit de désélectionner l’option correspondante dans la liste des membres. +To remove a user or group from another group, you just need to deselect the corresponding option in the member attribution area. -### Affecter un groupe à un plug-in ou à un serveur +### Assigning a group to a plug-in or to a server -Vous pouvez affecter un groupe d’accès à tout plug-in 4D installé dans votre projet. Les plug-ins comprennent tous les plug-ins de 4D ainsi que tout plug-in développés par une société tierce. +You can assign a group privileges to any plug-ins installed in the project. This includes all the 4D plug-ins and any third-party plug-ins. -Répartir les accès aux plug-ins vous permet de contrôler l’utilisation des licences dont vous disposez pour ces plug-ins. Tout utilisateur n’appartenant pas au groupe d’accès à un plug-in ne pourra pas charger ce plug-in. +Distributing access to the plug-ins lets you control the use of the licenses you possess for these plug-ins. Any users that do not belong to the access group of a plug-in cannot load this plug-in. -> Les licences utilisées demeurent associées aux comptes utilisateurs 4D dans le groupe, durant toute la session 4D. +> Used licenses remain attached to 4D user accounts in the group for the whole 4D session. -La zone “Plug-ins” de la page Groupes de la boîte à outils liste tous les plug-ins chargés par l’application 4D. Pour affecter un groupe à un plug-in, il suffit de cocher l’option correspondante. +The “Plug-in” area on the Groups page of the tool box lists all the plug-ins loaded by the 4D application. To give a group access to a plug-in, you simply need to check the corresponding option. ![](assets/en/Users/plugins.png) -Les lignes **4D Client Web Server** et **4D Client SOAP Server** permettent contrôler la possibilité de publication Web et SOAP (Web Services) de chaque 4D en mode distant. En effet, ces licences sont considérées par 4D Server comme des licences de plug-ins. Ainsi, comme pour un plug-in, vous pouvez restreindre le droit d’utiliser ces licences à un groupe d’utilisateurs spécifique. +The **4D Client Web Server** and **4D Client SOAP Server** items lets you control the possibility of Web and SOAP (Web Services) publication for each 4D in remote mode. These licenses are considered as plug-in licenses by 4D Server. Therefore, in the same way as for plug-ins, you can restrict the right to use these licenses to a specific group of users. -### Un schéma d’accès hiérarchique +### An access hierarchy scheme -Le meilleur moyen d’assurer la sécurité de votre application et de proposer différents niveaux d’accès aux utilisateurs est d’utiliser un schéma hiérarchique des accès. Les utilisateurs peuvent être affectés à différents groupes et les groupes peuvent être hiérarchisés pour créer des niveaux de droits d’accès. Cette section décrit différentes approches de ce thème. +The best way to ensure the security of your application and provide users with different levels of access is to use an access hierarchy scheme. Users can be assigned to appropriate groups and groups can be nested to create a hierarchy of access rights. This section discusses several approaches to such a scheme. -Dans cet exemple, un utilisateur appartient à l’un des trois groupes définis suivant son niveau de responsabilité. Les utilisateurs du groupe Comptabilité sont responsables de la saisie de données. Les utilisateurs du groupe Dir. finance sont responsables de la mise à jour des données, comme la mise à jour d’enregistrements ou la suppression d’enregistrements obsolètes. Les utilisateurs du groupe Direction générale sont responsables de l’analyse de données, ce qui inclut la réalisation de recherches et l’impression d’états. +In this example, a user is assigned to one of three groups depending on their level of responsibility. Users assigned to the Accounting group are responsible for data entry. Users assigned to the Finances group are responsible for maintaining the data, including updating records and deleting outdated records. Users assigned to the General Management group are responsible for analyzing the data, including performing searches and printing analytical reports. -Les groupes sont hiérarchisés afin que les privilèges soient correctement affectés aux utilisateurs de chacun des groupes. +The groups are then nested so that privileges are correctly distributed to the users of each group. -- Le groupe Direction générale ne contient que les utilisateurs de “haut niveau”. ![](assets/en/Users/schema1.png) +- The General Management group contains only “high-level” users. ![](assets/en/Users/schema1.png) -- Le groupe Dir. finance contient les utilisateurs du groupe Direction générale. ![](assets/en/Users/schema2.png) +- The Finances group contains data maintenance users as well as General Management users, thus the users in General Management have the privileges of the Finances group as well. ![](assets/en/Users/schema2.png) -- Le groupe Comptabilité contient des opérateurs de saisie mais aussi les utilisateurs des groupes Dir. finance et donc Direction générale. ![](assets/en/Users/schema3.png) +- The Accounting group contains data entry users as well as Finances group users, so the users who belong to the Finances group and the General Management group enjoy the privileges of the Accounting group as well. ![](assets/en/Users/schema3.png) -Vous pouvez ensuite décider des privilèges affectés à chaque groupe suivant le niveau de responsabilité des utilisateurs qu’il contient. +You can decide which access privileges to assign to each group based on the level of responsibility of the users it includes. -Un tel système hiérarchique rend aisée l’affectation d’un utilisateur à un groupe. Il suffit de placer chaque utilisateur dans un groupe et d’utiliser la hiérarchie des groupes pour déterminer les accès. +Such a hierarchical system makes it easy to remember to which group a new user should be assigned. You only have to assign each user to one group and use the hierarchy of groups to determine access. From b2b895948d41e4a11775494fc76feb057515ac58 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:18:30 +0100 Subject: [PATCH 072/260] New translations overview.md (French) --- website/translated_docs/fr/Users/overview.md | 56 ++++++++++---------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/website/translated_docs/fr/Users/overview.md b/website/translated_docs/fr/Users/overview.md index dd63fe1de9dc83..35928c34eb7e1c 100644 --- a/website/translated_docs/fr/Users/overview.md +++ b/website/translated_docs/fr/Users/overview.md @@ -3,70 +3,70 @@ id: overview title: Aperçu --- -Si plusieurs personnes utilisent une application, ce qui est souvent le cas dans une architecture client-serveur ou d'interfaces Web, vous devez contrôler ses accès ou proposer différentes fonctionnalités selon les utilisateurs connectés. Il peut être également essentiel de protéger des données importantes. You can provide this security by assigning passwords to users and creating access groups that have different levels of access to information in the application or to application operations. +If more than one person uses an application, which is usually the case in client-server architecture or Web interfaces, you need to control access or provide different features according to the connected users. It is also essential to provide security for sensitive data. You can provide this security by assigning passwords to users and creating access groups that have different levels of access to information in the application or to application operations. -> Consultez le document [4D Security guide](https://blog.4d.com/4d-security-guide/) pour une vue d'ensemble des fonctions de sécurité de 4D. +> For an overview of 4D's security features, see the [4D Security guide](https://blog.4d.com/4d-security-guide/). -## Définition des accès aux groupes +## Assigning group access -Le système de gestion des accès de 4D est basé sur les notions d’utilisateurs et de groupes. Créez des noms d’utilisateurs et affectez-leur un mot de passe, placez les utilisateurs dans des groupes, et assignez à chaque groupe les privilèges d’accès appropriés aux objets de l'application. +4D’s password access system is based on users and groups. You create users and assign passwords, put users in groups, and assign each group access rights to appropriate parts of the application. -Les groupes peuvent alors se voir affecter des privilèges d'accès à des parties spécifiques ou des fonctionnalités de l'application (accès au mode Développement, serveur HTTP, serveur SQL, etc.), ou à toute partie personnalisée. +Groups can then be assigned access privileges to specific parts or features of the application (Design access, HTTP server, SQL server, etc.), or any custom part. -L'exemple suivant présente les droits d'accès à l'explorateur d'exécution et au Développement assignés au groupe "Devs" : +The following example shows Design and Runtime explorer access rights being assigned to the "Devs" group: ![](assets/en/Users/Access1.png) -## Activer le contrôle des accès +## Activating access control -Le contrôle effectif des accès par mots de passe de 4D est activé par **l’affectation d’un mot de passe au Super_Utilisateur**. +You initiate the 4D password access control system in client-server by **assigning a password to the Designer**. -Tant que le Super_Utilisateur n’a pas de mot de passe, 4D permet à tout utilisateur d’accéder à toutes les parties de l'application, même si vous avez défini des utilisateurs et des groupes (à l'ouverture de l'application, aucune identification n'est requise). N'importe quelle partie de l'application peut être ouverte. +Until you give the Designer a password, all application access are done with the Designer's access rights, even if you have set up users and groups (when the application opens, no ID is required). Any part of the application can be opened. -Lorsqu’un mot de passe est affecté au Super_Utilisateur, tous les privilèges d’accès que vous avez affectés prennent effet. Pour pouvoir utiliser l'application, les utilisateurs distants doivent alors saisir un mot de passe. +When a password is assigned to the Designer, all the access privileges take effect. In order to connect to the application, remote users must enter a password. -Pour désactiver le système de restriction d’accès, il suffit de supprimer (mettre à blanc) le mot de passe du Super_Utilisateur. +To disable the password access system, you just need to remove the Designer password. -## Utilisateurs et groupes dans l'architecture projet +## Users and groups in project architecture -Dans les applications projet (fichiers .4DProject ou .4dz), les utilisateurs et groupes 4D peuvent être configurés à la fois en monoposte ou en client-serveur. Toutefois, le contrôle d'accès ne prend effet qu'avec 4D Server. Le tableau suivant liste les principales fonctionnalités des utilisateurs et groupes ainsi que leur disponibilité : +In project applications (.4DProject or .4dz files), 4D users and groups can be configured in both single-user and client-server environments. However, access control is only effective with 4D Server. The following table lists the main users and groups features and their availability: -| | 4D (monoposte) | 4D Server | -| ------------------------------------------------------------------------------- | ------------------------------------------------------- | --------- | -| Ajouter/modifier des utilisateurs et groupes | oui | oui | -| Affecter l'accès des utilisateurs/groupes aux serveurs | oui | oui | -| Identification de l'utilisateur | non (tous les utilisateurs sont des Super_Utilisateur) | oui | -| Contrôle d'accès une fois qu'un mot de passe a été affecté au Super_Utilisateur | non (tous les accès sont accordés au Super_Utilisateur) | oui | +| | 4D (single-user) | 4D Server | +| ------------------------------------------------------------- | ---------------------------- | --------- | +| Adding/editing users and groups | oui | oui | +| Assigning user/group access to servers | oui | oui | +| User identification | no (all users are Designer) | oui | +| Access control once the Designer has been assigned a password | no (all access are Designer) | oui | -## Éditeur de boîte à outils +## Toolbox editor -Les éditeurs des utilisateurs et groupes sont placés dans la boîte à outils de 4D. Ces éditeurs peuvent être utilisés pour la création d'utilisateurs et de groupes, l'affectation de mots de passe aux utilisateurs, le placement d'utilisateurs dans des groupes, etc. +The editors for users and groups are located in the toolbox of 4D. These editors can be used to create both users and groups, assign passwords to users, place users in groups, etc. ![](assets/en/Users/editor.png) -> L'éditeur d'utilisateurs et de groupes peut s'afficher à l'exécution à l'aide de la commande [EDIT ACCESS](https://doc.4d.com/4Dv18/4D/18/EDIT-ACCESS.301-4504687.en.html). L'éditeur d'utilisateurs et de groupes peut s'afficher à l'exécution à l'aide de la commande [EDIT ACCESS](https://doc.4d.com/4Dv18/4D/18/EDIT-ACCESS.301-4504687.en.html). +> Users and groups editor can be displayed at runtime using the [EDIT ACCESS](https://doc.4d.com/4Dv18/4D/18/EDIT-ACCESS.301-4504687.en.html) command. The whole users and groups configuration can also be edited during application execution using 4D language commands of the [Users and Groups](https://doc.4d.com/4Dv18R3/4D/18-R3/Users-and-Groups.201-4900438.en.html) theme. -## Fichier directory.json +## Directory.json file -Les utilisateurs, les groupes ainsi que leurs droits d'accès sont stockés dans un fichier spécifique du projet nommé **directory.json**. +Users, groups, as well as their access rights are stored in a specific project file named **directory.json**. -Ce fichier peut être stocké dans les emplacements suivants : +This file can be stored at the following locations: -- dans le dossier de propriétés utilisateur, c'est-à-dire le dossier "Settings", au même niveau que le dossier "Project". Ces propriétés sont utilisées par défaut dans l'application. -- dans le dossier de propriétés des données, c'est-à-dire dans le dossier "Settings" du dossier "Data". Si un fichier **directory.json** se trouve à cet emplacement, il est prioritaire par rapport au fichier du dossier Settings utilisateur. Cette fonctionnalité vous permet de définir des configurations Utilisateurs et Groupes personnalisées/locales. La configuration personnalisée ne sera pas affectée par des mises à niveau de l'application. +- in the user settings folder, i.e. in the "Settings" folder at the same level as the "Project" folder. These settings are used by default for the application. +- in the data settings folder, i.e. in the "Settings" folder in the "Data" folder. If a **directory.json** file is present at this location, it takes priority over the file in the user settings folder. This feature allows you to define custom/local Users and Groups configurations. The custom configuration will left untouched by an application upgrade. -> Si la gestion des groupes et utilisateurs est inactive, le fichier **directory.json** n'est pas créé. +> If users and groups management is not active, the **directory.json** is not created. From a0e6030cb4ec1b985597a62403be8819a4b41978 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:18:32 +0100 Subject: [PATCH 073/260] New translations webServerObject.md (French) --- .../fr/WebServer/webServerObject.md | 242 +++++++++--------- 1 file changed, 121 insertions(+), 121 deletions(-) diff --git a/website/translated_docs/fr/WebServer/webServerObject.md b/website/translated_docs/fr/WebServer/webServerObject.md index 5fffa5dd2fbdbb..94f07c5ab99f53 100644 --- a/website/translated_docs/fr/WebServer/webServerObject.md +++ b/website/translated_docs/fr/WebServer/webServerObject.md @@ -1,173 +1,173 @@ --- id: webServerObject -title: Objet Serveur Web +title: Web Server object --- ## Aperçu -Un projet 4D peut démarrer et surveiller un serveur Web pour l'application principale (hôte) ainsi que chaque composant hébergé. +A 4D project can start and monitor a web server for the main (host) application as well as each hosted component. -Par exemple, si vous avez installé deux composants dans votre application principale, vous pouvez démarrer et contrôler jusqu'à trois serveurs Web indépendants à partir de votre application : +For example, if you installed two components in your main application, you can start and monitor up to three independant web servers from your application: -- un serveur web pour l'application hôte, -- un serveur web pour le composant n°1, -- un serveur web pour le composant n°2. +- one web server for the host application, +- one web server for the component #1, +- one web server for the component #2. -En dehors de la mémoire, il n'y a pas de limite au nombre de composants et donc, de serveurs Web, pouvant être rattachés à un seul projet d'application 4D. +Other than memory, there is no limit to the number of components and thus, of web servers, that can be attached to a single 4D application project. -Chaque serveur web 4D, y compris le serveur web de l'application principale, est exposé comme un **objet** spécifique. Une fois instancié, un objet serveur Web peut être géré à partir de l'application courante ou de n'importe quel composant. +Each 4D web server, including the main application's web server, is exposed as a specific **object**. Once instantiated, a web server object can be handled from the current application or from any component. -> Les [commandes WEB](https://doc.4d.com/4Dv18/4D/18/Web-Server.201-4504301.en.html) héritées du langage 4D sont prises en charge mais ne peuvent pas sélectionner le serveur Web auquel elles s'appliquent (voir ci-dessous). +> The legacy [WEB commands](https://doc.4d.com/4Dv18/4D/18/Web-Server.201-4504301.en.html) of the 4D language are supported but cannot select the web server to which they apply (see below). -Chaque serveur web (application hôte ou composant) peut être utilisé dans son propre contexte, notamment : -- les appels vers la méthode base `On Web Authentication` et `On Web Connection` -- le traitement des balises 4D et les appels de méthodes, -- la gestion de sessions web et des protocoles TLS. +Each web server (host application or component) can be used in its own separate context, including: +- `On Web Authentication` and `On Web Connection` database method calls +- 4D tags processing and method calls, +- managing web sessions and TLS protocols. -Cette fonctionnalité vous permet de développer des composants indépendants et des fonctionnalités qui accompagnent leurs propres interfaces Web. +This feature allows you to develop independant components and features that come with their own web interfaces. -## Instancier un objet serveur web +## Instantiating a web server object -L'objet serveur Web de l'application hôte (serveur Web par défaut) est automatiquement chargé par 4D au démarrage. Ainsi, si vous écrivez dans un projet nouvellement créé : +The web server object of the host application (default web server) is automatically loaded by 4D at startup. Thus, if you write in a newly created project: ```4d $nbSrv:=WEB Server list.length -//la valeur de $nbSrv est 1 +//$nbSrv value is 1 ``` -Pour instancier un objet serveur web, appelez la commande `WEB Server` : +To instantiate a web server object, call the `WEB Server` command: ```4d C_OBJECT(webServer) - //appeler le serveur web depuis le contexte courant + //call the web server from the current context webServer:=WEB Server - //équivalent à + //equivalent to webServer:=WEB Server(Web server database) ``` If the application uses components and you want to call: - the host application's web server from a component or -- le serveur qui a reçu la requête (quel que soit le serveur) +- the server that received the request (whatever the server), -vous pouvez également utiliser : +you can also use: ```4d C_OBJECT(webServer) - //appler le serveur web hôte depuis un composant + //call the host web server from a component webServer:=WEB Server(Web server host database) - //appeler le serveur web cible + //call the target web server webServer:=WEB Server(Web server receiving request) ``` -## Méthodes du serveur web +## Web server methods -Un objet serveur Web contient les méthodes membres suivantes : +A web server object contains the following member methods: -| Méthode | Paramètres | Valeur retournée | Description | -| --------- | ---------------- | ---------------- | ---------------------- | -| `start()` | settings (objet) | status (object) | Démarre le serveur web | -| `stop()` | - | - | Stoppe le serveur web | +| Method | Parameter | Return value | Description | +| --------- | ----------------- | --------------- | --------------------- | +| `start()` | settings (object) | status (object) | Starts the web server | +| `stop()` | - | - | Stops the web server | -Pour démarrer et arrêter un serveur Web, il suffit d'appeler les méthodes membres `start()` et `stop()` de l'objet serveur Web : +To start and stop a web server, just call the `start()` and `stop()` member methods of the web server object: ```4d C_OBJECT($status) - //pour démarrer un serveur web avec les paramètres par défaut + //to start a web server with default settings $status:=webServer.start() - //pour démarrer un serveur web avec des paramètres personnalisés - //objet $settings contenant des propriétés du serveur web + //to start the web server with custom settings + //$settings object contains web server properties webServer.start($settings) - //pour stopper le serveur web + //to stop the web server $status:=webServer.stop() ``` -## Propriétés du serveur web - -Un objet serveur Web contient les propriétés suivantes. - -| Propriété | Type | Description | -| -------------------------- | ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| certificateFolder | Texte | Dossier dans lequel les fichiers de certificat sont sauvegardés. Format POSIX du chemin d'accès complet à l'aide de filesystem. Peut être passé comme objet `Folder` dans le paramètre `settings`. | -| characterSet | Numérique ou texte | Jeu de caractères devant être utilisé par 4D Web Server pour communiquer avec les navigateurs connectés à l'application. La valeur par défaut dépend de la langue du système d'exploitation. Peut être une chaîne MIBEnum longint ou Name, identifiants [définis par l'IANA](http://www.iana.org/assignments/character-sets) pris en charge par le serveur Web 4D :

  • 4 = ISO-8859-1
  • 12 = ISO-8859-9
  • 13 = ISO-8859-10
  • 17 = Shift-JIS
  • 2024 = Windows-31J
  • 2026 = Big5
  • 38 = euc-kr
  • 106 = UTF-8
  • 2250 = Windows-1250
  • 2251 = Windows-1251
  • 2253 = Windows-1253
  • 2255 = Windows-1255
  • 2256 = Windows-1256 | -| cipherSuite | Texte | Liste de chiffrement utilisée pour le protocole sécurisé. Définit la priorité des algorithmes de chiffrement mis en œuvre par le serveur Web. Peut être une séquence de chaînes séparées par des deux-points (par exemple "ECDHE-RSA-AES128 -..."). Voir la [page des chiffrements](https://www.openssl.org/docs/manmaster/man1/ciphers.html) sur le site OpenSSL. | -| CORSEnabled | boolean | Statut CORS (Cross-origin resource sharing) activé pour le serveur Web. Pour des raisons de sécurité, les requêtes "cross-domain" sont interdites par défaut au niveau du navigateur. Lorsqu'il est activé (True), les appels XHR (par exemple les requêtes REST) à partir de pages Web hors du domaine peuvent être autorisés dans votre application (vous devez définir la liste des adresses autorisées dans la liste des domaines CORS, voir `CORSSettings` ci-dessous). Lorsqu'il est désactivé (False, par défaut), toutes les requêtes entre sites (cross site) envoyées avec CORS sont ignorées. Lorsqu'il est activé (True) et qu'un domaine ou une méthode non autorisé(e) envoie une requête entre sites, elle est rejetée avec une réponse d'erreur «403 - forbidden».

    Par défaut : False (désactivé)

    Pour plus d'informations sur CORS, veuillez consulter la [page de partage de ressources cross-origin](http://en.wikipedia.org/wiki/Cross-origin_resource_sharing) sur Wikipedia. | -| CORSSettings | collection d'objets | Liste des hôtes et des méthodes autorisés pour le service CORS (voir `CORSEnabled` ci-dessus). Chaque objet doit contenir une propriété **host** et, optionnellement, une propriété **methods** :

  • **host** (texte, obligatoire) : nom de domaine ou adresse IP à partir duquel les pages externes sont autorisées à envoyer des requêtes de données au serveur via CORS. Plusieurs attributs de domaine peuvent être ajoutés pour créer une liste blanche. Si *host* n'est pas présent ou vide, l'objet est ignoré. Plusieurs syntaxes sont prises en charge :
    192.168.5.17:8081
    192.168.5.17
    192.168.\*
    192.168.\*:8081
    http://192.168.5.17:8081
    http://\*.myDomain.com
    http://myProject.myDomain.com
    \*.myDomain.com
    myProject.myDomain.com
    \*
  • **methods** (texte, facultatif) : méthode(s) HTTP acceptée(s) pour l'hôte CORS correspondant. Séparez chaque méthode par un ";" (ex : "post;get"). Si *methods* est vide, null ou non défini, toutes les méthodes sont activées. | -| debugLog | number | Etat du fichier journal des requêtes HTTP (HTTPDebugLog_nn.txt, stocké dans le dossier "Logs" de l'application - nn est le numéro de fichier).
  • 0 = désactivé
  • 1 = activé sans les parties du corps (la taille du corps est fournie dans ce cas)
  • 3 = activé avec les parties du corps en réponse uniquement
  • 5 = activé avec des parties du corps sur requête uniquement
  • 7 = activé avec des parties du corps en réponse et requête
  • | -| defaultHomepage | Texte | Nom de la page d'accueil par défaut ou "" pour ne pas envoyer la page d'accueil personnalisée | -| HSTSEnabled | boolean | État de HTTP Strict Transport Security (HSTS). HSTS permet au serveur Web de déclarer que les navigateurs doivent interagir avec uniquement via des connexions HTTPS sécurisées. Les navigateurs enregistreront les informations HSTS la première fois qu'ils recevront une réponse du serveur Web, puis toutes les futures requêtes HTTP seront automatiquement transformées en requêtes HTTPS. La durée de stockage de ces informations par le navigateur est indiquée avec la propriété `HSTSMaxAge`. HSTS nécessite l'activation de HTTPS sur le serveur. HTTP doit également être activé pour permettre des connexions client initiales. | -| HSTSMaxAge | number | Durée maximale (en secondes) d'activation de HSTS pour chaque nouvelle connexion client. Ces informations sont stockées côté client pendant la durée spécifiée.

    Valeur par défaut : 63072000 (2 ans) | -| HTTPCompressionLevel | number | Niveau de compression pour tous les échanges HTTP compressés pour le serveur HTTP 4D (requêtes clients ou réponses serveur). Ce sélecteur vous permet d'optimiser les échanges en priorisant soit la vitesse d'exécution (moins de compression), soit la quantité de compression (moins de vitesse).

    Valeurs possibles :

    • 1 à 9 (où 1 correspond à la compression la plus rapide et 9 la plus élevée).
    • -1 = définir un compromis entre la vitesse et le taux de compression.
    Par défaut = 1 (compression plus rapide). | -| HTTPCompressionThreshold | number | Seuil de taille (octets) pour les requêtes en dessous desquelles les échanges ne doivent pas être compressés. Ce paramètre est utile pour éviter de perdre du temps machine en compressant les petits échanges.

    Seuil de compression par défaut = 1024 octets | -| HTTPEnabled | boolean | État du protocole HTTP | -| HTTPPort | number | Numéro de port IP d'écoute pour HTTP.

    Par défaut = 80 | -| HTTPTrace | boolean | Activation HTTP TRACE. Pour des raisons de sécurité, le serveur Web rejette par défaut les requêtes HTTP TRACE avec une erreur 405. Lorsqu'il est activé, le serveur Web répond aux requêtes HTTP TRACE avec la ligne de requête, l'en-tête et le corps. | -| HTTPSEnabled | boolean | État du protocole HTTPS | -| HTTPSPort | number | Numéro de port IP d'écoute pour HTTPS.

    Par défaut = 443 | -| inactiveProcessTimeout | number | Durée de vie (en minutes) des process de session inactives. À la fin du délai d'attente (tiemout), le process est tué sur le serveur, la méthode base `On Web Close Process` est appelée, puis le contexte de session est détruit.

    Par défaut = 480 minutes | -| inactiveSessionTimeout | number | Durée de vie (en minutes) des sessions inactives (durée définie dans le cookie). À la fin de cette période, le cookie de session expire et n'est plus envoyé par le client HTTP.

    Par défaut = 480 minutes | -| IPAddressToListen | Texte | Adresse IP sur laquelle le serveur Web 4D recevra les requêtes HTTP. Les formats de chaîne IPv6 et IPv4 sont pris en charge. | -| *isRunning* | boolean | État d'exécution du serveur Web | -| keepSession | boolean | État d'activation de la gestion de session

    Par défaut = true | -| logRecording | number | Valeur d'enregistrement des requêtes de journal (logweb.txt).

  • 0 = Ne pas enregistrer (par défaut)
  • 1 = Enregistrer au format CLF
  • 2 = Enregistrer au format DLF
  • 3 = Enregistrer au format ELF
  • 4 = Enregistrer au format WLF
  • | -| maxConcurrentProcesses | number | Nombre maximal de process Web simultanés pris en charge par le serveur Web. Lorsque ce nombre (moins un) est atteint, 4D ne crée aucun autre process et retourne le statut HTTP 503 - Service Unavailable to all new requests.

    Valeurs possibles : 10 - 32000

    Par défaut = 100 | -| maxRequestSize | number | Taille maximale (en octets) des requêtes HTTP entrantes (POST) que le serveur Web est autorisé à traiter. Passer la valeur maximale (2147483648) signifie qu'en pratique, aucune limite n'est définie. Cette limite est utilisée pour éviter la saturation du serveur Web en raison de requêtes entrantes trop volumineuses. Si une requête atteint cette limite, le serveur Web la rejette.

    Valeurs possibles : 500000 - 2147483648 | -| maxSessions | number | Nombre maximum de sessions simultanées. Lorsque vous atteignez la limite, la session la plus ancienne est fermée (et la méthode base `On Web Close Process` est appelée) si le serveur Web doit en créer une nouvelle. Le nombre de sessions simultanées ne peut pas dépasser le nombre total de processus Web (propriété `maxConcurrentProcesses`, 100 par défaut) | -| minTLSVersion | number | Version TLS minimale acceptée pour les connexions. Les tentatives de connexion de clients prenant en charge uniquement les versions inférieures au minimum seront rejetées.

    Valeurs possibles :

  • 1 = `TLSv1_0`
  • 2 = `TLSv1_1`
  • 3 = `TLSv1_2` (par défaut)
  • En cas de modification, le serveur doit être redémarré pour utiliser la nouvelle valeur. | -| *name* | Texte | Nom de l'application du serveur Web | -| *openSSLVersion* | Texte | Version de la bibliothèque OpenSSL utilisée | -| *perfectForwardSecrecy* | boolean | Disponibilité PFS sur le serveur | -| rootFolder | Texte | Chemin du dossier racine du serveur Web. Format POSIX du chemin d'accès complet à l'aide de filesystem. Peut être passé comme objet `Folder` dans le paramètre `settings`. | -| sessionCookieDomain | Texte | Champ "domaine" du cookie de session. Utilisé pour contrôler la portée des cookies de session. Par exemple, si vous définissez la valeur "/*.4d.fr" pour ce sélecteur, le client enverra un cookie uniquement lorsque la requête est adressée au domaine ".4d.fr", ce qui exclut les serveurs hébergeant des données statiques externes. | -| sessionCookieName | Texte | Nom du cookie utilisé pour stocker l'ID de session.

    Par défaut = "4DSID" | -| sessionCookiePath | Texte | Champ "path" du cookie de session. Utilisé pour contrôler la portée des cookies de session. Par exemple, si vous définissez la valeur "/4DACTION" pour ce sélecteur, le client enverra un cookie uniquement pour les requêtes dynamiques commençant par 4DACTION, et non pour les images, les pages statiques, etc. | -| sessionIPAddressValidation | boolean | Validation d'adresse IP pour les cookies de session. Pour des raisons de sécurité, le serveur Web vérifie par défaut l'adresse IP de chaque requête contenant un cookie de session et la rejette si cette adresse ne correspond pas à l'adresse IP utilisée pour créer le cookie. Dans certaines applications spécifiques, vous souhaiterez peut-être désactiver cette validation et accepter les cookies de session, même lorsque leurs adresses IP ne correspondent pas. Par exemple, lorsque les appareils mobiles basculent entre les réseaux Wifi et 3G/4G, leur adresse IP change. Dans ce cas, vous pouvez permettre aux clients de continuer à utiliser leurs sessions Web même lorsque les adresses IP changent.

    Note : ce paramètre réduit le niveau de sécurité de votre application | - -Ces propriétés sont définies : - -1. à l'aide du paramètre `settings` de la méthode `webServer.start()` (sauf pour les propriétés en lecture seule, voir ci-dessous), -2. si elles ne sont pas utilisées, à l'aide de la commande `WEB SET OPTION` (applications hôtes uniquement), -3. si elles ne sont pas utilisées, dans les paramètres de l'application hôte ou du composant. - -- Si le serveur Web n'est pas démarré, les propriétés contiennent les valeurs qui seront utilisées au prochain démarrage du serveur Web. -- Si le serveur Web est démarré, les propriétés contiennent les valeurs réelles utilisées par le serveur Web (les paramètres par défaut peuvent avoir été remplacés par le paramètre `settings` de la méthode `webServer.start()`. - -> *isRunning*, *name*, *openSSLVersion* et *perfectForwardSecrecy* sont des propriétés en lecture seule qui ne peuvent pas être prédéfinies dans le paramètre objet `settings` pour la méthode `start()`. - - -## Portée des commandes 4D Web - -Le langage 4D contient [plusieurs commandes](https://doc.4d.com/4Dv18/4D/18/Web-Server.201-4504301.en.html) permettant de contrôler le serveur Web. Cependant, ces commandes sont destinées à fonctionner avec un seul serveur Web (par défaut). Lorsque vous utilisez ces commandes dans le contexte d'objets serveur Web, assurez-vous que leur portée est appropriée. - -| Commande | Portée | -| ------------------------------- | --------------------------------- | -| `SET DATABASE PARAMETER` | Application hôte du serveur web | -| `WEB CLOSE SESSION` | Serveur Web ayant reçu la requête | -| `WEB GET BODY PART` | Serveur Web ayant reçu la requête | -| `WEB Get body part count` | Serveur Web ayant reçu la requête | -| `WEB Get Current Session ID` | Serveur Web ayant reçu la requête | -| `WEB GET HTTP BODY` | Serveur Web ayant reçu la requête | -| `WEB GET HTTP HEADER` | Serveur Web ayant reçu la requête | -| `WEB GET OPTION` | Application hôte du serveur web | -| `WEB Get server info` | Application hôte du serveur web | -| `WEB GET SESSION EXPIRATION` | Serveur Web ayant reçu la requête | -| `WEB Get session process count` | Serveur Web ayant reçu la requête | -| `WEB GET STATISTICS` | Application hôte du serveur web | -| `WEB GET VARIABLES` | Serveur Web ayant reçu la requête | -| `WEB Is secured connection` | Serveur Web ayant reçu la requête | -| `WEB Is server running` | Application hôte du serveur web | -| `WEB SEND BLOB` | Serveur Web ayant reçu la requête | -| `WEB SEND FILE` | Serveur Web ayant reçu la requête | -| `WEB SEND HTTP REDIRECT` | Serveur Web ayant reçu la requête | -| `WEB SEND RAW DATA` | Serveur Web ayant reçu la requête | -| `WEB SEND TEXT` | Serveur Web ayant reçu la requête | -| `WEB SET HOME PAGE` | Application hôte du serveur web | -| `WEB SET HTTP HEADER` | Serveur Web ayant reçu la requête | -| `WEB SET OPTION` | Application hôte du serveur web | -| `WEB SET ROOT FOLDER` | Application hôte du serveur web | -| `WEB START SERVER` | Application hôte du serveur web | -| `WEB STOP SERVER` | Application hôte du serveur web | -| `WEB Validate digest` | Serveur Web ayant reçu la requête | +## Web server properties + +A web server object contains the following properties. + +| Property | Type | Description | +| -------------------------- | --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| certificateFolder | text | Folder where the certificate files are located. The path is formatted in POSIX full path using filesystems. When using this property in the `settings` parameter, it can be a `Folder` object. | +| characterSet | number or text | Character set that the 4D Web Server should use to communicate with browsers connecting to the application. The default value actually depends on the language of the OS. Can be a MIBEnum longint or Name string, identifiers [defined by IANA](http://www.iana.org/assignments/character-sets) supported by the 4D Web Server:

  • 4 = ISO-8859-1
  • 12 = ISO-8859-9
  • 13 = ISO-8859-10
  • 17 = Shift-JIS
  • 2024 = Windows-31J
  • 2026 = Big5
  • 38 = euc-kr
  • 106 = UTF-8
  • 2250 = Windows-1250
  • 2251 = Windows-1251
  • 2253 = Windows-1253
  • 2255 = Windows-1255
  • 2256 = Windows-1256 | +| cipherSuite | text | Cipher list used for the secure protocol. Sets the priority of ciphering algorithms implemented by the web server. Can be a sequence of strings separated by colons (for example "ECDHE-RSA-AES128-..."). See the [ciphers page](https://www.openssl.org/docs/manmaster/man1/ciphers.html) on the OpenSSL site. | +| CORSEnabled | boolean | CORS (Cross-origin resource sharing) service status for the Web server. For security reasons, "cross-domain" requests are forbidden at the browser level by default. When enabled (True), XHR calls (e.g. REST requests) from Web pages outside the domain can be allowed in your application (you need to define the list of allowed addresses in the CORS domain list, see `CORSSettings` below). When disabled (False, default), all cross site requests sent with CORS are ignored. When enabled (True) and a non-allowed domain or method sends a cross site request, it is rejected with a "403 - forbidden" error response.

    Default: False (disabled)

    For more information about CORS, please refer to the [Cross-origin resource sharing page](http://en.wikipedia.org/wiki/Cross-origin_resource_sharing) on Wikipedia. | +| CORSSettings | collection of objects | List of allowed hosts and methods for the CORS service (see `CORSEnabled` above). Each object must contain a **host** property and, optionnally, a **methods** property:

  • **host** (text, mandatory): Domain name or IP address from where external pages are allowed to send data requests to the Server via CORS. Multiple domain attributes can be added to create a white list. If *host* is not present or empty, the object is ignored. Several syntaxes are supported:
    192.168.5.17:8081
    192.168.5.17
    192.168.\*
    192.168.\*:8081
    http://192.168.5.17:8081
    http://\*.myDomain.com
    http://myProject.myDomain.com
    \*.myDomain.com
    myProject.myDomain.com
    \*
  • **methods** (text, optional): Accepted HTTP method(s) for the corresponding CORS host. Separate each method with a ";" (e,g,: "post;get"). If *methods* is empty, null, or undefined, all methods are enabled. | +| debugLog | number | Status of the HTTP request log file (HTTPDebugLog_nn.txt, stored in the "Logs" folder of the application -- nn is the file number).
  • 0 = disabled
  • 1 = enabled without body parts (body size is provided in this case)
  • 3 = enabled with body parts in response only
  • 5 = enabled with body parts in request only
  • 7 = enabled with body parts in response and request
  • | +| defaultHomepage | text | Name of the default home page or "" to not send the custom home page | +| HSTSEnabled | boolean | HTTP Strict Transport Security (HSTS) status. HSTS allows the Web server to declare that browsers should only interact with it via secure HTTPS connections. Browsers will record the HSTS information the first time they receive a response from the web server, then any future HTTP requests will automatically be transformed into HTTPS requests. The length of time this information is stored by the browser is specified with the `HSTSMaxAge` property. HSTS requires that HTTPS is enabled on the server. HTTP must also be enabled to allow initial client connections. | +| HSTSMaxAge | number | Maximum length of time (in seconds) that HSTS is active for each new client connection. This information is stored on the client side for the specified duration.

    Default value: 63072000 (2 years) | +| HTTPCompressionLevel | number | Compression level for all compressed HTTP exchanges for the 4D HTTP server (client requests or server replies). This selector lets you optimize exchanges by either prioritizing speed of execution (less compression) or the amount of compression (less speed).

    Possible values:

    • 1 to 9 (where 1 is the fastest compression and 9 the highest).
    • -1 = set a compromise between speed and rate of compression.
    Default = 1 (faster compression). | +| HTTPCompressionThreshold | number | Size threshold (bytes) for requests below which exchanges should not be compressed. This setting is useful in order to avoid losing machine time by compressing small exchanges.

    Default compression threshold = 1024 bytes | +| HTTPEnabled | boolean | HTTP protocol state | +| HTTPPort | number | Listening IP port number for HTTP.

    Default = 80 | +| HTTPTrace | boolean | HTTP TRACE activation. For security reasons, by default the Web server rejects HTTP TRACE requests with an error 405. When enabled, the web server replies to HTTP TRACE requests with the request line, header, and body. | +| HTTPSEnabled | boolean | HTTPS protocol state | +| HTTPSPort | number | Listening IP port number for HTTPS.

    Default = 443 | +| inactiveProcessTimeout | number | Life duration (in minutes) of the inactive session processes. At the end of the timeout, the process is killed on the server, the `On Web Close Process` database method is called, then the session context is destroyed.

    Default = 480 minutes | +| inactiveSessionTimeout | number | Life duration (in minutes) of inactive sessions (duration set in cookie). At the end of this period, the session cookie expires and is no longer sent by the HTTP client.

    Default = 480 minutes | +| IPAddressToListen | text | IP address on which the 4D Web Server will receive HTTP requests. Both IPv6 string formats and IPv4 string formats are supported. | +| *isRunning* | boolean | Web server running state | +| keepSession | boolean | Session management enabling status

    Default = true | +| logRecording | number | Log requests (logweb.txt) recording value.

  • 0 = Do not record (default)
  • 1 = Record in CLF format
  • 2 = Record in DLF format
  • 3 = Record in ELF format
  • 4 = Record in WLF format
  • | +| maxConcurrentProcesses | number | Maximum number of concurrent web processes supported by the web server. When this number (minus one) is reached, 4D will not create any other processes and returns the HTTP status 503 - Service Unavailable to all new requests.

    Possible values: 10 - 32000

    Default = 100 | +| maxRequestSize | number | Maximum size (in bytes) of incoming HTTP requests (POST) that the Web server is allowed to process. Passing the maximum value (2147483648) means that, in practice, no limit is set. This limit is used to avoid web server saturation due to incoming requests that are too large. If a request reaches this limit, the web server rejects it.

    Possible values: 500000 - 2147483648 | +| maxSessions | number | Maximum number of simultaneous sessions. When you reach the limit, the oldest session is closed (and `On Web Close Process` database method is called) if the web server needs to create a new one. The number of simultaneous sessions cannot exceed the total number of web processes (`maxConcurrentProcesses` property, 100 by default) | +| minTLSVersion | number | Minimum TLS version accepted for connections. Connection attempts from clients supporting only versions below the minimum will be rejected.

    Possible values:

  • 1 = `TLSv1_0`
  • 2 = `TLSv1_1`
  • 3 = `TLSv1_2` (default)
  • If modified, the server must be restarted to use the new value. | +| *name* | text | Name of the web server application | +| *openSSLVersion* | text | Version of the OpenSSL library used | +| *perfectForwardSecrecy* | boolean | PFS availability on the server | +| rootFolder | text | Path of web server root folder. The path is formatted in POSIX full path using filesystems. When using this property in the `settings` parameter, it can be a `Folder` object. | +| sessionCookieDomain | text | "domain" field of the session cookie. Used to control the scope of the session cookies. If you set, for example, the value "/*.4d.fr" for this selector, the client will only send a cookie when the request is addressed to the domain ".4d.fr", which excludes servers hosting external static data. | +| sessionCookieName | text | Name of the cookie used for storing the session ID.

    Default = "4DSID" | +| sessionCookiePath | text | "path" field of the session cookie. Used to control the scope of the session cookies. If you set, for example, the value "/4DACTION" for this selector, the client will only send a cookie for dynamic requests beginning with 4DACTION, and not for pictures, static pages, etc. | +| sessionIPAddressValidation | boolean | IP address validation for session cookies. For security reasons, by default the web server checks the IP address of each request containing a session cookie and rejects it if this address does not match the IP address used to create the cookie. In some specific applications, you may want to disable this validation and accept session cookies, even when their IP addresses do not match. For example when mobile devices switch between Wifi and 3G/4G networks, their IP address will change. In this case, you can allow clients to be able to continue using their web sessions even when the IP addresses change.

    Note: this setting lowers the security level of your application | + +These properties are defined: + +1. using the `settings` parameter of the `webServer.start( )` method (except for read-only properties, see below), +2. if not used, using the `WEB SET OPTION` command (host applications only), +3. if not used, in the settings of the host application or the component. + +- If the web server is not started, the properties contain the values that will be used at the next web server startup. +- If the web server is started, the properties contain the actual values used by the web server (default settings could have been overriden by the `settings` parameter of the `webServer.start()` method. + +> *isRunning*, *name*, *openSSLVersion*, and *perfectForwardSecrecy* are read-only properties that cannot be predefined in the `settings` object parameter for the `start()` method. + + +## Scope of the 4D Web commands + +The 4D Language contains [several commands](https://doc.4d.com/4Dv18/4D/18/Web-Server.201-4504301.en.html) that can be used to control the web server. However, these commands are designed to work with a single (default) web server. When using these commands in the context of web server objects, make sure their scope is appropriate. + +| Command | Scope | +| ------------------------------- | ------------------------------------ | +| `SET DATABASE PARAMETER` | Host application web server | +| `WEB CLOSE SESSION` | Web server that received the request | +| `WEB GET BODY PART` | Web server that received the request | +| `WEB Get body part count` | Web server that received the request | +| `WEB Get Current Session ID` | Web server that received the request | +| `WEB GET HTTP BODY` | Web server that received the request | +| `WEB GET HTTP HEADER` | Web server that received the request | +| `WEB GET OPTION` | Host application web server | +| `WEB Get server info` | Host application web server | +| `WEB GET SESSION EXPIRATION` | Web server that received the request | +| `WEB Get session process count` | Web server that received the request | +| `WEB GET STATISTICS` | Host application web server | +| `WEB GET VARIABLES` | Web server that received the request | +| `WEB Is secured connection` | Web server that received the request | +| `WEB Is server running` | Host application web server | +| `WEB SEND BLOB` | Web server that received the request | +| `WEB SEND FILE` | Web server that received the request | +| `WEB SEND HTTP REDIRECT` | Web server that received the request | +| `WEB SEND RAW DATA` | Web server that received the request | +| `WEB SEND TEXT` | Web server that received the request | +| `WEB SET HOME PAGE` | Host application web server | +| `WEB SET HTTP HEADER` | Web server that received the request | +| `WEB SET OPTION` | Host application web server | +| `WEB SET ROOT FOLDER` | Host application web server | +| `WEB START SERVER` | Host application web server | +| `WEB STOP SERVER` | Host application web server | +| `WEB Validate digest` | Web server that received the request | From 5df6ba569594b0087009cb62e9ab8635445a4b99 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:19:01 +0100 Subject: [PATCH 074/260] New translations properties_RangeOfValues.md (French) --- .../FormObjects/properties_RangeOfValues.md | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/properties_RangeOfValues.md b/website/translated_docs/fr/FormObjects/properties_RangeOfValues.md index eac186cade2a51..41f6be2cb6d239 100644 --- a/website/translated_docs/fr/FormObjects/properties_RangeOfValues.md +++ b/website/translated_docs/fr/FormObjects/properties_RangeOfValues.md @@ -1,10 +1,10 @@ --- id: propertiesRangeOfValues -title: Plage de valeurs +title: Range of Values --- --- -## Valeur par défaut +## Default value You can assign a default value to be entered in an input object. This property is useful for example when the input [data source](properties_Object.md#variable-or-expression) is a field: the default value is entered when a new record is first displayed. You can change the value unless the input area has been defined as [non-enterable](properties_Entry.md#enterable). @@ -27,13 +27,13 @@ You can use a sequence number to create a unique number for each record in the t > Do not make confusion between this property and the "[default values](properties_DataSource.md#default-list-of-values)" property that allows to fill a list box column with static values. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | +| Name | Data Type | Possible Values | | ------------ | ----------------------------------- | ------------------------------------------ | | defaultValue | string, number, date, time, boolean | Any value and/or a stamp: "#D", "#H", "#N" | -#### Objets pris en charge +#### Objects Supported [Input](input_overview.md) @@ -43,16 +43,16 @@ You can use a sequence number to create a unique number for each record in the t ## Excluded List -Allows setting a list whose values cannot be entered in the object. Si une valeur exclue est saisie, elle n'est pas acceptée et un message d'erreur s'affiche. +Allows setting a list whose values cannot be entered in the object. If an excluded value is entered, it is not accepted and an error message is displayed. > If a specified list is hierarchical, only the items of the first level are taken into account. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------------ | --------------- | ------------------------------- | -| excludedList | liste | Une liste de valeurs à exclure. | +| Name | Data Type | Possible Values | +| ------------ | --------- | -------------------------------- | +| excludedList | list | A list of values to be excluded. | -#### Objets pris en charge +#### Objects Supported [Combo Box](comboBox_overview.md) - [List Box Column](listbox_overview.md#list-box-columns) - [Input](input_overview.md) @@ -62,18 +62,18 @@ Allows setting a list whose values cannot be entered in the object. Si une valeu ## Required List -Limite les entrées valides aux éléments de la liste. Par exemple, si vous souhaitez utiliser une liste pour les titres de postes, afin que les entrées valides soient limitées aux titres qui ont été approuvés par la direction. +Restricts the valid entries to the items on the list. For example, you may want to use a required list for job titles so that valid entries are limited to titles that have been approved by management. -La création d'une liste obligatoire n'affiche pas automatiquement la liste lorsque le champ est sélectionné. Si vous souhaitez afficher la liste requise, assignez la même liste à la propriété [Choice List](properties_DataSource.md#choice-list). Cependant, contrairement à la propriété [Choice List](properties_DataSource.md#choice-list), lorsqu'une liste obligatoire est définie, la saisie au clavier n'est plus possible, seule la sélection d'une valeur de liste à l'aide du pop-up menu est autorisée. If different lists are defined using the [Choice List](properties_DataSource.md#choice-list) and Required List properties, the Required List property has priority. +Making a list required does not automatically display the list when the field is selected. If you want to display the required list, assign the same list to the [Choice List](properties_DataSource.md#choice-list) property. However, unlike the [Choice List](properties_DataSource.md#choice-list) property, when a required list is defined, keyboard entry is no longer possible, only the selection of a list value using the pop-up menu is allowed. If different lists are defined using the [Choice List](properties_DataSource.md#choice-list) and Required List properties, the Required List property has priority. > If a specified list is hierarchical, only the items of the first level are taken into account. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------------ | --------------- | ---------------------------------- | -| requiredList | liste | Une liste de valeurs obligatoires. | +| Name | Data Type | Possible Values | +| ------------ | --------- | --------------------------- | +| requiredList | list | A list of mandatory values. | -#### Objets pris en charge +#### Objects Supported [Combo Box](comboBox_overview.md) - [List Box Column](listbox_overview.md#list-box-columns) - [Input](input_overview.md) From 74c8746512223c3a5b618e04c38512f91425a98f Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:19:04 +0100 Subject: [PATCH 075/260] New translations properties_Plugins.md (French) --- .../fr/FormObjects/properties_Plugins.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/properties_Plugins.md b/website/translated_docs/fr/FormObjects/properties_Plugins.md index 797cbf4b5fd99c..3a39c7db45495e 100644 --- a/website/translated_docs/fr/FormObjects/properties_Plugins.md +++ b/website/translated_docs/fr/FormObjects/properties_Plugins.md @@ -4,22 +4,22 @@ title: Plug-ins --- --- -## Propriétés avancées +## Advanced Properties -Si des options avancées sont fournies par l'auteur du plug-in, un bouton **Propriétés avancées** peut être activé dans la liste de propriétés. In this case, you can click this button to set these options, usually through a custom dialog box. +If advanced options are provided by the author of the plug-in, an **Advanced Properties** button may be enabled in the Property list. In this case, you can click this button to set these options, usually through a custom dialog box. -Étant donné que la fonction Propriétés avancées est sous le contrôle de l'auteur du plug-in, les informations sur ces options avancées relèvent de la responsabilité du distributeur du plug-in. +Because the Advanced properties feature is under the control of the author of the plug-in, information about these Advanced options is the responsibility of the distributor of the plug-in. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ---------------- | --------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| customProperties | Texte | Propriétés spécifiques du plug-in, passées au plug-in sous forme de chaîne JSON s'il s'agit d'un objet ou sous forme de tampon binaire s'il s'agit d'une chaîne encodée en base64 | +| Name | Data Type | Possible Values | +| ---------------- | --------- | ---------------------------------------------------------------------------------------------------------------------------- | +| customProperties | text | Plugin specific properties, passed to plugin as a JSON string if an object, or as a binary buffer if a base64 encoded string | -#### Objets pris en charge +#### Objects Supported -[Zone de plug-in](pluginArea_overview.md) +[Plug-in Area](pluginArea_overview.md) From 56f20499d19191c5da6ba21e4b6828aba7d1120d Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:19:06 +0100 Subject: [PATCH 076/260] New translations onDeleteAction.md (French) --- website/translated_docs/fr/Events/onDeleteAction.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/fr/Events/onDeleteAction.md b/website/translated_docs/fr/Events/onDeleteAction.md index ae16c780ff3d45..505ad869d88384 100644 --- a/website/translated_docs/fr/Events/onDeleteAction.md +++ b/website/translated_docs/fr/Events/onDeleteAction.md @@ -3,7 +3,7 @@ id: onDeleteAction title: Sur action suppression --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ----------------------------------------------------------------------------------------------- | ----------------------------------- | | 58 | [Hierarchical List](FormObjects/list_overview.md) - [List Box](FormObjects/listbox_overview.md) | The user attempts to delete an item | From 2d18fab05c60922a8d6775ada2e69409d78f1d0b Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:19:08 +0100 Subject: [PATCH 077/260] New translations onAlternativeClick.md (French) --- website/translated_docs/fr/Events/onAlternativeClick.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/fr/Events/onAlternativeClick.md b/website/translated_docs/fr/Events/onAlternativeClick.md index 45374c0278ed20..69ab04a846720f 100644 --- a/website/translated_docs/fr/Events/onAlternativeClick.md +++ b/website/translated_docs/fr/Events/onAlternativeClick.md @@ -3,7 +3,7 @@ id: onAlternativeClick title: Sur clic alternatif --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 38 | [Button](FormObjects/button_overview.md) - [List Box](FormObjects/listbox_overview.md) - [List Box Column](FormObjects/listbox_overview.md#list-box-columns) |

  • Buttons: The "arrow" area of a button is clicked
  • List boxes: In a column of an object array, an ellipsis button ("alternateButton" attribute) is clicked | From 3d25305c4358928722c92a930969adfd386fb711 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:19:10 +0100 Subject: [PATCH 078/260] New translations onBeforeDataEntry.md (French) --- website/translated_docs/fr/Events/onBeforeDataEntry.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/fr/Events/onBeforeDataEntry.md b/website/translated_docs/fr/Events/onBeforeDataEntry.md index d39909a97c18c3..ccfa74ee9ace58 100644 --- a/website/translated_docs/fr/Events/onBeforeDataEntry.md +++ b/website/translated_docs/fr/Events/onBeforeDataEntry.md @@ -3,7 +3,7 @@ id: onBeforeDataEntry title: Sur avant saisie --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ----------------------------------------------------------------------------------------------------------------- | -------------------------------------------------- | | 41 | [List Box](FormObjects/listbox_overview.md) - [List Box Column](FormObjects/listbox_overview.md#list-box-columns) | A list box cell is about to change to editing mode | From 0313c7278a9c130d0836a92d8dad6294a8c1d280 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:19:13 +0100 Subject: [PATCH 079/260] New translations onBeforeKeystroke.md (French) --- .../fr/Events/onBeforeKeystroke.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/website/translated_docs/fr/Events/onBeforeKeystroke.md b/website/translated_docs/fr/Events/onBeforeKeystroke.md index 14ab919df9b693..d9f00a6862295d 100644 --- a/website/translated_docs/fr/Events/onBeforeKeystroke.md +++ b/website/translated_docs/fr/Events/onBeforeKeystroke.md @@ -3,21 +3,21 @@ id: onBeforeKeystroke title: Sue avant frappe clavier --- -| Code | Peut être appelé par | Définition | -| ---- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | -| 17 | [4D Write Pro area](FormObjects/writeProArea_overview) - [Combo Box](FormObjects/comboBox_overview.md) - Form - [Input](FormObjects/input_overview.md) - [List Box](FormObjects/listbox_overview.md) - [List Box Column](FormObjects/listbox_overview.md#list-box-columns) | Un caractère est sur le point d'être saisi dans l'objet qui a le focus. `Get edited text` returns the object's text **without** this character. | +| Code | Can be called by | Definition | +| ---- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | +| 17 | [4D Write Pro area](FormObjects/writeProArea_overview) - [Combo Box](FormObjects/comboBox_overview.md) - Form - [Input](FormObjects/input_overview.md) - [List Box](FormObjects/listbox_overview.md) - [List Box Column](FormObjects/listbox_overview.md#list-box-columns) | A character is about to be entered in the object that has the focus. `Get edited text` returns the object's text **without** this character. | ## Description -Après avoir sélectionné les propriétés d'événement `On Before Keystroke` et [`On After Keystroke`](onAfterKeystroke.md) pour un objet, vous pouvez détecter et gérer les frappes au sein de l'objet, en utilisant la commande `Form event` qui retournera `On Before Keystroke` puis [`On After Keystroke` ](onAfterKeystroke.md)(pour plus d'informations, veuillez vous reporter à la description de la commande `Get edited text`). +After the `On Before Keystroke` and [`On After Keystroke event`](onAfterKeystroke.md) properties are selected for an object, you can detect and handle the keystrokes within the object, using the `Form event code` command that will return `On Before Keystroke` and then [`On After Keystroke event`](onAfterKeystroke.md) (for more information, please refer to the description of the `Get edited text` command). -Ces événements sont également activés par des commandes de langage qui simulent une action utilisateur telle que `POST KEY`. +These events are also activated by language commands that simulate a user action like `POST KEY`. -Gardez à l'esprit que les modifications utilisateur qui ne sont pas effectuées à l'aide du clavier (coller, glisser-déposer, etc.) ne sont pas prises en compte. Pour traiter ces événements, vous devez utiliser [`On After Edit`](onAfterEdit.md). +Keep in mind that user modifications that are not carried out using the keyboard (paste, drag-drop, etc.) are not taken into account. To process these events, you must use [`On After Edit`](onAfterEdit.md). -> Les événements `On Before Keystroke` et `On After Keystroke` ne sont pas générés lors de l'utilisation d'une méthode de saisie. Une méthode de saisie (ou IME, Input Method Editor) est un programme ou un composant système qui peut être utilisé pour saisir des caractères ou des symboles complexes (par exemple, du japonais ou du chinois) à l'aide d'un clavier occidental. +> The `On Before Keystroke` and `On After Keystroke` events are not generated when using an input method. An input method (or IME, Input Method Editor) is a program or a system component that can be used to enter complex characters or symbols (for example, Japanese or Chinese) using a Western keyboard. -### Voir également +### See also [On After Keystroke](onAfterKeystroke.md). \ No newline at end of file From 81de3a2147d75d0165174eaa0e42c64782b2fffb Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:19:15 +0100 Subject: [PATCH 080/260] New translations onBeginDragOver.md (French) --- website/translated_docs/fr/Events/onBeginDragOver.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/fr/Events/onBeginDragOver.md b/website/translated_docs/fr/Events/onBeginDragOver.md index 05e3dc802a5f0f..638b197e4097be 100644 --- a/website/translated_docs/fr/Events/onBeginDragOver.md +++ b/website/translated_docs/fr/Events/onBeginDragOver.md @@ -3,7 +3,7 @@ id: onBeginDragOver title: Sur début survol --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------- | | 17 | [4D Write Pro area](FormObjects/writeProArea_overview) - [Button](FormObjects/button_overview.md) - [Button Grid](FormObjects/buttonGrid_overview.md) - [Check Box](FormObjects/checkbox_overview.md) - [Dropdown list](FormObjects/dropdownList_Overview.md) - Form - [Hierarchical List](FormObjects/list_overview.md#overview) - [Input](FormObjects/input_overview.md) - [List Box](FormObjects/listbox_overview.md) - [List Box Column](FormObjects/listbox_overview.md#list-box-columns) - [Picture Button](FormObjects/pictureButton_overview.md) - [Picture Pop up menu](FormObjects/picturePopupMenu_overview.md) - [Plug-in Area](FormObjects/pluginArea_overview.md#overview) - [Progress Indicators](FormObjects/progressIndicator.md) - [Radio Button](FormObjects/radio_overview.md) - [Ruler](FormObjects/ruler.md) - [Spinner](FormObjects/spinner.md) - [Splitter](FormObjects/splitters.md) - [Stepper](FormObjects/stepper.md) - [Tab control](FormObjects/tabControl.md) | An object is being dragged | From c390c93b9fbec9f481458ebd324605a77461743d Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:19:17 +0100 Subject: [PATCH 081/260] New translations onBeginUrlLoading.md (French) --- website/translated_docs/fr/Events/onBeginUrlLoading.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/translated_docs/fr/Events/onBeginUrlLoading.md b/website/translated_docs/fr/Events/onBeginUrlLoading.md index 330a1a09e1fffb..f7eb5de22cbe11 100644 --- a/website/translated_docs/fr/Events/onBeginUrlLoading.md +++ b/website/translated_docs/fr/Events/onBeginUrlLoading.md @@ -3,9 +3,9 @@ id: onBeginUrlLoading title: On Begin URL Loading --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ------------------------------------------- | ----------------------------------- | -| 47 | [Zone Web](FormObjects/webArea_overview.md) | A new URL is loaded in the Web area | +| 47 | [Web Area](FormObjects/webArea_overview.md) | A new URL is loaded in the Web area | ## Description From 88665f3398462071b642dbfdf61d4c5e883d94b2 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:19:18 +0100 Subject: [PATCH 082/260] New translations onBoundVariableChange.md (French) --- website/translated_docs/fr/Events/onBoundVariableChange.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/translated_docs/fr/Events/onBoundVariableChange.md b/website/translated_docs/fr/Events/onBoundVariableChange.md index 7d4928731a877c..239aae38ad4eb0 100644 --- a/website/translated_docs/fr/Events/onBoundVariableChange.md +++ b/website/translated_docs/fr/Events/onBoundVariableChange.md @@ -3,9 +3,9 @@ id: onBoundVariableChange title: On Bound Variable Change --- -| Code | Peut être appelé par | Définition | -| ---- | -------------------- | ------------------------------------------- | -| 54 | Formulaire | The variable bound to a subform is modified | +| Code | Can be called by | Definition | +| ---- | ---------------- | ------------------------------------------- | +| 54 | Form | The variable bound to a subform is modified | ## Description From b2a8c180ddf9b428e4dfd95d8831aa83e09a5b53 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:19:21 +0100 Subject: [PATCH 083/260] New translations onClicked.md (French) --- website/translated_docs/fr/Events/onClicked.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/website/translated_docs/fr/Events/onClicked.md b/website/translated_docs/fr/Events/onClicked.md index ffff41c5100afe..225a15e1d22cc7 100644 --- a/website/translated_docs/fr/Events/onClicked.md +++ b/website/translated_docs/fr/Events/onClicked.md @@ -3,7 +3,7 @@ id: onClicked title: Sur clic --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------- | | 4 | [4D View Pro Area](FormObjects/viewProArea_overview.md) - [4D Write Pro area](FormObjects/writeProArea_overview) - [Button](FormObjects/button_overview.md) - [Button Grid](FormObjects/buttonGrid_overview.md) - [Check Box](FormObjects/checkbox_overview.md) - [Combo Box](FormObjects/comboBox_overview.md) - [Dropdown list](FormObjects/dropdownList_Overview.md) - Form - [Hierarchical List](FormObjects/list_overview.md#overview) - [Input](FormObjects/input_overview.md) - [List Box](FormObjects/listbox_overview.md) - [List Box Column](FormObjects/listbox_overview.md#list-box-columns) - [Picture Button](FormObjects/pictureButton_overview.md) - [Picture Pop up menu](FormObjects/picturePopupMenu_overview.md) - [Plug-in Area](FormObjects/pluginArea_overview.md#overview) - [Progress Indicators](FormObjects/progressIndicator.md) - [Radio Button](FormObjects/radio_overview.md) - [Ruler](FormObjects/ruler.md) - [Spinner](FormObjects/spinner.md) - [Splitter](FormObjects/splitters.md) - [Stepper](FormObjects/stepper.md) - [Tab control](FormObjects/tabControl.md) | A click occurred on an object | @@ -34,15 +34,15 @@ If both events are selected for an object, the `On Clicked` and then the `On Dou This event is generated when the user clicks anywhere on a 4D View Pro document. On this context, the [event object](overview.md#event-object) returned by the `FORM Event` command contains: -| Propriété | Type | Description | -| ----------- | ----------- | ------------------------------ | -| code | entier long | Sur clic | -| description | Texte | "On Clicked" | -| objectName | Texte | 4D View Pro area name | -| sheetName | Texte | Name of the sheet of the event | -| range | object | Cell range | +| Property | Type | Description | +| ----------- | ------- | ------------------------------ | +| code | longint | Sur clic | +| description | text | "On Clicked" | +| objectName | text | 4D View Pro area name | +| sheetName | text | Name of the sheet of the event | +| range | object | Cell range | -#### Exemple +#### Example ```4d If(FORM Event.code=On Clicked) From 7dc1f4f286b41ae3d767a17877dc1df369527e4d Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:19:23 +0100 Subject: [PATCH 084/260] New translations onCloseBox.md (French) --- website/translated_docs/fr/Events/onCloseBox.md | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/website/translated_docs/fr/Events/onCloseBox.md b/website/translated_docs/fr/Events/onCloseBox.md index 0bfb4f742c3daf..5c0bff081375fc 100644 --- a/website/translated_docs/fr/Events/onCloseBox.md +++ b/website/translated_docs/fr/Events/onCloseBox.md @@ -3,16 +3,16 @@ id: onCloseBox title: On Close Box --- -| Code | Peut être appelé par | Définition | -| ---- | -------------------- | --------------------------------------- | -| 22 | Formulaire | The window’s close box has been clicked | +| Code | Can be called by | Definition | +| ---- | ---------------- | --------------------------------------- | +| 22 | Form | The window’s close box has been clicked | ## Description The `On Close Box` event is generated when the user clicks on the clos box of the window. -### Exemple +### Example This example shows how to respond to a close window event with a form used for record data entry: @@ -24,8 +24,6 @@ This example shows how to respond to a close window event with a form used for r :(Form event code=On Close Box) If(Modified record($vpFormTable->)) CONFIRM("This record has been modified. Save Changes?") - Save Changes?") - Save Changes?") If(OK=1) ACCEPT Else @@ -35,6 +33,5 @@ This example shows how to respond to a close window event with a form used for r CANCEL End if //... - //déclaration(s) End case ``` \ No newline at end of file From cb680afa9610f45dd8a44a383fc95a6807df9ec8 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:19:24 +0100 Subject: [PATCH 085/260] New translations onCloseDetail.md (French) --- website/translated_docs/fr/Events/onCloseDetail.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/fr/Events/onCloseDetail.md b/website/translated_docs/fr/Events/onCloseDetail.md index a0e9f5526674a0..1a918df966f165 100644 --- a/website/translated_docs/fr/Events/onCloseDetail.md +++ b/website/translated_docs/fr/Events/onCloseDetail.md @@ -3,7 +3,7 @@ id: onCloseDetail title: Sur fermeture corps --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | -------------------------------------------------- | -------------------------------------------------------------- | | 26 | Form - [List Box](FormObjects/listbox_overview.md) | You left the detail form and are going back to the output form | From 3562b1bfa90214bbaa56245970bf3adeccefb77a Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:19:28 +0100 Subject: [PATCH 086/260] New translations onCollapse.md (French) --- website/translated_docs/fr/Events/onCollapse.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/translated_docs/fr/Events/onCollapse.md b/website/translated_docs/fr/Events/onCollapse.md index bcaf2c2adb740e..f70bcda98f633e 100644 --- a/website/translated_docs/fr/Events/onCollapse.md +++ b/website/translated_docs/fr/Events/onCollapse.md @@ -3,7 +3,7 @@ id: onCollapse title: Sur contracter --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | -------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | | 44 | [Hierarchical List](FormObjects/list_overview.md#overview) - [List Box](FormObjects/listbox_overview.md) | An element of the hierarchical list or hierarchical list box has been collapsed using a click or a keystroke | @@ -14,5 +14,5 @@ title: Sur contracter - [Hierarchical list boxes](FormObjects/listbox_overview.md#hierarchical-list-boxes): This event is generated when a row of the hierarchical list box is collapsed. -### Voir également +### See also [Sur déployer](onExpand.md) \ No newline at end of file From 1ba6da9e97526c252a44b1173979561f110406be Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:19:30 +0100 Subject: [PATCH 087/260] New translations onColumnMoved.md (French) --- website/translated_docs/fr/Events/onColumnMoved.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/fr/Events/onColumnMoved.md b/website/translated_docs/fr/Events/onColumnMoved.md index 77fbb35304d3d4..4e3d82c46d0c6d 100644 --- a/website/translated_docs/fr/Events/onColumnMoved.md +++ b/website/translated_docs/fr/Events/onColumnMoved.md @@ -3,7 +3,7 @@ id: onColumnMoved title: Sur déplacement colonne --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ----------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------- | | 32 | [List Box](FormObjects/listbox_overview.md) - [List Box Column](FormObjects/listbox_overview.md#list-box-columns) | A list box column is moved by the user via drag and drop | From 7643edeeb0432cdc0738af4092bf5ae6b839ee64 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:19:32 +0100 Subject: [PATCH 088/260] New translations onColumnResize.md (French) --- .../fr/Events/onColumnResize.md | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/website/translated_docs/fr/Events/onColumnResize.md b/website/translated_docs/fr/Events/onColumnResize.md index fd419fabd42059..29f29c769d64e6 100644 --- a/website/translated_docs/fr/Events/onColumnResize.md +++ b/website/translated_docs/fr/Events/onColumnResize.md @@ -3,7 +3,7 @@ id: onColumnResize title: Sur redimensionnement colonne --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- | | 33 | [4D View Pro Area](FormObjects/viewProArea_overview.md) - [List Box](FormObjects/listbox_overview.md) - [List Box Column](FormObjects/listbox_overview.md#list-box-columns) | The width of a column is modified directly by the user or consequently to a form window resize | @@ -20,16 +20,16 @@ This event is generated when the width of a column in the list box is modified b This event is generated when the width of a column is modified by a user. On this context, the [event object](overview.md#event-object) returned by the `FORM Event` command contains: -| Propriété | Type | Description | -| ----------- | ----------- | ------------------------------------------------------------------- | -| code | entier long | Sur redimensionnement colonne | -| description | Texte | "On Column Resize" | -| objectName | Texte | 4D View Pro area name | -| sheetName | Texte | Name of the sheet of the event | -| range | object | Cell range of the columns whose widths have changed | -| header | boolean | True if the row header column (first column) is resized, else false | +| Property | Type | Description | +| ----------- | ------- | ------------------------------------------------------------------- | +| code | longint | Sur redimensionnement colonne | +| description | text | "On Column Resize" | +| objectName | text | 4D View Pro area name | +| sheetName | text | Name of the sheet of the event | +| range | object | Cell range of the columns whose widths have changed | +| header | boolean | True if the row header column (first column) is resized, else false | -#### Exemple +#### Example ```4d If(FORM Event.code=On Column Resize) From ca0d81f023ad0c641806e0e12863273023a66538 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:19:34 +0100 Subject: [PATCH 089/260] New translations onDataChange.md (French) --- website/translated_docs/fr/Events/onDataChange.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/fr/Events/onDataChange.md b/website/translated_docs/fr/Events/onDataChange.md index 0e62a62846fc98..d0ef7c294b5e00 100644 --- a/website/translated_docs/fr/Events/onDataChange.md +++ b/website/translated_docs/fr/Events/onDataChange.md @@ -3,7 +3,7 @@ id: onDataChange title: Sur données modifiées --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------- | | 20 | [4D Write Pro area](FormObjects/writeProArea_overview) - [Dropdown list](FormObjects/dropdownList_Overview.md) - Form - [Hierarchical List](FormObjects/list_overview.md) - [Input](FormObjects/input_overview.md) - [List Box](FormObjects/listbox_overview.md) - [List Box Column](FormObjects/listbox_overview.md#list-box-columns) - [Plug-in Area](FormObjects/pluginArea_overview.md#overview) - [Progress Indicators](FormObjects/progressIndicator.md) - [Ruler](FormObjects/ruler.md) - [Spinner](FormObjects/spinner.md) - [Stepper](FormObjects/stepper.md) - [Subform](FormObjects/subform_overview.md) | An object data has been modified | From 55067c5b39353849a23ca5aac8fc519b400d7b50 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:19:36 +0100 Subject: [PATCH 090/260] New translations onDeactivate.md (French) --- website/translated_docs/fr/Events/onDeactivate.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/website/translated_docs/fr/Events/onDeactivate.md b/website/translated_docs/fr/Events/onDeactivate.md index 06babd10114d8f..28554948af4078 100644 --- a/website/translated_docs/fr/Events/onDeactivate.md +++ b/website/translated_docs/fr/Events/onDeactivate.md @@ -3,16 +3,16 @@ id: onDeactivate title: On Deactivate --- -| Code | Peut être appelé par | Définition | -| ---- | -------------------- | --------------------------------------------------- | -| 12 | Formulaire | The form’s window ceases to be the frontmost window | +| Code | Can be called by | Definition | +| ---- | ---------------- | --------------------------------------------------- | +| 12 | Form | The form’s window ceases to be the frontmost window | ## Description If the window of a form was the frontmost window, this event is called when the window is sent to the background. -Cet événement s'applique au formulaire dans son ensemble et non à un objet particulier. Consequently, if the `On Deactivate` form event property is selected, only the form will have its form method called. +This event applies to the form as a whole and not to a particular object. Consequently, if the `On Deactivate` form event property is selected, only the form will have its form method called. -### Voir également +### See also [Sur activation](onActivate.md) \ No newline at end of file From bcd7eb8d7738386d471eb3570c5210c4f8cffcba Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:19:38 +0100 Subject: [PATCH 091/260] New translations onDisplayDetail.md (French) --- website/translated_docs/fr/Events/onDisplayDetail.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/translated_docs/fr/Events/onDisplayDetail.md b/website/translated_docs/fr/Events/onDisplayDetail.md index 732fcabae0fe4b..e24b6b4a99a3eb 100644 --- a/website/translated_docs/fr/Events/onDisplayDetail.md +++ b/website/translated_docs/fr/Events/onDisplayDetail.md @@ -3,7 +3,7 @@ id: onDisplayDetail title: Sur affichage corps --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | -------------------------------------------------- | ------------------------------------------------------------------------------------------------- | | 8 | Form - [List Box](FormObjects/listbox_overview.md) | A record is about to be displayed in a list form or a row is about to be displayed in a list box. | @@ -30,7 +30,7 @@ In this context, the following sequence of calls to methods and form events is t Calling a 4D command that displays a dialog box from the `On Display Detail` event is not allowed and will cause a syntax error to occur. More particularly, the commands concerned are: `ALERT`, `DIALOG`, `CONFIRM`, `Request`, `ADD RECORD`, `MODIFY RECORD`, `DISPLAY SELECTION`, and `MODIFY SELECTION`. -### Liste box sélection +### Selection list box This event is generated when a row of a [**selection type**](FormObjects/listbox_overview.md#selection-list-boxes) list box is displayed. From e792fcb7149d39fe54a08748c5597b610c6b1e79 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:19:40 +0100 Subject: [PATCH 092/260] New translations onAfterKeystroke.md (French) --- .../fr/Events/onAfterKeystroke.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/website/translated_docs/fr/Events/onAfterKeystroke.md b/website/translated_docs/fr/Events/onAfterKeystroke.md index 7040b5da419dea..a403a3d54dff6f 100644 --- a/website/translated_docs/fr/Events/onAfterKeystroke.md +++ b/website/translated_docs/fr/Events/onAfterKeystroke.md @@ -3,22 +3,22 @@ id: onAfterKeystroke title: Sue après frappe clavier --- -| Code | Peut être appelé par | Définition | -| ---- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | -| 28 | [4D Write Pro area](FormObjects/writeProArea_overview) - [Combo Box](FormObjects/comboBox_overview.md) - Form - [Input](FormObjects/input_overview.md) - [List Box](FormObjects/listbox_overview.md) - [List Box Column](FormObjects/listbox_overview.md#list-box-columns) | Un caractère est sur le point d'être saisi dans l'objet qui a le focus. `Get edited text` returns the object's text **including** this character. | +| Code | Can be called by | Definition | +| ---- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- | +| 28 | [4D Write Pro area](FormObjects/writeProArea_overview) - [Combo Box](FormObjects/comboBox_overview.md) - Form - [Input](FormObjects/input_overview.md) - [List Box](FormObjects/listbox_overview.md) - [List Box Column](FormObjects/listbox_overview.md#list-box-columns) | A character is about to be entered in the object that has the focus. `Get edited text` returns the object's text **including** this character. | ## Description -> L'événement `On After Keystroke` peut généralement être remplacé par l'événement On After Edit (voir ci-dessous). +> The `On After Keystroke` event can generally be replaced by the [`On After Edit`](onAfterEdit.md) event (see below). -Après avoir sélectionné les propriétés d'événement [`On Before Keystroke`](onBeforeKeystroke.md) et `On After Keystroke` pour un objet, vous pouvez détecter et gérer les frappes au sein de l'objet, en utilisant la commande `FORM event` qui renverra `On Before Keystroke` puis `On After Keystroke` (pour plus d'informations, veuillez reportez-vous à la description de la commande `Get edited text`). +After the [`On Before Keystroke`](onBeforeKeystroke.md) and `On After Keystroke` event properties are selected for an object, you can detect and handle the keystrokes within the object, using the `FORM event` command that will return `On Before Keystroke` and then `On After Keystroke` (for more information, please refer to the description of the `Get edited text` command). -Ces événements sont également activés par des commandes de langage qui simulent une action utilisateur telle que `POST KEY`. +These events are also activated by language commands that simulate a user action like `POST KEY`. -Gardez à l'esprit que les modifications utilisateur qui ne sont pas effectuées à l'aide du clavier (coller, glisser-déposer, etc.) ne sont pas prises en compte. Pour traiter ces événements, vous devez utiliser [`On After Edit`](onAfterEdit.md). +Keep in mind that user modifications that are not carried out using the keyboard (paste, drag-drop, etc.) are not taken into account. To process these events, you must use [`On After Edit`](onAfterEdit.md). -> Les événements [`On Before Keystroke`](onBeforeKeystroke.md) et `On After Keystroke` ne sont pas générés lors de l'utilisation d'une méthode de saisie. Une méthode de saisie (ou IME, Input Method Editor) est un programme ou un composant système qui peut être utilisé pour saisir des caractères ou des symboles complexes (par exemple, du japonais ou du chinois) à l'aide d'un clavier occidental. +> The [`On Before Keystroke`](onBeforeKeystroke.md) and `On After Keystroke` events are not generated when using an input method. An input method (or IME, Input Method Editor) is a program or a system component that can be used to enter complex characters or symbols (for example, Japanese or Chinese) using a Western keyboard. -### Voir également +### See also [On Before Keystroke](onBeforeKeystroke.md). \ No newline at end of file From a76d926e0d34ba3d82ab899a96b1a1e43f8288a3 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:19:42 +0100 Subject: [PATCH 093/260] New translations onDoubleClicked.md (French) --- .../fr/Events/onDoubleClicked.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/website/translated_docs/fr/Events/onDoubleClicked.md b/website/translated_docs/fr/Events/onDoubleClicked.md index 37321a524ac976..c8ef29f842df33 100644 --- a/website/translated_docs/fr/Events/onDoubleClicked.md +++ b/website/translated_docs/fr/Events/onDoubleClicked.md @@ -3,7 +3,7 @@ id: onDoubleClicked title: Sur double clic --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------ | | 13 | [4D View Pro Area](FormObjects/viewProArea_overview.md) - [4D Write Pro area](FormObjects/writeProArea_overview) - [Button](FormObjects/button_overview.md) - [Button Grid](FormObjects/buttonGrid_overview.md) - [Check Box](FormObjects/checkbox_overview.md) - [Combo Box](FormObjects/comboBox_overview.md) - [Dropdown list](FormObjects/dropdownList_Overview.md) - Form - [Hierarchical List](FormObjects/list_overview.md#overview) - [Input](FormObjects/input_overview.md) - [List Box](FormObjects/listbox_overview.md) - [List Box Column](FormObjects/listbox_overview.md#list-box-columns) - [Picture Button](FormObjects/pictureButton_overview.md) - [Picture Pop up menu](FormObjects/picturePopupMenu_overview.md) - [Plug-in Area](FormObjects/pluginArea_overview.md#overview) - [Progress Indicators](FormObjects/progressIndicator.md) - [Radio Button](FormObjects/radio_overview.md) - [Ruler](FormObjects/ruler.md) - [Spinner](FormObjects/spinner.md) - [Splitter](FormObjects/splitters.md) - [Stepper](FormObjects/stepper.md) - [Tab control](FormObjects/tabControl.md) | A double click occurred on an object | @@ -20,15 +20,15 @@ If both events are selected for an object, the `On Clicked` and then the `On Dou This event is generated when the user doubl-clicks anywhere on a 4D View Pro document. On this context, the [event object](overview.md#event-object) returned by the `FORM Event` command contains: -| Propriété | Type | Description | -| ----------- | ----------- | ------------------------------ | -| code | entier long | 13 | -| description | Texte | "On Double Clicked" | -| objectName | Texte | 4D View Pro area name | -| sheetName | Texte | Name of the sheet of the event | -| range | object | Cell range | +| Property | Type | Description | +| ----------- | ------- | ------------------------------ | +| code | longint | 13 | +| description | text | "On Double Clicked" | +| objectName | text | 4D View Pro area name | +| sheetName | text | Name of the sheet of the event | +| range | object | Cell range | -#### Exemple +#### Example ```4d If(FORM Event.code=On Double Clicked) From 5ed3d4bc356493dde664d2a07b0115c679b4279b Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:19:44 +0100 Subject: [PATCH 094/260] New translations onDragOver.md (French) --- website/translated_docs/fr/Events/onDragOver.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/translated_docs/fr/Events/onDragOver.md b/website/translated_docs/fr/Events/onDragOver.md index 1df5eb3b8ddf1a..ac1f3264af1112 100644 --- a/website/translated_docs/fr/Events/onDragOver.md +++ b/website/translated_docs/fr/Events/onDragOver.md @@ -3,7 +3,7 @@ id: onDragOver title: Sur glisser --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------ | | 21 | [4D Write Pro area](FormObjects/writeProArea_overview) - [Button](FormObjects/button_overview.md) - [Button Grid](FormObjects/buttonGrid_overview.md) - [Check Box](FormObjects/checkbox_overview.md) - [Dropdown list](FormObjects/dropdownList_Overview.md) - [Hierarchical List](FormObjects/list_overview.md#overview) - [Input](FormObjects/input_overview.md) - [List Box](FormObjects/listbox_overview.md) - [List Box Column](FormObjects/listbox_overview.md#list-box-columns) - [Picture Button](FormObjects/pictureButton_overview.md) - [Picture Pop up menu](FormObjects/picturePopupMenu_overview.md) - [Plug-in Area](FormObjects/pluginArea_overview.md#overview) - [Progress Indicators](FormObjects/progressIndicator.md) - [Radio Button](FormObjects/radio_overview.md) - [Ruler](FormObjects/ruler.md) - [Spinner](FormObjects/spinner.md) - [Splitter](FormObjects/splitters.md) - [Stepper](FormObjects/stepper.md) - [Tab control](FormObjects/tabControl.md) | Data could be dropped onto an object | @@ -26,5 +26,5 @@ The `On Drag Over` event is the means by which you control the first phase of a The code handling an `On Drag Over` event should be short and execute quickly, because that event is sent repeatedly to the current destination object, due to the movements of the mouse. -#### Voir également +#### See also [`Sur début survol`](onBeginDragOver.md) \ No newline at end of file From ed98e2fda058e3f68d2a799aca30c5da3f77f167 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:19:46 +0100 Subject: [PATCH 095/260] New translations onDrop.md (French) --- website/translated_docs/fr/Events/onDrop.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/translated_docs/fr/Events/onDrop.md b/website/translated_docs/fr/Events/onDrop.md index a98c854be5b24e..10b471fc4b5645 100644 --- a/website/translated_docs/fr/Events/onDrop.md +++ b/website/translated_docs/fr/Events/onDrop.md @@ -3,7 +3,7 @@ id: onDrop title: Sur déposer --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------ | | 16 | [4D Write Pro area](FormObjects/writeProArea_overview) - [Button](FormObjects/button_overview.md) - [Button Grid](FormObjects/buttonGrid_overview.md) - [Check Box](FormObjects/checkbox_overview.md) - [Dropdown list](FormObjects/dropdownList_Overview.md) - Form - [Hierarchical List](FormObjects/list_overview.md#overview) - [Input](FormObjects/input_overview.md) - [List Box](FormObjects/listbox_overview.md) - [List Box Column](FormObjects/listbox_overview.md#list-box-columns) - [Picture Button](FormObjects/pictureButton_overview.md) - [Picture Pop up menu](FormObjects/picturePopupMenu_overview.md) - [Plug-in Area](FormObjects/pluginArea_overview.md#overview) - [Progress Indicators](FormObjects/progressIndicator.md) - [Radio Button](FormObjects/radio_overview.md) - [Ruler](FormObjects/ruler.md) - [Spinner](FormObjects/spinner.md) - [Splitter](FormObjects/splitters.md) - [Stepper](FormObjects/stepper.md) - [Tab control](FormObjects/tabControl.md) | Data has been dropped onto an object | @@ -16,5 +16,5 @@ This event is not sent to the object if the drag was not accepted during the [`O -#### Voir également +#### See also [`Sur début survol`](onBeginDragOver.md) \ No newline at end of file From 16809a556a35546653b855245a0a2481945d50ae Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:19:48 +0100 Subject: [PATCH 096/260] New translations onEndUrlLoading.md (French) --- website/translated_docs/fr/Events/onEndUrlLoading.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/translated_docs/fr/Events/onEndUrlLoading.md b/website/translated_docs/fr/Events/onEndUrlLoading.md index c81f3db1961f5b..d709c273a971bb 100644 --- a/website/translated_docs/fr/Events/onEndUrlLoading.md +++ b/website/translated_docs/fr/Events/onEndUrlLoading.md @@ -3,9 +3,9 @@ id: onEndUrlLoading title: On End URL Loading --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ------------------------------------------- | --------------------------------------------- | -| 49 | [Zone Web](FormObjects/webArea_overview.md) | All the resources of the URL have been loaded | +| 49 | [Web Area](FormObjects/webArea_overview.md) | All the resources of the URL have been loaded | ## Description From e6b9bc3ff72df47f30dfaeb36aefd0d3281416cf Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:19:50 +0100 Subject: [PATCH 097/260] New translations onExpand.md (French) --- website/translated_docs/fr/Events/onExpand.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/translated_docs/fr/Events/onExpand.md b/website/translated_docs/fr/Events/onExpand.md index 4316ad953c2406..1ed4b237d48d52 100644 --- a/website/translated_docs/fr/Events/onExpand.md +++ b/website/translated_docs/fr/Events/onExpand.md @@ -3,7 +3,7 @@ id: onExpand title: Sur déployer --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | -------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- | | 44 | [Hierarchical List](FormObjects/list_overview.md#overview) - [List Box](FormObjects/listbox_overview.md) | An element of the hierarchical list or hierarchical list box has been expanded using a click or a keystroke | @@ -14,5 +14,5 @@ title: Sur déployer - [Hierarchical list boxes](FormObjects/listbox_overview.md#hierarchical-list-boxes): This event is generated when a row of the hierarchical list box is expanded. -### Voir également +### See also [Sur contracter](onCollapse.md) \ No newline at end of file From a1823cbbaa3385bc5f5dcf4c7c3a67001fffe2af Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:19:52 +0100 Subject: [PATCH 098/260] New translations onFooterClick.md (French) --- website/translated_docs/fr/Events/onFooterClick.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/fr/Events/onFooterClick.md b/website/translated_docs/fr/Events/onFooterClick.md index a863e202ae7644..ce240164e27c7c 100644 --- a/website/translated_docs/fr/Events/onFooterClick.md +++ b/website/translated_docs/fr/Events/onFooterClick.md @@ -3,7 +3,7 @@ id: onFooterClick title: Sur clic pied --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ----------------------------------------------------------------------------------------------------------------- | ------------------------------------------------- | | 57 | [List Box](FormObjects/listbox_overview.md) - [List Box Column](FormObjects/listbox_overview.md#list-box-columns) | A click occurs in the footer of a list box column | From eeb4e836ffecf186b3c21bacef5e1743bcc9610a Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:19:54 +0100 Subject: [PATCH 099/260] New translations onGettingFocus.md (French) --- website/translated_docs/fr/Events/onGettingFocus.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/fr/Events/onGettingFocus.md b/website/translated_docs/fr/Events/onGettingFocus.md index e49076ae6335cc..c86645d8b2e85f 100644 --- a/website/translated_docs/fr/Events/onGettingFocus.md +++ b/website/translated_docs/fr/Events/onGettingFocus.md @@ -3,7 +3,7 @@ id: onGettingFocus title: On getting focus --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------- | | 15 | [4D View Pro Area](FormObjects/viewProArea_overview.md) - [4D Write Pro area](FormObjects/writeProArea_overview) - [Button](FormObjects/button_overview.md) - [Check Box](FormObjects/checkbox_overview.md) - [Combo Box](FormObjects/comboBox_overview.md) - Form - [Hierarchical List](FormObjects/list_overview.md#overview) - [Input](FormObjects/input_overview.md) - [List Box](FormObjects/listbox_overview.md) - [List Box Column](FormObjects/listbox_overview.md#list-box-columns) - [Plug-in Area](FormObjects/pluginArea_overview.md#overview) - [Progress Indicators](FormObjects/progressIndicator.md) - [Radio Button](FormObjects/radio_overview.md) - [Ruler](FormObjects/ruler.md) - [Spinner](FormObjects/spinner.md) - [Stepper](FormObjects/stepper.md) - [Subform](FormObjects/subform_overview.md) - [Web area](FormObjects/webArea_overview.md) | A form object is getting the focus | From 19785d51697256158d66a12c1d02cad6903e639f Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:19:57 +0100 Subject: [PATCH 100/260] New translations onHeader.md (French) --- website/translated_docs/fr/Events/onHeader.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/fr/Events/onHeader.md b/website/translated_docs/fr/Events/onHeader.md index 3ad80eaab9ce72..f77341d85b2841 100644 --- a/website/translated_docs/fr/Events/onHeader.md +++ b/website/translated_docs/fr/Events/onHeader.md @@ -3,7 +3,7 @@ id: onHeader title: Sur entête --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------- | | 5 | [4D Write Pro area](FormObjects/writeProArea_overview) - [Button](FormObjects/button_overview.md) - [Button Grid](FormObjects/buttonGrid_overview.md) - [Check Box](FormObjects/checkbox_overview.md) - [Dropdown list](FormObjects/dropdownList_Overview.md) - Form (list form only) - [Hierarchical List](FormObjects/list_overview.md#overview) - [Input](FormObjects/input_overview.md) - [Picture Button](FormObjects/pictureButton_overview.md) - [Picture Pop up menu](FormObjects/picturePopupMenu_overview.md) - [Plug-in Area](FormObjects/pluginArea_overview.md#overview) - [Progress Indicators](FormObjects/progressIndicator.md) - [Radio Button](FormObjects/radio_overview.md) - [Ruler](FormObjects/ruler.md) - [Spinner](FormObjects/spinner.md) - [Splitter](FormObjects/splitters.md) - [Stepper](FormObjects/stepper.md) - [Tab control](FormObjects/tabControl.md) | The form's header area is about to be printed or displayed. | From de8d43e46ba3b6afbf7da7ee2759cc484112821e Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:19:59 +0100 Subject: [PATCH 101/260] New translations onHeaderClick.md (French) --- .../fr/Events/onHeaderClick.md | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/website/translated_docs/fr/Events/onHeaderClick.md b/website/translated_docs/fr/Events/onHeaderClick.md index bd253479184b5e..dab8355f71a907 100644 --- a/website/translated_docs/fr/Events/onHeaderClick.md +++ b/website/translated_docs/fr/Events/onHeaderClick.md @@ -3,7 +3,7 @@ id: onHeaderClick title: Sur clic entête --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------- | | 42 | [4D View Pro Area](FormObjects/viewProArea_overview.md) - [List Box](FormObjects/listbox_overview.md) - [List Box Column](FormObjects/listbox_overview.md#list-box-columns) | A click occurs in a column header | @@ -27,16 +27,16 @@ If the [Sortable](FormObjects/properties_Action.md#sortable) property is not sel This event is generated when the user clicks on a column or row header in a 4D View Pro document. In this context, the [event object](overview.md#event-object) returned by the `FORM Event` command contains: -| Propriété | Type | Description | -| ----------- | ----------- | ----------------------------------------------------------------------------------------------------------------------------------- | -| code | entier long | 42 | -| description | Texte | "On Header Click" | -| objectName | Texte | 4D View Pro area name | -| sheetName | Texte | Name of the sheet of the event | -| range | object | Cell range | -| sheetArea | entier long | The sheet location where the event took place:
  • 0: The crossing area between column number/letter headers (top left of the sheet)
  • 1: The column headers (area indicating the column numbers/letters)
  • 2: The row headers (area indicating the row numbers)
  • | +| Property | Type | Description | +| ----------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------- | +| code | longint | 42 | +| description | text | "On Header Click" | +| objectName | text | 4D View Pro area name | +| sheetName | text | Name of the sheet of the event | +| range | object | Cell range | +| sheetArea | longint | The sheet location where the event took place:
  • 0: The crossing area between column number/letter headers (top left of the sheet)
  • 1: The column headers (area indicating the column numbers/letters)
  • 2: The row headers (area indicating the row numbers)
  • | -#### Exemple +#### Example ```4d If(FORM Event.code=On Header Click) From 234a8d82728bb6818e6afed93c3743360028eefd Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:20:03 +0100 Subject: [PATCH 102/260] New translations onLoad.md (French) --- website/translated_docs/fr/Events/onLoad.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/translated_docs/fr/Events/onLoad.md b/website/translated_docs/fr/Events/onLoad.md index c9fe3362c0522f..0a803c759a9503 100644 --- a/website/translated_docs/fr/Events/onLoad.md +++ b/website/translated_docs/fr/Events/onLoad.md @@ -3,7 +3,7 @@ id: onLoad title: On Load --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------- | | 1 | [4D View Pro Area](FormObjects/viewProArea_overview.md) - [4D Write Pro area](FormObjects/writeProArea_overview) - [Button](FormObjects/button_overview.md) - [Button Grid](FormObjects/buttonGrid_overview.md) - [Check Box](FormObjects/checkbox_overview.md) - [Combo Box](FormObjects/comboBox_overview.md) - [Dropdown list](FormObjects/dropdownList_Overview.md) - Form - [Hierarchical List](FormObjects/list_overview.md#overview) - [Input](FormObjects/input_overview.md) - [List Box](FormObjects/listbox_overview.md) - [List Box Column](FormObjects/listbox_overview.md#list-box-columns) - [Picture Button](FormObjects/pictureButton_overview.md) - [Picture Pop up menu](FormObjects/picturePopupMenu_overview.md) - [Plug-in Area](FormObjects/pluginArea_overview.md#overview) - [Progress Indicators](FormObjects/progressIndicator.md) - [Radio Button](FormObjects/radio_overview.md) - [Ruler](FormObjects/ruler.md) - [Spinner](FormObjects/spinner.md) - [Splitter](FormObjects/splitters.md) - [Stepper](FormObjects/stepper.md) - [Subform](FormObjects/subform_overview.md) - [Tab control](FormObjects/tabControl.md) - [Web Area](FormObjects/webArea_overview.md) | The form is about to be displayed or printed | @@ -17,11 +17,11 @@ All the objects of the form (from any page) whose `On Load` object event propert > The `On Load` and [`On Unload`](onUnload.md) events are generated for objects if they are enabled for both the objects and the form to which the objects belong. If the events are enabled for objects only, they will not occur; these two events must also be enabled at the form level. -### Sous-formulaire +### Subform The `On Load` event is generated when opening the subform (this event must also have been activated at the parent form level in order to be taken into account). The event is generated before those of the parent form. Also note that, in accordance with the operating principles of form events, if the subform is placed on a page other than page 0 or 1, this event will only be generated when that page is displayed (and not when the form is displayed). -### Voir également +### See also [`On Unload`](onUnload.md) \ No newline at end of file From cdcaa2a0579c58362ea489ac392481df6a52aca5 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:20:05 +0100 Subject: [PATCH 103/260] New translations onLoadRecord.md (French) --- website/translated_docs/fr/Events/onLoadRecord.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/translated_docs/fr/Events/onLoadRecord.md b/website/translated_docs/fr/Events/onLoadRecord.md index d3ecfc68df0f86..4adf64d7543572 100644 --- a/website/translated_docs/fr/Events/onLoadRecord.md +++ b/website/translated_docs/fr/Events/onLoadRecord.md @@ -3,9 +3,9 @@ id: onLoadRecord title: Sur chargement ligne --- -| Code | Peut être appelé par | Définition | -| ---- | -------------------- | ------------------------------------------------------------------- | -| 40 | Formulaire | During user entry in list, a record is loaded and a field is edited | +| Code | Can be called by | Definition | +| ---- | ---------------- | ------------------------------------------------------------------- | +| 40 | Form | During user entry in list, a record is loaded and a field is edited | ## Description From 4eb022a70816b758ff498e10c191b60b7e96e957 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:20:07 +0100 Subject: [PATCH 104/260] New translations onLongClick.md (French) --- .../translated_docs/fr/Events/onLongClick.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/website/translated_docs/fr/Events/onLongClick.md b/website/translated_docs/fr/Events/onLongClick.md index 24fa5a4818db50..46063597b2a71d 100644 --- a/website/translated_docs/fr/Events/onLongClick.md +++ b/website/translated_docs/fr/Events/onLongClick.md @@ -3,9 +3,9 @@ id: onLongClick title: Sur clic long --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ---------------------------------------- | ------------------------------------------------------------------------------------ | -| 39 | [Bouton](FormObjects/button_overview.md) | A button is clicked and the mouse button remains pushed for a certain length of time | +| 39 | [Button](FormObjects/button_overview.md) | A button is clicked and the mouse button remains pushed for a certain length of time | ## Description @@ -14,17 +14,17 @@ This event is generated when a button receives a click and the mouse button is h This event can be generated for the following button styles: -- [Barre d’outils](FormObjects/button_overview.md#toolbar) +- [Toolbar](FormObjects/button_overview.md#toolbar) - [Bevel](FormObjects/button_overview.md#bevel) -- [Bevel arrondi](FormObjects/button_overview.md#rounded-bevel) +- [Rounded Bevel](FormObjects/button_overview.md#rounded-bevel) - [OS X Gradient](FormObjects/button_overview.md#os-x-gradient) -- [OS X Texture](FormObjects/button_overview.md#os-x-textured) +- [OS X Textured](FormObjects/button_overview.md#os-x-textured) - [Office XP](FormObjects/button_overview.md#office-xp) -- [Aide](FormObjects/button_overview.md#help) -- [Rond](FormObjects/button_overview.md#circle) -- [Personnalisé](FormObjects/button_overview.md#custom) +- [Help](FormObjects/button_overview.md#help) +- [Circle](FormObjects/button_overview.md#circle) +- [Custom](FormObjects/button_overview.md#custom) This event is generally used to display pop-up menus in case of long button clicks. The [`On Clicked`](onClicked.md) event, if enabled, is generated if the user releases the mouse button before the "long click" time limit. -### Voir également +### See also [`Sur clic alternatif`](onAlternativeClick.md) \ No newline at end of file From cbd6d7da252940242b849474649515f5dc91c1d5 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:20:09 +0100 Subject: [PATCH 105/260] New translations onLosingFocus.md (French) --- website/translated_docs/fr/Events/onLosingFocus.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/fr/Events/onLosingFocus.md b/website/translated_docs/fr/Events/onLosingFocus.md index 9d94b10ab7f84d..6c220efb0a9bd1 100644 --- a/website/translated_docs/fr/Events/onLosingFocus.md +++ b/website/translated_docs/fr/Events/onLosingFocus.md @@ -3,7 +3,7 @@ id: onLosingFocus title: Sur perte focus --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------- | | 14 | [4D View Pro Area](FormObjects/viewProArea_overview.md) - [4D Write Pro area](FormObjects/writeProArea_overview) - [Button](FormObjects/button_overview.md) - [Check Box](FormObjects/checkbox_overview.md) - [Combo Box](FormObjects/comboBox_overview.md) - Form - [Hierarchical List](FormObjects/list_overview.md#overview) - [Input](FormObjects/input_overview.md) - [List Box](FormObjects/listbox_overview.md) - [List Box Column](FormObjects/listbox_overview.md#list-box-columns) - [Plug-in Area](FormObjects/pluginArea_overview.md#overview) - [Progress Indicators](FormObjects/progressIndicator.md) - [Radio Button](FormObjects/radio_overview.md) - [Ruler](FormObjects/ruler.md) - [Spinner](FormObjects/spinner.md) - [Stepper](FormObjects/stepper.md) - [Subform](FormObjects/subform_overview.md) - [Web area](FormObjects/webArea_overview.md) | A form object is losing the focus | From 38bd2953489432f8700464e6e9dbc3c4ce4e3142 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:20:11 +0100 Subject: [PATCH 106/260] New translations onMenuSelected.md (French) --- website/translated_docs/fr/Events/onMenuSelected.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/translated_docs/fr/Events/onMenuSelected.md b/website/translated_docs/fr/Events/onMenuSelected.md index 608e0183031cf5..cdcb510c49b3f0 100644 --- a/website/translated_docs/fr/Events/onMenuSelected.md +++ b/website/translated_docs/fr/Events/onMenuSelected.md @@ -3,9 +3,9 @@ id: onMenuSelected title: Sur menu sélectionné --- -| Code | Peut être appelé par | Définition | -| ---- | -------------------- | ------------------------------------------------------ | -| 18 | Formulaire | A menu item has been chosen in the associated menu bar | +| Code | Can be called by | Definition | +| ---- | ---------------- | ------------------------------------------------------ | +| 18 | Form | A menu item has been chosen in the associated menu bar | ## Description From 647c33a4bacf14f7f35c25725a13d7743a38c797 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:20:13 +0100 Subject: [PATCH 107/260] New translations onAfterSort.md (French) --- website/translated_docs/fr/Events/onAfterSort.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/fr/Events/onAfterSort.md b/website/translated_docs/fr/Events/onAfterSort.md index 42960efc05a02a..d125cb3fe934a5 100644 --- a/website/translated_docs/fr/Events/onAfterSort.md +++ b/website/translated_docs/fr/Events/onAfterSort.md @@ -3,7 +3,7 @@ id: onAfterSort title: Sur après tri --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ----------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | | 30 | [List Box](FormObjects/listbox_overview.md) - [List Box Column](FormObjects/listbox_overview.md#list-box-columns) | A standard sort has just been carried out in a list box column. | From 484301dd8d4da9137bbe3173b3883ec8c0847c55 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:20:16 +0100 Subject: [PATCH 108/260] New translations onAfterEdit.md (French) --- .../translated_docs/fr/Events/onAfterEdit.md | 72 +++++++++---------- 1 file changed, 34 insertions(+), 38 deletions(-) diff --git a/website/translated_docs/fr/Events/onAfterEdit.md b/website/translated_docs/fr/Events/onAfterEdit.md index 8eda378ab28191..955d969bdbff4d 100644 --- a/website/translated_docs/fr/Events/onAfterEdit.md +++ b/website/translated_docs/fr/Events/onAfterEdit.md @@ -3,57 +3,57 @@ id: onAfterEdit title: Sur après modification --- -| Code | Peut être appelé par | Définition | -| ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------ | -| 45 | [Zone 4D View Pro](FormObjects/viewProArea_overview) - [Zone 4D Write Pro](FormObjects/writeProArea_overview) - [Combo Box](FormObjects/comboBox_overview.md) - Formulaire - [Zone de saisie](FormObjects/input_overview.md) - [Liste hiérarchique](FormObjects/list_overview.md) - [List Box](FormObjects/listbox_overview.md) - [Colonne List Box](FormObjects/listbox_overview.md#list-box-columns) | The contents of the enterable object that has the focus has just been modified | +| Code | Can be called by | Definition | +| ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------ | +| 45 | [4D View Pro area](FormObjects/viewProArea_overview) - [4D Write Pro area](FormObjects/writeProArea_overview) - [Combo Box](FormObjects/comboBox_overview.md) - Form - [Input](FormObjects/input_overview.md) - [Hierarchical List](FormObjects/list_overview.md) - [List Box](FormObjects/listbox_overview.md) - [List Box Column](FormObjects/listbox_overview.md#list-box-columns) | The contents of the enterable object that has the focus has just been modified | ## Description -### Cas général +### General case -Cet événement peut être utilisé pour filtrer la saisie de données dans les objets saisissables au clavier au niveau le plus bas. +This event can be used filter the data entry in keyboard enterable objects at the lowest level. When it is used, this event is generated after each change made to the contents of an enterable object, regardless of the action that caused the change, *i.e.*: -- Actions d'édition standard qui modifient le contenu comme les actions coller, couper, supprimer ou annuler; -- Déposer une valeur (action similaire à coller); -- Toute entrée au clavier effectuée par l'utilisateur; dans ce cas, l'événement `On After Edit` est généré après les événements [`On Before Keystroke`](onBeforeKeystroke.md) et [`On After Keystroke`](onAfterKeystroke.md), s'ils sont utilisés. -- Toute modification apportée à l'aide d'une commande de langage qui simule une action de l'utilisateur (c'est-à-dire `POST KEY`). +- Standard editing actions which modify content like paste, cut, delete or cancel; +- Dropping a value (action similar to paste); +- Any keyboard entry made by the user; in this case, the `On After Edit` event is generated after the [`On Before Keystroke`](onBeforeKeystroke.md) and [`On After Keystroke`](onAfterKeystroke.md) events, if they are used. +- Any modification made using a language command that simulates a user action (i.e., `POST KEY`). ### 4D View Pro The object returned by the `FORM Event` command contains: -| Propriété | Type | Description | -| ----------- | ----------- | --------------------------------------------------------------------------------------------------- | -| code | entier long | Sur après modification | -| description | Texte | "On After Edit" | -| objectName | Texte | 4D View Pro area name | -| sheetName | Texte | Name of the sheet of the event | -| action | Texte | "editChange", "valueChanged", "DragDropBlock", "DragFillBlock", "formulaChanged", "clipboardPasted" | +| Property | Type | Description | +| ----------- | ------- | --------------------------------------------------------------------------------------------------- | +| code | longint | Sur après modification | +| description | text | "On After Edit" | +| objectName | text | 4D View Pro area name | +| sheetName | text | Name of the sheet of the event | +| action | text | "editChange", "valueChanged", "DragDropBlock", "DragFillBlock", "formulaChanged", "clipboardPasted" | Depending on the `action` property value, the [event object](overview.md#event-object) will contain additional properties. #### action = editChange -| Propriété | Type | Description | +| Property | Type | Description | | ----------- | ------- | --------------------------------- | | range | object | Cell range | | editingText | variant | The value from the current editor | #### action = valueChanged -| Propriété | Type | Description | -| --------- | ------- | --------------------------- | -| range | object | Cell range | -| oldValue | variant | Value of cell before change | -| newValue | variant | Value of cell after change | +| Property | Type | Description | +| -------- | ------- | --------------------------- | +| range | object | Cell range | +| oldValue | variant | Value of cell before change | +| newValue | variant | Value of cell after change | #### action = DragDropBlock -| Propriété | Type | Description | +| Property | Type | Description | | --------- | ------- | --------------------------------------------------- | | fromRange | object | Range of source cell range (being dragged) | | toRange | object | Range of the destination cell range (drop location) | @@ -63,7 +63,7 @@ Depending on the `action` property value, the [event object](overview.md#event-o #### action = DragFillBlock -| Propriété | Type | Description | +| Property | Type | Description | | --------- | ------ | ------------------- | | fillRange | object | Range used for fill | autoFillType|longint|Value used for the fill.
  • 0: Cells are filled with all data (values, formatting, and formulas)
  • 1: Cells are filled with automatically sequential data
  • 2: Cells are filled with formatting only
  • 3: Cells are filled with values but not formatting
  • 4: Values are removed from the cells
  • 5: Cells are filled automatically| |fillDirection|longint|Direction of the fill.
  • 0: The cells to the left are filled
  • 1: The cells to the right are filled
  • 2: The cells above are filled
  • 3: The cells below are filled| @@ -71,21 +71,21 @@ Depending on the `action` property value, the [event object](overview.md#event-o #### action = formulaChanged -| Propriété | Type | Description | -| --------- | ------ | ------------------- | -| range | object | Cell range | -| formula | Texte | The formula entered | +| Property | Type | Description | +| -------- | ------ | ------------------- | +| range | object | Cell range | +| formula | text | The formula entered | #### action = clipboardPasted -| Propriété | Type | Description | -| ----------- | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| range | object | Cell range | -| pasteOption | entier long | Specifies what is pasted from the clipboard:
  • 0: Everything is pasted (values, formatting, and formulas)
  • 1: Only values are pasted
  • 2: Only the formatting is pasted
  • 3: Only formulas are pasted
  • 4: Values and formatting are pasted (not formulas)
  • 5: Formulas and formatting are pasted (not values) | -| pasteData | object | The data from the clipboard to be pasted
  • "text" (text): The text from the clipboard
  • "html" (text): The HTML from the clipboard | +| Property | Type | Description | +| ----------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| range | object | Cell range | +| pasteOption | longint | Specifies what is pasted from the clipboard:
  • 0: Everything is pasted (values, formatting, and formulas)
  • 1: Only values are pasted
  • 2: Only the formatting is pasted
  • 3: Only formulas are pasted
  • 4: Values and formatting are pasted (not formulas)
  • 5: Formulas and formatting are pasted (not values) | +| pasteData | object | The data from the clipboard to be pasted
  • "text" (text): The text from the clipboard
  • "html" (text): The HTML from the clipboard | -#### Exemple +#### Example Here is an example handling an `On After Edit` event: @@ -96,10 +96,6 @@ Here is an example handling an `On After Edit` event: from "+String(FORM Event.oldValue)+\ " to "+String(FORM Event.newValue)+"!") End if - End if - End if - End if - End if End if ``` From 4efbbb1198a2606b5d644b9d2e471edeb14a3c08 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:20:17 +0100 Subject: [PATCH 109/260] New translations onMouseLeave.md (French) --- website/translated_docs/fr/Events/onMouseLeave.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/translated_docs/fr/Events/onMouseLeave.md b/website/translated_docs/fr/Events/onMouseLeave.md index da9471aae28032..0e9c67c23752be 100644 --- a/website/translated_docs/fr/Events/onMouseLeave.md +++ b/website/translated_docs/fr/Events/onMouseLeave.md @@ -3,7 +3,7 @@ id: onMouseLeave title: Sur fin survol --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------- | | 36 | [4D Write Pro area](FormObjects/writeProArea_overview) - [Button](FormObjects/button_overview.md) - [Button Grid](FormObjects/buttonGrid_overview.md) - [Check Box](FormObjects/checkbox_overview.md) - [Combo Box](FormObjects/comboBox_overview.md) - [Dropdown list](FormObjects/dropdownList_Overview.md) - Form - [Hierarchical List](FormObjects/list_overview.md#overview) - [Input](FormObjects/input_overview.md) - [List Box](FormObjects/listbox_overview.md) - [Picture Button](FormObjects/pictureButton_overview.md) - [Picture Pop up menu](FormObjects/picturePopupMenu_overview.md) - [Plug-in Area](FormObjects/pluginArea_overview.md#overview) - [Progress Indicators](FormObjects/progressIndicator.md) - [Radio Button](FormObjects/radio_overview.md) - [Ruler](FormObjects/ruler.md) - [Spinner](FormObjects/spinner.md) - [Splitter](FormObjects/splitters.md) - [Stepper](FormObjects/stepper.md) - [Tab control](FormObjects/tabControl.md) | The mouse cursor leaves the graphic area of an object | @@ -21,7 +21,7 @@ Objects that are made invisible using the `OBJECT SET VISIBLE` command or the [V If the `On Mouse Leave` event has been checked for the form, it is generated for each form object. If it is checked for an object, it is generated only for that object. When there are superimposed objects, the event is generated by the first object capable of managing it that is found going in order from top level to bottom. -### Voir également +### See also - [`Sur survol`](onMouseMove.md) - [`Sur fin survol`](onMouseLeave.md) \ No newline at end of file From c53f457037762634dde39f5e7fd49517d0b8db08 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:20:20 +0100 Subject: [PATCH 110/260] New translations dt_null_undefined.md (French) --- .../fr/Concepts/dt_null_undefined.md | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/website/translated_docs/fr/Concepts/dt_null_undefined.md b/website/translated_docs/fr/Concepts/dt_null_undefined.md index 17f35329371edf..7d309c32bb55d4 100644 --- a/website/translated_docs/fr/Concepts/dt_null_undefined.md +++ b/website/translated_docs/fr/Concepts/dt_null_undefined.md @@ -5,21 +5,21 @@ title: Null et Indefinie ## Null -Null est un type de données particulier avec une seule valeur possible : **null**. Cette valeur est retournée par une expression qui ne contient aucune valeur. +Null is a special data type with only one possible value: **null**. This value is returned by an expression that does not contain any value. -Dans le langage de 4D et pour les attributs des champs objets, les valeurs null sont gérées via la commande `Null`. Cette commande peut être utilisée avec les expressions suivantes pour fixer ou comparer la valeur null : +In the 4D language and for object field attributes, null values are managed through the `Null` function. This function can be used with the following expressions for setting or comparing the null value: -- attributs d'objets -- éléments de collections -- variables de type objet, collection, pointeur, image ou variant. +- object attributes +- collection elements +- variables of the object, collection, pointer, picture, or variant type. -## Indéfini +## Undefined -Indéfinie n'est pas véritablement un type de données. Une variable dite "indéfinie" est une variable n'ayant pas encore été définie. Une fonction utilisateur (c'est-à-dire une méthode projet qui retourne une valeur) peut retourner une valeur indéfinie si, à l'intérieur de la méthode, le résultat de la fonction ($0) est assigné à une expression indéfinie (une expression issue d'un calcul effectué avec au moins une variable indéfinie). Un champ ne peut pas être indéfini (la commande `Indefinie` retourne toujours Faux pour un champ). Une variable variant porte la valeur par défaut **indéfini**. +Undefined is not actually a data type. It denotes a variable that has not yet been defined. A function (a project method that returns a result) can return an undefined value if, within the method, the function result ($0) is assigned an undefined expression (an expression calculated with at least one undefined variable). A field cannot be undefined (the `Undefined` command always returns False for a field). A variant variable has **undefined** as default value. -## Exemples +## Examples -Cet exemple compare les différents résultats de la commande `Indefinie` et de la commande `Null` appliquées aux propriétés d'objets, en fonction du contexte : +Here are the different results of the `Undefined` command as well as the `Null` command with object properties, depending on the context: ```4d C_OBJECT($vEmp) @@ -27,12 +27,12 @@ $vEmp:=New object $vEmp.name:="Smith" $vEmp.children:=Null -$undefined:=Undefined($vEmp.name) // Faux -$null:=($vEmp.name=Null) //Faux +$undefined:=Undefined($vEmp.name) // False +$null:=($vEmp.name=Null) //False -$undefined:=Undefined($vEmp.children) // Faux -$null:=($vEmp.children=Null) //Vrai +$undefined:=Undefined($vEmp.children) // False +$null:=($vEmp.children=Null) //True -$undefined:=Undefined($vEmp.parent) // Vrai -$null:=($vEmp.parent=Null) //Vrai +$undefined:=Undefined($vEmp.parent) // True +$null:=($vEmp.parent=Null) //True ``` From 524dcf8ae9132866f669b195cb6887315327e94c Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:20:22 +0100 Subject: [PATCH 111/260] New translations restore.md (French) --- website/translated_docs/fr/Backup/restore.md | 26 ++++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/website/translated_docs/fr/Backup/restore.md b/website/translated_docs/fr/Backup/restore.md index a3a0c6b59f8891..514e7ad8038938 100644 --- a/website/translated_docs/fr/Backup/restore.md +++ b/website/translated_docs/fr/Backup/restore.md @@ -3,28 +3,28 @@ id: restore title: Restitution --- -4D vous permet de récupérer l’intégralité des données d’une application en cas d’incident, quelles que soient ses causes. Deux catégories principales d’incidents peuvent se produire : +4D allows you to restore entire sets of application data in case of any incidents, regardless of the cause of the incident. Deux catégories principales d’incidents peuvent se produire : -- L’arrêt inopiné de l'application pendant son exploitation. Cet incident peut se produire à cause d’une coupure de courant, la panne d’un élément du système, etc. Dans ce cas, en fonction de l’état courant du cache de données au moment de l’incident, la récupération de l'application peut nécessiter différentes opérations : - - Si le cache était vide, l'application s’ouvre normalement. Toutes les modifications apportées à l'application ont été enregistrées. Ce cas ne nécessite aucune opération particulière. +- The unexpected stoppage of an application while in use. Cet incident peut se produire à cause d’une coupure de courant, la panne d’un élément du système, etc. In this case, depending on the current state of the data cache at the moment of the incident, the restore of the application can require different operations: + - If the cache was empty, the application opens normally. Any changes made in the application were recorded. Ce cas ne nécessite aucune opération particulière. - Si le cache contenait des opérations, le fichier de données est intact mais il est nécessaire d’intégrer le fichier d’historique courant. - Si le cache était en cours d’écriture, le fichier de données est probablement endommagé. Il est nécessaire de restituer la dernière sauvegarde et d’intégrer le fichier d’historique courant. -- La perte de fichier(s) de l'application. Cet incident peut être causé par des secteurs défectueux sur le disque contenant l'application, un virus, une erreur de manipulation, etc. Il est nécessaire de restituer la dernière sauvegarde puis d’intégrer éventuellement l’historique courant. Pour savoir si une application a été endommagée à la suite d’un incident, il suffit de la relancer avec 4D. Le programme effectue un auto-diagnostic et précise les opérations de réparation à effectuer. En mode automatique, ces opérations sont effectuées directement, sans intervention de l’utilisateur. Si une stratégie de sauvegarde régulière a été mise en place, les outils de récupération de 4D vous permettront (dans la plupart des cas) de retrouver l'application dans l’état exact où elle se trouvait avant l’incident. +- The loss of application file(s). This incident can occur because of defective sectors on the disk containing the application, a virus, manipulation error, etc. Il est nécessaire de restituer la dernière sauvegarde puis d’intégrer éventuellement l’historique courant. To find out if an application was damaged following an incident, simply relaunch the application using 4D. Le programme effectue un auto-diagnostic et précise les opérations de réparation à effectuer. En mode automatique, ces opérations sont effectuées directement, sans intervention de l’utilisateur. If a regular backup strategy was put into place, the 4D restore tools will allow you to recover (in most cases) the application in the exact state it was in before the incident. -> 4D peut lancer automatiquement des procédures de récupération des applications après incident. Ces mécanismes sont gérés à l’aide de deux options accessibles dans la Page **Sauvegarde/Sauvegarde & et Restitution** de la fenêtre des Propriétés. Pour plus d'informations, reportez-vous au paragraphe [Restitution automatique](settings.md#automatic-restore) -> . Si l'incident résulte d'une opération inappropriée sur effectuée sur les données (suppression d'un enregistrement par exemple), vous pouvez tenter de réparer le fichier de données en utilisant la fonction de "retour arrière" dans le fichier d'historique. Cette fonction est accessible dans la Page [Retour arrière](MSC/rollback.md) du CSM. +> 4D can launch procedures automatically to recover applications following incidents. These mechanisms are managed using two options available on the **Backup/Backup & Restore** page of the Settings. For more information, refer to the [Automatic Restore](settings.md#automatic-restore) paragraph. +> If the incident is the result of an inappropriate operation performed on the data (deletion of a record, for example), you can attempt to repair the data file using the "rollback" function in the log file. Cette fonction est accessible dans la Page [Retour arrière](MSC/rollback.md) du CSM. ## Restitution manuelle d’une sauvegarde (dialogue standard) Vous pouvez restituer manuellement le contenu d’une archive générée par le module de sauvegarde. Une restitution manuelle peut être nécessaire par exemple pour restituer la totalité du contenu d’une archive (fichiers de structure et/ou fichiers joints inclus) ou à des fins de recherche sur des archives. La restitution manuelle peut éventuellement s’accompagner de l’intégration de l’historique courant. -La restitution manuelle des sauvegardes peut être réalisée soit via une boîte de dialogue standard d’ouverture de document, soit via la page [“Restitution”](MSC/restore) du Centre de sécurité et de maintenance (CSM). La restitution via une boîte de dialogue standard permet de restituer n’importe quelle archive. En revanche, seules les archives associées à l'application ouverte peuvent être restituées. +La restitution manuelle des sauvegardes peut être réalisée soit via une boîte de dialogue standard d’ouverture de document, soit via la page [“Restitution”](MSC/restore) du Centre de sécurité et de maintenance (CSM). La restitution via une boîte de dialogue standard permet de restituer n’importe quelle archive. On the other hand, only archives associated with the open application can be restored. -Pour restituer manuellement une application via une boîte de dialogue standard : +To restore an application manually via a standard dialog box: -1. Lancez l’application 4D et choisissez la commande **Restituer...** dans le menu **Fichier**. Il n'est pas obligatoire qu'un projet d'application soit ouvert. OU BIEN Exécutez la commande `RESTORE` depuis une méthode de 4D. Une boîte de dialogue standard d’ouverture de fichiers apparaît. +1. Lancez l’application 4D et choisissez la commande **Restituer...** dans le menu **Fichier**. It is not mandatory that an application project be open. OR Execute the `RESTORE` command from a 4D method. Une boîte de dialogue standard d’ouverture de fichiers apparaît. 2. Désignez le fichier de sauvegarde (.4bk) ou le fichier de sauvegarde de l’historique (.4bl) à restituer et cliquez sur **Ouvrir**. Un boîte de dialogue apparaît, vous permettant de désigner l’emplacement auquel vous souhaitez que les fichiers soient restitués . Par défaut, 4D restitue les fichiers dans un dossier nommé *“Nomarchive”* (sans extension) placé à côté de l’archive. Vous pouvez afficher le chemin : ![](assets/en/Backup/backup07.png) @@ -32,22 +32,22 @@ Pour restituer manuellement une application via une boîte de dialogue standard Vous pouvez également cliquer sur le bouton **[...]** et indiquer un autre emplacement. 3. Cliquez sur le bouton **Restituer**. 4D extrait tous les fichiers de la sauvegarde à l’emplacement défini. Si le fichier d’historique courant ou un fichier de sauvegarde d’historique ayant le même numéro que le fichier de sauvegarde est stocké dans le même dossier, 4D examine son contenu. S’il contient des opérations non présentes dans le fichier de données, le programme propose de l’intégrer. L’intégration est effectuée automatiquement si l’option **d’intégration automatique de l’historique** est cochée (cf. paragraphe [Restitution automatique](settings.md#automatic-restore)). -(Facultatif) Cliquez sur **OK** pour intégrer le fichier d’historique dans l'application restituée. Si la restitution et l’intégration se sont déroulées correctement, 4D affiche une boîte de dialogue indiquant que l’opération a réussi. +4.(Optional) Click **OK** to integrate the log file into the restored application. Si la restitution et l’intégration se sont déroulées correctement, 4D affiche une boîte de dialogue indiquant que l’opération a réussi. 5. Cliquez sur **OK**. Le dossier d’arrivée est affiché. Lors de la restitution, 4D place tous les fichiers sauvegardés dans ce dossier, quelle que soit la position des fichiers originaux sur le disque au moment de la sauvegarde. De cette façon, vous retrouverez plus facilement vos fichiers. -> Tout contenu lié au fichier de données (dossier files et `Settings`) est automatiquement restauré dans un sous-dossier `Data`du dossier de destination. +> Any content related to the data file (files and `Settings` folder) are automatically restored in a `Data` subfolder within the destination folder. ## Restitution manuelle d’une sauvegarde (CSM) -La [page Restitution](MSC/restore.md) du Centre de sécurité et de maintenance (CSM) vous permet de restituer manuellement une archive de l'application courante. +You can manually restore an archive of the current application using the [Restore page](MSC/restore.md) of the Maintenance and Security Center (MSC). ## Intégration manuelle de l’historique -Si vous n’avez pas coché l’option d’intégration automatique du fichier d’historique dans la page Restitution du CSM (cf. [Intégration successive de plusieurs fichiers d’historiques](MSC/restore.md#successive-intergration-of-several-data-log-files)), une boîte de dialogue d’alerte apparaît à l’ouverture de l'application lorsque 4D constate que le fichier d’historique contient plus d’opérations qu’il n’en a été effectué dans le fichier de données. +If you have not checked the option for the automatic integration of the log file on the Restore page of the MSC (see [Successive integration of several log files](MSC/restore.md#successive-intergration-of-several-data-log-files)), a warning dialog box appears during the opening of the application when 4D notices that the log file contains more operations than have been carried out in the data file. ![](assets/en/Backup/backup08.png) From 295fb0a8b8fb3199f8ffbcb3c33629dafcaa52ef Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:20:24 +0100 Subject: [PATCH 112/260] New translations properties_Picture.md (French) --- .../fr/FormObjects/properties_Picture.md | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/properties_Picture.md b/website/translated_docs/fr/FormObjects/properties_Picture.md index c4e0ad8ff16210..e985c41074808a 100644 --- a/website/translated_docs/fr/FormObjects/properties_Picture.md +++ b/website/translated_docs/fr/FormObjects/properties_Picture.md @@ -4,30 +4,30 @@ title: Image --- --- -## Chemin d'accès +## Pathname -Chemin d'une image source statique pour un [bouton image](pictureButton_overview.md), [un menu pop-up ](picturePopupMenu_overview.md) ou une [image ou une image statique](staticPicture.md). Vous devez utiliser la syntaxe POSIX. +Pathname of a static source picture for a [picture button](pictureButton_overview.md), [picture pop-up Menu](picturePopupMenu_overview.md), or [static picture](staticPicture.md). You must use the POSIX syntax. -Deux emplacements principaux peuvent être utilisés pour le chemin d'image statique : +Two main locations can be used for static picture path: -- in the **Resources** folder of the project. Appropriate when you want to share static pictures between several forms in the project. Dans ce cas, le chemin d'accès se trouve dans "/RESOURCES/\". -- dans un dossier d'images (nommé **Images** par exemple) dans le dossier du formulaire. Convient lorsque les images statiques sont utilisées uniquement dans le formulaire et/ou lorsque vous souhaitez pouvoir déplacer ou dupliquer le formulaire entier dans un ou plusieurs projets. Dans ce cas, le chemin d'accès est "\" et est déterminé à la racine du dossier du formulaire. +- in the **Resources** folder of the project. Appropriate when you want to share static pictures between several forms in the project. In this case, the Pathname is "/RESOURCES/\". +- in an image folder (e.g. named **Images**) within the form folder. Appropriate when the static pictures are used only in the form and/or you want to be able to move or duplicate the whole form within the project or different projects. In this case, the Pathname is "\" and is resolved from the root of the form folder. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -|:-------:|:---------------:| --------------------------------------------- | -| picture | Texte | Chemin relatif ou filesystem en syntaxe POSIX | +| Name | Data Type | Possible Values | +|:-------:|:---------:| ------------------------------------------- | +| picture | text | Relative or filesystem path in POSIX syntax | -#### Objets pris en charge +#### Objects Supported -[Bouton image](pictureButton_overview.md) - [Pop-up Menu image](picturePopupMenu_overview.md) - [Image statique](staticPicture.md) +[Picture button](pictureButton_overview.md) - [Picture Pop-up Menu](picturePopupMenu_overview.md) - [Static Picture](staticPicture.md) --- -## Affichage +## Display ### Scaled to fit @@ -50,11 +50,11 @@ If the field is reduced to a size smaller than that of the original picture, the -### Centre / Tronquée (non centrée) +### Center / Truncated (non-centered) `JSON grammar: "truncatedCenter" / "truncatedTopLeft"` -Le format **Centre** permet à 4D de centrer l'image dans la zone et de rogner toute partie qui ne rentre pas dans la zone. 4D crops equally from each edge and from the top and bottom. +The **Center** format causes 4D to center the picture in the area and crop any portion that does not fit within the area. 4D crops equally from each edge and from the top and bottom. The **Truncated (non-centered)** format causes 4D to place the upper-left corner of the picture in the upper-left corner of the area and crop any portion that does not fit within the area. 4D crops from the right and bottom. > When the picture format is **Truncated (non-centered)**, it is possible to add scroll bars to the input area. @@ -62,12 +62,12 @@ The **Truncated (non-centered)** format causes 4D to place the upper-left corner ![](assets/en/FormObjects/property_pictureFormat_Truncated.png) -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------------- | --------------- | -------------------------------------------------------- | -| pictureFormat | string | "scaled", "tiled", "truncatedCenter", "truncatedTopLeft" | +| Name | Data Type | Possible Values | +| ------------- | --------- | -------------------------------------------------------- | +| pictureFormat | string | "scaled", "tiled", "truncatedCenter", "truncatedTopLeft" | -#### Objets pris en charge +#### Objects Supported -[Image statique](staticPicture.md) \ No newline at end of file +[Static Picture](staticPicture.md) \ No newline at end of file From eabb8fece09780611caca36ffd1cff29b2a551e9 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:20:26 +0100 Subject: [PATCH 113/260] New translations settings.md (French) --- website/translated_docs/fr/Backup/settings.md | 52 +++++++++---------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/website/translated_docs/fr/Backup/settings.md b/website/translated_docs/fr/Backup/settings.md index e3b84c8c35d39c..57361efe1abf01 100644 --- a/website/translated_docs/fr/Backup/settings.md +++ b/website/translated_docs/fr/Backup/settings.md @@ -3,7 +3,7 @@ id: settings title: Paramètres de sauvegarde --- -Les paramètres de sauvegarde sont définis sur trois pages dans la boîte de dialogue des Propriétés. Vous pouvez définir : +Backup settings are defined through three pages in the Settings dialog box. Vous pouvez définir : - la périodicité des sauvegardes automatiques - les fichiers à inclure dans chaque sauvegarde @@ -13,15 +13,15 @@ Les paramètres de sauvegarde sont définis sur trois pages dans la boîte de di ## Sauvegardes périodiques -Vous pouvez automatiser les sauvegardes de vos applications ouvertes avec 4D ou 4D Server (même lorsqu’aucun poste distant n’est connecté). Le principe consiste à définir une fréquence de sauvegarde (en heures, jours, semaines ou mois) ; à chaque échéance, 4D déclenche automatiquement une sauvegarde en tenant compte des paramètres de sauvegarde courants. +You can automate the backup of applications opened with 4D or 4D Server (even when no client machines are connected). Le principe consiste à définir une fréquence de sauvegarde (en heures, jours, semaines ou mois) ; à chaque échéance, 4D déclenche automatiquement une sauvegarde en tenant compte des paramètres de sauvegarde courants. -Si l’application n’était pas lancée au moment théorique de la sauvegarde, 4D considère au lancement suivant que la sauvegarde a échoué et applique les paramétrages adéquats, définis dans les Propriétés (cf. paragraphe [En cas de problème au cours de la sauvegarde](backup.md#handling-backup-issues)). +If this application was not launched at the theoretical moment of the backup, the next time 4D is launched, it considers the backup as having failed and proceeds as set in the Settings (refer to [Handling backup issues](backup.md#handling-backup-issues)). -Les paramètres des sauvegardes périodiques sont définis dans la Page **Sauvegarde/Périodicité** des Propriétés : +The scheduler backup settings are defined on the **Backup/Scheduler** page of the Structure Settings: ![](assets/en/Backup/backup02.png) -Les options regroupées dans cet onglet permettent de définir et de paramétrer des sauvegardes périodiques automatiques de l'application. Vous pouvez choisir un paramétrage standard rapide ou personnaliser entièrement la périodicité. Diverses options apparaissent en fonction de la valeur définie dans le menu **Sauvegarde automatique** : +The options found on this tab let you set and configure scheduled automatic backups of the application. Vous pouvez choisir un paramétrage standard rapide ou personnaliser entièrement la périodicité. Diverses options apparaissent en fonction de la valeur définie dans le menu **Sauvegarde automatique** : - **Jamais** : la fonction de sauvegarde périodique est inactivée. - **Toutes les heures** : programme une sauvegarde automatique par heure, à partir de la prochaine heure. @@ -36,7 +36,7 @@ Les options regroupées dans cet onglet permettent de définir et de paramétrer ## Configuration -La Page Sauvegarde/Configuration des Propriétés permet de désigner les fichiers à sauvegarder, l’emplacement des fichiers de sauvegarde et le fichier d’historique. Ces paramères sont spécifiques à chaque application ouverte par 4D ou 4D Server. +The Backup/Configuration page of the Structure Settings lets you set the backup files and their location, as well as that of the log file. These parameters are specific to each application opened by 4D or 4D Server. ![](assets/en/Backup/backup03.png) @@ -45,14 +45,14 @@ La Page Sauvegarde/Configuration des Propriétés permet de désigner les fichie ### Contenu Cette zone permet de désigner les fichiers et/ou dossiers à copier lors de la prochaine sauvegarde. -- **Data** : fichier de données de l'application. Lorsque cette option est cochée, les éléments suivants sont automatiquement sauvegardés en même temps que les données : - - le fichier journal courant de l'application (le cas échéant), - - le dossier `Settings` complet situé [à côté du fichier de données](Project/architecture.md#settings-folder) (le cas échéant), c'est-à-dire *les paramètres utilisateur pour les données*. -- **Structure** : fichiers et dossiers du projet d'application. Dans le cas de projets compilés, cette option permet de sauvegarder le fichier .4dz. Lorsque cette option est cochée, le dossier complet `Settings` situé [au même niveau que le dossier Project](Project/architecture.md#settings-folder-1), c'est-à-dire les *paramètres utilisateur*, est automatiquement sauvegardé. +- **Data**: Application data file. When this option is checked, the following elements are automatically backed up at the same time as the data: + - the current log file of the application (if it exists), + - the full `Settings` folder located [next to the data file](Project/architecture.md#settings-folder) (if it exists), i.e. the *user settings for data*. +- **Structure**: Application project folders and files. In cases where projects are compiled, this option allows you to backup the .4dz file. When this option is checked, the full `Settings` folder located [at the same level as the Project folder](Project/architecture.md#settings-folder-1), i.e. the *user settings*, is automatically backed up. - **Fichier de structure utilisateur (uniquement pour les bases binaires)** : *fonctionnalité obsolète*f -- **Attachments** : cette zone permet de désigner un ensemble de fichiers et/ou de dossiers à sauvegarder en même temps que l'application. Ces fichiers peuvent être de tout type (documents ou modèles de plug-ins, étiquettes, états, images, etc.). Vous pouvez désigner soit des fichiers individuels, soit des dossiers dont le contenu sera intégralement sauvegardé. Chaque élément joint est listé avec son chemin d’accès complet dans la zone “Fichiers joints”. +- **Attachments**: This area allows you to specify a set of files and/or folders to be backed up at the same time as the application. Ces fichiers peuvent être de tout type (documents ou modèles de plug-ins, étiquettes, états, images, etc.). Vous pouvez désigner soit des fichiers individuels, soit des dossiers dont le contenu sera intégralement sauvegardé. Chaque élément joint est listé avec son chemin d’accès complet dans la zone “Fichiers joints”. - **Supprimer** : retire de la liste des fichiers joints l’élément sélectionné. - - **Ajouter dossier...** : affiche une boîte de dialogue permettant de sélectionner un dossier à joindre à la sauvegarde. En cas de restitution, le dossier sera récupéré avec sa structure interne. Vous pouvez désigner tout dossier ou volume connecté au poste, à l’exception du dossier contenant les fichiers de l'application. + - **Ajouter dossier...** : affiche une boîte de dialogue permettant de sélectionner un dossier à joindre à la sauvegarde. En cas de restitution, le dossier sera récupéré avec sa structure interne. You can select any folder or volume connected to the machine, with the exception of the folder containing the application files. - **Ajouter fichier...** : affiche une boîte de dialogue permettant de sélectionner un fichier à joindre à la sauvegarde. @@ -66,11 +66,11 @@ Pour modifier l’emplacement auquel ces fichiers devront être enregistrés, cl ### Gestion du fichier d'historique -L’option **Utiliser le fichier d’historique** indique, lorsqu’elle est cochée, que l'application exploite un fichier d’historique. Son chemin d’accès est précisé au-dessous de l’option. Lorsque cette option est cochée, il n’est pas possible d’ouvrir l'application sans fichier d’historique. +The **Use Log** option, when checked, indicates that the application uses a log file. Son chemin d’accès est précisé au-dessous de l’option. When this option is checked, it is not possible to open the application without a log file. -Par défaut, tout projet créé avec 4D utilise un fichier d’historique (option cochée dans la **Page Général** des **Préférences** de 4D). Le fichier d’historique est nommé par défaut *data.journal* et est placé dans le dossier Data. +By default, any project created with 4D uses a log file (option **Use Log File** checked in the **General Page** of the **Preferences**). Le fichier d’historique est nommé par défaut *data.journal* et est placé dans le dossier Data. -> L’activation d’un nouveau fichier d’historique nécessite que les données de l'application soient préalablement sauvegardées. Lorsque vous cochez cette option, un message vous informe qu’une sauvegarde est nécessaire. La création du fichier d’historique est différée et ne sera effective qu’après la prochaine sauvegarde de l'application. +> Activating a new log file requires the data of the application to be backed up beforehand. Lorsque vous cochez cette option, un message vous informe qu’une sauvegarde est nécessaire. The creation of the log file is postponed and it will actually be created only after the next backup of the application. ## Sauvegarde et restitution @@ -82,10 +82,10 @@ La modification des options de sauvegarde et de restauration est facultative. Le ### Paramètres généraux - **Conserver uniquement les N derniers fichiers de sauvegarde** : ce paramètre permet d’activer et de configurer le mécanisme de suppression des fichiers de sauvegarde les plus anciens, afin d’éviter tout risque de saturation du volume. Le principe de fonctionnement est le suivant : après avoir terminé la sauvegarde courante, 4D efface l’archive la plus ancienne si celle-ci est localisée au même endroit que l’archive à sauvegarder et porte le même nom (vous pouvez, pour des raisons d’économie de place, demander que l’archive la plus ancienne soit effacée avant la sauvegarde). Si, par exemple, le nombre de jeux est fixé à 3, les trois premières sauvegardes créent successivement les archives MaBase-0001, MaBase-0002 et MaBase-0003. Lors de la quatrième sauvegarde, l’archive MaBase-0004 est créée alors que l’archive MaBase-0001 est supprimée. Par défaut, le mécanisme de suppression des jeux est activé et 4D conserve 3 jeux de sauvegarde. Pour ne pas activer le mécanisme, désélectionnez l’option. -> Ce paramètre concerne à la fois les sauvegardes de l'application et les sauvegardes de l’historique. +> This parameter concerns both application and log file backups. -- **Sauvegarder uniquement si le fichier de données a été modifié** : lorsque cette option est cochée, 4D déclenche les sauvegardes périodiques uniquement si des données ont été ajoutées, modifiées ou supprimées depuis la dernière sauvegarde. Dans le cas contraire, la sauvegarde prévue est annulée et reportée à l’échéance suivante. Aucune erreur n’est générée ; le report est toutefois indiqué dans le Journal des sauvegardes. Cette option permet notamment d’économiser du temps machine sur la sauvegarde d'applications principalement utilisées en consultation. A noter qu'elle ne prend pas en compte les éventuelles modifications apportées au fichier de structure ou aux fichiers joints. -> Ce paramètre concerne à la fois les sauvegardes de l'application et les sauvegardes de l’historique. +- **Backup only if the data file has been modified**: When this option is checked, 4D starts scheduled backups only if data has been added, changed or deleted since the last backup. Dans le cas contraire, la sauvegarde prévue est annulée et reportée à l’échéance suivante. Aucune erreur n’est générée ; le report est toutefois indiqué dans le Journal des sauvegardes. This option also allows saving machine time for the backup of applications principally used for viewing purposes. A noter qu'elle ne prend pas en compte les éventuelles modifications apportées au fichier de structure ou aux fichiers joints. +> This parameter concerns both application and log file backups. - **Effacer la sauvegarde la plus ancienne avant sauvegarde / après sauvegarde** : cette option n’est utilisée que si l’option “Conserver uniquement les N derniers fichiers de sauvegarde” est cochée. Elle vous permet de spécifier si 4D doit commencer par effacer l’archive la plus ancienne avant d’effectuer une sauvegarde (option **avant**) ou si l’effacement doit être effectué après la sauvegarde (option **après**). Pour que ce mécanisme fonctionne, l’archive la plus ancienne ne doit pas avoir été renommée ou déplacée. @@ -94,12 +94,12 @@ La modification des options de sauvegarde et de restauration est facultative. Le - **Réessayer dans N seconde(s), minute(s) ou heure(s)** : lorsque cette option est cochée, une nouvelle tentative de sauvegarde est effectuée à l’issue du délai défini. Ce mécanisme permet d’anticiper certaines circonstances bloquant la sauvegarde. Vous pouvez fixer un délai en secondes, minutes ou heures à l’aide du menu correspondant. Si la nouvelle tentative échoue également, une erreur est générée et l’échec est inscrit dans les zones de statut de la dernière sauvegarde et dans le Journal des sauvegardes. - **Annuler l’opération au bout de N tentatives** : ce paramètre permet de définir le nombre de fois que le module de sauvegarde réessaiera de lancer la sauvegarde en cas d’échec. Si, à l’issue du nombre d’essais défini, la sauvegarde n’a pas pu être effectuée, elle est annulée et l’erreur 1401 est générée (“Le nombre maximal de tentatives de sauvegarde est atteint, la sauvegarde automatique est temporairement désactivée”). Dans ce cas, aucune nouvelle sauvegarde automatique ne sera lancée tant que l’application n’aura pas été redémarrée ou qu’une sauvegarde manuelle n’aura été effectuée avec succès. Ce paramètre est utile notamment pour éviter qu’en cas d’impossibilité prolongée de la sauvegarde (nécessitant une intervention humaine), l’application n’effectue inutilement de nombreuses tentatives au détriment de ses performances. Par défaut, ce paramètre n’est pas coché. -> 4D considère qu’une sauvegarde a échoué si l'application n’était pas lancée au moment théorique de la sauvegarde automatique périodique. +> 4D considers a backup as failed if the application was not launched at the time when the scheduled automatic backup was set to be carried out. ### Archive Ces options s’appliquent aux fichiers de sauvegarde principaux et aux fichiers de sauvegarde de l’historique. -- **Taille du segment (Mo)** 4D vous permet de segmenter les archives, c’est-à-dire de les découper en morceaux de taille fixe. Ce fonctionnement permet par exemple de stocker une sauvegarde sur plusieurs volumes (DVDs, usb, etc.). Au moment de la restitution, 4D fusionnera automatiquement les segments. Chaque segment est appelé MonApplication[xxxx-yyyy].4BK, où xxxx représente le numéro de la sauvegarde et yyyy celui du segment. Par exemple, les trois segments de la sixième sauvegarde de la base MonApplication seront appelés MonApplication[0006-0001].4BK, MonApplication[0006-0002].4BK et MonApplication[0006-0003].4BK. Le menu **Taille du segment** est une combo box permettant de définir la taille en Mo de chaque segment de sauvegarde. Vous pouvez choisir une des tailles prédéfinies ou saisir une taille spécifique entre 0 et 2048. Si vous passez 0, aucune segmentation n’est effectuée (équivaut à la valeur **Aucune**). +- **Taille du segment (Mo)** 4D vous permet de segmenter les archives, c’est-à-dire de les découper en morceaux de taille fixe. Ce fonctionnement permet par exemple de stocker une sauvegarde sur plusieurs volumes (DVDs, usb, etc.). Au moment de la restitution, 4D fusionnera automatiquement les segments. Each segment is called MyApplication[xxxx-yyyy].4BK, where xxxx is the backup number and yyyy is the segment number. For example, the three segments of the MyApplication backup are called MyApplication[0006-0001].4BK, MyApplication[0006-0002].4BK and MyApplication[0006-0003].4BK. Le menu **Taille du segment** est une combo box permettant de définir la taille en Mo de chaque segment de sauvegarde. Vous pouvez choisir une des tailles prédéfinies ou saisir une taille spécifique entre 0 et 2048. Si vous passez 0, aucune segmentation n’est effectuée (équivaut à la valeur **Aucune**). - **Taux de compression** Par défaut, les sauvegardes sont compressées par 4D. En contrepartie, la phase de compression des fichiers peut ralentir sensiblement les sauvegardes dans le cas de la manipulation de gros volumes de données. L’option **Taux de compression** vous permet d’ajuster la compression : - **Aucun** : aucune compression n’est appliquée. La sauvegarde peut être sensiblement plus rapide mais les fichiers d’archives sont plus volumineux sur le disque. @@ -113,14 +113,14 @@ Ces options s’appliquent aux fichiers de sauvegarde principaux et aux fichiers ### Restitution automatique -- **Restituer la dernière sauvegarde si la base est endommagée** : lorsque cette option est cochée, le programme déclenche automatiquement la restitution du fichier de données de la dernière sauvegarde valide de l'application s’il détecte une anomalie (fichier corrompu par exemple) lors du lancement de l'application. Aucune intervention de l’utilisateur n’est requise ; l’opération est cependant consignée dans le Journal des sauvegardes. +- **Restore last backup if database is damaged**: When this option is checked, the program automatically starts the restore of the data file of the last valid backup of the application, if an anomaly is detected (corrupted file, for example) during application launch. Aucune intervention de l’utilisateur n’est requise ; l’opération est cependant consignée dans le Journal des sauvegardes. -- **Intégrer le dernier historique si la base est incomplète** : lorsque cette option est cochée, le programme intègre automatiquement l’historique lors de l’ouverture ou de la restitution de l'application. - - Lors de l’ouverture d'une application, l’historique courant est automatiquement intégré si 4D détecte que des opérations stockées dans l’historique ne sont pas présentes dans les données. Cette situation se produit par exemple lorsqu’une panne de courant a lieu alors que des opérations non encore écrites sur le disque se trouvaient dans le cache de données. - - Lors de la restitution de l'application, si le fichier d’historique courant ou un fichier de sauvegarde d’historique ayant le même numéro que le fichier de sauvegarde est stocké dans le même dossier, 4D examine son contenu. S’il contient des opérations non présentes dans le fichier de données, le programme l’intègre automatiquement. +- **Integrate last log file if database is incomplete**: When this option is checked, the program automatically integrates the log file when opening or restoring the application. + - When opening an application, the current log file is automatically integrated if 4D detects that there are operations stored in the log file that are not present in the data. Cette situation se produit par exemple lorsqu’une panne de courant a lieu alors que des opérations non encore écrites sur le disque se trouvaient dans le cache de données. + - When restoring an application, if the current log file or a log backup file having the same number as the backup file is stored in the same folder, 4D examines its contents. S’il contient des opérations non présentes dans le fichier de données, le programme l’intègre automatiquement. Aucune boîte de dialogue n’est présentée à l’utilisateur, l’opération est entièrement automatique. Le but est de faciliter au maximum la remise en route de l’exploitation. L’opération est consignée dans le Journal des sauvegardes. -> Dans le cas d'une restauration automatique, seuls les éléments suivants sont restaurés: - fichier .4DD - fichier .4DIndx - fichier .4DSyncData - fichier .4DSyncHeader - dossier External Data +> In the case of an automatic restore, only the following elements are restored: - .4DD file - .4DIndx file - .4DSyncData file - .4DSyncHeader file - External Data folder > -> Si vous souhaitez obtenir les fichiers joints ou les fichiers de projet, vous devez effectuer une [restauration manuelle](restore.md#manually-restoring-a-backup-standard-dialog). +> If you wish to get the attached files or the project files, you must perform a [manual restore](restore.md#manually-restoring-a-backup-standard-dialog). From 09da18171d8acf89f7f40bb331a05fc6664838eb Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:20:28 +0100 Subject: [PATCH 114/260] New translations about.md (French) --- website/translated_docs/fr/Concepts/about.md | 68 ++++++++++---------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/website/translated_docs/fr/Concepts/about.md b/website/translated_docs/fr/Concepts/about.md index ca317b8b3f399f..1163d11a82d5d6 100644 --- a/website/translated_docs/fr/Concepts/about.md +++ b/website/translated_docs/fr/Concepts/about.md @@ -3,60 +3,60 @@ id: about title: À propos du Langage 4D --- -Grâce à son langage 4D intégré, qui comprend plus de 1300 commandes, 4D est un outil de développement puissant pour les applications web, mobile ou desktop. Ce langage peut être utilisé pour effectuer plusieurs types de tâches allant de la réalisation de simples calculs à la création d’interfaces utilisateur personnalisées et complexes. Vous pouvez par exemple : +The 4D built-in language, consisting of more than 1300 commands, makes 4D a powerful development tool for web, mobile, or desktop applications. You can use the 4D language for many different tasks—from performing simple calculations to creating complex custom user interfaces. For example, you can: -- Accéder par programmation à tous les éditeurs de gestion des enregistrements (tris, recherches, etc.), -- Créer et imprimer des états et des étiquettes complexes avec les données de la base, -- Communiquer avec d’autres systèmes d’information, -- Envoyer des e-mails, -- Gérer des documents et des pages web, -- Importer et exporter des données entre des applications 4D et d’autres applications, -- Incorporer des procédures écrites dans d’autres langages que celui de 4D. +- Programmatically access any of the record management editors (order by, query, and so on), +- Create and print complex reports and labels with the information from the database, +- Communicate with other devices, +- Send emails, +- Manage documents and web pages, +- Import and export data between 4D applications and other applications, +- Incorporate procedures written in other languages into the 4D programming language. -La flexibilité et la puissance du langage de 4D en font l’outil idéal pour exécuter toute une gamme de fonctions de gestion de l’information. Les utilisateurs novices peuvent exécuter des calculs rapidement, les utilisateurs plus expérimentés peuvent personnaliser leurs applications sans connaissances préalables en programmation et les développeurs chevronnés peuvent utiliser ce langage puissant pour ajouter à leurs applications des fonctions sophistiquées, allant jusqu'au transfert de fichiers, aux communications et au suivi. Quant aux développeurs ayant une maîtrise de la programmation dans d’autres langages, ils peuvent ajouter leurs propres commandes au langage de 4D. +The flexibility and power of the 4D programming language make it the ideal tool for all levels of users and developers to accomplish a complete range of information management tasks. Novice users can quickly perform calculations. Experienced users without programming experience can customize their applications. Experienced developers can use this powerful programming language to add sophisticated features and capabilities to their applications, including file transfer, communications, monitoring. Developers with programming experience in other languages can add their own commands to the 4D language. -## Qu'est-ce qu'un langage ? +## What is a Language? -Le langage de 4D n’est pas très différent de celui que nous utilisons tous les jours. C’est une forme de communication qui permet d'exprimer des idées, d'informer ou de donner des instructions. Tout comme un langage parlé, celui de 4D se compose d'un vocabulaire, d’une grammaire et d’une syntaxe, que vous employez pour indiquer au programme comment gérer votre application et vos données. +The 4D language is not very different from the spoken language we use every day. It is a form of communication used to express ideas, inform, and instruct. Like a spoken language, 4D has its own vocabulary, grammar, and syntax; you use it to tell 4D how to manage your application and data. -Il n’est pas nécessaire de connaître entièrement le langage. Pour pouvoir vous exprimer en anglais, vous n’êtes pas obligé de connaître la totalité de la langue anglaise ; en réalité, un peu de vocabulaire suffit. Il en va de même pour 4D — il vous suffit de connaître un minimum du langage pour être productif, et vous en apprendrez de plus en plus au fur et à mesure de vos besoins. +You do not need to know everything in the language in order to work effectively with 4D. In order to speak, you do not need to know the entire English language; in fact, you can have a small vocabulary and still be quite eloquent. The 4D language is much the same—you only need to know a small part of the language to become productive, and you can learn the rest as the need arises. -## Pourquoi utiliser un langage ? +## Why use a Language? -À première vue, un langage de programmation dans 4D peut sembler inutile. En effet, 4D propose des outils puissants et entièrement paramétrables en mode Développement, permettant d'exécuter une grande variété de tâches de gestion des données sans programmation. Les opérations fondamentales telles que la saisie de données, les requêtes, les tris et la création d’états s'effectuent facilement. Il existe aussi de nombreuses autres possibilités, telles que les filtres de validation des données, les aides à la saisie, la représentation graphique et la génération d’étiquettes. +At first it may seem that there is little need for a programming language in 4D. In the Design environment, 4D provides flexible tools that require no programming to perform a wide variety of data management tasks. Fundamental tasks, such as data entry, queries, sorting, and reporting are handled with ease. In fact, many extra capabilities are available, such as data validation, data entry aids, graphing, and label generation. -Alors, pourquoi avons-nous besoin d'un langage 4D ? Voici quelques-uns de ses principaux rôles : +Then why do we need a 4D language? Here are some of its uses: -- Automatiser les tâches répétitives : par exemple la modification de données, la génération d’états complexes et la réalisation de longues séries d’opérations ne nécessitant pas l’intervention d’un utilisateur. -- Contrôler l’interface utilisateur : vous pouvez gérer les fenêtres et les menus, contrôler les formulaires et les objets d’interface. -- Gérer les données de manière très fine : cette gestion inclut le traitement de transactions, les systèmes de validation complexes, la gestion multi-utilisateurs, l’utilisation des ensembles et des sélections temporaires. -- Contrôler l’ordinateur : vous pouvez contrôler les communications par le port série, la gestion des documents et des erreurs. -- Créer des applications : vous pouvez créer des applications simples, personnalisées et autonomes. -- Ajouter des fonctionnalités au serveur Web 4D intégré : par exemple, vous pouvez créer et mettre à jour des pages web dynamiques contenant vos données. +- Automate repetitive tasks: These tasks include data modification, generation of complex reports, and unattended completion of long series of operations. +- Control the user interface: You can manage windows and menus, and control forms and interface objects. +- Perform sophisticated data management: These tasks include transaction processing, complex data validation, multi-user management, sets, and named selection operations. +- Control the computer: You can control serial port communications, document management, and error management. +- Create applications: You can create easy-to-use, customized applications that run stand-alone. +- Add functionality to the built-in 4D Web server: build and update dynamic web pages filled with your data. -Le langage vous permet de contrôler totalement la structure et le fonctionnement de votre application. 4D propose de puissants éditeurs “génériques”, mais le langage vous offre la possibilité de personnaliser votre application autant que vous voulez. +The language lets you take complete control over the design and operation of your application. 4D provides powerful “generic” editors, but the language lets you customize your application to whatever degree you require. -## Prendre le contrôle de vos données +## Taking Control of Your Data -Le langage de 4D vous permet de prendre le contrôle total de vos données, d’une manière à la fois puissante et élégante. Il reste d’un abord facile pour un débutant, et est suffisamment riche pour un développeur d’applications. Il permet de passer par étapes d’une simple exploitation des fonctions intégrées de 4D à une application entièrement personnalisée. +The 4D language lets you take complete control of your data in a powerful and elegant manner. The language is easy enough for a beginner, and sophisticated enough for an experienced application developer. It provides smooth transitions from built-in database functions to a completely customized application. -Les commandes du langage de 4D vous donnent la possibilité d’accéder aux éditeurs standard de gestion des enregistrements. Par exemple, lorsque vous utilisez la commande `QUERY`, vous accédez à l’Editeur de quêtes (accessible en mode Développement via la commande Chercher... dans le menu Enregistrements). Vous pouvez, si vous le voulez, indiquer explicitement à la commande Query ce qu’elle doit rechercher. Par exemple, `QUERY([People];[People]Last Name="Dupont")` trouvera toutes les personnes nommées Dupont dans votre base. +The commands in the 4D language provide access to the standard record management editors. For example, when you use the `QUERY` command, you are presented with the Query Editor (which can be accessed in the Design mode using the Query command in the Records menu. You can tell the command to search for explicitly described data. For example, `QUERY([People];[People]Last Name="Smith")` will find all the people named Smith in your database. -Le langage 4D est très puissant — une commande remplace souvent des centaines, voire des milliers de lignes de code écrites dans les langages informatiques traditionnels. Et cette puissance s’accompagne d'une réelle simplicité : les commandes sont écrites en français. Par exemple, vous utilisez la commande `QUERY` pour effectuer une recherche ; pour ajouter un nouvel enregistrement, vous appelez la commande `ADD RECORD`. +The 4D language is very powerful—one command often replaces hundreds or even thousands of lines of code written in traditional computer languages. Surprisingly enough, with this power comes simplicity—commands have plain English names. For example, to perform a query, you use the `QUERY` command; to add a new record, you use the `ADD RECORD` command. -Le langage est conçu de telle manière que vous puissiez facilement accomplir n’importe quelle tâche. L’ajout d’un enregistrement, le tri des enregistrements, la recherche de valeurs et les autres opérations de même type sont définies par des commandes simples et directes. Mais les routines peuvent également contrôler les ports série, lire des documents sur le disque, traiter des systèmes de transactions complexes, et plus encore. +The language is designed for you to easily accomplish almost any task. Adding a record, sorting records, searching for data, and similar operations are specified with simple and direct commands. But the language can also control the serial ports, read disk documents, control sophisticated transaction processing, and much more. -Même les opérations les plus compliquées se définissent de manière relativement simple. Il serait inimaginable de les réaliser sans le langage de 4D. Cependant, même à l’aide de la puissance des commandes du langage, certaines tâches peuvent se révéler complexes et difficiles. Ce n’est pas l’outil lui-même qui fait le travail ; une tâche peut représenter en soi une difficulté, l’outil ne fait que faciliter son traitement. Par exemple, un logiciel de traitement de texte permet d’écrire un livre plus rapidement et plus facilement, mais il ne l’écrira pas à votre place. Le langage de 4D vous permet de gérer plus facilement vos données et d’appréhender les tâches ardues en toute confiance. +The 4D language accomplishes even the most sophisticated tasks with relative simplicity. Performing these tasks without using the language would be unimaginable for many. Even with the language’s powerful commands, some tasks can be complex and difficult. A tool by itself does not make a task possible; the task itself may be challenging and the tool can only ease the process. For example, a word processor makes writing a book faster and easier, but it will not write the book for you. Using the 4D language will make the process of managing your data easier and will allow you to approach complicated tasks with confidence. -## Est-ce un langage informatique “traditionnel” ? +## Is it a “Traditional” Computer Language? -Si vous êtes familier avec les langages informatiques traditionnels, ce paragraphe peut vous intéresser. Si ce n’est pas le cas, vous pouvez passer directement au paragraphe suivant. +If you are familiar with traditional computer languages, this section may be of interest. If not, you may want to skip it. -Le langage 4D n’est pas un langage informatique traditionnel. C’est un des langages les plus souples et les plus innovants que l’on puisse trouver aujourd’hui sur micro-ordinateur. Le langage a été conçu pour s’adapter à vous, et non l’inverse. +The 4D language is not a traditional computer language. It is one of the most innovative and flexible languages available on a computer today. It is designed to work the way you do, and not the other way around. -Pour utiliser les langages traditionnels, vous devez avant tout réaliser des maquettes détaillées. C’est même l'une des principales phases d’un développement. 4D vous permet de commencer à utiliser le langage à tout moment et dans n’importe quelle partie de votre projet. Vous pouvez commencer par ajouter une méthode objet dans un formulaire, puis plus tard une ou deux méthodes formulaires. Comme votre projet devient plus sophistiquée, vous pouvez ajouter une méthode projet contrôlée par un menu. Vous êtes totalement libre d’utiliser une petite partie du langage ou une partie plus étendue. Ce n’est pas “tout ou rien”, comme c’est le cas dans beaucoup d’autres bases de données. +To use traditional languages, you must do extensive planning. In fact, planning is one of the major steps in development. 4D allows you to start using the language at any time and in any part of your project. You may start by adding a method to a form, then later add a few more methods. As your application becomes more sophisticated, you might add a project method controlled by a menu. You can use as little or as much of the language as you want. It is not “all or nothing,” as is the case with many other databases. -Les langages traditionnels vous obligent à définir et à pré-déclarer vos objets d'interface sous une forme syntaxique rigide. Dans 4D, créez simplement un objet, tel qu'un bouton, et utilisez-le. 4D se charge de la gestion de l'objet. Par exemple, pour utiliser un bouton, il suffit de le dessiner dans un formulaire et de lui donner un nom. Lorsque l’utilisateur clique sur le bouton, le langage déclenche automatiquement vos méthodes. +Traditional languages force you to define and pre-declare interface objects in formal syntactic terms. In 4D, you simply create an object, such as a button, and use it. 4D automatically manages the object for you. For example, to use a button, you draw it on a form and name it. When the user clicks the button, the language automatically notifies your methods. -Les langages traditionnels sont souvent rigides et inflexibles, et exigent que les commandes soient saisies dans un style très formel et contraignant. Le langage de 4D rompt avec la tradition, au grand bénéfice de l’utilisateur. \ No newline at end of file +Traditional languages are often rigid and inflexible, requiring commands to be entered in a very formal and restrictive style. The 4D language breaks with tradition, and the benefits are yours. \ No newline at end of file From 23b7fa43752e7dd5d7c91cf85bdd9b99b551ad54 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:20:31 +0100 Subject: [PATCH 115/260] New translations arrays.md (French) --- website/translated_docs/fr/Concepts/arrays.md | 150 +++++++++--------- 1 file changed, 75 insertions(+), 75 deletions(-) diff --git a/website/translated_docs/fr/Concepts/arrays.md b/website/translated_docs/fr/Concepts/arrays.md index be6596c090aa53..bd827be6e8c781 100644 --- a/website/translated_docs/fr/Concepts/arrays.md +++ b/website/translated_docs/fr/Concepts/arrays.md @@ -3,33 +3,33 @@ id: arrays title: Tableaux --- -Un **tableau** est une série ordonnée de **variables** de même type. Chaque variable est appelée un **élément** du tableau. La taille du tableau doit être définie au moment de sa création ; vous pouvez ensuite la modifier aussi souvent que nécessaire en ajoutant, insérant, ou supprimant des éléments, ou en appelant de nouveau la commande que vous avez utilisée pour créer le tableau. Les éléments sont numérotés de 1 à N, où N est la taille du tableau. Un tableau a toujours un [élément zéro](#using-the-element-zero-of-an-array). Les tableaux sont des variables 4D. Comme toute variable, un tableau a une portée et suit les règles du langage 4D, bien qu'il existe quelques différences spécifiques. -> Généralement, il est recommandé d'utiliser des **collections** plutôt que des **tableaux**. Les collections sont plus souples et fournissent un large éventail de méthodes spécifiques. Pour plus d'informations, veuillez consutler la section [Collection](Concepts/dt_collection.md). +An **array** is an ordered series of **variables** of the same type. Each variable is called an **element** of the array. An array is given its size when it is created; you can then resize it as many times as needed by adding, inserting, or deleting elements, or by resizing the array using the same command used to create it. Array elements are numbered from 1 to N, where N is the size of the array. An array always has a special [element zero](#using-the-element-zero-of-an-array). Arrays are 4D variables. Like any variable, an array has a scope and follows the rules of the 4D language, though with some unique differences. +> In most cases, it is recommended to use **collections** instead of **arrays**. Collections are more flexible and provide a wide range of dedicated methods. For more information, please refer to the [Collection](Concepts/dt_collection.md) section. -## Créer des tableaux +## Creating Arrays -Vous créez un tableau au moyen de l'une des commandes de déclaration du thème "Tableaux". Chaque commande de déclaration de tableau peut créer ou redimensionner des tableaux à une ou à deux dimensions. Pour plus d'informations sur les tableaux à deux dimensions, reportez-vous à la section [Tableaux à deux dimensions](#two-dimensional-arrays). +You create an array with one of the array declaration commands from the "Array" theme. Each array declaration command can create or resize one-dimensional or two-dimensional arrays. For more information about two-dimensional arrays, see the [two dimensional arrays](#two-dimensional-arrays) section. -Cette ligne de code crée (déclare) un tableau d'entiers de 10 éléments : +The following line of code creates (declares) an Integer array of 10 elements: ```4d ARRAY INTEGER(aiAnArray;10) ``` -Ensuite, cette ligne de code redimensionne le même tableau à 20 éléments : +Then, the following code resizes that same array to 20 elements: ```4d ARRAY INTEGER(aiAnArray;20) ``` -Enfin, cette ligne de code redimensionne le même tableau à 0 élément : +Then, the following code resizes that same array to no elements: ```4d ARRAY INTEGER(aiAnArray;0) ``` -## Affecter des valeurs dans un tableau +## Assigning values in arrays -Vous référencez les éléments d'un tableau en utilisant des accolades ({…} ). Un nombre entre accolades donne accès à l'adresse d'un élément particulier. L'exemple ci-dessous place cinq noms dans le tableau nommé atNoms et les affiche ensuite dans une fenêtre d'alerte : +You reference the elements in an array by using curly braces ({…}). A number is used within the braces to address a particular element; this number is called the element number. The following lines put five names into the array called atNames and then display them in alert windows: ```4d ARRAY TEXT(atNames;5) @@ -42,84 +42,84 @@ Vous référencez les éléments d'un tableau en utilisant des accolades ({…} ALERT("The element #"+String($vlElem)+" is equal to: "+atNames{$vlElem}) End for ``` -Notez la syntaxe atNoms{$vlElem}. Au lieu de spécifier un nombre littéral comme atNoms{3}, vous pouvez utiliser une variable numérique indiquant à quel élément d'un tableau vous accédez. Si vous utilisez les itérations permises par les structures répétitives (`For...End for`, `Repeat...Until` or `While...End while`), vous pouvez accéder à tout ou partie des éléments d'un tableau avec très peu de code. +Note the syntax atNames{$vlElem}. Rather than specifying a numeric literal such as atNames{3}, you can use a numeric variable to indicate which element of an array you are addressing. Using the iteration provided by a loop structure (`For...End for`, `Repeat...Until` or `While...End while`), compact pieces of code can address all or part of the elements in an array. -**Important :** Veillez à ne pas confondre l'opérateur d'affectation (:=) avec l'opérateur de comparaison égal (=). L'affectation et la comparaison sont deux opérations totalement différentes. +**Important:** Be careful not to confuse the assignment operator (:=) with the comparison operator, equal (=). Assignment and comparison are very different operations. -### Affecter un tableau à un autre -Contrairement à ce que vous pouvez faire avec des variables de type Texte ou Chaîne, vous ne pouvez pas affecter un tableau à un autre tableau. Pour copier (affecter) un tableau à un autre, utilisez la fonction `COPY ARRAY`. +### Assigning an array to another array +Unlike text or string variables, you cannot assign one array to another. To copy (assign) an array to another one, use `COPY ARRAY`. -## Utiliser l'élément zéro d'un tableau +## Using the element zero of an array -Un tableau a toujours un élément zéro. Même si l'élément zéro n'est pas affiché lorsqu'un tableau est utilisé pour remplir un objet de formulaire, vous pouvez l'utiliser sans réserve(*) dans le langage. +An array always has an element zero. While element zero is not shown when an array supports a form object, there is no restriction(*) in using it with the language. -Voici un autre exemple : vous souhaitez initialiser un objet de formulaire avec une valeur texte mais sans définir de valeur par défaut. Vous pouvez utiliser l'élément zéro du tableau : +Here is another example: you want to initialize a form object with a text value but without setting a default value. You can use the element zero of the array: ```4d - // // méthode pour une combo box ou une liste déroulante - // liée au tableau de variables atName + // method for a combo box or drop-down list + // bound to atName variable array Case of - : Form event code=On Load) - // Initialise le tableau (comme indiqué ci-dessus) - // Mais utilise l'élément zéro + :(Form event code=On Load) + // Initialize the array (as shown further above) + // But use the element zero ARRAY TEXT(atName;5) - atName{0}:=Veuillez sélectionner un élément" + atName{0}:=Please select an item" atName{1}:="Text1" atName{2}:="Text2" atName{3}:="Text3" atName{4}:="Text4" atName{5}:="Text5" - // Positionne le tableau sur l'élément 0 - atName: = 0 + // Position the array to element 0 + atName:=0 End case ``` (*) However, there is one exception: in an array type List Box, the zero element is used internally to store the previous value of an element being edited, so it is not possible to use it in this particular context. -## Tableaux à deux dimensions +## Two-dimensional Arrays -Chaque commande de déclaration de tableau permet de créer ou de redimensionner des tableaux à une ou à deux dimensions. Exemple : +Each of the array declaration commands can create or resize one-dimensional or two-dimensional arrays. Example: ```4d - ARRAY TEXT(atTopics;100;50) // Créer un tableau texte composé de 100 lignes de 50 colonnes + ARRAY TEXT(atTopics;100;50) // Creates a text array composed of 100 rows of 50 columns ``` -Les tableaux à deux dimensions sont essentiellement des objets de langage ; vous ne pouvez ni les afficher ni les imprimer. +Two-dimensional arrays are essentially language objects; you can neither display nor print them. -Dans l'exemple prédédent : +In the previous example: -- atTopics est un tableau à deux dimensions -- atTopics{8}{5} est le 5e élément (5e colonne...) de la 8e ligne -- atTopics{20} est la 20e ligne et est elle-même un tableau à une dimension -- `Size of array(atTopics)` retourne 100, qui est le nombre de lignes -- `Size of array(atTopics{17})` retourne 50, qui est le nombre de colonnes de la 17e ligne +- atTopics is a two-dimensional array +- atTopics{8}{5} is the 5th element (5th column...) of the 8th row +- atTopics{20} is the 20th row and is itself a one-dimensional array +- `Size of array(atTopics)` returns 100, which is the number of rows +- `Size of array(atTopics{17})` returns 50, which the number of columns for the 17th row -Dans l'exemple suivant, un pointeur vers chaque champ de chaque table de la base est stocké dans un tableau à deux dimensions : +In the following example, a pointer to each field of each table in the database is stored in a two-dimensional array: ```4d C_LONGINT($vlLastTable;$vlLastField) C_LONGINT($vlFieldNumber) - // Créer autant de lignes (vides et sans colonnes) qu'il y a de tables - $vlLastTable:=Get last table number - ARRAY POINTER(<>apFields;$vlLastTable;0) //Tableau 2D avec N lignes et zéro colonnes - // Pour chaque table + // Create as many rows (empty and without columns) as there are tables + $vlLastTable:=Get last table number + ARRAY POINTER(<>apFields;$vlLastTable;0) //2D array with X rows and zero columns + // For each table For($vlTable;1;$vlLastTable) If(Is table number valid($vlTable)) $vlLastField:=Get last field number($vlTable) - // Donner la valeur des éléments - $vlColumnNumber:=0 + // Give value of elements + $vlColumnNumber:=0 For($vlField;1;$vlLastField) If(Is field number valid($vlTable;$vlField)) $vlColumnNumber:=$vlColumnNumber+1 - // Insérer une colonne dans la ligne de la table en cours - INSERT IN ARRAY(<>apFields{$vlTable};$vlColumnNumber;1) - // Affecter la "celulle" avec le pointeur + //Insert a column in a row of the table underway + INSERT IN ARRAY(<>apFields{$vlTable};$vlColumnNumber;1) + //Assign the "cell" with the pointer <>apFields{$vlTable}{$vlColumnNumber}:=Field($vlTable;$vlField) End if End for @@ -127,13 +127,13 @@ Dans l'exemple suivant, un pointeur vers chaque champ de chaque table de la base End for ``` -Dans la mesure où le tableau à deux dimensions a été initialisé, vous pouvez obtenir ainsi les pointeurs vers les champs d'une table de votre choix : +Provided that this two-dimensional array has been initialized, you can obtain the pointers to the fields for a particular table in the following way: ```4d - // Obtenir les pointeurs vers les champs pour la table affichée à l'écran: + // Get the pointers to the fields for the table currently displayed at the screen: COPY ARRAY(◊apFields{Table(Current form table)};$apTheFieldsIamWorkingOn) - // Initialiser les champs booléens et date -For($vlElem;1;Size of array($apTheFieldsIamWorkingOn)) + // Initialize Boolean and Date fields + For($vlElem;1;Size of array($apTheFieldsIamWorkingOn)) Case of :(Type($apTheFieldsIamWorkingOn{$vlElem}->)=Is date) $apTheFieldsIamWorkingOn{$vlElem}->:=Current date @@ -143,40 +143,40 @@ For($vlElem;1;Size of array($apTheFieldsIamWorkingOn)) End for ``` -**Note :** Comme le montre cet exemple, les lignes des tableaux à deux dimensions peuvent être ou non de la même taille. +**Note:** As this example suggests, rows of a two-dimensional arrays can be the same size or different sizes. -## Tableaux et mémoire +## Arrays and Memory -A la différence des données que vous stockez sur disque lorsque vous utilisez des tables ou des enregistrements, un tableau réside toujours en mémoire dans son intégralité. +Unlike the data you store on disk using tables and records, an array is always held in memory in its entirety. -Par exemple, si tous les codes postaux américains étaient saisis dans une table [Codes Postaux], celle-ci contiendrait environ 100 000 enregistrements. De plus, cette table comporterait plusieurs champs : le code postal lui-même ainsi que la ville, le comté et l'état correspondants. Si vous ne sélectionnez que les codes postaux de Californie, 4D crée la sélection d'enregistrements correspondante à l'intérieur de la table [Codes Postaux], et ensuite ne charge les enregistrements que lorsque vous en avez besoin (par exemple, pour les afficher ou les imprimer). En d'autres termes, vous travaillez avec une série ordonnée de valeurs (du même type pour chaque champ) partiellement chargée du disque en mémoire. +For example, if all US zip codes were entered in the [Zip Codes] table, it would contain about 100,000 records. In addition, that table would include several fields: the zip code itself and the corresponding city, county, and state. If you select only the zip codes from California, the 4D database engine creates the corresponding selection of records within the [Zip Codes] table, and then loads the records only when they are needed (i.e., when they are displayed or printed). In order words, you work with an ordered series of values (of the same type for each field) that is partially loaded from the disk into the memory by the database engine of 4D. -Procéder de la même manière avec les tableaux serait laborieux, pour les raisons suivantes : +Doing the same thing with arrays would be prohibitive for the following reasons: -- Pour maintenir les quatre types d'information (code postal, ville, comté, état), vous auriez besoin de quatre grands tableaux en mémoire. -- Comme un tableau réside en mémoire dans son intégralité, vous seriez obligé de garder tous les codes postaux en mémoire pendant toute la session de travail, même si les données n'étaient pas utilisées en permanence. -- Toujours parce qu'un tableau réside en mémoire dans son intégralité, les quatre tableaux devraient être chargés ou sauvegardés sur le disque à chaque fois que vous démarreriez ou quitteriez l'application, quand bien même les données ne seraient d'aucune utilité pour la session de travail. +- In order to maintain the four information types (zip code, city, county, state), you would have to maintain four large arrays in memory. +- Because an array is always held in memory in its entirety, you would have to keep all the zip codes information in memory throughout the whole working session, even though the data is not always in use. +- Again, because an array is always held in memory in its entirety, each time the application is started and then quit, the four arrays would have to be loaded and then saved on the disk, even though the data is not used or modified during the working session. -**Conclusion :** Les tableaux ont pour rôle de manipuler une certaine quantité de données pendant une période brève. En contrepartie, comme ils résident en mémoire, ils sont d'une utilisation rapide et facile. +**Conclusion:** Arrays are intended to hold reasonable amounts of data for a short period of time. On the other hand, because arrays are held in memory, they are easy to handle and quick to manipulate. -Cependant, dans certaines circonstances, vous pouvez avoir besoin de tableaux contenant des centaines ou des milliers d'éléments. Voici les formules à appliquer pour calculer la quantité de mémoire utilisée pour chaque type de tableau : +However, in some circumstances, you may need to work with arrays holding hundreds or thousands of elements. The following table lists the formulas used to calculate the amount of memory used for each array type: -| Type de Tableau | Calcul de la quantité de mémoire en octets | -| --------------- | ----------------------------------------------------------------------- | -| Blob | (1+nombre d'éléments) * 12 + somme de la taille de chaque blob | -| Booléen | (31+nombre d'éléments)/8 | -| Date | (1+nombre d'éléments) * 6 | -| Entier long | (1+nombre d'éléments) * 2 | -| Entier long | (1+nombre d'éléments) * 4 | -| Objet | (1+nombre d'éléments) * 8 + somme de la taille de chaque objet | -| Image | (1+nombre d'éléments) * 8 + somme de la taille de chaque image | -| Pointeur | (1+nombre d'éléments) * 8 + somme de la taille de chaque pointeur | -| Réel | (1+nombre d'éléments) * 8 | -| Texte | (1+nombre d'éléments) * 20 + (somme de la taille de chaque texte) * 2 | -| Heure | (1+nombre d'éléments) * 4 | -| Deux dimensions | (1+nombre d'éléments) * 16 + somme de la taille de chaque tableau | +| Array Type | Formula for determining Memory Usage in Bytes | +| --------------- | -------------------------------------------------------------------- | +| Blob | (1+number of elements) * 12 + Sum of the size of each blob | +| Booléen | (31+number of elements)\8 | +| Date | (1+number of elements) * 6 | +| Integer | (1+number of elements) * 2 | +| Long Integer | (1+number of elements) * 4 | +| Objet | (1+number of elements) * 8 + Sum of the size of each object | +| Image | (1+number of elements) * 8 + Sum of the size of each picture | +| Pointeur | (1+number of elements) * 8 + Sum of the size of each pointer | +| Real | (1+number of elements) * 8 | +| Text | (1+number of elements) * 20 + (Sum of the length of each text) * 2 | +| Heure | (1+number of elements) * 4 | +| Two-dimensional | (1+number of elements) * 16 + Sum of the size of each array | -**Notes :** +**Notes:** -- La taille d'un texte en mémoire se calcule par la formule ((Longueur + 1) * 2) -- Quelques octets supplémentaires sont requis pour le repérage de l'élément, le nombre d'éléments et le tableau lui-même. \ No newline at end of file +- The size of a text in memory is calculated using this formula: ((Length + 1) * 2) +- A few additional bytes are required to keep track of the selected element, the number of elements, and the array itself. \ No newline at end of file From 8e21808c3264b8ca44d2c4c71ce15da8371b1e58 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:20:33 +0100 Subject: [PATCH 116/260] New translations cf_branching.md (French) --- .../fr/Concepts/cf_branching.md | 182 ++++++++---------- 1 file changed, 85 insertions(+), 97 deletions(-) diff --git a/website/translated_docs/fr/Concepts/cf_branching.md b/website/translated_docs/fr/Concepts/cf_branching.md index 5f5e0eac3ada66..ab45f5f36ec6c8 100644 --- a/website/translated_docs/fr/Concepts/cf_branching.md +++ b/website/translated_docs/fr/Concepts/cf_branching.md @@ -5,26 +5,26 @@ title: Structures conditionnelles ## If...Else...End if -La syntaxe de la structure conditionnelle `If...Else...End if` est la suivante : +The formal syntax of the `If...Else...End if` control flow structure is: ```4d If(Boolean_Expression) - instruction(s) + statement(s) Else - instruction(s) -End if + statement(s) + End if ``` -A noter que l'élément `Else` est optionnel, vous pouvez écrire : +Note that the `Else` part is optional; you can write: ```4d If(Boolean_Expression) - instruction(s) + statement(s) End if ``` -La structure `If...Else...End if` permet à votre méthode de choisir dans une alternative, en fonction du résultat, TRUE ou FALSE, d’un test (une expression booléenne). Si l’expression booléenne est TRUE, les instructions qui suivent immédiatement le test sont exécutées. Si l’expression booléenne est FALSE, les instructions suivant la ligne Else sont exécutées. Le `Else` est optionnel ; lorsqu’il est omis, c’est la première ligne d’instructions suivant le `End if` (s’il y en a une) qui est exécutée. +The `If...Else...End if` structure lets your method choose between two actions, depending on whether a test (a Boolean expression) is TRUE or FALSE. When the Boolean expression is TRUE, the statements immediately following the test are executed. If the Boolean expression is FALSE, the statements following the Else statement are executed. The `Else` statement is optional; if you omit Else, execution continues with the first statement (if any) following the `End if`. -A noter que l'expression booléenne est toujours évaluée en totalité. Examinons en particulier le test suivant : +Note that the Boolean expression is always fully evaluated. Consider in particular the following test: ```4d If(MethodA & MethodB) @@ -32,7 +32,7 @@ A noter que l'expression booléenne est toujours évaluée en totalité. Examino End if ``` -L'expression n'est TRUE que si les deux méthodes sont TRUE. Or, même si _MethodA_ retourne FALSE, 4D évaluera quand même _MethodB_, ce qui représente une perte de temps inutile. Dans ce cas, il est préférable d'utiliser une structure du type : +he expression is TRUE only if both methods are TRUE. However, even if _MethodA_ returns FALSE, 4D will still evaluate _MethodB_, which is a useless waste of time. In this case, it is more interesting to use a structure like: ```4d If(MethodA) @@ -42,189 +42,177 @@ L'expression n'est TRUE que si les deux méthodes sont TRUE. Or, même si _Metho End if ``` -Le résultat est équivalent et _MethodB_ n'est évaluée que si nécessaire. +The result is similar and _MethodB_ is evaluated only if necessary. -### Exemple +### Example ```4d - // Demander à l'utilisateur de saisir un nom + // Ask the user to enter a name $Find:=Request(Type a name) If(OK=1) QUERY([People];[People]LastName=$Find) Else ALERT("You did not enter a name.") - End if End if ``` -**Astuce :** Il n'est pas obligatoire que des instructions soient exécutées dans chaque branche de l'alternative. Lorsque vous développez un algorithme, ou lorsque vous poursuivez un but précis, rien ne vous empêche d'écrire : +**Tip:** Branching can be performed without statements to be executed in one case or the other. When developing an algorithm or a specialized application, nothing prevents you from writing: ```4d - If(Expression_booléenne) + If(Boolean_Expression) Else - instruction(s) + statement(s) End if ``` -ou : +or: ```4d - If(Expression_booléenne) - instruction(s) + If(Boolean_Expression) + statement(s) Else End if ``` -## Au cas ou...Sinon...Fin de cas +## Case of...Else...End case -La syntaxe de la structure conditionnelle `Case of...Else...End case` est la suivante : +The formal syntax of the `Case of...Else...End case` control flow structure is: ```4d Case of - :(Expression_booléenne) - instruction(s) - :(Expression_booléenne) + :(Boolean_Expression) + statement(s) + :(Boolean_Expression) statement(s) . . . - :(Expression_booléenne) - instruction(s) + :(Boolean_Expression) + statement(s) Else - instruction(s) + statement(s) End case ``` -A noter que l'élément `Else` est optionnel, vous pouvez écrire : +Note that the `Else` part is optional; you can write: ```4d Case of - :(Expression_booléenne) - instruction(s) - :(Expression_booléenne) + :(Boolean_Expression) + statement(s) + :(Boolean_Expression) statement(s) . . . - :(Expression_booléenne) - instruction(s) + :(Boolean_Expression) + statement(s) End case ``` -Tout comme la structure `If...Else...End if`, la structure `Case of...Else...End case` permet également à votre méthode de choisir parmi plusieurs séquences d’instructions. A la différence de la structure `If...Else...End`, la structure `Case of...Else...End case` peut tester un nombre illimité d’expressions booléennes et exécuter la séquence d’instructions correspondant à la valeur TRUE. +As with the `If...Else...End if` structure, the `Case of...Else...End case` structure also lets your method choose between alternative actions. Unlike the `If...Else...End` if structure, the `Case of...Else...End case` structure can test a reasonable unlimited number of Boolean expressions and take action depending on which one is TRUE. -Chaque expression booléenne débute par le caractère deux points (`:`). La combinaison de deux points et d’une expression booléenne est appelée un cas. Par exemple, la ligne suivante est un cas : +Each Boolean expression is prefaced by a colon (`:`). This combination of the colon and the Boolean expression is called a case. For example, the following line is a case: ```4d :(bValidate=1) ``` -Seules les instructions suivant le premier cas TRUE (et ce, jusqu’au cas suivant) seront exécutées. Si aucun des cas n’est TRUE, aucune instruction n’est exécutée (s'il n'y a pas d'élément `Else`). +Only the statements following the first TRUE case (and up to the next case) will be executed. If none of the cases are TRUE, none of the statements will be executed (if no `Else` part is included). -Vous pouvez placer une instruction Else après le dernier cas. Si tous les cas sont FALSE, les instructions suivant le `Else` seront exécutées. +You can include an Else statement after the last case. If all of the cases are FALSE, the statements following the `Else` will be executed. -### Exemple +### Example -Cet exemple teste une variable numérique et affiche une boîte de dialogue d’alerte comportant un simple mot : +This example tests a numeric variable and displays an alert box with a word in it: ```4d Case of - :(vResult=1) //Tester si le chiffre est 1 - ALERT("One.") //Si le chiffre est 1, afficher une alerte - :(vResult=2) //Tester si le chiffre est 2 - ALERT("Two.") //Si le chiffre est 2, afficher une alerte - :(vResult=3) //Tester si le chiffre est 3 - ALERT("Three.") //Si le chiffre est 3, afficher une alerte - Else //Si le chiffre n'est pas 1, 2 ou 3, afficher une alerte + :(vResult=1) //Test if the number is 1 + ALERT("One.") //If it is 1, display an alert + :(vResult=2) //Test if the number is 2 + ALERT("Two.") //If it is 2, display an alert + :(vResult=3) //Test if the number is 3 + ALERT("Three.") //If it is 3, display an alert + Else //If it is not 1, 2, or 3, display an alert ALERT("It was not one, two, or three.") - //déclaration(s) End case ``` -A titre de comparaison, voici la version avec `If...Else...End if` de la même méthode : +For comparison, here is the `If...Else...End if` version of the same method: ```4d - If(vResult=1) //Tester si le chiffre est 1 - ALERT("One.") //Si le chiffre est 1, afficher une alerte + If(vResult=1) //Test if the number is 1 + ALERT("One.") //If it is 1, display an alert Else - If(vResult=2) //Tester si le chiffre est 2 - ALERT("Two.") //Si le chiffre est 2, afficher une alerte + If(vResult=2) //Test if the number is 2 + ALERT("Two.") //If it is 2, display an alert Else - If(vResult=3) //Tester si le chiffre est 3 - ALERT("Three.") //Si le chiffre est 3, afficher une alerte - Else //Si le chiffre n'est pas 1, 2 ou 3, afficher une alerte - ALERT("It was not one, two, or three.") + If(vResult=3) //Test if the number is 3 + ALERT("Three.") //If it is 3, display an alert + Else //If it is not 1, 2, or 3, display an alert + ALERT("It was not one, two, or three.") End if End if End if ``` -Rappelez-vous qu’avec une structure de type `Case of...Else...End case`, seul le premier cas TRUE rencontré est exécuté. Même si d’autres cas sont TRUE, seules les instructions suivant le premier cas TRUE seront prises en compte. +Remember that with a `Case of...Else...End case` structure, only the first TRUE case is executed. Even if two or more cases are TRUE, only the statements following the first TRUE case will be executed. -Par conséquent, lorsque vous testez dans la même méthode des cas simples et des cas complexes, vous devez placer les cas complexes avant les cas simples, sinon ils ne seront jamais exécutés. Par exemple, si vous souhaitez traiter le cas simple (vResult=1) et le cas complexe (vResult=1) & (vCondition#2) et que vous structurez la méthode de la manière suivante : +Consequently, when you want to implement hierarchical tests, you should make sure the condition statements that are lower in the hierarchical scheme appear first in the test sequence. For example, the test for the presence of condition1 covers the test for the presence of condition1&condition2 and should therefore be located last in the test sequence. For example, the following code will never see its last condition detected: ```4d Case of - :(vResult=1) //Tester si le chiffre est 1 - ALERT("One.") //Si le chiffre est 1, afficher une alerte - :(vResult=2) //Tester si le chiffre est 2 - ALERT("Two.") //Si le chiffre est 2, afficher une alerte - :(vResult=3) //Tester si le chiffre est 3 - ALERT("Three.") //Si le chiffre est 3, afficher une alerte - Else //Si le chiffre n'est pas 1, 2 ou 3, afficher une alerte - ALERT("It was not one, two, or three.") + :(vResult=1) + ... //statement(s) + :((vResult=1) & (vCondition#2)) //this case will never be detected + ... //statement(s) End case ``` -... les instructions associées au cas complexe ne seront jamais exécutées. En effet, pour que ce cas soit TRUE, ses deux conditions booléennes doivent l’être. Or, la première condition est celle du cas simple situé précédemment. Lorsqu'elle est TRUE, le cas simple est exécuté et 4D sort de la structure conditionnelle, sans évaluer le cas complexe. Pour que ce type de méthode fonctionne, vous devez écrire : +In the code above, the presence of the second condition is not detected since the test "vResult=1" branches off the code before any further testing. For the code to operate properly, you can write it as follows: ```4d - If(vResult=1) //Tester si le chiffre est 1 - ALERT("One.") //Si le chiffre est 1, afficher une alerte - Else - If(vResult=2) //Tester si le chiffre est 2 - ALERT("Two.") //Si le chiffre est 2, afficher une alerte - Else - If(vResult=3) //Tester si le chiffre est 3 - ALERT("Three.") //Si le chiffre est 3, afficher une alerte - Else //Si le chiffre n'est pas 1, 2 ou 3, afficher une alerte - ALERT("It was not one, two, or three.") - End if - End if - End if + Case of + :((vResult=1) & (vCondition#2)) //this case will be detected first + ... //statement(s) + :(vResult=1) + ... //statement(s) + End case ``` -**Astuce :** Il n'est pas obligatoire que des instructions soient exécutées dans toutes les alternatives. Lorsque vous développez un algorithme, ou lorsque vous poursuivez un but précis, rien ne vous empêche d'écrire : +Also, if you want to implement hierarchical testing, you may consider using hierarchical code. + +**Tip:** Branching can be performed without statements to be executed in one case or another. When developing an algorithm or a specialized application, nothing prevents you from writing: ```4d Case of - :(Expression_booléenne) - :(Expression_booléenne) - instruction(s) - ... + :(Boolean_Expression) + :(Boolean_Expression) + ... - :(Expression_booléenne) - instruction(s) + :(Boolean_Expression) + statement(s) Else - instruction(s) + statement(s) End case ``` -ou : +or: ```4d Case of - :(Expression_booléenne) - :(Expression_booléenne) - ... + :(Boolean_Expression) + :(Boolean_Expression) + statement(s) + ... - :(Expression_booléenne) - instruction(s) + :(Boolean_Expression) + statement(s) Else - instruction(s) End case ``` -ou : +or: ```4d Case of Else - instruction(s) + statement(s) End case ``` From 316229dd1707db9da76dc98596d264435663b0df Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:20:35 +0100 Subject: [PATCH 117/260] New translations cf_looping.md (French) --- .../translated_docs/fr/Concepts/cf_looping.md | 292 +++++++++--------- 1 file changed, 146 insertions(+), 146 deletions(-) diff --git a/website/translated_docs/fr/Concepts/cf_looping.md b/website/translated_docs/fr/Concepts/cf_looping.md index e54a8c0fd06f7a..9df71c97178b9b 100644 --- a/website/translated_docs/fr/Concepts/cf_looping.md +++ b/website/translated_docs/fr/Concepts/cf_looping.md @@ -4,50 +4,50 @@ title: Structures répétitives (ou "boucles") --- ## While...End while -La syntaxe de la structure répétitive (ou boucle) `While...End while` est la suivante : +The formal syntax of the `While...End while` control flow structure is: ```4d - While(Expression_booléenne) - instruction(s) + While(Boolean_Expression) + statement(s) End while ``` -Une boucle `While...End while` exécute les instructions comprises entre `While` et `End while` aussi longtemps que l’expression booléenne est TRUE. Elle teste l’expression booléenne initiale et n’entre pas dans la boucle (et donc n'exécute aucune instruction) si l’expression est à FALSE. +A `While...End while` loop executes the statements inside the loop as long as the Boolean expression is TRUE. It tests the Boolean expression at the beginning of the loop and does not enter the loop at all if the expression is FALSE. -Il est utile d’initialiser la valeur testée dans l’expression booléenne juste avant d’entrer dans la boucle `While...End while`. Initialiser la valeur signifie lui affecter un contenu approprié, généralement pour que l’expression booléenne soit TRUE et que le programme entre dans la boucle. +It is common to initialize the value tested in the Boolean expression immediately before entering the `While...End while` loop. Initializing the value means setting it to something appropriate, usually so that the Boolean expression will be TRUE and `While...End while` executes the loop. -La valeur de l'expression booléenne doit pouvoir être modifiée par un élément situé à l'intérieur de la boucle, sinon elle s'exécutera indéfiniment. La boucle suivante est sans fin car _NeverStop_ est toujours TRUE : +The Boolean expression must be set by something inside the loop or else the loop will continue forever. The following loop continues forever because _NeverStop_ is always TRUE: ```4d NeverStop:=True While(NeverStop) End while ``` -Si vous vous retrouvez dans une telle situation (où une méthode s'exécute de manière incontrôlée), vous pouvez utiliser les fonctions de débogage de 4D et remonter à la source du problème. Pour plus d'informations sur ce point, reportez-vous à la section [Débogueur](error-handling.md). +If you find yourself in such a situation, where a method is executing uncontrolled, you can use the trace facilities to stop the loop and track down the problem. For more information about tracing a method, see the [Error handling](error-handling.md) page. -### Exemple +### Example ```4d - CONFIRM("Add a new record?") //L'utilisateur souhaite-t-il ajouter un enregistrement ? //L'utilisateur souhaite-t-il ajouter un enregistrement ? - While(OK=1) // Tant que l'utilisateur accepte - ADD RECORD([aTable]) // Ajouter un nouvel enregistrement -End while // Une boucle While se termine toujours par End while + CONFIRM("Add a new record?") //The user wants to add a record? + While(OK=1) //Loop as long as the user wants to + ADD RECORD([aTable]) //Add a new record + End while //The loop always ends with End while ``` -Dans cet exemple, la valeur de la variable système `OK` est définie par la commande `CONFIRM` avant que le programme n’entre dans la boucle. Si l’utilisateur clique sur le bouton **OK** dans la boîte de dialogue de confirmation, la variable `OK` prend la valeur 1 et la boucle est exécutée. Dans le cas contraire, la variable `OK` prend la valeur 0 et la boucle est ignorée. Une fois que le programme entre dans la boucle, la commande `ADD RECORD` permet de continuer à l’exécuter car elle met la variable système `OK` à 1 lorsque l’utilisateur sauvegarde l’enregistrement. Lorsque l’utilisateur annule (ne valide pas) le dernier enregistrement, la variable système `OK` prend la valeur 0 et la boucle s’arrête. +In this example, the `OK` system variable is set by the `CONFIRM` command before the loop starts. If the user clicks the **OK** button in the confirmation dialog box, the `OK` system variable is set to 1 and the loop starts. Otherwise, the `OK` system variable is set to 0 and the loop is skipped. Once the loop starts, the `ADD RECORD` command keeps the loop going because it sets the `OK` system variable to 1 when the user saves the record. When the user cancels (does not save) the last record, the `OK` system variable is set to 0 and the loop stops. ## Repeat...Until -La syntaxe de la structure répétitive (ou boucle) `Repeat...Until` est la suivante : +The formal syntax of the `Repeat...Until` control flow structure is: ```4d Repeat - instruction(s) + statement(s) Until(Boolean_Expression) ``` -La boucle `Repeat...Until` est semblable à la boucle [While...End while](flow-control#whileend-while), à la différence qu’elle teste la valeur de l’expression booléenne après l’exécution de la boucle et non avant. Ainsi, la boucle est toujours exécutée au moins une fois, tandis que si l’expression booléenne est initialement à Faux, la boucle `While...End while` ne s’exécute pas du tout. +A `Repeat...Until` loop is similar to a [While...End while](flow-control#whileend-while) loop, except that it tests the Boolean expression after the loop rather than before. Thus, a `Repeat...Until` loop always executes the loop once, whereas if the Boolean expression is initially False, a `While...End while` loop does not execute the loop at all. -L'autre particularité de la boucle `Repeat...Until` est qu’elle se poursuit jusqu’à ce que l’expression booléenne soit à TRUE. +The other difference with a `Repeat...Until` loop is that the loop continues until the Boolean expression is TRUE. -### Exemple -Comparez l’exemple suivant avec celui de la boucle `While...End while`. Vous constatez qu’il n’est pas nécessaire d’initialiser l’expression booléenne — il n’y a pas de commande `CONFIRM` pour initialiser la variable `OK`. +### Example +Compare the following example with the example for the `While...End while` loop. Note that the Boolean expression does not need to be initialized—there is no `CONFIRM` command to initialize the `OK` variable. ```4d Repeat @@ -56,193 +56,193 @@ Comparez l’exemple suivant avec celui de la boucle `While...End while`. Vous c ``` ## For...End for -La syntaxe de la structure répétitive `For...End for` est la suivante : +The formal syntax of the `For...End for` control flow structure is: ```4d For(Counter_Variable;Start_Expression;End_Expression{;Increment_Expression}) - instruction(s) + statement(s) End for ``` -La structure `For...End for` est une boucle contrôlée par un compteur : +The `For...End for` loop is a loop controlled by a counter variable: -- La variable compteur *Counter_Variable* est une variable numérique (Réel ou Entier long) initialisée par `For...End for` à la valeur spécifiée par *Start_Expression*. -- La variable Variable_Compteur est incrémentée de la valeur spécifiée par le paramètre optionnel *Increment_Expression* à chaque fois que la boucle est exécutée. Si vous ne passez pas de valeur dans *Increment_Expression*, la variable compteur est incrémentée par défaut de un (1). -- Lorsque le compteur atteint la valeur définie par *End_Expression*, la boucle s'arrête. +- The counter variable *Counter_Variable* is a numeric variable (Real or Long Integer) that the `For...End for` loop initializes to the value specified by *Start_Expression*. +- Each time the loop is executed, the counter variable is incremented by the value specified in the optional value *Increment_Expression*. If you do not specify *Increment_Expression*, the counter variable is incremented by one (1), which is the default. +- When the counter variable passes the *End_Expression* value, the loop stops. -**Important :** Les expressions numériques *Start_Expression*, *End_Expression* et *Increment_Expression* sont évaluées une seule fois, au début de la boucle. Si ces expressions sont des variables, leur modification depuis l'intérieur de la boucle n'affectera pas l'exécution de la boucle. +**Important:** The numeric expressions *Start_Expression*, *End_Expression* and *Increment_Expression* are evaluated once at the beginning of the loop. If these expressions are variables, changing one of these variables within the loop will not affect the loop. -**Astuce :** En revanche, vous pouvez, si vous le souhaitez, modifier la valeur de la variable *Counter_Variable* depuis l'intérieur de la boucle et cela affectera l'exécution de la boucle. +**Tip:** However, for special purposes, you can change the value of the counter variable *Counter_Variable* within the loop; this will affect the loop. -- Généralement, *Start_Expression* est inférieure à *End_Expression*. -- Si les deux expressions sont égales, la boucle ne sera exécutée qu'une fois. -- Si *Start_Expression* est supérieure à *End_Expression*, la boucle ne s'exécutera pas du tout, à moins que vous ne spécifiiez une *Increment_Expression* négative. Reportez-vous ci-dessous au paragraphe décrivant ce point. +- Usually *Start_Expression* is less than *End_Expression*. +- If *Start_Expression* and *End_Expression* are equal, the loop will execute only once. +- If *Start_Expression* is greater than *End_Expression*, the loop will not execute at all unless you specify a negative *Increment_Expression*. See the examples. -### Exemples élémentaires -1. La boucle suivante s'exécute 100 fois : +### Basic examples +1. The following example executes 100 iterations: ```4d For(vCounter;1;100) - //Faire quelque chose + //Do something End for ``` -2. L'exemple suivant permet de traiter tous les éléments du tableau anArray : +2. The following example goes through all elements of the array anArray: ```4d For($vlElem;1;Size of array(anArray)) - //Faire quelque chose avec l'élément + //Do something with the element anArray{$vlElem}:=... End for ``` -3. L'exemple suivant permet d'examiner chaque caractère du texte vtSomeText : +3. The following example goes through all the characters of the text vtSomeText: ```4d For($vlChar;1;Length(vtSomeText)) - //Faire quelque chose avec le caractère si c'est une tabulation + //Do something with the character if it is a TAB If(Character code(vtSomeText[[$vlChar]])=Tab) //... End if End for ``` -4. L'exemple suivant permet de traiter tous les enregistrements de la sélection de la table [aTable] : +4. The following example goes through the selected records for the table [aTable]: ```4d FIRST RECORD([aTable]) For($vlRecord;1;Records in selection([aTable])) - //Faire quelque chose avec chaque enregistrement + //Do something with the record SEND RECORD([aTable]) //... - // Passer à l'enregistrement suivant + //Go to the next record NEXT RECORD([aTable]) End for ``` -La plupart des structures `For...End for` que vous écrirez dans vos projets ressembleront à celles présentées ci-dessus. +Most of the `For...End for` loops you will write in your projects will look like the ones listed in these examples. -### Décrémenter la variable Compteur +### Decrementing variable counter -Dans certains cas, vous pouvez souhaiter disposer d'une boucle dont la valeur de la variable compteur décroît au lieu de croître. Pour cela, *Start_Expression* doit être supérieure à *End_Expression* et *Increment_Expression* doit être négative. Les exemples suivants effectuent les mêmes tâches que les précédents, mais en sens inverse : +In some cases, you may want to have a loop whose counter variable is decreasing rather than increasing. To do so, you must specify *Start_Expression* greater than *End_Expression* and a negative *Increment_Expression*. The following examples do the same thing as the previous examples, but in reverse order: -5. La boucle suivante s'exécute 100 fois : +5. The following example executes 100 iterations: ```4d For(vCounter;100;1;-1) - //Faire quelque chose + //Do something End for ``` -6. L'exemple suivant permet de traiter tous les éléments du tableau anArray : +6. The following example goes through all elements of the array anArray: ```4d For($vlElem;Size of array(anArray);1;-1) - //Faire quelque chose avec l'élément + //Do something with the element anArray{$vlElem}:=... End for ``` -7. L'exemple suivant permet d'examiner chaque caractère du texte vtSomeText : +7. The following example goes through all the characters of the text vtSomeText: ```4d For($vlChar;Length(vtSomeText);1;-1) - //Faire quelque chose avec le caractère si c'est une tabulation + //Do something with the character if it is a TAB If(Character code(vtSomeText[[$vlChar]])=Tab) //... End if End for ``` -8. L'exemple suivant permet de traiter tous les enregistrements de la sélection de la table [aTable] : +8. The following example goes through the selected records for the table [aTable]: ```4d LAST RECORD([aTable]) For($vlRecord;Records in selection([aTable]);1;-1) - //Faire quelque chose avec chaque enregistrement + //Do something with the record SEND RECORD([aTable]) //... - //Passer à l'enregistrement précédent + //Go to the previous record PREVIOUS RECORD([aTable]) End for ``` -### Incrementer la variable compteur de plus de 1 +### Incrementing the counter variable by more than one -Si vous le souhaitez, vous pouvez passer dans *Increment_Expression* une valeur (positive ou négative) dont la valeur absolue est supérieure à un. +If you need to, you can use an *Increment_Expression* (positive or negative) whose absolute value is greater than one. -9. La boucle suivante ne traite que les éléments pairs du tableau anArray : +9. The following loop addresses only the even elements of the array anArray: ```4d For($vlElem;2;Size of array(anArray);2) - //Faire quelque chose avec l'élément 2,4...2n + //Do something with the element #2,#4...#2n anArray{$vlElem}:=... End for ``` -### Comparaison des structures répétitives +### Comparing looping structures -Revenons au premier exemple `For...End for`. La boucle suivante s'exécute 100 fois : +Let's go back to the first `For...End for` example. The following example executes 100 iterations: ```4d For(vCounter;1;100) - //Faire quelque chose + //Do something End for ``` -Il est intéressant d'examiner la manière dont les boucles `While...End while` et `Repeat...Until` effectuent la même action. Voici la boucle `While...End while` équivalente : +It is interesting to see how the `While...End while` loop and `Repeat...Until` loop would perform the same action. Here is the equivalent `While...End while` loop: ```4d - $i :=1 // Initialisation du compteur -While ($i<=100) // Boucle 100 fois - // Faire quelque chose - $i :=$i +1 // Il faut incrémenter le compteur + $i:=1 //Initialize the counter + While($i<=100) //Loop 100 times + //Do something + $i:=$i+1 //Need to increment the counter End while ``` -Voici la boucle `Repeat...Until` équivalente : +Here is the equivalent `Repeat...Until` loop: ```4d - $i :=1 // Initialisation du compteur + $i:=1 //Initialize the counter Repeat - // Faire quelque chose - $i :=$i +1 // Il faut incrémenter le compteur -Until($i=100) // Boucle 100 fois + //Do something + $i:=$i+1 //Need to increment the counter + Until($i=100) //Loop 100 times ``` -**Astuce :** La boucle `For...End for` est généralement plus rapide que les boucles `While...End while` et `Repeat...Until` car 4D teste la condition en interne pour chaque cycle de la boucle et incrémente lui-même le compteur. Par conséquent, nous vous conseillons de préférer à chaque fois que c'est possible la structure `For...End for`. +**Tip:** The `For...End for` loop is usually faster than the `While...End while` and `Repeat...Until` loops, because 4D tests the condition internally for each cycle of the loop and increments the counter. Therefore, use the `For...End for` loop whenever possible. -### Optimiser l'exécution de For...End for +### Optimizing the execution of the For...End for loops -Vous pouvez utiliser comme compteur une variable interprocess, process ou locale, et lui attribuer le type Réel, Entier ou Entier long. Pour des boucles longues, et particulièrement en mode compilé, nous vous conseillons d'employer des variables locales de type Entier long. +You can use Real and Long Integer variables as well as interprocess, process, and local variable counters. For lengthy repetitive loops, especially in compiled mode, use local Long Integer variables. -10. Voici un exemple : +10. Here is an example: ```4d - C_LONGINT($vlCounter) // Utilisons une variable locale de type Entier long -For($vlCounter;1;10000) - // Faire quelque chose - End for + C_LONGINT($vlCounter) //use local Long Integer variables + For($vlCounter;1;10000) + //Do something + End for ``` -### Structures For...End emboîtées +### Nested For...End for looping structures -Vous pouvez emboîter autant de structures répétitives que vous voulez (dans les limites du raisonnable). Cela s'applique aux structures de type `For...End for`. Il y a dans ce cas une erreur courante à éviter : assurez-vous d'utiliser une variable compteur différente par structure de boucle. +You can nest as many control structures as you (reasonably) need. This includes nesting `For...End for` loops. To avoid mistakes, make sure to use different counter variables for each looping structure. -Voici deux exemples : +Here are two examples: -11. L'exemple suivant permet de traiter tous les éléments d'un tableau à deux dimensions : +11. The following example goes through all the elements of a two-dimensional array: ```4d For($vlElem;1;Size of array(anArray)) //... - // Faire quelque chose avec la ligne - // ... + //Do something with the row + //... For($vlSubElem;1;Size of array(anArray{$vlElem})) - //Faire quelque chose avec l'élément + //Do something with the element anArray{$vlElem}{$vlSubElem}:=... End for End for ``` -12. L'exemple suivant construit un tableau de pointeurs vers tous les champs de type Date présents dans la base : +12. The following example builds an array of pointers to all the date fields present in the database: ```4d ARRAY POINTER($apDateFields;0) @@ -264,51 +264,51 @@ Voici deux exemples : ``` ## For each...End for each -La syntaxe de la structure répétitive (ou boucle) `For each...End for each` est la suivante : +The formal syntax of the `For each...End for each` control flow structure is: ```4d - For each(Element_courant;Expression{;debut{;fin}}){Until|While}(Expression_booléenne)} - instruction(s) + For each(Current_Item;Expression{;begin{;end}}){Until|While}(Boolean_Expression)} + statement(s) End for each ``` -La structure `For each...End for each` exécute le cycle d'instructions définies pour chaque *Elément_courant* de *Expression*. Le type de *Elément_courant* dépend du type de *Expression*. La boucle `For each...End for each` peut itérer parmi trois types d'*Expression* : +The `For each...End for each` structure iterates a specified *Current_item* over all values of the *Expression*. The *Current_item* type depends on the *Expression* type. The `For each...End for each` loop can iterate through three *Expression* types: -- collections : boucle sur chaque élément de la collection, -- entity selections : boucle sur chaque entity, -- objets : boucle sur chaque propriété d'objet. +- collections: loop through each element of the collection, +- entity selections: loop through each entity, +- objects: loop through each object property. -Le tableau suivant compare les trois types de `Pour chaque...Fin de chaque` : +The following table compares the three types of `For each...End for each`: -| | Boucle sur collections | Boucle sur entity selections | Boucle sur objets | -| ----------------------------------------- | ------------------------------------------------------- | ---------------------------------- | ----------------------------- | -| Type Elément_courant | Variable du même type que les éléments de la collection | Entity | Variable texte | -| Types d’expressions | Collection (avec des éléments du même type) | Entity selection | Objet | -| Nombre de boucles (par défaut) | Nombre d'éléments de la collection | Nombre d'entités dans la sélection | Nombre de propriétés d'objets | -| Prise en charge de Paramètres début / fin | Oui | Oui | Non | +| | Loop through collections | Loop through entity selections | Loop through objects | +| --------------------------------- | ------------------------------------------------ | ----------------------------------- | --------------------------- | +| Current_Item type | Variable of the same type as collection elements | Entity | Text variable | +| Expression type | Collection (with elements of the same type) | Entity selection | Objet | +| Number of loops (by default) | Number of collection elements | Number of entities in the selection | Number of object properties | +| Support of begin / end parameters | Yes | Yes | No | -- Le nombre de boucles est évalué au démarrage et ne changera pas en cours de traitement. L'ajout ou la suppression d'éléments pendant la boucle est donc déconseillé car il pourra en résulter une redondance ou un manque d'itérations. -- Par défaut, les _instructions_ incluses sont exécutées pour chaque valeur de *Expression*. Il est toutefois possible de sortir de la boucle en testant une condition soit au début de chaque itération (`While`) ou à la fin de chaque itération (`Until`). -- Les paramètres optionnels *début* et *fin* peuvent être utilisés avec les collections et les entity selections afin de définir des bornes pour la boucle. -- La boucle `For each...End for each` peut être utilisée sur une **collection partagée** ou un **objet partagé**. Si vous souhaitez modifier un ou plusieurs éléments des propriétés d'objets ou de la collection dans le code, vous devez utiliser les mots-clés `Use...End use`. Vous pouvez, si vous le souhaitez, appeler les mots-clés `Use...End use` : - - avant de saisir la boucle, si les éléments doivent être modifiés ensemble pour des raisons d'intégrité, ou bien - - dans la boucle, lorsque quelques éléments/propriétés seulement doivent être modifiés et qu'aucune gestion de l'intégrité n'est requise. +- The number of loops is evaluated at startup and will not change during the processing. Adding or removing items during the loop is usually not recommended since it may result in missing or redundant iterations. +- By default, the enclosed _statement(s)_ are executed for each value in *Expression*. It is, however, possible to exit the loop by testing a condition either at the begining of the loop (`While`) or at the end of the loop (`Until`). +- The *begin* and *end* optional parameters can be used with collections and entity selections to define boundaries for the loop. +- The `For each...End for each` loop can be used on a **shared collection** or a **shared object**. If your code needs to modify one or more element(s) of the collection or object properties, you need to use the `Use...End use` keywords. Depending on your needs, you can call the `Use...End use` keywords: + - before entering the loop, if items should be modified together for integrity reasons, or + - within the loop when only some elements/properties need to be modified and no integrity management is required. -### Boucle sur collections +### Loop through collections -Lorsque `For each...End for each` est utilisée avec une _Expression_ de type _Collection_, le paramètre _Elément_courant_ est une variable du même type que les éléments de la collection. Par défaut, le nombre de boucles est basé sur le nombre d'éléments de la collection. +When `For each...End for each` is used with an _Expression_ of the _Collection_ type, the _Current_Item_ parameter is a variable of the same type as the collection elements. By default, the number of loops is based on the number of items of the collection. -La collection doit contenir uniquement des éléments du même type. Dans le cas contraire, une erreur sera retournée dès que la première valeur de type différent sera assignée à la variable _Elément_courant_. +The collection must contain only elements of the same type, otherwise an error will be returned as soon as the _Current_Item_ variable is assigned the first mismatched value type. -A chaque itération de la boucle, la variable _Elément_courant_ reçoit automatiquement l'élément correspondant de la collection. Vous devez tenir compte des points suivants : +At each loop iteration, the _Current_Item_ variable is automatically filled with the matching element of the collection. The following points must be taken into account: -- La variable _Elément_courant_ doit être du même type que les éléments de la collection. Si un seul élément de la collection n'est pas du même type que la variable, une erreur est générée et la boucle s'arrête. -- Si la variable _Elément_courant_ est de type objet ou collection (i.e. Si un seul élément de la collection n'est pas du même type que la variable, une erreur est générée et la boucle s'arrête. -- Si la collection contient des éléments de valeur **Null**, une erreur sera générée si le type de la variable _Elément_courant_ ne prend pas en charge la valeur **Null** (comme par exemple les variables entier long). +- If the _Current_Item_ variable is of the object type or collection type (i.e. if _Expression_ is a collection of objects or of collections), modifying this variable will automatically modify the matching element of the collection (because objects and collections share the same references). If the variable is of a scalar type, only the variable will be modified. +- The _Current_Item_ variable must be of the same type as the collection elements. If any collection item is not of the same type as the variable, an error is generated and the loop stops. +- If the collection contains elements with a **Null** value, an error will be generated if the _Current_Item_ variable type does not support **Null** values (such as longint variables). -#### Exemple +#### Example -Vous souhaitez calculer quelques statistiques sur une collection de nombres : +You want to compute some statistics for a collection of numbers: ```4d C_COLLECTION($nums) $nums:=New collection(10;5001;6665;33;1;42;7850) @@ -330,19 +330,19 @@ Vous souhaitez calculer quelques statistiques sur une collection de nombres : //$vUnder=4,$vOver=2 ``` -### Boucle sur entity selections +### Loop through entity selections -Lorsque `For each...End for each` est utilisée avec une _Expression_ de type _Entity selection_, le paramètre _Elément_courant_ contient l'entity en cours de traitement. +When `For each...End for each` is used with an _Expression_ of the _Entity selection_ type, the _Current_Item_ parameter is the entity that is currently processed. -Le nombre de boucles est basé sur le nombre d'entities présentes dans l'entity selection. A chaque itération de la boucle, le paramètre *Elément_courant* reçoit automatiquement l'entity qui est en cours de traitement. +The number of loops is based on the number of entities in the entity selection. On each loop iteration, the *Current_Item* parameter is automatically filled with the entity of the entity selection that is currently processed. -**Note :** Si l'entity selection contient une entity qui a été supprimée entre-temps par un autre process, elle est automatiquement ignorée durant la boucle. +**Note:** If the entity selection contains an entity that was removed meanwhile by another process, it is automatically skipped during the loop. -N'oubliez pas que toute modification effectuée sur l'entity en cours de traitement doit être explicitement sauvegardée (si nécessaire) à l'aide de la méthode `entity.save( )`. +Keep in mind that any modifications applied on the current entity must be saved explicitly using `entity.save( )`. -#### Exemple +#### Example -Vous souhaitez augmenter le salaire de tous les employés britanniques dans une entity selection : +You want to raise the salary of all British employees in an entity selection: ```4d C_OBJECT(emp) For each(emp;ds.Employees.query("country='UK'")) @@ -351,15 +351,15 @@ Vous souhaitez augmenter le salaire de tous les employés britanniques dans une End for each ``` -### Boucles sur des propriétés d'objets +### Loop through object properties -Lorsque `For each...End for each` est utilisée avec une *Expression* de type Objet, le paramètre *Elément_courant* est une variable texte qui reçoit automatiquement le nom de la propriété en cours de traitement. +When `For each...End for each` is used with an *Expression* of the Object type, the *Current_Item* parameter is a text variable automatically filled with the name of the currently processed property. -Les propriétés de l'objet sont itérées en fonction de leur ordre de création. Pendant la boucle, il est possible d'ajouter ou de supprimer des propriétés dans l'objet, sans pour autant modifier le nombre de boucles qui reste basé sur le nombre de propriétés initial de l'objet. +The properties of the object are processed according to their order of creation. During the loop, properties can be added to or removed from the object, without modifying the number of loops that will remain based on the original number of properties of the object. -#### Exemple +#### Example -Vous souhaitez passer en majuscules les propriétés contenant des noms dans l'objet suivant : +You want to switch the names to uppercase in the following object: ```4d { "firstname": "gregory", @@ -367,7 +367,7 @@ Vous souhaitez passer en majuscules les propriétés contenant des noms dans l'o "age": 20 } ``` -Vous pouvez écrire : +You can write: ```4d For each(property;vObject) If(Value type(vObject[property])=Is text) @@ -382,23 +382,23 @@ Vous pouvez écrire : "age": 20 } ``` -### Paramètres début / fin +### begin / end parameters -Vous pouvez définir des bornes pour l'itération à l'aide des paramètres optionnels début et fin. +You can define bounds to the iteration using the optional begin and end parameters. -**Note :** Les paramètres *début* et *fin* sont utilisables uniquement avec les boucles sur des collections et des entity selections (ils sont ignorés avec les boucles sur des propriétés d'objets). +**Note:** The *begin* and *end* parameters can only be used in iterations through collections and entity selections (they are ignored on object properties). -- Dans le paramètre *début*, passez la position de l'élément de *Expression* auquel démarrer l'itération (*début* est inclus). -- Dans le paramètre *fin*, vous pouvez passer la position de l'élément de *Expression* auquel stopper l'itération (*fin* est exclus). +- In the *begin* parameter, pass the element position in *Expression* at which to start the iteration (*begin* is included). +- In the *end* parameter, you can also pass the element position in *Expression* at which to stop the iteration (*end* is excluded). -Si *fin* est omis ou si *fin* est plus grand que le nombre d'éléments de *Expression*, les éléments sont itérés depuis *début* jusqu'au dernier inclus. Si les paramètres *début* et *fin* sont des valeurs positives, ils représentent des positions d'éléments dans *Expression*. Si *begin* est une valeur négative, elle est recalculée comme `begin:=begin+Taille expression` (elle est considérée comme un décalage à partir de la fin de *Expression*). Si la valeur calculée est négative, *begin* prend la valeur 0. **Note :** Même si début est une valeur négative, l'itération est toujours effectuée dans le même ordre. Si *fin* est une valeur négative, elle est recalculée comme `fin:=fin+Taille expression` +If *end* is omitted or if *end* is greater than the number of elements in *Expression*, elements are iterated from *begin* until the last one (included). If the *begin* and *end* parameters are positive values, they represent actual positions of elements in *Expression*. If *begin* is a negative value, it is recalculed as `begin:=begin+Expression size` (it is considered as the offset from the end of *Expression*). If the calculated value is negative, *begin* is set to 0. **Note:** Even if begin is negative, the iteration is still performed in the standard order. If *end* is a negative value, it is recalculed as `end:=end+Expression size` -Par exemple: -- une collection contient 10 éléments (numérotés de 0 à 9) -- début=-4 > début=-4+10=6 > l'itération démarre au 6e élément (numéro 5) -- fin=-2 > fin=-2+10=8 > l'itération stoppe avant le 8e élément (numéro 7), i.e. +For example: +- a collection contains 10 elements (numbered from 0 to 9) +- begin=-4 -> begin=-4+10=6 -> iteration starts at the 6th element (#5) +- end=-2 -> end=-2+10=8 -> iteration stops before the 8th element (#7), i.e. at the 7th element. -#### Exemple +#### Example ```4d C_COLLECTION($col;$col2) @@ -414,27 +414,27 @@ Par exemple: End for each //$col2=[1,2,3,"a","b","c","d"] ``` -### Conditions Until et While -Vous pouvez contrôler l'exécution de `For each...End for each` en ajoutant une condition `Jusque` ou `Tant que` à la boucle. When an `Until(condition)` statement is associated to the loop, the iteration will stop as soon as the condition is evaluated to `True`, whereas when is case of a `While(condition)` statement, the iteration will stop when the condition is first evaluated to `False`. +### Until and While conditions +You can control the `For each...End for each` execution by adding an `Until` or a `While` condition to the loop. When an `Until(condition)` statement is associated to the loop, the iteration will stop as soon as the condition is evaluated to `True`, whereas when is case of a `While(condition)` statement, the iteration will stop when the condition is first evaluated to `False`. -Vous pouvez passer un mot-clé ou l'autre en fonction de vos besoins : +You can pass either keyword depending on your needs: -- La condition `Until` est testée à la fin de chaque itération, donc si *Expression* n'est ni vide ni Null, la boucle sera exécutée au moins une fois. -- La condition `While` est testée au début de chaque itération, donc en fonction du résultat de la condition, la boucle peut ne pas être exécutée du tout. +- The `Until` condition is tested at the end of each iteration, so if the *Expression* is not empty or null, the loop will be executed at least once. +- The `While` condition is tested at the beginning of each iteration, so according to the condition result, the loop may not be executed at all. -#### Exemple +#### Example ```4d $colNum:=New collection(1;2;3;4;5;6;7;8;9;10) $total:=0 - For each($num;$colNum)While($total<30) //testé au début + For each($num;$colNum)While($total<30) //tested at the beginning $total:=$total+$num End for each ALERT(String($total)) //$total = 36 (1+2+3+4+5+6+7+8) $total:=1000 - For each($num;$colNum)Until($total>30) //testé à la fin + For each($num;$colNum)Until($total>30) //tested at the end $total:=$total+$num End for each ALERT(String($total)) //$total = 1001 (1000+1) From fe2ea8f7d5f19a7e42c7e148016017fd6f4dc0e9 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:20:38 +0100 Subject: [PATCH 118/260] New translations classes.md (French) --- .../translated_docs/fr/Concepts/classes.md | 326 ++++++++---------- 1 file changed, 151 insertions(+), 175 deletions(-) diff --git a/website/translated_docs/fr/Concepts/classes.md b/website/translated_docs/fr/Concepts/classes.md index 834f2ab787d07a..3a705997e2ede4 100644 --- a/website/translated_docs/fr/Concepts/classes.md +++ b/website/translated_docs/fr/Concepts/classes.md @@ -6,32 +6,32 @@ title: Classes ## Aperçu -Le langage 4D prend en charge le concept de **classes**. Dans un langage de programmation, l'utilisation d'une classe vous permet de définir le comportement d'un objet avec des propriétés et des fonctions associées. +The 4D language supports the concept of **classes**. In a programming language, using a class allows you to define an object behaviour with associated properties and functions. -Une fois qu'une classe est définie, vous pouvez **instancier** des objets de cette classe n'importe où dans votre code. Chaque objet est une instance de sa classe. Une classe peut `s'étendre` à une autre classe, puis hériter de ses fonctions. +Once a class is defined, you can **instantiate** objects of this class anywhere in your code. Each object is an instance of its class. A class can `extend` another class, and then inherits from its functions. -Les modèles de classe 4D et de classe JavaScript sont similaires, et sont basés sur une chaîne de prototypes. +The class model in 4D is similar to classes in JavaScript, and based on a chain of prototypes. -### L'objet classe +### Class object -Une classe est un objet de classe "Class". Un objet de classe a les propriétés et méthodes suivantes : +A class is an object itself, of "Class" class. A class object has the following properties and methods: -- `name` qui doit être conforme à ECMAScript -- un objet `superclass` (facultatif, nul s'il n'y en a aucun) -- une méthode `new()` permettant d'instancier des objets de classe. +- `name` which must be ECMAScript compliant +- `superclass` object (optional, null if none) +- `new()` method, allowing to instantiate class objects. -De plus, un objet de classe peut référencer : -- un objet `constructeur` (facultatif) -- un objet `prototype`, contenant des objets de fonction nommés (facultatif). +In addition, a class object can reference: +- a `constructor` object (optional) +- a `prototype` object, containing named function objects (optional). -Un objet de classe est un objet partagé et est donc accessible simultanément à partir de différents processus 4D. +A class object is a shared object and can therefore be accessed from different 4D processes simultaneously. -### Recherche et prototype des propriétés +### Property lookup and prototype -Tous les objets de 4D sont liés en interne à un objet de classe. Lorsque 4D ne trouve pas de propriété dans un objet, il effectue un recherche dans l'objet prototype de sa classe; s'il ne la trouve pas, 4D poursuit sa recherche dans l'objet prototype de sa classe mère (superclass), et ainsi de suite jusqu'à ce qu'il n'y ait plus de superclass. +All objects in 4D are internally linked to a class object. When 4D does not find a property in an object, it searches in the prototype object of its class; if not found, 4D continues searching in the prototype object of its superclass, and so on until there is no more superclass. -Tous les objets héritent de la classe "Object" comme classe supérieure d'arbre d'héritage. +All objects inherit from the class "Object" as their inheritance tree top class. ```4d //Class: Polygon @@ -49,13 +49,13 @@ $instance:=OB Instance of($poly;4D.Object) // true ``` -Lors de l'énumération des propriétés d'un objet, son prototype de classe n'est pas énuméré. Par conséquent, l'instruction `For each` et la commande `JSON Stringify` ne retournent pas les propriétés de l'objet du prototype de classe. La propriété d'objet prototype d'une classe est une propriété cachée interne. +When enumerating properties of an object, its class prototype is not enumerated. As a consequence, `For each` statement and `JSON Stringify` command do not return properties of the class prototype object. The prototype object property of a class is an internal hidden property. -### Définition d'une classe +### Class definition -Un fichier de classe utilisateur définit un modèle d'objet qui peut être instancié dans le code de la base de données en appelant la méthode membre de la classe `new()`. Vous utiliserez généralement des [mots-clés de classe](#class-keywords) et des [commandes de classe](#class-commands) spécifiques dans le fichier de classe. +A user class file defines a model of object that can be instantiated in the database code by calling the `new()` class member method. You will usually use specific [class keywords](#class-keywords) and [class commands](#class-commands) in the class file. -Par exemple : +For example: ```4d //Class: Person.4dm @@ -66,7 +66,7 @@ Class constructor This.lastName:=$2 ``` -Dans une méthode, créons une "Personne" : +In a method, creating a "Person": ``` C_OBJECT($o) @@ -74,14 +74,14 @@ $o:=cs.Person.new("John";"Doe") // $o: {firstName: "John";lastName: "Doe" } ``` -A noter que vous pouvez créer un fichier de classe vide et instancier des objets vides. Par exemple, si vous créez le fichier de classe `Empty.4dm suivant` : +Note that you could create an empty class file, and instantiate empty objects. For example, if you create the following `Empty.4dm` class file: ```4d -//Fichier classe Empty.4dm -//Rien +//Empty.4dm class file +//Nothing ``` -Vous pouvez saisir dans une méthode : +You could write in a method: ```4d @@ -93,103 +93,103 @@ $cName:=OB Class($o).name //"Empty" ## Class stores -Les classes disponibles sont accessibles depuis leurs class stores. Les class stores suivants sont disponibles : +Available classes are accessible from their class stores. The following class stores are available: -- un class store pour les classes 4D intégrées. Il est retourné par la commande `4D`. -- un class store pour chaque base de données ou composant ouvert(e). Il est retourné par la commande `cs`. Ce sont des "classes d'utilisateurs" (user classes). +- a class store for built-in 4D classes. It is returned by the `4D` command. +- a class store for each opened database or component. It is returned by the `cs` command. These are "user classes". -Par exemple, vous créez une nouvelle instance d'un objet de myClass à l'aide de l'instruction `cs.myClass.new()` (`cs` signifie *classtore*). +For example, you create a new instance of an object of myClass using the `cs.myClass.new()` statement (`cs` means *classtore*). -## Gestion des classes utilisateur +## Handling user classes -### Fichiers de classe (class files) +### Class files -Une classe utilisateur dans 4D est définie par un fichier de méthode spécifique (.4dm), stocké dans le dossier `/Project/Sources/Classes/`. Le nom du fichier est le nom de la classe. +A user class in 4D is defined by a specific method file (.4dm), stored in the `/Project/Sources/Classes/` folder. The name of the file is the class name. -Par exemple, si vous souhaitez définir une classe nommée "Polygon", vous devez créer le fichier suivant : +For example, if you want to define a class named "Polygon", you need to create the following file: -- Dossier Project +- Project folder + Project * Sources - Classes + Polygon.4dm -### Noms de classe +### Class names -Lorsque vous nommez des classes, gardez à l'esprit les règles suivantes : +When naming classes, you should keep in mind the following rules: -- Un nom de classe doit être conforme à ECMAScript. -- Les noms de classe sont sensibles à la casse. -- Il n'est pas recommandé de donner le même nom à une classe et à une table de base de données, afin d'éviter tout conflit. +- A class name must be ECMAScript compliant. +- Class names are case sensitive. +- Giving the same name to a class and a database table is not recommended, in order to prevent any conflict. -### Interface 4D Developer +### 4D Developer interface -Les fichiers de classe sont automatiquement stockés à l'emplacement approprié lorsqu'ils sont créés via l'interface de 4D Developer, soit via le menu **Fichier**, soit via l'Explorateur. +Class files are automatically stored at the appropriate location when created through the 4D Developer interface, either via the **File** menu or the Explorer. -#### Menu Fichier et barre d'outils +#### File menu and toolbar -Vous pouvez créer un nouveau fichier de classe pour le projet en sélectionnant **Nouveau> Classe...** dans le menu **Fichier** de 4D Developer ou dans la barre d'outils. +You can create a new class file for the project by selecting **New > Class...** in the 4D Developer **File** menu or from the toolbar. -Vous pouvez également utiliser le raccourci **Ctrl+Maj+Alt+k**. +You can also use the **Ctrl+Shift+Alt+k** shortcut. -#### Explorateur +#### Explorer -Dans la page **Méthodes** de l'Explorateur, les classes sont regroupées dans la catégorie **Classes**. +In the **Methods** page of the Explorer, classes are grouped in the **Classes** category. -Pour créer une nouvelle classe, vous pouvez : +To create a new class, you can: -- sélectionnez la catégorie **Classes** et cliquez sur le bouton ![](assets/en/Users/PlussNew.png). -- sélectionnez **Nouvelle classe...** dans le menu d'actions en bas de la fenêtre de l'Explorateur ou dans le menu contextuel du groupe Classes. ![](assets/en/Concepts/newClass.png) -- sélectionnez **Nouveau> Classe...** dans le menu contextuel de la page d'accueil de l'Explorateur. +- select the **Classes** category and click on the ![](assets/en/Users/PlussNew.png) button. +- select **New Class...** from the action menu at the bottom of the Explorer window, or from the contexual menu of the Classes group. ![](assets/en/Concepts/newClass.png) +- select **New > Class...** from the contexual menu of the Explorer's Home page. -#### Prise en charge du code de classe +#### Class code support -Dans les différentes fenêtres de 4D Developer (éditeur de code, compilateur, débogueur, explorateur d'exécution), le code de classe est essentiellement géré comme une méthode projet avec quelques spécificités : +In the various 4D Developer windows (code editor, compiler, debugger, runtime explorer), class code is basically handled like a project method with some specificities: -- Dans l'éditeur de code : - - une classe ne peut pas être exécutée - - une fonction de classe est un bloc de code - - **Goto definition** sur un objet membre recherche des déclarations de fonction de classe; par exemple, "$o.f()" donnera comme résultat de recherche "Fonction f". - - **Search references** sur la déclaration de fonction de classe recherche la fonction utilisée comme membre d'objet; par exemple, "Fonction f" donnera comme résultat "$o.f()". -- Dans l'explorateur d'exécution et le Débogueur, les fonctions de classe sont affichées avec le format \ constructor ou \. \ . +- In the code editor: + - a class cannot be run + - a class function is a code block + - **Goto definition** on an object member searches for class Function declarations; for example, "$o.f()" will find "Function f". + - **Search references** on class function declaration searches for the function used as object member; for example, "Function f" will find "$o.f()". +- In the Runtime explorer and Debugger, class functions are displayed with the \ constructor or \.\ format. -### Supprimer une classe +### Deleting a class -Pour supprimer une classe existante, vous pouvez : +To delete an existing class, you can: -- sur votre disque, supprimer le fichier de classe .4dm du dossier "Classes", -- dans l'Explorateur, sélectionner la classe et cliquer sur ![](assets/en/Users/MinussNew.png) ou choisir **Déplacer vers la corbeille** dans le menu contextuel. +- on your disk, remove the .4dm class file from the "Classes" folder, +- in the Explorer, select the class and click ![](assets/en/Users/MinussNew.png) or choose **Move to Trash** from the contextual menu. -## Mots-clés de classe +## Class keywords -Des mots-clés 4D spécifiques peuvent être utilisés dans les définitions de classe : +Specific 4D keywords can be used in class definitions: -- `Fonction ` pour définir les méthodes membres des objets. -- `Class constructor` (constructeur de classe) pour définir les propriétés des objets (c'est-à-dire le prototype). -- `Class extends ` pour définir l'héritage. +- `Function ` to define member methods of the objects. +- `Class constructor` to define the properties of the objects (i.e. the prototype). +- `Class extends ` to define inheritance. -### Fonction de classe (class function) +### Class Function -#### Syntaxe +#### Syntax ```js -Fonction +Function // code ``` -Les fonctions de classe sont des propriétés de l'objet prototype de la classe propriétaire. Ce sont des objets de la classe "Function". +Class functions are properties of the prototype object of the owner class. They are objects of the "Function" class. -Dans le fichier de définition de classe, les déclarations de fonction utilisent le mot-clé `Function`, et le nom de la fonction. Le nom de la fonction doit être conforme à ECMAScript. +In the class definition file, function declarations use the `Function` keyword, and the name of the function. The function name must be ECMAScript compliant. -Dans une fonction de classe, `This` est utilisé comme instance d'objet. Par exemple : +Within a class function, the `This` is used as the object instance. For example: ```4d -Fonction getFullName +Function getFullName C_TEXT($0) $0:=This.firstName+" "+Uppercase(This.lastName) @@ -198,11 +198,11 @@ Function getAge $0:=(Current date-This.birthdate)/365.25 ``` -Pour une fonction de classe, la commande `Current method name` retourne: "*\.\*", par exemple "MyClass.myMethod". +For a class function, the `Current method name` command returns: "*\.\*", for example "MyClass.myMethod". -Dans le code de l'application, les fonctions de classe sont appelées en tant que méthodes membres de l'instance d'objet et peuvent recevoir des paramètres le cas échéant. Les syntaxes suivantes sont prises en charge : +In the application code, class functions are called as member methods of the object instance and can receive parameters if any. The following syntaxes are supported: -- utilisation de l'opérateur `()`. For example `myObject.methodName("hello")`. +- use of the `()` operator. For example `myObject.methodName("hello")`. - use of a "Function" class member methods - `apply()` - `call()` @@ -286,58 +286,54 @@ $o:=cs.MyClass.new("HelloWorld") Class extends ``` -The `Class extends` keyword is used in class declaration to create a user class which is a child of another user class. La classe enfant hérite de toutes les fonctions de la classe parente. +The `Class extends` keyword is used in class declaration to create a user class which is a child of another user class. The child class inherits all functions of the parent class. -L'extension de classe doit respecter les règles suivantes : +Class extension must respect the following rules: -- Une classe utilisateurs ne peut pas étendre une classe intégrée (sauf 4D.Object qui est étendu par défaut pour les classes d'utilisateurs) -- Une classe utilisateurs ne peut pas étendre une classe utilisateurs à partir d'un autre projet ou composant. -- Une classe utilisateurs ne peut pas s'étendre. -- Il n'est pas possible d'étendre les classes de manière circulaire (c'est-à-dire "a" étend "b" qui étend "a"). +- A user class cannot extend a built-in class (except 4D.Object which is extended by default for user classes) +- A user class cannot extend a user class from another project or component. +- A user class cannot extend itself. +- It is not possible to extend classes in a circular way (i.e. "a" extends "b" that extends "a"). -Briser cette règle n'est pas détecté par l'éditeur de code ou l'interpréteur, seuls le compilateur et la `syntaxe de contrôle` généreront une erreur dans ce cas. +Breaking such a rule is not detected by the code editor or the interpreter, only the compiler and `check syntax` will throw an error in this case. -Une classe étendue peut appeler le constructeur de sa classe parente à l'aide de la commande [`Super`](#super). +An extended class can call the constructor of its parent class using the [`Super`](#super) command. -#### Exemple +#### Example -Cet exemple crée une classe appelée `Square` à partir d'une classe appelée `Polygon`. +This example creates a class called `Square` from a class called `Polygon`. ```4d - // Classe: Square - // chemin: Classes/Square.4dm + //Class: Square + //path: Classes/Square.4dm - La classe étend Polygon + Class extends Polygon Class constructor - C_LONGINT (1 $) + C_LONGINT($1) - // Il appelle le constructeur de la classe parente avec des longueurs - // fourni pour la largeur et la hauteur de Polygon + // It calls the parent class's constructor with lengths + // provided for the Polygon's width and height Super($1;$1) - // Dans les classes dérivées, Super doit être appelé avant que vous - // ne puissiez utiliser 'This' - This.name:="Square " + // In derived classes, Super must be called before you + // can use 'This' + This.name:="Square" -Fonction getArea +Function getArea C_LONGINT($0) $0:=This.height*This.width ``` ### Super -#### Super {(param {; ...; paramN})} {-> Object} - -| Paramètre | Type | | Description | -| --------- | ------ | -- | -------------------------------------------- | -| param | mixed | -> | Paramètre(s) à passer au constructeur parent | -| Résultat | object | < | Parent de l'objet | - -Le mot-clé `Super` autorise les appels à la `superclasse`, c'est-à-dire la classe parente. +#### Super {( param{;...;paramN} )} {-> Object} -`Super` a deux objectifs différents : +| Parameter | Type | | Description | +| --------- | ------ | -- | ---------------------------------------------- | +| param | mixed | -> | Parameter(s) to pass to the parent constructor | +| Result | object | <- | Object's parent | -- à l'intérieur d'un [code constructeur](#class-constructor), `Super` est une commande qui permet d'appeler le constructeur de la superclasse. the parent class.

    +The `Super` keyword allows calls to the `superclass`, i.e. the parent class. `Super` serves two different purposes: @@ -400,27 +396,6 @@ This example illustrates the use of `Super` in a class constructor. The command #### Example 2 -This example illustrates the use of `Super` in a class member method. Function getArea C_LONGINT($0) $0:=This.height*This.width
  • - -```4d - //Class: Square - - Class extends Rectangle - - Class constructor - C_LONGINT($1) - - // It calls the parent class's constructor with lengths - // provided for the Rectangle's width and height - Super($1;$1) - - // In derived classes, Super must be called before you - // can use 'This' - This.name:="Square" -``` - -#### Example 2 - This example illustrates the use of `Super` in a class member method. You created the `Rectangle` class with a function: ```4d @@ -460,70 +435,71 @@ Then you can write in a project method: | --------- | ------ | -- | -------------- | | Result | object | <- | Current object | -The `This` keyword returns a reference to the currently processed object. Il ne peut pas être défini par affectation lors de l'exécution, et il peut être différent à chaque fois que la fonction est appelée. +The `This` keyword returns a reference to the currently processed object. In 4D, it can be used in [different contexts](https://doc.4d.com/4Dv18/4D/18/This.301-4504875.en.html). + +In most cases, the value of `This` is determined by how a function is called. It can't be set by assignment during execution, and it may be different each time the function is called. -Lorsqu'une formule est appelée en tant que méthode membre d'un objet, son `This` est défini sur l'objet sur lequel la méthode est appelée. Par exemple : +When a formula is called as a member method of an object, its `This` is set to the object the method is called on. For example: ```4d $o:=New object("prop";42;"f";Formula(This.prop)) $val:=$o.f() //42 ``` -Lorsqu'une fonction de [class constructor](#class-constructor) est utilisée (avec le mot clé `new()`), son `This` est lié au nouvel objet en cours de construction.. +When a [class constructor](#class-constructor) function is used (with the `new()` keyword), its `This` is bound to the new object being constructed. ```4d - //Classe : ob + //Class: ob Class Constructor - // Créer des propriétés sur This - // en leur assignant + // Create properties on This as + // desired by assigning to them This.a:=42 ``` ```4d - // dans une méthode 4D + // in a 4D method $o:=cs.ob.new() $val:=$o.a //42 ``` -> Lorsque vous appelez le superclass constructor dans un constructeur à l'aide du mot clé [Super](#super), gardez à l'esprit que `This` ne doit pas être appelé avant le superclass constructor, sinon une erreur est générée. For example: -> -> ```4d -> $o:=New object("prop";42;"f";Formula(This.prop)) -> $val:=$o.f() //42 -> ``` -> -> When a [class constructor](#class-constructor) function is used (with the `new()` keyword), its `This` is bound to the new object being constructed. -> -> ```4d -> //Class: ob -> -> Class Constructor -> // Create properties on This as -> // desired by assigning to them -> This.a:=42 -> ``` -> -> ```4d -> // in a 4D method -> $o:=cs.ob.new() -> $val:=$o.a //42 -> ``` -> -> > When calling the superclass constructor in a constructor using the [Super](#super) keyword, keep in mind that `This` must not be called before the superclass constructor, otherwise an error is generated. Puisque *f* est appelée comme une méthode de $o, son `This` fait référence à $o. -> > -> > ## Commandes de classe -> > -> > Plusieurs commandes du langage 4D permettent de gérer les fonctionnalités de classe. -> > -> > ### OB Class -> > -> > #### OB Class (objet) -> Objet | Null -> > -> > `OB Class` renvoie la classe de l'objet passé en paramètre. -> > -> > ### OB Instance of -> > -> > #### OB Instance of (objet; classe) -> Booléen -> > -> > `OB Instance of` renvoie `true` si `object` appartient à `class` ou à l'une de ses classes héritées, et `false` dans le cas contraire +> When calling the superclass constructor in a constructor using the [Super](#super) keyword, keep in mind that `This` must not be called before the superclass constructor, otherwise an error is generated. See [this example](#example-1). + + +In any cases, `This` refers to the object the method was called on, as if the method were on the object. + +```4d + //Class: ob + + Function f + $0:=This.a+This.b +``` + +Then you can write in a project method: + +```4d +$o:=cs.ob.new() +$o.a:=5 +$o.b:=3 +$val:=$o.f() //8 +``` +In this example, the object assigned to the variable $o doesn't have its own *f* property, it inherits it from its class. Since *f* is called as a method of $o, its `This` refers to $o. + + +## Class commands + +Several commands of the 4D language allows you to handle class features. + + +### OB Class + +#### OB Class ( object ) -> Object | Null + +`OB Class` returns the class of the object passed in parameter. + + +### OB Instance of + +#### OB Instance of ( object ; class ) -> Boolean + +`OB Instance of` returns `true` if `object` belongs to `class` or to one of its inherited classes, and `false` otherwise. From 1cb323041f07390c65f434251baed5109e9b3ee8 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:20:40 +0100 Subject: [PATCH 119/260] New translations components.md (French) --- .../translated_docs/fr/Concepts/components.md | 124 +++++++++--------- 1 file changed, 62 insertions(+), 62 deletions(-) diff --git a/website/translated_docs/fr/Concepts/components.md b/website/translated_docs/fr/Concepts/components.md index 87b4ef7f46c16c..0a3759b6d453ae 100644 --- a/website/translated_docs/fr/Concepts/components.md +++ b/website/translated_docs/fr/Concepts/components.md @@ -5,52 +5,52 @@ title: Composants A 4D component is a set of 4D methods and forms representing one or more functionalities that can be installed in different applications. For example, you can develop a 4D e-mail component that manages every aspect of sending, receiving and storing e-mails in 4D applications. -La création et l’installation des composants 4D s’effectuent directement depuis 4D. Schématiquement, les composants sont gérés comme des [plug-ins](Concepts/plug-ins.md). Les principes sont les suivants : +Creating and installing 4D components is carried out directly from 4D. Basically, components are managed like [plug-ins](Concepts/plug-ins.md) according to the following principles: -- Un composant est un simple fichier de structure (compilé ou non compilé) d’architecture standard ou sous forme de package (cf. paragraphe Extension .4dbase). +- A component consists of a regular structure file (compiled or not) having the standard architecture or in the form of a package (see .4dbase Extension). - To install a component in an application project, you simply need to copy it into the "Components" folder of the project, at the same level as the Project folder. -- Un composant peut appeler la plupart des éléments 4D : des méthodes projet, des formulaires projet, des barres de menus, des listes à choix multiples, des images issues de la bibliothèque, etc. Il ne peut pas appeler des méthodes base et des triggers. -- Il n’est pas possible d’exploiter des tables standard ou des fichiers de données dans les composants 4D. En revanche, un composant peut créer et/ou utiliser des tables, des champs et des fichiers de données via les mécanismes des bases externes. Les bases externes sont des bases 4D indépendantes manipulées via les commandes SQL. +- A component can call on most of the 4D elements: project methods, project forms, menu bars, choice lists, pictures from the library, and so on. It cannot call database methods and triggers. +- You cannot use standard tables or data files in 4D components. However, a component can create and/or use tables, fields and data files using mechanisms of external databases. These are separate 4D databases that you work with using SQL commands. -## Définitions +## Definitions -Les mécanismes de gestion des composants dans 4D nécessitent la mise en oeuvre des concepts et de la terminologie suivants : +The component management mechanisms in 4D require the implementation of the following terms and concepts: - **Matrix Project**: 4D project used for developing the component. The matrix project is a standard project with no specific attributes. A matrix project forms a single component. The matrix project is intended to be copied, compiled or not, into the Components folder of the project that will be using the component (host application project). - **Host Project**: Application project in which a component is installed and used. - **Component**: Matrix project, compiled or not, copied into the Components folder of the host application and whose contents are used in the host applications. -It should be noted that a project can be both a “matrix” and a “host,” in other words, a matrix project can itself use one or more components. En revanche, une base utilisée comme composant ne peut pas elle-même utiliser un composant : un seul niveau de composant est chargé. +It should be noted that a project can be both a “matrix” and a “host,” in other words, a matrix project can itself use one or more components. However, a component cannot use “sub-components” itself. -### Protection des composants : la compilation +### Protection of components: compilation -By default, all the project methods of a matrix project installed as a component are potentially visible from the host project. En particulier : +By default, all the project methods of a matrix project installed as a component are potentially visible from the host project. In particular: -- The shared project methods are found on the Methods Page of the Explorer and can be called in the methods of the host project. Leur contenu peut être sélectionné et copié dans la zone de prévisualisation de l’Explorateur. Elles peuvent également être visualisées dans le débogueur. Il n’est toutefois pas possible de les ouvrir dans l’éditeur de méthodes ni de les modifier. +- The shared project methods are found on the Methods Page of the Explorer and can be called in the methods of the host project. Their contents can be selected and copied in the preview area of the Explorer. They can also be viewed in the debugger. However, it is not possible to open them in the Method editor nor to modify them. - The other project methods of the matrix project do not appear in the Explorer but they too can be viewed in the debugger of the host project. To protect the project methods of a component effectively, simply compile the matrix project and provide it in the form of a .4dz file. When a compiled matrix project is installed as a component: -- The shared project methods are shown on the Methods Page of the Explorer and can be called in the methods of the host project. En revanche, leur contenu n’apparaît pas dans la zone de prévisualisation ni dans le débogueur. +- The shared project methods are shown on the Methods Page of the Explorer and can be called in the methods of the host project. However, their contents will not appear in the preview area nor in the debugger. - The other project methods of the matrix project will never appear. -## Partage des méthodes projet +## Sharing of project methods All the project methods of a matrix project are by definition included in the component (the project is the component), which means that they can be called and executed by the component. -On the other hand, by default these project methods will not be visible, nor can they be called in the host projects. In the matrix project, you must explicitly designate the methods that you want to share with the host project. These project methods can be called in the code of the host project (but they cannot be modified in the Method editor of the host database). Ces méthodes constituent les **points d’entrée** dans le composant. +On the other hand, by default these project methods will not be visible, nor can they be called in the host projects. In the matrix project, you must explicitly designate the methods that you want to share with the host project. These project methods can be called in the code of the host project (but they cannot be modified in the Method editor of the host database). These methods form **entry points** in the component. **Note:** Conversely, for security reasons, by default a component cannot execute project methods belonging to the host project. In certain cases, you may need to allow a component to access the project methods of your host project. To do this, you must explicitly designate the project methods of the host project that you want to make accessible to the components. ![](assets/en/Concepts/pict516563.en.png) -## Passage de variables +## Passing variables The local, process and interprocess variables are not shared between components and host projects. The only way to access component variables from the host project and vice versa is using pointers. -Exemple utilisant un tableau : +Example using an array: ```4d //In the host project: @@ -61,7 +61,7 @@ Exemple utilisant un tableau : APPEND TO ARRAY($1->;2) ``` -Exemples utilisant des variables : +Examples using variables: ```4d C_TEXT(myvariable) @@ -75,33 +75,33 @@ When you use pointers to allow components and the host project to communicate, y - The `Get pointer` command will not return a pointer to a variable of the host project if it is called from a component and vice versa. -- The component architecture allows the coexistence, within the same interpreted project, of both interpreted and compiled components (conversely, only compiled components can be used in a compiled project). L’usage de pointeurs dans ce cas doit respecter le principe suivant : l’interpréteur peut dépointer un pointeur construit en mode compilé mais à l’inverse, en mode compilé, il n’est pas possible de dépointer un pointeur construit en mode interprété. Let’s illustrate this principle with the following example: given two components, C (compiled) and I (interpreted), installed in the same host project. - - Si le composant C définit la variable `mavarC`, le composant I peut accéder à la valeur de cette variable en utilisant le pointeur `->mavarC`. - - Si le composant I définit la variable `mavarI`, le composant C ne peut pas accéder à cette variable en utilisant le pointeur `->mavarI`. Cette syntaxe provoque une erreur d’exécution. +- The component architecture allows the coexistence, within the same interpreted project, of both interpreted and compiled components (conversely, only compiled components can be used in a compiled project). In order to use pointers in this case, you must respect the following principle: the interpreter can unpoint a pointer built in compiled mode; however, in compiled mode, you cannot unpoint a pointer built in interpreted mode. Let’s illustrate this principle with the following example: given two components, C (compiled) and I (interpreted), installed in the same host project. + - If component C defines the `myCvar` variable, component I can access the value of this variable by using the pointer `->myCvar`. + - If component I defines the `myIvar` variable, component C cannot access this variable by using the pointer `->myIvar`. This syntax causes an execution error. -- The comparison of pointers using the `RESOLVE POINTER` command is not recommended with components since the principle of partitioning variables allows the coexistence of variables having the same name but with radically different contents in a component and the host project (or another component). Le type de la variable peut même être différent dans les deux contextes. Si les pointeurs `monptr1` et `monptr2` pointent chacun sur une variable, la comparaison suivante produira un résultat erroné : +- The comparison of pointers using the `RESOLVE POINTER` command is not recommended with components since the principle of partitioning variables allows the coexistence of variables having the same name but with radically different contents in a component and the host project (or another component). The type of the variable can even be different in both contexts. If the `myptr1` and `myptr2` pointers each point to a variable, the following comparison will produce an incorrect result: ```4d - RESOLVE POINTER(monptr1;vNomVar1;vnumtable1;vnumchamp1) - RESOLVE POINTER(monptr2;vNomVar2;vnumtable2;vnumchamp2) - If(vNomVar1=vNomVar2) - //Ce test retourne Vrai alors que les variables sont différentes + RESOLVE POINTER(myptr1;vVarName1;vtablenum1;vfieldnum1) + RESOLVE POINTER(myptr2;vVarName2;vtablenum2;vfieldnum2) + If(vVarName1=vVarName2) + //This test returns True even though the variables are different ``` -Dans ce cas, il est nécessaire d’utiliser la comparaison de pointeurs : +In this case, it is necessary to use the comparison of pointers: ```4d - If(monptr1=monptr2) //Ce test retourne Faux + If(myptr1=myptr2) //This test returns False ``` ## Access to tables of the host project -Although components cannot use tables, pointers can permit host projects and components to communicate with each other. Par exemple, voici une méthode pouvant être appelée depuis un composant : +Although components cannot use tables, pointers can permit host projects and components to communicate with each other. For example, here is a method that could be called from a component: ```4d -// appeler une méthode composant -methCreateRec(->[PERSONNES];->[PERSONNES]Nom;"Julie Andrews") +// calling a component method +methCreateRec(->[PEOPLE];->[PEOPLE]Name;"Julie Andrews") ``` -Dans le composant, le code de la méthode `methCreateRec` : +Within the component, the code of the `methCreateRec` method: ```4d C_POINTER($1) //Pointer on a table in host project @@ -116,22 +116,22 @@ $fieldpointer->:=$3 SAVE RECORD($tablepointer->) ``` -## Portée des commandes du langage +## Scope of language commands -Hormis les [Commandes non utilisables](#unusable-commands), un composant peut utiliser toute commande du langage 4D. +Except for [Unusable commands](#unusable-commands), a component can use any command of the 4D language. -Lorsqu’elles sont appelées depuis un composant, les commandes s’exécutent dans le contexte du composant, à l’exception de la commande `EXECUTE METHOD` qui utilise le contexte de la méthode désignée par la commande. Also note that the read commands of the “Users and Groups” theme can be used from a component but will read the users and groups of the host project (a component does not have its own users and groups). +When commands are called from a component, they are executed in the context of the component, except for the `EXECUTE METHOD` command that uses the context of the method specified by the command. Also note that the read commands of the “Users and Groups” theme can be used from a component but will read the users and groups of the host project (a component does not have its own users and groups). The `SET DATABASE PARAMETER` and `Get database parameter` commands are an exception: their scope is global to the application. When these commands are called from a component, they are applied to the host application project. -Par ailleurs, des dispositions spécifiques sont définies pour les commandes `Structure file` et `Get 4D folder` lorsqu’elles sont utilisées dans le cadre des composants. +Furthermore, specific measures have been specified for the `Structure file` and `Get 4D folder` commands when they are used in the framework of components. The `COMPONENT LIST` command can be used to obtain the list of components that are loaded by the host project. -### Commandes non utilisables +### Unusable commands -Les commandes suivantes ne sont pas compatibles avec une utilisation dans le cadre d’un composant car elles modifient le fichier de structure — ouvert en lecture. Leur exécution dans un composant provoque l’erreur -10511, “La commande NomCommande ne peut pas être appelée depuis un composant” : +The following commands are not compatible for use within a component because they modify the structure file — which is open in read-only. Their execution in a component will generate the error -10511, “The CommandName command cannot be called from a component”: - `ON EVENT CALL` - `Method called on event` @@ -151,40 +151,40 @@ Les commandes suivantes ne sont pas compatibles avec une utilisation dans le cad - `BLOB TO USERS` - `SET PLUGIN ACCESS` -**Notes :** +**Notes:** -- La commande `Table du formulaire courant` retourne `Nil` lorsqu’elle est appelée dans le contexte d’un formulaire projet. Par conséquent, elle ne peut pas être utilisée dans un composant. +- The `Current form table` command returns `Nil` when it is called in the context of a project form. Consequently, it cannot be used in a component. - SQL data definition language commands (`CREATE TABLE`, `DROP TABLE`, etc.) cannot be used on the component project. However, they are supported with external databases (see `CREATE DATABASE` SQL command). ## Gestion des erreurs An [error-handling method](Concepts/error-handling.md) installed by the `ON ERR CALL` command only applies to the running application. In the case of an error generated by a component, the `ON ERR CALL` error-handling method of the host project is not called, and vice versa. -## Utilisation de formulaires +## Use of forms -- Seuls les "formulaires projet" (formulaires non associés à une table en particulier) peuvent être exploités directement dans un composant. Any project forms present in the matrix project can be used by the component. -- A component can call table forms of the host project. A noter qu’il est nécessaire dans ce cas d’utiliser des pointeurs plutôt que des noms de table entre [] pour désigner les formulaires dans le code du composant. +- Only “project forms” (forms that are not associated with any specific table) can be used in a component. Any project forms present in the matrix project can be used by the component. +- A component can call table forms of the host project. Note that in this case it is necessary to use pointers rather than table names between brackets [] to specify the forms in the code of the component. -**Note:** If a component uses the `ADD RECORD` command, the current Input form of the host project will be displayed, in the context of the host project. Par conséquent, si le formulaire comporte des variables, le composant n’y aura pas accès. +**Note:** If a component uses the `ADD RECORD` command, the current Input form of the host project will be displayed, in the context of the host project. Consequently, if the form includes variables, the component will not have access to it. -- You can publish component forms as subforms in the host projects. Avec ce principe, vous pouvez notamment développer des composants proposant des objets graphiques. Par exemple, les Widgets proposés par 4D sont basés sur l’emploi de sous-formulaires en composants. +- You can publish component forms as subforms in the host projects. This means that you can, more particularly, develop components offering graphic objects. For example, Widgets provided by 4D are based on the use of subforms in components. -## Utilisation de tables et de champs +## Use of tables and fields -A component cannot use the tables and fields defined in the 4D structure of the matrix project. En revanche, il peut créer et utiliser des bases externes, et donc utiliser des tables et des champs en fonction de ses besoins. Les bases externes sont créées et gérées via le langage SQL. An external database is a 4D project that is independent from the main 4D project, but that you can work with from the main 4D project. Utiliser une base externe signifie désigner temporairement cette base comme base courante, c’est-à-dire comme base cible des requêtes SQL exécutées par 4D. Les bases externes sont créées à l'aide de la commande SQL `CREATE DATABASE`. +A component cannot use the tables and fields defined in the 4D structure of the matrix project. However, you can create and use external databases, and then use their tables and fields according to your needs. You can create and manage external databases using SQL. An external database is a 4D project that is independent from the main 4D project, but that you can work with from the main 4D project. Using an external database means temporarily designating this database as the current database, in other words, as the target database for the SQL queries executed by 4D. You create external databases using the SQL `CREATE DATABASE` command. -### Exemple +### Example -Le code suivant est inclus dans un composant et effectue trois actions élémentaires avec une base de données externe : +The following code is included in a component and performs three basic actions with an external database: -- création de la base de données externe si elle n'existe pas déjà, -- ajout de données dans la base de données externe, -- lecture de données depuis la base de données externe. +- creates the external database if it does not already exist, +- adds data to the external database, +- reads data from the external database. -Création de la base de données externe : +Creating the external database: ```4d -<>MyDatabase:=Get 4D folder+"\MyDB" // (Windows) stocke les données dans un répertoire autorisé +<>MyDatabase:=Get 4D folder+"\MyDB" // (Windows) stores the data in an authorized directory Begin SQL CREATE DATABASE IF NOT EXISTS DATAFILE :[<>MyDatabase]; USE DATABASE DATAFILE :[<>MyDatabase]; @@ -204,7 +204,7 @@ Création de la base de données externe : End SQL ``` -Ecriture dans la base de données externe : +Writing in the external database: ```4d $Ptr_1:=$2 // retrieves data from the host project through pointers @@ -226,7 +226,7 @@ Ecriture dans la base de données externe : End SQL ``` -Lecture dans une base de données externe : +Reading from an external database: ```4d $Ptr_1:=$2 // accesses data of the host project through pointers @@ -248,17 +248,17 @@ Lecture dans une base de données externe : End SQL ``` -## Utilisation de ressources +## Use of resources -Les composants peuvent utiliser des ressources. Si le composant est d’architecture .4dbase (architecture conseillée), le dossier Resources doit être placé à l’intérieur de ce dossier. +Components can use resources. In conformity with the resource management principle, if the component is of the .4dbase architecture (recommended architecture), the Resources folder must be placed inside this folder. -Les mécanismes automatiques sont opérationnels : les fichiers XLIFF présents dans le dossier Resources d’un composant seront chargés par ce composant. +Automatic mechanisms are operational: the XLIFF files found in the Resources folder of a component will be loaded by this component. In a host project containing one or more components, each component as well as the host projects has its own “resources string.” Resources are partitioned between the different projects: it is not possible to access the resources of component A from component B or the host project. -## Aide en ligne des composants -Un mécanisme spécifique a été mis en place afin de permettre aux développeurs d’ajouter des aides en ligne à leurs composants. The principle is the same as that provided for 4D projects: +## On-line help for components +A specific mechanism has been implemented in order to allow developers to add on-line help to their components. The principle is the same as that provided for 4D projects: -- L’aide du composant doit être fournie sous le forme d’un fichier suffixé .htm, .html ou (Windows uniquement) .chm, -- Le fichier d’aide doit être placé à côté du fichier de structure du composant et porter le même nom que le fichier de structure, -- L’aide est alors automatiquement chargée dans le menu Aide de l’application avec le libellé “Aide de...” suivi du nom du fichier d’aide. \ No newline at end of file +- The component help must be provided as a file suffixed .htm, .html or (Windows only) .chm, +- The help file must be put next to the structure file of the component and have the same name as the structure file, +- This file is then automatically loaded into the Help menu of the application with the title “Help for...” followed by the name of the help file. \ No newline at end of file From 9a148ae0b6cacdfc8fbea8621529cfb1f7ac1385 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:20:43 +0100 Subject: [PATCH 120/260] New translations data-types.md (French) --- .../translated_docs/fr/Concepts/data-types.md | 158 +++++++++--------- 1 file changed, 79 insertions(+), 79 deletions(-) diff --git a/website/translated_docs/fr/Concepts/data-types.md b/website/translated_docs/fr/Concepts/data-types.md index 5c941e7a06465c..b784ace8626bcc 100644 --- a/website/translated_docs/fr/Concepts/data-types.md +++ b/website/translated_docs/fr/Concepts/data-types.md @@ -3,82 +3,82 @@ id: data-types title: Types de données --- -Dans 4D, les données sont gérées selon leur type à deux endroits : dans les champs de la base et dans le langage 4D. - -Bien qu'ils soient généralement équivalents, certains types de données de la base ne sont pas disponibles dans le langage et sont automatiquement convertis. A l'inverse, certains types de données sont gérés uniquement par le langage. Le tableau suivant liste tous les types de données disponibles, leur prise en charge et leur déclaration : - -| Types de données | Pris en charge par la base(1) | Pris en charge par le langage | Déclaration de la variable | -| -------------------------------------------- | ----------------------------- | ----------------------------- | ---------------------------- | -| [Alphanumérique](dt_string.md) | Oui | Converti en texte | - | -| [Texte](Concepts/dt_string.md) | Oui | Oui | `C_TEXT`, `ARRAY TEXT` | -| [Date](Concepts/dt_date.md) | Oui | Oui | `C_DATE`, `ARRAY DATE` | -| [Heure](Concepts/dt_time.md) | Oui | Oui | `C_TIME`, `ARRAY TIME` | -| [Booléen](Concepts/dt_boolean.md) | Oui | Oui | `C_BOOLEAN`, `ARRAY BOOLEAN` | -| [Entier long](Concepts/dt_number.md) | Oui | Converti en entier long | `ARRAY INTEGER` | -| [Entier long](Concepts/dt_number.md) | Oui | Oui | `C_LONGINT`, `ARRAY LONGINT` | -| [Entier long 64 bits](Concepts/dt_number.md) | Oui (SQL) | Converti en réel | - | -| [Réel](Concepts/dt_number.md) | Oui | Oui | `C_REAL`, `ARRAY REAL` | -| [Indéfini](Concepts/dt_null_undefined.md) | - | Oui | - | -| [Null](Concepts/dt_null_undefined.md) | - | Oui | - | -| [Pointeur](Concepts/dt_pointer.md) | - | Oui | `C_POINTER`, `ARRAY POINTER` | -| [Image](Concepts/dt_picture.md) | Oui | Oui | `C_PICTURE`, `ARRAY PICTURE` | -| [BLOB](Concepts/dt_blob.md) | Oui | Oui | `C_BLOB`, `ARRAY BLOB` | -| [Objet](Concepts/dt_object.md) | Oui | Oui | `C_OBJECT`, `ARRAY OBJECT` | -| [Collection](Concepts/dt_collection.md) | - | Oui | `C_COLLECTION` | -| [Variant](Concepts/dt_variant.md)(2) | - | Oui | `C_VARIANT` | - -(1) A noter que ORDA gère les champs de la base via des objets (entités). Par conséquent, seuls les types de données disponibles pour ces objets sont pris en charge. Pour plus d'informations, veuillez vous reporter à la description du type [Objet](Concepts/dt_object.md). - -(2) Le variant n'est pas un type de *données* un type de *variable* qui peut contenir une valeur de n'importe quel autre type. - -## Valeurs par défaut - -Au moment de leur typage via une directive de compilation, les variables reçoivent une valeur par défaut, qu'elles conserveront au cours de la session tant qu'elles n'auront pas été affectées. - -La valeur par défaut dépend du type et de la catégorie de la variable, du contexte d'exécution (interprété ou compilé), ainsi que, pour le mode compilé, des options de compilation définies dans la Page Compilateur des Propriétés de la base : - -- Les variables process et interprocess sont toujours positionnées "à zéro" (qui signifie selon les cas 0, chaîne vide, blob vide, pointeur nil, date 00-00-00…) -- Les variables locales sont positionnées : - - en mode interprété : à zéro - - en mode compilé, dépendant de l'option **Initialiser les variables locales** des Propriétés de la base : - - à zéro lorsque "à zéro" est sélectionné, - - à une valeur arbitraire fixe lorsque "à une valeur aberrante" est sélectionné (0x72677267 pour les numériques et les heures, toujours vrai pour les booléens), équivalent de "à zéro" pour les autres, - - à "non" : pas d'initialisation, c'est-à-dire que tout ce qui est dans la RAM est utilisé pour les variables; c'est le cas des valeurs déjà utilisées pour les autres variables. **Note :** Il est recommandé d'utiliser "à zéro". - -Le tableau suivant illustre ces valeurs par défaut : - -| Type | Interprocess/Process (interprété/compilé), Local (interprété/compilé "à zéro") | Local compilé "aberrant" | Local compilé "non" | -| ----------- | ------------------------------------------------------------------------------ | ------------------------ | --------------------------- | -| Booléen | Faux | Vrai | True (varie) | -| Date | 00-00-00 | 00-00-00 | 00-00-00 | -| Entier long | 0 | 1919382119 | 909540880 (varie) | -| Heure | 00:00:00 | 533161:41:59 | 249345:34:24 (varie) | -| Image | picture size=0 | picture size=0 | picture size=0 | -| Réel | 0 | 1.250753659382e+243 | 1.972748538022e-217 (varie) | -| Pointeur | Nil=true | Nil=true | Nil=true | -| Texte | "" | "" | "" | -| Blob | Blob size=0 | Blob size=0 | Blob size=0 | -| Objet | null | null | null | -| Collection | null | null | null | -| Variant | indéfini | indéfini | indéfini | - - -## Convertir les types de données - -Le langage de 4D comporte des fonctions et des opérateurs vous permettant de convertir des types de données en d’autres types, dans la mesure où de telles conversions ont un sens. 4D assure la vérification des types de données. Ainsi, vous ne pouvez pas écrire : "abc"+0.5+!25/12/96!-?00:30:45?, car cette opération génère une erreur de syntaxe. - -Le tableau ci-dessous liste les types de données pouvant être convertis, le type dans lequel ils peuvent être convertis, ainsi que les fonctions 4D à utiliser : - -| Types à convertir | en Chaîne | en Numérique | en Date | en Heure | en Booléen | -| ----------------- | --------- | ------------ | ------- | -------- | ---------- | -| Chaîne (1) | | Num | Date | Heure | Bool | -| Numérique (2) | Chaine | | | | Bool | -| Date | Chaine | | | | Bool | -| Heure | Chaine | | | | Bool | -| Booléen | | Num | | | | - -(1) Les chaînes formatées en JSON peuvent être converties en données scalaires, objets ou collections à l'aide de la commande `JSON Parse`. - -(2) Les valeurs de type Heure peuvent être utilisées en tant que numériques. - -**Note :** Ce tableau ne traite pas les conversions de données plus complexes obtenues à l'aide d'une combinaison d'opérateurs et d'autres commandes. +In 4D, data are handled according to their type in two places: database fields and the 4D language. + +Although they are usually equivalent, some data types available at the database level are not directly available in the language and are automatically converted. Conversely, some data types can only be handled through the language. The following table lists all available data types and how they are supported/declared: + +| Data Types | Database support(1) | Language support | Variable declaration | +| ------------------------------------------ | ------------------- | -------------------- | ---------------------------- | +| [Alphanumeric](dt_string.md) | Yes | Converted to text | - | +| [Text](Concepts/dt_string.md) | Yes | Yes | `C_TEXT`, `ARRAY TEXT` | +| [Date](Concepts/dt_date.md) | Yes | Yes | `C_DATE`, `ARRAY DATE` | +| [Heure](Concepts/dt_time.md) | Yes | Yes | `C_TIME`, `ARRAY TIME` | +| [Booléen](Concepts/dt_boolean.md) | Yes | Yes | `C_BOOLEAN`, `ARRAY BOOLEAN` | +| [Integer](Concepts/dt_number.md) | Yes | Converted to longint | `ARRAY INTEGER` | +| [Longint](Concepts/dt_number.md) | Yes | Yes | `C_LONGINT`, `ARRAY LONGINT` | +| [Longint 64 bits](Concepts/dt_number.md) | Yes (SQL) | Converted to real | - | +| [Real](Concepts/dt_number.md) | Yes | Yes | `C_REAL`, `ARRAY REAL` | +| [Undefined](Concepts/dt_null_undefined.md) | - | Yes | - | +| [Null](Concepts/dt_null_undefined.md) | - | Yes | - | +| [Pointeur](Concepts/dt_pointer.md) | - | Yes | `C_POINTER`, `ARRAY POINTER` | +| [Image](Concepts/dt_picture.md) | Yes | Yes | `C_PICTURE`, `ARRAY PICTURE` | +| [BLOB](Concepts/dt_blob.md) | Yes | Yes | `C_BLOB`, `ARRAY BLOB` | +| [Objet](Concepts/dt_object.md) | Yes | Yes | `C_OBJECT`, `ARRAY OBJECT` | +| [Collection](Concepts/dt_collection.md) | - | Yes | `C_COLLECTION` | +| [Variant](Concepts/dt_variant.md)(2) | - | Yes | `C_VARIANT` | + +(1) Note that ORDA handles database fields through objects (entities) and thus, only supports data types available to these objects. For more information, see the [Object](Concepts/dt_object.md) data type description. + +(2) Variant is actually not a *data* type but a *variable* type that can contain a value of any other data type. + +## Default values + +When variables are typed by means of a compiler directive, they receive a default value, which they will keep during the session as long as they have not been assigned. + +The default value depends on the variable type and category, its execution context (interpreted or compiled), as well as, for compiled mode, the compilation options defined on the Compiler page of the Database settings: + +- Process and interprocess variables are always set "to zero" (which means, depending on the case, "0", an empty string, an empty Blob, a Nil pointer, a blank date (00-00-00), etc.) +- Local variables are set: + - in interpreted mode: to zero + - in compiled mode, depending on the **Initialize local variables** option of the Database settings: + - "to zero": to zero (see above), + - "to a random value": 0x72677267 for numbers and times, always True for Booleans, the same as "to zero" for the others, + - "no": no initialization, meaning whatever is in RAM is used for the variables, like values used before for other variables. **Note:** 4D recommends to use "to zero". + +The following table illustrates these default values: + +| Type | Interprocess/Process (interpreted/compiled), Local (interpreted/compiled "to zero") | Local compiled "random" | Local compiled "no" | +| ---------- | ----------------------------------------------------------------------------------- | ----------------------- | ---------------------------- | +| Booleen | False | True | True (varies) | +| Date | 00-00-00 | 00-00-00 | 00-00-00 | +| Longint | 0 | 1919382119 | 909540880 (varies) | +| Heure | 00:00:00 | 533161:41:59 | 249345:34:24 (varies) | +| Image | picture size=0 | picture size=0 | picture size=0 | +| Real | 0 | 1.250753659382e+243 | 1.972748538022e-217 (varies) | +| Pointeur | Nil=true | Nil=true | Nil=true | +| Text | "" | "" | "" | +| Blob | Blob size=0 | Blob size=0 | Blob size=0 | +| Objet | null | null | null | +| Collection | null | null | null | +| Variant | undefined | undefined | undefined | + + +## Converting data types + +The 4D language contains operators and commands to convert between data types, where such conversions are meaningful. The 4D language enforces data type checking. For example, you cannot write: "abc"+0.5+!12/25/96!-?00:30:45?. This will generate syntax errors. + +The following table lists the basic data types, the data types to which they can be converted, and the commands used to do so: + +| Data Type to Convert | to String | to Number | to Date | to Time | to Boolean | +| -------------------- | --------- | --------- | ------- | ------- | ---------- | +| String (1) | | Num | Date | Heure | Bool | +| Number (2) | Chaine | | | | Bool | +| Date | Chaine | | | | Bool | +| Heure | Chaine | | | | Bool | +| Booléen | | Num | | | | + +(1) Strings formatted in JSON can be converted into scalar data, objects, or collections, using the `JSON Parse` command. + +(2) Time values can be treated as numbers. + +**Note:** In addition to the data conversions listed in this table, more sophisticated data conversions can be obtained by combining operators and other commands. From 40510a12b1b17d0357dc9cf2df04441821d03256 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:20:47 +0100 Subject: [PATCH 121/260] New translations dt_blob.md (French) --- .../translated_docs/fr/Concepts/dt_blob.md | 70 +++++++++---------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/website/translated_docs/fr/Concepts/dt_blob.md b/website/translated_docs/fr/Concepts/dt_blob.md index 00ca822bbe20e3..f576f258b8edc5 100644 --- a/website/translated_docs/fr/Concepts/dt_blob.md +++ b/website/translated_docs/fr/Concepts/dt_blob.md @@ -3,59 +3,59 @@ id: blob title: BLOB --- -- Un champ, une variable ou une expression de type BLOB (Binary Large OBjects) est une série contiguë d'octets qui peut être traitée comme un seul objet ou dont les octets peuvent être adressés individuellement. Un BLOB peut être vide (longueur nulle) ou contenir jusqu'à 2147483647 octets (2 Go). -- Lorsque vous travaillez avec un BLOB, il est stocké entièrement en mémoire. Si vous travaillez avec une variable, le BLOB n'existe qu'en mémoire. Si vous travaillez avec un champ de type BLOB, il est chargé en mémoire à partir du disque, comme le reste de l'enregistrement auquel il appartient. -- A l'instar des autres types de champs pouvant contenir une grande quantité de données (comme les champs de type Image), les champs de type BLOB ne sont pas dupliqués en mémoire lorsque vous modifiez un enregistrement. Par conséquent, les résultats renvoyés par `Ancien` et `Modifie` ne sont pas significatifs lorsque ces fonctions sont appliquées à des champs de type BLOB. +- A BLOB (Binary Large OBjects) field, variable or expression is a contiguous series of bytes which can be treated as one whole object or whose bytes can be addressed individually. A BLOB can be empty (null length) or can contain up to 2147483647 bytes (2 GB). +- A BLOB is loaded into memory in its entirety. A BLOB variable is held and exists in memory only. A BLOB field is loaded into memory from the disk, like the rest of the record to which it belongs. +- Like the other field types that can retain a large amount of data (such as the Picture field type), BLOB fields are not duplicated in memory when you modify a record. Consequently, the result returned by the `Old` and `Modified` commands is not significant when applied to a BLOB field. -## Passage des paramètres, pointeurs et résultats de fonctions +## Parameter passing, Pointers and function results -Les BLOBs dans 4D peuvent être passés comme paramètres aux commandes 4D ou aux routines des plug-ins qui attendent un paramètre de type BLOB. Les BLOBs peuvent également être passés aux méthodes que vous créez ou être retournés comme résultats de fonctions. +4D BLOBs can be passed as parameters to 4D commands or plug-in routines that expect BLOB parameters. BLOBS can also be passed as parameters to a user method or be returned as a function result. -Pour passer un BLOB à une de vos méthodes, vous pouvez aussi définir un pointeur vers le BLOB et passer le pointeur comme paramètre. +To pass a BLOB to your own methods, you can also define a pointer to the BLOB and pass the pointer as parameter. -**Voici quelques exemples :** +**Examples:** ```4d - // Déclarer une variable de type BLOB - C_BLOB(touteVarBLOB) - // Le BLOB est passé comme paramètre à une commande 4D - SET BLOB SIZE(touteVarBLOB;1024*1024) - // Le BLOB est passé comme paramètre à une routine externe - $CodeErr:=Faites_Quelque_chose_avec_ce_BLOB(touteVarBLOB) - // Le BLOB est passé comme paramètre à une méthode qui retourne un BLOB - C_BLOB(recupBlob) - recupBlob:=Remplir_Blob(touteVarBLOB) - // Un pointeur vers le BLOB est passé comme paramètre à une de vos méthodes - COMPUTE BLOB(->touteVarBLOB) + ` Declare a variable of type BLOB + C_BLOB(anyBlobVar) + ` The BLOB is passed as parameter to a 4D command + SET BLOB SIZE(anyBlobVar;1024*1024) + ` The BLOB is passed as parameter to an external routine + $errCode:=Do Something With This BLOB(anyBlobVar) + ` The BLOB is passed as a parameter to a method that returns a BLOB + C_BLOB(retrieveBlob) + retrieveBlob:=Fill_Blob(anyBlobVar) + ` A pointer to the BLOB is passed as parameter to a user method + COMPUTE BLOB(->anyBlobVar) ``` -**Note pour les développeurs de plug ins 4D :** Un paramètre de type BLOB se déclare “&O” (la lettre “O” et non le chiffre “0”). +**Note for Plug-in developers:** A BLOB parameter is declared as “&O” (the letter “O”, not the digit “0”). -## Assignation +## Assignment operator -Vous pouvez assigner la valeur d'un BLOB à d'autres BLOBs, comme dans l'exemple suivant. +You can assign BLOBs to each other. -**Exemple :** +**Example:** ```4d - // Déclarer deux variables de type BLOB + ` Declare two variables of type BLOB C_BLOB(vBlobA;vBlobB) - // Fixer la taille du premier BLOB à 10Ko + ` Set the size of the first BLOB to 10K SET BLOB SIZE(vBlobA;10*1024) - // Assigner le premier BLOB au second + ` Assign the first BLOB to the second one vBlobB:=vBlobA ``` -En revanche, il n'existe pas d'opérateur pouvant être utilisé avec des BLOB. +However, no operator can be applied to BLOBs. -## Adresser le contenu d'un BLOB +## Addressing BLOB contents -Chaque octet d'un BLOB peut être adressé individuellement, à l'aide des accolades {...}. Dans un BLOB, les octets sont numérotés de 0 à N-1, N étant la taille du BLOB. Exemple : +You can address each byte of a BLOB individually using the curly brackets symbols {...}. Within a BLOB, bytes are numbered from 0 to N-1, where N is the size of the BLOB. Example: ```4d - // Déclarer une variable de type BLOB + ` Declare a variable of type BLOB C_BLOB(vBlob) - // Fixer la taille du BLOB à 256 octets + ` Set the size of the BLOB to 256 bytes SET BLOB SIZE(vBlob;256) - // La boucle suivante initialise les 256 octets du BLOB à zéro - Boucle(vOctet;0;Taille BLOB(vBlob)-1) - vBlob{vOctet}:=0 - Fin de boucle + ` The loop below initializes the 256 bytes of the BLOB to zero + For(vByte;0;BLOB size(vBlob)-1) + vBlob{vByte}:=0 + End for ``` -Comme vous pouvez adresser individuellement tous les octets d'un BLOB, vous pouvez littéralement stocker tout ce que vous voulez dans une variable ou un champ de type BLOB. +Because you can address all the bytes of a BLOB individually, you can actually store whatever you want in a BLOB field or variable. From 202bca8b36b029878e65102e20d733d6773f0251 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:20:49 +0100 Subject: [PATCH 122/260] New translations dt_boolean.md (French) --- .../translated_docs/fr/Concepts/dt_boolean.md | 64 +++++++++---------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/website/translated_docs/fr/Concepts/dt_boolean.md b/website/translated_docs/fr/Concepts/dt_boolean.md index 9786533bfe5194..33aa818a241718 100644 --- a/website/translated_docs/fr/Concepts/dt_boolean.md +++ b/website/translated_docs/fr/Concepts/dt_boolean.md @@ -3,62 +3,62 @@ id: boolean title: Booléen --- -Un champ, une variable ou une expression de type booléen peut être soit VRAI soit FAUX. +A boolean field, variable or expression can be either TRUE or FALSE. -## Fonctions booléennes +## Boolean functions -Les fonctions booléennes de 4D traitent des valeurs telles que `Vrai`, `Faux` et `Non` dans le thème **Booléens** consacré. Pour plus d'informations, veuillez vous reporter à la description de ces commandes. +4D provides the Boolean functions `True`, `False`, and `Not` in the dedicated **Boolean** theme. For more information, see the descriptions of these commands -### Exemple +### Example -L'exemple suivant retourne Vrai dans la variable monBooléen si l'utilisateur a cliqué sur le bouton monBouton et Faux s'il n'a pas cliqué dessus. . Lorsqu'un bouton reçoit un clic, la variable du bouton prend la valeur 1. +This example sets a Boolean variable based on the value of a button. It returns True in myBoolean if the myButton button was clicked and False if the button was not clicked. When a button is clicked, the button variable is set to 1. ```4d - If(monBouton=1) // Si le bouton a reçu un clic - monBooléen:=True// monBooléen prend la valeur True - Else // Si le bouton n'a pas reçu de clic, - monBooléen:=False //monBooléen prend la valeur False + If(myButton=1) //If the button was clicked + myBoolean:=True //myBoolean is set to True + Else //If the button was not clicked, + myBoolean:=False //myBoolean is set to False End if ``` -L'exemple ci-dessus peut être simplifié et écrit en une seule ligne . +The previous example can be simplified into one line. ```4d -monBooléen:=(monBouton=1) +myBoolean:=(myButton=1) ``` -## Opérateurs logiques +## Logical operators -4D supporte deux opérateurs logiques : l'opérateur d'intersection (AND) et l'opérateur de réunion inclusive (OR). Le AND logique retourne TRUE si les deux expressions sont VRAIES. Le OR logique retourne TRUE si au moins une des expressions est VRAIE. Le tableau suivant décrit les opérateurs logiques : +4D supports two logical operators that work on Boolean expressions: conjunction (AND) and inclusive disjunction (OR). A logical AND returns TRUE if both expressions are TRUE. A logical OR returns TRUE if at least one of the expressions is TRUE. The following table shows the logical operators: -| Opération | Syntaxe | Retourne | Expression | Valeur | -| --------- | ----------------- | -------- | ---------------------------- | ------ | -| AND | Booléen & Booléen | Booléen | ("A" = "A") & (15 # 3) | Vrai | -| | | | ("A" = "B") & (15 # 3) | Faux | -| | | | ("A" = "B") & (15 = 3) | Faux | -| OU | Booléen & Booléen | Booléen | ("A" = "A") | (15 # 3) | Vrai | -| | | | ("A" = "B") | (15 # 3) | Vrai | -| | | | ("A" = "B") | (15 = 3) | Faux | +| Operation | Syntax | Returns | Expression | Value | +| --------- | ----------------------- | ------- | ---------------------------- | ----- | +| AND | Boolean & Boolean | Booléen | ("A" = "A") & (15 # 3) | True | +| | | | ("A" = "B") & (15 # 3) | False | +| | | | ("A" = "B") & (15 = 3) | False | +| OR | Boolean | Boolean | Booléen | ("A" = "A") | (15 # 3) | True | +| | | | ("A" = "B") | (15 # 3) | True | +| | | | ("A" = "B") | (15 = 3) | False | -Voici la "table de vérité" pour l'opérateur logique "AND" : +The following is the truth table for the AND logical operator: | Expr1 | Expr2 | Expr1 & Expr2 | | ----- | ----- | ------------- | -| Vrai | Vrai | Vrai | -| Vrai | Faux | Faux | -| Faux | Vrai | Faux | -| Faux | Faux | Faux | +| True | True | True | +| True | False | False | +| False | True | False | +| False | False | False | -Voici la "table de vérité" pour l'opérateur logique "OR" : +The following is the truth table for the OR logical operator: | Expr1 | Expr2 | Expr1 | Expr2 | | ----- | ----- | ------------------ | -| Vrai | Vrai | Vrai | -| Vrai | Faux | Vrai | -| Faux | Vrai | Vrai | -| Faux | Faux | Faux | +| True | True | True | +| True | False | True | +| False | True | True | +| False | False | False | -**Astuce :** Si vous devez calculer une réunion exclusive (le "Ou" exclusif) entre Expr1 et Expr2, écrivez : +**Tip:** If you need to calculate the exclusive disjunction between Expr1 and Expr2, evaluate: ```4d (Expr1|Expr2) & Not(Expr1 & Expr2) From f7584184c898df3ff14dbb91cd6b2ba087915197 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:20:51 +0100 Subject: [PATCH 123/260] New translations dt_collection.md (French) --- .../fr/Concepts/dt_collection.md | 65 ++++++++++--------- 1 file changed, 33 insertions(+), 32 deletions(-) diff --git a/website/translated_docs/fr/Concepts/dt_collection.md b/website/translated_docs/fr/Concepts/dt_collection.md index 3370db50b81394..3f26d4ef89f503 100644 --- a/website/translated_docs/fr/Concepts/dt_collection.md +++ b/website/translated_docs/fr/Concepts/dt_collection.md @@ -3,33 +3,33 @@ id: collection title: Collection --- -Les collections sont des listes ordonnées de valeurs de types similaires ou différents (texte, nombre, objet, booléen, collection ou null). +Collections are ordered lists of values of similar or mixed types (text, number, object, boolean, collection, or null). -Pour manipuler les variables de type Collection, vous devez utiliser la notation objet (voir [Utiliser la notation objet](Concepts/dt_object.md#syntax-basics)). +To manage Collection type variables you must use object notation (see [Syntax basics](Concepts/dt_object.md#syntax-basics)). -Pour des informations complémentaires sur les collections 4D, passez le numéro (l'indice) de l'élément entre crochets : +To access a collection element, you need to pass the element number inside square brackets: ```4d collectionRef[expression] ``` -Vous pouvez passer toute expression 4D valide qui retourne un nombre entier positif dans expression. Voici quelques exemples : +You can pass any valid 4D expression which returns a positive integer in expression. Examples: ```4d - myCollection[5] //accès au 6e élément de la collection + myCollection[5] //access to 6th element of the collection myCollection[$var] ``` -**Attention :** N'oubliez pas que la numérotation des éléments de collection débute à 0. +**Warning:** Collection elements are numbered from 0. -Vous pouvez assigner une valeur à un élément de collection ou lire une valeur d'élément de collection à l'aide de la notation objet : +You can assign a value to a collection element or get a collection element value using object notation: ```4d - myCol[10]:="Mon nouvel élément" + myCol[10]:="My new element" $myVar:=myCol[0] ``` -Si vous assignez un numéro d'élément plus grand que celui du dernier élément existant dans la collection, la collection est automatiquement redimensionnée et les nouveaux éléments intermédiaires prennent la valeur null : +If you assign an element's index that surpasses the last existing element of the collection, the collection is automatically resized and all new intermediary elements are assigned a null value: ```4d C_COLLECTION(myCol) @@ -40,38 +40,39 @@ Si vous assignez un numéro d'élément plus grand que celui du dernier élémen //myCol[4]=null ``` -## Initialisation +## Initialization -Les collections doivent être initialisées à l'aide, par exemple, de la commande `Creer collection`, sinon une erreur de syntaxe sera générée à la suite d'une lecture ou d'une modification d'un ou plusieurs élements de la collection. +Collections must have been initialized, for example using the `New collection` command, otherwise trying to read or modify their elements will generate a syntax error. -Exemple : +Example: ```4d - C_COLLECTION($colVar) //création d'une variable 4D de type collection. $colVar:=New collection //initialisation de la collection et assignation à la variable 4D + C_COLLECTION($colVar) //creation of collection type 4D variable + $colVar:=New collection //initialization of the collection and assignment to the 4D variable ``` -### Collection standard ou collection partagée +### Regular or shared collection -Vous pouvez créer deux types de collections : +You can create two types of collections: -- standard (non partagées), à l'aide de la commande `New collection`. Ces collections peuvent être modifiées sans contrôle d'accès spécifique mais ne peuvent pas être partagées entre les process. -- partagées, à l'aide de la commande `New shared collection`. Le contenu de ces collections peut être partagé entre les process, y compris des process (thread) préemptifs. L'accès à ces collections doit être contrôlé via des structures `Use...End use`. Pour plus d'informations, veuillez vous reporter à la page [Objets partagés et collections partagées](Concepts/shared.md). +- regular (non-shared) collections, using the `New collection` command. These collections can be edited without any specific access control but cannot be shared between processes. +- shared collections, using the `New shared collection` command. These collections can be shared between processes, including preemptive threads. Access to these collections is controlled by `Use...End use` structures. For more information, refer to the [Shared objects and collections](Concepts/shared.md) section. -## Méthodes de collection +## Collection methods -Les références de collections 4D bénéficient de méthodes spécifiques (souvent appelées *fonctions méthodes*). Grâce à la notation objet, ces méthodes sont appliquées sur les références de collections à l'aide de la syntaxe suivante : +4D collection references benefit from special methods (sometimes named *member functions*). Thanks to object notation, these methods can be applied to collection references using the following syntax: -> {$result:=}myCollection.method( {params} ) +> {$result:=}myCollection.memberFunction( {params} ) -A noter que, même si elle n'a pas de paramètres, une méthode membre doit être appelée avec les parenthèses ( ) (opérateur d'exécution de méthode), sinon une erreur de syntaxe est générée. +Note that, even if it does not have parameters, a member function must be called with () parenthesis, otherwise a syntax error is generated. -Par exemple: +For example: ```4d -$newCol:=$col.copy() //copie de $col vers $newCol - $col.push(10;100) //ajout de 10 et 100 à la collection +$newCol:=$col.copy() //deep copy of $col to $newCol +$col.push(10;100) //add 10 and 100 to the collection ``` -Certaines méthodes retournent la collection d'origine après modification, de manière à ce que vous puissiez enchaîner les appels dans une même séquence : +Some methods return the original collection after modification, so that you can run the calls in a sequence: ```4d $col:=New collection(5;20) @@ -79,17 +80,17 @@ Certaines méthodes retournent la collection d'origine après modification, de m ``` -### paramètre cheminPropriété +### propertyPath parameter -Plusieurs méthodes de collection admettent un _paramètre nommé cheminPropriété_. Ce paramètre peut contenir : +Several methods accept a _propertyPath_ as parameter. This parameter stands for: -- soit un nom de propriété d'objet, par exemple "nomComplet" -- soit un chemin de propriété d'objet, c'est-à-dire une séquence hiérarchique de sous-propriétés reliées par des points, par exemple "employé.enfant.prénom". +- either an object property name, for example "lastName" +- or an object property path, i.e. a hierarchical sequence of sub-properties linked with dot characters, for example "employee.children.firstName". -**Attention :** Lorsqu'un paramètre cheminPropriété est attendu, l'utilisation de noms de propriétés contenant ".", "[ ]", ou des espaces n'est pas prise en charge car cela empêcherait 4D d'analyser correctement le chemin: +**Warning:** When using methods and propertyPath parameters, you cannot use ".", "[ ]", or spaces in property names since it will prevent 4D from correctly parsing the path: ```4d - $vmin:=$col.min("My.special.property") //indéfini - $vmin:=$col.min(["My.special.property"]) //erreur + $vmin:=$col.min("My.special.property") //undefined + $vmin:=$col.min(["My.special.property"]) //error ``` \ No newline at end of file From b8dbbabda04f9dd6684eb537310330b793f3b04e Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:20:53 +0100 Subject: [PATCH 124/260] New translations dt_date.md (French) --- .../translated_docs/fr/Concepts/dt_date.md | 66 +++++++++---------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/website/translated_docs/fr/Concepts/dt_date.md b/website/translated_docs/fr/Concepts/dt_date.md index 1fa600872d9d43..85d7ae4146a76e 100644 --- a/website/translated_docs/fr/Concepts/dt_date.md +++ b/website/translated_docs/fr/Concepts/dt_date.md @@ -3,14 +3,14 @@ id: date title: Date --- -- Les variables, champs ou expressions de type Date peuvent être compris entre 1/1/100 et 31/12/32767. -- Bien que le mode de représentation des dates par C_DATE permette de manipuler des dates allant jusqu'à l'année 32 767, certaines opérations passant par le système imposent une limite plus basse. +- A Date field, variable or expression can be in the range of 1/1/100 to 12/31/32,767. +- Although the representation mode for dates by can work with dates up to the year 32 767, certain operations passing through the system impose a lower limit. -**Note :** Dans ce manuel de référence du langage 4D, les paramètres de type Date dans les descriptions des commandes sont appelés Date, sauf spécification explicite. +**Note:** In the 4D Language Reference manual, Date parameters in command descriptions are denoted as Date, except when marked otherwise. -## Constantes littérales de type date +## Date literals -Une constante littérale de type date est comprise entre deux points d'exclamation (!…!). Une date doit être structurée avec le format ISO (!YYYY-MM-DD!). Voici quelques exemples de constantes dates : +A date literal constant is enclosed by exclamation marks (!…!). A date must be structured using the ISO format (!YYYY-MM-DD!). Here are some examples of date constants: ```4d !1976-01-01! @@ -18,31 +18,31 @@ Une constante littérale de type date est comprise entre deux points d'exclamati !2015-12-31! ``` -Une date nulle s’écrit _!00-00-00!_. - -**Astuce :** L'éditeur de méthodes dispose d'un raccourci pour entrer une date nulle. Pour cela, tapez un point d’exclamation (!) et appuyez sur la touche Entrée. - -**Notes :** - -- Pour des raisons de compatibilité, 4D accepte que l'année soit saisie sur deux chiffres. Dans ce cas, le programme considère qu’elle appartient au XXe ou au XXIe siècle selon qu'elle est supérieure ou inférieure à 30, sauf si ce fonctionnement par défaut a été modifié à l'aide de la commande `SET DEFAULT CENTURY`. -- Si vous avez coché l'option "Utiliser langage français et paramètres régionaux système" (cf. Page Méthodes), vous devez utiliser le format de date défini dans votre système. Généralement dans un environnement français, une date est saisie sous la forme jour/mois/année, une barre oblique "/" séparant les valeurs. - -## Opérateurs sur les dates - -| Opération | Syntaxe | Retourne | Expression | Valeur | -| ------------------- | ---------------- | -------- | ---------------------------- | ------------ | -| Différence | Date - Date | Nombre | !2017-01-20! - !2017-01-01! | 19 | -| Addition | Date + Numérique | Date | !2017-01-20! !2017-01-20! | !2017-01-29! | -| Soustraction | Date - Numérique | Date | !2017-01-20! !2017-01-01! | !2017-01-11! | -| Egalité | Date = Date | Booléen | !2017-01-20! = !2017-01-01! | Vrai | -| | | | !2017-01-20! !2017-01-20! | Faux | -| Inégalité | Date # Date | Booléen | !2017-01-20! !2017-01-01! | Vrai | -| | | | !2017-01-20! !2017-01-20! | Faux | -| Supérieur à | Date > Date | Booléen | !2017-01-20! !2017-01-20! | Vrai | -| | | | !2017-01-20! !2017-01-20! | Faux | -| Inférieur à | Date < Date | Booléen | !2017-01-20! !2017-01-20! | Vrai | -| | | | !2017-01-20! !2017-01-20! | Faux | -| Supérieur ou égal à | Date >= Date | Booléen | !2017-01-20! !2017-01-20! | Vrai | -| | | | !2017-01-01!>=!2017-01-20! | Faux | -| Inférieur ou égal à | Date \<= Date | Booléen | !2017-01-01!\<=!2017-01-20! | Vrai | -| | | | !2017-01-20!\<=!2017-01-01! | Faux | +A null date is specified by _!00-00-00!_. + +**Tip:** The Method Editor includes a shortcut for entering a null date. To type a null date, enter the exclamation (!) character and press Enter. + +**Notes:** + +- For compatibility reasons, 4D accepts two-digit years to be entered. A two-digit year is assumed to be in the 20th or 21st century based on whether it is greater or less than 30, unless this default setting has been changed using the `SET DEFAULT CENTURY` command. +- If you have checked the "Use regional system settings" option (see Methods Page), you must use the date format defined in your system. Generally, in a US environment, dates are entered in the form month/day/year, with a slash "/" separating the values. + +## Date operators + +| Operation | Syntax | Returns | Expression | Value | +| ------------------------ | -------------- | ------- | ---------------------------- | ------------ | +| Date difference | Date – Date | Number | !2017-01-20! - !2017-01-01! | 19 | +| Day addition | Date + Number | Date | !2017-01-20! + 9 | !2017-01-29! | +| Day subtraction | Date – Number | Date | !2017-01-20! - 9 | !2017-01-11! | +| Equality | Date = Date | Booléen | !2017-01-01! =!2017-01-01! | True | +| | | | !2017-01-20! = !2017-01-01! | False | +| Inequality | Date # Date | Booléen | !2017-01-20! # !2017-01-01! | True | +| | | | !2017-01-20! # !2017-01-20! | False | +| Greater than | Date > Date | Booléen | !2017-01-20! > !2017-01-01! | True | +| | | | !2017-01-20! > !2017-01-20! | False | +| Less than | Date < Date | Booléen | !2017-01-01! < !2017-01-20! | True | +| | | | !2017-01-20! < !2017-01-20! | False | +| Greater than or equal to | Date >= Date | Booléen | !2017-01-20! >=!2017-01-01! | True | +| | | | !2017-01-01!>=!2017-01-20! | False | +| Less than or equal to | Date \<= Date | Booléen | !2017-01-01!\<=!2017-01-20! | True | +| | | | !2017-01-20!\<=!2017-01-01! | False | From 9579fdc16433bc57d80675ea49c4aa052025f1e9 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:20:55 +0100 Subject: [PATCH 125/260] New translations dt_number.md (French) --- .../translated_docs/fr/Concepts/dt_number.md | 184 +++++++++--------- 1 file changed, 92 insertions(+), 92 deletions(-) diff --git a/website/translated_docs/fr/Concepts/dt_number.md b/website/translated_docs/fr/Concepts/dt_number.md index fbc3d9fe16b6b3..55932e04b34aff 100644 --- a/website/translated_docs/fr/Concepts/dt_number.md +++ b/website/translated_docs/fr/Concepts/dt_number.md @@ -3,22 +3,22 @@ id: number title: Numérique (Réel, Entier, Entier long) --- -Numérique est un terme générique utilisé pour : +Number is a generic term that stands for: -- Les champs, variables ou expression de type Réel. Les nombres de type Réel sont compris dans l'intervalle ±1.7e±308 (13 chiffres significatifs). -- Les champs, variables ou expression de type Entier long. Les nombres de type Entier long (4 octets) sont compris dans l'intervalle -2^31..(2^31)-1. -- Les champs, variables ou expression de type Entier. Les nombres de type Entier (2 octets) sont compris dans l'intervalle -32 768..32 767. +- Real field, variable or expression. The range for the Real data type is ±1.7e±308 (13 significant digits). +- Long Integer field, variable or expression. The range for the Long Integer data type (4-byte Integer) is -2^31..(2^31)-1. +- Integer field, array or expression. The range for the Integer data type (2-byte Integer) is -32,768..32,767 (2^15..(2^15)-1). -**Note :** Lorsqu'elles sont utilisées dans le langage 4D, les valeurs des champs de type Entier sont automatiquement converties en Entier long. +**Note:** Integer field values are automatically converted in Long integers when used in the 4D Language. -Vous pouvez assigner tout nombre d'un type numérique à un nombre d'un autre type numérique, 4D effectue automatiquement la conversion, en tronquant ou en arrondissant les valeurs si nécessaire. Notez cependant que lorsqu'une valeur est située en-dehors de l'intervalle du type de destination, 4D ne pourra la convertir. Vous pouvez mélanger tous les types de numériques au sein d'une même expression. +You can assign any Number data type to another; 4D does the conversion, truncating or rounding if necessary. However, when values are out of range, the conversion will not return a valid value. You can mix Number data types in expressions. -**Note :** Dans ce manuel de référence du langage 4D, quel que soit le type précis des données, les paramètres de type Réel, Entier et Entier long dans les descriptions des commandes sont appelés numériques, sauf spécification explicite. +**Note:** In the 4D Language Reference manual, no matter the actual data type, the Real, Integer, and Long Integer parameters in command descriptions are denoted as number, except when marked otherwise. -## Constantes littérales numériques +## Number literals -Une constante littérale numérique s’écrit comme un nombre réel. Voici quelques exemples de constantes numériques : +A numeric literal constant is written as a real number. Here are some examples of numeric constants: ```4d 27 @@ -26,9 +26,9 @@ Une constante littérale numérique s’écrit comme un nombre réel. Voici quel 0.0076 ``` -> Le séparateur décimal est par défaut le point (.), quelle que soit la langue du système. Si vous avez coché l'option "Utiliser langage français et paramètres régionaux système" dans la Page Méthodes des Préférences, vous devez utiliser le séparateur défini dans votre système. +> The default decimal separator is a period (.), regardless of the system language. If you have checked the "Use regional system settings" option in the Methods Page of the Preferences, you must use the separator defined in your system. -Les nombres négatifs s’écrivent précédés du signe moins (-). Par exemple: +Negative numbers are specified with the minus sign (-). For example: ```4d -27 @@ -36,113 +36,113 @@ Les nombres négatifs s’écrivent précédés du signe moins (-). Par exemple: -0.0076 ``` -## Opérateurs sur les nombres - -| Opération | Syntaxe | Retourne | Expression | Valeur | -| ------------------- | ---------------- | -------- | ---------- | ------ | -| Addition | Nombre + Nombre | Nombre | 2 + 3 | 5 | -| Soustraction | Nombre - Nombre | Nombre | 3 – 2 | 1 | -| Multiplication | Number * Number | Nombre | 5 * 2 | 10 | -| Division | Number / Number | Nombre | 5 / 2 | 2.5 | -| Division entière | Nombre \ Nombre | Nombre | 5 \ 2 | 2 | -| Modulo | Nombre % Nombre | Nombre | 5 % 2 | 1 | -| Exponentiation | Nombre ^ Nombre | Nombre | 2 ^ 3 | 8 | -| Egalité | Nombre = Nombre | Booléen | 10 = 10 | Vrai | -| | | | 10 = 11 | Faux | -| Inégalité | Nombre # Nombre | Booléen | 10 #11 | Vrai | -| | | | 10 # 10 | Faux | -| Supérieur à | Nombre > Nombre | Booléen | 11 > 10 | Vrai | -| | | | 10 > 11 | Faux | -| Inférieur à | Nombre < Nombre | Booléen | 10 < 11 | Vrai | -| | | | 11 < 10 | Faux | -| Supérieur ou égal à | Nombre >= Nombre | Booléen | 11 >= 10 | Vrai | -| | | | 10 >= 11 | Faux | -| Inférieur ou égal à | Nombre <= Nombre | Booléen | 10 <= 11 | Vrai | -| | | | 11 <= 10 | Faux | - -L'opérateur modulo % divise le premier nombre par le second et retourne le reste de la division entière. Voici quelques exemples : - -- 10 % 2 retourne 0 car la division de 10 par 2 ne donne pas de reste. -- 10 % 3 retourne 1 car le reste est 1. -- 10,5 % 2 retourne 0 car le reste n'est pas un nombre entier. - -**ATTENTION :** -- L'opérateur modulo % retourne des valeurs significatives avec des nombres appartenant à la catégorie des entiers longs (de –2^31 à +2^31 moins 1). Pour calculer le modulo de nombres qui ne sont pas dans cet intervalle, utilisez la fonction `Modulo`. -- L'opérateur division entière \ retourne des valeurs significatives avec des nombres entiers uniquement. - -### Priorité - -L'ordre dans lequel une expression est évaluée s'appelle la priorité. 4D applique strictement une règle de priorité de gauche à droite. L'ordre algébrique n'est pas appliqué. Par exemple: +## Number operators + +| Operation | Syntax | Returns | Expression | Value | +| ------------------------ | ---------------- | ------- | ---------- | ----- | +| Addition | Number + Number | Number | 2 + 3 | 5 | +| Subtraction | Number - Number | Number | 3 – 2 | 1 | +| Multiplication | Number * Number | Number | 5 * 2 | 10 | +| Division | Number / Number | Number | 5 / 2 | 2.5 | +| Longint division | Number \ Number | Number | 5 \ 2 | 2 | +| Modulo | Number % Number | Number | 5 % 2 | 1 | +| Exponentiation | Number ^ Number | Number | 2 ^ 3 | 8 | +| Equality | Number = Number | Booléen | 10 = 10 | True | +| | | | 10 = 11 | False | +| Inequality | Number # Number | Booléen | 10 #11 | True | +| | | | 10 # 10 | False | +| Greater than | Number > Number | Booléen | 11 > 10 | True | +| | | | 10 > 11 | False | +| Less than | Number < Number | Booléen | 10 < 11 | True | +| | | | 11 < 10 | False | +| Greater than or equal to | Number >= Number | Booléen | 11 >= 10 | True | +| | | | 10 >= 11 | False | +| Less than or equal to | Number <= Number | Booléen | 10 <= 11 | True | +| | | | 11 <= 10 | False | + +The modulo operator % divides the first number by the second number and returns a whole number remainder. Here are some examples: + +- 10 % 2 returns 0 because 10 is evenly divided by 2. +- 10 % 3 returns 1 because the remainder is 1. +- 10.5 % 2 returns 0 because the remainder is not a whole number. + +**WARNING:** +- The modulo operator % returns significant values with numbers that are in the Long Integer range (from minus 2^31 to 2^31 minus one). To calculate the modulo with numbers outside of this range, use the `Mod` command. +- The longint division operator \ returns significant values with integer numbers only. + +### Precedence + +The order in which an expression is evaluated is called precedence. 4D has a strict left-to-right precedence, in which algebraic order is not observed. For example: ```4d 3+4*5 ``` -retourne 35 car l'expression est évaluée comme 3 + 4, qui donne 7, multiplié par 5, ce qui donne 35. +returns 35, because the expression is evaluated as 3 + 4, yielding 7, which is then multiplied by 5, with the final result of 35. -Les parenthèses doivent être utilisées pour forcer l'ordre de calcul en fonction de vos besoins. Par exemple: +To override the left-to-right precedence, you MUST use parentheses. For example: ```4d 3+(4*5) ``` -retourne 23 car l'expression (4 * 5) est évaluée en premier lieu. Le résultat (20) est alors ajouté à 3, ce qui donne le résultat final 23. +returns 23 because the expression (4 * 5) is evaluated first, because of the parentheses. The result is 20, which is then added to 3 for the final result of 23. -Des parenthèses peuvent être incluses dans d'autres parenthèses. Assurez-vous qu'il y ait une parenthèse fermante pour chaque parenthèse ouverte. Une parenthèse manquante ou placée à un mauvais endroit peut soit donner un résultat erroné, soit renvoyer une expression invalide. De plus, si vous avez l'intention de compiler vos applications, vous devez vous assurer d'une bonne utilisation des parenthèses. Le compilateur interprètera toute parenthèse manquante ou superflue comme une erreur de syntaxe. +Parentheses can be nested inside other sets of parentheses. Be sure that each left parenthesis has a matching right parenthesis to ensure proper evaluation of expressions. Lack of, or incorrect use of parentheses can cause unexpected results or invalid expressions. Furthermore, if you intend to compile your applications, you must have matching parentheses—the compiler detects a missing parenthesis as a syntax error. -## Opérateurs sur les bits +## Bitwise operators -Les opérateurs sur les bits s'appliquent à des expressions ou valeurs de type **Entier long**. +The bitwise operators operates on **Long Integer** expressions or values. -> Si vous passez une valeur de type Entier ou Réel à un opérateur sur les bits, 4D la convertit en Entier long avant de calculer le résultat de l'expression. +> If you pass an Integer or a Real value to a bitwise operator, 4D evaluates the value as a Long Integer value before calculating the expression that uses the bitwise operator. -Lorsque vous employez des opérateurs sur les bits, vous devez considérer une valeur de type Entier long comme un tableau de 32 bits. Les bits sont numérotés de 0 à 31, de droite à gauche. +While using the bitwise operators, you must think about a Long Integer value as an array of 32 bits. The bits are numbered from 0 to 31, from right to left. -Comme un bit peut valoir 0 (zéro) ou 1, vous pouvez également considérer une valeur de type Entier long comme une expression dans laquelle vous pouvez stocker 32 valeurs de type Booléen. Lorsque le bit vaut 1, la valeur est **Vrai** et lorsque le bit vaut 0, la valeur est **Faux**. +Because each bit can equal 0 or 1, you can also think about a Long Integer value as a value where you can store 32 Boolean values. A bit equal to 1 means **True** and a bit equal to 0 means **False**. -Une expression utilisant un opérateur sur les bits retourne une valeur de type Entier long, à l'exception de l'opérateur Tester bit avec lequel l'expression retournée est du type Booléen. Le tableau suivant fournit la liste des opérateurs sur les bits et leur syntaxe : +An expression that uses a bitwise operator returns a Long Integer value, except for the Bit Test operator, where the expression returns a Boolean value. The following table lists the bitwise operators and their syntax: -| Opération | Opérateur | Syntaxe | Retourne | -| --------------------- | --------- | ---------------------- | ----------------------- | -| ET | & | long & E. long | E. long | -| OU (inclusif) | | | long | E. long | E. long | -| OU (exclusif) | \^| | long \^| E. long | E. long | -| Décaler bits à gauche | << | E. Long << E. Long | long (voir note n°1) | -| Décaler bits à droite | >> | E. Long >> E. Long | long (voir note n°1) | -| Mettre bit à 1 | ?+ | long ?+ E. long | long (voir note n°2) | -| Mettre bit à 0 | ?- | long ?? | long (voir note n°2) | -| Tester bit | ?? | E. E. long | Booléen (voir note n°2) | +| Operation | Operator | Syntax | Returns | +| ---------------------- | --------- | ------------------- | -------------------- | +| Bitwise AND | & | Long & Long | Long | +| Bitwise OR (inclusive) | | | Long | Long | Long | +| Bitwise OR (exclusive) | \^| | Long \^| Long | Long | +| Left Bit Shift | << | Long << Long | Long (see note 1) | +| Right Bit Shift | >> | Long >> Long | Long (see note 1) | +| Bit Set | ?+ | Long ?+ Long | Long (see note 2) | +| Bit Clear | ?- | Long ?- Long | Long (see note 2) | +| Bit Test | ?? | Long ?? Long | Boolean (see note 2) | #### Notes -1. Dans les opérations utilisant `Décaler bits à gauche` et `Décaler bits à droite`, le second opérande indique le nombre de décalages de bits du premier opérande à effectuer dans la valeur retournée. Par conséquent, ce second opérande doit être compris entre 0 et 31. Notez qu'un décalage de 0 retourne une valeur inchangée et qu'un décalage de plus de 31 bits retourne 0x00000000 car tous les bits sont perdus. Si vous passez une autre valeur en tant que second opérande, le résultat sera non significatif. -2. Dans les opérations utilisant `Mettre bit à 1`, `Mettre bit à 0` et `Tester bit`, le second opérande indique le numéro du bit sur lequel agir. Par conséquent, ce second opérande doit être compris entre 0 et 31, sinon le résultat de l'expression sera non significatif. +1. For the `Left Bit Shift` and `Right Bit Shift` operations, the second operand indicates the number of positions by which the bits of the first operand will be shifted in the resulting value. Therefore, this second operand should be between 0 and 31. Note however, that shifting by 0 returns an unchanged value and shifting by more than 31 bits returns 0x00000000 because all the bits are lost. If you pass another value as second operand, the result is non-significant. +2. For the `Bit Set`, `Bit Clear` and `Bit Test` operations , the second operand indicates the number of the bit on which to act. Therefore, this second operand must be between 0 and 31; otherwise, the result of the expression is non-significant. -Le tableau suivant dresse la liste des opérateurs sur les bits et de leurs effets : +The following table lists the bitwise operators and their effects: -| Opération | Description | -| --------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| ET | Chaque bit retourné est le résultat de l'opération ET logique appliquée aux deux bits opérandes.

    Voici la table du ET logique :

  • 1 & 1 --> 1
  • 0 & 1 --> 0
  • 1 & 0 --> 0
  • 0 & 0 --> 0

    En d'autres termes, le bit résultant est 1 si les deux bits d'opérande sont 1; sinon, le bit résultant est 0. | -| OU (inclusif) | Chaque bit retourné est le résultat de l'opération OU logique appliquée aux deux bits opérandes.

    Voici la table du OU inclusif logique :

  • 1 | 1 --> 1
  • 0 | 1 --> 1
  • 1 | 0 --> 1
  • 0 | 0 --> 0

    En d'autres termes, le bit résultant est 1 si au moins l'un des deux bits d'opérande est 1; sinon, le bit résultant est 0. | -| OU (exclusif) | Chaque bit retourné est le résultat de l'opération OU logique appliquée aux deux bits opérandes.

    Voici la table du OU exclusif logique :

  • 1 \^| 1 --> 0
  • 0 \^| 1 --> 1
  • 1 \^| 0 --> 1
  • 0 \^| 0 --> 0

    En d'autres termes, le bit résultant est 1 si seul l'un des deux bits d'opérande est 1; sinon, le bit résultant est 0. | -| Décaler bits à gauche | La valeur résultante est définie sur la première valeur d'opérande, puis les bits résultants sont décalés vers la gauche du nombre de positions indiqué par le deuxième opérande. Les bits auparavant situés à gauche sont perdus et les nouveaux bits situés à droite ont la valeur 0.

    **Note:** en ne tenant compte que des valeurs positives, le décalage vers la gauche de N bits équivaut à multiplier par 2 ^ N. | -| Décaler bits à droite | La valeur résultante est définie sur la première valeur d'opérande, puis les bits résultants sont décalés vers la droite du nombre de positions indiqué par le deuxième opérande. Les bits auparavant situés à droite sont perdus et les nouveaux bits situés à gauche ont la valeur 0.

    **Note:** en ne tenant compte que des valeurs positives, le décalage vers la droite de N bits équivaut à diviser par 2^N. | -| Mettre bit à 1 | La valeur retournée est la valeur du premier opérande dans lequel le bit dont le numéro est spécifié par le second opérande est positionné à 0. Les autres bits demeurent inchangés. | -| Mettre bit à 0 | La valeur retournée est la valeur du premier opérande dans lequel le bit dont le numéro est spécifié par le second opérande est positionné à 0. Les autres bits demeurent inchangés. | -| Tester bit | Retourne Vrai si, dans le premier opérande, le bit dont le numéro est indiqué par le second opérande vaut 1. Retourne Faux si, dans le premier opérande, le bit dont le numéro est indiqué par le second opérande vaut 0. | +| Operation | Description | +| ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Bitwise AND | Each resulting bit is the logical AND of the bits in the two operands.

    Here is the logical AND table:

  • 1 & 1 --> 1
  • 0 & 1 --> 0
  • 1 & 0 --> 0
  • 0 & 0 --> 0

    In other words, the resulting bit is 1 if the two operand bits are 1; otherwise the resulting bit is 0. | +| Bitwise OR (inclusive) | Each resulting bit is the logical OR of the bits in the two operands.

    Here is the logical OR table:

  • 1 | 1 --> 1
  • 0 | 1 --> 1
  • 1 | 0 --> 1
  • 0 | 0 --> 0

    In other words, the resulting bit is 1 if at least one of the two operand bits is 1; otherwise the resulting bit is 0. | +| Bitwise OR (exclusive) | Each resulting bit is the logical XOR of the bits in the two operands.

    Here is the logical XOR table:

  • 1 \^| 1 --> 0
  • 0 \^| 1 --> 1
  • 1 \^| 0 --> 1
  • 0 \^| 0 --> 0

    In other words, the resulting bit is 1 if only one of the two operand bits is 1; otherwise the resulting bit is 0. | +| Left Bit Shift | The resulting value is set to the first operand value, then the resulting bits are shifted to the left by the number of positions indicated by the second operand. The bits on the left are lost and the new bits on the right are set to 0.

    **Note:** Taking into account only positive values, shifting to the left by N bits is the same as multiplying by 2^N. | +| Right Bit Shift | The resulting value is set to the first operand value, then the resulting bits are shifted to the right by the number of position indicated by the second operand. The bits on the right are lost and the new bits on the left are set to 0.

    **Note:** Taking into account only positive values, shifting to the right by N bits is the same as dividing by 2^N. | +| Bit Set | The resulting value is set to the first operand value, then the resulting bit, whose number is indicated by the second operand, is set to 1. The other bits are left unchanged. | +| Bit Clear | The resulting value is set to the first operand value, then the resulting bit, whose number is indicated by the second operand, is set to 0. The other bits are left unchanged. | +| Bit Test | Returns True if, in the first operand, the bit whose number is indicated by the second operand is equal to 1. Returns False if, in the first operand, the bit whose number is indicated by the second operand is equal to 0. | -### Exemples +### Examples -| Opération | Exemple | Résultat | -| --------------------- | ------------------------------- | ---------- | -| ET | 0x0000FFFF & 0xFF00FF00 | 0x0000FF00 | -| OU (inclusif) | 0x0000FFFF | 0xFF00FF00 | 0xFF00FFFF | -| OU (exclusif) | 0x0000FFFF \^| 0xFF00FF00 | 0xFF0000FF | -| Décaler bits à gauche | 0x0000FFFF << 8 | 0x00FFFF00 | -| Décaler bits à droite | 0x0000FFFF >> 8 | 0x000000FF | -| Mettre bit à 1 | 0x00000000 ?+ 16 | 0x00010000 | -| Mettre bit à 0 | 0x00010000 ?- 16 | 0x00000000 | -| Tester bit | 0x00010000 ?? 16 | Vrai | +| Operation | Example | Result | +| ---------------------- | ------------------------------- | ---------- | +| Bitwise AND | 0x0000FFFF & 0xFF00FF00 | 0x0000FF00 | +| Bitwise OR (inclusive) | 0x0000FFFF | 0xFF00FF00 | 0xFF00FFFF | +| Bitwise OR (exclusive) | 0x0000FFFF \^| 0xFF00FF00 | 0xFF0000FF | +| Left Bit Shift | 0x0000FFFF << 8 | 0x00FFFF00 | +| Right Bit Shift | 0x0000FFFF >> 8 | 0x000000FF | +| Bit Set | 0x00000000 ?+ 16 | 0x00010000 | +| Bit Clear | 0x00010000 ?- 16 | 0x00000000 | +| Bit Test | 0x00010000 ?? 16 | True | From a4fb56faac4fadf81270ce85b10ad2699dfc6427 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:20:58 +0100 Subject: [PATCH 126/260] New translations onActivate.md (French) --- website/translated_docs/fr/Events/onActivate.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/website/translated_docs/fr/Events/onActivate.md b/website/translated_docs/fr/Events/onActivate.md index df119463ce9fd3..ab79ae0dddfe34 100644 --- a/website/translated_docs/fr/Events/onActivate.md +++ b/website/translated_docs/fr/Events/onActivate.md @@ -3,15 +3,15 @@ id: onActivate title: Sur activation --- -| Code | Peut être appelé par | Définition | -| ---- | -------------------- | ---------------------------------------------------------------------------------------- | -| 11 | Formulaire | The form's window becomes the frontmost window or the subform's container gets the focus | +| Code | Can be called by | Definition | +| ---- | ---------------- | ---------------------------------------------------------------------------------------- | +| 11 | Form | The form's window becomes the frontmost window or the subform's container gets the focus | ## Description -Si la fenêtre d'un formulaire a été envoyée en arrière-plan, cet événement est appelé lorsque la fenêtre devient la fenêtre active. +If the window of a form was sent to the background, this event is called when the window becomes the frontmost window. -Cet événement s'applique au formulaire dans son ensemble et non à un objet particulier. Par conséquent, si la propriété d'événement formulaire `On Activate` est sélectionnée, seul le formulaire aura sa méthode formulaire appelée. +This event applies to the form as a whole and not to a particular object. Consequently, if the `On Activate` form event property is selected, only the form will have its form method called. In the case of a subform, this event is passed to the subform when the container gets the focus (if it has the [focusable](FormObjects/properties_Entry.md#focusable) property). \ No newline at end of file From d726cb2c57aedf4b54b8e18e970767f473c4a341 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:21:02 +0100 Subject: [PATCH 127/260] New translations dt_object.md (French) --- .../translated_docs/fr/Concepts/dt_object.md | 239 +++++++++--------- 1 file changed, 120 insertions(+), 119 deletions(-) diff --git a/website/translated_docs/fr/Concepts/dt_object.md b/website/translated_docs/fr/Concepts/dt_object.md index 3ea1eda012e3b4..c53fa89f24891a 100644 --- a/website/translated_docs/fr/Concepts/dt_object.md +++ b/website/translated_docs/fr/Concepts/dt_object.md @@ -3,98 +3,99 @@ id: object title: Objet --- -Les variables, champs ou expressions de type objet peuvent contenir des données de divers types. La structure des objets "natifs" 4D est basée sur le principe classique des paires "propriété/valeur" (aussi appelées "attribut/valeur). La syntaxe de ces objets s’inspire du JSON : +Variables, fields or expressions of the Object type can contain various types of data. The structure of "native" 4D objects is based on the classic principle of "property/value" pairs. The syntax of these objects is based on JSON notation: -- Un nom de propriété est toujours un texte, par exemple "Nom". +- A property name is always a text, for example "Name". -- Une valeur de propriété peut être du type suivant : - - Nombre (réel, entier long, etc.) - - Texte +- A property value can be of the following type: + - number (Real, Integer, etc.) + - text - null - Booléen - - Pointeur (stocké tel quel, évalué à l’aide de la commande `JSON Stringify` ou lors d’une copie), - - Date (type date ou chaîne au format date ISO) - - Objet (les objets peuvent être imbriqués sur plusieurs niveaux) - - Image(*) + - pointer (stored as such, evaluated using the `JSON Stringify` command or when copying), + - date (date type or ISO date format string) + - object (objects can be nested on several levels) + - picture(*) - collection -(*)Lorsqu'elles sont exposées sous forme de texte dans le débogueur ou exportées en JSON, les propriétés d'objet de type image indiquent "[objet Image]". +(*)When exposed as text in the debugger or exported to JSON, picture object properties print "[object Picture]". -**Attention :** N'oubliez pas que les noms d'attributs tiennent compte des majuscules/minuscules. +**Warning:** Keep in mind that attribute names differentiate between upper and lower case. -Pour gérer les variables, champs ou expressions de type objet, vous pouvez utiliser la notation objet (cf. [Utiliser la notation objet](Concepts/dt_object.md#syntax-basics)) ou les commandes 4D du thème **Objets (Langage)**. A noter que des commandes spécifiques du thème Requêtes, telles que `CHERCHER PAR ATTRIBUT`, `CHERCHER PAR ATTRIBUT DANS SELECTION` ou `TRIER PAR ATTRIBUT` peuvent être utilisées pour traiter des champs objets. +You manage Object type variables, fields or expressions using the commands available in the **Objects (Language)** theme or through the object notation (see [Syntax basics](Concepts/dt_object.md#syntax-basics)). Note that specific commands of the Queries theme such as `QUERY BY ATTRIBUTE`, `QUERY SELECTION BY ATTRIBUTE`, or `ORDER BY ATTRIBUTE` can be used to carry out processing on object fields. -Chaque valeur de propriété accessible par la notation objet est considérée comme une expression. You can use such values wherever 4D expressions are expected: +Each property value accessed through the object notation is considered an expression. You can use such values wherever 4D expressions are expected: -- Dans le code 4D, soit écrites dans les méthodes (éditeur de méthodes) soit externalisées (formules, fichiers d'étiquettes traités par la commande PROCESS 4D TAGS ou le Serveur Web, fichiers d'export, documents 4D Write Pro, etc.), -- Dans les zones d'expressions du débogueur et l'explorateur d'exécution, -- Dans la liste de propriétés de l'éditeur de formulaires pour les objets formulaires : champ Variable ou Expression et plusieurs expressions de list box et colonnes (source de données, couleur de fond, style ou couleur de police). +- in 4D code, either written in the methods (Method editor) or externalized (formulas, 4D tags files processed by PROCESS 4D TAGS or the Web Server, export files, 4D Write Pro documents...), +- in the Expression areas of the Debugger and the Runtime explorer, +- in the Property list of the Form editor for form objects: Variable or Expression field as well as various selection list box and columns expressions (Data Source, background color, style, or font color). -## Initialisation +## Initialization -Les objets doivent être initialisés à l'aide, par exemple, de la commande `New object`, sinon une erreur de syntaxe sera générée à la suite d'une lecture ou d'une modification de leurs propriétés. +Objects must have been initialized, for example using the `New object` command, otherwise trying to read or modify their properties will generate a syntax error. -Exemple : +Example: ```4d - C_OBJET($obVar) //création d'une variable 4D de type objet. $obVar:=Creer objet//initialisation de l'objet et assignation à la variable 4D + C_OBJECT($obVar) //creation of an object type 4D variable + $obVar:=New object //initialization of the object and assignment to the 4D variable ``` -### Objet standard ou partagé +### Regular or shared object -Vous pouvez créer deux types d'objets : +You can create two types of objects: -- standard (non partagés), à l'aide de la commande `Creer objet`. Ces objets peuvent être modifiés sans contrôle d'accès spécifique mais ne peuvent pas être partagés entre les process. -- partagés, à l'aide de la commande `New shared object`. Le contenu de ces objets peut être partagé entre les process, y compris des process (thread) préemptifs. L'accès à ces objets doit être contrôlé via des structures `Use...End use`. Pour plus d'informations, veuillez vous reporter à la page [Objets partagés et collections partagées](Concepts/shared.md). +- regular (non-shared) objects, using the `New object` command. These objects can be edited without any specific access control but cannot be shared between processes. +- shared objects, using the `New shared object` command. These objects can be shared between processes, including preemptive threads. Access to these objects is controlled by `Use...End use` structures. For more information, refer to the [Shared objects and collections](Concepts/shared.md) section. -## Principes de syntaxe +## Syntax basics -La notation objet est utilisée pour accéder aux valeurs de propriétés d'objets via des séquences de symboles et de propriétés référencées (tokens). +Object notation can be used to access object property values through a chain of tokens. -### Propriétés des objets +### Object properties -Avec la notation objet, il est possible d'accéder aux propriétés d'objets (aussi appelées attributs d'objets) de deux façons : +With object notation, object properties can be accessed in two ways: -- à l'aide du symbole "point" : > objet.NomPropriété +- using a "dot" symbol: > object.propertyName -Exemple : +Example: ```4d employee.name:="Smith" ``` -- à l'aide d'une chaîne entre crochets : > objet["NomPropriété"] +- using a string within square brackets: > object["propertyName"] -Voici quelques exemples : +Examples: ```4d $vName:=employee["name"] - //ou : + //or also: $property:="name" $vName:=employee[$property] ``` -Comme la valeur d'une propriété d'objet peut elle-même être un objet ou une collection, la notation objet requiert une séquence de symboles pour accéder aux sous-propriétés, par exemple : +Since an object property value can be an object or a collection, object notation accepts a sequence of symbols to access sub-properties, for example: ```4d $vAge:=employee.children[2].age ``` -La notation objet est utilisable avec tout élément de langage qui contient ou retourne un objet, c'est-à-dire : +Object notation is available on any language element that can contains or returns an object, i.e: -- avec les **objets** eux-mêmes (stockés dans des variables, champs, propriétés d'objets, tableaux d'objets ou éléments de collections). Voici quelques exemples : +- **Objects** themselves (stored in variables, fields, object properties, object arrays, or collection elements). Examples: ```4d $age:=$myObjVar.employee.age //variable - $addr:=[Emp]data_obj.address //champ - $city:=$addr.city //propriété d'un objet - $pop:=$aObjCountries{2}.population //tableau d'objets - $val:=$myCollection[3].subvalue //élément de collection + $addr:=[Emp]data_obj.address //field + $city:=$addr.city //property of an object + $pop:=$aObjCountries{2}.population //object array + $val:=$myCollection[3].subvalue //collection element ``` -- avec les **commandes 4D** qui retournent des objets. Exemple : +- **4D commands** that return objects. Example: ```4d - $measures:=Lire mesures base.DB.tables + $measures:=Get database measures.DB.tables ``` -- avec les **méthodes projet** qui retournent des objets. Exemple : +- **Project methods** that return objects. Example: ```4d // MyMethod1 @@ -105,24 +106,24 @@ La notation objet est utilisable avec tout élément de langage qui contient ou $result:=MyMethod1.a //10 ``` -- **Collections** Exemple : +- **Collections** Example: ```4d - myColl.length //taille de la collection + myColl.length //size of the collection ``` -### Pointeurs -**Note :** Les objets étant toujours passés par référence, l'utilisation de pointeurs n'est généralement pas nécessaire. En passant un objet, 4D utilise automatiquement, en interne, un mécanisme similaire à un pointeur pour minimiser la mémoire nécessaire, pour vous permettre de modifier le paramètre et de retourner les modifications. Par conséquent, vous n'aurez pas besoin d'utiliser des pointeurs. Cependant, si vous souhaitez utiliser des pointeurs, il est possible d'accéder aux valeurs de propriétés via des pointeurs. +### Pointers +**Preliminary Note:** Since objects are always passed by reference, there is usually no need to use pointers. While just passing the object, internally 4D automatically uses a mechanism similar to a pointer, minimizing memory need and allowing you to modify the parameter and to return modifications. As a result, you should not need to use pointers. However, in case you want to use pointers, property values can be accessed through pointers. -La notation objet pour les pointeurs est semblable à la notation objet standard, à la seule différence que le symbole "point" doit être omis. +Using object notation with pointers is very similar to using object notation directly with objects, except that the "dot" symbol must be omitted. -- Accès direct : -> pointeurObjet->nomPropriété +- Direct access: +> pointerOnObject->propertyName -- Accès par le nom : -> pointeurObjet-> nomPropriété"] +- Access by name: +> pointerOnObject->["propertyName"] -Exemple : +Example: ```4d C_OBJECT(vObj) @@ -133,148 +134,148 @@ Exemple : x:=vPtr->a //x=10 ``` -### Valeur Null +### Null value -Lorsque la notation objet est utilisée, la valeur **null** est prise en charge via la commande **Null**. Cette commande peut être utilisée pour affecter ou comparer la valeur null aux propriétés d'objets ou aux éléments de collections, par exemple : +When using the object notation, the **null** value is supported though the **Null** command. This command can be used to assign or compare the null value to object properties or collection elements, for example: ```4d myObject.address.zip:=Null If(myColl[2]=Null) ``` -Pour plus d'informations, veuillez vous reporter à la description de la commande `Null`. +For more information, please refer to the `Null` command description. -### Valeur Indéfinie +### Undefined value -L'évaluation d'une propriété d'objet peut parfois produire une valeur indéfinie (undefined). En règle générale, lorsque le code tente de lire ou d'affecter des expressions indéfinies, 4D génère des erreurs, hormis dans les cas décrits ci-dessous : +Evaluating an object property can sometimes produce an undefined value. Typically when trying to read or assign undefined expressions, 4D will generate errors. This does not happen in the following cases: -- La lecture d'une propriété d'un objet ou d'une valeur indéfini(e) retourne Indéfini ; l'affectation d'une valeur indéfinie à des variables (hors tableaux) a le même effet qu'appeler `CLEAR VARIABLE` avec elles : +- Reading a property of an undefined object or value returns undefined; assigning an undefined value to variables (except arrays) has the same effect as calling `CLEAR VARIABLE` with them: ```4d - C_OBJET($o) - C_ENTIER Long($val) - $val:=10 //$val=10 - $val:=$o.a //$o.a est indéfini (pas d'erreur), et affecter cette valeur efface la variable - //$val=0 + C_OBJECT($o) + C_LONGINT($val) + $val:=10 //$val=10 + $val:=$o.a //$o.a is undefined (no error), and assigning this value clears the variable + //$val=0 ``` -- La lecture de la propriété **length** d'une collection indéfinie renvoie 0 : +- Reading the **length** property of an undefined collection produces 0: ```4d - C_COLLECTION($c) //variable créée mais pas de collection définie - $size:=$c.length //$size = 0 + C_COLLECTION($c) //variable created but no collection is defined + $size:=$c.length //$size = 0 ``` -- Une valeur indéfinie passée en paramètre à une méthode projet est automatiquement convertie en 0 ou en "" en fonction de la déclaration du type du paramètre. +- An undefined value passed as parameter to a project method is automatically converted to 0 or "" according to the declared parameter type. ```4d C_OBJECT($o) - mymethod($o.a) //passage d'un paramètre indéfini + mymethod($o.a) //pass an undefined parameter - //Dans la méthode mymethod - C_TEXT($1) //Paramètre de type texte - // $1 contient "" + //In mymethod method + C_TEXT($1) //parameter type is text + // $1 contains "" ``` -- Une expression de condition est automatiquement convertie à Faux lorsque son évaluation donne Indéfinie avec les mots-clés Si et Au cas ou : +- A condition expression is automatically converted to false when evaluating to undefined with the If and Case of keywords: ```4d C_OBJECT($o) - If($o.a) // faux + If($o.a) // false End if Case of - :($o.a) // faux + :($o.a) // false End case ``` -- L'affectation d'une valeur indéfinie à une propriété d'objet existante réinitialise ou efface sa valeur, selon son type : - - Objet, collection, pointeur : Null - - Image : image vide - - Booléen : False - - Chaîne : "" - - Numérique : 0 - - Date : !00-00-00! si la base utilise le type date pour les objets, sinon "" - - Heure : 0 (nombre de ms) - - Indéfini, Null : pas de changement +- Assigning an undefined value to an existing object property reinitializes or clears its value, depending on its type: + - Object, collection, pointer: Null + - Picture: Empty picture + - Boolean: False + - String: "" + - Number: 0 + - Date: !00-00-00! if "Use date type instead of ISO date format in objects" setting is enabled, otherwise "" + - Time: 0 (number of ms) + - Undefined, Null: no change ```4d C_OBJECT($o) - $o:=New object("a";2) - $o.a:=$o.b //$o.a=0 + $o:=New object("a";2) + $o.a:=$o.b //$o.a=0 ``` -- L'affectation d'une valeur indéfinie à une propriété d'objet inexistante ne fait rien. +- Assigning an undefined value to a non existing object property does nothing. -Lorsque des expressions d'un type donné sont attendues dans votre code 4D, vous pouvez vous assurer qu'elles auront le type souhaité même en cas de valeur Indéfinie en les encadrant avec la commande de transtypage 4D appropriée : `String`, `Num`, `Time`, `Date`, `Bool`. Ces commandes retournent une valeur vide du type spécifié lorsque l'expression est évaluée à Indéfinie. Par exemple: +When expressions of a given type are expected in your 4D code, you can make sure they have the correct type even when evaluated to undefined by surrounding them with the appropriate 4D cast command: `String`, `Num`, `Date`, `Time`, `Bool`. These commands return an empty value of the specified type when the expression evaluates to undefined. For example: ```4d - $myString:=Lowercase(String($o.a.b)) //pour être sûr d'obtenir une valeur texte même si indéfinie - //afin d'éviter des erreurs dans le code + $myString:=Lowercase(String($o.a.b)) //make sure you get a string value even if undefined + //to avoid errors in the code ``` -## Identifiants de propriétés d'objets +## Object property identifiers -Les règles de nommage des tokens (noms des propriétés d'objets auxquelles on accède via la notation objet) sont plus restrictives que celles qui s'appliquent aux noms d'identifiants 4D standard. Ils doivent se conformer à la grammaire des identificateurs JavaScript (voir [la norme ECMA Script](https://www.ecma-international.org/ecma-262/5.1/#sec-7.6)): +Token member names (i.e., object property names accessed using the object notation) are more restrictive than standard 4D object names. They must comply with JavaScript Identifier Grammar (see [ECMA Script standard](https://www.ecma-international.org/ecma-262/5.1/#sec-7.6)): -- le premier caractère doit être une lettre, un trait de soulignement (_) ou le symbole dollar ($), -- les autres caractères peuvent être des lettres, des chiffres, des traits de soulignement ou des symboles dollar (les espaces sont proscrits), -- ils différencient les caractères majuscules/minuscules. +- the first character must be a letter, an underscore (_), or a dollar sign ($), +- subsequent characters may be any letter, digit, an underscore or dollar sign (space characters are NOT allowed), +- they are case sensitive. -**Notes :** +**Note:** -- L'utilisation d'un champ comme indice de collection, par exemple a.b[[Table1]Id], n'est pas autorisé. Vous devez utiliser une variable intermédiaire. -- La création d'attributs d'objets à l'aide d'une chaîne entre crochets permet de s'affranchir des règles d'ECMA Script. Par exemple, l'attribut $o["Mon Att. nom"] est valide dans 4D, malgré l'espace. Dans ce cas cependant, il ne sera pas possible d'utiliser la notation à points avec cet attribut. +- Using a table field as a collection index, for example a.b[[Table1]Id], is not allowed. You must use an intermediary variable. +- Creating object attributes using a string in square brackets allows you to override the ECMA Script rules. For example, the $o["My Att"] attribute is valid in 4D, despite the space. In this case, however, it will not be possible to use dot notation with this attribute. -## Exemples -L'utilisation de la notation objet simplifie grandement le code 4D de manipulation des objets. A noter toutefois que la notation utilisant les commandes "OB" reste entièrement prise en charge. +## Examples +Using object notation simplifies the 4D code while handling objects. Note however that the command-based notation is still fully supported. -- Ecriture et lecture de propriétés d'objets (cet exemple compare la notation objet et la syntaxe avec commandes) : +- Writing and reading objects (this example compares object notation and command notation): ```4d - // Utilisation de la notation objet - C_OBJECT($myObj) //déclaration d'une variable objet 4D - $myObj:=New object //création d'un objet et affectation à la variable + // Using the object notation + C_OBJECT($myObj) //declares a 4D variable object + $myObj:=New object //creates an object and assigns to the variable $myObj.age:=56 $age:=$myObj.age //56 - // Utilisation de la syntaxe par commande - C_OBJECT($myObj2) //déclaration d'une variable objet 4D - OB SET($myObj2;"age";42) //création d'un objet et création de la propriété age + // Using the command notation + C_OBJECT($myObj2) //declares a 4D variable object + OB SET($myObj2;"age";42) //creates an object and adds the age property $age:=OB Get($myObj2;"age") //42 - // Bien entendu, les deux notations peuvent être utilisées simultanément + // Of course, both notations can be mixed C_OBJECT($myObj3) OB SET($myObj3;"age";10) $age:=$myObj3.age //10 ``` -- Création de propriétés et affectation de valeurs, y compris d'autres objets : +- Create a property and assign values, including objects: ```4d C_OBJECT($Emp) $Emp:=New object - $Emp.city:="London" //crée la propriété city avec la valeur "London" - $Emp.city:="Paris" //modifie la propriété city + $Emp.city:="London" //creates the city property and sets its value to "London" + $Emp.city:="Paris" //modifies the city property $Emp.phone:=New object("office";"123456789";"home";"0011223344") - //crée la propriété phone avec un autre objet comme valeur + //creates the phone property and sets its value to an object ``` -- Lire une valeur dans un sous-objet est très simple avec la notation objet : +- Get a value in a sub-object is very simple using the object notation: ```4d $vCity:=$Emp.city //"Paris" $vPhone:=$Emp.phone.home //"0011223344" ``` -- Vous pouvez accéder aux propriétés d'objets via des chaînes grâce à l'opérateur [ ] +- You can access properties as strings using the [ ] operator ```4d - $Emp["city"]:="Berlin" //modification de la propriété city - //cette syntaxe est utile pour créer des propriétés à l'aide de variables + $Emp["city"]:="Berlin" //modifies the city property + //this can be useful for creating properties through variables C_TEXT($addr) $addr:="address" For($i;1;4) - $Emp[$addr+Chaine($i)]:="" -End for - // crée 4 propriétés vides "address1...address4" dans l'objet $Emp + $Emp[$addr+String($i)]:="" + End for + // creates 4 empty properties "address1...address4" in the $Emp object ``` From 076e1e06b81b36429176a8cd520680379c467d90 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:21:04 +0100 Subject: [PATCH 128/260] New translations dt_picture.md (French) --- .../translated_docs/fr/Concepts/dt_picture.md | 102 +++++++++--------- 1 file changed, 51 insertions(+), 51 deletions(-) diff --git a/website/translated_docs/fr/Concepts/dt_picture.md b/website/translated_docs/fr/Concepts/dt_picture.md index 2f64925569e2aa..fec043511c0b84 100644 --- a/website/translated_docs/fr/Concepts/dt_picture.md +++ b/website/translated_docs/fr/Concepts/dt_picture.md @@ -3,117 +3,117 @@ id: picture title: Image --- -Un champ, une variable ou expression de type image peut constituer une image Windows ou Macintosh. En règle générale, n'importe quelle image peut être mise sur le conteneur de données ou lue à partir du disque, à l'aide des commandes 4D telles que `READ PICTURE FILE`. +A Picture field, variable or expression can be any Windows or Macintosh picture. In general, this includes any picture that can be put on the pasteboard or read from the disk using 4D commands such as `READ PICTURE FILE`. -4D utilise des API natives pour encoder (écrire) et décoder (lire) les champs et les variables des images sous Windows et macOS. Ces implémentations donnent accès à de nombreux formats natifs, dont le format RAW, couramment utilisé par les appareils photo numériques. +4D uses native APIs to encode (write) and decode (read) picture fields and variables under both Windows and macOS. These implementations provide access to numerous native formats, including the RAW format, currently used by digital cameras. -* sous Windows, 4D utilise WIC (Windows Imaging Component). -* sous macOS, 4D utilise ImageIO. +* on Windows, 4D uses WIC (Windows Imaging Component). +* on macOS, 4D uses ImageIO. -WIC et ImageIO permettent l’utilisation de métadonnées dans les images. Deux commandes, `SET PICTURE METADATA` et `GET PICTURE METADATA`, vous permettent d'en bénéficier dans vos développements. +WIC and ImageIO permit the use of metadata in pictures. Two commands, `SET PICTURE METADATA` and `GET PICTURE METADATA`, let you benefit from metadata in your developments. -## Identifiants de codecs d'images +## Picture Codec IDs 4D supports natively a wide set of [picture formats](FormEditor/pictures.md#native-formats-supported), such as .jpeg, .png, or .svg. -Les formats d'images reconnus par 4D sont retournés par la commande `PICTURE CODEC LIST` sous forme d'identifiants de codecs d'images. Ces identifiants peuvent être : +Picture formats recognized by 4D are returned by the `PICTURE CODEC LIST` command as picture Codec IDs. They can be returned in the following forms: -* une extension (par exemple “.gif”) -* Un type Mime (par exemple “image/jpg”) +* As an extension (for example “.gif”) +* As a MIME type (for example “image/jpeg”) -La forme utilisée pour chaque format dépend du mode de déclaration du codec au niveau du système d’exploitation. Notez que les listes de codecs disponibles pour la lecture et pour l'écriture peuvent différer, étant donné que les codecs d'encodage peuvent nécessiter des licences spécifiques. +The form returned for each format will depend on the way the Codec is recorded at the operating system level. Note that the list of available codecs for reading and writing can be different since encoding codecs may require specific licenses. -Most of the [4D picture management commands](https://doc.4d.com/4Dv18/4D/18/Pictures.201-4504337.en.html) can receive a Codec ID as a parameter. Il est donc impératif d'utiliser l'identifiant système retourné par la commande `PICTURE CODEC LIST`. Les formats d'images reconnus par 4D sont retournés par la commande `PICTURE CODEC LIST`. +Most of the [4D picture management commands](https://doc.4d.com/4Dv18/4D/18/Pictures.201-4504337.en.html) can receive a Codec ID as a parameter. It is therefore imperative to use the system ID returned by the `PICTURE CODEC LIST` command. Picture formats recognized by 4D are returned by the `PICTURE CODEC LIST` command. -## Opérateurs sur les images +## Picture operators -| Opération | Syntaxe | Retourne | Action | -| ------------------------- | --------------- | -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Concaténation horizontale | Image1 + Image2 | Image | Place Image2 à la droite d'Image1 | -| Concaténation verticale | Image1 / Image2 | Image | Place Image2 au-dessous d'Image1 | -| Superposition exclusive | Image1 & Image2 | Image | Superpose Image2 à Image1 (Image2 est au premier plan). Donne le même résultat que `COMBINE PICTURES(pict3;pict1;Superposition;pict2)` | -| Superposition inclusive | Image1 | Image | Image | Superpose Image2 à Image1 et retourne le masque résultant si les deux images sont de même taille. Donne le même résultat que `$equal:=Equal pictures(Pict1;Pict2;Pict3)` | -| Déplacement horizontal | Image + Nombre | Image | Déplace l'image horizontalement d'un nombre de pixels égal à Nombre | -| Déplacement vertical | Image / Nombre | Image | Déplace l'image verticalement d'un nombre de pixels égal à Nombre | -| Redimensionnement | Image * Nombre | Image | Redimensionne l'image au pourcentage Nombre | -| Extension horizontale | Image *+ Nombre | Image | Redimensionne l'image horizontalement au pourcentage Nombre | -| Extension verticale | Image * | Image | Image | Redimensionne l'image verticalement au pourcentage Nombre | +| Operation | Syntax | Returns | Action | +| ------------------------- | ---------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| Horizontal concatenation | Pict1 + Pict2 | Image | Add Pict2 to the right of Pict1 | +| Vertical concatenation | Pict1 / Pict2 | Image | Add Pict2 to the bottom of Pict1 | +| Exclusive superimposition | Pict1 & Pict2 | Image | Superimposes Pict2 on top of Pict1 (Pict2 in foreground). Produces the same result as `COMBINE PICTURES(pict3;pict1;Superimposition;pict2)` | +| Inclusive superimposition | Pict1 | Pict2 | Image | Superimposes Pict2 on Pict1 and returns resulting mask if both pictures are the same size. Produces the same result as `$equal:=Equal pictures(Pict1;Pict2;Pict3)` | +| Horizontal move | Picture + Number | Image | Move Picture horizontally Number pixels | +| Vertical move | Picture / Number | Image | Move Picture vertically Number pixels | +| Resizing | Picture * Number | Image | Resize Picture by Number ratio | +| Horizontal scaling | Picture *+ Number | Image | Resize Picture horizontally by Number ratio | +| Vertical scaling | Picture *| Number | Image | Resize Picture vertically by Number ratio | **Notes :** -- A noter que pour que l'opérateur | puisse être utilisé, Image1 et Image2 doivent être strictement de la même dimension. Si les deux images sont de taille différente, l’opération Image1 | Image2 produit une image vide. -- La commande `COMBINE PICTURES` permet d'effectuer des superpositions en conservant les caractéristiques de chaque image source dans l'image résultante. -- Des opération supplémentaires peuvent être réalisées sur des images à l'aide de la commande `TRANSFORM PICTURE`. -- Il n'existe pas d'opérateurs de comparaison pour les images; en revanche 4D propose d'utiliser la commande `Images egales` pour comparer deux images. +- In order to use the | operator, Pict1 and Pict2 must have exactly the same dimension. If both pictures are a different size, the operation Pict1 | Pict2 produces a blank picture. +- The `COMBINE PICTURES` command can be used to superimpose pictures while keeping the characteristics of each source picture in the resulting picture. +- Additional operations can be performed on pictures using the `TRANSFORM PICTURE` command. +- There is no comparison operators on pictures, however 4D proposes the `Equal picture` command to compare two pictures. -### Exemples +### Examples -Concaténation horizontale +Horizontal concatenation ```4d - cercle+rectangle // Place le rectangle à droite du cercle -rectangle+cercle // Place le cercle à droite du rectangle + circle+rectangle //Place the rectangle to the right of the circle + rectangle+circle //Place the circle to the right of the rectangle ``` ![](assets/en/Concepts/concatHor.en.png) ![](assets/en/Concepts/concatHor2.en.png) -Concaténation verticale +Vertical concatenation ```4d circle/rectangle //Place the rectangle under the circle rectangle/circle //Place the circle under the rectangle ``` ![](assets/en/Concepts/concatVer.en.png) ![](assets/en/Concepts/concatVer2.en.png) -Superposition exclusive +Exclusive superimposition ```4d -Pict3:=Pict1 & Pict2 // Superposer Pict2 à Pict1 +Pict3:=Pict1 & Pict2 // Superimposes Pict2 on top of Pict1 ``` ![](assets/en/Concepts/superimpoExc.fr.png) -Superposition inclusive +Inclusive superimposition ```4d -Pict3:=Pict1|Pict2 // Récupérer le masque résultant de la superposition de deux images de même taille +Pict3:=Pict1|Pict2 // Recovers resulting mask from superimposing two pictures of the same size ``` ![](assets/en/Concepts/superimpoInc.fr.png) -Déplacement horizontal +Horizontal move ```4d -rectangle+50 // Déplace le rectangle 50 pixels vers la droite -rectangle-50 // Déplace le rectangle 50 pixels vers la gauche +rectangle+50 //Move the rectangle 50 pixels to the right +rectangle-50 //Move the rectangle 50 pixels to the left ``` ![](assets/en/Concepts/hormove.en.png) -Déplacement vertical +Vertical move ```4d -rectangle/50 // Déplace le rectangle 50 pixels vers le bas -rectangle/-20 // Déplace le rectangle 20 pixels vers le haut +rectangle/50 //Move the rectangle down by 50 pixels +rectangle/-20 //Move the rectangle up by 20 pixels ``` ![](assets/en/Concepts/vertmove.en.png)![](assets/en/Concepts/vertmove2.en.png) -Redimensionnement +Resize ```4d -rectangle*1.5 // Augmente la taille du rectangle de 50% - rectangle*0.5 // Réduit la taille du rectangle de 50% +rectangle*1.5 //The rectangle becomes 50% bigger +rectangle*0.5 //The rectangle becomes 50% smaller ``` ![](assets/en/Concepts/resize.en.png)![](assets/en/Concepts/resisze2.en.png) -Extension horizontale +Horizontal scaling ```4d -cercle*+3 // Multiplie par 3 la largeur du cercle - cercle*+0,25 // La largeur du cercle est réduite à un quart de sa taille originale +circle*+3 //The circle becomes 3 times wider +circle*+0.25 //The circle's width becomes a quarter of what it was ``` ![](assets/en/Concepts/Horscaling.en.png)![](assets/en/Concepts/Horscaling2.en.png) -Extension verticale +Vertical scaling ```4d -cercle*/2 // Double la hauteur du cercle - cercle*/0.25 // La hauteur du cercle est réduite à un quart de sa taille originale +circle*|2 //The circle becomes twice as tall +circle*|0.25 //The circle's height becomes a quarter of what it was ``` ![](assets/en/Concepts/vertscaling.en.png)![](assets/en/Concepts/veticalscaling2.en.png) From fd9c1ba53df668deca5a6d3e120a999037797946 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:21:06 +0100 Subject: [PATCH 129/260] New translations dt_pointer.md (French) --- .../translated_docs/fr/Concepts/dt_pointer.md | 226 +++++++++--------- 1 file changed, 113 insertions(+), 113 deletions(-) diff --git a/website/translated_docs/fr/Concepts/dt_pointer.md b/website/translated_docs/fr/Concepts/dt_pointer.md index 882ef996e806e5..50a303c7183563 100644 --- a/website/translated_docs/fr/Concepts/dt_pointer.md +++ b/website/translated_docs/fr/Concepts/dt_pointer.md @@ -3,211 +3,211 @@ id: pointer title: Pointeur --- -Les variables ou expressions de type Pointeur sont des références à d'autres variables (y compris des tableaux et des éléments de tableaux), à des tables, des champs ou des objets. Il n'existe pas de champ de type Pointeur. +A Pointer variable or expression is a reference to another variable (including arrays and array elements), table, field, or object. There is no field of type Pointer. -Les pointeurs sont des outils de programmation avancée. Lorsque vous utilisez le langage de 4D, vous vous référez aux différents objets par l’intermédiaire de leur nom — en particulier les tables, champs, variables et tableaux. Pour appeler l’un d’entre eux, vous écrivez simplement son nom. Cependant, il est parfois utile de pouvoir appeler ou référencer ces éléments sans nécessairement connaître leur nom. C’est ce que permettent les pointeurs. +Pointers provide an advanced way (in programming) to refer to data. When you use the language, you access various objects—in particular, tables, fields, variables, objects, and arrays—by simply using their names. However, it is often useful to refer to these elements and access them without knowing their names. This is what pointers let you do. -Le concept de pointeur n’est pas tellement éloigné de la vie courante. Vous vous référez souvent à des choses sans connaître leur identité exacte. Par exemple, vous pourriez dire à un ami : «Allons faire un tour en voiture» au lieu de «Allons faire un tour en voiture avec la plaque d’immatriculation 123ABD» Dans ce cas, vous faites référence à la voiture avec la plaque d'immatriculation 123ABD en utilisant l'expression «votre voiture» L'expression «voiture avec plaque d'immatriculation 123ABD» est comme le nom d'un objet, et l'utilisation de l'expression «votre voiture» revient à utiliser un pointeur pour référencer l'objet. Dans ce cas, vous faites référence à la voiture avec la plaque d'immatriculation 123ABD en utilisant l'expression «votre voiture» L'expression «voiture avec plaque d'immatriculation 123ABD» est comme le nom d'un objet, et l'utilisation de l'expression «votre voiture» revient à utiliser un pointeur pour référencer l'objet. +The concept behind pointers is not that uncommon in everyday life. You often refer to something without knowing its exact identity. For example, you might say to a friend, “Let’s go for a ride in your car” instead of “Let’s go for a ride in the car with license plate 123ABD.” In this case, you are referencing the car with license plate 123ABD by using the phrase “your car.” The phrase “car with license plate 123ABD” is like the name of an object, and using the phrase “your car” is like using a pointer to reference the object. -La capacité de se référer à quelque chose sans connaître son identité exacte est très utile. Si votre ami s’achetait une nouvelle voiture, l’expression “ta voiture” serait toujours exacte — ce serait toujours une voiture et vous pourriez toujours aller quelque part avec. Les pointeurs fonctionnent de la même manière. Par exemple, un pointeur peut pointer à un moment donné vers un champ numérique appelé Age, et plus tard vers une variable numérique appelée Ancien âge. Dans les deux cas, le pointeur référence des données numériques pouvant être utilisée dans des calculs. +Being able to refer to something without knowing its exact identity is very useful. In fact, your friend could get a new car, and the phrase “your car” would still be accurate—it would still be a car and you could still take a ride in it. Pointers work the same way. For example, a pointer could at one time refer to a numeric field called Age, and later refer to a numeric variable called Old Age. In both cases, the pointer references numeric data that could be used in a calculation. -Vous pouvez utiliser des pointeurs pour référencer des tables, des champs, des variables, des tableaux et des éléments de tableaux. Le tableau suivant vous fournit un exemple de chaque type : +You can use pointers to reference tables, fields, variables, arrays, array elements, and objects. The following table gives an example of each data type: -| Type | Référencement | Référencement | Affectation | -| ----------- | ----------------------- | ------------------------ | ------------------------ | -| Table | vpTable:=->[Table] | DEFAULT TABLE(vpTable->) | n/a | -| Champ | vpField:=->[Table]Field | ALERT(vpField->) | vpField->:="John" | -| Variable | vpVar:=->Variable | ALERT(vpVar->) | vpVar->:="John" | -| Tableau | vpArr:=->Array | SORT ARRAY(vpArr->;>) | COPY ARRAY (Arr;vpArr->) | -| Elém. tabl. | vpElem:=->Array{1} | ALERT (vpElem->) | vpElem->:="John" | -| Objet | vpObj:=->myObject | ALERT (vpObj->myProp) | vpObj->myProp:="John" | +| Type | To Reference | To Use | To Assign | +| ------------- | ----------------------- | ------------------------ | ------------------------ | +| Table | vpTable:=->[Table] | DEFAULT TABLE(vpTable->) | n/a | +| Field | vpField:=->[Table]Field | ALERT(vpField->) | vpField->:="John" | +| Variable | vpVar:=->Variable | ALERT(vpVar->) | vpVar->:="John" | +| Array | vpArr:=->Array | SORT ARRAY(vpArr->;>) | COPY ARRAY (Arr;vpArr->) | +| Array element | vpElem:=->Array{1} | ALERT (vpElem->) | vpElem->:="John" | +| Objet | vpObj:=->myObject | ALERT (vpObj->myProp) | vpObj->myProp:="John" | -## Utiliser des pointeurs : un exemple +## Using a pointer: Basic example -Il est plus facile d’expliquer l’utilisation des pointeurs au travers d’un exemple. Cet exemple vous montre comment accéder à une variable par l’intermédiaire d’un pointeur. Nous commençons par créer la variable : +It is easiest to explain the use of pointers through an example. This example shows how to access a variable through a pointer. We start by creating a variable: ```4d -MaVar:="Bonjour" +$MyVar:="Hello" ``` -$MyVar is now a variable containing the string “Hello.” We can now create a pointer to $MyVar: We can now create a pointer to $MyVar: +$MyVar is now a variable containing the string “Hello.” We can now create a pointer to $MyVar: ```4d -C_POINTER($MonPointeur) -$MonPointeur:=->MaVar +C_POINTER($MyPointer) +$MyPointer:=->$MyVar ``` -The -> symbol means “get a pointer to.” The -> symbol means “get a pointer to.” This symbol is formed by a dash followed by a “greater than” sign. Dans ce cas, il crée un pointeur qui référence ou “pointe vers” $MaVar. Ce pointeur est assigné à MonPointeur via l’opérateur d’assignation. +The -> symbol means “get a pointer to.” This symbol is formed by a dash followed by a “greater than” sign. In this case, it gets the pointer that references or “points to” $MyVar. This pointer is assigned to MyPointer with the assignment operator. -$MonPointeur est désormais une variable qui contient un pointeur vers $MaVar. $MonPointeur ne contient pas “Bonjour”, la valeur de $MaVar, mais vous pouvez utiliser $MonPointeur pour obtenir cette valeur. L’expression suivante retourne la valeur de $MaVar : +$MyPointer is now a variable that contains a pointer to $MyVar. $MyPointer does not contain “Hello”, which is the value in $MyVar, but you can use $MyPointer to get this value. The following expression returns the value in $MyVar: ```4d -$MonPointeur-> +$MyPointer-> ``` -Dans ce cas, la chaîne “Bonjour” est retournée. Lorsque le symbole -> est placé derrière un pointeur, la valeur de l’objet vers lequel pointe le pointeur est récupérée. On dit alors qu’on dépointe le pointeur. +In this case, it returns the string “Hello”. The -> symbol, when it follows a pointer, references the object pointed to. This is called dereferencing. -Il est important de comprendre que vous pouvez utiliser un pointeur suivi du symbole -> partout où vous auriez pu utiliser l’objet pointé lui-même. Vous pouvez placer l’expression $MonPointeur-> partout où vous pourriez utiliser la variable originale $MaVar. Par exemple, l'instruction suivante affiche une boîte de dialogue d’alerte comportant le mot Bonjour : +It is important to understand that you can use a pointer followed by the -> symbol anywhere that you could have used the object that the pointer points to. This means that you could use the expression $MyPointer-> anywhere that you could use the original $MyVar variable. For example, the following line displays an alert box with the word Hello in it: ```4d -ALERTE($MonPointeur->) +ALERT($MyPointer->) ``` -Vous pouvez également utiliser $MonPointeur pour modifier la valeur de $MaVar. Par exemple, l’instruction suivante stocke la chaîne “Au revoir” dans la variable $MaVar : +You can also use $MyPointer to change the data in $MyVar. For example, the following statement stores the string "Goodbye" in the variable $MyVar: ```4d -$MonPointeur->:="Au revoir" +$MyPointer->:="Goodbye" ``` -Si vous examinez les deux utilisations de l’expression $MonPointeur-> ci-dessus, vous constatez que cette expression se comporte exactement comme si vous aviez utilisé $MaVar à sa place. En résumé : les deux lignes suivantes effectuent la même opération — elles affichent une boîte de dialogue d’alerte contenant la valeur courante de la variable $MaVar : +If you examine the two uses of the expression $MyPointer->, you will see that it acts just as if you had used $MyVar instead. In summary, the following two lines perform the same action—both display an alert box containing the current value in the variable $MyVar: ```4d -ALERT($MonPointeur->) - ALERT($MaVar) +ALERT($MyPointer->) +ALERT($MyVar) ``` -Les deux lignes suivantes effectuent la même opération ; elles assignent la chaîne "Au revoir" à $MaVar : +The following two lines perform the same action— both assign the string "Goodbye" to $MyVar: ```4d -$MonPointeur->:="Au revoir" -$MaVar:="Au revoir" +$MyPointer->:="Goodbye" +$MyVar:="Goodbye" ``` -## Opérateurs sur les pointeurs +## Pointer operators -Avec : +With: ```4d - // vPtrA et vPtrB pointent sur le même objet - vPtrA:=->unObjet - vPtrB:=->unObjet - // vPtrC pointe sur un autre objet - vPtrC:=->autreObjet + ` vPtrA and vPtrB point to the same object + vPtrA:=->anObject + vPtrB:=->anObject + ` vPtrC points to another object + vPtrC:=->anotherObject ``` -| Opération | Syntaxe | Retourne | Expression | Valeur | -| --------- | ------------------- | -------- | ------------- | ------ | -| Egalité | Pointeur = Pointeur | Booléen | vPtrA = vPtrB | Vrai | -| | | | vPtrA = vPtrB | Faux | -| Inégalité | Pointeur # Pointeur | Booléen | vPtrA # vPtrC | Vrai | -| | | | vPtrA # vPtrB | Faux | +| Operation | Syntax | Returns | Expression | Value | +| ---------- | ----------------- | ------- | ------------- | ----- | +| Equality | Pointer = Pointer | Booléen | vPtrA = vPtrB | True | +| | | | vPtrA = vPtrC | False | +| Inequality | Pointer # Pointer | Booléen | vPtrA # vPtrC | True | +| | | | vPtrA # vPtrB | False | -## Principales utilisations -### Utiliser des pointeurs vers des tables -Partout où le langage requiert un nom de table, vous pouvez utiliser un pointeur dépointé vers une table. Pour créer un pointeur vers une table, écrivez une instruction du type : +## Main usages +### Pointers to tables +Anywhere that the language expects to see a table, you can use a dereferenced pointer to the table. You create a pointer to a table by using a line like this: ```4d -$TablePtr:=->[touteTable] +$TablePtr:=->[anyTable] ``` -Vous pouvez également récupérer un pointeur vers une table à l’aide de la fonction Table. Par exemple : +You can also get a pointer to a table by using the `Table` command: ```4d $TablePtr:=Table(20) ``` -Vous pouvez utiliser le pointeur dépointé dans vos commandes, comme ceci : +You can use the dereferenced pointer in commands, like this: ```4d DEFAULT TABLE($TablePtr->) ``` -### Utiliser des pointeurs vers des champs -Partout où le langage requiert un nom de champ, vous pouvez utiliser un pointeur dépointé vers un champ. Pour créer un pointeur vers un champ, écrivez une ligne d'instruction du type : +### Pointers to fields +Anywhere that the language expects to see a field, you can use a dereferenced pointer to reference the field. You create a pointer to a field by using a line like this: ```4d -$ChampPtr:=->[uneTable]CeChamp +$FieldPtr:=->[aTable]ThisField ``` -Vous pouvez également récupérer un pointeur vers un champ à l’aide de la fonction `Champ`. Par exemple : +You can also get a pointer to a field by using the `Field` command, for example: ```4d -$ChampPtr:=Champ(1;2) +$FieldPtr:=Field(1;2) ``` -Vous pouvez utiliser le pointeur dépointé dans vos commandes, comme ceci : +You can use the dereferenced pointer in commands, like this: ```4d OBJECT SET FONT($FieldPtr->;"Arial") ``` -### Utiliser des pointeurs vers des variables +### Pointers to local variables -Lorsque vous utilisez des pointeurs vers des variables locales ou des variables process, vous devez veiller à ce que la variable pointée soit bien définie au moment de l’utilisation du pointeur. Rappelons que les variables locales sont supprimées à la fin de l’exécution de la méthode qui les a créées et les variables process à la fin du process dans lequel elles ont été créées. L’appel d’un pointeur vers une variable qui n’existe plus provoque une erreur de syntaxe en mode interprété (variable indéfinie) mais peut générer une erreur plus conséquente en mode compilé. +When you use pointers to process or local variables, you must be sure that the variable pointed to is already set when the pointer is used. Keep in mind that local variables are deleted when the method that created them has completed its execution and process variables are deleted at the end of the process that created them. When a pointer calls a variable that no longer exists, this causes a syntax error in interpreted mode (variable not defined) but it can generate a more serious error in compiled mode. -Les pointeurs vers des variables locales permettent dans de nombreux cas d’économiser des variables process. Les pointeurs vers des variables locales peuvent être utilisés uniquement à l’intérieur d’un même process. Dans le débogueur, lorsque vous affichez un pointeur vers une variable locale déclarée dans une autre méthode, le nom de la méthode d’origine est indiquée entre parenthèses, derrière le pointeur. Par exemple, si vous écrivez dans Méthode1 : +Pointers to local variables allow you to save process variables in many cases. Pointers to local variables can only be used within the same process. In the debugger, when you display a pointer to a local variable that has been declared in another method, the original method name is indicated in parentheses, after the pointer. For example, if you write in Method1: ```4d - $MaVar:="Bonjour" - Méthode2(->$MaVar) + $MyVar:="Hello world" + Method2(->$MyVar) ``` -Dans Méthode2, le débogueur affichera $1 de la façon suivante : +In Method2, the debugger will display $1 as follows: -| $1 | ->$MaVar (Méthode1) | -| -- | ------------------- | -| | | +| $1 | ->$MyVar (Method1) | +| -- | ------------------ | +| | | -La valeur de $1 sera : +The value of $1 will be: -| $MaVar(Méthode1) | "Bonjour" | -| ---------------- | --------- | -| | | +| $MyVar (Method1) | "Hello world" | +| ---------------- | ------------- | +| | | -### Utiliser des pointeurs vers des éléments de tableau -Vous pouvez créer un pointeur vers un élément de tableau. Par exemple, les lignes d'instruction suivantes créent un tableau et assignent à une variable appelée $ElémPtr un pointeur vers le premier élément : +### Pointers to array elements +You can create a pointer to an array element. For example, the following lines create an array and assign a pointer to the first array element to a variable called $ElemPtr: ```4d -ARRAY REAL($unTableau;10) // Créer un tableau - $ElémPtr:=->$unTableau{1} // Créer un pointeur vers l’élément de tableau +ARRAY REAL($anArray;10) //Create an array +$ElemPtr:=->$anArray{1} //Create a pointer to the array element ``` -Vous pouvez alors utiliser le pointeur dépointé pour assigner une valeur à l’élément, comme ceci : +You could use the dereferenced pointer to assign a value to the element, like this: ```4d -$ElémPtr->:=8 +$ElemPtr->:=8 ``` -### Utiliser des pointeurs vers des tableaux -Vous pouvez créer un pointeur vers un tableau. Par exemple, les lignes d'instruction suivantes créent un tableau et assignent à la variable nommée $TabPtr un pointeur vers le tableau : +### Pointers to arrays +You can create a pointer to an array. For example, the following lines create an array and assign a pointer to the array to a variable called $ArrPtr: ```4d -ARRAY REAL($unTableau;10) // Créer un tableau -$TabPtr:=->$unTableau // Créer un pointeur vers le tableau +ARRAY REAL($anArray;10) //Create an array +$ArrPtr:=->$anArray //Create a pointer to the array ``` -Il est important de comprendre que ce pointeur pointe vers le tableau, et non vers un élément du tableau. Par exemple, vous pourriez utiliser le pointeur dépointé de la manière suivante : +It is important to understand that the pointer points to the array; it does not point to an element of the array. For example, you can use the dereferenced pointer from the preceding lines like this: ```4d -SORT ARRAY(TabPtr->;>) // Tri du tableau +SORT ARRAY($ArrPtr->;>) //Sort the array ``` -Si vous devez vous référer au quatrième élément du tableau à l’aide du pointeur, vous pouvez écrire : +If you need to refer to the fourth element in the array by using the pointer, you do this: ```4d - TabPtr->{4}:=84 + ArrPtr->{4}:=84 ``` -### Passer des pointeurs aux méthodes -Vous pouvez passer un pointeur en tant que paramètre d’une méthode. A l’intérieur de la méthode, vous pouvez modifier l’objet référencé par le pointeur. Par exemple, la méthode suivante, `Recoit Deux`, reçoit deux paramètres qui sont des pointeurs. Elle passe l’objet référencé par le premier paramètre en caractères majuscules, et l’objet référencé par le second paramètre en caractères minuscules. +### Pointers as parameters to methods +You can pass a pointer as a parameter to a method. Inside the method, you can modify the object referenced by the pointer. For example, the following method, `takeTwo`, takes two parameters that are pointers. It changes the object referenced by the first parameter to uppercase characters, and the object referenced by the second parameter to lowercase characters. Here is the project method: ```4d - // Méthode projet Recoit Deux - // $1 – Pointeur vers un champ ou une variable de type Chaîne. Passe la chaîne en majuscules. - // $2 – Pointeur vers un champ ou une variable de type Chaîne. Passe la chaîne en minuscules. + //takeTwo project method + //$1 – Pointer to a string field or variable. Change this to uppercase. + //$2 – Pointer to a string field or variable. Change this to lowercase. $1->:=Uppercase($1->) $2->:=Lowercase($2->) ``` -L'instruction suivante emploie la méthode `Recoit Deux` pour passer un champ en caractères majuscules et une variable en caractères minuscules : +The following line uses the `takeTwo` method to change a field to uppercase characters and to change a variable to lowercase characters: ``` -takeTwo(->[MaTable]MonChamp;->$MaVar) +takeTwo(->[myTable]myField;->$MyVar) ``` -Si le champ, [MaTable]MonChamp, contenait la chaîne "dupont", celle-ci deviendrait "DUPONT". Si la variable $MaVar contenait la chaîne "BONJOUR", celle-ci deviendrait "bonjour". +If the field [myTable]myField contained the string "jones", it would be changed to the string "JONES". If the variable $MyVar contained the string "HELLO", it would be changed to the string "hello". -Dans la méthode Recoit Deux (et, en fait, à chaque fois que vous utilisez des pointeurs), il est important que les types de données des objets référencés soient corrects. Dans l’exemple précédent, les pointeurs doivent pointer vers des objets contenant une chaîne ou un texte. +In the takeTwo method, and in fact, whenever you use pointers, it is important that the data type of the object being referenced is correct. In the previous example, the pointers must point to something that contains a string or text. -### Pointeurs vers des pointeurs -Si vous aimez compliquer les choses à l'extrême (bien que cela ne soit pas nécessaire dans 4D), vous pouvez utiliser des pointeurs pour référencer d'autres pointeurs. Examinons l’exemple suivant : +### Pointers to pointers +If you really like to complicate things, you can use pointers to reference other pointers. Consider this example: ```4d - $MaVar:="Bonjour" -$PointeurUn:=->$MaVar -$PointeurDeux:=->$PointeurUn -($PointeurDeux->)->:="Au revoir" -ALERT(($PointeurDeux->)->) + $MyVar:="Hello" + $PointerOne:=->$MyVar + $PointerTwo:=->$PointerOne + ($PointerTwo->)->:="Goodbye" + ALERT(($PointerTwo->)->) ``` -Cet exemple affiche une boîte de dialogue d’alerte contenant “Au revoir”. +It displays an alert box with the word “Goodbye” in it. -Voici la description de chaque ligne de l’exemple : +Here is an explanation of each line of the example: -- $MaVar := "Bonjour" --> Cette ligne place simplement la chaîne "Bonjour" dans la variable $MaVar. -- $PointeurUn := ->$MaVar --> $PointeurUn contient désormais un pointeur vers $MaVar. -- $PointeurDeux :=->$PointeurUn --> $PointeurDeux (une nouvelle variable) contient un pointeur vers $PointeurUn, qui, elle, pointe vers $MaVar. -- ($PointeurDeux->)-> := "Au revoir" --> $PointeurDeux-> référence le contenu de $PointeurUn, qui elle-même référence $MaVar. Par conséquent, ($PointeurDeux->)-> référence le contenu de $MaVar. Donc, dans ce cas, la valeur "Au revoir" est assignée à la $MaVar. -- ALERT (($PointeurDeux->)->) --> C'est ici la même chose que précédemment : $PointeurDeux-> référence le contenu de $PointeurUn, qui elle-même référence $MaVar. Par conséquent, ($PointeurDeux->)-> référence le contenu de $MaVar. Donc, dans ce cas, la boîte de dialogue d'alerte affiche le contenu de $MaVar. +- $MyVar:="Hello" --> This line puts the string "Hello" into the variable $MyVar. +- $PointerOne:=->$MyVar --> $PointerOne now contains a pointer to $MyVar. +- $PointerTwo:=->$PointerOne --> $PointerTwo (a new variable) contains a pointer to $PointerOne, which in turn points to $MyVar. +- ($PointerTwo->)->:="Goodbye" --> $PointerTwo-> references the contents of $PointerOne, which in turn references $MyVar. Therefore ($PointerTwo->)-> references the contents of $MyVar. So in this case, $MyVar is assigned "Goodbye". +- ALERT (($PointerTwo->)->) --> Same thing: $PointerTwo-> references the contents of $PointerOne, which in turn references $MyVar. Therefore ($PointerTwo->)-> references the contents of $MyVar. So in this case, the alert box displays the contents of $MyVar. -La ligne suivante place la valeur "Bonjour" dans $MaVar : +The following line puts "Hello" into $MyVar: ```4d -($PointeurDeux->)->:="Bonjour" +($PointerTwo->)->:="Hello" ``` -La ligne suivante récupère "Bonjour" à partir de $MaVar et la place dans $NouvelleVar : +The following line gets "Hello" from $MyVar and puts it into $NewVar: ``` -$NouvelleVar:=($PointeurDeux->)-> +$NewVar:=($PointerTwo->)-> ``` -**Important :** Vous devez utiliser des parenthèses lors des déréférencements multiples. +**Important:** Multiple dereferencing requires parentheses. From 813b728370fe8267afaa0a1728d2b202ebfec7ac Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:21:08 +0100 Subject: [PATCH 130/260] New translations dt_string.md (French) --- .../translated_docs/fr/Concepts/dt_string.md | 204 +++++++++--------- 1 file changed, 102 insertions(+), 102 deletions(-) diff --git a/website/translated_docs/fr/Concepts/dt_string.md b/website/translated_docs/fr/Concepts/dt_string.md index c641a1028ae41f..7d767710b708f5 100644 --- a/website/translated_docs/fr/Concepts/dt_string.md +++ b/website/translated_docs/fr/Concepts/dt_string.md @@ -3,94 +3,94 @@ id: string title: Chaine --- -Chaîne est un terme générique utilisé pour : +String is a generic term that stands for: -- Les variables ou champs de type Texte : un champ, une variable ou une expression de type Texte peut contenir de 0 à 2 Go de texte. -- Les variables ou champs de type alphanumérique : un champ alphanumérique peut contenir de 0 à 255 caractères (la limite est fixée lors de la définition du champ). +- Text fields or variables: a Text field, variable, or expression may contain from 0 to 2 GB of text. +- Alphanumeric fields: an Alphanumeric field may contain from 0 to 255 characters (limit set when field is defined). -## Constantes littérales de type chaîne +## String literals -Une constante littérale de type chaîne est incluse entre des guillemets droits ("…"). En voici quelques exemples : +A string literal is enclosed in double, straight quotation marks ("..."). Here are some examples of string literals: ```4d -"Ajouter Enregistrements" -"Aucun enregistrement trouvé." -"Facture" -``` - -Une chaîne vide est spécifiée par la succession de deux guillemets (""). - -### Séquences d’échappement -Les séquences d’échappement suivantes peuvent être utilisées dans les chaînes : - -| Séquence d’échappement | Caractère remplacé | -| ---------------------- | --------------------------- | -| \n | LF (Retour ligne) | -| \t | HT (Tabulation) | -| \r | CR (Retour chariot) | -| \\\ | \ (Barre oblique inversée) | -| \\" | " (Guillemets) | - -**Note:** Le caractère \ est utilisé comme séparateur dans les chemins d’accès sous Windows. Vous devez donc saisir un double \\ lorsque vous souhaitez insérer une barre oblique inversée devant un caractère utilisé dans une des séquences d’échappement reconnues par 4D (ex : “C:\\MesDocuments\\Nouveaux.txt”). - -## Opérateurs sur les chaînes - -| Opération | Syntaxe | Retourne | Expression | Valeur | -| ------------------- | ---------------- | -------- | ----------------------- | -------- | -| Concaténation | Chaîne + Chaîne | Chaine | "abc" + "def" | "abcdef" | -| Répétition | Chaîne * Nombre | Chaine | "ab" * 3 | "ababab" | -| Egalité | Chaîne = Chaîne | Booléen | "abc" = "abc" | Vrai | -| | | | "abc" = "abd" | Faux | -| Inégalité | Chaîne # Chaîne | Booléen | "abc" # "abd" | Vrai | -| | | | "abc" # "abc" | Faux | -| Supérieur à | Chaîne > Chaîne | Booléen | "abd" > "abc" | Vrai | -| | | | "abc" > "abc" | Faux | -| Inférieur à | Chaîne < Chaîne | Booléen | "abc" < "abd" | Vrai | -| | | | "abc" < "abc" | Faux | -| Supérieur ou égal à | Chaîne >= Chaîne | Booléen | "abd" >= "abc" | Vrai | -| | | | "abc" >= "abd" | Faux | -| Inférieur ou égal à | Chaîne <= Chaîne | Booléen | "abc" <= "abd" | Vrai | -| | | | "abd" <= "abc" | Faux | -| Contient mot-clé | Chaîne % Chaîne | Booléen | "Alpha Bravo" % "Bravo" | Vrai | -| | | | "Alpha Bravo" % "ravo" | Faux | -| | Image % Chaîne | Booléen | Expr_image % "Mer" | True (*) | - -(*) Si le mot-clé "Mer" a été associé à l'image stockée dans l'expression image (champ ou variable). - -## Comparaisons de chaînes - -- Les chaînes sont toujours comparées caractère par caractère (hormis en cas de recherche par [mot-clé](dt_string.md#keywords), cf. ci-dessous). -- Lors d'une comparaison de chaînes, 4D ne tient pas compte de la casse des caractères ; par exemple, "a"="A" retourne `VRAI`. Pour savoir si des caractères sont en majuscules ou en minuscules, vous devez comparer leurs codes de caractères. Par exemple, l'expression suivante retourne `FAUX` : +"Add Records" +"No records found." +"Invoice" +``` + +An empty string is specified by two quotation marks with nothing between them (""). + +### Escape sequences +The following escape sequences can be used within strings: + +| Escape sequence | Character replaced | +| --------------- | -------------------- | +| \n | LF (Line feed) | +| \t | HT (Tab) | +| \r | CR (Carriage return) | +| \\\ | \ (Backslash) | +| \\" | " (Quotation marks) | + +**Note:** The \ (backslash) character is used as a separator in pathnames under Windows. You must therefore use a double backslash \\\ in paths when you want to have a backslash in front of a character used in one of the escape sequences recognized by 4D (e.g. "C:\\\MyDocuments\\\New.txt"). + +## String operators + +| Operation | Syntax | Returns | Expression | Value | +| ------------------------ | ---------------- | ------- | ----------------------- | -------- | +| Concatenation | String + String | Chaine | "abc" + "def" | "abcdef" | +| Repetition | String * Number | Chaine | "ab" * 3 | "ababab" | +| Equality | String = String | Booléen | "abc" = "abc" | True | +| | | | "abc" = "abd" | False | +| Inequality | String # String | Booléen | "abc" # "abd" | True | +| | | | "abc" # "abc" | False | +| Greater than | String > String | Booléen | "abd" > "abc" | True | +| | | | "abc" > "abc" | False | +| Less than | String < String | Booléen | "abc" < "abd" | True | +| | | | "abc" < "abc" | False | +| Greater than or equal to | String >= String | Booléen | "abd" >= "abc" | True | +| | | | "abc" >= "abd" | False | +| Less than or equal to | String <= String | Booléen | "abc" <= "abd" | True | +| | | | "abd" <= "abc" | False | +| Contains keyword | String % String | Booléen | "Alpha Bravo" % "Bravo" | True | +| | | | "Alpha Bravo" % "ravo" | False | +| | Picture % String | Booléen | Picture_expr % "Mer" | True (*) | + +(*) If the keyword "Mer" is associated with the picture stored in the picture expression (field or variable). + +## String comparisons + +- Strings are compared on a character-by-character basis (except in the case of searching by [keywords](dt_string.md#keywords), see below). +- When strings are compared, the case of the characters is ignored; thus, "a"="A" returns `TRUE`. To test if the case of two characters is different, compare their character codes. For example, the following expression returns `FALSE`: ```4d -Code de caractere("A")=Code de caractere("a") // 65 n'est pas égal à 97 +Character code("A")=Character code("a") // because 65 is not equal to 97 ``` -- Lors d'une comparaison de chaînes, les caractères diacritiques sont comparés à l'aide de la table de comparaison des caractères de votre machine. Par exemple, les expressions suivantes retournent `VRAI` : +- When strings are compared, diacritical characters are taken into account. For example, the following expressions return `TRUE`: ```4d "n"="ñ" "n"="Ñ" "A"="å" - // etc + // and so on ``` -**Note :** Les comparaisons de chaîne tiennent compte des spécificités du langage **défini pour le fichier de données 4D** (qui n'est pas toujours identique au langage défini pour le système). +**Note:** String comparison takes into account specificities of the language **defined for the 4D data file** (which is not always the same as the language defined for the system). -### Le joker (@) +### Wilcard character (@) -Le langage 4D prend en charge **@** en tant que joker. Ce caractère peut être utilisé dans toute comparaison de chaînes. Ainsi, par exemple, l'expression suivante est évaluée à `TRUE` : +The 4D language supports **@** as a wildcard character. This character can be used in any string comparison to match any number of characters. For example, the following expression is `TRUE`: ```4d "abcdefghij"="abc@" ``` -Le joker doit être utilisé dans le second opérande (la chaîne qui se trouve à droite de l'opérateur). L'expression suivante est évaluée à `FAUX` car le joker est alors considéré en tant que caractère : +The wildcard character must be used within the second operand (the string on the right side) in order to match any number of characters. The following expression is `FALSE`, because the @ is considered only as a one character in the first operand: ```4d "abc@"="abcdefghij" ``` -Le joker signifie “un ou plusieurs caractères sinon rien”. Les expressions suivantes sont évaluées à `VRAI` : +The wildcard means "one or more characters or nothing". The following expressions are `TRUE`: ```4d "abcdefghij"="abcdefghij@" @@ -100,69 +100,69 @@ Le joker signifie “un ou plusieurs caractères sinon rien”. Les expressions "abcdefghij"="@abcde@fghij@" ``` -En revanche, dans tous les cas, lorsque deux jokers consécutifs sont placés dans une comparaison de chaînes, celle-ci sera évaluée à `FAUX`. L'expression suivante est à `FAUX` : +On the other hand, whatever the case, a string comparison with two consecutive wildcards will always return `FALSE`. The following expression is `FALSE`: ```4d "abcdefghij"="abc@@fg" ``` -Lorsque l'opérateur de comparaison est ou contient un symbole < ou >, seule la comparaison avec un seul joker situé en fin d'opérande est prise en charge : +When the comparison operator is or contains a < or > symbol, only comparison with a single wildcard located at the end of the operand is supported: ```4d - "abcd"<="abc@" //Comparaison valide - "abcd"<="abc@ef" //Comparaison non valide + "abcd"<="abc@" // Valid comparison + "abcd"<="abc@ef" //Not a valid comparison ``` -Si vous souhaitez effectuer des comparaisons ou des recherches utilisant @ en tant que caractère (et non en tant que joker), vous devez utiliser l'instruction `Code de caractere(Arobase)`. Imaginons par exemple que vous souhaitiez savoir si une chaîne se termine par le caractère @. L’expression suivante (si $vaValeur n'est pas vide) retourne toujours `VRAI` : +If you want to execute comparisons or queries using @ as a character (and not as a wildcard), you need to use the `Character code(At sign)` instruction. Imagine, for example, that you want to know if a string ends with the @ character. The following expression (if $vsValue is not empty) is always `TRUE`: ```4d -($vaValeur[[Longueur($vaValeur)]]="@") +($vsValue[[Length($vsValue)]]="@") ``` -L'expression suivante sera correctement évaluée : +The following expression will be evaluated correctly: ```4d -(Code de caractere($vaValeur[[Longueur($vaValeur)]])#64) +(Character code($vsValue[[Length($vsValue)]])#64) ``` -**Note :** Une option 4D du mode Développement vous permet de paramétrer le mode d’interprétation du caractère @ lorsque celui-ci est inclus dans une chaîne de caractères. +**Note:** A 4D option in the Design environment allows you to define how the @ character is interpreted when it is included in a character string. -### Mots-clés +### Keywords -A la différence des autres comparaisons de chaîne, les recherches par mots-clés recherchent des “mots” dans des “textes” : les mots sont évalués individuellement et dans leur globalité. L’opérateur **%** retournera toujours `Faux` si la recherche porte sur plusieurs mots ou une partie de mot (par exemple une syllabe). Les “mots” sont des chaînes de caractères encadrées par des “séparateurs”, qui sont les espaces, les caractères de ponctuation et les tirets. Une apostrophe, comme dans “aujourd'hui”, est généralement considérée comme partie du mot, mais sera ignorée dans certains cas (cf. règles ci-dessous). Les nombres peuvent être recherchés car ils sont évalués dans leur ensemble (incluant les symboles décimaux). Les autres symboles (monnaie, température, etc.) seront ignorés. +Unlike other string comparisons, searching by keywords looks for "words" in "texts": words are considered both individually and as a whole. The **%** operator always returns `False` if the query concerns several words or only part of a word (for example, a syllable). The “words” are character strings surrounded by “separators,” which are spaces and punctuation characters and dashes. An apostrophe, like in “Today's”, is usually considered as part of the word, but will be ignored in certain cases (see the rules below). Numbers can be searched for because they are evaluated as a whole (including decimal symbols). Other symbols (currency, temperature, and so on) will be ignored. ```4d - "Alpha Bravo Charlie"%"Bravo" // Retourne Vrai - "Alpha Bravo Charlie"%"vo" // Retourne Faux - "Alpha Bravo Charlie"%"Alpha Bravo" // Retourne Faux - "Alpha,Bravo,Charlie"%"Alpha" // Retourne Vrai - "Software and Computers"%"comput@" // Retourne Vrai + "Alpha Bravo Charlie"%"Bravo" // Returns True + "Alpha Bravo Charlie"%"vo" // Returns False + "Alpha Bravo Charlie"%"Alpha Bravo" // Returns False + "Alpha,Bravo,Charlie"%"Alpha" // Returns True + "Software and Computers"%"comput@" // Returns True ``` -> **Notes :** - 4D utilise la librairie ICU pour la comparaison des chaînes (à l'aide des opérateurs <>=#) et la détection des mots-clés. Pour plus d'informations sur les règles mises en oeuvre, reportez-vous à l'adresse http://www.unicode.org/unicode/reports/tr29/#Word_Boundaries. En version japonaise, 4D utilise par défaut la librairie Mecab en lieu et place de ICU pour la détection des mots-clés. +> **Notes:** - 4D uses the ICU library for comparing strings (using <>=# operators) and detecting keywords. For more information about the rules implemented, please refer to the following address: http://www.unicode.org/unicode/reports/tr29/#Word_Boundaries. - In the Japanese version, instead of ICU, 4D uses Mecab by default for detecting keywords. -## Symboles d'indice de chaîne -Les symboles d'indice de chaîne sont les suivants : [[...]] +## Character Reference Symbols +The character reference symbols: [[...]] -Ces symboles sont utilisés pour désigner un caractère particulier dans une chaîne. Cette syntaxe vous permet de référencer un caractère dans un champ ou une variable de type Alpha ou Texte. +These symbols are used to refer to a single character within a string. This syntax allows you to individually address the characters of a text variable, string variable, or field. -Lorsque les symboles d'indice de chaîne sont placés à gauche de l'opérateur d'affectation (:=), un caractère est affecté à la position référencée dans la chaîne. Par exemple, en postulant que la chaîne vsNom n'est pas une chaîne vide, le code suivant passe le premier caractère de la chaîne vsNom en majuscule : +If the character reference symbols appear on the left side of the assignment operator (:=), a character is assigned to the referenced position in the string. For example, if vsName is not an empty string, the following line sets the first character of vsName to uppercase: ```4d -If(vsNom#"") - vsNom[[1]]:=Uppercase(vsNom[[1]]) +If(vsName#"") + vsName[[1]]:=Uppercase(vsName[[1]]) End if ``` -Lorsque les symboles d'indice de chaîne apparaissent dans une expression, ils retournent le caractère auquel ils font référence sous la forme d'une chaîne d'un caractère. Par exemple: +Otherwise, if the character reference symbols appear within an expression, they return the character (to which they refer) as a 1-character string. For example: ```4d -//L'exemple suivant teste si le dernier caractère de vtText est le caractère "@" +//The following example tests if the last character of vtText is an At sign "@" If(vtText#"") If(Character code(Substring(vtText;Length(vtText);1))=At sign) //... End if End if - //En utilisant la syntaxe des caractères d'indice de chaîne, vous écririez plus simplement : + //Using the character reference syntax, you would write in a simpler manner: If(vtText#"") If(Character code(vtText[[Length(vtText)]])=At sign) // ... @@ -170,33 +170,33 @@ Lorsque les symboles d'indice de chaîne apparaissent dans une expression, ils r End if ``` -### Note avancée sur la référence à des caractères invalides +### Advanced note about invalid character reference -Lorsque vous utilisez les symboles d'indice de chaîne, il est de votre responsabilité de vous référer à des caractères existant dans la chaîne, de la même manière que pour les éléments d'un tableau. Si, par exemple, vous référencez le 20e caractère d'une chaîne, cette chaîne doit contenir au moins 20 caractères. +When you use the character reference symbols, you must address existing characters in the string in the same way you address existing elements of an array. For example if you address the 20th character of a string variable, this variable MUST contain at least 20 characters. -- Ne pas respecter cette condition en mode interprété n'est pas signalé comme une erreur par 4D. -- Ne pas respecter cette condition en mode compilé (sans options) peut entraîner une "corruption" de la mémoire, si, par exemple, vous écrivez un caractère au-delà de la fin d'une chaîne ou d'un texte. -- Ne pas respecter cette condition en mode compilé est signalé lorsque le contrôle d'exécution est activé. Si, par exemple, vous exécutez le code suivant : +- Failing to do so, in interpreted mode, does not cause a syntax error. +- Failing to do so, in compiled mode (with no options), may lead to memory corruption, if, for instance, you write a character beyond the end of a string or a text. +- Failing to do so, in compiled mode, causes an error with the option Range Checking On. For example, executing the following code: ``` -//Ne pas faire ça ! +//Very bad and nasty thing to do, boo! vsAnyText:="" vsAnyText[[1]]:="A" ``` -L'alerte suivante s'affichera en mode compilé : +will trigger the Runtime Error shown here: ![alt-text](assets/en/Concepts/Syntax_Error.en.png) -### Exemple +### Example -La méthode projet suivante ajoute une lettre capitale à tous les mots du texte passé en paramètre et retourne le texte modifié : +The following project method capitalizes the first character of each word of the text received as parameter and returns the resulting capitalized text: ```4d - // Méthode projet de passage en capitale - // PasserEnCap ( Texte ) -> Texte - // PasserEnCap ( Texte source ) -> Texte avec des lettres capitales + //Capitalize_text project method + //Capitalize_text ( Text ) -> Text + //Capitalize_text ( Source text ) -> Capitalized text $0:=$1 $vlLen:=Length($0) @@ -210,12 +210,12 @@ La méthode projet suivante ajoute une lettre capitale à tous les mots du texte End if ``` -Une fois cette méthode placée dans la base, la ligne : +For example, the line: ```4d -ALERT(Capitalize_text("Bonjour, mon nom est Jean Bon et je me présente aux présidentielles !")) +ALERT(Capitalize_text("hello, my name is jane doe and i'm running for president!")) ``` -affiche l'alerte suivante : +displays the alert shown here: ![alt-text](assets/en/Concepts/Jane_doe.en.png) From 75c76d3a660c1dc6302e6131a66a1908e4661569 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:21:11 +0100 Subject: [PATCH 131/260] New translations dt_time.md (French) --- .../translated_docs/fr/Concepts/dt_time.md | 117 +++++++++--------- 1 file changed, 59 insertions(+), 58 deletions(-) diff --git a/website/translated_docs/fr/Concepts/dt_time.md b/website/translated_docs/fr/Concepts/dt_time.md index b1de1cfd5ee5d9..e810afa5777ff4 100644 --- a/website/translated_docs/fr/Concepts/dt_time.md +++ b/website/translated_docs/fr/Concepts/dt_time.md @@ -3,84 +3,85 @@ id: time title: Heure --- -- Les variables, champs ou expressions de type Heure peuvent être compris entre 00:00:00 et 596,000:00:00. -- Les heures sont stockées dans un format de 24 heures. -- Une valeur de type Heure peut être utilisée en tant que numérique. Le nombre correspondant est le nombre de secondes que cette valeur représente à partir de minuit (00:00:00). +- A Time field, variable or expression can be in the range of 00:00:00 to 596,000:00:00. +- Times are in 24-hour format. +- A time value can be treated as a number. The number returned from a time is the number of seconds since midnight (00:00:00) that time represents. -**Note :** Dans ce manuel de référence du langage 4D, les paramètres de type Heure dans les descriptions des commandes sont appelés Heure, sauf spécification explicite. +**Note:** In the 4D Language Reference manual, Time parameters in command descriptions are denoted as Time, except when marked otherwise. -## Constantes littérales de type heure +## Time literals -Une constante heure est incluse entre deux points d’interrogation (?...?). +A time literal constant is enclosed by question marks (?...?). -Avec une version française de 4D, une heure est structurée sous la forme heure:minute:seconde, deux points (:) séparant les valeurs. Les heures sont stockées dans un format de 24 heures. +A time literal constant is ordered hour:minute:second, with a colon (:) setting off each part. Times are specified in 24-hour format. -Voici quelques exemples de constantes littérales de type heure : +Here are some examples of time literals: ```4d -?00:00:00? // minuit -?09:30:00? // 9:30 du matin -?13:01:59? // 13 heures, 1 minute et 59 secondes +?00:00:00? ` midnight +?09:30:00? ` 9:30 am +?13:01:59? ` 1 pm, 1 minute, and 59 seconds ``` -Une heure nulle s’écrit ?00:00:00? - -**Astuce :** L'éditeur de méthodes dispose d'un raccourci pour saisir une heure nulle. Pour cela, tapez un point d'interrogation (?) et appuyez sur la touche Entrée. - -## Opérateurs sur les heures - -| Opération | Syntaxe | Retourne | Expression | Valeur | -| ------------------- | --------------- | -------- | ----------------------- | ---------- | -| Addition | Heure + Heure | Heure | ?02:03:04? + ?01:02:03? | ?03:05:07? | -| Soustraction | Heure – Heure | Heure | ?02:03:04? ?01:02:03? | ?01:01:01? | -| Addition | Heure + Nombre | Nombre | ?02:03:04? ?01:02:03? | 7449 | -| Soustraction | Heure – Nombre | Nombre | ?02:03:04? ?01:02:03? | 7319 | -| Multiplication | Heure * Nombre | Nombre | ?02:03:04? ?01:02:03? | 14768 | -| Division | Heure / Nombre | Nombre | ?02:03:04? ?02:03:04? | 3692 | -| Division entière | Heure \ Nombre | Nombre | ?02:03:04? ?01:02:03? | 3692 | -| Modulo | Heure % Heure | Heure | ?20:10:00? % ?04:20:00? | ?02:50:00? | -| Modulo | Heure % Nombre | Nombre | ?02:03:04? % 2 | 0 | -| Egalité | Heure = Heure | Booléen | ?01:02:03? >=?01:02:03? | Vrai | -| | | | ?01:02:03? ?01:02:04? | Faux | -| Inégalité | Heure # Heure | Booléen | ?01:02:03? ?01:02:03? | Vrai | -| | | | ?01:02:03? ?01:02:03? | Faux | -| Supérieur à | Heure > Heure | Booléen | ?01:02:03? < ?01:02:04? | Vrai | -| | | | ?01:02:03? < ?01:02:04? | Faux | -| Inférieur à | Heure < Heure | Booléen | ?01:02:03? ?01:02:04? | Vrai | -| | | | ?01:02:03? ?01:02:03? | Faux | -| Supérieur ou égal à | Heure >= Heure | Booléen | ?01:02:03? >=?01:02:03? | Vrai | -| | | | ?01:02:03? >=?01:02:04? | Faux | -| Inférieur ou égal à | Heure <= Heure | Booléen | ?01:02:03? <=?01:02:03? | Vrai | -| | | | ?01:02:03? <=?01:02:03? | Faux | - -### Exemple 1 - -Vous pouvez combiner des expressions de type heure et de type numérique à l'aide des fonctions `Time` et `Time string`. - -Vous pouvez combiner des expressions Time et Number à l'aide des fonctions `Time` ou `Current time`: +A null time is specified by ?00:00:00? + +**Tip:** The Method Editor includes a shortcut for entering a null time. To type a null time, enter the question mark (?) character and press Enter. + +## Time operators + +| Operation | Syntax | Returns | Expression | Value | +| ------------------------ | -------------- | ------- | ----------------------- | ---------- | +| Addition | Time + Time | Heure | ?02:03:04? + ?01:02:03? | ?03:05:07? | +| Subtraction | Time – Time | Heure | ?02:03:04? – ?01:02:03? | ?01:01:01? | +| Addition | Time + Number | Number | ?02:03:04? + 65 | 7449 | +| Subtraction | Time – Number | Number | ?02:03:04? – 65 | 7319 | +| Multiplication | Time * Number | Number | ?02:03:04? * 2 | 14768 | +| Division | Time / Number | Number | ?02:03:04? / 2 | 3692 | +| Longint division | Time \ Number | Number | ?02:03:04? \ 2 | 3692 | +| Modulo | Time % Time | Heure | ?20:10:00? % ?04:20:00? | ?02:50:00? | +| Modulo | Time % Number | Number | ?02:03:04? % 2 | 0 | +| Equality | Time = Time | Booléen | ?01:02:03? = ?01:02:03? | True | +| | | | ?01:02:03? = ?01:02:04? | False | +| Inequality | Time # Time | Booléen | ?01:02:03? # ?01:02:04? | True | +| | | | ?01:02:03? # ?01:02:03? | False | +| Greater than | Time > Time | Booléen | ?01:02:04? > ?01:02:03? | True | +| | | | ?01:02:03? > ?01:02:03? | False | +| Less than | Time < Time | Booléen | ?01:02:03? < ?01:02:04? | True | +| | | | ?01:02:03? < ?01:02:03? | False | +| Greater than or equal to | Time >= Time | Booléen | ?01:02:03? >=?01:02:03? | True | +| | | | ?01:02:03? >=?01:02:04? | False | +| Less than or equal to | Time <= Time | Booléen | ?01:02:03? <=?01:02:03? | True | +| | | | ?01:02:04? <=?01:02:03? | False | + +### Example 1 + +To obtain a time expression from an expression that combines a time expression with a number, use the commands `Time` and `Time string`. + +You can combine expressions of the time and number types using the `Time` or `Current time` functions: ```4d - // La ligne suivante assigne à la variable $vlSecondes le nombre de secondes qui, dans une heure à partir de maintenant, se seront écoulées depuis minuit - $vlSeconds:=Current time+3600 - // La ligne suivante assigne à la variable $vhBientôt l'heure qu'il sera dans une heure - $vhSoon:=Time(Current time+3600) + //The following line assigns to $vlSeconds the number of seconds + //that will be elapsed between midnight and one hour from now +$vlSeconds:=Current time+3600 + //The following line assigns to $vHSoon the time it will be in one hour +$vhSoon:=Time(Current time+3600) ``` -La seconde ligne peut également être écrite de la façon suivante : +The second line could be written in a simpler way: ```4d - // La ligne suivante assigne à la variable $vhBientôt l'heure qu'il sera dans une heure + // The following line assigns to $vHSoon the time it will be in one hour $vhSoon:=Current time+?01:00:00? ``` -### Exemple 2 +### Example 2 -L'opérateur Modulo permet notamment d'ajouter des heures en tenant compte du format sur 24 heures d'une journée : +The Modulo operator can be used, more specifically, to add times that take the 24-hour format into account: ```4d -$t1:=?23:00:00? // Il est 23 heures. - //On souhaite ajouter 2 heures 30 - $t2:=$t1 +?02:30:00? // avec une addition simple, $t2 vaut ?25:30:00? -$t2:=($t1 +?02:30:00?)%?24:00:00? // $t2 vaut ?01:30:00? et il est 1h 30 du matin le matin suivant le matin suivant +$t1:=?23:00:00? // It is 23:00 p.m. + // We want to add 2 and a half hours +$t2:=$t1 +?02:30:00? // With a simple addition, $t2 is ?25:30:00? +$t2:=($t1 +?02:30:00?)%?24:00:00? // $t2 is ?01:30:00? and it is 1:30 a.m. the next morning ``` From 8f5020fc3e50885816ef65410e238f3dfe0025d5 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:21:14 +0100 Subject: [PATCH 132/260] New translations dt_variant.md (French) --- .../translated_docs/fr/Concepts/dt_variant.md | 25 +++++++++---------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/website/translated_docs/fr/Concepts/dt_variant.md b/website/translated_docs/fr/Concepts/dt_variant.md index 228f918b86d9ae..4f26667396cb4e 100644 --- a/website/translated_docs/fr/Concepts/dt_variant.md +++ b/website/translated_docs/fr/Concepts/dt_variant.md @@ -3,27 +3,27 @@ id: variant title: Variant --- -Variant est un type de variable qui permet d'encapsuler des données de type valide et standard dans une variable. En règle générale, ce type de variable peut être utilisé pour écrire du code générique qui retourne ou reçoit des valeurs dont le type n'est pas connu. C'est le cas par exemple du code traitant des attributs d'objet. +Variant is a variable type which allows encapsulating data of any valid regular type in a variable. Typically, this variable type can be used to write generic code returning or receiving values for which the type is not known. This is the case for example for code handling object attributes. -Une variable de type variant peut contenir une valeur des types de données suivants : +A variant type variable can contain a value of the following data types: - BLOB - boolean - collection - date -- entier long +- longint - object - picture - pointer -- réel -- Texte +- real +- text - time - null -- indéfini +- undefined -> Les tableaux ne peuvent pas être stockés dans des variables de type variant. +> Arrays cannot be stored in variant variables. -En modes interprété et compilé, le même contenu peut être affecté à une même variable variant. Contrairement aux types de variable standard, le type de contenu des variable de type variant est différent du type de variable variant lui-même. Par exemple: +In both interpreted and in compiled modes, a same variant variable can be assigned contents of different types. Unlike regular variable types, the variant variable content type is different from the variant variable type itself. For example: ```4d C_VARIANT($variant) @@ -37,7 +37,7 @@ $vtype:=Type($variant) // 12 (Is variant) $vtypeVal:=Value type($variant) // 1 (Is real) ``` -Vous pouvez utiliser des variables variant chaque fois qu'elles sont attendues. Vous devez simplement vous assurer que le type de données du contenu de la variable est du type attendu. Lorsque vous accédez à des variables de type variant, seule leur valeur courante est prise en compte. Par exemple: +You can use variant variables wherever variables are expected, you only need to make sure than the variable content data type is of the expected type. When accessing variant variables, only their current value is taken into account. For example: ```4d C_VARIANT($v) @@ -48,7 +48,7 @@ $t:=Type($v) // 12 (Is variant) $t2:=Type($v2) // 2 (Is text) ``` -Variant peut être utilisé pour déclarer des paramètres de méthode ($0, $1, etc.) pouvant être de différents types. Dans ce cas, vous pouvez générer votre code en testant le type de valeur du paramètre, par exemple : +Variant can be used to declare method parameters ($0, $1,...) that can be of various types. In this case, you can build your code by testing the parameter value type, for example: ```4d C_VARIANT($1) @@ -57,8 +57,7 @@ Case of ... : (Value type($1)=Is text) ... -//déclaration(s) - End case +End case ``` -> Lorsque des variables variant ne sont pas nécessaires (c'est-à-dire lorsque le type de données est connu), il est recommandé d'utiliser des variables typées standard. Les variables typées standard fournissent de meilleures performances, un code plus clair et permettent au compilateur d'éviter les bugs liés à des types de données passés qui sont inattendus. \ No newline at end of file +> When variant variables are not necessary (i.e. when the data type is known), it is recommended to use regular typed variables. Regular typed variables provide better performance, make code more clear and are helpful for the compiler to prevent bugs related to passing unexpected data types. \ No newline at end of file From 25f535bd85a1e6a152da1454499b1c02cc10f8ce Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:21:16 +0100 Subject: [PATCH 133/260] New translations error-handling.md (French) --- .../fr/Concepts/error-handling.md | 88 +++++++++---------- 1 file changed, 43 insertions(+), 45 deletions(-) diff --git a/website/translated_docs/fr/Concepts/error-handling.md b/website/translated_docs/fr/Concepts/error-handling.md index 04c7e2e1d273a1..51898ee5ce64ed 100644 --- a/website/translated_docs/fr/Concepts/error-handling.md +++ b/website/translated_docs/fr/Concepts/error-handling.md @@ -3,104 +3,102 @@ id: error-handling title: Gestion des erreurs --- -Le traitement des erreurs consiste à anticiper les erreurs pouvant survenir dans votre application et à y répondre. 4D fournit un support complet pour la détection et la signalisation des erreurs lors de l'exécution, ainsi que pour l'analyse de leurs conditions. +Error handling is the process of anticipating and responding to errors that might occur in your application. 4D provides a comprehensive support for catching and reporting errors at runtime, as well as for investigating their conditions. -La gestion des erreurs répond à deux besoins principaux : +Error handling meets two main needs: -- rechercher et corriger les éventuels bugs et erreurs dans votre code pendant la phase de développement, -- détecter et récupérer des erreurs inattendues dans les applications déployées; vous pouvez notamment remplacer les boîtes de dialogue d'erreur système (disque plein, fichier manquant, etc.) par votre propre interface. -> > Il est fortement recommandé d'installer une méthode de gestion des erreurs sur 4D Server, pour tout le code exécuté sur le serveur. Cette méthode éviterait d'afficher des boîtes de dialogue inattendues sur le serveur et pourrait consigner les erreurs dans un fichier consacré en vue d'analyses ultérieures. +- finding out and fixing potential errors and bugs in your code during the development phase, +- catching and recovering from unexpected errors in deployed applications; in particular, you can replace system error dialogs (disk full, missing file, etc.) with you own interface. +> It is highly recommended to install an error-handling method on 4D Server, for all code running on the server. This method would avoid unexpected dialog boxes to be displayed on the server machine, and could log errors in a dedicated file for further analyses. -## Erreur ou statut +## Error or status -De nombreuses fonctions de classe 4D, telles que `entity.save()` ou `transporter.send()`, retournent un objet *status*. Cet objet permet de stocker les erreurs "prévisibles" dans le contexte d'exécution, telles qu'un mot de passe invalide, une entité verrouillée, etc., qui ne stoppe pas l'exécution du programme. Cette catégorie d'erreurs peut être gérée par du code habituel. +Many 4D class functions, such as `entity.save()` or `transporter.send()`, return a *status* object. This object is used to store "predictable" errors in the runtime context, e.g. invalid password, locked entity, etc., that do not stop program execution. This category of errors can be handled by regular code. -D'autres erreurs "imprévisibles" peuvent inclure une erreur en écriture sur le disque, une panne de réseau ou toute interruption inattendue. Cette catégorie d'erreurs génère des exceptions et doit être traitée par une méthode de gestion des erreurs. +Other "unpredictable" errors include disk write error, network failure, or in general any unexpected interruption. This category of errors generates exceptions and needs to be handled through an error-handling method. -## Installer une méthode de gestion des erreurs +## Installing an error-handling method -Dans 4D, toutes les erreurs peuvent être capturées et traitées dans une méthode projet spécifique, la méthode de **gestion des erreurs** (ou méthode de **capture d'erreurs**). +In 4D, all errors can be catched and handled in a specific project method, the **error-handling** (or **error-catching**) method. -Cette méthode projet est installée pour le process en cours et sera automatiquement appelée pour toute erreur survenant dans le process, en mode interprété ou compilé. Pour *installer* cette méthode projet, il vous suffit d’appeler la commande `APPELER SUR ERREUR` avec le nom de la méthode projet en paramètre. Par exemple: +This project method is installed for the current process and will be automatically called for any error that occurs in the process, in interpreted or compiled mode. To *install* this project method, you just need to call the `ON ERR CALL` command with the project method name as parameter. For example: ```4d -APPELER SUR ERREUR("IO_ERRORS") //Installe la méthode de gestion des erreurs +ON ERR CALL("IO_ERRORS") //Installs the error-handling method ``` -Pour ne plus détecter d'erreurs et redonner le contrôle à 4D, appelez la méthode `ON ERR CALL` à l'aide d'une chaîne vide : +To stop catching errors and give back hand to 4D, call `ON ERR CALL` with an empty string: ```4d -ON ERR CALL("") //redonne le contrôle à 4D +ON ERR CALL("") //gives back control to 4D ``` -La commande `Method called on error` permet de connaître le nom de la méthode installée par `ON ERR CALL` pour le processus en cours. Cela est particulièrement utile dans le contexte du code générique car il vous permet de modifier temporairement puis de restaurer la méthode de capture d'erreur : +The `Method called on error` command allows to know the name of the method installed by `ON ERR CALL` for the current process. It is particularly useful in the context of generic code because it enables you to temporarily change and then restore the error-catching method: ```4d $methCurrent:=Method called on error ON ERR CALL("NewMethod") - //Si le document ne peut pas être ouvert, une erreur est générée + //If the document cannot be opened, an error is generated $ref:=Open document("MyDocument") - //Répéter la méthode précédente + //Reinstallation of previous method ON ERR CALL($methCurrent) ``` -### Portée et composants +### Scope and components -Vous pouvez définir une seule méthode d'erreur pour l'ensemble de l'application ou différentes méthodes par module d'application. Cependant, une seule méthode peut être installée par processus. +You can define a single error-catching method for the whole application or different methods per application module. However, only one method can be installed per process. -Une méthode de gestion des erreurs installée par la commande `APPELER SUR ERREUR` s'applique uniquement à l'application en cours d'exécution. En cas d'erreur générée par un **composant**, la méthode `APPELER SUR ERREUR` de l'application hôte n'est pas appelée, et inversement. +An error-handling method installed by the `ON ERR CALL` command only applies to the running application. In the case of an error generated by a **component**, the `ON ERR CALL` error-handling method of the host application is not called, and vice versa. -### Gérer les erreurs dans une méthode +### Handling errors within the method -Dans la méthode d'erreur personnalisée, vous pouvez accéder à plusieurs informations qui vous aideront à identifier l'erreur : +Within the custom error method, you have access to several information that will help you identifying the error: -- Variables système (*) : +- dedicated system variables(*): - - `Error` (entier long): Code d'erreur - - `Error method` (texte) : nom de la méthode ayant engendré l'erreur - - `Error line` (entier long) : Numéro de ligne de la méthode ayant généré l'erreur - - `Error formula` (texte) : formule du code 4D (texte brut) à l'origine de l'erreur. + - `Error` (longint): error code + - `Error method` (text): name of the method that triggered the error + - `Error line` (longint): line number in the method that triggered the error + - `Error formula` (text): formula of the 4D code (raw text) which is at the origin of the error. -(*) 4D conserve automatiquement le nombre de variables appelées **variables système**, qui répondent à différents besoins. Consultez le manuel Language de 4D*. +(*) 4D automatically maintains a number of variables called **system variables**, meeting different needs. See the *4D Language Reference manual*. -- La commande `GET LAST ERROR STACK` qui retourne les informations sur la pile d'erreur courant de l'application 4D. -- la commande `Get call chain` qui retourne une collection d'objets décrivant chaque étape de la chaîne d'appel de la méthode dans le process courant. +- the `GET LAST ERROR STACK` command that returns information about the current stack of errors of the 4D application. +- the `Get call chain` command that returns a collection of objects describing each step of the method call chain within the current process. -#### Exemple +#### Example -Voici un système de gestion des erreurs simple : +Here is a simple error-handling system: ```4d -//installer la méthode de gestion d'erreur -ON ERR CALL("errorMethod") - //... exécuter le code - ON ERR CALL("") //redonner le contrôle à 4D +//installing the error handling method + ON ERR CALL("errorMethod") + //... executing code + ON ERR CALL("") //giving control back to 4D ``` ```4d -// méthode projet errorMethod - If(Error#1006) //ceci n'est pas une interruption générée par l'utilisateur - ALERT("L'erreur "+String(Error)+" s'est produite". Le code en question est : \""+Error formula+"\"") +// errorMethod project method + If(Error#1006) //this is not a user interruption + ALERT("The error "+String(Error)+" occurred". The code in question is: \""+Error formula+"\"") End if ``` -### Utiliser une méthode de gestion des erreurs vide +### Using an empty error-handling method -Si vous souhaitez cacher la boite de dialogue d'erreur standard, vous pouvez installer une méthode de gestion d'erreurs vide. La variable système `Error` peut être testée dans n'importe quelle méthode, c'est-à-dire en dehors de la méthode de gestion d'erreurs : +If you mainly want the standard error dialog box to be hidden, you can install an empty error-handling method. The `Error` system variable can be tested in any method, i.e. outside of the error-handling method: ```4d -ON ERR CALL("emptyMethod") //emptyMethod existe mais elle est vide +ON ERR CALL("emptyMethod") //emptyMethod exists but is empty $doc:=Open document( "myFile.txt") If (Error=-43) ALERT("File not found.") End if -ON ERR CALL.("") -End if -ON ERR CALL.("") +ON ERR CALL("") ``` From 13b31443edfae406ac90d1afe1bf820a752e3d81 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:21:20 +0100 Subject: [PATCH 134/260] New translations identifiers.md (French) --- .../fr/Concepts/identifiers.md | 322 +++++++++--------- 1 file changed, 161 insertions(+), 161 deletions(-) diff --git a/website/translated_docs/fr/Concepts/identifiers.md b/website/translated_docs/fr/Concepts/identifiers.md index f043c230d9c9e4..af26c7e6741203 100644 --- a/website/translated_docs/fr/Concepts/identifiers.md +++ b/website/translated_docs/fr/Concepts/identifiers.md @@ -3,70 +3,70 @@ id: identifiers title: Identifiants --- -Cette section détaille les règles d'écriture et de nommage appliquées aux divers identifiants utilisés dans le langage de 4D (variables, tableaux, objets, formulaires, etc.). +This section describes the conventions and rules for naming various elements in the 4D language (variables, tables, objects, forms, etc.). -## Règles de base +## Basic Rules -Les règles suivantes s'appliquent à toutes les structures de 4D. +The following rules apply for all 4D frameworks. - A name must begin with an alphabetic character, an underscore, or a dollar ("$") (note that a dollar sign can denote a local element, see below). -- Le nom peut ensuite contenir des caractères alphabétiques, des caractères numériques, des espaces et des tirets bas (_). -- Les points (".") Les points (".") et les crochets ("[ ]") sont interdits dans les noms de tables, champs, méthodes ou variables. -- Les virgules, barres de fraction, guillemets et deux points (:) sont interdits. -- Les caractères réservés car utilisés comme opérateurs, comme l’astérisque (*) ou le +, sont interdits. -- Les noms réservés, c'est-à-dire les noms de commandes 4D (`Date`, `Time`, etc), les mots-clés (If, For, etc.) et les constantes. -- 4D ignore les espaces superflus. +- Thereafter, the name can include alphabetic characters, numeric characters, the space character, and the underscore character ("_"). +- Periods (".") and brackets ("[ ]") are not allowed in table, field, method, or variable names. +- Commas, slashes, quotation marks, and colons are not allowed. +- Characters reserved for use as operators, such as * and +, are not allowed. +- Do not use reserved names, i.e. 4D command names (`Date`, `Time`, etc), keywords (If, For, etc.), and constants. +- Any trailing spaces are ignored. -### Règles supplémentaires pour les propriétés d'objet et les noms ORDA +### Additional rules for object property and ORDA names -- Les espaces sont interdits. -- Les points (".") Les points (".") et les crochets ("[ ]") sont interdits. -- Les noms sont sensibles à la casse. +- Space characters are not allowed. +- Periods (".") and brackets ("[ ]") are not allowed. +- Names are case sensitive. -### Règles supplémentaires pour SQL +### Additional rules for SQL -- Seuls les caractères _0123456789abcdefghijklmnopqrstuvwxyz sont acceptés -- Les noms ne doivent pas comporter de mot-clé SQL (commande, attribut, etc.). +- Only the characters _0123456789abcdefghijklmnopqrstuvwxyz are accepted +- Names must not include any SQL keywords (command, attribute, etc.). -**Note :** La zone "SQL" de l'inspecteur de l'éditeur de Structure signale automatiquement les caractères non autorisés dans un nom de table ou de champ. +**Note:** The "SQL" area of the Inspector in the Structure editor automatically indicates any unauthorized characters in the name of a table or field. ## Tableaux -Vous désignez un tableau en écrivant simplement son nom, qui est celui que vous passez à une commande de déclaration de tableau (par exemple ARRAY LONGINT) lorsque vous créez le tableau. Les tableaux sont des variables, et tout comme les variables, le nom d'un tableau peut comporter jusqu'à 31 caractères, sans compter les symboles de portée, et il existe trois types de tableaux différents : +You designate an array by using its name, which is the name you pass to an array declaration (such as ARRAY LONGINT) when you create the array. Arrays are variables, and like variables, the name of an array can be up to 31 characters, not including the scope symbols, and there are three different types of arrays: -- Le nom d'un tableau **local** est précédé du symbole dollar ($). -- Le nom d'un tableau **process** ne peut pas commencer par les symboles <> ni par le symbole dollar $). -- Le nom d’un tableau **interprocess** est précédé des symboles (<>), -- les caractères “inférieur à” suivi de “supérieur à”. +- The name of a **local** array is preceded by the dollar sign ($). +- The name of a **process** array cannot start with the <> symbols nor the dollar sign $). +- The name of an **interprocess** array is preceded by the symbols (<>) — a “less than” sign followed by a “greater than” sign. -Voici quelques exemples : +Examples: ```4d -ARRAY TEXT($atSubjects;Records in table([Topics])) //tableau local -SORT ARRAY(asKeywords;>) //tableau process -ARRAY BOOLEAN(<>settings;Records in table([MySettings])) //tableau interprocess +ARRAY TEXT($atSubjects;Records in table([Topics])) //local array +SORT ARRAY(asKeywords;>) //process array +ARRAY BOOLEAN(<>settings;Records in table([MySettings])) //interprocess array ``` -### Eléments de tableaux -Vous désignez un élément d’un tableau local, process ou interprocess à l’aide d’accolades ({…}). L’élément référencé (l’indice) est indiqué par une expression numérique. +### Elements of arrays +You reference an element of an interprocess, process or local array by using the curly braces("{ }"). The element referenced is denoted by a numeric expression. -Voici quelques exemples : +Examples: ```4d - //Traiter un élément d'un tableau local + //Addressing an element of a local array If($asKeywords{1}="Stop") $atSubjects{$vlElem}:=[Topics]Subject $viNextValue:=$aiBigArray{Size of array($aiBigArray)} ``` -### Eléments de tableaux à deux dimensions -Vous désignez un élément d’un tableau à deux dimensions à l’aide d'une double paire d’accolades ({…}) Vous désignez un élément d’un tableau à deux dimensions à l’aide d'une double paire d’accolades ({…}) L’élément référencé (l’indice) est indiqué par deux expressions numériques dans deux paires d’accolades. +### Elements of two-dimensional arrays +You reference an element of a two-dimensional array by using the curly braces ({…}) twice. The element referenced is denoted by two numeric expressions in two sets of curly braces. -Voici quelques exemples : +Examples: ```4d - //Traiter un élément d'un tableau process bidimensionnel + //Addressing an element of a two-dimensional process array If(asKeywords{$vlNextRow}{1}="Stop") atSubjects{10}{$vlElem}:=[Topics]Subject $viNextValue:=aiBigArray{$vlSet}{Size of array(aiBigArray{$vlSet})} @@ -77,78 +77,78 @@ $viNextValue:=aiBigArray{$vlSet}{Size of array(aiBigArray{$vlSet})} A class name must be compliant with standard [property naming rules](#additional-rules-for-object-property-and-orda-names). They are case sensitive. Giving the same name to a class and a [database table](#tables) is not recommended, in order to prevent any conflict. -## Champs +## Fields -Vous désignez un champ en spécifiant d’abord la table à laquelle il appartient. Le nom du champ se place immédiatement derrière celui de la table. Un nom de champ peut contenir jusqu’à 31 caractères. +You designate a field by first specifying the table to which it belongs. The field name immediately follows the table name. A field name can contain up to 31 characters. -Voici quelques exemples : +Examples: ```4d -[Commandes]Total:=Sum([Ligne]Montant) - QUERY([Clients];[Clients]Nom="Dupont") - [Lettres]Text:=Capitalize text([Lettres]Texte) +[Orders]Total:=Sum([Line]Amount) +QUERY([Clients];[Clients]Name="Smith") +[Letters]Text:=Capitalize text([Letters]Text) ``` -## Objets de formulaires +## Form objects -Vous désignez un objet de formulaire en passant son nom sous forme de chaîne, précédée du paramètre *. Un nom d'objet peut contenir jusqu'à 255 octets. +You designate a form object by passing its name as a string, preceded by the * parameter. A form object name can contain up to 255 characters. -Exemple : +Example: ```4d OBJECT SET FONT(*;"Binfo";"Times") ``` -**Note :** Ne confondez pas les objets de formulaire (boutons, list box, variables saisissables...) et les objets du langage 4D. Les objets du langage de 4D sont créés et manipulés via la notation objet ou des commandes dédiées. +**Note:** Do not confuse form objects (buttons, list boxes, variables that can be entered, etc.) and objects in the 4D language. 4D language objects are created and manipulated via object notation or dedicated commands. -## Formulaires +## Forms -Vous désignez un formulaire en utilisant une expression de type chaîne alphanumérique qui représente son nom. Le nom d’un formulaire peut contenir jusqu’à 31 caractères. +You designate a form by using a string expression that represents its name. A form name can contain up to 31 characters. -Voici quelques exemples : +Examples: ```4d -FORM SET INPUT([Personnes];"Entrée") -FORM SET OUTPUT([Personnes];"Sortie") - DIALOG([Stock];"Boîte de note"+String($vlStage)) +FORM SET INPUT([People];"Input") +FORM SET OUTPUT([People];"Output") +DIALOG([Storage];"Note box"+String($vlStage)) ``` -## Fonctions +## Functions Function names must be compliant with standard [property naming rules](#additional-rules-for-object-property-and-orda-names). > Tip: Starting the function name with an underscore character ("_") will exclude the function from the autocompletion features in the 4D code editor. -## Sélections temporaires +## Named Selections -Le nom d'une sélection temporaire peut contenir jusqu’à 255 caractères, symbole <> non compris). +A named selection name can contain up to 255 characters, not including scope character(s). -- Déclarez une sélection temporaire **process** en passant une expression de type chaîne qui représente son nom (et qui ne doit pas débuter par les symboles <> ou $). -- Désignez une sélection temporaire **interprocess** si son nom est précédé des caractères (<>) -- un symbole “inférieur à” suivi de “supérieur à”. +- You denote a **process** named selection by using a string expression that represents its name (which cannot start with the <> symbols nor the dollar sign $). +- You denote an **interprocess** named selection if its name is preceded by the symbols (<>) — a “less than” sign followed by a “greater than” sign. -Voici quelques exemples : +Examples: ```4d -USE NAMED SELECTION([Customers];"Closed")//Sélection temporaire process -USE NAMED SELECTION([Customers];"<>ByZipcode") //Sélection temporaire interprocess +USE NAMED SELECTION([Customers];"Closed")//Process Named Selection +USE NAMED SELECTION([Customers];"<>ByZipcode") //Interprocess Named Selection ``` -## Propriétés (attributs) d'objets +## Object attributes -Désignez un attribut d'objet (également appelé propriété d'objet) en plaçant un point (".") entre le nom de l'objet et le nom de l'attribut. Un nom d'attribut peut contenir jusqu'à 255 caractères et est sensible à la casse. +You designate an object attribute (also called object property) by placing a point (".") between the name of the object and the name of the attribute. An attribute name can contain up to 255 characters and is case sensitive. -Voici quelques exemples : +Examples: ```4d -monObjet.monAttribut:="10" - $valeur:=$clientObj.data.address.city +myObject.myAttribute:="10" +$value:=$clientObj.data.address.city ``` -**Note :** Des règles supplémentaires s'appliquent aux noms des attributs d'objets (ils doivent être conformes à la spécification ECMA Script). For more information, see [additional rules above](#additional-rules-for-object-property-and-orda-names) and [Object property identifiers](Concepts/dt_object.md#object-property-identifiers). +**Note:** Additional rules apply to object attribute names (they must comply with the ECMAScript specification). For more information, see [additional rules above](#additional-rules-for-object-property-and-orda-names) and [Object property identifiers](Concepts/dt_object.md#object-property-identifiers). ## Paramètres Parameter names must start with a `$` character and be compliant with [property naming rules](#additional-rules-for-object-property-and-orda-names). -Voici quelques exemples : +Examples: ```4d Function getArea($width : Integer; $height : Integer)-> $area : Integer @@ -156,94 +156,94 @@ Function getArea($width : Integer; $height : Integer)-> $area : Integer #DECLARE ($i : Integer ; $param : Date) -> $myResult : Object ``` -## Commandes de plug-ins +## Plug-In Commands -Vous désignez une commande de plug-in en écrivant son nom tel qu'il est défini dans le plug-in. Le nom d'une commande de plug-in peut contenir jusqu'à 31 caractères. +You designate a plug-in command by using its name as defined by the plug-in. A plug-in command name can contain up to 31 characters. -Exemple : +Example: ```4d -$erreur:=SMTP_From($smtp_id;"henry@gmail.com") +$error:=SMTP_From($smtp_id;"henry@gmail.com") ``` -## Process +## Processes -Le nom d'un process peut contenir jusqu’à 255 caractères, symbole <> non compris. +A process name can contain up to 255 characters, not including scope character. In the single-user version, or in Client/Server on the Client side, there are two process scopes: **global** or **local**. -- Déclarez un process **global** en passant une expression de type chaîne qui représente son nom (qui ne doit pas commencer par le symbole $). -- Déclarez un process **local** lorsque son nom est précédé du symbole dollar ($). +- You denote a **global** process by using a string expression that represents its name (which cannot start with the dollar sign $). +- You denote a **local** process if the name of the process is preceded by a dollar ($) sign. -Voici quelques exemples : +Examples: ```4d - // Lancer le process global "Ajouter Clients" - $vlProcessID:=New process("P_AJOUT_CLIENTS";48*1024;"Ajouter Clients") - // Lancer le process local "$Suivre Souris" - $vlProcessID:=New process("P_SUIVRE_SOURIS";16*1024;"$Suivre Souris") + //Starting the global process "Add Customers" +$vlProcessID:=New process("P_ADD_CUSTOMERS";48*1024;"Add Customers") + //Starting the local process "$Follow Mouse Moves" +$vlProcessID:=New process("P_MOUSE_SNIFFER";16*1024;"$Follow Mouse Moves") ``` -## Méthodes +## Project methods -Vous désignez une méthode (procédure ou fonction utilisateur) en saisissant son nom. Ce nom peut contenir jusqu’à 31 caractères. +You designate a project method (procedure or function) by using its name. A method name can contain up to 31 characters. -**Note :** Une méthode qui ne retourne pas de résultat est appelée une procédure. Une méthode qui retourne un résultat est appelée une fonction utilisateur. +**Note:** A project method that does not return a result is also called a procedure. A project method that returns a result is also called a function. -Voici quelques exemples : +Examples: ```4d -If(Nouveau client) +If(New client) DELETE DUPLICATED VALUES -APPLY TO SELECTION([Employés];AUGMENTER SALARIES) +APPLY TO SELECTION([Employees];INCREASE SALARIES) ``` -**Conseil :** Nous vous recommandons d'adopter, pour nommer vos méthodes, la même convention que celle utilisée dans le langage de 4D : écrivez les noms de vos procédures en caractères majuscules, et vos fonctions en minuscules avec la première lettre en majuscule. écrivez les noms de vos procédures en caractères majuscules, et vos fonctions en minuscules avec la première lettre en majuscule. Ainsi, lorsque vous rouvrirez un projet au bout de plusieurs mois, vous identifierez immédiatement si une méthode retourne ou non un résultat, en regardant son nom dans la fenêtre de l'Explorateur. +**Tip:** It is a good programming technique to adopt the same naming convention as the one used by 4D for built-in methods. Use uppercase characters for naming your methods; however if a method is a function, capitalize the first character of its name. By doing so, when you reopen a project for maintenance after a few months, you will already know if a method returns a result by simply looking at its name in the Explorer window. -**Note :** Lorsque vous souhaitez appeler une méthode, vous saisissez simplement son nom. Toutefois, certaines commandes intégrées telles que `APPELER SUR EVENEMENT`, ainsi que les commandes des plug-ins, nécessitent que vous passiez le nom d'une méthode en tant que chaîne lorsqu'un paramètre de type méthode est requis. Voici quelques exemples : +**Note:** When you call a method, you just type its name. However, some 4D built-in commands, such as `ON EVENT CALL`, as well as all the Plug-In commands, expect the name of a method as a string when a method parameter is passed. Examples: ```4d - // Cette commande attend une méthode (fonction) ou une formule - QUERY BY FORMULA([aTable];Recherche Spéciale) - // Cette commande attend une méthode (procédure) ou une formule - APPLY TO SELECTION([Employés];AUGMENTER SALARIES) - // Mais cette commande attend un nom de méthode -ON EVENT CALL("GERER EVENEMENTS") + //This command expects a method (function) or formula +QUERY BY FORMULA([aTable];Special query) + //This command expects a method (procedure) or statement +APPLY TO SELECTION([Employees];INCREASE SALARIES) + //But this command expects a method name +ON EVENT CALL("HANDLE EVENTS") ``` -Les méthodes peuvent accepter des paramètres (ou arguments). Les paramètres sont passés à la méthode entre parenthèses, à la suite du nom de la méthode. Chaque paramètre est séparé par des points virgule (;). Les paramètres sont passés à la méthode appelée en tant que variables locales numérotées séquentiellement : $1, $2,…, $n. De plus, plusieurs paramètres consécutifs (s'ils sont les derniers) peuvent être adressés à l'aide de la syntaxe ${n}où n, expression numérique, est le numéro du paramètre. +Project methods can accept parameters (arguments). The parameters are passed to the method in parentheses, following the name of the method. Each parameter is separated from the next by a semicolon (;). The parameters are available within the called method as consecutively numbered local variables: $1, $2,…, $n. In addition, multiple consecutive (and last) parameters can be addressed with the syntax ${n}where n, numeric expression, is the number of the parameter. -A l’intérieur d'une fonction, la variable locale $0 contient la valeur à retourner. +Inside a function, the $0 local variable contains the value to be returned. -Voici quelques exemples : +Examples: ```4d - // Dans DROP SPACES, $1 est pointeur sur le champ [Personnes]Nom - DROP SPACES(->[Personnes]Nom) - - // Dans Créateur tableau : - // - $1 est un numérique qui vaut 1 - // - $2 est un numérique qui vaut 5 - // - $3 est un texte ou un alpha qui vaut "Super" - // - La valeur résultante est assignée à $0 - $vsRésultat:=Calc creator(1;5;"Super") - - // Dans Poubelle : - // - Les trois paramètres sont de type Texte ou Alpha - // - Vous pouvez y accéder par $1, $2 ou $3 - // - Vous pouvez y accéder en écrivant, par exemple, ${$vlParam} où $vlParam vaut 1, 2 ou 3 - // - La valeur résultante est assignée à $0 - vtClone:=Dump("est";"le";"il") + //Within DROP SPACES $1 is a pointer to the field [People]Name +DROP SPACES(->[People]Name) + + //Within Calc creator: + //- $1 is numeric and equal to 1 + //- $2 is numeric and equal to 5 + //- $3 is text or string and equal to "Nice" + //- The result value is assigned to $0 +$vsResult:=Calc creator(1;5;"Nice") + + //Within Dump: + //- The three parameters are text or string + //- They can be addressed as $1, $2 or $3 + //- They can also be addressed as, for instance, ${$vlParam} where $vlParam is 1, 2 or 3 + //- The result value is assigned to $0 +vtClone:=Dump("is";"the";"it") ``` -## Ensembles +## Sets -Un nom d'ensemble peut contenir jusqu’à 255 caractères, symbole(s) <> non compri(s). +A set name can contain up to 255 characters, not including scope character()s). -- Déclarez un ensemble **process** en passant une expression de type chaîne qui représente son nom (et qui ne doit pas débuter par les symboles <> ou $). -- Désignez un ensemble temporaire **interprocess** si son nom est précédé des caractères (<>) -- un symbole “inférieur à” suivi de “supérieur à”. -- Sur 4D Server, le nom d'un ensemble **client** est précédé du symbole dollar ($). Ce nom peut comporter jusqu'à 255 caractères, symbole dollar non compris. +- You denote a **process** set by using a string expression that represents its name (which cannot start with the <> symbols or the dollar sign $). +- You denote an **interprocess** set if the name of the set is preceded by the symbols (<>) — a “less than” sign followed by a “greater than” sign. +- On 4D Server, the name of a **client** set is preceded by the dollar sign ($). A client set name can contain up to 255 characters, not including the dollar sign. -> Sets are maintained on the Server machine. Dans certains cas, pour des raisons particulières ou d'optimisation, vous pourrez avoir besoin d'utiliser des ensembles localement, sur les postes clients. To do so, you use client sets. +> Sets are maintained on the Server machine. In certain cases, for efficiency or special purposes, you may need to work with sets locally on the Client machine. To do so, you use client sets. -Voici quelques exemples : +Examples: ```4d CREATE SET([Customers];"Customer Orders")//Process set USE SET("<>Deleted Records") //Interprocess set @@ -255,24 +255,24 @@ If(Records in set("$Selection"+String($i))>0) //Client set ## Tables -You designate a table by placing its name between brackets: \[...]. Un nom de table peut contenir jusqu’à 31 caractères. Giving the same name to a table and a [class](#classes) is not recommended, in order to prevent any conflict. +You designate a table by placing its name between brackets: \[...]. A table name can contain up to 31 characters. Giving the same name to a table and a [class](#classes) is not recommended, in order to prevent any conflict. -Voici quelques exemples : +Examples: ```4d -DEFAULT TABLE([Commandes]) -FORM SET INPUT([Clients];"Entrée") -ADD RECORD([Lettres]) +DEFAULT TABLE([Orders]) +FORM SET INPUT([Clients];"Entry") +ADD RECORD([Letters]) ``` ## Variables -Le nom d’une variable peut contenir jusqu’à 31 caractères, symbole de portée non compris. +The name of a variable can be up to 31 characters, not including the scope symbols. -- Désignez une variable **locale** en faisant précéder son nom du symbole dollar ($). +- You designate a **local** variable by placing a dollar sign ($) before the variable name. - You designate a **process** variable by using its name (which cannot start with the <> symbols nor the dollar sign $) - You designate an **interprocess** variable by preceding the name of the variable with the symbols (<>) — a “less than” sign followed by a “greater than” sign. -Voici quelques exemples : +Examples: ```4d For($vlRecord;1;100) //local variable @@ -285,42 +285,42 @@ If(bValidate=1) //process variable ## Summary of Identifiers -Le tableau suivant résume les principes de nommage des identifiants dans les méthodes. - -| Identifiant | Longueur Longueur max. | Exemple | -| --------------------------------- | ---------------------- | ------------------------------ | -| Table | 31 | [Factures] | -| Champ | 31 | [Employés]Nom | -| Variable/Tableau interprocess | <> + 31 | <>vlProcessSuivantID | -| Variable/Tableau process | 31 | vsNomCourant | -| Variable/Tableau local(e) | $ + 31 | $vlCompteurLocal | -| Propriétés d'objets | 255 | $o.monAttribut | -| Formulaire | 31 | "Formulaire Web perso" | -| Objet de formulaire | 255 | "MonBouton" | -| Méthode | 31 | M_AJOUTER_CLIENTS | -| Commande de plug-in | 31 | WR INSERER TEXTE | -| Ensemble interprocess | <> + 255 | "<>Enregistrements à archiver" | -| Ensemble process | 255 | "Enregistrements actuels" | -| Ensemble client | $ + 255 | "$Sujets précédents" | -| Sélection temporaire | 255 | "Employés de A à Z" | -| Sélection temporaire interprocess | <> + 255 | "<>Employés de Z à A" | -| Process local | $ + 255 | "$SuivreEvénements" | -| Process global | 255 | "*P_MODULE_FACTURES*" | -| Sémaphore | 255 | "monsémaphore" | - -**Note :** En cas d'utilisation de caractères non romans dans les noms des identifiants, leur taille maximum peut être inférieure. - -## Résoudre les conflits de noms - -Veillez à utiliser des noms uniques pour les différents éléments de votre projet. Si un élément particulier porte le même nom qu’un autre élément d’un autre type (par exemple, si un champ est nommé Personnes et qu’une variable est également nommée Personnes), 4D utilise un système de priorité. - -4D identifie les noms utilisés dans les méthodes en fonction de l’ordre de priorité suivant : - -1. Champs -2. Commandes +The following table summarizes 4D naming conventions. + +| Identifier | Max. Length | Example | +| ---------------------------- | ----------- | -------------------------- | +| Table | 31 | [Invoices] | +| Field | 31 | [Employees]Last Name | +| Interprocess Variable/Array | <> + 31 | <>vlNextProcessID | +| Process Variable/Array | 31 | vsCurrentName | +| Local Variable/Array | $ + 31 | $vlLocalCounter | +| Object attribute | 255 | $o.myAttribute | +| Form | 31 | "My Custom Web Input" | +| Form object | 255 | "MyButton" | +| Project method | 31 | M_ADD_CUSTOMERS | +| Plug-in Routine | 31 | PDF SET ROTATION | +| Interprocess Set | <> + 255 | "<>Records to be Archived" | +| Process Set | 255 | "Current selected records" | +| Client Set | $ + 255 | "$Previous Subjects" | +| Named Selection | 255 | "Employees A to Z" | +| Interprocess Named Selection | <> + 255 | "<>Employees Z to A" | +| Local Process | $ + 255 | "$Follow Events" | +| Global Process | 255 | "*P_INVOICES_MODULE*" | +| Semaphore | 255 | "mysemaphore" | + +**Note:** If non-Roman characters are used in the names of the identifiers, their maximum length may be smaller. + +## Resolving Naming Conflicts + +Be sure to use unique names for the different elements in your project. If a particular element has the same name as another element of a different type (for example, if a field is named Person and a variable is also named Person), 4D uses a priority system. + +4D identifies names used in procedures in the following order: + +1. Fields +2. Commands 3. Méthodes -4. Commandes de plug-in -5. Constantes prédéfinies +4. Plug-in routines +5. Predefined constants 6. Variables. -Par exemple, 4D dispose d’une fonction interne appelée `Date`. Si vous appelez *Date* une de vos méthodes, 4D considérera `Date` comme étant la fonction interne et non votre méthode. Vous ne pourrez pas appeler votre méthode. En revanche, si vous nommez un champ “Date”, 4D considérera que vous souhaitez appeler votre champ et non la fonction intégrée. +For example, 4D has a built-in command called `Date`. If you named a method *Date*, 4D would recognize it as the built-in `Date` command, and not as your method. This would prevent you from calling your method. If, however, you named a field “Date”, 4D would try to use your field instead of the `Date` command. From d486caeeb3672258112cbd3a3d64521c2cd94924 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:21:22 +0100 Subject: [PATCH 135/260] New translations methods.md (French) --- .../translated_docs/fr/Concepts/methods.md | 228 +++++++++--------- 1 file changed, 113 insertions(+), 115 deletions(-) diff --git a/website/translated_docs/fr/Concepts/methods.md b/website/translated_docs/fr/Concepts/methods.md index e9873c75b99750..3f6278e517fcee 100644 --- a/website/translated_docs/fr/Concepts/methods.md +++ b/website/translated_docs/fr/Concepts/methods.md @@ -6,143 +6,143 @@ title: Méthodes ## Aperçu -Une méthode est un morceau de code qui exécute une ou plusieurs actions. Une méthode est composée de plusieurs lignes d’instructions. Une ligne d’instructions effectue une action. Cette ligne d’instruction peut être simple ou complexe. Cette ligne peut être aussi longue que vous voulez (elle peut comporter jusqu’à 32 000 caractères, ce qui est normalement suffisant pour la plupart des instructions). +A method is basically a piece of code that executes one or several actions. A method is composed of statements; each statement consists of one line in the method. A statement performs an action, and may be simple or complex. Although a statement is always one line, that one line can be as long as needed (up to 32,000 characters, which is probably enough for most tasks). -La taille maximale d’une méthode est limitée à 2 Go de texte ou 32 000 lignes de code. +The maximum size of a method is limited to 2 GB of text or 32,000 lines of code. -## Types de méthodes +## Method Types -Dans le langage 4D, il existe plusieurs catégories de méthodes : La catégorie dépend de la façon dont elle a été appelée : La catégorie dépend de la façon dont elle a été appelée : La catégorie dépend de la façon dont elle a été appelée : +In the 4D Language, there are several categories of methods. The category depends on how they can be called: -| Type | Contexte d'appel | Accepte les paramètres | Description | -| -------------------------------- | --------------------------------------------------------------------------------------------------------------------------- | ---------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **Méthode** | À la demande, lorsque le nom de la méthode projet est appelé (voir [Appel de méthodes de projet](#calling-project-methods)) | Oui | Peut contenir du code pour exécuter des actions personnalisées. Une fois que votre méthode projet est créée, elle devient partie intégrante du langage du projet. | -| **Méthode objet (widget)** | Automatique, lorsqu'un événement implique l'objet auquel la méthode est associée | Non | Propriété d'un objet formulaire (également appelé widget) | -| **Méthode formulaire** | Automatique, lorsqu'un événement implique le formulaire auquel la méthode est associée | Non | Propriété d'un formulaire. Vous pouvez utiliser une méthode formulaire pour gérer les données et les objets, mais il est généralement plus simple et plus efficace d'utiliser une méthode objet dans ces cas de figure. | -| **Trigger** (ou *méthode table*) | Automatique, chaque fois que vous manipulez les enregistrements d'une table (Ajouter, Supprimer, Modifier) | Non | Propriété d'une table. Les triggers sont des méthodes qui peuvent éviter les opérations 'illégales' effectuées avec les enregistrements de votre base. | -| **Méthode base** | Automatique, lorsqu'un événement se produit sur la session de travail | Oui (prédéfini) | Il existe 16 méthodes base dans 4D. Voir la section Méthodes bases | +| Type | Calling context | Accepts parameters | Description | +| -------------------------------- | ----------------------------------------------------------------------------------------------------------- | ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **Project method** | On demand, when the project method name is called (see [Calling project methods](#calling-project-methods)) | Yes | Can contain any code to execute any custom actions. Once a project method is created, it becomes part of the language of the project. | +| **Object (widget) method** | Automatic, when an event involves the object to which the method is attached | No | Property of a form object (also called widget) | +| **Form method** | Automatic, when an event involves the form to which the method is attached | No | Property of a form. You can use a form method to manage data and objects, but it is generally simpler and more efficient to use an object method for these purposes. | +| **Trigger** (aka *Table method*) | Automatic, each time that you manipulate the records of a table (Add, Delete and Modify) | No | Property of a table. Triggers are methods that can prevent “illegal” operations with the records of your database. | +| **Database method** | Automatic, when a working session event occurs | Yes (predefined) | There are 16 database methods in 4D. See Database methods section | > The 4D Language also supports **Class functions**, that can be called in the context of an object instance. Class functions can be built-in (*e.g.* `collection.orderBy()` or `entity.save()`), or [created by the 4D developer](classes.md#class-function). -## Méthodes projet +## Calling Project Methods -Une méthode projet peut tenir les rôles suivants, en fonction de la manière dont elle est exécutée et utilisée : +A project method can have one of the following roles, depending on how it is executed and used: -- Sous-routine -- Objet formule -- Méthode de menu -- Méthode de gestion de process -- Méthode de gestion d’événements et d'erreurs +- Subroutine +- Object formula +- Menu method +- Process method +- Event or Error catching method -### Sous-routines +### Subroutines -Une sous-routine est une méthode projet qui peut être considérée comme une méthode asservie. D’autres méthodes lui demandent d’effectuer des tâches. Une sous-routine qui retourne une valeur est appelée une fonction. +A subroutine is a project method that can be thought of as a servant. It performs those tasks that other methods request it to perform. A function is a subroutine that returns a value to the method that called it. -Lorsque vous créez une méthode projet, elle devient partie intégrante du langage du prjoet dans lequel elle a été créée. Vous pouvez alors l'appeler à partir d'autres méthodes (méthode projet, méthode objet, etc.) de la même manière que vous appelez les commandes intégrées de 4D. Une méthode projet utilisée de cette manière est appelée une sous-routine. +When you create a project method, it becomes part of the language of the project in which you create it. You can then call the project method from another method (project method, object method...) in the same way that you call 4D’s built-in commands. A project method used in this way is called a subroutine. -L'utilisation de sous-routines procure les avantages suivants : +You use subroutines to: -- Réduction du code répétitif, -- Clarification des méthodes, -- Modification plus facile des méthodes, -- Création de code modulaire +- Reduce repetitive coding +- Clarify your methods +- Facilitate changes to your methods +- Modularize your code -Imaginons par exemple que vous travaillez sur un projet de clients. A mesure que vous construisez le projet, vous vous apercevez que vous répétez souvent certaines tâches, telles que la recherche d’un client et la modification de son enregistrement. Le code nécessaire à l’accomplissement de cette opération pourrait être : +For example, let’s say you have a project of customers. As you customize the project, you find that there are some tasks that you perform repeatedly, such as finding a customer and modifying his or her record. The code to do this might look like this: ```4d - // Recherche d'un client - QUERY BY EXAMPLE([Clients]) - // Sélection du formulaire entrée - FORM SET INPUT([Clients];"Saisie de données") - // Modification de l'enregistrement du client - MODIFY RECORD([Clients]) + // Look for a customer + QUERY BY EXAMPLE([Customers]) + // Select the input form + FORM SET INPUT([Customers];"Data Entry") + // Modify the customer's record + MODIFY RECORD([Customers]) ``` -Si vous n’utilisez pas de sous-routines, vous devrez écrire ce code à chaque fois que vous voudrez modifier l’enregistrement d’un client. Si cette opération peut être réalisée dans dix endroits différents de votre projet, vous devrez la réécrire dix fois. Grâce aux sous-routines, vous ne l’écrirez qu’une seule fois en tout. C’est le premier avantage des sous-routines : réduire la quantité de code à écrire. +If you do not use subroutines, you will have to write the code each time you want to modify a customer’s record. If there are ten places in your project where you need to do this, you will have to write the code ten times. If you use subroutines, you will only have to write it once. This is the first advantage of subroutines—to reduce the amount of code. -Si le code ci-dessus était une méthode projet appelée `MODIFY_CUSTOMER`, vous l’exécuteriez simplement en inscrivant son nom dans une autre méthode. Par exemple, pour modifier l’enregistrement d’un client puis l’imprimer, vous n’auriez qu’à écrire : +If the previously described code was a method called `MODIFY_CUSTOMER`, you would execute it simply by using the name of the method in another method. For example, to modify a customer’s record and then print the record, you would write this method: ```4d MODIFY_CUSTOMER PRINT SELECTION([Customers]) ``` -Cette possibilité simplifie énormément vos méthodes. Dans l’exemple ci-dessus, il n’est pas nécessaire de savoir comment fonctionne la méthode `MODIFY_CUSTOMER`, mais uniquement ce qu’elle fait. C’est le deuxième avantage que vous pouvez tirer de l’utilisation de sous-routines : la clarification de votre code. Ainsi, ces méthodes deviennent en quelque sorte des extensions du langage de 4D. +This capability simplifies your methods dramatically. In the example, you do not need to know how the `MODIFY_CUSTOMER` method works, just what it does. This is the second reason for using subroutines—to clarify your methods. In this way, your methods become extensions to the 4D language. -Si vous devez modifier votre mode de recherche des clients, comme dans notre exemple, il vous suffit de modifier une seule méthode, et non dix. C’est un autre avantage des sous-routines : faciliter les modifications de votre code. +If you need to change your method of finding customers in this example project, you will need to change only one method, not ten. This is the next reason to use subroutines—to facilitate changes to your methods. -Avec les sous-routines, vous rendez votre code modulaire. Cela signifie simplement que vous dissociez votre code en modules (sous-routines), chacun d’entre eux effectuant une tâche logique. Examinez le code suivant, tiré d’un projet de gestion de compte courant : +Using subroutines, you make your code modular. This simply means dividing your code into modules (subroutines), each of which performs a logical task. Consider the following code from a checking account project: ```4d - FIND_CLEARED _CHECKS // Rechercher les chèques émis - RECONCILE_ACCOUNT // Rapprocher le compte -PRINT_CHECK_BOOK_REPORT // Imprimer un relevé + FIND_CLEARED_CHECKS //Find the cleared checks + RECONCILE_ACCOUNT //Reconcile the account + PRINT_CHECK_BOOK_REPORT //Print a checkbook report ``` -Même pour quelqu’un qui ne connaît pas le projet, le code est clair. Il n’est pas nécessaire d’examiner chaque sous-routine. Elles peuvent contenir de nombreuses lignes d’instructions et effectuer des opérations complexes, mais l’important est ce qu’elles font. Nous vous conseillons de découper votre code en tâches logiques, ou modules, à chaque fois que c’est possible. +Even for someone who doesn’t know the project, it is clear what this code does. It is not necessary to examine each subroutine. Each subroutine might be many lines long and perform some complex operations, but here it is only important that it performs its task. We recommend that you divide your code into logical tasks, or modules, whenever possible. -### Objet formule +### Object formulas -Vous pouvez encapsuler vos méthodes projets dans les objets **formule** et les appeler à partir de vos objets. +You can encapsulate your project methods in **formula** objects and call them from your objects. -The `Formula` or `Formula from string` commands allow you to create native formula objects that you can encapsulate in object properties. Vous pouvez ainsi appliquer vos méthodes objets personnalisées. +The `Formula` or `Formula from string` commands allow you to create native formula objects that you can encapsulate in object properties. It allows you to implement custom object methods. -To execute a method stored in an object property, use the **( )** operator after the property name. Par exemple: +To execute a method stored in an object property, use the **( )** operator after the property name. For example: ```4d //myAlert ALERT("Hello world!") ``` -`myAlert` peut ensuite être encapsulé dans n'importe quel objet et peut être appelé : +Then `myAlert` can be encapsulated in any object and called: ```4d C_OBJECT($o) $o:=New object("custom_Alert";Formula(myAlert)) -$o.custom_Alert() //affiche "Hello world!" +$o.custom_Alert() //displays "Hello world!" ``` -La syntaxe avec des crochets est également prise en charge : +Syntax with brackets is also supported: ```4d -$o["custom_Alert"]() //affiche "Hello world!" +$o["custom_Alert"]() //displays "Hello world!" ``` -Vous pouvez appeler votre formule en lui [passant des paramètres](Concepts/parameters.md) $1, $2, etc., tout comme pour les méthodes projet de 4D : +You can also [pass parameters](Concepts/parameters.md) to your formula when you call it by using $1, $2… just like with 4D project methods: ```4d -//méthode fullName +//fullName method C_TEXT($0;$1;$2) $0:=$1+" "+$2 ``` -Vous pouvez encapsuler `fullName` dans un objet : +You can encapsulate `fullName` in an object: ```4d C_OBJECT($o) $o:=New object("full_name";Formula(fullName)) $result:=$o.full_name("John";"Smith") //$result = "John Smith" -// équivalent à $result:=fullName("param1";"param2") +// equivalent to $result:=fullName("param1";"param2") ``` -Lorsqu'elles sont associées à la fonction `This`, ces méthodes objets vous permettent d'écrire du code générique très puissant. Par exemple: +Combined with the `This`function, such object methods allow writing powerful generic code. For example: ```4d -//méthode fullName2 +//fullName2 method C_TEXT($0) $0:=This.firstName+" "+This.lastName ``` -La méthode agit ensuite comme un nouvel attribut calculé qui peut être ajoutée aux autres attributs : +Then the method acts like a new, calculated attribute that can be added to other attributes: ```4d C_OBJECT($o) $o:=New object("firstName";"Jim";"lastName";"Wesson") -$o.fullName:=Formula(fullName2) //ajouter la méthode +$o.fullName:=Formula(fullName2) //add the method $result:=$o.fullName() //$result = "Jim Wesson" @@ -150,103 +150,101 @@ $result:=$o.fullName() -A note que même si elle n'a pas de paramètres, une méthode objet devant être exécutée doit être appelée avec des parenthèses ( ). En appelant uniquement une seule propriété, une nouvelle référence à la formule sera retournée (et ne sera pas exécutée) : +Note that, even if it does not have parameters, an object method to be executed must be called with ( ) parenthesis. Calling only the object property will return a new reference to the formula (and will not execute it): ```4d -$o:=$f.message //retourne l'objet formule en $o +$o:=$f.message //returns the formula object in $o ``` -### Méthodes de menu -Une méthode de menu est appelée lorsque la commande de menu personnalisé à laquelle elle est associée est sélectionnée. Vous assignez la méthode à la commande de menu dans l’éditeur de menus de 4D. Lorsque l’utilisateur sélectionne la commande de menu, la méthode est exécutée. En créant des menus personnalisés qui appellent des méthodes de menu qui exécutent des actions spécifiques, vous créez des interfaces personnalisées pour vos applications de bureau. +### Menu Methods +A menu method is invoked when you select the custom menu command to which it is attached. You assign the method to the menu command using the Menu editor or a command of the "Menus" theme. The method executes when the menu command is chosen. By creating custom menus with menu methods that perform specific actions, you create custom interfaces for your desktop applications. -Les commandes de menus personnalisés peuvent déclencher une ou plusieurs actions. Par exemple, une commande de menu de saisie d’enregistrements peut appeler une méthode effectuant deux actions : afficher le formulaire entrée approprié et appeler la commande `AJOUTER ENREGISTREMENT` jusqu’à ce que l’utilisateur annule la saisie de nouveaux enregistrements. +Custom menu commands can cause one or more activities to take place. For example, a menu command for entering records might call a method that performs two tasks: displaying the appropriate input form, and calling the `ADD RECORD` command until the user cancels the data entry activity. -L’automatisation de séquences d’actions est une possibilité très puissante du langage de programmation de 4D. A l’aide des menus personnalisés, vous pouvez automatiser des séquences de tâches, vous permettez aux utilisateurs de naviguer plus facilement dans votre application. +Automating sequences of activities is a very powerful capability of the programming language. Using custom menus, you can automate task sequences and thus provide more guidance to users of the application. -### Méthodes de gestion de process +### Process Methods -Une **méthode projet** est une méthode projet appelée lorsqu’un process est démarré. Le process existera tant que la méthode sera en cours d'exécution. A noter qu'une méthode de menu associée à une commande de menu pour laquelle la propriété *Démarrer un nouveau process* est sélectionnée, est aussi la méthode de gestion de process pour le process créé. +A **process method** is a project method that is called when a process is started. The process lasts only as long as the process method continues to execute, except if it is a Worker process. Note that a menu method attached to a menu command with *Start a New Process* property is also the process method for the newly started process. -### Méthodes de gestion d’événements et d'erreurs -Une **méthode de gestion d’événements** est une méthode dédiée à la gestion des événements, qui s'exécute dans un process différent de celui de la méthode de gestion des process. Généralement, pour la gestion des événements, vous pouvez laisser 4D faire le gros du travail. Par exemple, lors de la saisie de données, 4D détecte les clics souris et les touches enfoncées, puis appelle les méthodes objet et formulaire correspondantes, vous permettant ainsi de prévoir dans ces méthodes les traitements appropriés aux événements. Pour plus d'informations, reportez-vous à la description de la commande `APPELER SUR EVENEMENT`. +### Event and Error catching Methods +An **event catching method** runs in a separate process as the process method for catching events. Usually, you let 4D do most of the event handling for you. For example, during data entry, 4D detects keystrokes and clicks, then calls the correct object and form methods so you can respond appropriately to the events from within these methods. For more information, see the description of the command `ON EVENT CALL`. -Une **méthode de gestion d’erreurs** est une méthode projet d'interruption. Elle s'exécute à l'intérieur du process dans lequel elle a été installée à chaque fois qu'une erreur se produit. Pour plus d'informations, reportez-vous à la description de la commande `APPELER SUR ERREUR`. +An **error catching method** is an interrupt-based project method. Each time an error or an exception occurs, it executes within the process in which it was installed. For more information, see the description of the command `ON ERR CALL`. -## Méthode projet récursives +## Recursive Project Methods -Des méthodes projet peuvent s'appeler les unes les autres. Par exemple: +Project methods can call themselves. For example: -- Une méthode A peut appeler une méthode B, qui appelle A, donc A appelle B de nouveau, etc. -- Une méthode peut s'appeler elle-même. +- The method A may call the method B which may call A, so A will call B again and so on. +- A method can call itself. -Cela s'appelle la récursivité. Le langage de 4D supporte pleinement la récursivité. +This is called recursion. The 4D language fully supports recursion. -Examinons l'exemple suivant : Examinons l'exemple suivant : vous disposez d'une table `[Amis et relations]` composée de l'ensemble de champs suivant (très simplifié) : -- `[Amis et parents]Nom` -- `[Amis et parents]Enfant'Nom` +Here is an example. Let’s say you have a `[Friends and Relatives]` table composed of this extremely simplified set of fields: +- `[Friends and Relatives]Name` +- `[Friends and Relatives]ChildrensName` -Pour cet exemple, nous supposons que les valeurs des champs sont uniques (il n'existe pas deux personnes avec le même nom). A partir d'un nom, vous voulez écrire la phrase “Un de mes amis, Pierre, qui est le rejeton de Paul qui est le rejeton de Martine qui est le rejeton de Robert qui est le rejeton de Gertrude, fait cela pour gagner sa vie !” : +For this example, we assume the values in the fields are unique (there are no two persons with the same name). Given a name, you want to build the sentence “A friend of mine, John who is the child of Paul who is the child of Jane who is the child of Robert who is the child of Eleanor, does this for a living!”: -1. Vous pouvez procéder de la manière suivante : +1. You can build the sentence in this way: ```4d - $vsName:=Request("Saisissez le nom :";"Pierre") - Si(OK=1) - QUERY([Amis et parents];[Amis et parents]Nom=$vsNom) - If(Records in selection([Amis et parents])>0) - $vtHistoireComplète:="Un de mes amis, "+$vsNom + $vsName:=Request("Enter the name:";"John") + If(OK=1) + QUERY([Friends and Relatives];[Friends and Relatives]Name=$vsName) + If(Records in selection([Friends and Relatives])>0) + $vtTheWholeStory:="A friend of mine, "+$vsName Repeat - QUERY([Amis et parents];[Amis et parents]Enfant'Nom=$vsNom) - $vlResultRecherche:=Records in selection([Amis et parents]) - If($vlResultRecherche>0) - $vtHistoireComplète:=$vtHistoireComplète+" qui est le rejeton de "+[Amis et parents]Nom - $vsNom:=[Amis et parents]Nom + QUERY([Friends and Relatives];[Friends and Relatives]ChildrensName=$vsName) + $vlQueryResult:=Records in selection([Friends and Relatives]) + If($vlQueryResult>0) + $vtTheWholeStory:=$vtTheWholeStory+" who is the child of "+[Friends and Relatives]Name + $vsName:=[Friends and Relatives]Name End if - Until($vlResultRecherche=0) - $vtHistoireComplète:=$vtHistoireComplète+", fait cela pour gagner sa vie !" - ALERT($vtHistoireComplète) + Until($vlQueryResult=0) + $vtTheWholeStory:=$vtTheWholeStory+", does this for a living!" + ALERT($vtTheWholeStory) End if End if ``` -2. Vous pouvez également procéder ainsi : +2. You can also build it this way: ```4d - $vsNom:=Request("Saisissez le nom :";"Pierre") - If(OK=1) - QUERY([Amis et parents];[Amis et parents]Nom=$vsNom) - If(Records in selection([Amis et parents])>0) - ALERT("Un de mes amis, "+Généalogie de($vsNom)+", fait cela pour gagner sa vie !") - End if - End if + $vsName:=Request("Enter the name:";"John") + If(OK=1) + QUERY([Friends and Relatives];[Friends and Relatives]Name=$vsName) + If(Records in selection([Friends and Relatives])>0) + ALERT("A friend of mine, "+Genealogy of($vsName)+", does this for a living!") End if End if ``` -en utilisant la fonction récursive `Généalogie de` suivante : +with the recursive function `Genealogy of` listed here: ```4d - // Méthode projet Généalogie de - // Généalogie de ( Chaîne ) -> Texte - // Généalogie de ( Nom ) -> Partie de la phrase + ` Genealogy of project method + ` Genealogy of ( String ) -> Text + ` Genealogy of ( Name ) -> Part of sentence $0:=$1 - QUERY([Amis et parents];[Amis et parents]Enfant'Nom=$1) -If(Enregistrements trouves([Amis et parents])>0) - $0:=$0+" qui est le rejeton de "+Généalogie de([Amis et parents]Nom) -End if + QUERY([Friends and Relatives];[Friends and Relatives]ChildrensName=$1) + If(Records in selection([Friends and Relatives])>0) + $0:=$0+" who is the child of "+Genealogy of([Friends and Relatives]Name) + End if ``` -Vous notez que la méthode `Généalogie de` s'appelle elle-même. +Note the `Genealogy of` method which calls itself. -La première manière de procéder utilise un **algorithme itératif**. La seconde manière utilise un **algorithme récursif**. +The first way is an **iterative algorithm**. The second way is a **recursive algorithm**. -Lorsque vous implémentez du code pour traiter des cas comme celui décrit ci-dessus, vous aurez toujours le choix entre écrire des méthodes utilisant des algorithmes itératifs ou récursifs. Typiquement, la récursivité fournit un code plus concis, plus facile à lire et à maintenir, mais elle est facultative. +When implementing code for cases like the previous example, it is important to note that you can always write methods using iteration or recursion. Typically, recursion provides more concise, readable, and maintainable code, but using it is not mandatory. -Dans 4D, la récursivité est typiquement utilisée pour : +Some typical uses of recursion in 4D are: -- Traiter les enregistrements de tables liées les unes aux autres de la même manière que décrit dans l'exemple ci-dessus. -- Naviguer parmi les documents et les dossiers de votre disque à l'aide des commandes `LISTE DES DOSSIERS` et `LISTE DES DOCUMENTS`. Un dossier peut contenir des dossiers et des documents, les sous-dossiers peuvent eux-mêmes contenir des dossiers et des documents, etc. +- Treating records within tables that relate to each other in the same way as in the example. +- Browsing documents and folders on your disk, using the commands `FOLDER LIST` and `DOCUMENT LIST`. A folder may contain folders and documents, the subfolders can themselves contain folders and documents, and so on. -**Important :** Les appels récursifs doivent toujours se terminer à un moment donné. Dans l'exemple ci-dessus, la méthode `Généalogie de` cesse de s'appeler elle-même lorsque la recherche ne trouve plus d'enregistrement. Sans ce test conditionnel, la méthode s'appellerait indéfiniment et 4D pourrait au bout d'un certain temps retourner l'erreur “La pile est pleine” car le programme n'aurait plus assez de place pour "empiler" les appels (ainsi que les paramètres et les variables locales utilisés dans la méthode). +**Important:** Recursive calls should always end at some point. In the example, the method `Genealogy of` stops calling itself when the query returns no records. Without this condition test, the method would call itself indefinitely; eventually, 4D would return a “Stack Full” error becuase it would no longer have space to “pile up” the calls (as well as parameters and local variables used in the method). From e2984b066396af840359df59225880e20153b34b Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:21:24 +0100 Subject: [PATCH 136/260] New translations parameters.md (French) --- .../translated_docs/fr/Concepts/parameters.md | 266 +++++++++--------- 1 file changed, 133 insertions(+), 133 deletions(-) diff --git a/website/translated_docs/fr/Concepts/parameters.md b/website/translated_docs/fr/Concepts/parameters.md index 538dbc6693997a..0f9db09a0fc1b1 100644 --- a/website/translated_docs/fr/Concepts/parameters.md +++ b/website/translated_docs/fr/Concepts/parameters.md @@ -4,121 +4,121 @@ title: Paramètres --- -## Utilisation des paramètres +## Using parameters -Vous aurez souvent besoin de fournir des valeurs à vos méthodes. Vous pouvez facilement effectuer cette opération grâce aux paramètres. +You'll often find that you need to pass data to your methods. This is easily done with parameters. -**Les paramètres** (ou **arguments**) sont des données dont les méthodes ont besoin pour s’exécuter. Le terme *paramètres* ou *arguments* est utilisé indifféremment dans ce manuel. Des paramètres sont également passés aux commandes intégrées de 4D. Dans l’exemple ci-dessous, la chaîne “Bonjour” est un paramètre de la commande `ALERTE` : +**Parameters** (or **arguments**) are pieces of data that a method needs in order to perform its task. The terms *parameter* and *argument* are used interchangeably throughout this manual. Parameters are also passed to built-in 4D commands. In this example, the string “Hello” is an argument to the `ALERT` built-in command: ```4d -ALERT("Bonjour") +ALERT("Hello") ``` -Les paramètres sont passés de la même manière aux méthodes. Par exemple, si la méthode FAIRE QUELQUE CHOSE accepte trois paramètres, l'appel à cette méthode pourrait être de la forme suivante : +Parameters are passed to methods in the same way. For example, if a project method named DO SOMETHING accepted three parameters, a call to the method might look like this: ```4d -FAIRE QUELQUE CHOSE($WithThis;$AndThat;$ThisWay) +DO SOMETHING($WithThis;$AndThat;$ThisWay) ``` -Les paramètres sont séparés par des points-virgules (;). Leur [valeur est calculée](#values-or-references) au moment de l'appel. +The parameters are separated by semicolons (;). Their [value is evaluated](#values-or-references) at the moment of the call. -Dans la sous-routine (la méthode appelée), la valeur de chaque paramètre est automatiquement copiée séquentiellement dans des variables locales numérotées : $1, $2, $3, etc. La numérotation des variables locales représente l’ordre des paramètres. +In the subroutine (the method that is called), the value of each parameter is automatically copied into sequentially numbered local variables: $1, $2, $3, and so on. The numbering of the local variables represents the order of the parameters. ```4d - //Code de la méthode DO SOMETHING - //Supposons que tous les paramètres sont de type texte + //Code of the method DO SOMETHING + //Assuming all parameters are of the text type C_TEXT($1;$2;$3) - ALERT("J'ai reçu "+$1+" et "+$2+" et aussi "+$3) - //$1 contient le paramètre $WithThis - //$2 contient le paramètre $AndThat - //$3 contient le paramètre $ThisWay + ALERT("I received "+$1+" and "+$2+" and also "+$3) + //$1 contains the $WithThis parameter + //$2 contains the $AndThat parameter + //$3 contains the $ThisWay parameter ``` -Dans une sous-méthode, vous pouvez utiliser les paramètres $1, $2... comme n'importe quelle autre variable locale. Toutefois, dans le cas où vous utilisez des commandes qui modifient la valeur de la variable passée en paramètre (par exemple `Trouver dans champ`), les paramètres $1, $2, etc. ne peuvent pas être utilisés directement. Vous devez d'abord les recopier dans des variables locales standard (par exemple `$mavar:=$1`). +Within the subroutine, you can use the parameters $1, $2... in the same way you would use any other local variable. However, in the case where you use commands that modify the value of the variable passed as parameter (for example `Find in field`), the parameters $1, $2, and so on cannot be used directly. You must first copy them into standard local variables (for example: `$myvar:=$1`). -Les mêmes principes s'appliquent lorsque des méthodes sont exécutées via des commandes consacrées, comme par exemple : +The same principles are used when methods are executed through dedicated commands, for example: ```4d EXECUTE METHOD IN SUBFORM("Cal2";"SetCalendarDate";*;!05/05/10!) -//passez la date du !05/05/10! comme paramètre de SetCalendarDate -// dans le contexte d'un sous-formulaire +//pass the !05/05/10! date as parameter to the SetCalendarDate +// in the context of a subform ``` -**Note :** Pour une bonne exécution du code, assurez-vous que tous les paramètres `$1`, `$2` etc. sont correctement déclarés dans les méthodes appelées (voir [Déclaration des paramètres](#declaring-parameters) ci-dessous). +**Note:** For a good execution of code, you need to make sure that all `$1`, `$2`... parameters are correctly declared within called methods (see [Declaring parameters](#declaring-parameters) below). -### Expressions prises en charge +### Supported expressions -Vous pouvez utiliser n'importe quelle [expression](Concepts/quick-tour.md#expression-types) comme paramètre, à l'exception des : +You can use any [expression](Concepts/quick-tour.md#expression-types) as parameter, except: - tables - arrays -Les expressions de tables ou de tableaux peuvent être passées uniquement [comme une référence utilisant un pointeur](Concepts/dt_pointer.md#pointers-as-parameters-to-methods). +Tables or array expressions can only be passed [as reference using a pointer](Concepts/dt_pointer.md#pointers-as-parameters-to-methods). -## Valeurs retournées +## Returning values -Les méthodes peuvent retourner des valeurs. Par exemple, la ligne d’instruction suivante utilise une commande intégrée, `Longueur`, qui retourne la longueur d’une chaîne. La valeur retournée par `Longueur` est placée dans une variable appelée *MaLongueur*. +Data can be returned from methods. For example, the following line is a statement that uses the built-in command, `Length`, to return the length of a string. The statement puts the value returned by `Length` in a variable called *MyLength*. Here is the statement: ```4d -MaLongueur:=Length("Comment suis-je arrivé là ?") +MyLength:=Length("How did I get here?") ``` -Toute sous-routine peut retourner une valeur. La valeur à retourner est placée dans la variable locale `$0`. +Any subroutine can return a value. The value to be returned is put into the local variable `$0`. -Par exemple, la méthode suivante, appelée `Uppercase4`, retourne une chaîne dont les quatre premiers caractères ont été passés en majuscules : +For example, the following method, called `Uppercase4`, returns a string with the first four characters of the string passed to it in uppercase: ```4d $0:=Uppercase(Substring($1;1;4))+Substring($1;5) ``` -Voici un exemple qui utilise la méthode Uppercase4 : +The following is an example that uses the Uppercase4 method: ```4d $NewPhrase:=Uppercase4("This is good.") ``` -Dans cet exemple, la variable *$NewPhrase* prend la valeur “THIS is good.” +In this example, the variable *$NewPhrase* gets “THIS is good.” -La valeur retournée, `$0`, est une variable locale à la sous-routine. Elle peut être utilisée en tant que telle à l'intérieur de la sous-routine. Par exemple, vous pouvez écrire : +The returned value, `$0`, is a local variable within the subroutine. It can be used as such within the subroutine. For example, you can write: ```4d -// Faire_quelque chose +// Do_something $0:=Uppercase($1) ALERT($0) ``` -Dans cet exemple, `$0` recevait d'abord la valeur de `$1`, puis était utilisée en tant que paramètre de la commande `ALERT`. Dans une sous-méthode, vous pouvez utiliser `$0` comme n'importe quelle autre variable locale. C'est 4D qui retourne sa valeur finale `$0` (sa valeur courante au moment où la sous-routine se termine) à la méthode appelée. +In this example, `$0` is first assigned the value of `$1`, then used as parameter to the `ALERT` command. Within the subroutine, you can use `$0` in the same way you would use any other local variable. It is 4D that returns the value of `$0` (as it is when the subroutine ends) to the called method. -## Déclaration des paramètres +## Declaring parameters -Pour éviter tout conflit, vous devez déclarer chaque paramètre dans les méthodes appelées en [mode interprété](Concepts/interpreted.md), même si cela est facultatif. +Even if it is not mandatory in [interpreted mode](Concepts/interpreted.md), you must declare each parameter in the called methods to prevent any trouble. -Dans l'exemple ci-dessous, la méthode projet `OneMethodAmongOthers` déclare trois paramètres : +In the following example, the `OneMethodAmongOthers` project method declares three parameters: ```4d - // Méthode projet OneMethodAmongOthers - // OneMethodAmongOthers ( Réel ; Date { ; Entier long} ) - // OneMethodAmongOthers ( Amount ; Date { ; Pourcentage } ) + // OneMethodAmongOthers Project Method + // OneMethodAmongOthers ( Real ; Date { ; Long } ) + // OneMethodAmongOthers ( Amount ; Date { ; Ratio } ) - C_REAL($1) // 1er paramètre de type Réel - C_DATE($2) // 2ème paramètre de type Date - C_LONGINT($3) // 3ème paramètre de type Entier long + C_REAL($1) // 1st parameter is of type Real + C_DATE($2) // 2nd parameter is of type Date + C_LONGINT($3) // 3rd parameter is of type Long Integer ``` -Dans l'exemple suivant, la méthode projet `ajoutCapitale` accepte un paramètre texte et retourne un résultat texte : +In the following example, the `Capitalize` project method accepts a text parameter and returns a text result: ```4d - // Méthode projet ajoutCapitale - // ajoutCapitale ( Texte ) -> Texte - // ajoutCapitale( Chaîne source ) -> chaîne avec la première lettre capitale + // Capitalize Project Method + // Capitalize ( Text ) -> Text + // Capitalize ( Source string ) -> Capitalized string - C_TEXTE($0;$1) - $0:=Majusc(Sous chaine($1;1;1))+Minusc(Sous chaine($1;2)) + C_TEXT($0;$1) + $0:=Uppercase(Substring($1;1;1))+Lowercase(Substring($1;2)) ``` -L'utilisation de commandes telles que `Nouveau process` avec les méthodes process qui acceptent les paramètres nécessite également que les paramètres soient explicitement déclarés dans la méthode appelée. Par exemple: +Using commands such as `New process` with process methods that accept parameters also require that parameters are explicitely declared in the called method. For example: ```4d C_TEXT($string) @@ -128,7 +128,7 @@ C_OBJECT($obj) $idProc:=New process("foo_method";0;"foo_process";$string;$int;$obj) ``` -Ce code peut être exécuté en mode compilé, uniquement si "foo_method" déclare ses paramètres : +This code can be executed in compiled mode only if "foo_method" declares its parameters: ```4d //foo_method @@ -138,26 +138,26 @@ C_OBJECT($3) ... ``` -**Note :** En mode compilé, vous pouvez regrouper tous les paramètres de variables locales pour les méthodes projets dans un méthode spécifique avec un nom commençant par "Compiler". Dans cette méthode, vous pouvez prédéclarer les paramètres de chaque méthode, comme par exemple : +**Note:** For compiled mode, you can group all local variable parameters for project methods in a specific method with a name starting with "Compiler". Within this method, you can predeclare the parameters for each method, for example: ```4d // Compiler_method C_REAL(OneMethodAmongOthers;$1) ``` -Pour plus d'informations, consultez la page [Modes interprété et compilé](Concepts/interpreted.md). +See [Interpreted and compiled modes](Concepts/interpreted.md) page for more information. -La déclaration des paramètres est également obligatoire dans les contextes suivants (ces contextes ne prennent pas en charge les déclarations dans une méthode "Compiler") : +Parameter declaration is also mandatory in the following contexts (these contexts do not support declaration in a "Compiler" method): -- Méthodes base - Par exemple, la `méthode base Sur connexion Web` reçoit six paramètres, allant de $1 à $6, de type Texte. Au début de la méthode base, vous devez écrire (même si tous les paramètres ne sont pas utilisés) : +- Database methods - For example, the `On Web Connection Database Method` receives six parameters, $1 to $6, of the data type Text. At the beginning of the database method, you must write (even if all parameters are not used): ```4d -// Sur connexion Web +// On Web Connection C_TEXT($1;$2;$3;$4;$5;$6) ``` -- Triggers - Le paramètre $0 (Entier long), qui résulte d'un trigger, sera typé par le compilateur si le paramètre n'a pas été explicitement déclaré. Néanmoins, si vous souhaitez le déclarer, vous devez le faire dans le trigger lui-même. +- Triggers - The $0 parameter (Longint), which is the result of a trigger, will be typed by the compiler if the parameter has not been explicitly declared. Nevertheless, if you want to declare it, you must do so in the trigger itself. -- Objets formulaires qui acceptent l'événement formulaire `Sur glisser` - Le paramètre $0 (Entier long), qui résulte de l'événement formulaire `Sur glisser` est typé par le compilateur si le paramètre n'a pas été explicitement déclaré. Néanmoins, si vous souhaitez le déclarer, vous devez le faire dans la méthode projet. **Note :** Le compilateur n'initialise pas le paramètre $0. Ainsi, dès que vous utilisez l'événement formulaire `Sur glisser`, vous devez initialiser $0. Par exemple: +- Form objects that accept the `On Drag Over` form event - The $0 parameter (Longint), which is the result of the `On Drag Over` form event, is typed by the compiler if the parameter has not been explicitly declared. Nevertheless, if you want to declare it, you must do so in the object method. **Note:** The compiler does not initialize the $0 parameter. So, as soon as you use the `On Drag Over` form event, you must initialize $0. For example: ```4d C_LONGINT($0) If(Form event=On Drag Over) @@ -172,24 +172,24 @@ C_TEXT($1;$2;$3;$4;$5;$6) -## Paramètres optionnels +## Optional parameters -Dans le manuel *Langage de 4D*, les caractères { } (accolades) indiquent des paramètres facultatifs. Par exemple, `ALERT (message{; okButtonTitle})` signifie que le paramètre *okButtonTitle* doit être omis lors de l'appel de la commande. Vous pouvez l'appeler comme suit : +In the *4D Language Reference* manual, the { } characters (braces) indicate optional parameters. For example, `ALERT (message{; okButtonTitle})` means that the *okButtonTitle* parameter may be omitted when calling the command. You can call it in the following ways: ```4d -ALERT("Etes*vous sûr?";"Oui, je le suis") //2 paramètres -ALERT("Temps écoulé") //1 paramètre +ALERT("Are you sure?";"Yes I am") //2 parameters +ALERT("Time is over") //1 parameter ``` -Les méthodes projet 4D acceptent également des paramètres optionnels, en commençant par la droite. Cependant, il est difficile de gérer les paramètres optionnels lorsque certains d'entre eux sont manquants dans la méthode appelée - cela ne devrait jamais générer d'erreur. Une bonne pratique consisterait à assigner des valeurs par défaut aux paramètres non utilisés. +4D project methods also accept such optional parameters, starting from the right. The issue with optional parameters is how to handle the case where some of them are missing in the called method - it should never produce an error. A good practice is to assign default values to unused parameters. -> Lorsque les paramètres sont nécessaires dans vos méthodes, vous pouvez également envisager des [paramètres nommés](#named-parameters) pour gérer plusieurs paramètres de manière flexible. +> When optional parameters are needed in your methods, you might also consider using [Named parameters](#named-parameters) which provide a flexible way to handle variable numbers of parameters. -A l'aide de la commande `Count parameters` contenue dans la méthode appelée, vous pouvez détecter le nombre de paramètres et effectuer des opérations différentes en fonction de ce nombre. +Using the `Count parameters` command from within the called method, you can detect the actual number of parameters and perform different operations depending on what you have received. -L'exemple suivant affiche un message et peut insérer le texte dans un document sur disque ou dans une zone 4D Write Pro : +The following example displays a text message and can insert the text into a document on disk or in a 4D Write Pro area: ```4d -// Méthode projet APPEND TEXT +// APPEND TEXT Project Method // APPEND TEXT ( Text { ; Text { ; Object } } ) // APPEND TEXT ( Message { ; Path { ; 4DWPArea } } ) @@ -205,20 +205,20 @@ L'exemple suivant affiche un message et peut insérer le texte dans un document End if End if ``` -Une fois que cette méthode projet a été ajoutée à votre application, vous pouvez écrire : +After this project method has been added to your application, you can write: ```4d -APPEND TEXT(vtSomeText) //Affichera uniquement le message -APPEND TEXT(vtSomeText;$path) //Affiche le message et l'annexe au document dans $path -APPEND TEXT(vtSomeText;"";$wpArea) //Affiche le message et l'écrit dans $wpArea +APPEND TEXT(vtSomeText) //Will only display the message +APPEND TEXT(vtSomeText;$path) //Displays text message and appends it to document at $path +APPEND TEXT(vtSomeText;"";$wpArea) //Displays text message and writes it to $wpArea ``` -## Indirections sur les paramètres +## Parameter indirection -Les méthodes projets 4D acceptent un grand nombre de paramètres de même type, commençant par la droite. Ce principe est appelé **l'indirection des paramètres**. L'utilisation de la commande `Count parameters` vous permet d'adresser ces paramètres avec la boucle `For...End for` ainsi que la syntaxe de l'indirection des paramètres. +4D project methods accept a variable number of parameters of the same type, starting from the right. This principle is called **parameter indirection**. Using the `Count parameters` command you can then address those parameters with a `For...End for` loop and the parameter indirection syntax. -Dans l'exemple qui suit, la méthode projet `ENVOYER PAQUET` accepte le paramètre de temps suivi d'un nombre de variables des paramètres de texte : +In the following example, the project method `SEND PACKETS` accepts a time parameter followed by a variable number of text parameters: ```4d //SEND PACKETS Project Method @@ -234,169 +234,169 @@ Dans l'exemple qui suit, la méthode projet `ENVOYER PAQUET` accepte le paramèt End for ``` -Pour une bonne gestion de cette indirection, il est important de respecter la convention suivante : si tous les paramètres ne sont pas adressés par indirection, ce qui est le cas le plus fréquent, il faut que les paramètres adressés par indirection soient passés en fin de liste. A l’intérieur de la méthode, l’adressage par indirection se fait sous la forme : ${$i}, $i étant une variable numérique. ${$i} est appelé **paramètre générique**. +Parameter indirection is best managed if you respect the following convention: if only some of the parameters are addressed by indirection, they should be passed after the others. Within the method, an indirection address is formatted: ${$i}, where $i is a numeric variable. ${$i} is called a **generic parameter**. -Illustrons notre propos par un exemple : écrivons une fonction qui prend des valeurs, fait leur somme et renvoie cette somme formatée suivant un format qui peut varier avec les valeurs. A chaque appel à cette méthode, le nombre de valeurs à additionner peut varier. Il faudra donc passer comme paramètre à notre méthode les valeurs, en nombre variable, et le format, exprimé sous forme d’une chaîne de caractères. +For example, consider a function that adds values and returns the sum formatted according to a format that is passed as a parameter. Each time this method is called, the number of values to be added may vary. We must pass the values as parameters to the method and the format in the form of a character string. The number of values can vary from call to call. -Un appel à cette fonction se fera de la façon suivante : +This function is called in the following manner: ```4d - Résultat:=LaSomme("##0,00";125,2;33,5;24) + Result:=MySum("##0.00";125,2;33,5;24) ``` -La méthode appelante récupérera dans ce cas la chaîne : 182,70, somme des nombres passés, formatée suivant le format spécifié. Les paramètres de la fonction doivent être passés dans un ordre précis : le format d’abord et ensuite les valeurs, dont le nombre peut varier d’un appel à l’autre. +In this case, the calling method will get the string “182.70”, which is the sum of the numbers, formatted as specified. The function's parameters must be passed in the correct order: first the format and then the values. -Examinons maintenant la fonction que nous appelons `LaSomme` : +Here is the function, named `MySum`: ```4d - $Somme:=0 - For($i;2;Nombre de paramètres) - $Somme:=$Somme+${$i} + $Sum:=0 + For($i;2;Count parameters) + $Sum:=$Sum+${$i} End for - $0:=String($Somme;$1) + $0:=String($Sum;$1) ``` -Cette fonction pourra être appelée de diverses manières : +This function can now be called in various ways: ```4d - Résultat:=LaSomme("##0,00";125,2;33,5;24) - Résultat:=LaSomme("000";1;18;4;23;17) + Result:=MySum("##0.00";125,2;33,5;24) + Result:=MySum("000";1;18;4;23;17) ``` -### Déclaration des paramètres génériques +### Declaring generic parameters -De même que pour les autres variables locales, la déclaration du paramètre générique par directive de compilation n’est pas obligatoire. Il est néanmoins recommandé d'éviter toute ambiguïté. Pour déclarer ces paramètres, utilisez une directive de compilateur à laquelle vous passez ${N} comme paramètre, où N est le premier paramètre générique. +As with other local variables, it is not mandatory to declare generic parameters by compiler directive. However, it is recommended to avoid any ambiguity. To declare these parameters, you use a compiler directive to which you pass ${N} as a parameter, where N specifies the first generic parameter. ```4d C_LONGINT(${4}) ``` -La commande ci-dessus signifie que tous les paramètres à partir du quatrième (inclus) seront adressés par indirection. Ils seront tous de type Entier long. Les types de $1, $2 et $3 pourront être quelconques. En revanche, si vous utilisez $2 par indirection, le type utilisé sera le type générique. Il sera donc de type Entier long, même si pour vous, par exemple, il était de type Réel. +This command means that starting with the fourth parameter (included), the method can receive a variable number of parameters of longint type. $1, $2 and $3 can be of any data type. However, if you use $2 by indirection, the data type used will be the generic type. Thus, it will be of the data type Longint, even if for you it was, for instance, of the data type Real. -**Note :** Le nombre, dans la déclaration, doit toujours être une constante et jamais une variable. +**Note:** The number in the declaration has to be a constant and not a variable. -## Valeurs ou références +## Values or references -Lorsque vous passez un paramètre, 4D évalue toujours l'expression du paramètre dans le contexte de la méthode appelée et définit la **valeur résultante** sur les variables locales $1, $2 etc. dans la sous-routine (voir [Utilisation des paramètres](#using-parameters)). Les variables/paramètres locaux ne correspondent pas aux véritables champs, variables ou expressions passés par la méthode appelée; ils contiennent uniquement les valeurs qui n'ont pas été passées. Cette portée étant locale, si la valeur d'un paramètre est modifiée dans la sous-routine, elle ne modifie pas la valeur dans la méthode appelée. Par exemple: +When you pass a parameter, 4D always evaluates the parameter expression in the context of the calling method and sets the **resulting value** to the $1, $2... local variables in the subroutine (see [Using parameters](#using-parameters)). The local variables/parameters are not the actual fields, variables, or expressions passed by the calling method; they only contain the values that have been passed. Since its scope is local, if the value of a parameter is modified in the subroutine, it does not change the value in the calling method. For example: ```4d - //Voici du code extrait de la méthode MY_METHOD + //Here is some code from the method MY_METHOD DO_SOMETHING([People]Name) //Let's say [People]Name value is "williams" ALERT([People]Name) - //Voici du code extrait de la méthode DO_SOMETHING + //Here is the code of the method DO_SOMETHING $1:=Uppercase($1) ALERT($1) ``` -La boîte de dialogue d'alerte affichée par `FAIRE QUELQUE CHOSE` contiendra "WILLIAM" et celle affichée par `MA METHODE` contiendra "william". La méthode a modifié localement la valeur du paramètre $1, mais cela n'affecte pas la valeur du champ `[Personnes]Nom` passé en paramètre par la méthode `MA METHODE`. +The alert box displayed by `DO_SOMETHING` will read "WILLIAMS" and the alert box displayed by `MY_METHOD` will read "williams". The method locally changed the value of the parameter $1, but this does not affect the value of the field `[People]Name` passed as parameter by the method `MY_METHOD`. -Si vous voulez réellement que la méthode `FAIRE QUELQUE CHOSE` modifie la valeur du champ, deux solutions s'offrent à vous : +There are two ways to make the method `DO_SOMETHING` change the value of the field: -1. Plutôt que de passer le champ à la méthode, vous lui passez un pointeur : +1. Rather than passing the field to the method, you pass a pointer to it, so you would write: ```4d - //Voici du code extrait de la méthode MY_METHOD + //Here is some code from the method MY_METHOD DO_SOMETHING(->[People]Name) //Let's say [People]Name value is "williams" ALERT([People]Last Name) - //Voici du code extrait de la méthode DO_SOMETHING + //Here the code of the method DO_SOMETHING $1->:=Uppercase($1->) ALERT($1->) ``` -Ici, le paramètre n'est pas le champ lui-même, mais un pointeur vers le champ. Ainsi, à l'intérieur de la méthode `FAIRE QUELQUE CHOSE`, $1 ne contient plus la valeur du champ mais un pointeur vers le champ. L'objet **référencé** par $1 ($1-> dans le code ci-dessus) est le champ lui-même. Par conséquent, la modification de l'objet référencé dépasse les limites de la sous-routine et le champ lui-même est affecté. Dans cet exemple, les deux boîtes de dialogue d'alerte afficheront "WILLIAM". +Here the parameter is not the field, but a pointer to it. Therefore, within the `DO SOMETHING` method, $1 is no longer the value of the field but a pointer to the field. The object **referenced** by $1 ($1-> in the code above) is the actual field. Consequently, changing the referenced object goes beyond the scope of the subroutine, and the actual field is affected. In this example, both alert boxes will read "WILLIAMS". -2. Plutôt que la méthode `FAIRE QUELQUE CHOSE` “fasse quelque chose”, vous pouvez la réécrire de manière à ce qu'elle retourne une valeur. +2. Rather than having the method `DO_SOMETHING` "doing something," you can rewrite the method so it returns a value. Thus you would write: ```4d - //Voici du code extrait de la méthode MY METHOD + //Here is some code from the method MY METHOD [People]Name:=DO_SOMETHING([People]Name) //Let's say [People]Name value is "williams" ALERT([People]Name) - //Voici du code extrait de la méthode DO SOMETHING + //Here the code of the method DO SOMETHING $0:=Uppercase($1) ALERT($0) ``` -Cette deuxième technique de renvoi d'une valeur par une sous-routine est appelée «utilisation d'une fonction». Ceci est décrit dans le paragraphe [Fonctions](#functions). +This second technique of returning a value by a subroutine is called “using a function.” This is described in the [Functions](#functions) paragraph. -### Cas particuliers : objets et collections +### Particular cases: objects and collections -Veillez à ce que les types de données d'Objet et Collection ne puissent être gérés que via une référence (c'est-à-dire un* pointeur* interne). +You need to pay attention to the fact that Object and Collection data types can only be handled through a reference (i.e. an internal *pointer*). -Par conséquent, lorsque vous utilisez des types de données comme paramètres, `$1, $2 ...` ne contiennent pas des *valeurs*, mais des *références*. La modification de la valeur des paramètres `$1, $2 ...` dans la sous-routine sera propagée à chaque fois que l'objet ou la collection source est utilisé(e). C'est le même principe que pour [les pointeurs](Concepts/dt_pointer.md#pointers-as-parameters-to-methods), à l'exception des paramètres `$1, $2 ...` n'ont pas besoin d'être déréférencés dans la sous-routine. +Consequently, when using such data types as parameters, `$1, $2...` do not contain *values* but *references*. Modifying the value of the `$1, $2...` parameters within the subroutine will be propagated wherever the source object or collection is used. This is the same principle as for [pointers](Concepts/dt_pointer.md#pointers-as-parameters-to-methods), except that `$1, $2...` parameters do not need to be dereferenced in the subroutine. -Par exemple, considérons que la méthode `CreatePerson`, qui crée un objet et qui l'envoie comme paramètre : +For example, consider the `CreatePerson` method that creates an object and sends it as a parameter: ```4d - //La méthode CreatePerson crée un objet et l'envoie en tant que paramètre + //CreatePerson C_OBJECT($person) $person:=New object("Name";"Smith";"Age";40) ChangeAge($person) - ALERT(Chaine(OB Lire($person;"Age"))) + ALERT(String($person.Age)) ``` -La méthode `ChangeAge` ajoute 10 à l'attribut Age de l'objet reçu +The `ChangeAge` method adds 10 to the Age attribute of the received object ```4d //ChangeAge C_OBJECT($1) -$1.Age:=$1.Age+10 - ALERT(String($1;Age)) + $1.Age:=$1.Age+10 + ALERT(String($1.Age)) ``` -Si vous exécutez la méthode `CreatePerson`, les deux messages d'alerte contiendront "50" car le même objet est traité par les deux méthodes. +When you execute the `CreatePerson` method, both alert boxes will read "50" since the same object reference is handled by both methods. -**4D Server :** Lorsque des paramètres sont passés entre des méthodes qui ne sont pas exécutées sur la même machine (lors de l'utilisation de l'option Exécuter sur serveur par exemple), il n'est pas possible d'utiliser des références. Dans ce cas, ce sont des copies des paramètres objet ou collection qui sont envoyées au lieu de références. +**4D Server:** When parameters are passed between methods that are not executed on the same machine (using for example the "Execute on Server" option), references are not usable. In these cases, copies of object and collection parameters are sent instead of references. -### Paramètres nommés des objets +### Object named parameters -L'utilisation d'objets en tant que paramètres vous permet de gérer des **paramètres nommés**. Ce style de programmation est simple, souple et facile à lire. +Using objects as parameters allow you to handle **named parameters**. This programming style is simple, flexible, and easy to read. -Par exemple, si vous utilisez la méthode `CreatePerson` : +For example, using the `CreatePerson` method: ```4d - //La méthode CreatePerson crée un objet et l'envoie en tant que paramètre + //CreatePerson C_OBJECT($person) $person:=New object("Name";"Smith";"Age";40) ChangeAge($person) - ALERT(Chaine(OB Lire($person;"Age"))) + ALERT(String($person.Age)) ``` -Dans la méthode `ChangeAge`, vous pouvez écrire : +In the `ChangeAge` method you can write: ```4d //ChangeAge C_OBJECT($1;$para) $para:=$1 $para.Age:=$para.Age+10 - ALERT($para.Nom+" a "+String($para.Age)+" ans.") + ALERT($para.Name+" is "+String($para.Age)+" years old.") ``` -C'est un moyen puissant de définir des [paramètres optionnels](#optional-parameters) (voir ci-dessous également). Pour gérer les paramètres manquants, vous pouvez : -- vérifier si tous les paramètres attendus sont fournis en les comparant à la valeur `Null`, ou -- prédéfinir les valeurs des paramètres, ou -- les utiliser sous forme de valeurs vides. +This provides a powerful way to define [optional parameters](#optional-parameters) (see also below). To handle missing parameters, you can either: +- check if all expected parameters are provided by comparing them to the `Null` value, or +- preset parameter values, or +- use them as empty values. -Dans la méthode `ChangeAge` ci-dessus, les propriétés Age et Nom sont obligatoires et pourraient générer des erreurs si elles sont manquantes. Pour éviter cela, vous pouvez simplement écrire : +In the `ChangeAge` method above, both Age and Name properties are mandatory and would produce errors if they were missing. To avoid this case, you can just write: ```4d //ChangeAge C_OBJECT($1;$para) $para:=$1 $para.Age:=Num($para.Age)+10 - ALERT(String($para.Nom+" a "+String($para.Age)+" ans.") + ALERT(String($para.Name)+" is "+String($para.Age)+" years old.") ``` -Les deux paramètres sont alors optionnels. S'ils ne sont pas renseignés, le résultat sera "a 10 ans", mais aucune erreur ne sera générée. +Then both parameters are optional; if they are not filled, the result will be " is 10 years old", but no error will be generated. -Enfin, les paramètres nommés permettent de maintenir et de reproduire des applications en toutes simplicité et sécurité. Imaginez que vous réalisez, par la suite, qu'ajouter 10 ans n'est pas toujours approprié. Vous aurez besoin d'un autre paramètre pour définir le nombre d'années à ajouter. Vous pouvez écrire : +Finally, with named parameters, maintaining or refactoring applications is very simple and safe. Imagine you later realize that adding 10 years is not always appropriate. You need another parameter to set how many years to add. You write: ```4d -$person:=New object("Nom";"Smith";"Age";40;"àAjouter";10) +$person:=New object("Name";"Smith";"Age";40;"toAdd";10) ChangeAge($person) //ChangeAge @@ -406,8 +406,8 @@ If ($para.toAdd=Null) $para.toAdd:=10 End if $para.Age:=Num($para.Age)+$para.toAdd -ALERT(String($para.Nom)+" a "+String($para.Age)+" ans.") +ALERT(String($para.Name)+" is "+String($para.Age)+" years old.") ``` -Ici, toute la puissance réside dans le fait de ne pas avoir à changer votre code existant. Cela fonctionnera toujours dans l'ancienne version, mais le cas échéant, vous pouvez utiliser une autre valeur que 10 ans. +The power here is that you will not need to change your existing code. It will always work as in the previous version, but if necessary, you can use another value than 10 years. -Avec les variables nommées, n'importe quel paramètre peut être optionnel. Dans l'exemple ci-dessus, tous les paramètres sont optionnels et peuvent être donnés, dans n'importe quel ordre. +With named variables, any parameter can be optional. In the above example, all parameters are optional and anyone can be given, in any order. From 53b878bbb67430b8d6a08a41630a3bc1adc0f3f9 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:21:28 +0100 Subject: [PATCH 137/260] New translations plug-ins.md (French) --- .../translated_docs/fr/Concepts/plug-ins.md | 62 +++++++++---------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/website/translated_docs/fr/Concepts/plug-ins.md b/website/translated_docs/fr/Concepts/plug-ins.md index dcf1118eb70357..0e62435acb5e9f 100644 --- a/website/translated_docs/fr/Concepts/plug-ins.md +++ b/website/translated_docs/fr/Concepts/plug-ins.md @@ -3,57 +3,57 @@ id: plug-ins title: Plug-ins --- -En développant une application 4D, vous découvrirez de nombreuses fonctionnalités que vous n'aviez pas remarquées au début. Vous pouvez même étendre la version standard de 4D en ajoutant des **plug-ins** à votre environnement de développement 4D. +As you develop a 4D application, you will discover many capabilities that you did not notice when you started. You can even augment the standard version of 4D by adding **plug-ins** to your 4D development environment. -## Pourquoi un plugin ? +## Why the need for a plug-in? -Bien que 4D propose des centaines de méthodes intégrées permettant de manipuler des objets et des enregistrements, et d'implémenter une interface utilisateur, une utilisation ou des fonctionnalités spéciales (parfois dépendantes de la plate-forme) peuvent être nécessaires : l'une peut nécessiter ODBC sous Windows, une autre peut nécessiter des services Apple sous macOS, et un autre peut souhaiter implémenter des outils statistiques spécifiques, une connexion à un réseau social, une plateforme de paiement, un accès à un fichier sur le réseau, une interface utilisateur spéciale ou une structure d'image privée. +Although 4D provides hundred of built-in methods used to manipulate objects, records and implement user interface, some special use or feature (sometimes platform dependant) may be needed: one may need ODBC under Windows, another may need Apple services under macOS, while yet another may want to implement specific statistics tools, social network login, payment platform, file access over the network, a special user interface, or a private picture structure. -Il est évident que couvrir tous les domaines des systèmes d'exploitation macOS et Windows au moyen de commandes 4D mènerait certainement à un produit contenant des milliers de commandes et, dans le même temps, la plupart des utilisateurs n'auraient pas besoin d'un si grand ensemble de fonctionnalités. De plus, la création d'un outil aussi complet rendrait l'environnement 4D incroyablement complexe et demanderait des mois d'étude à la plupart des utilisateurs avant de pouvoir obtenir des résultats utiles. +It is obvious that covering all areas of both the macOS and Windows operating systems by way of 4D commands would certainly lead to a product with thousands of commands, and at the same time, most users would have no need for such a large set of capabilities. Also, creating such an all-encompassing tool would make the 4D environment incredibly complex and would take most users months of study before useful results could be expected. -La nature modulaire de l'environnement 4D permet la création d'applications de base, mais n'exclut pas le développement de systèmes extrêmement complexes. L'architecture du plug-in 4D ouvre l'environnement 4D à tout type d'application ou d'utilisateur. Les plug-ins 4D multiplient la puissance et la productivité de cette application ou de l'utilisateur. +The modular nature of the 4D environment allows the creation of basic applications but does not preclude the development of highly complex systems. The 4D Plug-in architecture opens the 4D environment to any type of application or user. 4D Plug-ins multiply that application or user's power and productivity. -## Qu'est-ce qu'un plug-in et à quoi sert-il ? +## What is a plug-in and what can it do? -Un plug-in est un morceau de code que 4D lance au démarrage. Il ajoute des fonctionnalités à 4D et augmente ainsi sa capacité. +A plug-in is a piece of code that 4D launches at start up. It adds functionality to 4D and thus increases its capacity. -Habituellement, un plug-in fait des choses : -- Que 4D ne peut pas effectuer (c'est-à-dire une technologie de plate-forme spécifique), -- Qui sera très difficile à écrire en utilisant uniquement 4D, -- Qui sont uniquement disponibles en tant que point d'entrée de plug-in +Usually, a plug-in does things that: +- 4D cannot do (ie, specific platform technology), +- will be very hard to write just using 4D, +- are only available as Plug-in Entrypoint -Un plug-in contient généralement un ensemble de routines données au développeur 4D. Il peut gérer une zone externe et exécuter un processus externe. +A plug-in usually contains a set of routines given to the 4D Developer. It can handle an External Area and run an external process. -- Une **routine de plug-in** est une routine écrite en langage natif (généralement C ou C ++) qui déclenche une action. -- Une **zone externe** est une partie d'un formulaire pouvant presque tout afficher et interagir avec l'utilisateur si nécessaire. -- Un **processus externe** est un processus qui s'exécute seul, généralement en boucle, et qui fait quasiment tout ce qu'il souhaite. Tout le code de process appartient au plug-in, 4D est simplement présent pour recevoir/envoyer des événements au process. +- A **plug-in routine** is a routine written in native language (usually C or C++) that causes an action. +- An **external area** is a part of a form that can display almost everything and interact with the user when necessary. +- An **external process** is a process that runs alone, usually in a loop, doing almost everything it wants. All process code belongs to the plug-in, 4D is simply present to receive/send events to the process. -### Note importante +### Important note -Un plug-in peut être très simple, avec une seule routine effectuant une très petite tâche, ou très complexe, impliquant une centaine de routines et de domaines. Cependant, chaque développeur de plug-in doit se rappeler qu'un plug-in est un "échantillon" de code. C'est le plug-in qui s'exécute dans 4D, et non l'inverse. En tant que morceau de code, c'est l'hôte de 4D; ce n'est pas une application autonome. Il partage le temps CPU et la mémoire avec 4D et d'autres plug-ins. Il doit donc s'agir d'un code poli, qui utilise exactement ce qui est nécessaire à son fonctionnement. Par exemple, dans les longues boucles, un plug-in doit appeler `PA_Yield ()` pour donner du temps au planificateur 4D, à moins que sa tâche ne soit critique aussi bien pour lui que pour l'application. +A plug-in can be very simple, with just one routine performing a very small task, or it can be very complex, involving hundred of routines and areas. There is virtually no limit to what a plug-in can do, however every plug-in developer should remember that a plug-in is a "sample" piece of code. It is the plug-in that runs within 4D, not the opposite. As a piece of code, it is the host of 4D; it is not a stand-alone application. It shares CPU time and memory with 4D and other plug-ins, thus, it should be a polite code, using just what is necessary to run. For example, in long loops, a plug-in should call `PA_Yield()` to give time to the 4D scheduler unless its task is critical for both it and the application. -## Comment créer un plug-in ? +## How to create a plug-in? -Sur GitHub, 4D fournit un [**plug-in SDK**](https://github.com/4d/4D-Plugin-SDK) open source, contenant le plug-in API 4D et l'assistant de plug-in 4D : +4D provides on GitHub an open-source [**plug-in SDK**](https://github.com/4d/4D-Plugin-SDK), containing the 4D Plugin API and the 4D Plugin Wizard: -- le [**Plugin API de 4D**](https://github.com/4d/4D-Plugin-SDK/blob/master/4D%20Plugin%20API), écrit en C, ajoute plus de 400 fonctions qui vous aident à créer facilement vos propres plug-ins pour ajouter de nouvelles fonctionnalités à votre application 4D. Les fonctions du plug-in API de 4D gèrent toutes les interactions entre l'application 4D et votre plug-in. -- [**L'assistant de plug-in 4D**](https://github.com/4d/4D-Plugin-SDK/blob/master/4D%20Plugin%20Wizard) est un outil essentiel qui simplifie la tâche de développement des plug-ins 4D. Il écrit le code dont 4D a besoin pour interagir correctement avec un plug-in et le charger, afin de vous concentrer sur votre propre code. +- the [**4D Plugin API**](https://github.com/4d/4D-Plugin-SDK/blob/master/4D%20Plugin%20API), written in C, adds more than 400 functions that help you to easily create your own plug-ins to add new functionnalities to your 4D application. 4D Plug-in API functions manage all the interactions between the 4D application and your plug-in. +- The [**4D Plugin Wizard**](https://github.com/4d/4D-Plugin-SDK/blob/master/4D%20Plugin%20Wizard) is an essential tool that simplifies the task of developing 4D plug-ins. It writes the code 4D needs to correctly load and interact with a plug-in, allowing you to concentrate on your own code. -## Comment installer un plug-in? +## How to install a plug-in? -L’installation des plug-ins et composants dans l’environnement 4D s’effectue par simple copie des fichiers des plug-ins ou des composants dans des dossiers appropriés. +You install plug-ins in the 4D environment by copying their files into the appropriate folder. -Les dossiers “NomPlugin.bundle” (appelés paquets ou packages sous Mac Os) contiennent à la fois les versions Windows et Mac Os des plug-ins 4D. Leur architecture interne spécifique permet notamment à 4D Server de charger la version adéquate en fonction de la plate-forme d’exécution du poste client. Pour installer un plug-in dans votre environnement, il vous suffit de placer le dossier ou progiciel “NomPlugin.bundle” concerné dans le dossier **Plugins** souhaité. +“PluginName.bundle” folders contain both Windows and macOS versions of 4D plug-ins. Their specific internal architecture lets 4D Server load the appropriate version according to the platform where the client machine will be run. To install a plug-in in your environment, you just need to put the “PluginName.bundle” folder or package concerned into the desired **Plugins** folder. -Vous pouvez placer les dossiers Plugins et Components à deux endroits : +You can put the Plugins folder in two different places: -- Au niveau de l’application 4D exécutable, c'est-à-dire .: - - Sous Windows : à côté du fichier .exe +- At the level of the 4D executable application, i.e.: + - Under Windows: next to the .exe file - Under macOS: at the first level of the Contents folder inside the application package. In this case, plug-ins are available in every project opened by this application. -- At the same level as the Project folder. Dans ce cas, les plug-ins et les composants sont disponibles dans cette application uniquement. +- At the same level as the Project folder. In this case, plug-ins are only available in this particular project. -Le choix de l’emplacement dépend de votre mode d’utilisation du plug-in ou du composant. +The choice of location depends on how you want to use the plug-in. -Si un même plug-in ou un même composant est placé aux deux endroits, 4D charge uniquement celui situé à côté de la structure. Dans le cas d’une application compilée et fusionnée avec 4D Volume Desktop, la présence de plusieurs instances d’un même plug-in ou d'un même composant empêchera l’ouverture de l’application. +If the same plug-in is placed in both locations, 4D will only load the one located next to the structure. In an application that is compiled and merged using 4D Volume Desktop, if there are several instances of the same plug-in present, this will prevent the application from opening. -Les plug-ins et les composants sont chargés par 4D lors du lancement de l’application. Vous devez donc quitter votre application 4D avant d’effectuer vos copies de fichiers ou dossiers. Ouvrez ensuite votre projet avec 4D. Si l’utilisation d'un plug-in nécessite une licence spécifique, le plug-in est chargé mais n’est pas actif. \ No newline at end of file +Plug-ins are loaded by 4D when the application is launched so you will need to quit your 4D application before installing them. Then open your project with 4D. If any plug-in requires a specific license for use, it will be loaded but not available for use. \ No newline at end of file From fd6d12fafcd9f45ad57148362149d0e19fca277e Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:21:30 +0100 Subject: [PATCH 138/260] New translations quick-tour.md (French) --- .../translated_docs/fr/Concepts/quick-tour.md | 317 +++++++++--------- 1 file changed, 158 insertions(+), 159 deletions(-) diff --git a/website/translated_docs/fr/Concepts/quick-tour.md b/website/translated_docs/fr/Concepts/quick-tour.md index c07250a783c6e9..c3acc07f7b0508 100644 --- a/website/translated_docs/fr/Concepts/quick-tour.md +++ b/website/translated_docs/fr/Concepts/quick-tour.md @@ -4,39 +4,39 @@ title: Tour d'horizon sidebar_label: Tour d'horizon --- -En utilisant le langage 4D, le traditionnel "Hello, world!" peut s'afficher à l'écran de plusieurs manières. Le plus simple est probablement d'écrire la ligne suivante dans une méthode de projet : +Using the 4D language, printing the traditional "Hello, world!" message on screen can be done in several ways. The most simple is probably to write the following single line in a project method: ```4d ALERT("Hello, World!") ``` -Ce code affichera une boîte de dialogue d'alerte standard contenant le message "Hello, World!" et un bouton OK. Pour exécuter le code, il vous suffit de cliquer sur le bouton d'exécution dans l'éditeur de méthode : +This code will display a platform-standard alert dialog box with the "Hello, World!" message, containing an OK button. To execute the code, you just need to click on the execution button in the Method editor: ![alt-text](assets/en/Concepts/helloworld.png) -Vous pouvez également associer ce code à un bouton de formulaire et exécuter le formulaire. Dans ce cas, en cliquant sur le bouton, vous afficherez la boîte de dialogue d'alerte. Dans tous les cas, vous venez d'exécuter votre première ligne de code 4D ! +Or, you could attach this code to a button in a form and execute the form, in which case clicking on the button would display the alert dialog box. In any cases, you have just executed your first line of 4D code! -## Assigner des valeurs +## Assigning Values -Vous pouvez donner des valeurs aux variables, aux champs, aux éléments de tableaux et/ou récupérer leur valeur. Donner une valeur à une variable s’appelle assigner une valeur (ou affecter une valeur) et s’effectue à l’aide de l’opérateur d’assignation (:=). L’opérateur d’assignation est également utilisé pour assigner des valeurs aux champs ou aux éléments de tableaux. +Data can be put into and copied out of variables, fields, array elements... Putting data into a variable is called assigning the data to the variable and is done with the assignment operator (:=). The assignment operator is also used to assign data to fields or array elements. ```4d -$MyNumber:=3 //assigne 3 à la variable MyNumber -[Products]Size:=$MyNumber //assigne la variable MyNumber au champ [Products]Size -arrDays{2}:="Mardi" //assigne la chaîne "Mardi" au 2ème élément arrDays -MyVar:=Length("Acme") //assigne le résultat de la fonction (4) à MyVar -$myDate:=!2018/01/21! //assigne une date littérale -$myHour:=?08:12:55? //assigne une heure littérale +$MyNumber:=3 //assigns 3 to MyNumber variable +[Products]Size:=$MyNumber //assigns MyNumber variable to [Products]Size field +arrDays{2}:="Tuesday" //assigns "Tuesday" string to the 2nd arrDays element +MyVar:=Length("Acme") //assigns the result of the function (4) to MyVar +$myDate:=!2018/01/21! //assigns a date literal +$myHour:=?08:12:55? //assigns a time literal ``` -Vous devez impérativement distinguer l'opérateur d'affectation := des autres opérateurs. Plutôt que de combiner des expressions dans une nouvelle expression, l'opérateur d'affectation copie la valeur de l'expression à droite de l'opérateur d'affectation dans la variable ou le champ situé à gauche de l'opérateur. +You MUST distinguish the assignment operator := from the other operators. Rather than combining expressions into a new one, the assignment operator copies the value of the expression to the right of the assignment operator into the variable or field to the left of the operator. -**Important :** Ne confondez pas l’opérateur d’assignation (:=) avec le signe égal (=). Un opérateur d'affectation différent (et non pas =) a été choisi délibérément pour éviter les problèmes et la confusion qui surviennent souvent avec == ou === dans d'autres langages de programmation. De telles erreurs sont souvent difficiles à reconnaître pour le compilateur et conduisent à un dépannage fastidieux. +**Important:** Do NOT confuse the assignment operator := with the equality comparison operator =. A different assignment operator (and not =) was deliberately chosen to avoid issues and confusion which often occur with == or === in other programming languages. Such errors are often difficult to recognize by the compiler and lead to time-consuming troubleshooting. ## Variables -Le langage 4D est fortement typé, bien qu'une certaine flexibilité soit autorisée dans de nombreux cas. You create a typed variable using the `var` keyword. Par exemple, pour créer une variable du type date, vous pouvez écrire : +The 4D language is strongly typed, although some flexibility is allowed in many cases. You create a typed variable using the `var` keyword. For example, to create a variable of the date type, you can write: ```4d var MyDate : Date @@ -50,23 +50,23 @@ var myPerson : cs.Person ``` -Even if it is usually not recommended, you can declare variables simply by using them; you do not necessarily need to formally define them. Par exemple, si vous voulez créer une variable qui contient la date du jour plus 30 jours, il vous suffit d’écrire dans 4D : +Even if it is usually not recommended, you can declare variables simply by using them; you do not necessarily need to formally define them. For example, if you want a variable that will hold the current date plus 30 days, you can write: ```4d MyOtherDate:=Current date+30 ``` -La ligne de code indique "MyOtherDate obtient la date actuelle plus 30 jours." This line declares the variable, assigns it with both the (temporary) date type and a content. A variable declared by assignment is interpreted as typeless, that is, it can be assigned with other types in other lines and then changes the type dynamically. A variable typed with `var` cannot change the type. In [compiled mode](interpreted.md) however, the type can never be changed, regardless of how the variable was declared. +The line of code reads “MyOtherDate gets the current date plus 30 days.” This line declares the variable, assigns it with both the (temporary) date type and a content. A variable declared by assignment is interpreted as typeless, that is, it can be assigned with other types in other lines and then changes the type dynamically. A variable typed with `var` cannot change the type. In [compiled mode](interpreted.md) however, the type can never be changed, regardless of how the variable was declared. -## Commandes +## Commands -Les commandes 4D sont des méthodes intégrées qui permettent d'effectuer une action. Toutes les commandes 4D, telles que `CREATE RECORD` ou `ALERT`, sont décrites dans le _Manuel Langage de 4D_, et sont regroupées par thème. Les commandes sont souvent utilisées avec des paramètres qui sont passés entre parenthèses () et séparés par des points-virgules (;). Exemple : +4D commands are built-in methods to perform an action. All 4D commands, such as `CREATE RECORD`, or `ALERT`, are described in the _4D Language Reference_ manual, grouped by theme. Commands are often used with parameters, which are passed in brackets () and separated by semicolons (;). Example: ```4d -COPY DOCUMENT("dossier1\\nom1";"dossier2\\" ; "nouveau") +COPY DOCUMENT("folder1\\name1";"folder2\\" ; "new") ``` -Certaines commandes sont reliées à des collections ou à des objets, auquel cas ce sont des méthodes nommées qui sont utilisées à l'aide de la notation en point. Par exemple: +Some commands are attached to collections or objects, in which case they are named methods and are used using the dot notation. For example: ```4d $c:=New collection(1;2;3;4;5) @@ -75,144 +75,143 @@ $nc:=$c.slice(0;3) //$nc=[1,2,3] $lastEmployee:=$employee.last() ``` -Vous pouvez utiliser des plug-ins ou des composants 4D qui ajoutent de nouvelles commandes à votre environnement de développement 4D. +You can use 4D plug-ins or 4D components that add new commands to your 4D development environment. -Il existe de nombreux plug-ins proposés par la communauté des utilisateurs de 4D ou des développeurs tiers. Par exemple, en utilisant les pages [4d-plugin-pdf-pages](https://github.com/miyako/4d-plugin-pdf-pages) sur macOS : +There are many plug-ins proposed by the 4D user community or 3rd-party developers on the market. For example, using the [4d-plugin-pdf-pages](https://github.com/miyako/4d-plugin-pdf-pages) on macOS: ```4d PDF REMOVE PAGE(path;page) ``` -4D SVG est un exemple de composant utilitaire qui augmente les capacités de votre application : +4D SVG is an example of a utility component extending the capabilities of your application: ```4d -//faire un dessin +//drawing a picture svgRef:=SVG_New objectRef:=SVG_New_arc(svgRef;100;100;90;90;180) ``` -4D SVG est inclus dans 4D. +4D SVG is included in 4D. -## Constantes +## Constants -4D propose un large ensemble de constantes prédéfinies, dont les valeurs sont accessibles par un nom. Par exemple, `XML DATA` est une constante (valeur 6). Par défaut, les constantes prédéfinies sont soulignées dans l'éditeur de méthodes 4D. Elles permettent d'écrire un code plus lisible. +4D proposes an extensed set of predefined constants, whose values are accessible by name. For example, `Read Mode` is a constant (value 2). Predefined constants appear underlined by default in the 4D Method editor. They allow writing more readable code. ```4d -vRef:=Open document("PassFile";"TEXTE";Read Mode) // ouvrir le doc en mode lecture seule +vRef:=Open document("PassFile";"TEXT";Read Mode) // open doc in read only mode ``` ## Méthodes -4D propose un grand nombre de méthodes (ou de commandes) intégrées, mais vous permet également de créer vos propres **méthodes de projet**. Les méthodes de projet sont des méthodes définies par l'utilisateur qui contiennent des commandes, des opérateurs et d'autres parties du langage. Les méthodes projet sont des méthodes génériques, mais il existe d'autres types de méthodes : les méthodes objet, les méthodes formulaire, les méthodes table (Triggers) et les méthodes base. +4D provides a large number of built-in methods (or commands) but also lets you can create your own **project methods**. Project methods are user-defined methods that contain commands, operators, and other parts of the language. Project methods are generic methods, but there are other kinds of methods: Object methods, Form methods, Table methods (Triggers), and Database methods. -Une méthode est composée de plusieurs lignes d’instructions. Une ligne d’instructions effectue une action. Cette ligne d’instruction peut être simple ou complexe. +A method is composed of statements; each statement consists of one line in the method. A statement performs an action, and may be simple or complex. -Par exemple, la ligne de code suivante est une instruction qui affichera une boîte de dialogue de confirmation : +For example, the following line is a statement that will display a confirmation dialog box: ```4d -CONFIRM("Souhaitez-vous vraiment clore ce compte ?";"Oui";"Non") +CONFIRM("Do you really want to close this account?";"Yes";"No") ``` -Une méthode contient également des testes et des boucles qui gèrent le flux d'exécution. Les méthodes 4D prennent en charge les structures `If...Else...End if` et `Case of...Else...End case` ainsi que les boucles : `While...End while`, `Repeat...Until`, `For...End for`, et `For each...End for each`: +A method also contains tests and loops that control the flow of the execution. 4D methods support `If...Else...End if` and `Case of...Else...End case` branching structures as well as looping structures: `While...End while`, `Repeat...Until`, `For...End for`, and `For each...End for each`: -L'exemple suivant permet d'examiner chaque caractère du texte vtSomeText : +The following example goes through all the characters of the text vtSomeText: ```4d For($vlChar;1;Length(vtSomeText)) - //Faire quelque chose avec le caractère s'il s'agit d'une tabulation + //Do something with the character if it is a TAB If(Character code(vtSomeText[[$vlChar]])=Tab) //... End if End for ``` -Une méthode projet peut en appeler une autre avec ou sans les paramètres (arguments). Les paramètres sont passés à la méthode entre parenthèses, à la suite du nom de la méthode. Chaque paramètre est séparé par des points virgule (;). Les paramètres sont passés à la méthode appelée en tant que variables locales numérotées séquentiellement : $1, $2,…, $n. Une méthode peut retourner une seule valeur dans le paramètre $0. Lorsque vous appelez une méthode, vous saisissez simplement son nom : +A project method can call another project method with or without parameters (arguments). The parameters are passed to the method in parentheses, following the name of the method. Each parameter is separated from the next by a semicolon (;). The parameters are available within the called method as consecutively numbered local variables: $1, $2,…, $n. A method can return a single value in the $0 parameter. When you call a method, you just type its name: ```4d $myText:="hello" -$myText:=Do_Something($myText) //Appelle la méthode Do_Something +$myText:=Do_Something($myText) //Call the Do_Something method ALERT($myText) //"HELLO" - //Voici le code de la méthode Do_Something + //Here the code of the method Do_Something $0:=Uppercase($1) ``` -## Types de données +## Data Types -De nombreux types de données peuvent être manipulés via le langage 4D. Il existe des types de données élémentaires (chaîne, numérique, date, heure, booléen, image, pointeur, tableau), ainsi que des types de données composites (BLOBs, objets, collections). +In the language, the various types of data that can be handled are referred to as data types. There are basic data types (string, numeric, date, time, Boolean, picture, pointers, arrays), and also composite data types (BLOBs, objects, collections). -A noter que les données de type chaîne et numérique peuvent être associées à plusieurs types de champ. Lorsque des données sont placées dans un champ, le langage les convertit automatiquement dans le type du champ. Par exemple, si un champ de type entier est utilisé, les valeurs qu’il contient sont automatiquement traitées en tant que numériques. En d’autres termes, vous n’avez pas à vous préoccuper du mélange de champs de types semblables lorsque vous programmez avec 4D ; le langage le gère pour vous. +Note that string and numeric data types can be associated with more than one type of field. When data is put into a field, the language automatically converts the data to the correct type for the field. For example, if an integer field is used, its data is automatically treated as numeric. In other words, you need not worry about mixing similar field types when using the language; it will manage them for you. -Cependant, il est important, lorsque vous utilisez le langage, de ne pas mélanger les différents types de données. Tout comme il est absurde de stocker la valeur “ABC” dans un champ de type Date, il est absurde de donner la valeur “ABC” à une variable utilisée pour des dates. Dans la plupart des cas, 4D est très tolérant et tentera d’utiliser de manière logique ce que vous faites. Par exemple, si vous additionnez un nombre x et une date, 4D déduira que vous voulez ajouter x jours à la date, mais si vous tentez d’ajouter une chaîne à une date, 4D vous préviendra que cette opération est impossible. +However, when using the language it is important that you do not mix different data types. In the same way that it makes no sense to store “ABC” in a Date field, it makes no sense to put “ABC” in a variable used for dates. In most cases, 4D is very tolerant and will try to make sense of what you are doing. For example, if you add a number to a date, 4D will assume that you want to add that number of days to the date, but if you try to add a string to a date, 4D will tell you that the operation cannot work. -Certains cas nécessitent que vous stockiez des données dans un type et que vous les utilisiez dans un autre. Le langage contient un ensemble complet de commandes vous permettant de convertir des types de données en d’autres types. Par exemple, si vous voulez créer un numéro de matricule commençant par des chiffres et se terminant par des lettres, telles que "abc", vous pouvez écrire : vous pouvez écrire : +There are cases in which you need to store data as one type and use it as another type. The language contains a full complement of commands that let you convert from one data type to another. For example, you may need to create a part number that starts with a number and ends with characters such as “abc”. In this case, you might write: ```4d -[Produits]Matricule:=String(Numéro)+"abc" +[Products]Part Number:=String(Number)+"abc" ``` -Si _Numéro_ vaut 17, _[Produits]Matricule_ prendra la valeur “17abc”. +If _Number_ is 17, then _[Products]Part Number_ will get the string “17abc”. -Les types de données sont détaillés dans la section [Types de données](Concepts/data-types.md). +The data types are fully defined in the section [Data Types](Concepts/data-types.md). -## Objets et collections +## Objects and collections -Vous pouvez gérer les objets et collections du langage 4D à l'aide de la notation objet pour lire ou définir leurs valeurs. Par exemple: +You can handle 4D language objects and collections using the object notation to get or to set their values. For example: ```4d employee.name:="Smith" ``` -Vous pouvez également utiliser de crochets, comme dans l'exemple ci-dessous : +You can also use a string within square brackets, for example: ```4d -$vName:=employee["nom"] +$vName:=employee["name"] ``` -Comme la valeur d'une propriété d'objet peut elle-même être un objet ou une collection, la notation objet requiert une séquence de symboles pour accéder aux sous-propriétés, par exemple : +Since an object property value can be an object or a collection, object notation accepts a sequence of symbols to access sub-properties, for example: ```4d $vAge:=employee.children[2].age ``` -A noter que si la valeur de la propriété de l'objet est un objet qui encapsule une méthode (une formule), vous devez ajouter des parenthèses () au nom de la propriété pour exécuter la méthode : +Note that if the object property value is an object that encapsulates a method (a formula), you need to add parenthesis () to the property name to execute the method: ``` $f:=New object $f.message:=New formula(ALERT("Hello world!")) -$f.message() //affiche "Hello world!" -$f.message() //affiche "Hello world!" +$f.message() //displays "Hello world!" ``` -Pour accéder à un élément de collection, vous devez passer le numéro de l'élément situé entre crochets : +To access a collection element, you have to pass the element number embedded in square brackets: ```4d C_COLLECTION(myColl) myColl:=New collection("A";"B";1;2;Current time) -myColl[3] //accède au 4ème élément de la collection +myColl[3] //access to 4th element of the collection ``` ## Classes -Le langage 4D prend en charge les classes d'objets. Ajoutez un fichier `myClass.4dm` dans le dossier Project/Sources/Classes d'un projet pour créer une classe nommée "myClass". +The 4D language supports object classes. Add a `myClass.4dm` file in the Project/Sources/Classes folder of a project to create a class named "myClass". -To instantiate an object of the class in a method, call the user class from the *class store* (`cs`) and use the `new()` member function. Vous pouvez passer des paramètres. +To instantiate an object of the class in a method, call the user class from the *class store* (`cs`) and use the `new()` member function. You can pass parameters. ```4d -// dans une méthode 4D +// in a 4D method $o:=cs.myClass.new() ``` -In the `myClass` class method, use the `Function ` statement to define the *methodName* class member method. Une méthode membre de classe peut recevoir et retourner des paramètres comme n'importe quelle méthode, et utiliser `This` comme instance d'objet. +In the `myClass` class method, use the `Function ` statement to define the *methodName* class member method. A class member method can receive and return parameters like any method, and use `This` as the object instance. ```4d -// dans le fichier myClass.4dm -Fonction bonjour - C_TEXT (0 $) - $0: = "Hello" + This.who +//in the myClass.4dm file +Function hello + C_TEXT($0) + $0:="Hello "+This.who ``` -Pour exécuter une méthode membre de classe, utilisez simplement l'opérateur `()` sur la méthode membre de l'instance d'objet. +To execute a class member method, just use the `()` operator on the member method of the object instance. ```4d $o:=cs.myClass.new() @@ -232,7 +231,7 @@ This.width:=$2 This.name:="Rectangle" ``` -A class can extend another class by using `Class extends `. Superclasses can be called using the `Super` command. Par exemple: +A class can extend another class by using `Class extends `. Superclasses can be called using the `Super` command. For example: ```4d //in the Square.4dm file @@ -249,141 +248,141 @@ This.name:="Square" ``` -## Opérateurs -Lorsque vous programmez avec 4D, il est rare que vous ayez simplement besoin de données “brutes”. Le plus souvent, il sera nécessaire de traiter ces données d'une manière ou d'une autre. Vous effectuez ces calculs avec des opérateurs. Les opérateurs, en général, prennent deux valeurs et effectuent avec elles une opération dont le résultat est une troisième valeur. Vous connaissez déjà la plupart des opérateurs. Par exemple, 1 + 2 utilise l’opérateur d’addition (ou signe plus) pour faire la somme de deux nombres, et le résultat est 3. Le tableau ci-dessous présente quelques opérateurs courants : +## Operators +When you use the language, it is rare that you will simply want a piece of data. It is more likely that you will want to do something to or with that data. You perform such calculations with operators. Operators, in general, take two pieces of data and perform an operation on them that results in a new piece of data. You are already familiar with many operators. For example, 1 + 2 uses the addition (or plus sign) operator to add two numbers together, and the result is 3. This table shows some familiar numeric operators: -| Opérateur | Opération | Exemple | -| --------- | -------------- | --------- | -| + | Addition | 1 +2 = 3 | -| – | Soustraction | 3 - 2 = 1 | -| * | Multiplication | 2 * 3 = 6 | -| / | Division | 6 / 2 = 3 | +| Operator | Operation | Example | +| -------- | -------------- | ------------------ | +| + | Addition | 1 + 2 results in 3 | +| – | Subtraction | 3 – 2 results in 1 | +| * | Multiplication | 2 * 3 results in 6 | +| / | Division | 6 / 2 results in 3 | -Les opérateurs numériques ne représentent qu’un seul des différents types d’opérateurs disponibles. Comme 4D traite de multiples types de données, tels que des nombres, des dates ou des images, vous disposez d’opérateurs particuliers effectuant des opérations sur ces données. +Numeric operators are just one type of operator available to you. 4D supports many different types of data, such as numbers, text, dates, and pictures, so there are operators that perform operations on these different data types. -Souvent, les mêmes symboles sont utilisés pour des opérations différentes, en fonction du type de données traitées. Par exemple, le signe (+) peut effectuer diverses opérations, comme le montre le tableau suivant : +The same symbols are often used for different operations, depending on the data type. For example, the plus sign (+) performs different operations with different data: -| Type de données | Opération | Exemple | -| ----------------- | ---------------- | --------------------------------------------------------------------------------------------------- | -| Nombre | Addition | 1 + 2 ajoute les nombres, le résultat est 3 | -| Chaine | Concaténation | “Bonjour” + “à tous” concatène (met bout à bout) les chaînes, le résultat est “Bonjour à tous” | -| Date et Numérique | Addition de date | !1989-01-01! + 20 ajoute 20 jours à la date 1 janvier 1989, le résultat est la date 21 janvier 1989 | +| Data Type | Operation | Example | +| --------------- | ------------- | ---------------------------------------------------------------------------------------------------- | +| Number | Addition | 1 + 2 adds the numbers and results in 3 | +| Chaine | Concatenation | “Hello ” + “there” concatenates (joins together) the strings and results in “Hello there” | +| Date and Number | Date addition | !1989-01-01! + 20 adds 20 days to the date January 1, 1989, and results in the date January 21, 1989 | ## Expressions -Pour parler simplement, les expressions retournent une valeur. En fait, lorsque vous programmez avec 4D, vous utilisez systématiquement des expressions et avez tendance à les manipuler uniquement à travers la valeur qu’elles représentent. Les expressions sont aussi appelées formules. - -Les expressions peuvent être constituées de presque tous les éléments du langage : commandes, opérateurs, variables, champs, propriétés d'objets et éléments de collection. Vous utilisez des expressions pour écrire des lignes de code, qui sont à leur tour utilisées pour construire des méthodes. Des expressions sont employées à chaque fois que le langage 4D a besoin de connaître la valeur d’une donnée. - -Les expressions sont rarement «autonomes». Il existe plusieurs endroits dans 4D où une expression peut être utilisée seule. Par exemple : - -- Editeur de formule (apply formula, query with formula, order by formula) -- La commande `EXECUTE FORMULA` -- La liste de propriétés, où une expression peut être utilisée en tant que source de données pour la plupart des widgets -- Dans la fenêtre du Débogueur où la valeur des expressions peut être évaluée -- Dans l’éditeur d’états semi-automatiques en tant que formule dans une colonne - - -### Types d’expressions -Vous vous référez à une expression via le type de données qu’elle retourne. Il existe plusieurs types d’expressions : Il existe plusieurs types d’expressions : Le tableau suivant fournit des exemples de chaque type d'expression. - -| Expression | Type | Description | -| ----------------------- | --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| “Bonjour” | Chaine | Le mot Bonjour est une constante chaîne, signalée par les guillemets. | -| “Bonjour ” + “à tous” | Chaine | Deux chaînes, “Bonjour ” et “à tous”, sont mises bout à bout (concaténées) à l'aide de l'opérateur de concaténation de chaînes (+). La chaîne “Bonjour à tous” est retournée. | -| “Mr. ” + [Personnes]Nom | Chaine | Deux chaînes sont concaténées : la chaîne "Mr." et la valeur courante du champ Nom dans la table Personnes. Si le champ contient “Dupont”, l'expression retourne “M. Dupont”. | -| Uppercase("smith") | Chaine | Cette expression utilise `Uppercase`, une commande du langage, pour convertir la chaîne "dupont" en majuscules. Elle retourne “DUPONT”. | -| 4 | Nombre | C'est une constante numérique, 4. | -| 4 * 2 | Nombre | Deux nombres, 4 et 2, sont multipliés à l'aide de l'opérateur de multiplication (*). Le résultat est le nombre 8. | -| MonBouton | Nombre | C'est le nom d'un bouton. Il retourne la valeur courante du bouton : 1 s'il y a eu un clic sur le bouton, 0 sinon. | -| !1997-01-25! | Date | C'est une constante date pour la date 25/01/97 (25 janvier 1997). | -| Current date+ 30 | Date | C'est une expression de type Date qui utilise la commande `Current date` pour récupérer la date courante. Elle ajoute 30 jours à la date d'aujourd'hui et retourne la nouvelle date. | -| ?8:05:30? | Heure | C'est une constante heure qui représente 8 heures, 5 minutes, et 30 secondes. | -| ?2:03:04? + ?1:02:03? | Heure | Cette expression ajoute une heure à une autre et retourne l'heure 3:05:07. | -| Vrai | Booléen | Cette commande retourne la valeur booléenne TRUE. | -| 10 # 20 | Booléen | C'est une comparaison logique entre deux nombres. Le symbole (#) signifie “est différent de”. Comme 10 “est différent de” 20, l'expression retourne TRUE. | -| “ABC” = “XYZ” | Booléen | C'est une comparaison logique entre deux chaînes. Elles sont différentes, donc l'expression retourne FALSE. | -| MonImage + 50 | Image | Cette expression considère l'image placée dans MonImage, la déplace de 50 pixels vers la droite, et retourne l'image résultante. | -| ->[Personnes]Nom | Pointeur | Cette expression retourne un pointeur vers le champ [Amis]Nom. | -| Table(1) | Pointeur | C'est une commande qui retourne un pointeur vers la première table. | -| JSON Parse (MaChaine) | Objet | C'est une commande qui retourne MaChaine sous forme d'objet (si format adéquat) | -| JSON Parse (MonTabJSON) | Collection | C'est une commande qui retourne MonTabJSON sous forme de collection (si format adéquat) | -| Form.pageNumber | Propriété objet | Une propriété objet est une expression qui peut être de tout type | -| Col[5] | Élément de collection | Un élément de collection est une expression qui peut être de tout type | -| $entitySel[0] | Entity | Un élément d'une sélection d'entité ORDA est une expression de type entité. Ce type d'expression n'est **pas affectable** | - -### Expressions assignables et non-assignables - -Une expression peut simplement être une constante littérale, telle que le chiffre 4 ou la chaîne "Hello", ou une variable telle que `$myButton`. Elle peut également utiliser des opérateurs. Par exemple, 4 + 2 est une expression qui utilise l'opérateur d'addition pour additionner deux nombres et renvoyer le résultat 6. Dans tous les cas, ces expressions sont **non-assignables**, ce qui signifie que vous ne pouvez pas leur affecter de valeur. Dans 4D, les expressions peuvent être **assignables**. Une expression est assignable quand elle peut être utilisée à droite d'une assignation. Par exemple: +Simply put, expressions return a value. In fact, when using the 4D language, you use expressions all the time and tend to think of them only in terms of the value they represent. Expressions are also sometimes referred to as formulas. + +Expressions are made up of almost all the other parts of the language: commands, operators, variables, fields, object properties, and collection elements. You use expressions to build statements (lines of code), which in turn are used to build methods. The language uses expressions wherever it needs a piece of data. + +Expressions rarely “stand alone.” There are several places in 4D where an expression can be used by itself. It includes: + +- Formula editor (apply formula, query with formula, order by formula) +- The `EXECUTE FORMULA` command +- The Property list, where an expression can be used as a data source for most of widgets +- Debugger where the value of expressions can be checked +- Quick Report editor as a formula for a column + + +### Expression types +You refer to an expression by the data type it returns. There are several expression types. The following table gives examples of each type of expression. + +| Expression | Type | Description | +| ------------------------ | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| “Hello” | Chaine | The word Hello is a string constant, indicated by the double quotation marks. | +| “Hello ” + “there” | Chaine | Two strings, “Hello ” and “there”, are added together (concatenated) with the string concatenation operator (+). The string “Hello there” is returned. | +| “Mr. ” + [People]Name | Chaine | Two strings are concatenated: the string “Mr. ” and the current value of the Name field in the People table. If the field contains “Smith”, the expression returns “Mr. Smith”. | +| Uppercase("smith") | Chaine | This expression uses `Uppercase`, a command from the language, to convert the string “smith” to uppercase. It returns “SMITH”. | +| 4 | Number | This is a number constant, 4. | +| 4 * 2 | Number | Two numbers, 4 and 2, are multiplied using the multiplication operator (*). The result is the number 8. | +| myButton | Number | This is a variable associated to a button. It returns the current value of the button: 1 if it was clicked, 0 if not. | +| !1997-01-25! | Date | This is a date constant for the date 1/25/97 (January 25, 1997). | +| Current date+ 30 | Date | This is a date expression that uses the `Current date` command to get today’s date. It adds 30 days to today’s date and returns the new date. | +| ?8:05:30? | Heure | This is a time constant that represents 8 hours, 5 minutes, and 30 seconds. | +| ?2:03:04? + ?1:02:03? | Heure | This expression adds two times together and returns the time 3:05:07. | +| True | Booléen | This command returns the Boolean value TRUE. | +| 10 # 20 | Booléen | This is a logical comparison between two numbers. The number sign (#) means “is not equal to”. Since 10 “is not equal to” 20, the expression returns TRUE. | +| “ABC” = “XYZ” | Booléen | This is a logical comparison between two strings. They are not equal, so the expression returns FALSE. | +| My Picture + 50 | Image | This expression takes the picture in My Picture, moves it 50 pixels to the right, and returns the resulting picture. | +| ->[People]Name | Pointeur | This expression returns a pointer to the field called [People]Name. | +| Table (1) | Pointeur | This is a command that returns a pointer to the first table. | +| JSON Parse (MyString) | Objet | This is a command that returns MyString as an object (if proper format) | +| JSON Parse (MyJSONArray) | Collection | This is a command that returns MyJSONArray as a collection (if proper format) | +| Form.pageNumber | Object property | An object property is an expression that can be of any supported type | +| Col[5] | Collection element | A collection element is an expression that can be of any supported type | +| $entitySel[0] | Entity | A element of an ORDA entity selection is an expression of the entity type. This kind of expression is **non-assignable** | + +### Assignable vs non-assignable expressions + +An expression can simply be a literal constant, such as the number 4 or the string "Hello", or a variable like `$myButton`. It can also use operators. For example, 4 + 2 is an expression that uses the addition operator to add two numbers together and return the result 6. In any cases, these expressions are **non-assignable**, which means that you cannot assign a value to them. In 4D, expressions can be **assignable**. An expression is assignable when it can be used on the right side of an assignation. For example: ```4d -//La variable $myVar est assignable, vous pouvez écrire : -$myVar:="Hello" //assigner "Hello" à myVar -//Form.pageNumber est assignable, vous pouvez écrire : -Form.pageNumber:=10 //assigne 10 à Form.pageNumber -//Form.pageTotal-Form.pageNumber n'est pas assignable : -Form.pageTotal- Form.pageNumber:=10 //erreur, non assignable +//$myVar variable is assignable, you can write: +$myVar:="Hello" //assign "Hello" to myVar +//Form.pageNumber is assignable, you can write: +Form.pageNumber:=10 //assign 10 to Form.pageNumber +//Form.pageTotal-Form.pageNumber is not assignable: +Form.pageTotal- Form.pageNumber:=10 //error, non-assignable ``` -En général, les expressions qui utilisent un opérateur ne sont pas assignables. Par exemple, `[Personne] Prénom " " +[Personne]Nom` n'est pas assignable. +In general, expressions that use an operator are non-assignable. For example, `[Person]FirstName+" "+[Person]LastName` is not assignable. -## Pointeurs +## Pointers -Le langage 4D fournit une mise en oeuvre avancée des pointeurs, pour vous permettre d'écrire un code puissant et modulaire. Vous pouvez utiliser des pointeurs pour référencer des tables, des champs, des variables, des tableaux et des éléments de tableaux. +The 4D language provides an advanced implementation of pointers, that allow writing powerful and modular code. You can use pointers to reference tables, fields, variables, arrays, and array elements. -Un pointeur sur un élément est créé en ajoutant un symbole "->" avant le nom de l'élément, et peut être déréférencé en ajoutant le symbole "->" après le nom du pointeur. +A pointer to an element is created by adding a "->" symbol before the element name, and can be dereferenced by adding the "->" symbol after the pointer name. ```4d -MaVar:="Bonjour" -MonPointeur->->MaVar -ALERT(MonPointeur->) +MyVar:="Hello" +MyPointer:=->MyVar +ALERT(MyPointer->) ``` -## Commentaires +## Comments -Les commentaires sont des lignes d’instructions inactives. Ces lignes ne sont pas interprétées par le programme (4D n’applique aucun style spécifique à l’intérieur de la ligne de commentaire) et ne sont pas exécutées lorsque la méthode est appelée. +Comments are inactive lines of code. These lines are not interpreted by the 4D language and are not executed when the code is called. -Voici deux manières de créer des commentaires : +There are two ways to create comments: -- `//` pour créer une ligne de commentaire -- `/*...*/` pour les blocs de commentaire en ligne et multi-lignes. +- `//` for single line comments +- `/*...*/` for inline or multiline commnents. -Les deux styles de commentaires peuvent être utilisés simultanément. +Both styles of comments can be used simultaneously. -#### Ligne de commentaire (//) +#### Single line comments (//) -Insérez les caractères `//` au début de la ligne ou après une instruction pour ajouter une ligne de commentaire. Exemple : +Insert `//` at the beginning of a line or after a statement to add a single line comment. Example: ```4d -//Ceci est un commentaire -For($vCounter;1;100) //Début de la boucle - //commentaire - //commentaire - //commentaire - End for +//This is a comment +For($vCounter;1;100) //Starting loop + //comment + //comment + //comment + End for ``` -#### Commentaires en ligne ou multi-lignes (/* */) +#### Inline or multiline comments (/* */) -Entourez le contenu avec des caractères `/*` ... `*/` pour créer des commentaires en ligne ou des blocs de commentaires multilignes. Les blocs de commentaire en ligne et multi-lignes commencent par `/*` et se terminent par `*/`. +Surround contents with `/*` ... `*/` characters to create inline comments or multiline comment blocks. Both inline and multiline comment blocks begin with `/*` and end with `*/`. -- Les **lignes de commentaires en ligne** - peuvent être insérées n'importe où dans le code. Exemple : +- **Inline comments** can be inserted anywhere in the code. Example: ```4d -For /* ligne de commentaire */ ($vCounter;1;100) +For /* inline comment */ ($vCounter;1;100) ... End for ``` -- Les **blocs de commentaires multi-lignes** permettent de commenter un nombre illimité de lignes. Les blocs de commentaires peuvent être imbriqués (ce qui est utile, étant donné que l'éditeur de code 4D prend en charge les blocs condensés). Exemple : +- **Multiline comment blocks** allows commenting an unlimited number of lines. Comment blocks can be nested (useful since the 4D code editor supports block collapsing). Example: ```4d For ($vCounter;1;100) /* -commentaires +comments /* - autres commentaires + other comments */ */ ... From 907a12a850b6f6d78efd4f635465a13feb03bb27 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:21:32 +0100 Subject: [PATCH 139/260] New translations shared.md (French) --- website/translated_docs/fr/Concepts/shared.md | 130 +++++++++--------- 1 file changed, 65 insertions(+), 65 deletions(-) diff --git a/website/translated_docs/fr/Concepts/shared.md b/website/translated_docs/fr/Concepts/shared.md index 6365d9e14931bd..d5292bc2ea9163 100644 --- a/website/translated_docs/fr/Concepts/shared.md +++ b/website/translated_docs/fr/Concepts/shared.md @@ -4,94 +4,94 @@ title: Objets et collections partagés --- ## Aperçu -**Les objets partagés** et **les collections partagées** sont des [objets](Concepts/dt_object.md) et des [collections](Concepts/dt_collection.md) spécifiques dont le contenu est partagé entre les process. Comparés aux [Variables interprocess](Concepts/variables.md#interprocess-variables), les objets partagés et les collections partagées ont l'avantage d'être compatibles avec les **Process 4D préemptifs** : il peuvent être passés en paramètres (par référence) aux commandes telles que `New process` ou `CALL WORKER`. +**Shared objects** and **shared collections** are specific [objects](Concepts/dt_object.md) and [collections](Concepts/dt_collection.md) whose contents are shared between processes. In contrast to [interprocess variables](Concepts/variables.md#interprocess-variables), shared objects and shared collections have the advantage of being compatible with **preemptive 4D processes**: they can be passed by reference as parameters to commands such as `New process` or `CALL WORKER`. -Les objets partagés et les collections partagées peuvent être stockés dans des variables déclarées à l'aide des commandes standard `C_OBJECT` et `C_COLLECTION`, mais doivent être instanciées à l'aide de commandes spécifiques : +Shared objects and shared collections can be stored in variables declared with standard `C_OBJECT` and `C_COLLECTION` commands, but must be instantiated using specific commands: -- pour créer un objet partagé, utilisez la commande `New shared object`, -- pour créer une collection partagée, utilisez la commande `New shared collection`. +- to create a shared object, use the `New shared object` command, +- to create a shared collection, use the `New shared collection` command. -**Note :** Des objets partagés et des collections partagées peuvent être définis comme propriétés d'objets/éléments de collections standard (non partagés). +**Note:** Shared objects and collections can be set as properties of standard (not shared) objects or collections. -Toute modification d'un objet/d'une collection partagé(e) doit s'effectuer à l'intérieur d'une structure **Utiliser...Fin utiliser**. La lecture d'une valeur d'objet/collection ne nécessite pas de structure **Utiliser...Fin utiliser**. +In order to modify a shared object/collection, the **Use...End use** structure must be called. Reading a shared object/collection value does not require **Use...End use**. -Un catalogue unique et global, retourné par la commande `Storage`, est disponible à tout moment et depuis tout process de l'application et de ses composants. +A unique, global catalog returned by the `Storage` command is always available throughout the application and its components, and can be used to store all shared objects and collections. -## Utilisation des objets et collections partagés -Une fois instanciés à l'aide des commandes `Creer objet partage` ou `Creer collection partagee`, les objets partagés et les collections partagées peuvent être modifiés et lus depuis n'importe quel process. +## Using shared objects or collections +Once instantiated with the `New shared object` or `New shared collection` commands, shared object/collection properties and elements can be modified or read from any process of the application. ### Modification -Les modifications suivantes peuvent être effectuées sur les objets partagés et les collections partagées : +Modifications can be applied to shared objects and shared collections: -- ajout ou suppression de propriétés d'objets, -- ajout ou modification de valeurs (prises en charge par les objets/collections partagé(e) s), y compris d'autres objets et collections partagé(s) (ce qui crée un groupe partagé, cf. ci-dessous). +- adding or removing object properties, +- adding or editing values (provided they are supported in shared objects), including other shared objects or collections (which creates a shared group, see below). -Toute instruction de modification d'objet ou de collection partagé(e) doit être encadrée par les mots-clés `Use...End use`, sinon une erreur est générée. +However, all modification instructions in a shared object or collection must be surrounded by the `Use...End use` keywords, otherwise an error is generated. ```4d $s_obj:=New shared object("prop1";"alpha") Use($s_obj) $s_obj.prop1:="omega" -End Use + End Use ``` -Un objet/une collection partagé(e) ne peut être modifié(e) que par un seul process à la fois. `Use` locks the shared object/collection from other threads, while `End use` unlocks the shared object/collection (if the locking counter is at 0, see below). . Toute tentative de modification d'un objet/d'une collection partagé(e) sans au moins un appel à `Use...End use` génère une erreur. Lorsqu'un process appelle `Use...End use` avec un objet/une collection partagé(e) qui est déjà "utilisé(e)" par un autre process, il est simplement mis en attente jusqu'à ce qu'il soit déverrouillé par l'appel à `End use` (aucune erreur n'est générée). En conséquence, les instructions situées à l'intérieur des structures `Use...End use` doivent toujours s'exécuter rapidement et déverrouiller les éléments dès que possible. Il est donc fortement déconseillé de modifier un objet ou une collection partagé(e) directement depuis l'interface, par exemple depuis une boîte de dialogue. +A shared object/collection can only be modified by one process at a time. `Use` locks the shared object/collection from other threads, while `End use` unlocks the shared object/collection (if the locking counter is at 0, see below). . Trying to modify a shared object/collection without at least one `Use...End use` generates an error. When a process calls `Use...End use` on a shared object/collection that is already in use by another process, it is simply put on hold until the `End use` unlocks it (no error is generated). Consequently, instructions within `Use...End use` structures should execute quickly and unlock the elements as soon as possible. Thus, it is strongly advised to avoid modifying a shared object or collection directly from the interface, e.g. through a dialog box. -L'assignation d'objets/collections partagé(e) s à des propriétés ou éléments d'autres objets/collections partagé(e) s est autorisée et entraîne la création de **groupes partagés**. Un groupe partagé est automatiquement créé lorsqu'un objet ou une collection partagé(e) est assigné(e) en tant que valeur de propriété ou élément à un autre objet ou collection partagé(e). Les groupes partagés permettent d'imbriquer des objets et collections partagé(e)s mais nécessitent d'observer des règles supplémentaires : +Assigning shared objects/collections to properties or elements of other shared objects/collections is allowed and creates **shared groups**. A shared group is automatically created when a shared object/collection is set as property value or element of another shared object/collection. Shared groups allow nesting shared objects and collections but enforce additional rules: - Calling `Use` on a shared object/collection belonging to a group locks properties/elements of all shared objects/collections of the group and increments its locking counter. Calling `End use` decrements the locking counter of the group and when the counter is at 0, all the linked shared objects/collections are unlocked. -- Un objet ou une collection partagé(e) peut appartenir à un seul groupe partagé. Une erreur est générée si vous tentez d'assigner un objet ou une collection appartenant déjà à un groupe à un groupe différent. -- Les objets/collections groupé(e) s ne peuvent plus être dégroupé(e) s. Une fois inclus dans un groupe partagé, un objet ou une collection partagé(e) est lié(e) définitivement au groupe pendant toute la durée de la session. Même si toutes les références de l'objet/la collection sont supprimé(e) s des objets/collections parent(e) s, ils resteront liés. +- A shared object/collection can only belong to one shared group. An error is returned if you try to set an already grouped shared object/collection to a different group. +- Grouped shared objects/collections cannot be ungrouped. Once included in a shared group, a shared object/collection is linked permanently to that group during the whole session. Even if all references of an object/collection are removed from the parent object/collection, they will remain linked. -Reportez-vous à l'exemple 2 pour l'illustration des règles des groupes partagés. +Please refer to example 2 for an illustration of shared group rules. -**Note :** Les groupes partagés sont gérés via une propriété interne nommée *locking identifier*. Si vous avez besoin de plus d'informations sur les mécanismes utilisés, reportez-vous au Guide du développeur de 4D. +**Note:** Shared groups are managed through an internal property named *locking identifier*. For detailed information on this value, please refer to the 4D Developer's guide. -### Lecture -La lecture de propriétés ou d'éléments d'un objet ou d'une collection partagé(e) est possible sans appel de la structure `Use...End use`, même si l'objet ou la collection partagé(e) est "utilisé(e)" par un autre process. +### Read +Reading properties or elements of a shared object/collection is allowed without having to call the `Use...End use` structure, even if the shared object/collection is in use by another process. -Cependant, lorsque plusieurs valeurs sont interdépendantes et doivent être lues simultanément, il est nécessaire d'encadrer l'accès en lecture par une structure `Use...End use` pour des raisons de cohérence. +However, it is necessary to read a shared object/collection within `Use...End use` when several values are linked together and must be read at once, for consistency reasons. ### Duplication -Appeler `OB Copier` avec un objet partagé (ou avec un objet dont des propriétés sont des objets partagés) est possible, mais dans ce cas un objet standard (non partagé) est retourné. +Calling `OB Copy` with a shared object (or with an object containing shared object(s) as properties) is possible, but will return a standard (not shared) object including its contained objects (if any). ### Storage -**Storage** est un objet partagé unique, disponible automatiquement pour chaque application et machine. Cet objet partagé est retourné par la commande `Storage`. Il est destiné à référencer les objets ou collections partagé(e)s défini(e)s durant la session que vous souhaitez rendre accessibles à tous les process, préemptifs ou standard. +**Storage** is a unique shared object, automatically available on each application and machine. This shared object is returned by the `Storage` command. You can use this object to reference all shared objects/collections defined during the session that you want to be available from any preemptive or standard processes. -A noter que, à la différence de objets partagés standard, l'objet `Storage` ne crée par de groupe partagé lorsque des objets/collection lui sont assigné(e) s en tant que propriétés. Cette exception permet à l'objet **Storage** d'être utilisé sans verrouiller les objets/collections partagé(e) s connecté(e) s. +Note that, unlike standard shared objects, the `storage` object does not create a shared group when shared objects/collections are added as its properties. This exception allows the **Storage** object to be used without locking all connected shared objects or collections. -Pour plus d'informations, reportez-vous à la description de la commande `Storage`. +For more information, refer to the `Storage` command description. -## Utiliser...Fin utiliser -La syntaxe de la structure `Use...End use` est la suivante : +## Use...End use +The formal syntax of the `Use...End use` structure is: ```4d Use(Shared_object_or_Shared_collection) - instruction(s) + statement(s) End use ``` -La structure `Use...End use` définit une séquence d'instructions qui exécutera des tâches sur le paramètre *Objet_partagé_ou_Collection_partagée* sous la protection d'un sémaphore interne. *Objet_partagé_ou_Collection_partagée* peut être tout objet partagé ou collection partagée valide. +The `Use...End use` structure defines a sequence of statements that will execute tasks on the *Shared_object_or_Shared_collection* parameter under the protection of an internal semaphore. *Shared_object_or_Shared_collection* can be any valid shared object or shared collection. -Les objets partagés et les collections partagées permettent d'établir des communications entre les process, en particulier les **Process 4D préemptifs**. Ils peuvent être passés par référence en paramètre d'un process à un autre. Pour plus de détails sur les objets partagés et les collections partagées, reportez-vous à la page **Objets et collections partagés**. Encadrer les modifications sur les objets partagés et les collections partagées à l'aide des mots-clés `Use...End use` est obligatoire pour empêcher les accès concurrents entre les process. +Shared objects and shared collections are designed to allow communication between processes, in particular, **preemptive 4D processes**. They can be passed by reference as parameters from a process to another one. For detailed information on shared objects or shared collections, refer to the **Shared objects and shared collections** page. Surrounding modifications on shared objects or shared collections by the `Use...End use` keywords is mandatory to prevent concurrent access between processes. -- Une fois que la ligne **Use/Utiliser** est exécutée avec succès, toutes les propriétés/éléments de _Objet_partagé_ou_Collection_partagée_ sont verrouillé(e) s en écriture pour tous les autres process jusqu'à ce que la ligne `End use/Fin` utiliser correspondante soit éxécutée. -- La séquence _d'instructions_ peut alors effectuer toute modification dans les propriétés/éléments de Objet_partagé_ou_Collection_partagée sans risque d'accès concurrent. -- Si un autre objet ou collection partagé(e) est ajouté(e) en tant que propriété du paramètre _Objet_partagé_ou_Collection_partagée_, il ou elle devient connecté(e) et appartiennent au même groupe partagé (cf.** Utilisation des objets et collections partagés**). -- Si un autre process tente d'accéder à une propriété de _Objet_partagé_ou_Collection_partagée_ ou une propriété connectée alors qu'une séquence **Utiliser...Fin** utiliser est en cours d'exécution sur le même Objet_partagé_ou_Collection_partagée, il est automatiquement placé en attente et attendra jusqu'à ce que la séquence courante soit terminée. +- Once the **Use** line is successfully executed, all _Shared_object_or_Shared_collection_ properties/elements are locked for all other process in write access until the corresponding `End use` line is executed. +- The _statement(s)_ sequence can execute any modification on the Shared_object_or_Shared_collection properties/elements without risk of concurrent access. +- If another shared object or collection is added as a property of the _Shared_object_or_Shared_collection_ parameter, they become connected within the same shared group (see **Using shared objects or collections**). +- If another process tries to access one of the _Shared_object_or_Shared_collection_ properties or connected properties while a **Use...End use** sequence is being executed, it is automatically put on hold and waits until the current sequence is terminated. - The **End use** line unlocks the _Shared_object_or_Shared_collection_ properties and all objects of the same group. -- Plusieurs structures **Utiliser...Fin** utiliser peuvent être imbriquées dans le code 4D. In the case of a group, each **Use** increments the locking counter of the group and each **End use** decrements it; all properties/elements will be released only when the last **End use** call sets the locking counter to 0. +- Several **Use...End use** structures can be nested in the 4D code. In the case of a group, each **Use** increments the locking counter of the group and each **End use** decrements it; all properties/elements will be released only when the last **End use** call sets the locking counter to 0. -**Note :** Si une fonction membre d'une collection modifie une collection partagée, un **Utiliser** interne est automatiquement mis en place pour cette collection partagée durant l'exécution de la fonction. +**Note:** If a collection method modifies a shared collection, an internal **Use** is automatically called for this shared collection while the function is executed. -## Exemple 1 +## Example 1 -Vous souhaitez lancer plusieurs process qui vont effectuer des tâches d'inventaire parmi différents produits et mettre à jour le même objet partagé. Le process principal instancie un objet partagé vide et ensuite lance les autres process, passant en paramètre l'objet partagé et les produits à comptabiliser : +You want to launch several processes that perform an inventory task on different products and update the same shared object. The main process instantiates an empty shared object and then, launches the other processes, passing the shared object and the products to count as parameters: ```4d ARRAY TEXT($_items;0) - ... //remplir le tableau avec les éléments à compter + ... //fill the array with items to count $nbItems:=Size of array($_items) C_OBJECT($inventory) $inventory:=New shared object @@ -99,59 +99,59 @@ Vous souhaitez lancer plusieurs process qui vont effectuer des tâches d'inventa $inventory.nbItems:=$nbItems End use - //Créer un process + //Create processes For($i;1;$nbItems) $ps:=New process("HowMany";0;"HowMany_"+$_items{$i};$_items{$i};$inventory) - // objet $inventory envoyé par référence + //$inventory object sent by reference End for ``` -Dans la méthode "HowMany", l'inventaire est effectué et l'objet partagé $inventory est mis à jour dès que possible : +In the "HowMany" method, inventory is done and the $inventory shared object is updated as soon as possible: ```4d C_TEXT($1) C_TEXT($what) C_OBJECT($2) C_OBJECT($inventory) - $what:=$1 //pour une meilleure lisibilité + $what:=$1 //for better readability $inventory:=$2 - - $count:=CountMethod($what) //méthode de comptage des produits - Use($inventory) //Utiliser l'objet partagé - $inventory[$what]:=$count //stockage des résultats pour cet article -End use + + $count:=CountMethod($what) //method to count products + Use($inventory) //use shared object + $inventory[$what]:=$count //save the results for this item + End use ``` -## Exemple 2 +## Example 2 -Les exemples suivants illustrent les règles spécifiques à observer lorsque vous utilisez des groupes partagés : +The following examples highlight specific rules when handling shared groups: ```4d $ob1:=New shared object $ob2:=New shared object Use($ob1) - $ob1.a:=$ob2 //un premier groupe est créé - End use + $ob1.a:=$ob2 //group 1 is created + End use $ob3:=New shared object $ob4:=New shared object Use($ob3) - $ob3.a:=$ob4 //un 2e groupe est créé + $ob3.a:=$ob4 //group 2 is created End use - Use($ob1) //Utilisation d'un objet du groupe 1 - $ob1.b:=$ob4 //ERREUR - //$ob4 appartient déjà à un autre groupe - //son assignation n'est pas permise -End use + Use($ob1) //use an object from group 1 + $ob1.b:=$ob4 //ERROR + //$ob4 already belongs to another group + //assignment is not allowed + End use Use($ob3) - $ob3.a:=Null //on enlève la référence de $ob4 du groupe 2 + $ob3.a:=Null //remove any reference to $ob4 from group 2 End use - Use($ob1) //Utilisation d'un objet du groupe 1 - $ob1.b:=$ob4 //ERREUR - //$ob4 appartient toujours au groupe 2 - //son assignation n'est pas permise + Use($ob1) //use an object from group 1 + $ob1.b:=$ob4 //ERROR + //$ob4 still belongs to group 2 + //assignment is not allowed End use ``` From dbdc4d3e6bd37fdb1023db19635c6d324837c269 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:21:35 +0100 Subject: [PATCH 140/260] New translations variables.md (French) --- .../translated_docs/fr/Concepts/variables.md | 164 +++++++++--------- 1 file changed, 83 insertions(+), 81 deletions(-) diff --git a/website/translated_docs/fr/Concepts/variables.md b/website/translated_docs/fr/Concepts/variables.md index 10a71e450c145c..5dcb524b60a8f8 100644 --- a/website/translated_docs/fr/Concepts/variables.md +++ b/website/translated_docs/fr/Concepts/variables.md @@ -3,25 +3,25 @@ id: variables title: Variables --- -Fondamentalement, dans 4D, les données peuvent être stockées de deux manières. **Les champs** stockent les données sur disque, de manière permanente ; **les variables** stockent les données en mémoire, de manière temporaire. +Data in 4D is stored in two fundamentally different ways. **Fields** store data permanently on disk; **variables** store data temporarily in memory. -Lorsque vous définissez votre base, vous indiquez à 4D les noms et les types de champs que vous voulez utiliser. C’est pratiquement la même chose pour les variables — vous leur donnez un nom et un type (cf. [Type de données](Concepts/data-types.md)). +When you set up your 4D database, you specify the names and types of fields that you want to use. Variables are much the same—you also give them names and different types (see [Data types](Concepts/data-types.md)). -Une fois créée, vous pouvez utiliser une variable partout dans votre application. For example, you might need to store a text variable in a field of same type: +Once created, you can use a variable wherever you need it in your application. For example, you might need to store a text variable in a field of same type: ```4d - [MaTable]MonChamp:=MonTexte + [MyTable]MyField:=MyText ``` -Les variables sont des objets du langage; vous pouvez créer et utiliser des variables qui n’apparaîtront jamais à l'écran. Dans vos formulaires, vous pouvez afficher des variables à l’écran (à l'exception des pointeurs et des BLOB), les utiliser pour saisir des données, et les imprimer dans des états. Dans ces cas, elles se comportent exactement comme des champs, et les mêmes contrôles intégrés sont disponibles lorsque vous les créez . Les variables peuvent également servir à contrôler des boutons, des list box, des zones de défilement, des boutons image, etc., ou à afficher les résultats de calculs ne devant pas être sauvegardés. +Variables are language objects; you can create and use variables that will never appear on the screen. In your forms, you can display variables (except Pointer and BLOB) on the screen, enter data into them, and print them in reports. In this way, enterable and non-enterable area variables act just like fields, and the same built-in controls are available when you create them. Form variables can also control buttons, list boxes, scrollable areas, picture buttons, and so on, or display results of calculations that do not need to be saved. -## Déclaration des variables +## Declaring Variables -Vous créez des variables en les déclarant. Le langage 4D propose deux manières de déclarer des variables : +You create variables by declaring them. The 4D language offers two ways to declare variables: -- à l'aide du mot-clé `var` (recommandé particulièrement si votre code utilise des objets et des classes), -- à l'aide de l'une des commandes du langage 4D du thème "Compilateur" ou "Tableaux" (obsolète, langage classique uniquement). +- using the `var` keyword (recommended, specially if your code uses objects and classes), +- using one of the "Compiler" or "Arrays" theme 4D language commands (deprecated, classic language only). **Note:** Although it is usually not recommended, you can create basic variables simply by using them; you do not necessarily need to formally define them. For example, to declare a variable that will hold the current date plus 30 days, you can write: @@ -40,7 +40,7 @@ To declare a variable of any type with the `var` keyword, use the following synt `var {; ;...}{ : }` -Par exemple: +For example: ```4d var $myText : Text //a text variable @@ -59,26 +59,26 @@ This syntax only supports [local and process variables](#local-process-and-inter If `varType` is omitted, a variable of the **variant** type is created. -Le tableau suivant répertorie toutes les valeurs `varType` prises en charge : - -| varType | Contenu | -| -------------- | ---------------------------------------- | -| Texte | Valeur texte | -| Date | Valeur date | -| Heure | Valeur Heure | -| Booléen | Valeur booléen | -| Entier long | Valeur entier long | -| Réel | Valeur réel | -| Pointeur | Valeur pointeur | -| Image | Valeur image | -| Blob | Valeur BLOB | -| Collection | Valeur collection | -| Variant | Valeur variant | -| Objet | Objet avec classe par défaut (4D.object) | -| 4D.*className* | Objet du nom de la classe 4D | -| cs.*className* | Objet du nom de la classe utilisateur | - -#### Exemples +The following table lists all supported `varType` values: + +| varType | Contents | +| -------------- | ------------------------------------- | +| Text | Text value | +| Date | Date value | +| Heure | Time value | +| Booléen | Boolean value | +| Integer | Long integer value | +| Real | Real value | +| Pointeur | Pointer value | +| Image | Picture value | +| Blob | BLOB value | +| Collection | Collection value | +| Variant | Variant value | +| Objet | Object with default class (4D.Object) | +| 4D.*className* | Object of the 4D class name | +| cs.*className* | Object of the user class name | + +#### Examples - To declare local and process basic variables: @@ -87,9 +87,9 @@ var $myText; myText; $vt : Text var myVar //variant var $o : Object -//équivalent à : +//equivalent to: var $o : 4D.Object -//également équivalent à C_OBJECT($o) +//also equivalent to C_OBJECT($o) ``` - To declare object variables of 4D class: @@ -114,107 +114,109 @@ var $entity : cs.EmployeeEntity Directives from the "Compiler" theme commands allow you to declare variables of basic types. -Par exemple, si vous souhaitez définir une variable de type texte, il suffira d'écrire : +For example, if you want to define a text variable, you write: ```4d - C_TEXT(monTexte) + C_TEXT(myText) ``` -Voici quelques déclarations de variables simples : +The following are some basic variable declarations: ```4d - C_BLOB(vxMyBlob) // La variable process vxMyBlob est déclarée comme variable de type BLOB - C_DATE($vdCurDate) // La variable locale $vdCurDate est déclarée comme variable de type Date - C_C_LONGINT(vg1;vg2;vg3) // Les 3 variables process vg1, vg2 et vg3 sont déclarées comme variables de type Entier long - C_OBJECT($vObj) // La variable locale $vObj est déclarée comme variable de type Objet - C_COLLECTION($vCol) // La variable locale $vCol est déclarée comme variable de type Collection -ARRAY LONGINT(alAnArray;10) //La variable process alAnArray est déclarée comme un tableau entier long de 10 éléments + C_BLOB(vxMyBlob) // The process variable vxMyBlob is declared as a variable of type BLOB + C_DATE($vdCurDate) // The local variable $vdCurDate is declared as a variable of type Date + C_LONGINT(vg1;vg2;vg3) // The 3 process variables vg1, vg2 and vg3 are declared as variables of type longint + C_OBJECT($vObj) // The local variable $vObj is declared as a variable of type Object + C_COLLECTION($vCol) // The local variable $vCol is declared as a variable of type Collection + ARRAY LONGINT(alAnArray;10) //The process alAnArray variable is declared as a Longint array of 10 elements ``` -**Note :** Les tableaux sont un type particulier de variables. Un tableau est une série ordonnée de variables de même type. Pour plus d'informations, veuillez consulter le thème [Tableaux](Concepts/arrays.md). +**Note:** Arrays are a particular type of variables. An array is an ordered series of variables of the same type. For more information, please refer to [Arrays](Concepts/arrays.md). -## Assigner des valeurs +## Assigning Data -Vous pouvez donner des valeurs aux variables ou aux tableaux et/ou récupérer leur valeur. Donner une valeur à une variable s’appelle **assigner une valeur (ou affecter une valeur)** et s’effectue à l’aide de l’opérateur d’assignation (:=). L’opérateur d’assignation est également utilisé pour assigner des valeurs aux champs. +Data can be put into and copied out of variables and arrays. Putting data into a variable is called **assigning the data to the variable** and is done with the assignment operator (:=). The assignment operator is also used to assign data to fields. -L’opérateur d’assignation est un premier moyen pour créer une variable et lui donner une valeur. Vous placez le nom de la variable que vous voulez créer à gauche de l’opérateur. Par exemple: +The assignment operator is a primary way to create a variable and to put data into it. You write the name of the variable that you want to create on the left side of the assignment operator. For example: ```4d -MonNombre:=3 +MyNumber:=3 ``` -crée la variable _MonNombre_ et lui donne la valeur numérique 3. Si MonNombre existait déjà, elle prend simplement la valeur 3. +creates the variable _MyNumber_ and puts the number 3 into it. If MyNumber already exists, then the number 3 is just put into it. > It is usually not recommended to create variables without [declaring their type](#creating-variables). -Bien entendu, les variables ne seraient pas très utiles si vous ne pouviez pas récupérer les valeurs qu’elles contiennent. De nouveau, vous utilisez l’opérateur d’assignation. Si vous devez placer la valeur de MonNombre dans un champ nommé [Produits]Taille, il vous suffit de placer _MonNombre_ à droite de l’opérateur d’assignation : +Of course, variables would not be very useful if you could not get data out of them. Once again, you use the assignment operator. If you need to put the value of MyNumber in a field called [Products]Size, you would write _MyNumber_ on the right side of the assignment operator: ```4d -[Produits]Taille:=MonNombre +[Products]Size:=MyNumber ``` -Dans ce cas, _[Produits]Taille_ vaudrait 3. Cet exemple est plutôt simple, mais il illustre le moyen élémentaire dont vous disposez pour transférer des données d’un objet vers un autre en utilisant le langage. +In this case, _[Products]Size_ would be equal to 3. This example is rather simple, but it illustrates the fundamental way that data is transferred from one place to another by using the language. -Vous assignez des valeurs aux éléments du tableau à l'aide d'accolades ({...}) : +You assign data to array elements by using curly braces ({...}): ```4d -atNoms{1}:="Richard" +atNames{1}:="Richard" ``` -## Variables locales, process et interprocess +## Local, Process, and Interprocess variables -Vous pouvez créer trois types de variables : des variables **locales**, des variables **process** et des variables **interprocess**. La différence entre ces trois types de variables est leur portée, ou les objets pour lesquels elles sont disponibles. +You can create three types of variables: **local**, **process**, and **interprocess**. The difference between the three types of elements is their scope, or the objects to which they are available. -### Variables locales +### Local variables -Une variable locale, comme son nom l’indique, est locale à une méthode — c’est-à-dire accessible uniquement à l’intérieur de la méthode dans laquelle elle a été créée et inaccessible à l’extérieur de cette méthode. Le fait d'être local à une méthode est formellement qualifié de «portée locale». Les variables locales sont utilisées pour restreindre une variable afin qu'elle ne fonctionne que dans la méthode. +A local variable is, as its name implies, local to a method—accessible only within the method in which it was created and not accessible outside of that method. Being local to a method is formally referred to as being “local in scope.” Local variables are used to restrict a variable so that it works only within the method. -- Eviter des conflits de noms avec les autres variables -- Utiliser temporairement des valeurs, -- Réduire le nombre de variables process +You may want to use a local variable to: -Le nom d’une variable locale commence toujours par le signe dollar ($) et peut contenir jusqu’à 31 autres caractères. Si vous saisissez un nom plus long, 4D le tronque pour le ramener à 31 caractères. +- Avoid conflicts with the names of other variables +- Use data temporarily +- Reduce the number of process variables -Lorsque vous développez un projet d'application comportant de nombreuses méthodes et variables, il arrive souvent que vous n’ayez besoin d’utiliser une variable que dans une méthode. Vous pouvez alors créer et utiliser une variable locale, sans devoir vous soucier de l’existence d’une autre variable du même nom ailleurs dans la base. +The name of a local variable always starts with a dollar sign ($) and can contain up to 31 additional characters. If you enter a longer name, 4D truncates it to the appropriate length. -Souvent, dans une application, des informations ponctuelles sont demandées à l’utilisateur. The `Request` command can obtain this information. Elle affiche une boîte de dialogue comportant un message demandant à l’utilisateur de répondre et, lorsque la réponse est validée, la retourne. Généralement, il n’est pas nécessaire de conserver cette information très longtemps dans vos méthodes. C’est l’endroit parfait pour utiliser une variable locale. Voici un exemple : +When you are working in an application project with many methods and variables, you often find that you need to use a variable only within the method on which you are working. You can create and use a local variable in the method without worrying about whether you have used the same variable name somewhere else. + +Frequently, in an application, small pieces of information are needed from the user. The `Request` command can obtain this information. It displays a dialog box with a message prompting the user for a response. When the user enters the response, the command returns the information the user entered. You usually do not need to keep this information in your methods for very long. This is a typical way to use a local variable. Here is an example: ```4d - $vsID:=Request("Saisissez votre numéro d'identification :") -If(OK=1) - QUERY([Personnes];[Personnes]ID=$vsID) + $vsID:=Request("Please enter your ID:") + If(OK=1) + QUERY([People];[People]ID =$vsID) End if ``` -Cette méthode demande simplement à l’utilisateur de saisir un numéro d’identification. La réponse est placée dans une variable locale, $vsID, puis la méthode la recherche parmi les champs [Personnes]ID. Une fois la méthode terminée, la variable locale $vsID est effacée de la mémoire. Ce fonctionnement est bien adapté puisque la variable n’est utile qu’une seule fois et dans cette méthode uniquement. +This method simply asks the user to enter an ID. It puts the response into a local variable, $vsID, and then searches for the ID that the user entered. When this method finishes, the $vsID local variable is erased from memory. This is fine, because the variable is needed only once and only in this method. -**Note :** les paramètres $1, $2 etc. passés aux méthodes sont des variables locales. Pour plus d'informations, veuillez consulter le thème [Paramètres](Concepts/parameters.md). +**Note:** Parameters $1, $2... passed to methods are local variables. For more information, please refer to [Parameters](Concepts/parameters.md). -### Variables process +### Process variables -Une variable process est “visible” uniquement dans le process où elle a été créée. Elle est utilisable par toutes les méthodes du process et toutes les méthodes appelées depuis le process. +A process variable is available only within a process. It is accessible to the process method and any other method called from within the process. -Le nom d’une variable process ne comporte aucun préfixe. Ce nom peut contenir jusqu’à 31 caractères. +A process variable does not have a prefix before its name. A process variable name can contain up to 31 characters. -En mode interprété, les variables sont gérées dynamiquement; elles sont créées et effacées de la mémoire «à la volée». En mode compilé, tous les process que vous créez (process utilisateur) partagent la même définition de variables process, mais chaque process a une instance différente pour chaque variable. Par exemple, la variable maVar est une certaine variable dans le process P_1 et une autre variable dans le process P_2. +In interpreted mode, variables are maintained dynamically; they are created and erased from memory “on the fly.” In compiled mode, all processes you create (user processes) share the same definition of process variables, but each process has a different instance for each variable. For example, the variable myVar is one variable in the process P_1 and another one in the process P_2. -Un process peut lire et écrire des variables process dans un autre process à l'aide des commandes `LIRE VARIABLE PROCESS` et `ECRIRE VARIABLE PROCESS`. Nous vous recommandons de n'utiliser ces commandes que dans le cadre des besoins décrits ci-dessous (qui sont les raisons pour lesquelles ces commandes ont été créées dans 4D) : +A process can “peek and poke” process variables from another process using the commands `GET PROCESS VARIABLE` and `SET PROCESS VARIABLE`. It is good programming practice to restrict the use of these commands to the situation for which they were added to 4D: -- Communication interprocess à des endroits particuliers de votre code -- Gestion du glisser-déposer interprocess -- En client/serveur, communication entre les process sur les postes clients et les procédures stockées exécutées sur le serveur +- Interprocess communication at specific places or your code +- Handling of interprocess drag and drop +- In Client/Server, communication between processes on client machines and the stored procedures running on the server machines -Pour plus d'informations, reportez-vous à la section **Process** et à la description de ces commandes. +For more information, see the chapter **Processes** and the description of these commands. -### Variables interprocess +### Interprocess variables -Les variables interprocess sont visibles dans tout le projet et sont disponibles pour tous les process. Les variables interprocess sont principalement utilisées pour le partage d’informations entre les process. +Interprocess variables are available throughout the project and are shared across all cooperative processes. They are primarily used to share information between processes. -> L'utilisation de variables interprocess n'est pas recommandée car elles ne sont pas disponibles depuis le process préemptif et peuvent rendre le code moins maintenable. +> Use of interprocess variables is not recommended since they are not available from preemptive processes and tend to make the code less maintainable. -Le nom d’une variable interprocess débute toujours par le symbole (<>) — formé du symbole “inférieur à” suivi du symbole “supérieur à” — et peut comporter jusqu’à 31 caractères supplémentaires. +The name of an interprocess variable always begins with the symbols (<>) — a “less than” sign followed by a “greater than” sign— followed by 31 characters. -En mode client/serveur, chaque poste (client et serveur) partage la même définition des variables interprocess, mais chacun utilise une instance différente d'une variable. +In Client/Server, each machine (Client machines and Server machine) share the same definition of interprocess variables, but each machine has a different instance for each variable. From 2b162c6bd0dd61a04dbed10bb3c7d8bdc4702c9c Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:21:37 +0100 Subject: [PATCH 141/260] New translations onMouseEnter.md (French) --- website/translated_docs/fr/Events/onMouseEnter.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/translated_docs/fr/Events/onMouseEnter.md b/website/translated_docs/fr/Events/onMouseEnter.md index db70c0143d1251..921ca04daa4781 100644 --- a/website/translated_docs/fr/Events/onMouseEnter.md +++ b/website/translated_docs/fr/Events/onMouseEnter.md @@ -3,7 +3,7 @@ id: onMouseEnter title: Sur début survol --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------- | | 35 | [4D Write Pro area](FormObjects/writeProArea_overview) - [Button](FormObjects/button_overview.md) - [Button Grid](FormObjects/buttonGrid_overview.md) - [Check Box](FormObjects/checkbox_overview.md) - [Combo Box](FormObjects/comboBox_overview.md) - [Dropdown list](FormObjects/dropdownList_Overview.md) - Form - [Hierarchical List](FormObjects/list_overview.md#overview) - [Input](FormObjects/input_overview.md) - [List Box](FormObjects/listbox_overview.md) - [Picture Button](FormObjects/pictureButton_overview.md) - [Picture Pop up menu](FormObjects/picturePopupMenu_overview.md) - [Plug-in Area](FormObjects/pluginArea_overview.md#overview) - [Progress Indicators](FormObjects/progressIndicator.md) - [Radio Button](FormObjects/radio_overview.md) - [Ruler](FormObjects/ruler.md) - [Spinner](FormObjects/spinner.md) - [Splitter](FormObjects/splitters.md) - [Stepper](FormObjects/stepper.md) - [Tab control](FormObjects/tabControl.md) | The mouse cursor enters the graphic area of an object | @@ -21,7 +21,7 @@ Objects that are made invisible using the `OBJECT SET VISIBLE` command or the [V If the `On Mouse Enter` event has been checked for the form, it is generated for each form object. If it is checked for an object, it is generated only for that object. When there are superimposed objects, the event is generated by the first object capable of managing it that is found going in order from top level to bottom. -### Voir également +### See also - [`Sur survol`](onMouseMove.md) - [`Sur fin survol`](onMouseLeave.md) \ No newline at end of file From 8536f03f0b1ac9e87291b191973b802f23f7a29f Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:21:39 +0100 Subject: [PATCH 142/260] New translations interpreted.md (French) --- .../fr/Concepts/interpreted.md | 82 +++++++++---------- 1 file changed, 41 insertions(+), 41 deletions(-) diff --git a/website/translated_docs/fr/Concepts/interpreted.md b/website/translated_docs/fr/Concepts/interpreted.md index 248a2ee3602d1b..fba630f4e2d740 100644 --- a/website/translated_docs/fr/Concepts/interpreted.md +++ b/website/translated_docs/fr/Concepts/interpreted.md @@ -3,60 +3,60 @@ id: interpreted-compiled title: Modes interprété et compilé --- -Les applications 4D fonctionnent en mode **interprété** ou en mode **compilé** : +4D applications can work in **interpreted** or **compiled** mode: -- En mode interprété, les déclarations sont lues et traduites en langage machine lorsqu'elles sont exécutées. Vous pouvez ajouter ou modifier le code là où vous le souhaitez, l'application se met à jour automatiquement. -- En mode compilé, toutes les méthodes sont lues et traduites une seule fois, lors de la compilation. Par la suite, l'application contient uniquement des instructions au niveau de l'assemblage, il n'est donc plus possible de modifier le code. +- in interpreted mode, statements are read and translated in machine language at the moment of their execution. You can add or modify the code whenever you need to, the application is automatically updated. +- in compiled mode, all methods are read and translated once, at the compilation step. Afterwards, the application only contains assembly level instructions are available, it is no longer possible to edit the code. -Les avantages procurés par le compilateur sont les suivants : +The advantages of the compilation are: -- **Vitesse :** votre application s'exécute de 3 à 1000 fois plus vite. -- **Vérification du code** : la cohérence interne du code de votre application est entièrement contrôlée. Les conflits de logique et de syntaxe sont détectés. -- **Protection :** une fois votre application compilée, vous pouvez en supprimer le code interprété. Alors, l'application compilée dispose des mêmes fonctionnalités que la base originale, à la différence près que la structure et les méthodes ne peuvent plus être visualisées ni modifiées délibérément ou par inadvertance. -- **Application indépendantes "double-cliquables"** : une application compilée peut également être transformée en application indépendante (sous Windows, des fichiers ".EXE") comportant sa propre icône. -- **Exécution en mode préemptif** : seul le code compilé peut être exécuté dans un process préemptif. +- **Speed**: Your application can run from 3 to 1,000 times faster. +- **Code checking**: Your application is scanned for the consistency of code. Both logical and syntactical conflicts are detected. +- **Protection**: Once your application is compiled, you can delete the interpreted code. Then, the compiled application is functionally identical to the original, except that the structure and methods cannot be viewed or modified, deliberately or inadvertently. +- **Stand-alone double-clickable applications**: compiled applications can also be transformed into stand-alone applications (.EXE files) with their own icon. +- **Preemptive mode**: only compiled code can be executed in preemptive processes. -## Différences entre le code interprété et le code compilé -Bien que l'application fonctionnera de la même manière en modes interprété et compilé, il est important de connaitre les différences que l'on peut rencontrer pendant la saisie du code qui sera compilé. L'interpréteur de 4D est généralement plus souple que le compilateur. +## Differences between interpreted and compiled code +Although application will work the same way in interpreted and compiled modes, there are some differences to know when you write code that will be compiled. The 4D interpreter is usually more flexible than the compiler. -| Compilé | Interprété | -| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------ | -| Vous ne devez pas avoir une méthode qui aurait le même nom qu’une variable. | Aucune erreur n'est générée, mais la méthode est prioritaire | -| Toutes les variables doivent être typées, soit via une directive de compilateur (ex : `C_ENTIER LONG`), soit via le compilateur au moment de la compilation. | Les variables peuvent être typées à la volée (non recommandé) | -| Vous ne pouvez pas modifier le type d'une variable ou d'un tableau. | La modification du type d'une variable ou d'un tableau est possible (non recommandé) | -| Vous ne pouvez pas convertir un tableau simple en tableau à deux dimensions, et vice-versa. | Possible | -| Bien que le compilateur déduise le type des variables si nécessaire, il est conseillé de déclarer le type des variables à l'aide des directives de compilation lorsque le type de données est ambigu, en particulier dans un formulaire. | | -| La fonction `Indefinie` retournera toujours Faux. Les variables sont toujours définies. | | -| Si vous avez coché la propriété "Peut être exécutée dans un process préemptif" pour la méthode, le code ne doit pas appeler de commandes thread-unsafe ou d'autres méthodes thread-unsafe. | Les propriétés du process préemptif sont ignorées | -| La commande `APPELER 4D` est nécessaire pour appeler des boucles spécifiques | Il est toujours possible d'interrompre 4D | +| Compiled | Interpreted | +| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------ | +| You cannot have a method with the same name as a variable. | No error is generated, but priority is given to the method | +| All variables must by typed, either through a compiler directive (ex: `C_LONGINT`), or by the compiler at compilation time. | Variables can be typed on-the-fly (not recommended) | +| You cannot change the data type of any variable or array. | Changing the data type of a variable or an array is possible (not recommended) | +| You cannot change a one-dimensional array to a two-dimensional array, or change a two-dimensional array to a one-dimensional array. | Possible | +| Although the compiler will type the variable for you, you should specify the data type of a variable by using compiler directives where the data type is ambiguous, such as in a form. | | +| The `Undefined` function always returns False for variables. Variables are always defined. | | +| If you have checked the "Can be run in preemptive processes" property for the method, the code must not call any thread-unsafe commands or other thread-unsafe methods. | Preemptive process properties are ignored | +| The `IDLE` command is necessary to call 4D in specific loops | It is always possible to interrupt 4D | -## Utiliser les directives du compilateur avec l'interpréteur +## Using Compiler Directives with the Interpreter -Les directives de compilateur ne sont pas requises pour les applications non compilées. L'interpréteur type automatiquement chaque variable selon son utilisation dans la déclaration, et une variable peut être retypée librement dans le projet d'application. +Compiler directives are not required for uncompiled applications. The interpreter automatically types each variable according to how it is used in each statement, and a variable can be freely retyped throughout the application project. -Grâce à cet aspect flexible, il est possible qu'une application agisse différemment en modes interprété et compilé. +Because of this flexibility, it is possible that an application can perform differently in interpreted and compiled modes. -Par exemple, si vous écrivez : +For example, if you write: ```4d -C_ENTIER LONG(MyInt) +C_LONGINT(MyInt) ``` -et ailleurs dans l'application, vous écrivez : +and elsewhere in the project, you write: ```4d MyInt:=3.1416 ``` -Dans cet exemple, `MyInt` se voit assigner la même valeur (3) dans les modes interprété et compilé, étant donné que la directive du compilateur est interprétée *avant* la déclaration d'affectation. +In this example, `MyInt` is assigned the same value (3) in both the interpreted and compiled modes, provided the compiler directive is interpreted *prior* to the assignment statement. -L'interpréteur 4D utilise des directives de compilateur pour typer les variables. Lorsque l'interpréteur rencontre une directive de compilateur, il type la variable en fonction de la directive. Si une déclaration ultérieure tente d'affecter une valeur incorrecte (ex : affecter une valeur alphanumérique à une variable numérique), l'affectation n'aura pas lieu et générera une erreur. +The 4D interpreter uses compiler directives to type variables. When the interpreter encounters a compiler directive, it types the variable according to the directive. If a subsequent statement tries to assign an incorrect value (e.g., assigning an alphanumeric value to a numeric variable) the assignment will not take place and will generate an error. -L'ordre d'apparition des deux déclarations importe peu au compilateur, car il scanne d'abord le projet dans son intégralité pour les directives du compilateur. En revanche, l'interpréteur n'est pas systématique. Il interprète les déclarations dans leur ordre d'exécution. Cet ordre peut évidemment changer d'une session à l'autre, en fonction de ce que fait l'utilisateur. C'est pourquoi il est important de concevoir votre projet afin que vos directives de compilateur s'exécutent avant n'importe quelle déclaration contenant des variables déclarées. +The order in which the two statements appear is irrelevant to the compiler, because it first scans the entire project for compiler directives. The interpreter, however, is not systematic. It interprets statements in the order in which they are executed. That order, of course, can change from session to session, depending on what the user does. For this reason, it is important to design your project so that your compiler directives are executed prior to any statements containing declared variables. -## Utiliser des pointeurs pour éviter les retypages +## Using pointers to avoid retyping -Il n’est pas possible de retyper une variable. Il est, en revanche, tout à fait possible de faire pointer un pointeur successivement sur des variables de type différent. Par exemple, le code suivant s'applique aussi bien dans le mode interprété que dans le mode compilé : +A variable cannot be retyped. However, it is possible to use a pointer to refer to variables of different data types. For example, the following code is allowed in both interpreted and compiled modes: ```4d C_POINTER($p) @@ -66,19 +66,19 @@ C_LONGINT($age) $name:="Smith" $age:=50 -$p:=->$name //texte cible pour le pointeur -$p->:="Wesson" //assigne une valeur texte +$p:=->$name //text target for the pointer +$p->:="Wesson" //assigns a text value $p:=->$age -// nouvelle cible de type différent pour le pointeur -$p->:=55 //assigne une valeur numérique +// new target of different type for the pointer +$p->:=55 //assigns a number value ``` -Imaginez une fonction qui retourne la longueur (nombre de caractères) de valeurs de tout type. +Imagine a function that returns the length (number of charaters) of values that can be of any type. ```4d - // Calc_Length (combien de caractères) - // $1 = pointeur vers un type de variable flexible, numérique, text, heure, booléen + // Calc_Length (how many characters) + // $1 = pointer to flexible variable type, numeric, text, time, boolean C_POINTER($1) C_TEXT($result) @@ -87,14 +87,14 @@ $result:=String($1->) $0:=Length($result) ``` -La méthode peut alors être appelée : +Then this method can be called: ```4d $var1:="my text" $var2:=5.3 $var3:=?10:02:24? $var4:=True -$vLength:=Calc_Length(->$var1)+Calc_Length(->$var2)+Calc_Length(->$var3)+Calc_Length(->$var4) +$vLength:=Calc_Length(->$var1)+Calc_Length(->$var2)+Calc_Length (->$var3)+Calc_Length(->$var4) ALERT("Total length: "+String($vLength)) ``` From 6f8c2cb33d3b5636781acef7684992d72d5afdae Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:21:41 +0100 Subject: [PATCH 143/260] New translations onMouseMove.md (French) --- website/translated_docs/fr/Events/onMouseMove.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/translated_docs/fr/Events/onMouseMove.md b/website/translated_docs/fr/Events/onMouseMove.md index 6a59622485b6b4..406a87374a9110 100644 --- a/website/translated_docs/fr/Events/onMouseMove.md +++ b/website/translated_docs/fr/Events/onMouseMove.md @@ -3,7 +3,7 @@ id: onMouseMove title: Sur survol --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- | | 37 | [4D Write Pro area](FormObjects/writeProArea_overview) - [Button](FormObjects/button_overview.md) - [Button Grid](FormObjects/buttonGrid_overview.md) - [Check Box](FormObjects/checkbox_overview.md) - [Combo Box](FormObjects/comboBox_overview.md) - [Dropdown list](FormObjects/dropdownList_Overview.md) - Form - [Hierarchical List](FormObjects/list_overview.md#overview) - [Input](FormObjects/input_overview.md) - [List Box](FormObjects/listbox_overview.md) - [Picture Button](FormObjects/pictureButton_overview.md) - [Picture Pop up menu](FormObjects/picturePopupMenu_overview.md) - [Plug-in Area](FormObjects/pluginArea_overview.md#overview) - [Progress Indicators](FormObjects/progressIndicator.md) - [Radio Button](FormObjects/radio_overview.md) - [Ruler](FormObjects/ruler.md) - [Spinner](FormObjects/spinner.md) - [Splitter](FormObjects/splitters.md) - [Stepper](FormObjects/stepper.md) - [Tab control](FormObjects/tabControl.md) | The mouse cursor moves at least one pixel OR a modifier key (Shift, Alt/Option, Shift Lock) was pressed | @@ -26,7 +26,7 @@ Objects that are made invisible using the `OBJECT SET VISIBLE` command or the [V If the `On Mouse Move` event has been checked for the form, it is generated for each form object. If it is checked for an object, it is generated only for that object. When there are superimposed objects, the event is generated by the first object capable of managing it that is found going in order from top level to bottom. -### Voir également +### See also - [`Sur début survol`](onMouseEnter.md) - [`Sur fin survol`](onMouseLeave.md) \ No newline at end of file From 85fbbeb0675bd714763b245ad63fb21c4253ba96 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:21:43 +0100 Subject: [PATCH 144/260] New translations progressIndicator.md (French) --- .../fr/FormObjects/progressIndicator.md | 46 +++++++++---------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/progressIndicator.md b/website/translated_docs/fr/FormObjects/progressIndicator.md index f6bcbbe7886d41..88162ccad2769c 100644 --- a/website/translated_docs/fr/FormObjects/progressIndicator.md +++ b/website/translated_docs/fr/FormObjects/progressIndicator.md @@ -1,46 +1,46 @@ --- id: progressIndicator -title: Indicateurs de progression +title: Progress Indicator --- ## Aperçu -Un indicateur de progression (également appelé "thermomètre") est conçu pour afficher ou définir graphiquement des valeurs numériques ou date/heure. +A progress indicator (also called "thermometer") is designed to display or set numeric or date/time values graphically. ![](assets/en/FormObjects/progress1.png) -### Utiliser des indicateurs +### Using indicators -Vous pouvez utiliser les jauges pour afficher ou définir des valeurs. Par exemple, si un indicateur de progression se voit affecter une valeur par une méthode, il affiche la valeur. Si l’utilisateur modifie manuellement la valeur indiquée par la jauge, la valeur contenue par l’objet est modifiée. Cette valeur peut être utilisée pour un autre objet tel qu’un champ, un objet saisissable ou un objet non saisissable. +You can use indicators either to display or set values. For example, if a progress indicator is given a value by a method, it displays the value. If the user drags the indicator point, the value changes. The value can be used in another object such as a field or an enterable or non-enterable object. -La variable associée à l'indicateur contrôle l’affichage. Vous pouvez y placer des valeurs ou utiliser les valeurs qu’il stocke à l’aide des méthodes. Par exemple, la méthode suivante peut être utilisée pour contrôler un thermomètre : +The variable associated with the indicator controls the display. You place values into, or use values from, the indicator using methods. For example, a method for a field or enterable object could be used to control a progress indicator: ```4d vTherm:=[Employees]Salary ``` -This method assigns the value of the Salary field to the vTherm variable. Cette méthode est associée au champ Salaire. +This method assigns the value of the Salary field to the vTherm variable. This method would be attached to the Salary field. -Réciproquement, vous pouvez utiliser un indicateur pour contrôler la valeur d’un champ. L’utilisateur se sert alors de l'indicateur pour saisir la valeur du champ. Dans ce cas la méthode devient : +Conversely, you could use the indicator to control the value in a field. The user drags the indicator to set the value. In this case the method becomes: ```4d [Employees]Salary:=vTherm ``` -La méthode affecte la valeur de l'indicateur au champ Salaire. Lorsque l’utilisateur modifie la valeur affichée par l'indicateur, la valeur du champ Salaire est modifiée. +The method assigns the value of the indicator to the Salary field. As the user drags the indicator, the value in the Salary field changes. -## Le thermomètre par défaut +## Default thermometer ![](assets/en/FormObjects/indicator_progressBar.png) -Le thermomètre est l'indicateur de progression standard. +The thermometer is the basic progress indicator. -Vous pouvez afficher une barre de progression horizontale ou verticale. Ce paramètre est déterminé par la forme de l’objet que vous dessinez. +You can display horizontal or vertical thermometers bars. This is determined by the shape of the object that you draw. -Plusieurs options graphiques sont disponibles : valeurs minimales/maximales, graduations, paliers. +Multiple graphical options are available: minimum/maximum values, graduations, steps. -### Propriétés prises en charge +### Supported Properties [Barber shop](properties_Scale.md#barber-shop) - [Bold](properties_Text.md#bold) - [Border Line Style](properties_BackgroundAndBorder.md#border-line-style) -[Bottom](properties_CoordinatesAndSizing.md#bottom) - [Class](properties_Object.md#css-class) - [Display graduation](properties_Scale.md#display-graduation) - [Enterable](properties_Entry.md#enterable) - [Execute object method](properties_Action.md#execute-object-method) - [Expression Type](properties_Object.md#expression-type) (only "integer", "number", "date", or "time") - [Font](properties_Text.md#font) - [Font Color](properties_Text.md#font-color) - [Font Size](properties_Text.md#font-size) - [Height](properties_CoordinatesAndSizing.md#height) - [Italic](properties_Text.md#italic) - [Graduation step](properties_Scale.md#graduation-step) -[Help Tip](properties_Help.md#help-tip) - [Horizontal Sizing](properties_ResizingOptions.md#horizontal-sizing) - [Label Location](properties_Scale.md#label-location) - [Left](properties_CoordinatesAndSizing.md#left) - [Maximum](properties_Scale.md#maximum) - [Minimum](properties_Scale.md#minimum) - [Number Format](properties_Display.md#number-format) - [Object Name](properties_Object.md#object-name) - [Right](properties_CoordinatesAndSizing.md#right) - [Step](properties_Scale.md#step) - [Top](properties_CoordinatesAndSizing.md#top) - [Type](properties_Object.md#type) - [Underline](properties_Text.md#underline) - [Variable or Expression](properties_Object.md#variable-or-expression) - [Vertical Sizing](properties_ResizingOptions.md#vertical-sizing) - [Visibility](properties_Display.md#visibility) - [Width](properties_CoordinatesAndSizing.md#width) @@ -48,21 +48,21 @@ Plusieurs options graphiques sont disponibles : valeurs minimales/maximales, gra ![](assets/en/FormObjects/indicator.gif) -**Barber shop** is a variant of the default thermometer. Pour active cette variante, vous devez définir la propriété du [Barber shop](properties_Scale.md#barber-shop). -> En code JSON, supprimez simplement la propriété "max" de l'objet thermomètre par défaut pour activer le barber shop. +**Barber shop** is a variant of the default thermometer. To enable this variant, you need to set the [Barber shop](properties_Scale.md#barber-shop) property. +> In JSON code, just remove "max" property from a default thermometer object to enable the Barber shop variant. -Le barber shop affiche une animation continue, telle que le [spinner](spinner.md). Les thermomètres “Barber shop” sont généralement utilisés pour indiquer à l’utilisateur que le programme est en train d’effectuer une opération longue. Lorsque le thermomètre est sélectionné, le thème ["Graduations"](properties_Scale.md) de la liste des propriétés est masqué. +Barber shop displays a continuous animation, like the [spinner](spinner.md). These thermometers are generally used to indicate to the user that the program is in the process of carrying out a long operation. When this thermometer variant is selected, [graphical Scale properties](properties_Scale.md) are not available. -A l’exécution du formulaire, l'objet n’est pas animé. Vous devez gérer l’animation en passant une valeur à [la variable ou expression qui lui est associée](properties_Object.md#variable-or-expression) : +When the form is executed, the object is not animated. You manage the animation by passing a value to its [associated variable or expression](properties_Object.md#variable-or-expression): -* 1 (ou toute valeur différente de 0) = Démarrer l’animation, -* 0 = Stopper l’animation. +* 1 (or any value other than 0) = Start animation, +* 0 = Stop animation. -### Propriétés prises en charge +### Supported Properties [Barber shop](properties_Scale.md#barber-shop) - [Bold](properties_Text.md#bold) - [Border Line Style](properties_BackgroundAndBorder.md#border-line-style) -[Bottom](properties_CoordinatesAndSizing.md#bottom) - [Class](properties_Object.md#css-class) - [Enterable](properties_Entry.md#enterable) - [Execute object method](properties_Action.md#execute-object-method) - [Expression Type](properties_Object.md#expression-type) (only "integer", "number", "date", or "time") - [Font](properties_Text.md#font) - [Font Color](properties_Text.md#font-color) - [Font Size](properties_Text.md#font-size) - [Height](properties_CoordinatesAndSizing.md#height) - [Help Tip](properties_Help.md#help-tip) - [Horizontal Sizing](properties_ResizingOptions.md#horizontal-sizing) - [Italic](properties_Text.md#italic) - [Left](properties_CoordinatesAndSizing.md#left) - [Object Name](properties_Object.md#object-name) - [Right](properties_CoordinatesAndSizing.md#right) - [Top](properties_CoordinatesAndSizing.md#top) - [Type](properties_Object.md#type) - [Underline](properties_Text.md#underline) - [Variable or Expression](properties_Object.md#variable-or-expression) - [Vertical Sizing](properties_ResizingOptions.md#vertical-sizing) - [Visibility](properties_Display.md#visibility) - [Width](properties_CoordinatesAndSizing.md#width) -## Voir également -- [règle](ruler.md) -- [stepper](stepper.md) \ No newline at end of file +## See also +- [rulers](ruler.md) +- [steppers](stepper.md) \ No newline at end of file From 5b71ff5b6a9596c7fee7503027e8bb74eef9a22f Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:21:45 +0100 Subject: [PATCH 145/260] New translations properties_WindowSize.md (French) --- .../fr/FormEditor/properties_WindowSize.md | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/website/translated_docs/fr/FormEditor/properties_WindowSize.md b/website/translated_docs/fr/FormEditor/properties_WindowSize.md index 482ab7e6657ae2..0fe3f1535d1440 100644 --- a/website/translated_docs/fr/FormEditor/properties_WindowSize.md +++ b/website/translated_docs/fr/FormEditor/properties_WindowSize.md @@ -12,11 +12,11 @@ If you select this option, the window height will be locked and it will not be p If this option is not selected, the width of the form window can be modified. In this case, the [Minimum Height and Maximum Height](#maximum-height-minimum-height) properties can be used to determine the resizing limits. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------------- | --------------- | ------------------- | -| windowSizingY | string | "fixed", "variable" | +| Name | Data Type | Possible Values | +| ------------- | --------- | ------------------- | +| windowSizingY | string | "fixed", "variable" | --- @@ -29,11 +29,11 @@ If you select this option, the window width will be locked and it will not be po If this option is not selected, the width of the form window can be modified. In this case, the [Minimum Width and Maximum Width](#maximum-width-minimum-width) properties can be used to determine the resizing limits. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------------- | --------------- | ------------------- | -| windowSizingX | string | "fixed", "variable" | +| Name | Data Type | Possible Values | +| ------------- | --------- | ------------------- | +| windowSizingX | string | "fixed", "variable" | --- @@ -43,12 +43,12 @@ If this option is not selected, the width of the form window can be modified. In Maximum and minimum height (in pixels) of a resizeable form window if the [Fixed Height](#fixed-height) option is not set. -##### Grammaire JSON +##### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| --------------- | --------------- | ----------------- | -| windowMinHeight | number | integer value | -| windowMaxHeight | number | integer value | +| Name | Data Type | Possible Values | +| --------------- | --------- | --------------- | +| windowMinHeight | number | integer value | +| windowMaxHeight | number | integer value | ## Maximum Width, Minimum Width @@ -56,10 +56,10 @@ Maximum and minimum height (in pixels) of a resizeable form window if the [Fixed Maximum and minimum width (in pixels) of a resizeable form window if the [Fixed Width](#fixed-width) option is not set. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| -------------- | --------------- | ----------------- | -| windowMinWidth | number | integer value | -| windowMaxWidth | number | integer value | +| Name | Data Type | Possible Values | +| -------------- | --------- | --------------- | +| windowMinWidth | number | integer value | +| windowMaxWidth | number | integer value | From 5a255f92045c0d7fafb5f40d52cee2cb1430ee11 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:21:48 +0100 Subject: [PATCH 146/260] New translations buttonGrid_overview.md (French) --- .../fr/FormObjects/buttonGrid_overview.md | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/buttonGrid_overview.md b/website/translated_docs/fr/FormObjects/buttonGrid_overview.md index b52b2882796cd8..9fe42af27ebc94 100644 --- a/website/translated_docs/fr/FormObjects/buttonGrid_overview.md +++ b/website/translated_docs/fr/FormObjects/buttonGrid_overview.md @@ -1,35 +1,35 @@ --- id: buttonGridOverview -title: Grille de boutons +title: Button Grid --- ## Aperçu -Une grille de boutons est un objet transparent placé sur une image. L’image doit correspondre à la forme d’un tableau. Lorsque l'utilisateur clique sur un graphique, ce dernier aura un aspect comprimé : +A button grid is a transparent object that is placed on top of a graphic. The graphic should depict a row-by-column array. When one of the graphics is clicked on, it will have a sunken or pressed appearance: ![](assets/en/FormObjects/buttonGrid_smileys.png) -Vous pouvez utiliser une grille de boutons pour déterminer où l’utilisateur clique dans l’image. Votre méthode objet utilise alors l’événement `Sur clic` et gère les actions suivant l’emplacement du clic souris. +You can use a button grid object to determine where the user clicks on the graphic. The object method would use the `On Clicked` event and take appropriate action depending on the location of the click. -## Créer une grille de boutons +## Creating button grids -Pour créer une grille de boutons, placez une image d’arrière-plan puis dessinez une grille de boutons par dessus. Spécifiez le nombre de [lignes](properties_Crop.md#rows) et de [colonnes](properties_Crop.md#columns). +To create the button grid, add a background graphic to the form and place a button grid on top of it. Specify the number of [rows](properties_Crop.md#rows) and [columns](properties_Crop.md#columns). -4D utilise une grille de boutons pour les palettes de couleurs : +In 4D, a button grid is used as a color palette: ![](assets/en/FormObjects/button_buttonGrid.png) -## Utiliser une grille de boutons +## Using button grids -Les boutons de la grille sont numérotés de gauche à droite et de haut en bas, à partir de l’angle supérieur gauche vers l’angle inférieur droit. Dans cet exemple, la grille est dotée de 16 rangées et 16 colonnes. Le bouton situé en haut à gauche est le bouton n° 1. Le dernier bouton de la deuxième rangée est le bouton n° 32. Si aucun élément n'est sélectionné, la valeur est de 0 +The buttons on the grid are numbered from top left to bottom right. In the above example, the grid is 16 columns across by 16 rows down. The button in the top-left position returns 1 when clicked. If the red button at the far right of the second row is selected, the button grid returns 32. If no element is selected, the value is 0 -### Aller à page +### Goto page -Vous pouvez associer l’[action standard](https://doc.4d.com/4Dv17R5/4D/17-R5/Standard-actions.300-4163633.en.html) `Aller à page` à un objet de type Grille de boutons. Lorsque cette action est activée, 4D affiche automatiquement la page du formulaire correspondant au numéro du bouton sélectionné dans la grille de boutons. Par exemple, si l’utilisateur clique sur le 10e bouton de la grille, 4D affichera la page 10 du formulaire courant (si elle existe). +You can assign the `gotoPage` [standard action](https://doc.4d.com/4Dv17R5/4D/17-R5/Standard-actions.300-4163633.en.html) to a button grid. When this action is selected, 4D will automatically display the page of the form that corresponds to the number of the button that is selected in the button grid. For example, if the user selects the tenth button of the grid, 4D will display the tenth page of the current form (if it exists). -## Propriétés prises en charge +## Supported Properties [Border Line Style](properties_BackgroundAndBorder.md#border-line-style) - [Bottom](properties_CoordinatesAndSizing.md#bottom) - [Class](properties_Object.md#css-class) - [Columns](properties_Crop.md#columns) - [Height](properties_CoordinatesAndSizing.md#height) - [Help Tip](properties_Help.md#help-tip) - [Horizontal Sizing](properties_ResizingOptions.md#horizontal-sizing) - [Left](properties_CoordinatesAndSizing.md#left) - [Object Name](properties_Object.md#object-name) - [Right](properties_CoordinatesAndSizing.md#right) - [Rows](properties_Crop.md#rows) - [Standard action](properties_Action.md#standard-action) - [Top](properties_CoordinatesAndSizing.md#top) - [Type](properties_Object.md#type) - [Variable or Expression](properties_Object.md#variable-or-expression) - [Vertical Sizing](properties_ResizingOptions.md#vertical-sizing) - [Width](properties_CoordinatesAndSizing.md#width) - [Visibility](properties_Display.md#visibility) \ No newline at end of file From 6416f662846447f93c933e1b55e99fe4642ae638 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:21:50 +0100 Subject: [PATCH 147/260] New translations button_overview.md (French) --- .../fr/FormObjects/button_overview.md | 172 +++++++++--------- 1 file changed, 86 insertions(+), 86 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/button_overview.md b/website/translated_docs/fr/FormObjects/button_overview.md index 606d23388ef9bd..4f9eb63dcb9cf1 100644 --- a/website/translated_docs/fr/FormObjects/button_overview.md +++ b/website/translated_docs/fr/FormObjects/button_overview.md @@ -1,78 +1,78 @@ --- id: buttonOverview -title: Bouton +title: Button --- -Un bouton est un objet actif auquel une action peut être assignée (*ex :* une tâche de base de données ou une fonction d'interface) pour qu'elle soit réalisée lorsque l'utilisateur clique dessus. +A button is an active object that can be assigned an action (*e.g.*, a database task or an interface function) to perform when a user clicks on it. ![](assets/en/FormObjects/button_regular.png) -Les boutons peuvent répondre à divers besoins qui dépendent du style et de l'action qui leur est affecté(e). Par exemple, les boutons peuvent amener l'utilisateur à faire des choix ou à compléter un questionnaire ou formulaire. En fonction de leurs propriétés, les bouton peuvent être destinés à être cliqués une fois seulement et à exécuter une commande, ou à être cliqués plusieurs fois pour obtenir le résultat escompté. +Buttons can fulfill a variety of roles, depending on their style and the action assigned to it. For example, buttons could lead a user through a questionnaire or form to complete, or to make choices. Depending on its settings, a button may be designed to be clicked only once and execute a command, while others may require the user to click more than once to receive the desired result. -## Gestion des boutons +## Handling buttons -Les actions assignées aux boutons peuvent provenir d'[actons standard](properties_Action.md#standard-action) ou de méthodes objet personnalisées. Les actions typiques peuvent consister à laisser l'utilisateur accepter, annuler ou supprimer des enregistrements, à copier ou coller des données, à passer d'une page à l'autre dans un formulaire de plusieurs pages, à ouvrir, supprimer ou ajouter des enregistrements dans un sous-formulaire, à gérer les attributs de police dans les zones de texte , etc. +The actions assigned to buttons can originate from predefined [standard actions](properties_Action.md#standard-action) or from custom object methods. Examples of typical actions include letting the user accept, cancel, or delete records, copy or paste data, move from page to page in a multi-page form, open, delete, or add records in a subform, handle font attributes in text areas, etc. -Les boutons avec des actions standard sont grisés le cas échéant lors de l'exécution du formulaire. Par exemple, si le premier enregistrement d'une table est affiché, un bouton avec l'action standard `firstRecord` apparaît grisé. +Buttons with standard actions are dimmed when appropriate during form execution. For example, if the first record of a table is displayed, a button with the `firstRecord` standard action would appear dimmed. -Si vous souhaitez qu'un bouton exécute une action qui n'est pas disponible en tant qu'action standard, laissez le champ d'action standard vide et écrivez une méthode objet pour spécifier l'action du bouton. Pour plus d'informations sur les méthodes d'objet et comment les créer et les associer, voir [Utilisation de méthodes objet](https://doc.4d.com/4Dv17R5/4D/17-R5/Using-object-methods.300-4163733.en.html). En règle générale, vous activez l'événement `Sur clic` et la méthode s'exécute uniquement lorsque vous cliquez sur le bouton. Vous pouvez associer une méthode à n'importe quel bouton. +If you want a button to perform an action that's not available as a standard action, leave the standard action field empty and write an object method to specify the button’s action. For more information about object methods and how to create and associate them, see [Using object methods](https://doc.4d.com/4Dv17R5/4D/17-R5/Using-object-methods.300-4163733.en.html). Normally, you would activate the `On Clicked` event and the method would run only when the button is clicked. You can associate a method with any button. -La [variable](properties_Object.md#variable-or-expression) associée à un bouton est automatiquement définie sur **0** lorsque le formulaire est exécuté pour la première fois en mode Développement ou Application. Lorsque l'utilisateur clique sur un bouton, sa variable est définie sur **1**. +The [variable](properties_Object.md#variable-or-expression) associated with a button is automatically set to **0** when the form is executed for the first time in Design or Application mode. When the user clicks a button, its variable is set to **1**. -> Il est possible d'affecter à la fois une action standard et une méthode à un bouton. Dans ce cas, si le bouton n'est pas désactivé par l'action standard, la méthode est exécutée avant l'action standard. +> A button can be assigned both a standard action and a method. In this case, if the button is not disabled by the standard action, the method is executed before the standard action. -## Styles de bouton +## Button Styles -Les styles de bouton contrôlent l'apparence générale d'un bouton ainsi que ses propriétés. Il est possible d'appliquer différents styles prédéfinis aux boutons ou de leur associer des pop-up menus. Plusieurs variantes peuvent être obtenues en combinant ces propriétés/comportements. +Button styles control a button's general appearance as well as its available properties. It is possible to apply different predefined styles to buttons or to associate pop-up menus with them. A great number of variations can be obtained by combining these properties / behaviors. -À l'exception des [propriétés disponibles](#supported-properties), de nombreux objets bouton sont *structurellement* identiques. La différence réside dans le traitement de leurs variables associées. +With the exception of the [available properties](#supported-properties), many button objects are *structurally* identical. The difference is in the processing of their associated variables. -4D propose des boutons dans les styles prédéfinis suivants : +4D provides buttons in the following predefined styles: -### Classique +### Regular -Le style de bouton Classique est un bouton système standard (c'est-à-dire un rectangle avec un libellé descriptif) qui exécute le code lorsqu'un utilisateur clique dessus. +The Regular button style is a standard system button (*i.e.*, a rectangle with a descriptive label) which executes code when a user clicks on it. ![](assets/en/FormObjects/button_regular.png) -Par défaut, le style Classique a un fond gris clair avec un libellé au centre. Lorsque le curseur survole le style de bouton Classique, la bordure et la l'arrière-plan changent de couleur. En plus de lancer l'exécution de code, le style de bouton Classique imite un bouton mécanique en changeant rapidement la couleur d'arrière-plan lorsque vous cliquez dessus. +By default, the Regular style has a light gray background with a label in the center. When the cursor hovers over the Regular button style, the border and background color change to demonstrate that it has the focus. In addition to initiating code execution, the Regular button style mimics a mechanical button by quickly changing background color when being clicked. -#### Exemple JSON : +#### JSON Example: ```4d "myButton": { - "type": "button", //définit le type d'objet - "style":"regular", //définit le style du bouton - "defaultButton":"true" //définit le bouton comme choix par défaut - "text": "OK", //texte à faire apparaître dans le bouton - "action": "Annuler", //Action à exécuter - "left": 60, //Position gauche dans le formulaire - "top": 160, //Position supérieure dans le formulaire - "width": 100, //largeur du bouton - "height": 20 //hauteur du bouton + "type": "button", //define the type of object + "style":"regular", //define the style of the button + "defaultButton":"true" //define button as the default choice + "text": "OK", //text to appear on the button + "action": "Cancel", //action to be be performed + "left": 60, //left position on the form + "top": 160, //top position on the form + "width": 100, //width of the button + "height": 20 //height of the button } ``` -Seuls les styles Classique et A plat proposent la propriété [Bouton par défaut](properties_Appearance.md#default-button). +Only the Regular and Flat styles offer the [Default Button](properties_Appearance.md#default-button) property. -### A plat +### Flat -Le style de bouton A plat est un bouton système standard (c'est-à-dire un rectangle avec un libellé descriptif) qui exécute le code lorsqu'un utilisateur clique dessus. +The Flat button style is a standard system button (*i.e.*, a rectangle with a descriptive label) which executes code when a user clicks on it. ![](assets/en/FormObjects/button_flat.png) -Par défaut, le style A plat a un arrière-plan avec un libellé au centre, des bords arrondis et un design minimaliste. Le style graphique du bouton A plat est particulièrement utile pour les formulaires à imprimer. +By default, the Flat style has a white background with a label in the center, rounded corners, and a minimalist appearance. The Flat button style's graphic nature is particularly useful for forms that will be printed. -#### Exemple JSON : +#### JSON Example: ```4d @@ -81,7 +81,7 @@ Par défaut, le style A plat a un arrière-plan avec un libellé au centre, des "style":"flat", "defaultButton":"true" "text": "OK", - "action": "Annuler", + "action": "Cancel", "left": 60, "top": 160, "width": 100, @@ -90,21 +90,21 @@ Par défaut, le style A plat a un arrière-plan avec un libellé au centre, des ``` -Seuls les styles Classique et A plat proposent la propriété [Bouton par défaut](properties_Appearance.md#default-button). +Only the Regular and Flat styles offer the [Default Button](properties_Appearance.md#default-button) property. -### Barre d’outils +### Toolbar -Le style du bouton Barre d'outils est initialement destiné à être intégré dans une barre d'outils. Il inclut l'option à ajouter à un pop-up menu (indiqué par un triangle inversé) généralement utilisé pour afficher des choix de sélection supplémentaires pour l'utilisateur. +The Toolbar button style is primarily intended for integration in a toolbar. It includes the option to add a pop-up menu (indicated by an inverted triangle) which is generally used to display additional choices for the user to select. -Par défaut, le style bouton Barre d'outils a un fond transparent avec un libellé au centre. En fonction du système d'exploitation, le design du bouton peut changer lorsque la souris le survole : +By default, the Toolbar style has a transparent background with a label in the center. The appearance of the button can be different when the cursor hovers over it depending on the OS: - - *Sous Windows* - le contour du bouton apparaît lorsqu’il dispose de la propriété “Avec pop-up menu”, et un triangle est affiché à droite et au centre du bouton. + - *Windows* - the button is highlighted when it uses the “With Pop-up Menu” property, a triangle is displayed to the right and in the center of the button. ![](assets/en/FormObjects/button_toolbar.png) - - *Sous macOS* - le contour du bouton n’apparaît jamais. Lorsqu’il dispose de la propriété “Avec pop up menu”, un triangle est affiché à droite et en bas du bouton. + - *macOS* - the highlight of the button never appears. When it uses the “With Pop-up Menu” property, a triangle is displayed to the right and at the bottom of the button. -#### Exemple JSON : +#### JSON Example: ```4d "myButton": { @@ -112,7 +112,7 @@ Par défaut, le style bouton Barre d'outils a un fond transparent avec un libell "style":"toolbar", "text": "OK", "popupPlacement":"separated" - "action": "Annuler", + "action": "Cancel", "left": 60, "top": 160, "width": 100, @@ -124,17 +124,17 @@ Par défaut, le style bouton Barre d'outils a un fond transparent avec un libell ### Bevel -Le bouton barre d'outils combine l'apparence du style [Classique](#regular) (c'est-à-dire un rectangle avec un libellé descriptif) et la propriété de pop-up menu du style [Barre d'outils](#toolbar). +The Bevel button style combines the appearance of the [Regular](#regular) (*i.e.*, a rectangle with a descriptive label) style with the [Toolbar](#toolbar) style's pop-up menu property option. -Par défaut, le style Bevel a un fond gris clair avec un libellé au centre. En fonction du système d'exploitation, le design du bouton peut changer lorsque la souris le survole : +By default, the Bevel style has a light gray background with a label in the center. The appearance of the button can be different when the cursor hovers over it depending on the OS: - - *Sous Windows* - le contour du bouton apparaît. Lorsqu’il dispose de la propriété “Avec pop up menu”, un triangle est affiché à droite et au centre du bouton. + - *Windows* - the button is highlighted. When it uses the “With Pop-up Menu” property, a triangle is displayed to the right and in the center of the button. ![](assets/en/FormObjects/button_bevel.png) - - *Sous macOS* - le contour du bouton n’apparaît jamais. Lorsqu’il dispose de la propriété “Avec pop up menu”, un triangle est affiché à droite et en bas du bouton. + - *macOS* - the highlight of the button never appears. When it uses the “With Pop-up Menu” property, a triangle is displayed to the right and at the bottom of the button. -#### Exemple JSON : +#### JSON Example: ```4d "myButton": { @@ -142,7 +142,7 @@ Par défaut, le style Bevel a un fond gris clair avec un libellé au centre. En "style":"bevel", "text": "OK", "popupPlacement":"linked" - "action": "Annuler", + "action": "Cancel", "left": 60, "top": 160, "width": 100, @@ -152,19 +152,19 @@ Par défaut, le style Bevel a un fond gris clair avec un libellé au centre. En -### Bevel arrondi +### Rounded Bevel -Le style du bouton Bevel arrondi est presque identique au style [Bevel](#bevel), à l'exception des coins du bouton qui peuvent, selon le système d'exploitation, être arrondis. Comme pour le style Bevel, le style Bevel arrondi combine l'apparence du style [Classique](#regular) et du style [Barre outils](#toolbar). +The Rounded Bevel button style is nearly identical to the [Bevel](#bevel) style except, depending on the OS, the corners of the button may be rounded. As with the Bevel style, the Rounded Bevel style combines the appearance of the [Regular](#regular) style with the [Toolbar](#toolbar) style's pop-up menu property option. -Par défaut, le style Bevel arrondi a un fond gris clair avec un libellé au centre. En fonction du système d'exploitation, le design du bouton peut changer lorsque la souris le survole : +By default, the Rounded Bevel style has a light gray background with a label in the center. The appearance of the button can be different when the cursor hovers over it depending on the OS: - - *Sous Windows* - le bouton est identique au style Bevel. Lorsqu’il dispose de la propriété “Avec pop up menu”, un triangle est affiché à droite et au centre du bouton. + - *Windows* - the button is identical to the Bevel style. When it uses the “With Pop-up Menu” property, a triangle is displayed to the right and in the center of the button. ![](assets/en/FormObjects/button_roundedbevel.png) - - *Sous macOS* - les coins du bouton sont arrondis. Lorsqu’il dispose de la propriété “Avec pop up menu”, un triangle est affiché à droite et en bas du bouton. + - *macOS* - the corners of the button are rounded. When it uses the “With Pop-up Menu” property, a triangle is displayed to the right and at the bottom of the button. -#### Exemple JSON : +#### JSON Example: ```4d "myButton": { @@ -184,17 +184,17 @@ Par défaut, le style Bevel arrondi a un fond gris clair avec un libellé au cen ### OS X Gradient -The OS X Gradient button style is nearly identical to the [Bevel](#bevel) style. Comme pour le style Bevel, le style OS X Gradient combine l'apparence du style [Classique](#regular) et du style [Barre outils](#toolbar). +The OS X Gradient button style is nearly identical to the [Bevel](#bevel) style. As with the Bevel style, the OS X Gradient style combines the appearance of the [Regular](#regular) style with the [Toolbar](#toolbar) style's pop-up menu property option. -Par défaut, le style OS Gradient a un fond gris clair avec un libellé au centre. En fonction du système d'exploitation, le design du bouton peut changer lorsque la souris le survole : +By default, the OS X Gradient style has a light gray background with a label in the center. The appearance of the button can be different when the cursor hovers over it depending on the OS: - - *Sous Windows* - le bouton est identique au style Bevel. When it uses the “With Pop-up Menu” property, a triangle is displayed on the right side of the button. + - *Windows* - the button is identical to the Bevel style. When it uses the “With Pop-up Menu” property, a triangle is displayed on the right side of the button. ![](assets/en/FormObjects/button_osxgradient.png) - - *Sous macOs* - le bouton s'affiche comme un bouton à deux tons. Lorsqu’il dispose de la propriété “Avec pop up menu”, un triangle est affiché à droite et en bas du bouton. + - *macOS* - the button is displayed as a two-tone system button. When it uses the “With Pop-up Menu” property, a triangle is displayed to the right and at the bottom of the button. -#### Exemple JSON : +#### JSON Example: ```4d "myButton": { @@ -211,19 +211,19 @@ Par défaut, le style OS Gradient a un fond gris clair avec un libellé au centr ``` -### OS X Texture +### OS X Textured -The OS X Textured button style is nearly identical to the [Bevel](#bevel) style but with a smaller size (maximum size is the size of a standard macOS system button). Comme pour le style Bevel, le style OS X Textured combine l'apparence du style [Classique](#regular) et du style [Barre outils](#toolbar). +The OS X Textured button style is nearly identical to the [Bevel](#bevel) style but with a smaller size (maximum size is the size of a standard macOS system button). As with the Bevel style, the OS X Textured style combines the appearance of the [Regular](#regular) style with the [Toolbar](#toolbar) style's pop-up menu property option. -Par défaut, le style OS X Textured apparaît comme : +By default, the OS X Textured style appears as: - - *Sous Windows* - un bouton système standard avec un fond gris clair et un libellé au centre. Il a la particularité d'être transparent dans Vista. + - *Windows* - a standard system button with a light gray background with a label in the center. It has the special feature of being transparent in Vista. ![](assets/en/FormObjects/button_osxtextured.png) - - *Sous macOS* - un bouton système standard affichant un changement de couleur du gris clair au gris foncé. Sa hauteur est prédéfinie : il n'est pas possible de l'agrandir ou de la réduire. + - *macOS* - a standard system button displaying a color change from light to dark gray. Its height is predefined: it is not possible to enlarge or reduce it. -#### Exemple JSON : +#### JSON Example: ```4d "myButton": { @@ -243,17 +243,17 @@ Par défaut, le style OS X Textured apparaît comme : ### Office XP -Le style de bouton Office XP combine l'apparence du style [Classique](#regular) et du style [Barre outils](#toolbar). +The Office XP button style combines the appearance of the [Regular](#regular) style with the [Toolbar](#toolbar) style's transparency and pop-up menu property option. -Les couleurs (surbrillance et arrière-plan) d'un bouton au style Office XP sont basées sur les couleurs du système. En fonction du système d'exploitation, le design du bouton peut changer lorsque la souris le survole : +The colors (highlight and background) of a button with the Office XP style are based on the system colors. The appearance of the button can be different when the cursor hovers over it depending on the OS: - - *Sous Windows* - son arrière-plan n'apparaît que lorsque la souris le survole. + - *Windows* - its background only appears when the mouse rolls over it. ![](assets/en/FormObjects/button_officexp.png) - - *Sous macOS* - son arrière-plan est toujours affiché. + - *macOS* - its background is always displayed. -#### Exemple JSON : +#### JSON Example: ```4d "myButton": { @@ -271,14 +271,14 @@ Les couleurs (surbrillance et arrière-plan) d'un bouton au style Office XP sont -### Aide +### Help -Le style du bouton Aide peut être utilisé pour afficher un bouton d'aide système standard. Par défaut, le style Aide s'affiche sous la forme d'un point d'interrogation dans un cercle. +The Help button style can be used to display a standard system help button. By default, the Help style is displayed as a question mark within a circle. ![](assets/en/FormObjects/button_help.png) -#### Exemple JSON : +#### JSON Example: ```4d "myButton": { @@ -293,19 +293,19 @@ Le style du bouton Aide peut être utilisé pour afficher un bouton d'aide syst } ``` -> Le style Aide ne prend pas en charge les propriétés basiques du [nombre d'états](properties_TextAndPicture.md#number-of-states), du [chemin d'accès image](properties_TextAndPicture.md#picture-pathname) et de la [position Titre/Image](properties_TextAndPicture.md#title-picture-position). +> The Help style does not support [Number of States](properties_TextAndPicture.md#number-of-states), [Picture pathname](properties_TextAndPicture.md#picture-pathname), and [Title/Picture Position](properties_TextAndPicture.md#title-picture-position) basic properties. -### Rond +### Circle -Le style de bouton Rond apparaît comme un bouton système circulaire. Ce style de bouton est conçu pour macOS. +The Circle button style appears as a round system button. This button style is designed for macOS. ![](assets/en/FormObjects/button_circleM.png) -Sous Windows, il est identique au style «Aucun» (le cercle en arrière-plan n'est pas pris en compte). +On Windows, it is identical to the “None” style (the circle in the background is not taken into account). -#### Exemple JSON : +#### JSON Example: ``` "myButton": { @@ -322,14 +322,14 @@ Sous Windows, il est identique au style «Aucun» (le cercle en arrière-plan n' -### Personnalisé +### Custom -Le style de bouton Personnalisé accepte une image d'arrière-plan personnalisée et permet de gérer des paramètres supplémentaires tels que la marge et le décalage d'icône. +The Custom button style accepts a personalized background picture and allows managing additional parameters such as icon and margin offset. ![](assets/en/FormObjects/button_custom.png) -#### Exemple JSON : +#### JSON Example: ```code "myButton": { @@ -349,19 +349,19 @@ Le style de bouton Personnalisé accepte une image d'arrière-plan personnalisé -## Propriétés prises en charge +## Supported Properties -Tous les boutons partagent une même série de propriétés de base : +All buttons share the same set of basic properties: -[Gras](properties_Text.md#bold) - [Style de la bordure](properties_BackgroundAndBorder.md#border-line-style) - [Bas](properties_CoordinatesAndSizing.md#bottom) - [Style de bouton](properties_TextAndPicture.md#button-style) - [CSS Class](properties_Object.md#css-class) - [Déposable](properties_Action.md#droppable) - [Focusable](properties_Entry.md#focusable) - [Police](properties_Text.md#font) - [Couleur de la police](properties_Text.md#font-color) - [Taille](properties_Text.md#font-size) - [Haut](properties_CoordinatesAndSizing.md#height) - [Message d'aide](properties_Help.md#help-tip) - [Dim. horizontal](properties_ResizingOptions.md#horizontal-sizing) - [Italique](properties_Text.md#italic) - [Gauche](properties_CoordinatesAndSizing.md#left) - [Non représenté](properties_Display.md#not-rendered) - [Nombre d'états](properties_TextAndPicture.md#number-of-states)(1) - [Object Name](properties_Object.md#object-name) - [Picture pathname](properties_TextAndPicture.md#picture-pathname)(1) - [Right](properties_CoordinatesAndSizing.md#right) - [Shortcut](properties_Entry.md#shortcut) - [Standard action](properties_Action.md#standard-action) - [Title](properties_Object.md#title) - [Title/Picture Position](properties_TextAndPicture.md#title-picture-position)(1) - [Top](properties_CoordinatesAndSizing.md#top) - [Type](properties_Object.md#type) - [Underline](properties_Text.md#underline) - [Variable or Expression](properties_Object.md#variable-or-expression) - [Vertical Sizing](properties_ResizingOptions.md#vertical-sizing) - [Visibility](properties_Display.md#visibility) - [Width](properties_CoordinatesAndSizing.md#width) +[Bold](properties_Text.md#bold) - [Border Line Style](properties_BackgroundAndBorder.md#border-line-style) - [Bottom](properties_CoordinatesAndSizing.md#bottom) - [Button Style](properties_TextAndPicture.md#button-style) - [Class](properties_Object.md#css-class) - [Droppable](properties_Action.md#droppable) - [Focusable](properties_Entry.md#focusable) - [Font](properties_Text.md#font) - [Font Color](properties_Text.md#font-color) - [Font Size](properties_Text.md#font-size) - [Height](properties_CoordinatesAndSizing.md#height) - [Help Tip](properties_Help.md#help-tip) - [Horizontal Sizing](properties_ResizingOptions.md#horizontal-sizing) - [Italic](properties_Text.md#italic) - [Left](properties_CoordinatesAndSizing.md#left) - [Not rendered](properties_Display.md#not-rendered) - [Number of States](properties_TextAndPicture.md#number-of-states)(1) - [Object Name](properties_Object.md#object-name) - [Picture pathname](properties_TextAndPicture.md#picture-pathname)(1) - [Right](properties_CoordinatesAndSizing.md#right) - [Shortcut](properties_Entry.md#shortcut) - [Standard action](properties_Action.md#standard-action) - [Title](properties_Object.md#title) - [Title/Picture Position](properties_TextAndPicture.md#title-picture-position)(1) - [Top](properties_CoordinatesAndSizing.md#top) - [Type](properties_Object.md#type) - [Underline](properties_Text.md#underline) - [Variable or Expression](properties_Object.md#variable-or-expression) - [Vertical Sizing](properties_ResizingOptions.md#vertical-sizing) - [Visibility](properties_Display.md#visibility) - [Width](properties_CoordinatesAndSizing.md#width) -> (1) Non pris en charge par le style [Aide](#help). +> (1) Not supported by the [Help](#help) style. -Des propriétés spécifiques supplémentaires sont disponibles, en fonction du [style de bouton](#button-styles) : +Additional specific properties are available, depending on the [button style](#button-styles): -- [Chemin d'accès arrière-plan](properties_TextAndPicture.md#backgroundPathname) - [Marge horizontale](properties_TextAndPicture.md#horizontalMargin) - [Décalage icône](properties_TextAndPicture.md#icon-offset) - [Marge verticale](properties_TextAndPicture.md#verticalMargin) (Personnalisé) -- [Bouton par défaut](properties_Appearance.md#default-button) (A plat, Classique) +- [Background pathname](properties_TextAndPicture.md#backgroundPathname) - [Horizontal Margin](properties_TextAndPicture.md#horizontalMargin) - [Icon Offset](properties_TextAndPicture.md#icon-offset) - [Vertical Margin](properties_TextAndPicture.md#verticalMargin) (Custom) +- [Default Button](properties_Appearance.md#default-button) (Flat, Regular) - [With pop-up menu](properties_TextAndPicture.md#with-pop-up-menu) (Toolbar, Bevel, Rounded Bevel, OS X Gradient, OS X Textured, Office XP, Circle, Custom) From 8cdfc42f0f9ca242038def238e3a28f9d788d4b0 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:21:52 +0100 Subject: [PATCH 148/260] New translations checkbox_overview.md (French) --- .../fr/FormObjects/checkbox_overview.md | 192 +++++++++--------- 1 file changed, 96 insertions(+), 96 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/checkbox_overview.md b/website/translated_docs/fr/FormObjects/checkbox_overview.md index c0fd54345d189b..7a97a8e0d69f7c 100644 --- a/website/translated_docs/fr/FormObjects/checkbox_overview.md +++ b/website/translated_docs/fr/FormObjects/checkbox_overview.md @@ -1,97 +1,97 @@ --- id: checkboxOverview -title: Case à cocher +title: Check Box --- ## Aperçu -Une case à cocher est un type de bouton utilisée pour saisir ou afficher une donnée binaire (vrai-faux). Elle peut être soit sélectionnée soit désélectionnée, mais un troisième état peut également être défini (voir ci-dessous). +A check box is a type of button used to enter or display binary (true-false) data. Basically, it is either checked or unchecked, but a third state can be defined (see below). ![](assets/en/FormObjects/checkbox.png) -L’effet d’une case à cocher est contrôlé par une méthode. Comme tous les boutons, une case à cocher est initialisée à la valeur zéro lorsque le formulaire est ouvert pour la première fois. La méthode associée à une case à cocher est exécutée lorsqu’elle est cochée. +Check boxes are controlled by methods. Like all buttons, a check box variable is set to 0 when the form is first opened. The method associated with it executes when the check box is selected. -Une case à cocher affiche généralement du texte en face de la case. Ce texte est défini dans la zone [Titre](properties_Object.md#title) du thème “Objets” de la Liste des propriétés. Vous pouvez saisir dans cette zone un libellé sous forme de référence XLIFF (cf. [Annexe B : Architecture XLIFF](https://doc.4d.com/4Dv17R5/4D/17-R5/Appendix-B-XLIFF-architecture.300-4163748.en.html)). +A check box displays text next to a small square. This text is set in the [Title](properties_Object.md#title) property of the check box. You can enter a title in the form of an XLIFF reference in this area (see [Appendix B: XLIFF architecture](https://doc.4d.com/4Dv17R5/4D/17-R5/Appendix-B-XLIFF-architecture.300-4163748.en.html)). -## Utiliser une case à cocher +## Using check boxes -Une case à cocher peut être associée à une [variable ou expression](properties_Object.md#variable-or-expression) de type entier ou booléen. +A check box can be associated to a [variable or expression](properties_Object.md#variable-or-expression) of type integer or boolean. -- **entier :** si la case est cochée, la variable prend la valeur 1. Lorsqu'elle n'est pas cochée, elle porte la valeur 0. Si la case à cocher a un troisième état (voir ci-dessous), elle porte la valeur 2. -- **booléen :** si la case est cochée, la variable prend la valeur `Vrai`. Lorsqu'elle n'est pas cochée, elle prend la valeur `Faux`. +- **integer:** if the box is checked, the variable has the value 1. When not checked, it has the value 0. If check box is in third state (see below), it has the value 2. +- **boolean:** if the box is checked, the variable has the value `True`. When not checked, it has the value `False`. -Une partie ou la totalité des cases à cocher contenues dans un formulaires peut être cochée ou non cochée. Multiple check boxes allow the user to select multiple options. +Any or all check boxes in a form can be checked or unchecked. Multiple check boxes allow the user to select multiple options. -### Cases à cocher à trois états +### Three-States check box -Check box objects with [Regular](checkbox_overview.md#regular) and [Flat](checkbox_overview.md#flat) [button style](propertiesTextAndPicture.md#button-style) accept a third state. Ce troisième état représente un statut intermédiaire, généralement utilisé pour l’affichage. Il permet par exemple d’indiquer qu’une propriété est présente parmi une sélection d’objets mais pas dans chaque objet de la sélection. +Check box objects with [Regular](checkbox_overview.md#regular) and [Flat](checkbox_overview.md#flat) [button style](propertiesTextAndPicture.md#button-style) accept a third state. This third state is an intermediate status, which is generally used for display purposes. For example, it allows indicating that a property is present in a selection of objects, but not in each object of the selection. ![](assets/en/FormObjects/checkbox_3states.png) -Pour qu’une case à cocher prenne en charge ce troisième état, vous devez lui attribuer la propriété [Trois états](properties_Display.md#three-states) dans la Liste des propriétés, thème “Affichage” . +To enable this third state, you must select the [Three-States](properties_Display.md#three-states) property. -Cette propriété n’est disponible que pour les cases à cocher classiques et à plat associées à des [variables ou expressions](properties_Object.md#variable-or-expression) numériques — les cases à cocher de représentation des expressions booléennes sont exclues de ce principe (une expression booléenne ne pouvant pas se trouver dans un état intermédiaire). +This property is only available for regular and flat check boxes associated with numeric [variables or expressions](properties_Object.md#variable-or-expression) — check boxes for Boolean expressions cannot use the [Three-States](properties_Display.md#three-states) property (a Boolean expression cannot be in an intermediary state). -La variable associée à la case à cocher retourne la valeur 2 lorsque celle-ci se trouve dans le troisième état. -> En saisie, les cases à cocher à trois états affichent séquentiellement chaque état, dans l’ordre suivant : non coché / coché / intermédiaire / non coché, etc. L’état intermédiaire étant généralement inutile en saisie ; il vous suffit, dans le code, de “forcer” la valeur de la variable à 0 lorsqu’elle prend la valeur 2 afin de passer directement de l’état coché à l’état non coché. +The variable associated with the check box returns the value 2 when the check box is in the third state. +> In entry mode, the Three-States check boxes display each state sequentially, in the following order: unchecked / checked / intermediary / unchecked, etc. The intermediary state is generally not very useful in entry mode; in the code, simply force the value of the variable to 0 when it takes the value of 2 in order to pass directly from the checked state to the unchecked state. -## Utiliser une action standard +## Using a standard action -Vous pouvez affecter une [action standard](properties_Action.md#standard-action) à une case à cocher pour gérer les attributs des zones de texte. Par exemple, si vous sélectionnez l'action standard `fontBold`, à l'exécution la case à cocher permettra de gérer l'attribut "gras" du texte sélectionné dans la zone de texte courante. +You can assign a [standard action](properties_Action.md#standard-action) to a check box to handle attributes of text areas. For example, if you assign the `fontBold` standard action, at runtime the check box will manage the "bold" attribute of the selected text in the current area. -Seules les actions qui peuvent représenter un statut vrai/faux (actions "à coche") sont prises en charge par cet objet : +Only actions that can represent a true/false status ("checkable" actions) are supported by this object: -| Actions prises en charge | Conditions d'utilisation (le cas échéant) | -| ----------------------------------- | ----------------------------------------- | -| avoidPageBreakInsideEnabled | Zones 4D Write Pro uniquement | -| fontItalic | | -| fontBold | | -| fontLinethrough | | -| fontSubscript | Zones 4D Write Pro uniquement | -| fontSuperscript | Zones 4D Write Pro uniquement | -| fontUnderline | | -| font/showDialog | Mac uniquement | -| htmlWYSIWIGEnabled | Zones 4D Write Pro uniquement | -| section/differentFirstPage | Zones 4D Write Pro uniquement | -| section/differentLeftRightPages | Zones 4D Write Pro uniquement | -| spell/autoCorrectionEnabled | | -| spell/autoDashSubstitutionsEnabled | Mac uniquement | -| spell/autoLanguageEnabled | Mac uniquement | -| spell/autoQuoteSubstitutionsEnabled | Mac uniquement | -| spell/autoSubstitutionsEnabled | | -| spell/enabled | | -| spell/grammarEnabled | Mac uniquement | -| spell/showDialog | Mac uniquement | -| spell/visibleSubstitutions | | -| visibleBackground | Zones 4D Write Pro uniquement | -| visibleFooters | Zones 4D Write Pro uniquement | -| visibleHeaders | Zones 4D Write Pro uniquement | -| visibleHiddenChars | Zones 4D Write Pro uniquement | -| visibleHorizontalRuler | Zones 4D Write Pro uniquement | -| visiblePageFrames | Zones 4D Write Pro uniquement | -| visibleReferences | | -| widowAndOrphanControlEnabled | Zones 4D Write Pro uniquement | +| Supported actions | Usage condition (if any) | +| ----------------------------------- | ----------------------------- | +| avoidPageBreakInsideEnabled | Zones 4D Write Pro uniquement | +| fontItalic | | +| fontBold | | +| fontLinethrough | | +| fontSubscript | Zones 4D Write Pro uniquement | +| fontSuperscript | Zones 4D Write Pro uniquement | +| fontUnderline | | +| font/showDialog | Mac only | +| htmlWYSIWIGEnabled | Zones 4D Write Pro uniquement | +| section/differentFirstPage | Zones 4D Write Pro uniquement | +| section/differentLeftRightPages | Zones 4D Write Pro uniquement | +| spell/autoCorrectionEnabled | | +| spell/autoDashSubstitutionsEnabled | Mac only | +| spell/autoLanguageEnabled | Mac only | +| spell/autoQuoteSubstitutionsEnabled | Mac only | +| spell/autoSubstitutionsEnabled | | +| spell/enabled | | +| spell/grammarEnabled | Mac only | +| spell/showDialog | Mac only | +| spell/visibleSubstitutions | | +| visibleBackground | Zones 4D Write Pro uniquement | +| visibleFooters | Zones 4D Write Pro uniquement | +| visibleHeaders | Zones 4D Write Pro uniquement | +| visibleHiddenChars | Zones 4D Write Pro uniquement | +| visibleHorizontalRuler | Zones 4D Write Pro uniquement | +| visiblePageFrames | Zones 4D Write Pro uniquement | +| visibleReferences | | +| widowAndOrphanControlEnabled | Zones 4D Write Pro uniquement | -Pour plus d'informations sur ces actions, veuillez vous reporter à la section [Actions standard](https://doc.4d.com/4Dv17R5/4D/17-R5/Standard-actions.300-4163633.en.html). +For detailed information on these actions, please refer to the [Standard actions](https://doc.4d.com/4Dv17R5/4D/17-R5/Standard-actions.300-4163633.en.html) section. -## Styles des boutons "Case à cocher" +## Check box button styles -Check boxes use [button styles](propertiesTextAndPicture.md#button-style) to control a check box's general appearance as well as its available properties. Il est possible d'appliquer différents styles prédéfinis aux cases à cocher. Plusieurs variantes peuvent être obtenues en combinant ces propriétés/comportements. +Check boxes use [button styles](propertiesTextAndPicture.md#button-style) to control a check box's general appearance as well as its available properties. It is possible to apply different predefined styles to check boxes. A great number of variations can be obtained by combining these properties / behaviors. -À l'exception des [propriétés disponibles](#supported-properties), de nombreux objets case à cocher sont *structurellement* identiques. La différence réside dans le traitement de leurs variables associées. +With the exception of the [available properties](#supported-properties), many check box objects are *structurally* identical. The difference is in the processing of their associated variables. 4D provides check boxes in the following predefined button styles: -### Classique +### Regular The Regular check box button style is a standard system check box (*i.e.*, a rectangle with a descriptive title): ![](assets/en/FormObjects/checkbox_regular.png) -#### Exemple JSON : +#### JSON Example: ``` "myCheckBox": { @@ -109,13 +109,13 @@ The Regular check box button style is a standard system check box (*i.e.*, a rec -### A plat +### Flat -The Flat check box button style is a minimalist appearance. Le graphisme du style A plat est particulièrement utile pour les formulaires à imprimer. +The Flat check box button style is a minimalist appearance. The Flat style's graphic nature is particularly useful for forms that will be printed. ![](assets/en/FormObjects/checkbox_flat.png) -#### Exemple JSON : +#### JSON Example: ``` "myCheckBox": { @@ -136,14 +136,14 @@ The Flat check box button style is a minimalist appearance. Le graphisme du styl The Toolbar Button check box button style is primarily intended for integration in a toolbar. -The Toolbar Button check box button style has a transparent background with a title. Il est généralement associé à une [image à 4 états](properties_TextAndPicture.md#number-of-states). +The Toolbar Button check box button style has a transparent background with a title. It is usually associated with a [4-state picture](properties_TextAndPicture.md#number-of-states). -Exemples avec les états coché / non coché / surligné : +Example with states unchecked / checked / highlighted: ![](assets/en/FormObjects/checkbox_toolbar.png) -#### Exemple JSON : +#### JSON Example: ``` "myCheckBox": { @@ -165,14 +165,14 @@ Exemples avec les états coché / non coché / surligné : The Bevel check box button style combines the appearance of the [Regular](#regular) button style (*i.e.*, a rectangle with a descriptive title) with the [Toolbar Button](#toolbar-button) button style's behavior. -The Bevel button style has a light gray background with a title. Il est généralement associé à une [image à 4 états](properties_TextAndPicture.md#number-of-states). +The Bevel button style has a light gray background with a title. It is usually associated with a [4-state picture](properties_TextAndPicture.md#number-of-states). -Exemples avec les états coché / non coché / surligné : +Example with states unchecked / checked / highlighted: ![](assets/en/FormObjects/checkbox_bevel.png) -#### Exemple JSON : +#### JSON Example: ``` "myCheckBox": { @@ -190,20 +190,20 @@ Exemples avec les états coché / non coché / surligné : -### Bevel arrondi +### Rounded Bevel The Rounded Bevel check box button style is nearly identical to the [Bevel](#bevel) button style except, depending on the OS, the corners of the button may be rounded. As with the Bevel button style, the Rounded Bevel button style combines the appearance of the [Regular](#regular) button style with the [Toolbar Button](#toolbar-button) button style's behavior. -The Rounded Bevel button style has a light gray background with a title. Il est généralement associé à une [image à 4 états](properties_TextAndPicture.md#number-of-states). +The Rounded Bevel button style has a light gray background with a title. It is usually associated with a [4-state picture](properties_TextAndPicture.md#number-of-states). -Exemple sous macOS : +Example on macOS: ![](assets/en/FormObjects/checkbox_roundedbevel_mac.png) > On Windows, the Rounded Bevel button style is identical to the [Bevel](#bevel) button style. -#### Exemple JSON : +#### JSON Example: ```4d "myCheckBox": { @@ -225,14 +225,14 @@ Exemple sous macOS : The OS X Gradient check box button style is nearly identical to the [Bevel](#bevel) button style. As with the Bevel button style, the OS X Gradient button style combines the appearance of the [Regular](#regular) button style with the [Toolbar Button](#toolbar-button) button style's behavior. -The OS X Gradient button style has a light gray background with a title and may be displayed as a two-tone system button on macOS. Il est généralement associé à une [image à 4 états](properties_TextAndPicture.md#number-of-states). +The OS X Gradient button style has a light gray background with a title and may be displayed as a two-tone system button on macOS. It is usually associated with a [4-state picture](properties_TextAndPicture.md#number-of-states). ![](assets/en/FormObjects/checkbox_osxgradient_mac.png) > On Windows, this check box button style is identical to the [Bevel](#bevel) button style. -#### Exemple JSON : +#### JSON Example: ``` "myCheckBox": { @@ -251,21 +251,21 @@ The OS X Gradient button style has a light gray background with a title and may -### OS X Texture +### OS X Textured The OS X Textured button style is similar to the [Bevel](#bevel) button style but with a smaller size (maximum size is the size of a standard macOS system button). As with the Bevel button style, the OS X Textured button style combines the appearance of the [Regular](#regular) button style with the [Toolbar Button](#toolbar-button) button style's behavior. By default, the OS X Textured button style appears as: - - *Sous Windows* - un bouton système standard avec un fond bleu clair et un libellé au centre. + - *Windows* - a standard system button with a light blue background with a title in the center. ![](assets/en/FormObjects/checkbox_osxtextured.png) - - *macOS* - a standard system button. Sa hauteur est prédéfinie : il n'est pas possible de l'agrandir ou de la réduire. + - *macOS* - a standard system button. Its height is predefined: it is not possible to enlarge or reduce it. ![](assets/en/FormObjects/checkbox_osxtextured_mac.png) -#### Exemple JSON : +#### JSON Example: ``` "myCheckBox": { @@ -288,15 +288,15 @@ The Office XP button style combines the appearance of the [Regular](#regular) bu The colors (highlight and background) of a check box with the Office XP button style are based on the system colors. The appearance of the check box can be different when the cursor hovers over it, depending on the OS: - - *Sous Windows* - son arrière-plan n'apparaît que lorsque la souris le survole. Exemples avec les états coché / non coché / surligné : + - *Windows* - its background only appears when the mouse rolls over it. Example with states unchecked / checked / highlighted: ![](assets/en/FormObjects/checkbox_officexp.png) - - *Sous macOS* - son arrière-plan est toujours affiché. Exemples avec les états cochés / non cochés : + - *macOS* - its background is always displayed. Example with states unchecked / checked: ![](assets/en/FormObjects/checkbox_officexp_mac.png) -#### Exemple JSON : +#### JSON Example: ``` "myCheckBox": { @@ -315,7 +315,7 @@ The colors (highlight and background) of a check box with the Office XP button s -### Contracter/Déployer +### Collapse / Expand This check box button style can be used to add a standard collapse/expand icon. These icons are used natively in hierarchical lists. @@ -323,12 +323,12 @@ This check box button style can be used to add a standard collapse/expand icon. ![](assets/en/FormObjects/checkbox_collapse.png) - - *Sous macOS* - il ressemble à un triangle pointant sur vers la droite ou vers le bas. + - *macOS* - it looks like a triangle pointing right or down. ![](assets/en/FormObjects/checkbox_collapse_mac.png) -#### Exemple JSON : +#### JSON Example: ``` "myCheckBox": { @@ -344,11 +344,11 @@ This check box button style can be used to add a standard collapse/expand icon. -### Bouton disclosure +### Disclosure Button -In macOS and Windows, a check box with the "Disclosure" button style appears as a standard disclosure button, usually used to show/hide additional information. Lorsqu'il est utilisé comme bouton radio, le symbole du bouton pointe vers le bas avec la valeur 0 et vers le haut avec la valeur 1. +In macOS and Windows, a check box with the "Disclosure" button style appears as a standard disclosure button, usually used to show/hide additional information. When used as a radio button, the button symbol points downwards with value 0 and upwards with value 1. - - *Sous Windows* + - *Windows* ![](assets/en/FormObjects/checkbox_disclosure.png) @@ -357,7 +357,7 @@ In macOS and Windows, a check box with the "Disclosure" button style appears as ![](assets/en/FormObjects/checkbox_disclosure_mac.png) -#### Exemple JSON : +#### JSON Example: ``` "myCheckBox": { @@ -372,17 +372,17 @@ In macOS and Windows, a check box with the "Disclosure" button style appears as ``` -### Personnalisé +### Custom The Custom button style accepts a personalized background picture and allows managing specific properties: -- [Chemin d'accès arrière-plan](properties_TextAndPicture.md#backgroundPathname) -- [Décalage icône](properties_TextAndPicture.md#icon-offset) -- [Marge horizontale](properties_TextAndPicture.md#horizontalMargin) and [Marge verticale](properties_TextAndPicture.md#verticalMargin) +- [Background pathname](properties_TextAndPicture.md#backgroundPathname) +- [Icon Offset](properties_TextAndPicture.md#icon-offset) +- [Horizontal Margin](properties_TextAndPicture.md#horizontalMargin) and [Vertical Margin](properties_TextAndPicture.md#verticalMargin) -Il est généralement associé à une [image à 4 états](properties_TextAndPicture.md#number-of-states), qui peut être utilisée conjointement avec une image d'arrière-plan [à 4 états](properties_TextAndPicture.md#number-of-states). +It is usually associated with a [4-state picture](properties_TextAndPicture.md#number-of-states), that can be used in conjunction with a [4-state](properties_TextAndPicture.md#number-of-states) [background picture](properties_TextAndPicture.md#backgroundPathname). -#### Exemple JSON : +#### JSON Example: ``` "myCheckbox": { @@ -392,7 +392,7 @@ Il est généralement associé à une [image à 4 états](properties_TextAndPict "icon": "/RESOURCES/smiley.jpg", "iconFrame": 4, "customBackgroundPicture": "/RESOURCES/paper.jpg", - "iconOffset": 5, //décalage icône personnalisé au clic + "iconOffset": 5, //custom icon offset when clicked "left": 60, "top": 160, "width": 100, @@ -405,16 +405,16 @@ Il est généralement associé à une [image à 4 états](properties_TextAndPict -## Propriétés prises en charge +## Supported Properties -Toutes les cases à cocher partagent une même série de propriétés de base : +All check boxes share the same set of basic properties: [Bold](properties_Text.md#bold) - [Bottom](properties_CoordinatesAndSizing.md#bottom) - [Button Style](properties_TextAndPicture.md#button-style) - [Class](properties_Object.md#css-class) - [Focusable](properties_Entry.md#focusable) - [Font](properties_Text.md#font) - [Font Color](properties_Text.md#font-color) - [Font Size](properties_Text.md#font-size) - [Height](properties_CoordinatesAndSizing.md#height) - [Help Tip](properties_Help.md#help-tip) - [Horizontal Sizing](properties_ResizingOptions.md#horizontal-sizing) - [Italic](properties_Text.md#italic) - [Left](properties_CoordinatesAndSizing.md#left) - [Object Name](properties_Object.md#object-name) - [Right](properties_CoordinatesAndSizing.md#right) - [Save value](properties_Object.md#save-value) - [Shortcut](properties_Entry.md#shortcut) - [Standard action](properties_Action.md#standard-action) - [Title](properties_Object.md#title) - [Top](properties_CoordinatesAndSizing.md#top) - [Type](properties_Object.md#type) - [Underline](properties_Text.md#underline) - [Variable or Expression](properties_Object.md#variable-or-expression) - [Vertical Sizing](properties_ResizingOptions.md#vertical-sizing) - [Visibility](properties_Display.md#visibility) - [Width](properties_CoordinatesAndSizing.md#width) -Des propriétés spécifiques supplémentaires sont disponibles, en fonction du [style de bouton](#button-styles) : +Additional specific properties are available, depending on the [button style](#button-styles): -- [Chemin d'accès arrière-plan](properties_TextAndPicture.md#backgroundPathname) - [Marge horizontale](properties_TextAndPicture.md#horizontalMargin) - [Décalage icône](properties_TextAndPicture.md#icon-offset) - [Marge verticale](properties_TextAndPicture.md#verticalMargin) (Personnalisé) -- [Trois états](properties_Display.md#three-states) (A plat, Classique) -- [Nombre d'états](properties_TextAndPicture.md#number-of-states) - [Chemin d'accès image](properties_TextAndPicture.md#picture-pathname) - [Position Titre/Image](properties_TextAndPicture.md#title-picture-position) (Bouton barre outils, Bevel, Bevel arrondi, OS X Gradient, OS X Textured, Office XP, Personnalisé) +- [Background pathname](properties_TextAndPicture.md#backgroundPathname) - [Horizontal Margin](properties_TextAndPicture.md#horizontalMargin) - [Icon Offset](properties_TextAndPicture.md#icon-offset) - [Vertical Margin](properties_TextAndPicture.md#verticalMargin) (Custom) +- [Three-States](properties_Display.md#three-states) (Flat, Regular) +- [Number of States](properties_TextAndPicture.md#number-of-states) - [Picture pathname](properties_TextAndPicture.md#picture-pathname) - [Title/Picture Position](properties_TextAndPicture.md#title-picture-position) (Toolbar button, Bevel, Rounded Bevel, OS X Gradient, OS X Textured, Office XP, Custom) From cd8b46700ae262179c0f8167d2fdacbf13c2cfc4 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:21:54 +0100 Subject: [PATCH 149/260] New translations comboBox_overview.md (French) --- .../fr/FormObjects/comboBox_overview.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/comboBox_overview.md b/website/translated_docs/fr/FormObjects/comboBox_overview.md index a446a05c36ae1e..21ba6f758e74ed 100644 --- a/website/translated_docs/fr/FormObjects/comboBox_overview.md +++ b/website/translated_docs/fr/FormObjects/comboBox_overview.md @@ -5,21 +5,21 @@ title: Combo Box ## Aperçu -Une combo box est semblable à une [liste déroulante](dropdownList_Overview.md#overview), hormis le fait que cet objet accepte la saisie de texte par l’utilisateur et qu'elle dispose d'options supplémentaires. +A combo box is similar to a [drop-down list](dropdownList_Overview.md#overview), except that it accepts text entered from the keyboard and has additional options. ![](assets/en/FormObjects/combo_box.png) -Une combo box peut être initialisée de la même manière qu’une liste déroulante. Lorsque l’utilisateur saisit du texte dans la combo box, il est stocké dans l’élément 0 du tableau. En d’autres termes, vous devez considérer l’objet combo box comme une zone saisissable qui utilise un tableau ou une liste de choix en tant que liste de valeurs par défaut. +You initialize a combo box in exactly the same way as a drop-down list. If the user enters text into the combo box, it fills the 0th element of the array. In other respects, you treat a combo box as an enterable area that uses its array or a choice list as the set of default values. -Utilisez l’événement formulaire `Sur données modifiées` pour gérer les valeurs saisies, comme pour toute zone de saisie. For more information, refer to the description of the [Form event code](https://doc.4d.com/4Dv17R5/4D/17-R5/Form-event.301-4127796.en.html) command in the *4D Language Reference* manual. +Use the `On Data Change` event to manage entries into the enterable area, as you would for any enterable area object. For more information, refer to the description of the [Form event code](https://doc.4d.com/4Dv17R5/4D/17-R5/Form-event.301-4127796.en.html) command in the *4D Language Reference* manual. -## Options des combo box +## Options for combo boxes -Les objets de type Combo box acceptent deux options relatives aux listes de choix qui peuvent leur être associées : +Combo box type objects accept two specific options concerning choice lists associated with them: -- [Insertion automatique](properties_DataSource.md#automatic-insertion) : entraînera l’ajout automatique d'une valeur dans la liste stockée en mémoire lorsque l’utilisateur saisit une valeur leur non présente dans la liste de choix associée à la combo box. -- [Exclusion ](properties_RangeOfValues.md#excluded-list) (liste de valeurs exclues) : permet d'établir une liste dont les valeurs ne peuvent pas être saisies dans la combo box. Si une valeur exclue est saisie, elle n'est pas acceptée et un message d'erreur s'affiche. -> La possibilité d’associer [une liste de valeurs obligatoires](properties_RangeOfValues.md#required-list) n’est pas disponible pour les combo box. Dans le cadre d’une interface, si l’objet doit proposer une liste finie de valeurs obligatoires, il est nécessaire d’utiliser un objet de type [Liste déroulante](dropdownList_Overview.md#overview). +- [Automatic insertion](properties_DataSource.md#automatic-insertion): enables automatically adding a value to a list stored in memory when a user enters a value that is not found in the choice list associated with the combo box. +- [Excluded List](properties_RangeOfValues.md#excluded-list) (list of excluded values): allows setting a list whose values cannot be entered in the combo box. If an excluded value is entered, it is not accepted and an error message is displayed. +> Associating a [list of required values](properties_RangeOfValues.md#required-list) is not available for combo boxes. In an interface, if an object must propose a finite list of required values, then you must use a [Pop-up menu type](dropdownList_Overview.md#overview) object. -## Propriétés prises en charge +## Supported Properties [Alpha Format](properties_Display.md#alpha-format) - [Bold](properties_Text.md#bold) - [Bottom](properties_CoordinatesAndSizing.md#bottom) - [Choice List](properties_DataSource.md#choice-list) - [Class](properties_Object.md#css-class) - [Date Format](properties_Display.md#date-format) - [Font](properties_Text.md#font) - [Font Color](properties_Text.md#font-color) - [Font Size](properties_Text.md#font-size) - [Height](properties_CoordinatesAndSizing.md#height) - [Help Tip](properties_Help.md#help-tip) - [Horizontal Sizing](properties_ResizingOptions.md#horizontal-sizing) - [Italic](properties_Text.md#italic) - [Left](properties_CoordinatesAndSizing.md#left) - [Object Name](properties_Object.md#object-name) - [Right](properties_CoordinatesAndSizing.md#right)) - [Time Format](properties_Display.md#time-format) - [Top](properties_CoordinatesAndSizing.md#top) - [Type](properties_Object.md#type) - [Underline](properties_Text.md#underline) - [Variable or Expression](properties_Object.md#variable-or-expression) - [Vertical Sizing](properties_ResizingOptions.md#vertical-sizing) - [Visibility](properties_Display.md#visibility) - [Width](properties_CoordinatesAndSizing.md#width) \ No newline at end of file From 4be4ff441f95813bcee25b104f0ce1f89f89f48a Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:21:56 +0100 Subject: [PATCH 150/260] New translations dropdownList_Overview.md (French) --- .../fr/FormObjects/dropdownList_Overview.md | 62 +++++++++---------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/dropdownList_Overview.md b/website/translated_docs/fr/FormObjects/dropdownList_Overview.md index 88df095680e52f..b0378f5afd8404 100644 --- a/website/translated_docs/fr/FormObjects/dropdownList_Overview.md +++ b/website/translated_docs/fr/FormObjects/dropdownList_Overview.md @@ -1,26 +1,26 @@ --- id: dropdownListOverview -title: Liste déroulante +title: Drop-down List --- ## Aperçu -Les pop-up/listes déroulantes sont des objets qui permettent à l’utilisateur de sélectionner un élément dans une liste. Vous gérez les éléments qui apparaissent dans les listes déroulantes à l’aide de tableaux, d’énumérations ou d'actions standard. +Drop-down lists are objects that allow the user to select from a list. You manage the items displayed in the drop-down list using an array, a choice list, or a standard action. -Sous macOS, les listes déroulantes sont aussi parfois appelées "pop-up menu". Les deux noms font référence aux mêmes objets. Comme le montre l'exemple suivant, l'apparence de ces objets peut différer légèrement selon la plateforme : +On macOS, drop-down lists are also sometimes called "pop-up menu". Both names refer to the same objects. As the following example shows, the appearance of these objects can differ slightly according to the platform: ![](assets/en/FormObjects/popupDropdown_appearance.png) -## Utiliser un tableau +## Using an array -Un [tableau](Concepts/arrays.md) est une liste de valeurs gardées en mémoire qui sont référencées par le nom du tableau. Un pop-up/liste déroulante affiche le tableau sous la forme d’une liste de valeurs qui apparaît lorsqu’on clique dessus. +An [array](Concepts/arrays.md) is a list of values in memory that is referenced by the name of the array. A drop-down list displays an array as a list of values when you click on it. -Les objets pop-up/listes déroulantes peuvent être initialisés par le chargement d’une liste de valeurs dans un tableau. Vous pouvez réaliser cette opération de plusieurs manières : +Drop-down list objects are initialized by loading a list of values into an array. You can do this in several ways: -* Saisir une liste de valeurs par défaut dans les propriétés de l’objetPour cela, dans le thème [Sources de données](properties_DataSource.md) de la Liste des propriétés, sélectionnez "\". Les valeurs par défaut sont automatiquement chargées dans un tableau. Vous pouvez faire référence à ce tableau par l’intermédiaire du nom de la variable associée à l’objet. +* Enter a list of default values in the object properties by selecting "\" in the [Data Source](properties_DataSource.md) theme of the Property List. The default values are loaded into an array automatically. You can refer to the array using the name of the variable associated with the object. -* Avant que l’objet ne soit affiché, exécutez une méthode qui affecte des valeurs au tableau. Par exemple: +* Before the object is displayed, execute code that assigns values to the array elements. For example: ```4d ARRAY TEXT(aCities;6) @@ -31,29 +31,29 @@ Les objets pop-up/listes déroulantes peuvent être initialisés par le chargeme aCities{5}:="Frostbite Falls" aCities{6}:="Green Bay" ``` -In this case, the name of the variable associated with the object in the form must be *aCities*. Ce code peut être placé dans la méthode formulaire et être exécuté lorsque l’événement formulaire `Sur chargement` se produit. +In this case, the name of the variable associated with the object in the form must be *aCities*. This code could be placed in the form method and be executed when the `On Load` form event runs. -* Avant que l’objet ne soit affiché, chargez les valeurs d’une énumération dans le tableau à l’aide de la commande [LIST TO ARRAY](https://doc.4d.com/4Dv17R5/4D/17-R5/LIST-TO-ARRAY.301-4127385.en.html). Par exemple: +* Before the object is displayed, load the values of a list into the array using the [LIST TO ARRAY](https://doc.4d.com/4Dv17R5/4D/17-R5/LIST-TO-ARRAY.301-4127385.en.html) command. For example: ```4d LIST TO ARRAY("Cities";aCities) ``` - In this case also, the name of the variable associated with the object in the form must be *aCities*. Ce code peut être exécuté à la place de celui proposé plus haut. + In this case also, the name of the variable associated with the object in the form must be *aCities*. This code would be run in place of the assignment statements shown above. -Si vous voulez stocker dans un champ le choix de l’utilisateur, il est nécessaire d’écrire du code pour affecter les valeurs et de l’exécuter après la validation de l’enregistrement. Ce code pourrait être le suivant : +If you need to save the user’s choice into a field, you would use an assignment statement that runs after the record is accepted. The code might look like this: ```4d Case of :(Form event=On Load) LIST TO ARRAY("Cities";aCities) - If(Record number([People])<0) /Nouvel enregistrement - aCities:=3 /affiche une valeur par défaut - Else /enregistrement existant, on affiche une valeur stockée + If(Record number([People])<0) `new record + aCities:=3 `display a default value + Else `existing record, display stored value aCities:=Find in array(aCities;City) End if - :(Form event=On Clicked) /La sélection a été modifiée - City:=aCities{aCities} /La nouvelle valeur est assignée au champ + :(Form event=On Clicked) `user modified selection + City:=aCities{aCities} `field gets new value :(Form event=On Validate) City:=aCities{aCities} :(Form event=On Unload) @@ -61,30 +61,30 @@ Si vous voulez stocker dans un champ le choix de l’utilisateur, il est nécess End case ``` -Vous devez cocher chaque [événement] pris en compte dans les structures "For" de votre code. Les tableaux contiennent toujours un nombre fini d’éléments. La liste des éléments est dynamique et peut être modifiée par programmation. Les éléments d’un tableau peuvent être modifiés et triés. +You must select each [event] that you test for in your Case statement. Arrays always contain a finite number of items. The list of items is dynamic and can be changed by a method. Items in an array can be modified, sorted, and added to. -## Utiliser une énumération +## Using a choice list -Si vous souhaitez utiliser un pop-up/liste déroulante pour gérer les valeurs d'un champ ou d'une variable énuméré(e), 4D vous permet de référencer directement le champ ou la variable comme source de données de l'objet. Cette possibilité facilite la gestion des champs/variables énuméré(e) s. -> Si vous utilisez une énumération hiérarchique, seul le premier niveau sera affiché et sélectionnable. +If you want to use a drop-down list to manage the values of a listed field or variable, 4D lets you reference the field or variable directly as the object's data source. This makes it easier to manage listed fields/variables. +> If you use a hierarchical list, only the first level is displayed and can be selected. -Par exemple, dans le cas d’un champ "Couleur" pouvant contenir uniquement les valeurs "White", "Blue", "Green" or "Red", vous pouvez créer une liste contenant ces valeurs et l’associer à un objet pop up menu qui référence le champ "Couleur". 4D se charge alors de gérer automatiquement la saisie et l’affichage de la valeur courante dans le formulaire. +For example, in the case of a "Color" field that can only contain the values "White", "Blue", "Green" or "Red", it is now possible to create a list containing these values and associate it with a pop-up menu object that references the 4D "Color" field. 4D then automatically takes care of managing the input and display of the current value in the form. -Pour associer un popup/liste déroulante à un champ ou une variable énuméré(e), il suffit de saisir directement le nom du champ ou de la variable dans la zone [Variable ou expression](properties_Object.md#variable-or-expression) de l’objet dans la liste de propriétés . +To associate a pop-up menu/drop-down list or a combo box with a field or variable, you can just enter the name of the field or variable directly in the [Variable or Expression](properties_Object.md#variable-or-expression) of the object in the Property List. -A l’exécution du formulaire, 4D gère automatiquement le pop up menu ou la combo box en saisie ou à l’affichage : lorsque l’utilisateur choisit une valeur, elle est stockée dans le champ ; à l’affichage, la valeur du champ est affichée dans le pop up menu : +When the form is executed, 4D automatically manages the pop-up menu or combo box during input or display: when a user chooses a value, it is saved in the field; this field value is shown in the pop-up menu when the form is displayed: ![](assets/en/FormObjects/popupDropdown_choiceList.png) -> Il n'est pas possible de mixer ce principe avec l'initialisation de l'objet à l'aide d'un tableau. Si vous saisissez un nom de champ dans la zone Nom de la variable, il est nécessaire d'utiliser une énumération. +> It is not possible to combine this principle with using an array to initialize the object. If you enter a field name in the Variable Name area, then you must use a choice list. -### Enregistrer comme -Lorsque vous avez associé un objet pop-up/liste déroulante à une liste de choix (énumération) et à un champ, vous pouvez utiliser l'option [Enregistrer comme Valeur/Référence](properties_DataSource.md#save-as) dans le thème "Sources de données" de la Liste des propriétés. Cette option permet d'optimiser la taille des données stockées. +### Save as +When you have associated a pop-up menu/drop-down list with a choice list and with a field, you can use the [Save as Value/Reference property](properties_DataSource.md#save-as). This option lets you optimize the size of the data saved. -## Utiliser une action standard -Vous pouvez assigner une action standard à un objet pop up menu/liste déroulante (thème [Action](properties_Action.md#standard-action) de la Liste des propriétés). Seules les actions qui affichent une sous-liste d'éléments (à l'exception de l'action Aller à page) sont prises en charge par ce type d'objet. Par exemple, si vous sélectionnez l'action standard `backgroundColor`, à l'exécution l'objet affichera une liste automatique de couleurs de fond. Vous pouvez remplacer cette liste automatique par une liste personnalisée en associant à l'objet une énumération dans laquelle chaque élément a lui-même été assigné à une action standard. +## Using a standard action +You can assign a standard action to a pop-up menu/drop-down list ([Action](properties_Action.md#standard-action) theme of the Property List). Only actions that display a sublist of items (except the goto page action) are supported by this object. For example, if you select the `backgroundColor` standard action, at runtime the object will display an automatic list of background colors. You can can override this automatic list by assigning in addition a choice list in which each item has been assigned a custom standard action. -Pour plus d'informations, reportez-vous à la section [Actions standard](https://doc.4d.com/4Dv17R5/4D/17-R5/Standard-actions.300-4163633.en.html). +For more information, please refer to the [Standard actions](https://doc.4d.com/4Dv17R5/4D/17-R5/Standard-actions.300-4163633.en.html) section. -## Propriétés prises en charge +## Supported Properties [Alpha Format](properties_Display.md#alpha-format) - [Bold](properties_Text.md#bold) - [Bottom](properties_CoordinatesAndSizing.md#bottom) - [Button Style](properties_TextAndPicture.md#button-style) - [Choice List](properties_DataSource.md#choice-list) - [Class](properties_Object.md#css-class) - [Date Format](properties_Display.md#date-format) - [Expression Type](properties_Object.md#expression-type) - [Focusable](properties_Entry.md#focusable) - [Font](properties_Text.md#font) - [Font Color](properties_Text.md#font-color) - [Font Size](properties_Text.md#font-size) - [Height](properties_CoordinatesAndSizing.md#height) - [Help Tip](properties_Help.md#help-tip) - [Horizontal Sizing](properties_ResizingOptions.md#horizontal-sizing) - [Italic](properties_Text.md#italic) - [Left](properties_CoordinatesAndSizing.md#left) - [Not rendered](properties_Display.md#not-rendered) - [Object Name](properties_Object.md#object-name) - [Right](properties_CoordinatesAndSizing.md#right) - [Standard action](properties_Action.md#standard-action) - [Save as](properties_DataSource.md#save-as) - [Save value](properties_Object.md#save-value) - [Time Format](properties_Display.md#time-format) - [Top](properties_CoordinatesAndSizing.md#top) - [Type](properties_Object.md#type) - [Underline](properties_Text.md#underline) - [Variable or Expression](properties_Object.md#variable-or-expression) - [Vertical Sizing](properties_ResizingOptions.md#vertical-sizing) - [Visibility](properties_Display.md#visibility) - [Width](properties_CoordinatesAndSizing.md#width) \ No newline at end of file From 3d959dc2c5225b3eec93cbe0a6290c5a5f5e4f49 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:21:59 +0100 Subject: [PATCH 151/260] New translations formObjects_overview.md (French) --- .../fr/FormObjects/formObjects_overview.md | 25 ++++++++++--------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/formObjects_overview.md b/website/translated_docs/fr/FormObjects/formObjects_overview.md index 7a6d62850a6e07..88296fce3b951e 100644 --- a/website/translated_docs/fr/FormObjects/formObjects_overview.md +++ b/website/translated_docs/fr/FormObjects/formObjects_overview.md @@ -1,27 +1,28 @@ --- id: formObjectsOverview -title: A propos des objets formulaires 4D +title: About 4D Form Objects --- -Vous créez et personnalisez les formulaires de votre application en manipulant les objets qu'ils contiennent. Vous pouvez ajouter des objets, repositionner des objets, définir des propriétés d'objets, appliquer des règles métier en spécifiant des contraintes de saisie de données ou écrire des méthodes objet qui s'exécutent automatiquement lorsque l'objet est utilisé. +You build and customize your application forms by manipulating the objects on them. You can add objects, reposition objects, set object properties, enforce business rules by specifying data entry constraints, or write object methods that run automatically when the object is used. -## Objets actifs et statiques +## Active and static objects -Les formulaires 4D prennent en charge un grand nombre d'objets **actifs** et **statiques** intégrés : +4D forms support a large number of built-in **active** and **static** objects: -- **Les objets actifs** réalisent une tâche ou une fonction de l’interface. Les champs sont des objets actifs. Les autres objets actifs — objets saisissables (variables), combo box, listes déroulantes, boutons image, etc. — stockent des données temporairement en mémoire ou effectuent une tâche telle que l'ouverture d'une boite de dialogue, l'impression d'un état ou le lancement d'un processus d'arrière-plan. -- **Les objets statiques** sont généralement utilisés pour le décor, les libellés ou encore l'interface graphique du formulaire. A la différence des objets actifs, les objets statiques ne sont pas associés à des variables. A noter qu'il est possible d'insérer des éléments dynamiques dans les objets statiques. +- **active objects** perform a database task or an interface function. Fields are active objects. Other active objects — enterable objects (variables), combo boxes, drop-down lists, picture buttons, and so on — store data temporarily in memory or perform some action such as opening a dialog box, printing a report, or starting a background process. +- **static objects** are generally used for setting the appearance of the form and its labels as well as for the graphic interface. Static objects do not have associated variables like active objects. However, you can insert dynamic objects into static objects. -## Gérer les objets de formulaire +## Handling form objects -Vous pouvez ajouter des objets dans un formulaire de nombreuses manières : +You can add or modify 4D form objects in the following ways: -* **[Form Editor](FormEditor/formEditor.md):** Drag an object from the Form Editor toolbar onto the form. Utilisez ensuite la liste des propriétés pour indiquer les propriétés de l'objet. - Pour plus d'informations, reportez-vous au chapitre [Construction de formulaires](https://doc.4d.com/4Dv17/4D/17.3/Construction-des-formulaires.200-4639689.fr.html). +* **[Form Editor](FormEditor/formEditor.md):** Drag an object from the Form Editor toolbar onto the form. Then use the Property List to specify the object's properties. + See the [Building Forms](https://doc.4d.com/4Dv17R6/4D/17-R6/Building-forms.200-4354618.en.html) chapter for more information. -* **Langage 4D** : Commandes du thème [Objets (Formulaires)](https://doc.4d.com/4Dv17/4D/17.3/Objets-Formulaires.201-4620222.fr.html) telles que `OBJECT DUPLICATE` ou `OBJECT SET FONT STYLE` permettent de créer et de définir des objets de formulaire. +* **4D language**: Commands from the [Objects (Forms)](https://doc.4d.com/4Dv17R5/4D/17-R5/Objects-Forms.201-4127128.en.html) theme such as `OBJECT DUPLICATE` or `OBJECT SET FONT STYLE` allow to create and define form objects. -* **Code JSON dans les formulaires dynamiques :** Définissez les propriétés à l'aide du JSON. Utilisez la propriété [type](properties_Object.md#type) pour définir le type d'objet puis indiquez ses propriétés. See the [Dynamic Forms](https://doc.4d.com/4Dv17R5/4D/17-R5/Dynamic-Forms.300-4163740.en.html#3692292) page for information. +* **JSON code in dynamic forms:** Define the properties using JSON. Use the [type](properties_Object.md#type) property to define the object type, then set its available properties. See the [Dynamic Forms](https://doc.4d.com/4Dv17R5/4D/17-R5/Dynamic-Forms.300-4163740.en.html#3692292) page for information. Example for a button object: ``` + { "type": "button", "style": "bevel", "text": "OK", "action": "Cancel", "left": 60, "top": 160, "width": 100, "height": 20 } From 0dc8d6d88802cfe8a4bbea239f4ae7deb1a0b024 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:22:01 +0100 Subject: [PATCH 152/260] New translations groupBox.md (French) --- website/translated_docs/fr/FormObjects/groupBox.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/groupBox.md b/website/translated_docs/fr/FormObjects/groupBox.md index f0c68fb9a31eef..bf2dbb9ab43680 100644 --- a/website/translated_docs/fr/FormObjects/groupBox.md +++ b/website/translated_docs/fr/FormObjects/groupBox.md @@ -1,16 +1,16 @@ --- id: groupBox -title: Zone de groupe +title: Group Box --- -Une zone de groupe est un objet statique qui vous permet de rassembler visuellement plusieurs objets de formulaire : +A group box is a static object that allows you to visually assemble multiple form objects: ![](assets/en/FormObjects/groupBox.png) -> Le nom d'une zone de groupe est un texte statique ; vous pouvez utiliser une référence "localisable", comme pour toute étiquette 4D (voir [Utiliser des références dans les textes statiques](https://doc. 4d. com/4Dv17/4D/17.3/Utiliser-des-references-dans-les-textes-statiques. 300-4639972. fr. html) et la section *Architecture XLIFF* dans le manuel Développement de 4D. +> The name of a group box is static text; you can use a “localizable” reference as with any 4D label (see [Using references in static text](https://doc.4d.com/4Dv17R5/4D/17-R5/Using-references-in-static-text.300-4163725.en.html) and *XLIFF Architecture* section in 4D Design Reference. -#### Exemple JSON : +#### JSON Example: ``` "myGroup": { @@ -23,5 +23,5 @@ Une zone de groupe est un objet statique qui vous permet de rassembler visuellem } ``` -#### Propriétés prises en charge -[Bas](properties_CoordinatesAndSizing.md#bottom) - [CSS Class](properties_Object.md#css-class) - [Police](properties_Text.md#font) - [Couleur de la police](properties_Text.md#font-color) - [Taille](properties_Text.md#font-size) - [Hauteur](properties_CoordinatesAndSizing.md#height) - [Alignement horizontal](properties_Text.md#horizontal-alignment) - [Dim. horizontal](properties_ResizingOptions.md#horizontal-sizing) - [Italique](properties_Text.md#italic) - [Gauche](properties_CoordinatesAndSizing.md#left) - [Nom](properties_Object.md#object-name) - [Droite](properties_CoordinatesAndSizing.md#right) - [Titre](properties_Object.md#title) - [Haut](properties_CoordinatesAndSizing.md#top) - [Type](properties_Object.md#type) - [Souligné](properties_Text.md#underline) - [Dim. vertical](properties_ResizingOptions.md#vertical-sizing) - [Visibilité](properties_Display.md#visibility) - [Largeur](properties_CoordinatesAndSizing.md#width) \ No newline at end of file +#### Supported Properties +[Bottom](properties_CoordinatesAndSizing.md#bottom) - [CSS Class](properties_Object.md#css-class) - [Font](properties_Text.md#font) - [Font Color](properties_Text.md#font-color) - [Font Size](properties_Text.md#font-size) - [Height](properties_CoordinatesAndSizing.md#height) - [Horizontal Alignment](properties_Text.md#horizontal-alignment) - [Horizontal Sizing](properties_ResizingOptions.md#horizontal-sizing) - [Italic](properties_Text.md#italic) - [Left](properties_CoordinatesAndSizing.md#left) - [Object Name](properties_Object.md#object-name) - [Right](properties_CoordinatesAndSizing.md#right) - [Title](properties_Object.md#title) - [Top](properties_CoordinatesAndSizing.md#top) - [Type](properties_Object.md#type) - [Underline](properties_Text.md#underline) - [Vertical Sizing](properties_ResizingOptions.md#vertical-sizing) - [Visibility](properties_Display.md#visibility) - [Width](properties_CoordinatesAndSizing.md#width) \ No newline at end of file From acbff8e18d0a37844d239068c697ddc6b90dc006 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:22:04 +0100 Subject: [PATCH 153/260] New translations input_overview.md (French) --- .../fr/FormObjects/input_overview.md | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/input_overview.md b/website/translated_docs/fr/FormObjects/input_overview.md index b0742e9fb3132a..0a331cd823c08c 100644 --- a/website/translated_docs/fr/FormObjects/input_overview.md +++ b/website/translated_docs/fr/FormObjects/input_overview.md @@ -5,40 +5,40 @@ title: Input ## Aperçu -Les zones de saisie vous permettent d'ajouter des expressions saisissables ou non saisissables telles que des [champs](Concepts/identifiers.md#fields) et des [variables](Concepts/variables.md) de base de données à vos formulaires. Les zone de saisie peuvent gérer des données basées sur des caractères (texte, dates, numériques, etc.) ou des images : +Inputs allow you to add enterable or non-enterable expressions such as database [fields](Concepts/identifiers.md#fields) and [variables](Concepts/variables.md) to your forms. Inputs can handle character-based data (text, dates, numbers...) or pictures: ![](assets/en/FormObjects/input.png) -Les zones de saisie peuvent contenir [des expressions assignables ou non assignables](Concepts/quick-tour.md#assignable-vs-non-assignable-expressions). +Inputs can contain [assignable or non-assignable expressions](Concepts/quick-tour.md#assignable-vs-non-assignable-expressions). -De plus, les zones de saisie peuvent être [saisissables ou non saisissables](properties_Entry.md#enterable). Une zone de saisie saisissable accepte des données. Vous pouvez définir des contrôles de saisie de données pour l'objet. Une zone de saisie non saisissable peut uniquement afficher des valeurs mais ne peut pas être modifiée par l'utilisateur. +In addition, inputs can be [enterable or non-enterable](properties_Entry.md#enterable). An enterable input accepts data. You can set data entry controls for the object. A non-enterable input can only display values but cannot be edited by the user. -Vous pouvez gérer les données avec des [méthodes](Concepts/methods.md) objet ou formulaire. +You can manage the data with object or form [methods](Concepts/methods.md). -### Exemple JSON : +### JSON Example: ```4d "myText": { - "type": "input", //définir le type d'objet - "spellcheck": true, //autoriser la correction orthographique - "left": 60, //position gauche dans le formulaire - "top": 160, //position haute dans le formulaire - "width": 100, //largeur de l'objet - "height": 20 //hauteur de l'objet + "type": "input", //define the type of object + "spellcheck": true, //enable spelling verification + "left": 60, //left position on the form + "top": 160, //top position on the form + "width": 100, //width of the object + "height": 20 //height of the object } ``` -## Propriétés prises en charge +## Supported Properties [Allow font/color picker](properties_Text.md#allow-font-color-picker) - [Alpha Format](properties_Display.md#alpha-format) - [Auto Spellcheck](properties_Entry.md#auto-spellcheck) - [Bold](properties_Text.md#bold) - [Test when False/Text when True](properties_Display.md#text-when-false-text-when-true) - [Border Line Style](properties_BackgroundAndBorder.md#border-line-style) - [Bottom](properties_CoordinatesAndSizing.md#bottom) - [Choice List](properties_DataSource.md#choice-list) - [Class](properties_Object.md#css-class) - [Context Menu](properties_Entry.md#context-menu) - [Date Format](properties_Display.md#date-format) - [Default value](properties_RangeOfValues.md#default-value) - [Draggable](properties_Action.md#draggable) - [Droppable](properties_Action.md#droppable) - [Enterable](properties_Entry.md#enterable) - [Entry Filter](properties_Entry.md#entry-filter) - [Excluded List](properties_RangeOfValues.md#excluded-list) - [Expression type](properties_Object.md#expression-type) - [Fill Color](properties_BackgroundAndBorder.md#fill-color) - [Font](properties_Text.md#font) - [Font Color](properties_Text.md#font-color) - [Font Size](properties_Text.md#font-size) - [Height](properties_CoordinatesAndSizing.md#height) - [Hide focus rectangle](properties_Appearance.md#hide-focus-rectangle) - [Horizontal Alignment](properties_Text.md#horizontal-alignment) - [Horizontal Scroll Bar](properties_Appearance.md#horizontal-scroll-bar) - [Horizontal Sizing](properties_ResizingOptions.md#horizontal-sizing) - [Italic](properties_Text.md#italic) - [Left](properties_CoordinatesAndSizing.md#left) - [Multiline](properties_Entry.md#multiline) - [Multi-style](properties_Text.md#multi-style) - [Number Format](properties_Display.md#number-format) - [Object Name](properties_Object.md#object-name) - [Orientation](properties_Text.md#orientation) - [Picture Format](properties_Display.md#picture-format) - [Placeholder](properties_Entry.md#placeholder) - [Print Frame](properties_Print.md#print-frame) - [Required List](properties_RangeOfValues.md#required-list) - [Right](properties_CoordinatesAndSizing.md#right) - [Selection always visible](properties_Entry.md#selection-always-visible) - [Store with default style tags](properties_Text.md#store-with-default-style-tags) - [Text when False/Text when True](properties_Display.md#text-when-false-text-when-true) - [Time Format](properties_Display.md#time-format) - [Top](properties_CoordinatesAndSizing.md#top) - [Type](properties_Object.md#type) - [Underline](properties_Text.md#underline) - [Variable or Expression](properties_Object.md#variable-or-expression) - [Vertical Scroll Bar](properties_Appearance.md#vertical-scroll-bar) - [Vertical Sizing](properties_ResizingOptions.md#vertical-sizing) - [Visibility](properties_Display.md#visibility) - [Width](properties_CoordinatesAndSizing.md#width) - [Wordwrap](properties_Display.md#wordwrap) --- -## Alternatives +## Input alternatives -Vous pouvez également représenter des expressions de champ et de variable dans vos formulaires à l'aide d'objets alternatifs, plus particulièrement : +You can also represent field and variable expressions in your forms using alternative objects, more particularly: -* Vous pouvez afficher et saisir des données à partir des champs de la base de données directement dans des colonnes [de type List box](listbox_overview.md). -* Vous pouvez représenter un champ de liste ou une variable directement dans un formulaire à l'aide d'objets [Pop-up menus/Listes déroulantes](popupMenuDropdownList_overview) et [Combo box](comboBox_overview.md). -* Vous pouvez représenter une expression booléenne sous forme de [case à cocher](checkbox_overview.md) ou de [bouton radio](radio_overview.md). \ No newline at end of file +* You can display and enter data from database fields directly in columns of [selection type List boxes](listbox_overview.md). +* You can represent a list field or variable directly in a form using [Pop-up Menus/Drop-down Lists](popupMenuDropdownList_overview) and [Combo Boxes](comboBox_overview.md) objects. +* You can represent a boolean expression as a [check box](checkbox_overview.md) or as a [radio button](radio_overview.md) object. \ No newline at end of file From c59459c1f9418a9fbe0cfcd7ca4e6182143d45a6 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:22:06 +0100 Subject: [PATCH 154/260] New translations list_overview.md (French) --- .../fr/FormObjects/list_overview.md | 116 +++++++++--------- 1 file changed, 58 insertions(+), 58 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/list_overview.md b/website/translated_docs/fr/FormObjects/list_overview.md index 39a9e712ff38ee..865b4d0c749f11 100644 --- a/website/translated_docs/fr/FormObjects/list_overview.md +++ b/website/translated_docs/fr/FormObjects/list_overview.md @@ -1,63 +1,63 @@ --- id: listOverview -title: Liste hiérarchique +title: Hierarchical List --- ## Aperçu -Les listes hiérarchiques sont des objets de formulaire permettant d'afficher des données sous forme de listes comportant un ou plusieurs niveaux qu'il est possible de déployer ou de contracter. +Hierarchical lists are form objects that can be used to display data as lists with one or more levels that can be expanded or collapsed. ![](assets/en/FormObjects/Hlist1.png) -Le cas échéant, l'icône déployer/contractée est automatiquement affichée à gauche de l'élément. Les listes hiérarchiques prennent en charge un nombre illimité de sous-niveaux. +Where appropriate, the expand/collapse icon is automatically displayed to the left of the item. Hierarchical lists support an unlimited number of sublevels. -## Sources de données de liste hiérarchique +## Hierarchical list data source -Le contenu d'un objet formulaire liste hiérarchique peut être initialisé de l'une des manières suivantes : +The contents of a hierarchical list form object can be initialized in one of the following ways: -- Associer une [énumération](properties_DataSource.md#choice-list) à l'objet. L'énumération doit avoir été définie dans l'éditeur de listes en mode Développement. -- Assignez directement une référence de liste hiérarchique à la [variable ou à l'expression](properties_Object.md#variable-or-expression) associée à l'objet formulaire. +- Associate an existing [choice list](properties_DataSource.md#choice-list) to the object. The choice list must have been defined in the List editor in Design mode. +- Directly assign a hierarchical list reference to the [variable or expression](properties_Object.md#variable-or-expression) associated with the form object. -Dans les deux cas, vous gérez une liste hiérarchique lors de l'exécution via sa référence *ListRef*, à l'aide des commandes de [liste hiérarchique](https://doc.4d.com/4Dv17R6/4D/17-R6/Hierarchical-Lists.201-4310291.en.html) du langage 4D. +In both cases, you manage a hierarchical list at runtime through its *ListRef* reference, using the [Hierarchical list](https://doc.4d.com/4Dv17R6/4D/17-R6/Hierarchical-Lists.201-4310291.en.html) commands in the 4D language. -## RefListe et nom d'objet +## ListRef and object name -Une liste hiérarchique est à la fois un **objet de langage** existant en mémoire et un **objet de formulaire**. +A hierarchical list is both a **language object** existing in memory and a **form object**. -L'**objet de langage** est référencé de manière unique par un identifiant interne, de type Entier long, désigné par *RefListe* dans ce manuel. Cet identifiant est retourné par les commandes permettant de créer des listes `New list`, `Copy list`, `Load list`, `BLOB to list`. Il n’existe qu’une seule instance en mémoire de l’objet de langage et toute modification effectuée sur cet objet est immédiatement répercutée dans tous les endroits où il est utilisé. +The **language object** is referenced by an unique internal ID of the Longint type, designated by *ListRef* in the 4D Language Reference. This ID is returned by the commands that can be used to create lists: `New list`, `Copy list`, `Load list`, `BLOB to list`. There is only one instance of the language object in memory and any modification carried out on this object is immediately carried over to all the places where it is used. -L'**objet de formulaire** n'est pas nécessairement unique : il peut exister plusieurs représentations d’une même liste hiérarchique dans un même formulaire ou dans des formulaires différents. Comme pour les autres objets de formulaire, vous désignez l'objet dans le langage via la syntaxe (*;"NomListe", etc.). +The **form object** is not necessarily unique: there may be several representations of the same hierarchical list in the same form or in different ones. As with other form objects, you specify the object in the language using the syntax (*;"ListName", etc.). -Vous connectez l'"objet de langage" liste hiérarchique avec l'"objet de formulaire" liste hiérarchique par l'intermédiaire de la variable contenant la valeur de l'identifiant unique RefListe. Par exemple, si vous avez associé la [variable](properties_Object.md#variable-or-expression) mylist à l'objet de formulaire, vous écrivez : +You connect the hierarchical list "language object" with the hierarchical list "form object" by the intermediary of the variable containing the ListRef value. For example, if you have associated the mylist [variable](properties_Object.md#variable-or-expression) to the form object, you can write: ```4d mylist:=New list ``` -Chaque représentation de liste dispose de caractéristiques propres et partage des caractéristiques communes avec l’ensemble des représentations. Les caractéristiques propres à chaque représentation de liste sont les suivantes : +Each representation of the list has its own specific characteristics and shares common characteristics with all the other representations. The following characteristics are specific to each representation of the list: -- La sélection, -- L’état déployé/contracté des éléments, -- La position du curseur de défilement. +- The selection, +- The expanded/collapsed state of its items, +- The position of the scrolling cursor. -Les autres caractéristiques (police, style, filtre de saisie, couleur, contenu de la liste, icônes, etc.) sont communes à toutes les représentations et ne peuvent pas être modifiées séparément. Par conséquent, lorsque vous utilisez des commandes se basant sur la configuration déployé/contracté ou l'élément courant, par exemple `Count list items` (lorsque le paramètre `*` final n’est pas passé), il importe de pouvoir désigner sans ambiguïté la représentation à utiliser. +The other characteristics (font, font size, style, entry control, color, list contents, icons, etc.) are common to all the representations and cannot be modified separately. Consequently, when you use commands based on the expanded/collapsed configuration or the current item, for example `Count list items` (when the final `*` parameter is not passed), it is important to be able to specify the representation to be used without any ambiguity. -Vous devez utiliser l'identifiant de type `RefListe` avec les commandes du langage lorsque vous souhaitez désigner la liste hiérarchique résidant en mémoire. Par ailleurs, si vous souhaitez désigner la représentation au niveau du formulaire d'un objet Liste hiérarchique, vous devez utiliser le nom de l'objet (type chaîne) dans la commande, via la syntaxe (*;"NomListe"...). +You must use the `ListRef` ID with language commands when you want to specify the hierarchical list found in memory. On the other hand, if you want to specify the representation of a hierarchical list object at the form level, you must use the object name (string type) in the command, via the standard syntax (*;"ListName", etc.). -> Dans le cas des commandes définissant des propriétés, la syntaxe basée sur le nom d’objet ne signifie pas que seul l’objet de formulaire désigné sera modifié par la commande, mais que l’action de la commande sera basée sur l’état de cet objet. Les caractérisques communes des listes hiérarchiques sont toujours modifiées dans toutes les représentations. Par exemple, si vous passez l’instruction : +> In the case of commands that set properties, the syntax based on the object name does not mean that only the form object specified will be modified by the command, but rather that the action of the command will be based on the state of this object. The common characteristics of hierarchical lists are always modified in all of their representations. For example, if you execute: ```4d SET LIST ITEM FONT(*;"mylist1";*;thefont) ``` -> ... vous indiquez que vous souhaitez modifier la police d’un élément de la liste hiérarchique associée à l’objet de formulaire *mylist1*. La commande tiendra compte de l’élément courant de l’objet *mylist1* pour définir l’élément à modifier, mais cette modification sera reportée dans toutes les représentations de la liste dans tous les process. +> ... you are indicating that you want to modify the font of the hierarchical list item associated with the *mylist1* form object. The command will take the current item of the *mylist1* object into account to specify the item to modify, but this modification will be carried over to all the representations of the list in all of the processes. -### Prise en compte du @ +### Support of @ -Comme pour les autres commandes de gestion des propriété d’objets, il est possible d’utiliser le caractère “@” dans le paramètre `NomListe`. En principe, cette syntaxe permet de désigner un ensemble d’objets dans le formulaire. Toutefois, dans le contexte des commandes de liste hiérarchique, ce principe n’est pas applicable dans tous les cas. Cette syntaxe aura deux effets différents en fonction du type de commande : +As with other object property management commands, it is possible to use the “@” character in the `ListName` parameter. As a rule, this syntax is used to designate a set of objects in the form. However, in the context of hierarchical list commands, this does not apply in every case. This syntax will have two different effects depending on the type of command: -- Pour les commandes fixant des propriétés, cette syntaxe désigne tous les objets dont le nom correspond (fonctionnement standard). Par exemple, le paramètre "LH@" désigne tous les objets de type liste hiérarchique dont le nom débute par “LH” +- For commands that set properties, this syntax designates all the objects whose name corresponds (standard behavior). For example, the parameter "LH@" designates all objects of the hierarchical list type whose name begins with “LH.” - `DELETE FROM LIST` - `INSERT IN LIST` - `SELECT LIST ITEMS BY POSITION` @@ -67,7 +67,7 @@ Comme pour les autres commandes de gestion des propriété d’objets, il est po - `SET LIST ITEM PARAMETER` - `SET LIST ITEM PROPERTIES` -- Pour les commandes récupérant des propriétés, cette syntaxe désigne le premier objet dont le nom correspond. Ces commandes sont : +- For commands retrieving properties, this syntax designates the first object whose name corresponds: - `Count list items` - `Find in list` - `GET LIST ITEM` @@ -80,9 +80,9 @@ Comme pour les autres commandes de gestion des propriété d’objets, il est po - `Selected list items` -## Commandes génériques utilisables avec les listes hiérarchiques +## Generic commands to use with hierarchical lists -Il est possible de modifier l’apparence d’une liste hiérarchique dans un formulaire à l’aide de plusieurs commandes 4D génériques. Vous devez passer à ces commandes soit le nom d’objet de la liste hiérarchique (en utilisant le paramètre *), soit son nom de variable (contenant la valeur RefListe) : +It is possible to modify the appearance of a hierarchical list form objects using several generic 4D commands. You can pass to these commands either the object name of the hierarchical list (using the * parameter), or its variable name (containing the ListRef value): - `OBJECT SET FONT` - `OBJECT SET FONT STYLE` @@ -94,64 +94,64 @@ Il est possible de modifier l’apparence d’une liste hiérarchique dans un fo - `OBJECT SET SCROLL POSITION` - `OBJECT SET RGB COLORS` -> Rappel : A l'exception de la commande `OBJECT SET SCROLL POSITION`, ces commandes modifient toutes les représentations d'une même liste, même si vous désignez une liste via son nom d'objet. +> Reminder: Except `OBJECT SET SCROLL POSITION`, these commands modify all the representations of the same list, even if you only specify a list via its object name. -## Priorité des commandes de propriété +## Priority of property commands -Certaines propriétés d’une liste hiérarchique (par exemple l’attribut **saisissable** ou la couleur) peuvent être définies de trois manières : via la Liste des propriétés en mode Développement, via une commande du thème “Propriétés des objets” ou via une commande du thème “Liste hiérarchique”. Lorsque ces trois moyens sont utilisés pour définir les propriétés d’une liste, l’ordre de priorité suivant est appliqué : +Certain properties of hierarchical lists (for example, the **Enterable** attribute or the color) can be set in different ways: in the form properties, via a command of the “Object Properties” theme or via a command of the “Hierarchical Lists” theme. When all three of these means are used to set list properties, the following order of priority is applied: -1. Commandes du thème “Liste hiérarchique” -2. Commandes générique de propriété d'objet -3. Propriété formulaire +1. Commands of the “Hierarchical Lists” theme +2. Generic object property commands +3. Form property -Ce principe est appliqué quel que soit l’ordre d’appel des commandes. Si une propriété d’élément est modifiée individuellement via une commande de liste hiérarchique, la commande de propriété d’objet équivalente sera sans effet sur cet élément même si elle est appelée ultérieurement. Par exemple, si vous modifiez la couleur d’un élément via la commande `SET LIST ITEM PROPERTIES`, la commande `OBJECT SET COLOR` n’aura aucun effet sur cet élément. +This principle is applied regardless of the order in which the commands are called. If an item property is modified individually via a hierarchical list command, the equivalent object property command will have no effect on this item even if it is called subsequently. For example, if the color of an item is modified via the `SET LIST ITEM PROPERTIES` command, the `OBJECT SET COLOR` command will have no effect on this item. -## Gestion des éléments par position ou par référence +## Management of items by position or by reference -Vous pouvez généralement travailler de deux manières avec le contenu des listes hiérarchiques : par position ou par référence. +You can usually work in two ways with the contents of hierarchical lists: by position or by reference. -- Lorsque vous travaillez par position, 4D se base sur la position relative des éléments dans la liste affichée à l'écran pour les identifier. Le résultat sera différent selon que certains éléments hiérarchiques sont déployés ou non. A noter qu'en cas de multi-représentation, chaque objet de formulaire comporte sa propre configuration d'éléments contractés/déployés. -- Lorsque vous travaillez par référence, 4D se base sur le numéro unique *réfElément* des éléments de la liste. Chaque élément peut être ainsi désigné, quelle que soit sa position ou son affichage dans la liste hiérarchique. +- When you work by position, 4D bases itself on the position in relation to the items of the list displayed on screen in order to identify them. The result will differ according to whether or not certain hierarchical items are expanded or collapsed. Note that in the case of multiple representations, each form object has its own configuration of expanded/collapsed items. +- When you work by reference, 4D bases itself on the *itemRef* ID number of the list items. Each item can thus be specified individually, regardless of its position or its display in the hierarchical list. -### Exploiter les numéros de référence des éléments (réfElément) +### Using item reference numbers (itemRef) -Chaque élément d'une liste hiérarchique dispose d'un numéro de référence (*réfElément*) de type Entier long. Cette valeur est destinée uniquement à votre propre usage : 4D ne fait que la maintenir. +Each item of a hierarchical list has a reference number (*itemRef*) of the Longint type. This value is only intended for your own use: 4D simply maintains it. -> Attention : Vous pouvez utiliser comme numéro de référence toute valeur de type entier long, sauf la valeur 0. En effet, pour la plupart des commandes de ce thème, la valeur 0 permet de désigner le dernier élément ajouté à la liste. +> Warning: You can use any type of Longint value as a reference number, except for 0. In fact, for most of the commands in this theme, the value 0 is used to specify the last item added to the list. -Voici quelques astuces quant à l'utilisation du numéro de référence unique : +Here are a few tips for using reference numbers: -1. Vous n'avez pas besoin d'identifier chaque élément de façon unique (niveau débutant). +1. You do not need to identify each item with a unique number (beginner level). - - Premier exemple : vous construisez par programmation un système d'onglets, par exemple, un carnet d'adresses. Comme le système vous retournera le numéro de l'onglet sélectionné, vous n'aurez probablement pas besoin de davantage d'informations. Dans ce cas, ne vous préoccupez pas des numéros de référence des éléments : passez n'importe quelle valeur (hormis 0) dans le paramètre *réfElément*. Notez que pour un système de carnet d'adresses, vous pouvez prédéfinir une liste A, B,..., Z en mode Développement. Vous pouvez également la créer par programmation afin d'éliminer les lettres pour lesquelles il n'y a pas d'enregistrement. - - Deuxième exemple : en travaillant avec une base, vous construisez progressivement une liste de mots-clés. Vous pouvez sauvegarder la liste à la fin de chaque session, en utilisant les commandes `SAVE LIST` ou `LIST TO BLOB`, et la recharger au début de chaque session, à l'aide des commandes `Load list` ou `BLOB to list`. Vous pouvez afficher cette liste dans une palette flottante ; lorsque l'utilisateur clique sur un mot-clé de la liste, l'élément choisi est inséré dans la zone saisissable sélectionnée du process de premier plan. En tout état de cause, l'important est que vous ne traitez que l'élément sélectionné (par clic ou glisser-déposer), car la commande `Selected list items`vous retourne la position de l'élément que vous devez traiter. En utilisant cette valeur de position, vous obtenez le libellé de l'élément grâce à la commande `GET LIST ITEM`. Ici aussi, vous n'avez pas besoin d'identifier de façon unique chaque élément ; vous pouvez passer n'importe quelle valeur (hormis 0) dans le paramètre *réfElément*. + - First example: you build a system of tabs by programming, for example, an address book. Since the system returns the number of the tab selected, you will probably not need more information than this. In this case, do not worry about item reference numbers: pass any value (except 0) in the *itemRef* parameter. Note that for an address book system, you can predefine a list A, B, ..., Z in Design mode. You can also create it by programming in order to eliminate any letters for which there are no records. + - Second example: while working with a database, you progressively build a list of keywords. You can save this list at the end of each session by using the `SAVE LIST` or `LIST TO BLOB` commands and reload it at the beginning of each new session using the `Load list` or `BLOB to list` commands. You can display this list in a floating palette; when each user clicks on a keyword in the list, the item chosen is inserted into the enterable area that is selected in the foreground process. The important thing is that you only process the item selected, because the `Selected list items` command returns the position of the item that you must process. When using this position value, you obtain the title of the item by means of the `GET LIST ITEM` command. Here again, you do not need to identify each item individually; you can pass any value (except 0) in the *itemRef* parameter. -2. Identifiez les éléments de la liste (niveau intermédiaire). - Utilisez le numéro de référence de l'élément pour stocker l'information nécessaire lorsque vous devez agir sur un élément ; ce point est détaillé dans l'exemple de la commande `APPEND TO LIST`. Dans cet exemple, nous utilisons les numéros de référence des éléments pour stocker des numéros d'enregistrements. Cependant, nous devons pouvoir établir une distinction entre les éléments qui correspondent aux enregistrements [Départements] et ceux qui correspondent aux enregistrements [Employés]. +2. You need to partially identify the list items (intermediary level). + You use the item reference number to store information needed when you must work with the item; this point is detailed in the example of the `APPEND TO LIST` command. In this example, we use the item reference numbers to store record numbers. However, we must be able to establish a distinction between items that correspond to the [Department] records and those that correspond to the [Employees] records. -3. Identifiez tous les éléments de la liste individuellement (niveau avancé). - Programmez une gestion élaborée des listes hiérarchiques dans lesquelles vous devez absolument pouvoir identifier chaque élément individuellement à tous les niveaux de la liste. Un moyen simple d'implémenter ce fonctionnement est de maintenir un compteur personnel. Supposons que vous créez une liste *hlList* à l'aide de la commande `APPEND TO LIST`. A ce stade, vous initialisez un compteur *vlhCounter* à 1. A chaque fois que vous appelez `APPEND TO LIST` ou `INSERT IN LIST`, vous incrémentez ce compteur `(vlhCounter:=vlhCounter+1)`, et vous passez le compteur comme numéro de référence de l'élément. L'astuce consiste à ne pas décrémenter le compteur lorsque vous détruisez des éléments — le compteur ne peut qu'augmenter. En procédant ainsi, vous garantissez l'unicité des numéros de référence des éléments. Puisque ces nombres sont du type Entier long, vous pouvez ajouter ou insérer plus de deux milliards d'éléments dans une liste qui a été réinitialisée ... (cependant si vous travaillez avec un si grand nombre d'éléments, cela signifie généralement que vous devriez utiliser un tableau plutôt qu'une liste.) +3. You need to identify all the list items individually (advanced level). + You program an elaborate management of hierarchical lists in which you absolutely must be able to identify each item individually at every level of the list. A simple way of implementing this is to maintain a personal counter. Suppose that you create a *hlList* list using the `APPEND TO LIST` command. At this stage, you initialize a counter *vhlCounter* to 1. Each time you call `APPEND TO LIST` or `INSERT IN LIST`, you increment this counter `(vhlCounter:=vhlCounter+1)`, and you pass the counter number as the item reference number. The trick consists in never decrementing the counter when you delete items — the counter can only increase. In this way, you guarantee the uniqueness of the item reference numbers. Since these numbers are of the Longint type, you can add or insert more than two billion items in a list that has been reinitialized... (however if you are working with such a great number of items, this usually means that you should use a table rather than a list.) -> Si vous exploitez les Opérateurs sur les bits, vous pouvez également utiliser les numéros de référence des éléments pour stocker des informations qui peuvent être logées dans un Entier long, c'est-à-dire 2 Entiers, des valeurs de 4 octets ou encore 32 Booléens. +> If you use Bitwise Operators, you can also use item reference numbers for storing information that can be put into a Longint, i.e. 2 Integers, 4-byte values or, yet again, 32 Booleans. -### Quand avez-vous besoin de numéros de référence uniques ? +### When do you need unique reference numbers? -Dans la plupart des cas, lorsque vous utilisez des listes hiérarchiques pour des besoins d'interface utilisateur, pour lesquels seul l'élément sélectionné (par un clic ou par glisser-déposer) est important, vous n'avez pas besoin d'utiliser les numéros de référence des éléments. Les commandes `Selected list items` et `GET LIST ITEM`vous fournissent toutes les informations nécessaires à la gestion de l'élément sélectionné. De plus, des commandes telles que `INSERT IN LIST` et `DELETE FROM LIST` vous permettent de manipuler la liste de manière "relative" à l'élément sélectionné. +In most cases, when using hierarchical lists for user interface purposes and when only dealing with the selected item (the one that was clicked or dragged), you will not need to use item reference numbers at all. Using `Selected list items` and `GET LIST ITEM` you have all you need to deal with the currently selected item. In addition, commands such as `INSERT IN LIST` and `DELETE FROM LIST` allow you to manipulate the list “relatively” with respect to the selected item. -En pratique, vous devez vous préoccuper des numéros de référence d'éléments lorsque vous voulez accéder directement par programmation à n'importe quel élément de la liste, et pas nécessairement à l'élément couramment sélectionné. +Basically, you need to deal with item reference numbers when you want direct access to any item of the list programmatically and not necessarily the one currently selected in the list. -## Élément modifiable +## Modifiable element -Vous pouvez choisir si les éléments de la liste hiérarchique peuvent être modifiés par l'utilisateur à l'aide du raccourci **Alt + clic** (Windows)/ **Option + clic** (macOS), ou en effectuant un clic long sur le texte de l'élément. +You can control whether hierarchical list items can be modified by the user by using the **Alt+click**(Windows) / **Option+click** (macOS) shortcut, or by carrying out a long click on the text of the item. -- Quelle que soit la source de données de la liste hiérarchique, vous pouvez contrôler l'ensemble de l'objet avec la propriété [Saisissable](properties_Entry.md#enterable). +- Whatever the hierarchical list data source, you can control the whole object with the [Enterable](properties_Entry.md#enterable) property. -- En outre, si vous remplissez la liste hiérarchique à l'aide d'une liste créée dans l'éditeur de listes, vous contrôlez si un élément d'une liste hiérarchique est modifiable à l'aide de l'option **Élément modifiable** dans l'éditeur de listes. Pour plus d'informations, consultez [Définir les propriétés des énumérations ](https://doc.4d.com/4Dv18/4D/18/Definir-les-proprietes-des-enumerations.300-4575487.fr.html). +- In addition, if you populate the hierarchical list using a list created in the Lists editor, you control whether an item in a hierarchical list is modifiable using the **Modifiable Element** option in the Lists editor. For more information, see [Setting list properties](https://doc.4d.com/4Dv17R6/4D/17-R6/Setting-list-properties.300-4354625.en.html). -## Propriétés prises en charge +## Supported Properties [Bold](properties_Text.md#bold) - [Border Line Style](properties_BackgroundAndBorder.md#border-line-style) - [Bottom](properties_CoordinatesAndSizing.md#bottom) - [Choice List](properties_DataSource.md#choice-list) - [Class](properties_Object.md#css-class) - [Draggable](properties_Action.md#draggable-and-droppable) - [Droppable](properties_Action.md#draggable-and-droppable) - [Enterable](properties_Entry.md#enterable) - [Entry Filter](properties_Entry.md#entry-filter) - [Fill Color](properties_BackgroundAndBorder.md#background-color-fill-color) - [Focusable](properties_Entry.md#focusable) - [Font](properties_Text.md#font) - [Font Color](properties_Text.md#font-color) - [Font Size](properties_Text.md#font-size) - [Height](properties_CoordinatesAndSizing.md#height) - [Help Tip](properties_Help.md#help-tip) - [Hide focus rectangle](properties_Appearance.md#hide-focus-rectangle) - [Horizontal Scroll Bar](properties_Appearance.md#horizontal-scroll-bar) - [Horizontal Sizing](properties_ResizingOptions.md#horizontal-sizing) - [Italic](properties_Text.md#italic) - [Left](properties_CoordinatesAndSizing.md#left) - [Multi-selectable](properties_Action.md#multi-selectable) - [Object Name](properties_Object.md#object-name) - [Right](properties_CoordinatesAndSizing.md#right) - [Top](properties_CoordinatesAndSizing.md#top) - [Type](properties_Object.md#type) - [Underline](properties_Text.md#underline) - [Vertical Scroll Bar](properties_Appearance.md#vertical-scroll-bar) - [Vertical Sizing](properties_ResizingOptions.md#vertical-sizing) - [Variable or Expression](properties_Object.md#variable-or-expression) - [Visibility](properties_Display.md#visibility) - [Width](properties_CoordinatesAndSizing.md#width) \ No newline at end of file From ae03b2b723209c8123b0b6bb928b75f63ebe1725 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:22:10 +0100 Subject: [PATCH 155/260] New translations listbox_overview.md (French) --- .../fr/FormObjects/listbox_overview.md | 838 +++++++++--------- 1 file changed, 419 insertions(+), 419 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/listbox_overview.md b/website/translated_docs/fr/FormObjects/listbox_overview.md index 288b368e8a331c..4ab991518ceae0 100644 --- a/website/translated_docs/fr/FormObjects/listbox_overview.md +++ b/website/translated_docs/fr/FormObjects/listbox_overview.md @@ -5,52 +5,52 @@ title: List Box ## Aperçu -Les list box sont des objets actifs complexes permettant d’afficher et de saisir des données sous forme de tableaux. Ils peuvent être liés au contenu de la base de données, comme les sélections d'entités ("entity selections") et les sections d'enregistrement, ou à tout contenu linguistique tel que les collections et les tableaux. Ils incluent des fonctionnalités avancées concernant la saisie de données, le tri des colonnes, la gestion des événements, l'apparence personnalisée, le déplacement des colonnes, etc. +List boxes are complex active objects that allow displaying and entering data as synchronized columns. They can be bound to database contents such as entity selections and record sections, or to any language contents such as collections and arrays. They include advanced features regarding data entry, column sorting, event managemet, customized appearance, moving of columns, etc. ![](assets/en/FormObjects/listbox.png) -Une list box contient une ou plusieurs colonnes dont le contenu est automatiquement synchronisé. Le nombre de colonnes est en principe illimité (il dépend des ressources de la machine). +A list box contains one or more columns whose contents are automatically synchronized. The number of columns is, in theory, unlimited (it depends on the machine resources). -### Principes d'utilisation basiques +### Basic user features -En exécution, les list box permettent d’afficher et de saisir des données sous forme de listes. Pour passer une cellule en mode édition ([si la saisie est autorisée pour la colonne associée](#managing-entry)), il suffit de cliquer deux fois sur la valeur qu’elle contient : +During execution, list boxes allow displaying and entering data as lists. To make a cell editable ([if entry is allowed for the column](#managing-entry)), simply click twice on the value that it contains: ![](assets/en/FormObjects/listbox_edit.png) -Les utilisateurs peuvent saisir et afficher du texte sur plusieurs lignes au sein d’une cellule de list box. Pour ajouter un retour à la ligne, appuyez sur les touches **Ctrl+Retour chariot** sous Windows, ou appuyez sur les touches **Option+Retour chariot** sous macOS. +Users can enter and display the text on several lines within a list box cell. To add a line break, press **Ctrl+Carriage return** on Windows or **Option+Carriage return** on macOS. -Les booléens et les images peuvent être affichés dans des cellules, ainsi que des dates, des heures ou des nombres. Il est possible de trier les valeurs de colonne en cliquant sur un en-tête ([tri standard](#managing-sorts)). Toutes les colonnes sont automatiquement synchronisées. +Booleans and pictures can be displayed in cells, as well as dates, times, or numbers. It is possible to sort column values by clicking on a header ([standard sort](#managing-sorts)). All columns are automatically synchronized. -Il est également possible de redimensionner chaque colonne, et l'utilisateur peut modifier l'ordre des [colonnes](properties_ListBox.md#locked-columns-and-static-columns) et des [lignes](properties_Action.md#movable-rows) en les déplaçant à l'aide de la souris, si cette action est autorisée. Notez que les list box peuvent être utilisées [en mode hiérarchique](#hierarchical-list-boxes). +It is also possible to resize each column, and the user can modify the order of [columns](properties_ListBox.md#locked-columns-and-static-columns) and [rows](properties_Action.md#movable-rows) by moving them using the mouse, if this action is authorized. Note that list boxes can be used in [hierarchical mode](#hierarchical-list-boxes). -L'utilisateur peut sélectionner une ou plusieurs lignes à l'aide des raccourcis standard : **Maj + clic** pour une sélection adjacente et **Ctrl + clic** (Windows) ou **Commande + clic** (macOS) pour une sélection non adjacente. +The user can select one or more rows using the standard shortcuts: **Shift+click** for an adjacent selection and **Ctrl+click** (Windows) or **Command+click** (macOS) for a non-adjacent selection. -### Parties de list box +### List box parts -Une list box est composée de quatre parties distinctes : +A list box is composed of four distinct parts: -* l’objet list box dans sa globalité, -* les colonnes, -* les en-têtes des colonnes, et -* les pieds des colonnes. +* the list box object in its entirety, +* columns, +* column headers, and +* column footers. ![](assets/en/FormObjects/listbox_parts.png) -Chaque partie dispose de son propre nom d’objet et de propriétés spécifiques. Par exemple, le nombre de colonnes ou la couleur alternée de chaque ligne sont définies dans les propriétés de l’objet list box, la largeur de chaque colonne est définie dans les propriétés des colonnes et la police de l’en-tête est définie dans les propriétés des en-têtes. +Each part has its own name as well as specific properties. For example, the number of columns or the alternating color of each row is set in the list box object properties, the width of each column is set in the column properties, and the font of the header is set in the header properties. -Il est possible d'ajouter une méthode objet à l'objet list box et/ou à chaque colonne de la list box. Les méthodes objet sont appelées dans l'ordre suivant : +It is possible to add an object method to the list box object and/or to each column of the list box. Object methods are called in the following order: -1. Méthode objet de chaque colonne -2. Méthode objet de la list box +1. Object method of each column +2. Object method of the list box -La méthode objet de colonne obtient les événements qui se produisent dans son [en-tête](#list-box-headers) et son [pied](#list-box-footers). +The column object method gets events that occur in its [header](#list-box-headers) and [footer](#list-box-footers). -### Types de list box +### List box types -Il existe différents types de list box avec leurs propres comportements et propriétés spécifiques. The list box type depends on its [Data Source property](properties_Object.md#data-source): +There are several types of list boxes, with their own specific behaviors and properties. The list box type depends on its [Data Source property](properties_Object.md#data-source): - **Arrays**: each column is bound to a 4D array. Array-based list boxes can be displayed as [hierarchical list boxes](listbox_overview.md#hierarchical-list-boxes). - **Selection** (**Current selection** or **Named selection**): each column is bound to an expression (e.g. a field) which is evaluated for every record of the selection. @@ -66,41 +66,41 @@ The 4D Language includes a dedicated "List Box" theme for list box commands, but -## Objets de type List box +## List box objects -### List box de type tableau +### Array list boxes -Dans une list box de type tableau, chaque colonne est associée à un tableau 4D à une dimension ; tous les types de tableaux peuvent être utilisés, à l’exception des tableaux de pointeurs. The number of rows is based on the number of array elements. +In an array list box, each column must be associated with a one-dimensional 4D array; all array types can be used, with the exception of pointer arrays. The number of rows is based on the number of array elements. By default, 4D assigns the name "ColumnX" to each column. You can change it, as well as other column properties, in the [column properties](listbox_overview.md#column-specific-properties). The display format for each column can also be defined using the `OBJECT SET FORMAT` command. > Array type list boxes can be displayed in [hierarchical mode](listbox_overview.md#hierarchical-list-boxes), with specific mechanisms. -Avec les list box de type tableau, les valeurs des colonnes (saisie et affichage) sont gérées à l’aide des commandes du langage 4D. You can also associate a [choice list](properties_DataSource.md#choice-list) with a column in order to control data entry. Les valeurs des colonnes sont gérées à l’aide des commandes de haut niveau du thème List box (telles que `LISTBOX INSERT ROWS` ou `LISTBOX INSERT COLUMN`) ainsi que des commandes de manipulation des tableaux. Par exemple, pour initialiser le contenu d’une colonne, vous pouvez utiliser l’instruction suivante : +With array type list box, the values entered or displayed are managed using the 4D language. You can also associate a [choice list](properties_DataSource.md#choice-list) with a column in order to control data entry. The values of columns are managed using high-level List box commands (such as `LISTBOX INSERT ROWS` or `LISTBOX DELETE ROWS`) as well as array manipulation commands. For example, to initialize the contents of a column, you can use the following instruction: ```4d ARRAY TEXT(varCol;size) ``` -Vous pouvez également utiliser une énumération : +You can also use a list: ```4d LIST TO ARRAY("ListName";varCol) ``` -> **Attention :** Lorsqu’un objet List box contient plusieurs colonnes de tailles différentes, seul le nombre d’éléments correspondant au plus petit tableau est affiché. Il est donc conseillé de veiller à ce que chaque tableau ait le même nombre d’éléments que les autres. A noter également que si une colonne de la list box est “vide” (c'est le cas lorsque le tableau associé n'a pas été correctement déclaré ou dimensionné via le langage), la list box n'affiche aucun contenu. +> **Warning**: When a list box contains several columns of different sizes, only the number of items of the smallest array (column) will be displayed. You should make sure that each array has the same number of elements as the others. Also, if a list box column is empty (this occurs when the associated array was not correctly declared or sized using the language), the list box displays nothing. -### List box de type sélection +### Selection list boxes -Dans ce type de list box, chaque colonne peut être associée à un champ (par exemple `[Employees]LastName)` ou à une expression. The expression can be based on one or more fields (for example, `[Employees]FirstName+" "[Employees]LastName`) or it may simply be a formula (for example `String(Milliseconds)`). The expression can also be a project method, a variable or an array item. You can use the `LISTBOX SET COLUMN FORMULA` and `LISTBOX INSERT COLUMN FORMULA` commands to modify columns programmatically. +In this type of list box, each column can be associated with a field (for example `[Employees]LastName)` or an expression. The expression can be based on one or more fields (for example, `[Employees]FirstName+" "[Employees]LastName`) or it may simply be a formula (for example `String(Milliseconds)`). The expression can also be a project method, a variable or an array item. You can use the `LISTBOX SET COLUMN FORMULA` and `LISTBOX INSERT COLUMN FORMULA` commands to modify columns programmatically. The contents of each row is then evaluated according to a selection of records: the **current selection** of a table or a **named selection**. In the case of a list box based on the current selection of a table, any modification done from the database side is automatically reflected in the list box, and vice versa. The current selection is therefore always the same in both places. -### List box collection ou entity selection +### Collection or Entity selection list boxes In this type of list box, each column must be associated to an expression. The contents of each row is then evaluated per collection element or per entity of the entity selection. @@ -108,7 +108,7 @@ Each element of the collection or each entity is available as an object that can When the data source is an entity selection, any modifications made on the list box side are automatically saved in the database. On the other hand, modifications made on the database side are visible in the list box after touched entities have been reloaded. -When the data source is a collection, any modifications made in the list box values are reflected in the collection. On the other hand, if modifications are done on the collection using for example the various methods of the *Collections* theme, you will need to explicitely notify 4D by reassigning the collection variable to itself, so that the list box contents is refreshed. Par exemple: +When the data source is a collection, any modifications made in the list box values are reflected in the collection. On the other hand, if modifications are done on the collection using for example the various methods of the *Collections* theme, you will need to explicitely notify 4D by reassigning the collection variable to itself, so that the list box contents is refreshed. For example: ```4d myCol:=myCol.push("new value") //display new value in list box @@ -116,147 +116,147 @@ myCol:=myCol.push("new value") //display new value in list box -### Propriétés prises en charge - -Les propriétés prises en charge dépendent du type de list box. - - -| Propriété | List box tableau | Liste box sélection | List box collection ou entity selection | -| ------------------------------------------------------------------------------------------- | ---------------- | ------------------- | --------------------------------------- | -| [Couleur de fond alternée](properties_BackgroundAndBorder.md#alternate-background-color) | X | X | X | -| [Couleur de fond](properties_BackgroundAndBorder.md#background-color) | X | X | X | -| [Gras](properties_Text.md#bold) | X | X | X | -| [Expression couleur de fond](properties_BackgroundAndBorder.md#background-color-expression) | | X | X | -| [Style de la bordure](properties_BackgroundAndBorder.md#border-line-style) | X | X | X | -| [Bas](properties_CoordinatesAndSizing.md#bottom) | X | X | X | -| [Class](properties_Object.md#css-class) | X | X | X | -| [Collection ou entity selection](properties_Object.md#collection-or-entity-selection) | | X | X | -| [Redimensionnement colonnes auto](properties_ResizingOptions.md#column-auto-resizing) | X | X | X | -| [Élément courant](properties_DataSource.md#current-item) | | | X | -| [Position élément courant](properties_DataSource.md#current-item-position) | | | X | -| [Source de données](properties_Object.md#data-source) | X | X | X | -| [Nom formulaire détaillé](properties_ListBox.md#detail-form-name) | | X | | -| [Afficher en-têtes](properties_Headers.md#display-headers) | X | X | X | -| [Afficher pieds](properties_Footers.md#display-footers) | X | X | X | -| [Double-clic sur ligne](properties_ListBox.md#double-click-on-row) | | X | | -| [Glissable](properties_Action.md#droppable) | X | X | X | -| [Déposable](properties_Action.md#droppable) | X | X | X | -| [Focusable](properties_Entry.md#focusable) | X | X | X | -| [Police](properties_Text.md#font) | X | X | X | -| [Couleur de la police](properties_Text.md#font_color) | X | X | X | -| [Expression couleur police](properties_Text.md#font-color-expression) | | X | X | -| [Taille](properties_Text.md#font-size) | X | X | X | -| [Hauteur (list box)](properties_CoordinatesAndSizing.md#height) | X | X | X | -| [Hauteur (en-têtes)](properties_Headers.md#height) | X | X | X | -| [Hauteur (pieds)](properties_Headers.md#height) | X | X | X | -| [Masquer lignes vides finales](properties_BackgroundAndBorder.md#hide-extra-blank-rows) | X | X | X | -| [Cacher rectangle de focus](properties_Appearance.md#hide-focus-rectangle) | X | X | X | -| [Cacher surlignage sélection](properties_Appearance.md#hide-selection-highlight) | X | X | X | -| [List box hiérarchique](properties_Object.md#hierarchical-list-box) | X | | | -| [Ensemble surlignage](properties_ListBox.md#highlight-set) | | X | | -| [Alignement horizontal](properties_Text.md#horizontal-alignment) | X | X | X | -| [Couleur lignes horizontales](properties_Gridlines.md#horizontal-line-color) | X | X | X | -| [Barre de défilement horizontale](properties_Appearance.md#horizontal-scroll-bar) | X | X | X | -| [Dimensionnement horizontal](properties_ResizingOptions.md#horizontal-sizing) | X | X | X | -| [Italique](properties_Text.md#italic) | X | X | X | -| [Gauche](properties_CoordinatesAndSizing.md#left) | X | X | X | -| [Table principale](properties_DataSource.md#table) | | X | | -| [Meta info expression](properties_Text.md#meta-info-expression) | | | X | -| [Méthode](properties_Action.md#method) | X | X | X | -| [Lignes déplaçables](properties_Action.md#movable-rows) | X | | | -| [Sélection temporaire](properties_DataSource.md#selectionName) | | X | | -| [Nombre de colonnes](properties_ListBox.md#number-of-columns) | X | X | X | -| [Nombre de colonnes verrouillées](properties_ListBox.md#number-of-locked-columns) | X | X | X | -| [Nombre de colonnes statiques](properties_ListBox.md#number-of-static-columns) | X | X | X | -| [Nom d'objet](properties_Object.md#object-name) | X | X | X | -| [Droite](properties_CoordinatesAndSizing.md#right) | X | X | X | -| [Tableau couleurs de fond](properties_BackgroundAndBorder.md#row-background-color-array) | X | | | -| [Tableau de contrôle des lignes](properties_ListBox.md#row-control-array) | X | | | -| [Tableau couleurs de police](properties_Text.md#row-font-color-array) | X | | | -| [Hauteur des lignes](properties_CoordinatesAndSizing.md#row-height) | X | | | -| [Tableau hauteurs des lignes](properties_CoordinatesAndSizing.md#row-height-array) | X | | | -| [Tableau de styles](properties_Text.md#row-style-array) | X | | | -| [Eléments sélectionnés](properties_DataSource.md#selected-items) | | | X | -| [Mode de sélection](properties_ListBox.md#selection-mode) | X | X | X | -| [Saisie sur clic unique](properties_Entry.md#single-click-edit) | X | X | X | -| [Triable](properties_Action.md#sortable) | X | X | X | -| [Action standard](properties_Action.md#standard-action) | X | | | -| [Expression style](properties_Text.md#style-expression) | | X | X | -| [Haut](properties_CoordinatesAndSizing.md#top) | X | X | X | -| [Transparent](properties_BackgroundAndBorder.md#transparent) | X | X | X | -| [Type](properties_Object.md#type) | X | X | X | -| [Souligné](properties_Text.md#underline) | X | X | X | -| [Variable ou expression](properties_Object.md#variable-or-expression) | X | X | | -| [Alignement vertical](properties_Text.md#vertical-alignment) | X | X | X | -| [Couleur lignes verticales](properties_Gridlines.md#vertical-line-color) | X | X | X | -| [Barre de défilement verticale](properties_Appearance.md#vertical-scroll-bar) | X | X | X | -| [Dimensionnement vertical](properties_ResizingOptions.md#vertical-sizing) | X | X | X | -| [Visibilité](properties_Display.md#visibility) | X | X | X | -| [Largeur](properties_CoordinatesAndSizing.md#width) | X | X | X | - - -> Les colonnes, en-têtes et pieds de list box prennent en charge des propriétés spécifiques. - - -### Événements formulaire pris en charge - - -| Evénement formulaire | Propriétés supplémentaires retournées (voir [Evénement formulaire](https://doc.4d.com/4Dv18/4D/18/FORM-Evenement.301-4522191.fr.html) pour les propriétés principales) | Commentaires | -| ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | -| Sur après modification |

  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | | -| Sue après frappe clavier |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | | -| Sur après tri |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [headerName](#additional-properties)
  • | *Les formules composées ne peuvent pas être triées.
    (ex : This.firstName + This.lastName)* | -| Sur clic alternatif |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | *Listbox tableau uniquement* | -| Sur avant saisie |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | | -| Sue avant frappe clavier |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | | -| Sur début survol |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | | -| Sur clic |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | | -| Sur fermeture corps |
  • [row](#additional-properties)
  • | *List box Sélection courante et Sélection temporaire uniquement* | -| Sur contracter |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | *List box hiérarchiques uniquement* | -| Sur déplacement colonne |
  • [columnName](#additional-properties)
  • [newPosition](#additional-properties)
  • [oldPosition](#additional-properties)
  • | | -| Sur redimensionnement colonne |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [newSize](#additional-properties)
  • [oldSize](#additional-properties)
  • | | -| Sur données modifiées |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | | -| Sur action suppression |
  • [row](#additional-properties)
  • | | -| Sur affichage corps |
  • [isRowSelected](#additional-properties)
  • [row](#additional-properties)
  • | | -| Sur double clic |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | | -| Sur glisser |
  • [area](#additional-properties)
  • [areaName](#additional-properties)
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | | -| Sur déposer |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | | -| Sur déployer |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | *List box hiérarchiques uniquement* | -| Sur clic pied |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [footerName](#additional-properties)
  • | *List box Tableau, Sélection courante et Sélection temporaire uniquement* | -| On Getting Focus |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | *Propriétés supplémentaires retournées uniquement lors de la modification d'une cellule* | -| Sur clic entête |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [headerName](#additional-properties)
  • | | -| On Load | | | -| On Losing Focus |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | *Propriétés supplémentaires retournées uniquement lorsque la modification d'une cellule est achevée* | -| Sur début survol |
  • [area](#additional-properties)
  • [areaName](#additional-properties)
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | | -| Sur fin survol | | | -| Sur survol |
  • [area](#additional-properties)
  • [areaName](#additional-properties)
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | | -| Sur ouverture corps |
  • [row](#additional-properties)
  • | *List box Sélection courante et Sélection temporaire uniquement* | -| Sur déplacement ligne |
  • [newPosition](#additional-properties)
  • [oldPosition](#additional-properties)
  • | *Listbox tableau uniquement* | -| Sur nouvelle sélection | | | -| Sur défilement |
  • [horizontalScroll](#additional-properties)
  • [verticalScroll](#additional-properties)
  • | | -| On Unload | | | - - -#### Propriétés supplémentaires - -Les événements formulaire sur les list box ou colonnes de list box peuvent retourner les propriétés supplémentaires suivantes : - -| Propriété | Type | Description | -| ---------------- | ----------- | --------------------------------------------------------------------- | -| area | Texte | List box object area ("header", "footer", "cell") | -| areaName | Texte | Name of the area | -| column | entier long | Column number | -| columnName | Texte | Name of the column | -| footerName | Texte | Name of the footer | -| headerName | Texte | Name of the header | -| horizontalScroll | entier long | Positive if scroll is towards the right, negative if towards the left | -| isRowSelected | boolean | True if row is selected, else False | -| newPosition | entier long | New position of the column or row | -| newSize | entier long | New size (in pixels) of the column or row | -| oldPosition | entier long | Previous position of the column or row | -| oldSize | entier long | Previous size (in pixels) of the column or row | -| row | entier long | Row number | -| verticalScroll | entier long | Positive if scroll is towards the bottom, negative if towards the top | +### Supported Properties + +Supported properties depend on the list box type. + + +| Property | Array list box | Selection list box | Collection or Entity Selection list box | +| -------------------------------------------------------------------------------------------- | -------------- | ------------------ | --------------------------------------- | +| [Alternate Background Color](properties_BackgroundAndBorder.md#alternate-background-color) | X | X | X | +| [Background Color](properties_BackgroundAndBorder.md#background-color) | X | X | X | +| [Bold](properties_Text.md#bold) | X | X | X | +| [Background Color Expression](properties_BackgroundAndBorder.md#background-color-expression) | | X | X | +| [Border Line Style](properties_BackgroundAndBorder.md#border-line-style) | X | X | X | +| [Bottom](properties_CoordinatesAndSizing.md#bottom) | X | X | X | +| [Class](properties_Object.md#css-class) | X | X | X | +| [Collection or entity selection](properties_Object.md#collection-or-entity-selection) | | X | X | +| [Column Auto-Resizing](properties_ResizingOptions.md#column-auto-resizing) | X | X | X | +| [Current item](properties_DataSource.md#current-item) | | | X | +| [Current item position](properties_DataSource.md#current-item-position) | | | X | +| [Data Source](properties_Object.md#data-source) | X | X | X | +| [Detail Form Name](properties_ListBox.md#detail-form-name) | | X | | +| [Display Headers](properties_Headers.md#display-headers) | X | X | X | +| [Display Footers](properties_Footers.md#display-footers) | X | X | X | +| [Double-click on row](properties_ListBox.md#double-click-on-row) | | X | | +| [Draggable](properties_Action.md#droppable) | X | X | X | +| [Droppable](properties_Action.md#droppable) | X | X | X | +| [Focusable](properties_Entry.md#focusable) | X | X | X | +| [Font](properties_Text.md#font) | X | X | X | +| [Font Color](properties_Text.md#font_color) | X | X | X | +| [Font Color Expression](properties_Text.md#font-color-expression) | | X | X | +| [Font Size](properties_Text.md#font-size) | X | X | X | +| [Height (list box)](properties_CoordinatesAndSizing.md#height) | X | X | X | +| [Height (headers)](properties_Headers.md#height) | X | X | X | +| [Height (footers)](properties_Footers.md#height) | X | X | X | +| [Hide extra blank rows](properties_BackgroundAndBorder.md#hide-extra-blank-rows) | X | X | X | +| [Hide focus rectangle](properties_Appearance.md#hide-focus-rectangle) | X | X | X | +| [Hide selection highlight](properties_Appearance.md#hide-selection-highlight) | X | X | X | +| [Hierarchical List Box](properties_Object.md#hierarchical-list-box) | X | | | +| [Highlight Set](properties_ListBox.md#highlight-set) | | X | | +| [Horizontal Alignment](properties_Text.md#horizontal-alignment) | X | X | X | +| [Horizontal Line Color](properties_Gridlines.md#horizontal-line-color) | X | X | X | +| [Horizontal Scroll Bar](properties_Appearance.md#horizontal-scroll-bar) | X | X | X | +| [Horizontal Sizing](properties_ResizingOptions.md#horizontal-sizing) | X | X | X | +| [Italic](properties_Text.md#italic) | X | X | X | +| [Left](properties_CoordinatesAndSizing.md#left) | X | X | X | +| [Master Table](properties_DataSource.md#table) | | X | | +| [Meta info expression](properties_Text.md#meta-info-expression) | | | X | +| [Method](properties_Action.md#method) | X | X | X | +| [Movable Rows](properties_Action.md#movable-rows) | X | | | +| [Named Selection](properties_DataSource.md#selectionName) | | X | | +| [Number of Columns](properties_ListBox.md#number-of-columns) | X | X | X | +| [Number of Locked Columns](properties_ListBox.md#number-of-locked-columns) | X | X | X | +| [Number of Static Columns](properties_ListBox.md#number-of-static-columns) | X | X | X | +| [Object Name](properties_Object.md#object-name) | X | X | X | +| [Right](properties_CoordinatesAndSizing.md#right) | X | X | X | +| [Row Background Color Array](properties_BackgroundAndBorder.md#row-background-color-array) | X | | | +| [Row Control Array](properties_ListBox.md#row-control-array) | X | | | +| [Row Font Color Array](properties_Text.md#row-font-color-array) | X | | | +| [Row Height](properties_CoordinatesAndSizing.md#row-height) | X | | | +| [Row Height Array](properties_CoordinatesAndSizing.md#row-height-array) | X | | | +| [Row Style Array](properties_Text.md#row-style-array) | X | | | +| [Selected Items](properties_DataSource.md#selected-items) | | | X | +| [Selection Mode](properties_ListBox.md#selection-mode) | X | X | X | +| [Single-Click Edit](properties_Entry.md#single-click-edit) | X | X | X | +| [Sortable](properties_Action.md#sortable) | X | X | X | +| [Standard action](properties_Action.md#standard-action) | X | | | +| [Style Expression](properties_Text.md#style-expression) | | X | X | +| [Top](properties_CoordinatesAndSizing.md#top) | X | X | X | +| [Transparent](properties_BackgroundAndBorder.md#transparent) | X | X | X | +| [Type](properties_Object.md#type) | X | X | X | +| [Underline](properties_Text.md#underline) | X | X | X | +| [Variable or Expression](properties_Object.md#variable-or-expression) | X | X | | +| [Vertical Alignment](properties_Text.md#vertical-alignment) | X | X | X | +| [Vertical Line Color](properties_Gridlines.md#vertical-line-color) | X | X | X | +| [Vertical Scroll Bar](properties_Appearance.md#vertical-scroll-bar) | X | X | X | +| [Vertical Sizing](properties_ResizingOptions.md#vertical-sizing) | X | X | X | +| [Visibility](properties_Display.md#visibility) | X | X | X | +| [Width](properties_CoordinatesAndSizing.md#width) | X | X | X | + + +> List box columns, headers and footers support specific properties. + + +### Supported Form Events + + +| Form event | Additional Properties Returned (see [Form event](https://doc.4d.com/4Dv18/4D/18/FORM-Event.301-4522191.en.html) for main properties) | Comments | +| ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------- | +| Sur après modification |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | | +| Sue après frappe clavier |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | | +| Sur après tri |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [headerName](#additional-properties)
  • | *Compound formulas cannot be sorted.
    (e.g., This.firstName + This.lastName)* | +| Sur clic alternatif |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | *Arrays list boxes only* | +| Sur avant saisie |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | | +| Sue avant frappe clavier |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | | +| Sur début survol |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | | +| Sur clic |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | | +| Sur fermeture corps |
  • [row](#additional-properties)
  • | *Current Selection & Named Selection list boxes only* | +| Sur contracter |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | *Hierarchical list box only* | +| Sur déplacement colonne |
  • [columnName](#additional-properties)
  • [newPosition](#additional-properties)
  • [oldPosition](#additional-properties)
  • | | +| Sur redimensionnement colonne |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [newSize](#additional-properties)
  • [oldSize](#additional-properties)
  • | | +| Sur données modifiées |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | | +| Sur action suppression |
  • [row](#additional-properties)
  • | | +| Sur affichage corps |
  • [isRowSelected](#additional-properties)
  • [row](#additional-properties)
  • | | +| Sur double clic |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | | +| Sur glisser |
  • [area](#additional-properties)
  • [areaName](#additional-properties)
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | | +| Sur déposer |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | | +| Sur déployer |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | *Hierarchical list box only* | +| Sur clic pied |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [footerName](#additional-properties)
  • | *Arrays, Current Selection & Named Selection list boxes only* | +| On Getting Focus |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | *Additional properties returned only when editing a cell* | +| Sur clic entête |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [headerName](#additional-properties)
  • | | +| On Load | | | +| On Losing Focus |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | *Additional properties returned only when editing a cell has been completed* | +| Sur début survol |
  • [area](#additional-properties)
  • [areaName](#additional-properties)
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | | +| Sur fin survol | | | +| Sur survol |
  • [area](#additional-properties)
  • [areaName](#additional-properties)
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | | +| Sur ouverture corps |
  • [row](#additional-properties)
  • | *Current Selection & Named Selection list boxes only* | +| Sur déplacement ligne |
  • [newPosition](#additional-properties)
  • [oldPosition](#additional-properties)
  • | *Arrays list boxes only* | +| Sur nouvelle sélection | | | +| Sur défilement |
  • [horizontalScroll](#additional-properties)
  • [verticalScroll](#additional-properties)
  • | | +| On Unload | | | + + +#### Additional Properties + +Form events on list box or list box column objects may return the following additional properties: + +| Property | Type | Description | +| ---------------- | ------- | --------------------------------------------------------------------- | +| area | text | List box object area ("header", "footer", "cell") | +| areaName | text | Name of the area | +| column | longint | Column number | +| columnName | text | Name of the column | +| footerName | text | Name of the footer | +| headerName | text | Name of the header | +| horizontalScroll | longint | Positive if scroll is towards the right, negative if towards the left | +| isRowSelected | boolean | True if row is selected, else False | +| newPosition | longint | New position of the column or row | +| newSize | longint | New size (in pixels) of the column or row | +| oldPosition | longint | Previous position of the column or row | +| oldSize | longint | Previous size (in pixels) of the column or row | +| row | longint | Row number | +| verticalScroll | longint | Positive if scroll is towards the bottom, negative if towards the top | > If an event occurs on a "fake" column or row that doesn't exist, an empty string is typically returned. @@ -264,7 +264,7 @@ Les événements formulaire sur les list box ou colonnes de list box peuvent ret -## Colonnes de list box +## List box columns A list box is made of one or more column object(s) which have specific properties. You can select a list box column in the Form editor by clicking on it when the list box object is selected: @@ -274,50 +274,50 @@ You can set standard properties (text, background color, etc.) for each column o > You can define the [Expression type](properties_Object.md#expression-type) for array list box columns (String, Text, Number, Date, Time, Picture, Boolean, or Object). -### Propriétés spécifiques des list box +### Column Specific Properties [Alpha Format](properties_Display.md#alpha-format) - [Alternate Background Color](properties_BackgroundAndBorder.md#alternate-background-color) - [Automatic Row Height](properties_CoordinatesAndSizing.md#automatic-row-height) - [Background Color](properties_Text.md#background-color) - [Background Color Expression](properties_BackgroundAndBorder.md#background-color-expression) - [Bold](properties_Text.md#bold) - [Choice List](properties_DataSource.md#choice-list) - [Class](properties_Object.md#css-class) - [Data Type (selection and collection list box column)](properties_DataSource.md#data-type) - [Date Format](properties_Display.md#date-format) - [Default Values](properties_DataSource.md#default-values) - [Display Type](properties_Display.md#display-type) - [Enterable](properties_Entry.md#enterable) - [Entry Filter](properties_Entry.md#entry-filter) - [Excluded List](properties_RangeOfValues.md#excluded-list) - [Expression](properties_DataSource.md#expression) - [Expression Type (array list box column)](properties_Object.md#expression-type) - [Font](properties_Text.md#font) - [Font Color](properties_Text.md#font-color) - [Horizontal Alignment](properties_Text.md#horizontal-alignment) - [Italic](properties_Text.md#italic) - [Invisible](properties_Display.md#visibility) - [Maximum Width](properties_CoordinatesAndSizing.md#maximum-width) - [Method](properties_Action.md#method) - [Minimum Width](properties_CoordinatesAndSizing.md#minimum-width) - [Multi-style](properties_Text.md#multi-style) - [Number Format](properties_Display.md#number-format) - [Object Name](properties_Object.md#object-name) - [Picture Format](properties_Display.md#picture-format) - [Resizable](properties_ResizingOptions.md#resizable) - [Required List](properties_RangeOfValues.md#required-list) - [Row Background Color Array](properties_BackgroundAndBorder.md#row-background-color-array) - [Row Font Color Array](properties_Text.md#row-font-color-array) - [Row Style Array](properties_Text.md#row-style-array) - [Save as](properties_DataSource.md#save-as) - [Style Expression](properties_Text.md#style-expression) - [Text when False/Text when True](properties_Display.md#text-when-false-text-when-true) - [Time Format](properties_Display.md#time-format) - [Truncate with ellipsis](properties_Display.md#truncate-with-ellipsis) - [Underline](properties_Text.md#underline) - [Variable or Expression](properties_Object.md#variable-or-expression) - [Vertical Alignment](properties_Text.md#vertical-alignment) - [Width](properties_CoordinatesAndSizing.md#width) - [Wordwrap](properties_Display.md#wordwrap) -### Événements formulaire pris en charge - -| Evénement formulaire | Propriétés supplémentaires retournées (voir [Evénement formulaire](https://doc.4d.com/4Dv18/4D/18/FORM-Evenement.301-4522191.fr.html) pour les propriétés principales) | Commentaires | -| ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | -| Sur après modification |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | | -| Sue après frappe clavier |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | | -| Sur après tri |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [headerName](#additional-properties)
  • | *Les formules composées ne peuvent pas être triées.
    (ex : This.firstName + This.lastName)* | -| Sur clic alternatif |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | *Listbox tableau uniquement* | -| Sur avant saisie |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | | -| Sue avant frappe clavier |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | | -| Sur début survol |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | | -| Sur clic |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | | -| Sur déplacement colonne |
  • [columnName](#additional-properties)
  • [newPosition](#additional-properties)
  • [oldPosition](#additional-properties)
  • | | -| Sur redimensionnement colonne |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [newSize](#additional-properties)
  • [oldSize](#additional-properties)
  • | | -| Sur données modifiées |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | | -| Sur double clic |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | | -| Sur glisser |
  • [area](#additional-properties)
  • [areaName](#additional-properties)
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | | -| Sur déposer |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | | -| Sur clic pied |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [footerName](#additional-properties)
  • | *List box Tableau, Sélection courante et Sélection temporaire uniquement* | -| On Getting Focus |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | *Propriétés supplémentaires retournées uniquement lors de la modification d'une cellule* | -| Sur clic entête |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [headerName](#additional-properties)
  • | | -| On Load | | | -| On Losing Focus |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | *Propriétés supplémentaires retournées uniquement lorsque la modification d'une cellule est achevée* | -| Sur déplacement ligne |
  • [newPosition](#additional-properties)
  • [oldPosition](#additional-properties)
  • | *Listbox tableau uniquement* | -| Sur défilement |
  • [horizontalScroll](#additional-properties)
  • [verticalScroll](#additional-properties)
  • | | -| On Unload | | | - - -## En-têtes de list box - -> Pour pouvoir accéder aux propriétés des en-têtes d'une list box, vous devez avoir coché l'option [Afficher en-têtes](properties_Headers.md#display-headers) dans la Liste des propriétés de la list box. - -Lorsque les en-têtes sont affichés, vous pouvez sélectionner un en-tête dans l'éditeur de formulaires en cliquant dessus lorsque l'objet List box est sélectionné : +### Supported Form Events + +| Form event | Additional Properties Returned (see [Form event](https://doc.4d.com/4Dv18/4D/18/FORM-Event.301-4522191.en.html) for main properties) | Comments | +| ----------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | +| Sur après modification |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | | +| Sue après frappe clavier |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | | +| Sur après tri |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [headerName](#additional-properties)
  • | *Compound formulas cannot be sorted.
    (e.g., This.firstName + This.lastName)* | +| Sur clic alternatif |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | *Arrays list boxes only* | +| Sur avant saisie |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | | +| Sue avant frappe clavier |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | | +| Sur début survol |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | | +| Sur clic |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | | +| Sur déplacement colonne |
  • [columnName](#additional-properties)
  • [newPosition](#additional-properties)
  • [oldPosition](#additional-properties)
  • | | +| Sur redimensionnement colonne |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [newSize](#additional-properties)
  • [oldSize](#additional-properties)
  • | | +| Sur données modifiées |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | | +| Sur double clic |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | | +| Sur glisser |
  • [area](#additional-properties)
  • [areaName](#additional-properties)
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | | +| Sur déposer |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | | +| Sur clic pied |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [footerName](#additional-properties)
  • | *Arrays, Current Selection & Named Selection list boxes only* | +| On Getting Focus |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | *Additional properties returned only when editing a cell* | +| Sur clic entête |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [headerName](#additional-properties)
  • | | +| On Load | | | +| On Losing Focus |
  • [column](#additional-properties)
  • [columnName](#additional-properties)
  • [row](#additional-properties)
  • | *Additional properties returned only when editing a cell has been completed* | +| Sur déplacement ligne |
  • [newPosition](#additional-properties)
  • [oldPosition](#additional-properties)
  • | *Arrays list boxes only* | +| Sur défilement |
  • [horizontalScroll](#additional-properties)
  • [verticalScroll](#additional-properties)
  • | | +| On Unload | | | + + +## List box headers + +> To be able to access the header properties of a list box, you must enable the [Display Headers](properties_Headers.md#display-headers) option of the list box. + +When headers are displayed, you can select a header in the Form editor by clicking it when the list box object is selected: ![](assets/en/FormObjects/listbox_header.png) -Vous pouvez définir, pour chaque en-tête de colonne de List box, des propriétés standard de texte : dans ce cas, ces propriétés sont prioritaires par rapport à celles de la colonne ou de la list box. +You can set standard text properties for each column header of the list box; in this case, these properties have priority over those of the column or of the list box itself. -Vous pouvez également accéder à des propriétés spécifiques aux en-têtes. Specifically, an icon can be displayed in the header next to or in place of the column title, for example when performing [customized sorts](#managing-sorts). +In addition, you have access to the specific properties for headers. Specifically, an icon can be displayed in the header next to or in place of the column title, for example when performing [customized sorts](#managing-sorts). ![](assets/en/FormObjects/lbHeaderIcon.png) @@ -325,24 +325,24 @@ At runtime, events that occur in a header are generated in the [list box column When the `OBJECT SET VISIBLE` command is used with a header, it is applied to all headers, regardless of the individual element set by the command. For example, `OBJECT SET VISIBLE(*;"header3";False)` will hide all headers in the list box object to which *header3* belongs and not simply this header. -### Propriétés spécifiques des en-têtes +### Header Specific Properties -[Gras](properties_Text.md#bold) - [Css Class](properties_Object.md#css-class) - [Police](properties_Text.md#font) - [Couleur de fond](properties_Text.md#font-color) - [Message d'aide](properties_Help.md#help-tip) - [Alignement horizontal ](properties_Text.md#horizontal-alignment) - [Emplacement de l'icône](properties_TextAndPicture.md#icon-location) - [Italique](properties_Text.md#italic) - [Nom](properties_Object.md#object-name) - [Chemin d'accès](properties_TextAndPicture.md#picture-pathname) - [Titre](properties_Object.md#title) - [Souligné](properties_Text.md#underline) - [Variable ou expression](properties_Object.md#variable-or-expression) - [Alignement vertical](properties_Text.md#vertical-alignment) - [Largeur](properties_CoordinatesAndSizing.md#width) +[Bold](properties_Text.md#bold) - [Class](properties_Object.md#css-class) - [Font](properties_Text.md#font) - [Font Color](properties_Text.md#font-color) - [Help Tip](properties_Help.md#help-tip) - [Horizontal Alignment](properties_Text.md#horizontal-alignment) - [Icon Location](properties_TextAndPicture.md#icon-location) - [Italic](properties_Text.md#italic) - [Object Name](properties_Object.md#object-name) - [Pathname](properties_TextAndPicture.md#picture-pathname) - [Title](properties_Object.md#title) - [Underline](properties_Text.md#underline) - [Variable or Expression](properties_Object.md#variable-or-expression) - [Vertical Alignment](properties_Text.md#vertical-alignment) - [Width](properties_CoordinatesAndSizing.md#width) -## Pieds de List box -> Pour pouvoir accéder aux propriétés des pieds d'une List box, vous devez avoir coché l'option [Afficher pieds](properties_Footers.md#display-footers) dans la Liste des propriétés de la List box. +## List box footers +> To be able to access footer properties for a list box, you must enable the [Display Footers](properties_Footers.md#display-footers) option. -Les List box peuvent contenir des zones de "pied de page" non saisissables, affichant des informations supplémentaires. Dans les données présentées sous forme de tableaux, les pieds sont généralement utilisés pour afficher des calculs, tels que des sommes ou des moyennes. +List boxes can contain non-enterable "footers" displaying additional information. For data shown in table form, footers are usually used to display calculations such as totals or averages. -Lorsque les pieds sont affichés, vous pouvez sélectionner un pied de list box dans l’éditeur de formulaires en cliquant dessus lorsque l’objet List box est sélectionné : +When footers are displayed, you can click to select one when the list box object is selected in the Form editor: ![](assets/en/FormObjects/listbox_footers.png) -Vous pouvez définir, pour chaque pied de colonne de List box, des propriétés standard de texte : dans ce cas, ces propriétés sont prioritaires par rapport à celles de la colonne ou de la list box. You can also access specific properties for footers. In particular, you can insert a [custom or automatic calculation](properties_Object.md#variable-calculation). +For each List box column footer, you can set standard text properties: in this case, these properties take priority over those of the column or of the list box. You can also access specific properties for footers. In particular, you can insert a [custom or automatic calculation](properties_Object.md#variable-calculation). At runtime, events that occur in a footer are generated in the [list box column object method](#object-methods). @@ -390,18 +390,18 @@ In order to preserve data consistency for selection type and entity selection ty The typical sequence of events generated during data entry or modification is as follows: -| Action | Type(s) de Listbox | Séquence d'événements | +| Action | Listbox type(s) | Sequence of events | | ------------------------------------------------------------------------------- | --------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| A cell switches to edit mode (user action or a call to the `EDIT ITEM` command) | Tous | Sur avant saisie | -| | Tous | On Getting Focus | -| Its value is modified | Tous | Sue avant frappe clavier | -| | Tous | Sue après frappe clavier | -| | Tous | Sur après modification | -| A user validates and leaves the cell | List box de type sélection | Save | +| A cell switches to edit mode (user action or a call to the `EDIT ITEM` command) | All | Sur avant saisie | +| | All | On Getting Focus | +| Its value is modified | All | Sue avant frappe clavier | +| | All | Sue après frappe clavier | +| | All | Sur après modification | +| A user validates and leaves the cell | Selection list boxes | Save | | | Record selection list boxes | On saving an existing record trigger (if set) | -| | List box de type sélection | On Data Change(*) | +| | Selection list boxes | On Data Change(*) | | | Entity selection list boxes | Entity is saved with automerge option, optimistic lock (see entity.save( )). In case of successful save, the entity is refreshed with the last update done. If the save operation fails, an error is displayed | -| | Tous | On Losing Focus | +| | All | On Losing Focus | (*) With entity selection list boxes, in the On Data Change event: - the [Current item](properties_DataSource.md#current-item) object contains the value before modification. @@ -413,19 +413,19 @@ The typical sequence of events generated during data entry or modification is as ## Managing selections -La gestion des sélections s'effectue différemment selon que la list box de type tableau, sélection d'enregistrements, ou collection/entity selection : +Selections are managed differently depending on whether the list box is based on an array, on a selection of records, or on a collection/entity selection: -- **List box de type sélection :** les sélections sont gérées par l'intermédiaire d'un ensemble appelé par défaut `$ListboxSetN` (N débute à 0 et est incrémenté en fonction du nombre de list box dans le formulaire), que vous pouvez modifier si nécessaire. Cet ensemble est [défini dans les propriétés](properties_ListBox.md#highlight-set) de la list box. Il est maintenu automatiquement par 4D : si l'utilisateur sélectionne une ou plusieurs ligne(s) dans la list box, l'ensemble est immédiatement mis à jour. A l'inverse, il est possible d'utiliser les commandes du thème "Ensembles" afin de modifier par programmation la sélection dans la list box. +- **Selection list box**: Selections are managed by a set, which you can modify if necessary, called `$ListboxSetX` by default (where X starts at 0 and is incremented based on the number of list boxes in the form). This set is [defined in the properties](properties_ListBox.md#highlight-set) of the list box. It is automatically maintained by 4D: If the user selects one or more rows in the list box, the set is immediately updated. On the other hand, it is also possible to use the commands of the "Sets" theme in order to modify the selection of the list box via programming. -- **List box de type collection/entity selection** : les sélections sont gérées via des propriétés de list box dédiées : - - [Elément courant](properties_DataSource.md#current-item) est un objet qui reçoit l'élément/l'entité sélectionné(e), - - [Eléments sélectionnés](properties_DataSource.md#selected-items) retourne la collection des éléments sélectionnés, - - [Position élément courant](properties_DataSource.md#current-item-position) retourne la position de l'élément ou de l'entité sélectionné(e). +- **Collection/Entity selection list box**: Selections are managed through dedicated list box properties: + - [Current item](properties_DataSource.md#current-item) is an object that will receive the selected element/entity + - [Selected Items](properties_DataSource.md#selected-items) is a collection of selected items + - [Current item position](properties_DataSource.md#current-item-position) returns the position of the selected element or entity. -- **List box de type tableau :** la commande `LISTBOX SELECT ROW` permet de sélectionner par programmation une ou plusieurs lignes de list box. En outre, [la variable associée à l’objet List box](properties_Object.md#variable-or-expression) peut être utilisée pour lire, fixer ou stocker les sélections de lignes dans l’objet. Cette variable correspond à un tableau de booléens automatiquement créé et maintenu par 4D. La taille de ce tableau est déterminée par celle de la list box : il contient le même nombre d’éléments que le plus petit tableau associé aux colonnes. Chaque élément de ce tableau contient `Vrai` si la ligne correspondante est sélectionnée et `Faux` sinon. 4D met à jour le contenu de ce tableau en fonction des actions utilisateur. A l’inverse, vous pouvez modifier la valeur des éléments de ce tableau afin de modifier la sélection dans la list box. En revanche, vous ne pouvez ni insérer ni supprimer de ligne dans ce tableau ; il n’est pas possible non plus de le retyper. La commande `Count in array` est utile dans ce cas pour connaître le nombre de lignes sélectionnées. Par exemple, cette méthode permet d’inverser la sélection de la première ligne de la list box (type tableau) : +- **Array list box**: The `LISTBOX SELECT ROW` command can be used to select one or more rows of the list box by programming. The [variable linked to the List box object](properties_Object.md#variable-or-expression) is used to get, set or store selections of object rows. This variable corresponds to a Boolean array that is automatically created and maintained by 4D. The size of this array is determined by the size of the list box: it contains the same number of elements as the smallest array linked to the columns. Each element of this array contains `True` if the corresponding line is selected and `False` otherwise. 4D updates the contents of this array depending on user actions. Inversely, you can change the value of array elements to change the selection in the list box. On the other hand, you can neither insert nor delete rows in this array; you cannot retype rows either. The `Count in array` command can be used to find out the number of selected lines. For example, this method allows inverting the selection of the first row of the (array type) list box: ```4d ARRAY BOOLEAN(tBListBox;10) - // tBListBox est le nom de la variable associée à la List box dans le formulaire + //tBListBox is the name of the list box variable in the form If(tBListBox{1}=True) tBListBox{1}:=False Else @@ -447,7 +447,7 @@ You can then define specific background colors, font colors and/or font styles b > You can use the `lk inherited` constant to mimic the current appearance of the list box (e.g., font color, background color, font style, etc.). -#### List box de type sélection +#### Selection list boxes To determine which rows are selected, you have to check whether they are included in the set indicated in the [Highlight Set](properties_ListBox.md#highlight-set) property of the list box. You can then define the appearance of selected rows using one or more of the relevant [color or style expression property](#using-arrays-and-expressions). @@ -457,7 +457,7 @@ Keep in mind that expressions are automatically re-evaluated each time the: - form window containing the list box becomes, or ceases to be, the frontmost window. -#### List box de type tableau +#### Array list boxes You have to parse the Boolean array [Variable or Expression](properties_Object.md#variable-or-expression) associated with the list box to determine whether rows are selected or not selected. You can then define the appearance of selected rows using one or more of the relevant [color or style array property](#using-arrays-and-expressions). @@ -468,7 +468,7 @@ Note that list box arrays used for defining the appearance of selected rows must - `On Activate` (form property) - `On Deactivate` (form property) ...depending on whether and how you want to visually represent changes of focus in selections. -##### Exemple +##### Example You have chosen to hide the system highlight and want to display list box selections with a green background color, as shown here: @@ -600,10 +600,10 @@ To restore the original appearance of the list box, you can: Depending of the list box type, you can use different properties to customize row colors, styles and display: -| Propriété | List box tableau | Liste box sélection | List box collection ou entity selection | -| ---------------- | ---------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Background color | [Tableau couleurs de fond](properties_BackgroundAndBorder.md#row-background-color-array) | [Expression couleur de fond](properties_BackgroundAndBorder.md#background-color-expression) | [Background Color Expression](properties_BackgroundAndBorder.md#background-color-expression) or [Meta info expression](properties_Text.md#meta-info-expression) | -| Font color | [Tableau couleurs de police](properties_Text.md#row-font-color-array) | [Expression couleur police](properties_Text.md#font-color-expression) | [Font Color Expression](properties_Text.md#font-color-expression) or [Meta info expression](properties_Text.md#meta-info-expression) | +| Property | Array list box | Selection list box | Collection or Entity Selection list box | +| ---------------- | ------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Background color | [Row Background Color Array](properties_BackgroundAndBorder.md#row-background-color-array) | [Background Color Expression](properties_BackgroundAndBorder.md#background-color-expression) | [Background Color Expression](properties_BackgroundAndBorder.md#background-color-expression) or [Meta info expression](properties_Text.md#meta-info-expression) | +| Font color | [Row Font Color Array](properties_Text.md#row-font-color-array) | [Font Color Expression](properties_Text.md#font-color-expression) | [Font Color Expression](properties_Text.md#font-color-expression) or [Meta info expression](properties_Text.md#meta-info-expression) | Font style| [Row Style Array](properties_Text.md#row-style-array)|[Style Expression](properties_Text.md#style-expression)|[Style Expression](properties_Text.md#style-expression) or [Meta info expression](properties_Text.md#meta-info-expression)| Display|[Row Control Array](properties_ListBox.md#row-control-array)|-|-| @@ -619,7 +619,7 @@ Two printing modes are available: **preview mode** - which can be used to print Printing a list box in preview mode consists of directly printing the list box and the form that contains it using the standard print commands or the **Print** menu command. The list box is printed as it is in the form. This mode does not allow precise control of the printing of the object; in particular, it does not allow you to print all the rows of a list box that contains more rows than it can display. -### Mode avancé +### Advanced mode In this mode, the printing of list boxes is carried out by programming, via the `Print object` command (project forms and table forms are supported). The `LISTBOX GET PRINT INFORMATION` command is used to control the printing of the object. @@ -633,25 +633,25 @@ In this mode: -## List box hiérarchiques +## Hierarchical list boxes -Une list box hiérarchique est une list box dans laquelle le contenu de la première colonne apparaît sous forme hiérarchique. Ce type de représentation est adapté à la présentation d’informations comportant des valeurs répétées et/ou hiérarchiquement dépendantes (pays/région/ville...). +A hierarchical list box is a list box in which the contents of the first column appears in hierarchical form. This type of representation is adapted to the presentation of information that includes repeated values and/or values that are hierarchically dependent (country/region/city and so on). -> Seules les [list box de type tableau](#array-list-boxes) peuvent être hiérarchiques. +> Only [array type list boxes](#array-list-boxes) can be hierarchical. -Les list box hiérarchiques constituent un mode de représentation particulier des données, mais ne modifient pas la structure de ces données (les tableaux). Les list box hiérarchiques sont gérées exactement de la même manière que les list box non hiérarchiques. +Hierarchical list boxes are a particular way of representing data but they do not modify the data structure (arrays). Hierarchical list boxes are managed exactly the same way as regular list boxes. -### Définir une hiérarchie +### Defining the hierarchy -Pour définir une list box hiérarchique, vous disposez de trois possibilités : +To specify a hierarchical list box, there are several possibilities: -* Configurer manuellement les éléments hiérarchiques via la liste des propriétés dans l’éditeur de formulaire (ou déditez le formulaire JSON). -* Générer visuellement la hiérarchie à l’aide du pop up menu de gestion des list box, dans l’éditeur de formulaires. +* Manually configure hierarchical elements using the Property list of the form editor (or edit the JSON form). +* Visually generate the hierarchy using the list box management pop-up menu, in the form editor. * Use the [LISTBOX SET HIERARCHY](https://doc.4d.com/4Dv17R5/4D/17-R5/LISTBOX-SET-HIERARCHY.301-4127969.en.html) and [LISTBOX GET HIERARCHY](https://doc.4d.com/4Dv17R5/4D/17-R5/LISTBOX-GET-HIERARCHY.301-4127970.en.html) commands, described in the *4D Language Reference* manual. -#### Propriétés de la List Box hiérarchique +#### Hierarchical List Box property This property specifies that the list box must be displayed in hierarchical form. In the JSON form, this feature is triggered [when the *dataSource* property value is an array](properties_Object.md#hierarchical-list-box), i.e. a collection. @@ -667,161 +667,161 @@ This principle is not applied when only one variable is specified in the hierarc > If you specify a hierarchy based on the first columns of an existing list box, you must then remove or hide these columns (except for the first), otherwise they will appear in duplicate in the list box. If you specify the hierarchy via the pop-up menu of the editor (see below), the unnecessary columns are automatically removed from the list box. -#### Créer une hiérarchie via le menu contextuel +#### Create hierarchy using the contextual menu When you select at least one column in addition to the first one in a list box object (of the array type) in the form editor, the **Create hierarchy** command is available in the context menu: ![](assets/en/FormObjects/listbox_hierarchy1.png) -This command is a shortcut to define a hierarchy. Lorsque vous la choisissez, les actions suivantes sont effectuées : +This command is a shortcut to define a hierarchy. When it is selected, the following actions are carried out: * The **Hierarchical list box** option is checked for the object in the Property List. -* Les variables des colonnes sont utilisées pour définir la hiérarchie. Elles remplacent les variables éventuellement déjà définies. -* Les colonnes sélectionnées n’apparaissent plus dans la list box (à l’exception du titre de la première). +* The variables of the columns are used to specify the hierarchy. They replace any variables already specified. +* The columns selected no longer appear in the list box (except for the title of the first one). -Exemple : soit une list box dont les premières colonnes contiennent Pays, Région, Ville et Population. When Country, Region and City are selected, if you choose **Create hierarchy** in the context menu, a three-level hierarchy is created in the first column, columns 2 and 3 are removed and the Population column becomes the second: +Example: given a list box whose first columns contain Country, Region, City and Population. When Country, Region and City are selected, if you choose **Create hierarchy** in the context menu, a three-level hierarchy is created in the first column, columns 2 and 3 are removed and the Population column becomes the second: -![](assets/fr/FormObjects/listbox_hierarchy2.png) +![](assets/en/FormObjects/listbox_hierarchy2.png) -##### Annuler une hiérarchie -When the first column is selected and already specified as hierarchical, you can use the **Cancel hierarchy** command. Lorsque vous choisissez cette commande, les actions suivantes sont effectuées : +##### Cancel hierarchy +When the first column is selected and already specified as hierarchical, you can use the **Cancel hierarchy** command. When you choose this command, the following actions are carried out: * The **Hierarchical list box** option is deselected for the object, -* Les niveaux hiérarchiques 2 à n sont supprimés et transformés en colonnes ajoutées dans la list box. +* The hierarchical levels 2 to X are removed and transformed into columns added to the list box. -### Principes de fonctionnement +### How it works -A la première ouverture d’un formulaire contenant une list box hiérarchique, par défaut toutes les lignes sont déployées. +When a form containing a hierarchical list box is opened for the first time, by default all the rows are expanded. -Une ligne de rupture et un "noeud" hiérarchique sont automatiquement ajoutés dans la list box lorsque des valeurs sont répétées dans les tableaux. Par exemple, imaginons une list box contenant quatre tableaux définissant des villes, chaque ville étant caractérisée par un pays, une région, un nom et un nombre d’habitants : +A break row and a hierarchical "node" are automatically added in the list box when values are repeated in the arrays. For example, imagine a list box containing four arrays specifying cities, each city being characterized by its country, its region, its name and its number of inhabitants: -![](assets/fr/FormObjects/hierarch1.png) +![](assets/en/FormObjects/hierarch1.png) -Si cette list box est affichée sous forme hiérarchique (les trois premiers tableaux étant inclus dans la hiérarchie), vous obtenez : +If this list box is displayed in hierarchical form (the first three arrays being included in the hierarchy), you obtain: -![](assets/fr/FormObjects/hierarch2.png) +![](assets/en/FormObjects/hierarch2.png) -Les tableaux ne sont pas triés avant la construction de la hiérarchie. Si par exemple un tableau contient les données AAABBAACC, la hiérarchie obtenue sera : +The arrays are not sorted before the hierarchy is constructed. If, for example, an array contains the data AAABBAACC, the hierarchy obtained is: > A B A C -Pour déployer ou contracter un "nœud" hiérarchique, cliquez dessus. If you **Alt+click** (Windows) or **Option+click** (macOS) on the node, all its sub-elements will be expanded or collapsed as well. Ces opérations peuvent également être effectuées par programmation à l'aide des commandes `LISTBOX EXPAND` et `LISTBOX COLLAPSE`. +To expand or collapse a hierarchical "node," you can just click on it. If you **Alt+click** (Windows) or **Option+click** (macOS) on the node, all its sub-elements will be expanded or collapsed as well. These operations can also be carried out by programming using the `LISTBOX EXPAND` and `LISTBOX COLLAPSE` commands. -Lorsque des valeurs de type date ou heure sont incluses dans une list box hiérarchique, elles sont affichées dans un format normalisé. +When values of the date or time type are included in a hierarchical list box, they are displayed in the short system format. -#### Gestion des tris dans les list box hiérarchiques +#### Sorts in hierarchical list boxes -Dans une list box en mode hiérarchique, un tri standard (effectué suite à un clic dans un en-tête de colonne de la list box) est toujours construit de la manière suivante : +In a list box in hierarchical mode, a standard sort (carried out by clicking on the header of a list box column) is always constructed as follows: -- En premier lieu, tous les niveaux de la colonne hiérarchique (première colonne) sont automatiquement triés par ordre croissant. -- Le tri est ensuite effectué par ordre croissant ou décroissant (suivant l’action utilisateur) sur les valeurs de la colonne où le clic a eu lieu. -- Toutes les colonnes sont synchronisées. -- Lors des tris ultérieurs des colonnes non hiérarchiques de la list box, seul le dernier niveau de la première colonne est trié. Il est possible de modifier le tri de cette colonne en cliquant sur son en-tête. +- In the first place, all the levels of the hierarchical column (first column) are automatically sorted by ascending order. +- The sort is then carried out by ascending or descending order (according to the user action) on the values of the column that was clicked. +- All the columns are synchronized. +- During subsequent sorts carried out on non-hierarchical columns of the list box, only the last level of the first column is sorted. It is possible to modify the sorting of this column by clicking on its header. -Soit par exemple la list box suivante, dans laquelle aucun tri spécifique n’est défini : +Given for example the following list box, in which no specific sort is specified: -![](assets/fr/FormObjects/hierarch3.png) +![](assets/en/FormObjects/hierarch3.png) -Si vous cliquez sur l’en-tête "Population" afin de trier les populations par ordre croissant (ou alternativement décroissant), les données apparaissent ainsi : +If you click on the "Population" header to sort the populations by ascending (or alternately descending) order, the data appear as follows: -![](assets/fr/FormObjects/hierarch4.png) +![](assets/en/FormObjects/hierarch4.png) -Comme pour toutes les list box, vous pouvez [désactiver le mécanisme de tri standard](properties_Action.md#sortable) en désélectionnant la propriété "Triable" pour la list box et gérer le tri par programmation. +As for all list boxes, you can [disable the standard sort mechanism](properties_Action.md#sortable) and manage sorts using programming. -#### Gestion des sélections et des positions dans les list box hiérarchiques +#### Selections and positions in hierarchical list boxes -Une list box hiérarchique affiche un nombre variable de lignes à l’écran en fonction de l’état déployé/contracté des nœuds hiérachiques. Cela ne signifie pas pour autant que le nombre de lignes des tableaux varie. Seul l’affichage est modifié, pas les données. Il est important de comprendre ce principe car la gestion programmée des list box hiérarchiques se base toujours sur les données des tableaux, pas sur les données affichées. En particulier, les lignes de rupture ajoutées automatiquement ne sont pas prises en compte dans les tableaux d’options d’affichage (cf. ci-dessous le paragraphe Gestion des lignes de rupture). +A hierarchical list box displays a variable number of rows on screen according to the expanded/collapsed state of the hierarchical nodes. This does not however mean that the number of rows of the arrays vary. Only the display is modified, not the data. It is important to understand this principle because programmed management of hierarchical list boxes is always based on the data of the arrays, not on the displayed data. In particular, the break rows added automatically are not taken into account in the display options arrays (see below). -Examinons par exemple les tableaux suivants : +Let’s look at the following arrays for example: -![](assets/fr/FormObjects/hierarch5.png) +![](assets/en/FormObjects/hierarch5.png) -Si ces tableaux sont représentés hiérarchiquement, la ligne "Quimper" ne sera pas affichée sur la deuxième ligne mais sur la quatrième, à cause des deux lignes de rupture ajoutées : +If these arrays are represented hierarchically, the row "Quimper" will not be displayed on the second row, but on the fourth, because of the two break rows that are added: -![](assets/fr/FormObjects/hierarch6.png) +![](assets/en/FormObjects/hierarch6.png) -Quelle que soit la manière dont les données sont affichées dans la list box (hiérarchique ou non-hiérarchique), si vous souhaitez passer la ligne contenant "Quimper" en gras, vous devrez utiliser l’instruction TabStyle{2} = Gras. Seule la position de la ligne dans les tableaux est prise en compte. +Regardless of how the data are displayed in the list box (hierarchically or not), if you want to change the row containing "Quimper" to bold, you must use the statement Style{2} = bold. Only the position of the row in the arrays is taken into account. -Ce principe est mis en oeuvre pour les tableaux internes permettant de gérer : +This principle is implemented for internal arrays that can be used to manage: -- les couleurs -- les couleurs de fond -- les styles -- les lignes masquées -- les sélections +- colors +- background colors +- styles +- hidden rows +- selections -Par exemple, si vous voulez sélectionner la ligne contenant Rennes, vous devez passer : +For example, if you want to select the row containing Rennes, you must pass: ```4d ->MyListbox{3}:=True ``` -Représentation non hiérarchique : ![](assets/fr/FormObjects/hierarch7.png) Représentation hiérarchique : ![](assets/fr/FormObjects/hierarch8.png) +Non-hierarchical representation: ![](assets/en/FormObjects/hierarch7.png) Hierarchical representation: ![](assets/en/FormObjects/hierarch8.png) -> Si une ou plusieurs lignes sont masquées du fait que leurs parents ont été contractés, elles ne sont plus sélectionnées. Seules les lignes visibles (directement ou suite à un défilement) sont sélectionnables. Autrement dit, les lignes ne peuvent pas être à la fois sélectionnées et cachées. +> If one or more rows are hidden because their parents are collapsed, they are no longer selected. Only the rows that are visible (either directly or by scrolling) can be selected. In other words, rows cannot be both hidden and selected. -Tout comme pour les sélections, la commande `LISTBOX GET CELL POSITION` retournera les mêmes valeurs pour une list box hiérarchique et une list box non hiérarchique. Cela signifie que dans les deux exemples ci-dessous, `LISTBOX GET CELL POSITION` retournera la même position : (3;2). +As with selections, the `LISTBOX GET CELL POSITION` command will return the same values for a hierarchical list box and a non-hierarchical list box. This means that in both of the examples below, `LISTBOX GET CELL POSITION` will return the same position: (3;2). -*Non-hierarchical representation:* ![](assets/fr/FormObjects/hierarch9.png) +*Non-hierarchical representation:* ![](assets/en/FormObjects/hierarch9.png) -*Hierarchical representation:* ![](assets/fr/FormObjects/hierarch10.png) +*Hierarchical representation:* ![](assets/en/FormObjects/hierarch10.png) -Lorsque toutes les lignes d’une sous-hiérarchie sont masquées, la ligne de rupture est automatiquement masquée. Dans l’exemple ci-dessus, si les lignes 1 à 3 sont masquées, la ligne de rupture "Bretagne" n’apparaîtra pas. +When all the rows of a sub-hierarchy are hidden, the break line is automatically hidden. In the above example, if rows 1 to 3 are hidden, the "Brittany" break row will not appear. -#### Lignes de rupture +#### Break rows -Si l’utilisateur sélectionne une ligne de rupture, `LISTBOX GET CELL POSITION` retourne la première occurrence de la ligne dans le tableau correspondant. Dans le cas suivant . Dans le cas suivant : +If the user selects a break row, `LISTBOX GET CELL POSITION` returns the first occurrence of the row in the corresponding array. In the following case: -![](assets/fr/FormObjects/hierarch11.png) +![](assets/en/FormObjects/hierarch11.png) -... `LISTBOX GET CELL POSITION` returns (2;4). Pour sélectionner une ligne de rupture par programmation, vous devez utiliser la commande `LISTBOX SELECT BREAK`. +... `LISTBOX GET CELL POSITION` returns (2;4). To select a break row by programming, you will need to use the `LISTBOX SELECT BREAK` command. -Les lignes de rupture ne sont pas prises en compte dans les tableaux internes permettant de gérer l’apparence graphique des list box (styles et couleurs). Il est toutefois possible de modifier ces caractéristiques pour les lignes de rupture via les commandes de gestion graphique des objets. Il suffit pour cela d’exécuter ces commandes appropriées sur les tableaux constituant la hiérarchie. +Break rows are not taken into account in the internal arrays used to manage the graphic appearance of list boxes (styles and colors). It is however possible to modify these characteristics for break rows via the graphic management commands for objects. You simply need to execute the appropriate commands on the arrays that constitute the hierarchy. -Soit par exemple la list box suivante (les noms des tableaux associés sont précisés entre parenthèses) : +Given for example the following list box (the names of the associated arrays are specified in parentheses): -*Non-hierarchical representation:* ![](assets/fr/FormObjects/hierarch12.png) +*Non-hierarchical representation:* ![](assets/en/FormObjects/hierarch12.png) -*Hierarchical representation:* ![](assets/fr/FormObjects/hierarch13.png) +*Hierarchical representation:* ![](assets/en/FormObjects/hierarch13.png) -En mode hiérarchique, les niveaux de rupture ne sont pas pris en compte par les tableaux de modification de style nommés `tStyle` et `tCouleurs`. Pour modifier la couleur ou le style des niveaux de rupture, vous devez exécuter les instructions suivantes : +In hierarchical mode, break levels are not taken into account by the style modification arrays named `tStyle` and `tColors`. To modify the color or style of break levels, you must execute the following statements: ```4d OBJECT SET RGB COLORS(T1;0x0000FF;0xB0B0B0) OBJECT SET FONT STYLE(T2;Bold) ``` -> Dans ce contexte, seule la syntaxe utilisant la variable tableau peut fonctionner avec les commandes de propriété d’objet car les tableaux n’ont alors pas d’objet associé. +> In this context, only the syntax using the array variable can function with the object property commands because the arrays do not have any associated object. -Résultat : +Result: -![](assets/fr/FormObjects/hierarch14.png) +![](assets/en/FormObjects/hierarch14.png) -#### Gestion optimisée du déployer/contracter +#### Optimized management of expand/collapse -Vous pouvez optimiser l’affichage et la gestion des list box hiérarchiques en tirant parti des événements formulaire `On Expand` et `On Collapse`. +You can optimize hierarchical list boxes display and management using the `On Expand` and `On Collapse` form events. -Une list box hiérarchique est construite à partir du contenu des tableaux qui la constituent, elle ne peut donc être affichée que lorsque tous les tableaux sont chargés en mémoire. Ce principe peut rendre difficile la génération de list box hiérarchiques de grande taille basées sur des tableaux générés à partir des données (via la commande `SELECTION TO ARRAY`), pour des raisons de rapidité d’affichage et d’utilisation de la mémoire. +A hierarchical list box is built from the contents of its arrays so it can only be displayed when all these arrays are loaded into memory. This makes it difficult to build large hierarchical list boxes based on arrays generated from data (through the `SELECTION TO ARRAY` command), not only because of the display speed but also the memory used. -L'emploi des événements formulaire `On Expand` et `On Collapse` permet de s’affranchir de ces contraintes : il est possible de n’afficher qu’une partie de la hiérarchie et d’effectuer le chargement et le déchargement des tableaux à la volée, en fonction des actions de l’utilisateur. Dans le contexte de ces événements, la commande `LISTBOX GET CELL POSITION` retourne la cellule sur laquelle l’utilisateur a cliqué afin de déployer ou de contracter une ligne. +Using the `On Expand` and `On Collapse` form events can overcome these constraints: for example, you can display only part of the hierarchy and load/unload the arrays on the fly, based on user actions. In the context of these events, the `LISTBOX GET CELL POSITION` command returns the cell where the user clicked in order to expand or collapse a row. -Dans ce cas, le remplissage et le vidage des tableaux doivent être effectués par le code. Les principes à mettre en oeuvre sont : -- A l’affichage de la listbox, seul le premier tableau doit être rempli. Vous devez toutefois créer un second tableau avec des valeurs vides afin que la list box affiche les boutons déployer/contracter : ![](assets/fr/FormObjects/hierarch15.png) +In this case, you must fill and empty arrays through the code. The principles to be implemented are: +- When the list box is displayed, only the first array must be filled. However, you must create a second array with empty values so that the list box displays the expand/collapse buttons: ![](assets/en/FormObjects/hierarch15.png) -- Lorsque l’utilisateur clique sur un bouton de déploiement, vous pouvez traiter l’événement `On Expand`. La commande `LISTBOX GET CELL POSITION` retourne la cellule concernée et vous permet de construire la hiérarchie adéquate : vous alimentez le premier tableau avec des valeurs répétées et le second avec les valeurs issues de la commande `SELECTION TO ARRAY`, et vous insérez dans la list box autant de lignes que nécessaire à l’aide de la commande `LISTBOX INSERT ROWS`. ![](assets/fr/FormObjects/hierarch16.png) +- When a user clicks on an expand button, you can process the `On Expand` event. The `LISTBOX GET CELL POSITION` command returns the cell concerned and lets you build the appropriate hierarchy: you fill the first array with the repeated values and the second with the values sent from the `SELECTION TO ARRAY` command and you insert as many rows as needed in the list box using the `LISTBOX INSERT ROWS` command. ![](assets/en/FormObjects/hierarch16.png) -- Lorsque l’utilisateur clique sur un bouton de contraction, vous pouvez traiter l’événement `On Collapse`. La commande `LISTBOX GET CELL POSITION` retourne la cellule concernée : vous supprimez de la list box autant de lignes que nécessaire à l’aide de la commande `LISTBOX DELETE ROWS`. +- When a user clicks on a collapse button, you can process the `On Collapse` event. The `LISTBOX GET CELL POSITION` command returns the cell concerned: you remove as many rows as needed from the list box using the `LISTBOX DELETE ROWS` command. ## Object arrays in columns -Les colonnes de list box peuvent être associées à des tableaux d'objets. Comme les tableaux d'objets peuvent contenir des données de types différents, cette puissante fonctionnalité vous permet de saisir et d'afficher divers types de valeurs dans les lignes d'une même colonne, ainsi que d'utiliser divers objets d'interface (widgets). Par exemple, vous pouvez placer une zone de saisie de texte dans la première ligne, une case à cocher dans la seconde, et une liste déroulante dans la troisième. Les tableaux d'objets vous donnent également accès à des widgets supplémentaires, tels que des boutons ou des sélecteurs de couleurs (color picker). +List box columns can handle object arrays. Since object arrays can contain different kinds of data, this powerful new feature allows you to mix different input types in the rows of a single column, and display various widgets as well. For example, you could insert a text input in the first row, a check box in the second, and a drop-down list in the third. Object arrays also provide access to new kinds of widgets, such as buttons or color pickers. -La list box suivante a été définie à l'aide d'un tableau d'objets : +The following list box was designed using an object array: ![](assets/en/FormObjects/listbox_column_objectArray.png) @@ -849,7 +849,7 @@ ARRAY OBJECT(obColumn;0) //column array ![](assets/en/FormObjects/listbox_column_objectArray_helloWorld.png) > Display format and entry filters cannot be set for an object column. They automatically depend on the value type. -#### valueType et affichage des données +#### valueType and data display When a list box column is associated with an object array, the way a cell is displayed, entered, or edited, is based on the valueType attribute of the array element. Supported valueType values are: @@ -864,24 +864,24 @@ When a list box column is associated with an object array, the way a cell is dis | valueType | Default widget | Alternative widget(s) | | --------- | ---------------------------------------------- | ---------------------------------------------------------------------------------------------- | -| Texte | text input | drop-down menu (required list) or combo box (choice list) | -| réel | controlled text input (numbers and separators) | drop-down menu (required list) or combo box (choice list) | +| text | text input | drop-down menu (required list) or combo box (choice list) | +| real | controlled text input (numbers and separators) | drop-down menu (required list) or combo box (choice list) | | integer | controlled text input (numbers only) | drop-down menu (required list) or combo box (choice list) or three-states check box | | boolean | check box | drop-down menu (required list) | -| color | background color | Texte | +| color | background color | text | | event | button with label | | | | | All widgets can have an additional unit toggle button or ellipsis button attached to the cell. | You set the cell display and options using specific attributes in each object (see below). -#### Formats d'affichage et filtres de saisie +#### Display formats and entry filters You cannot set display formats or entry filters for columns of object-type list boxes. They are automatically defined according to the value type. These are listed in the following table: | Value type | Default format | Entry control | | ---------- | ---------------------------------------------------------- | ----------------------- | -| Texte | same as defined in object | any (no control) | -| réel | same as defined in object (using system decimal separator) | "0-9" and "." and "-" | +| text | same as defined in object | any (no control) | +| real | same as defined in object (using system decimal separator) | "0-9" and "." and "-" | | | | "0-9" and "." if min>=0 | | integer | same as defined in object | "0-9" and "-" | | | | "0-9" if min>=0 | @@ -889,31 +889,31 @@ You cannot set display formats or entry filters for columns of object-type list | color | N/A | N/A | | event | N/A | N/A | -### Attributs +### Attributes -Chaque élément du tableau d'objets est un objet qui peut contenir un ou plusieurs attributs qui définiront le contenu de la cellule et l'affichage des données (voir exemple ci-dessus). +Each element of the object array is an object that can contain one or more attributes that will define the cell contents and data display (see example above). The only mandatory attribute is "valueType" and its supported values are "text", "real", "integer", "boolean", "color", and "event". The following table lists all the attributes supported in list box object arrays, depending on the "valueType" value (any other attributes are ignored). Display formats are detailed and examples are provided below. -| | valueType | Texte | réel | integer | boolean | color | event | -| --------------------- | --------------------------------------- | ----- | ---- | ------- | ------- | ----- | ----- | -| *Attributs* | *Description* | | | | | | | -| value | cell value (input or output) | x | x | x | | | | -| min | minimum value | | x | x | | | | -| max | maximum value | | x | x | | | | -| behavior | "threeStates" value | | | x | | | | -| requiredList | drop-down list defined in object | x | x | x | | | | -| choiceList | combo box defined in object | x | x | x | | | | -| requiredListReference | 4D list ref, depends on "saveAs" value | x | x | x | | | | -| requiredListName | 4D list name, depends on "saveAs" value | x | x | x | | | | -| saveAs | "reference" or "value" | x | x | x | | | | -| choiceListReference | 4D list ref, display combo box | x | x | x | | | | -| choiceListName | 4D list name, display combo box | x | x | x | | | | -| unitList | array of X elements | x | x | x | | | | -| unitReference | index of selected element | x | x | x | | | | -| unitsListReference | 4D list ref for units | x | x | x | | | | -| unitsListName | 4D list name for units | x | x | x | | | | -| alternateButton | add an alternate button | x | x | x | x | x | | +| | valueType | text | real | integer | boolean | color | event | +| --------------------- | --------------------------------------- | ---- | ---- | ------- | ------- | ----- | ----- | +| *Attributes* | *Description* | | | | | | | +| value | cell value (input or output) | x | x | x | | | | +| min | minimum value | | x | x | | | | +| max | maximum value | | x | x | | | | +| behavior | "threeStates" value | | | x | | | | +| requiredList | drop-down list defined in object | x | x | x | | | | +| choiceList | combo box defined in object | x | x | x | | | | +| requiredListReference | 4D list ref, depends on "saveAs" value | x | x | x | | | | +| requiredListName | 4D list name, depends on "saveAs" value | x | x | x | | | | +| saveAs | "reference" or "value" | x | x | x | | | | +| choiceListReference | 4D list ref, display combo box | x | x | x | | | | +| choiceListName | 4D list name, display combo box | x | x | x | | | | +| unitList | array of X elements | x | x | x | | | | +| unitReference | index of selected element | x | x | x | | | | +| unitsListReference | 4D list ref for units | x | x | x | | | | +| unitsListName | 4D list name for units | x | x | x | | | | +| alternateButton | add an alternate button | x | x | x | x | x | | #### value @@ -940,11 +940,11 @@ Cell values are stored in the "value" attribute. This attribute is used for inpu ![](assets/en/FormObjects/listbox_column_objectArray_helloWorld_value.png) > Null values are supported and result in an empty cell. -#### min et max +#### min and max -Lorsque le "valueType" est "real" ou "integer", l'objet accepte également les attributs min et max avec les valeurs appropriées (les valeurs doivent être du même type que valueType). +When the "valueType" is "real" or "integer", the object also accepts min and max attributes with appropriate values (values must be of the same type as the valueType). -Ces attributs peuvent être utilisés pour contrôler la plage de valeurs d'entrée. Lorsqu'une cellule est validée (lorsqu'elle perd le focus), si la valeur de saisie est inférieure à la valeur minimale ou supérieure à la valeur maximale, elle est rejetée. Dans ce cas, la valeur précédente est conservée et une astuce affiche une explication. +These attributes can be used to control the range of input values. When a cell is validated (when it loses the focus), if the input value is lower than the min value or greater than the max value, then it is rejected. In this case, the previous value is maintained and a tip displays an explanation. ````4d C_OBJECT($ob3) @@ -959,11 +959,11 @@ Ces attributs peuvent être utilisés pour contrôler la plage de valeurs d'entr #### behavior -L'attribut behavior propose des variations de la représentation standard des valeurs. Une seule variation est possible : +The behavior attribute provides variations to the regular representation of values. In 4D v15, a single variation is proposed: -| Attribut | Valeur(s) disponible(s) | valueType(s) | Description | -| -------- | ----------------------- | ------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| behavior | threeStates | integer | Représente une valeur numérique sous forme de case à cocher à trois états.
    2=intermédiaire, 1=cochée, 0=non cochée, -1=invisible, -2=non cochée désactivée, -3=cochée désactivée, -4=intermédiaire désactivée | +| Attribute | Available value(s) | valueType(s) | Description | +| --------- | ------------------ | ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| behavior | threeStates | integer | Represents a numeric value as a three-states check box.
    2=semi-checked, 1=checked, 0=unchecked, -1=invisible, -2=unchecked disabled, -3=checked disabled, -4=semi-checked disabled | ```4d C_OBJECT($ob3) @@ -977,19 +977,19 @@ L'attribut behavior propose des variations de la représentation standard des va ![](assets/en/FormObjects/listbox_column_objectArray_helloWorld_behavior.png) -#### requiredList et choiceList +#### requiredList and choiceList -Lorsqu'un attribut "choiceList" ou "requiredList" est présent dans l'objet, la zone de saisie de texte est remplacée par une liste déroulante ou une combo box, en fonction de l'attribut : +When a "choiceList" or a "requiredList" attribute is present inside the object, the text input is replaced by a drop-down list or a combo box, depending of the attribute: -* Si l'attribut est "choiceList", la cellule est affichée sous forme de combo box. Cela signifie que l'utilisateur peut sélectionner ou saisir une valeur. -* Si l'attribut est "requiredList", la cellule est affichée sous forme de liste déroulante. Cela signifie que l'utilisateur peut uniquement sélectionner une des valeurs de la liste. +* If the attribute is "choiceList", the cell is displayed as a combo box. This means that the user can select or type a value. +* If the attribute is "requiredList" then the cell is displayed as a drop-down list and the user can only select one of the values provided in the list. -Dans les deux cas, vous pouvez utiliser un attribut "value" pour présélectionner une valeur dans le widget. -> Les valeurs du widget sont définies via un tableau. Si vous souhaitez associer le widget à une énumération 4D existante, vous devez utiliser les attributs "requiredListReference", "requiredListName", "choiceListReference" ou "choiceListName". +In both cases, a "value" attribute can be used to preselect a value in the widget. +> The widget values are defined through an array. If you want to assign an existing 4D list to the widget, you need to use the "requiredListReference", "requiredListName", "choiceListReference", or "choiceListName" attributes. -Voici quelques exemples : +Examples: -* Vous voulez afficher une liste déroulante avec juste deux options, "Open" ou "Closed". "Closed" doit être présélectionné : +* You want to display a drop-down list with only two options: "Open" or "Closed". "Closed" must be preselected: ```4d ARRAY TEXT($RequiredList;0) @@ -1002,7 +1002,7 @@ Voici quelques exemples : ``` ![](assets/en/FormObjects/listbox_column_objectArray_helloWorld_openClosed.png) -* Vous voulez accepter toute valeur entière, mais afficher une combo box contenant les valeurs les plus communes : +* You want to accept any integer value, but display a combo box to suggest the most common values: ```4d ARRAY LONGINT($ChoiceList;0) @@ -1013,35 +1013,35 @@ Voici quelques exemples : APPEND TO ARRAY($ChoiceList;100) C_OBJECT($ob) OB SET($ob;"valueType";"integer") - OB SET($ob;"value";10) //10 comme valeur par défaut + OB SET($ob;"value";10) //10 as default value OB SET ARRAY($ob;"choiceList";$ChoiceList) ``` ![](assets/en/FormObjects/listbox_column_objectArray_helloWorld_commonValues.png) -#### requiredListName et requiredListReference +#### requiredListName and requiredListReference -Les attributs "requiredListName" et "requiredListReference" vous permettent d'utiliser, dans une cellule de list box, une énumération définie dans 4D soit en mode Développement (via l'éditeur d'Enumérations de la Boîte à outils) soit par programmation (à l'aide de la commande New list). La cellule sera alors affichée sous forme de liste déroulante. Cela signifie que l'utilisateur pourra uniquement choisir une des valeurs fournies dans la liste. +The "requiredListName" and "requiredListReference" attributes allow you to use, in a list box cell, a list defined in 4D either in Design mode (in the Lists editor of the Tool box) or by programming (using the New list command). The cell will then be displayed as a drop-down list. This means that the user can only select one of the values provided in the list. -Utilisez "requiredListName" ou "requiredListReference" en fonction de la provenance de la liste : si la liste provient de la Boîte à outils, utilisez son nom ; sinon, si la liste a été définie par programmation, passez sa référence. Dans les deux cas, vous pouvez utiliser un attribut "value" pour présélectionner une valeur dans le widget. -> * Si vous souhaitez définir des valeurs d'énumération via un simple tableau, vous pouvez utiliser l'attribut "requiredList". -> * Si la liste contient du texte représentant des valeurs réelles, le séparateur décimal doit être le point ("."), quels que soient les paramètres locaux, ex : "17.6" "1234.456". +Use "requiredListName" or "requiredListReference" depending on the origin of the list: if the list comes from the Tool box, you pass a name; otherwise, if the list has been defined by programming, you pass a reference. In both cases, a "value" attribute can be used to preselect a value in the widget. +> * If you want to define these values through a simple array, you need to use the "requiredList" attribute. +> * If the list contains text items representing real values, the decimal separator must be a period ("."), regardless of the local settings, e.g.: "17.6" "1234.456". -Voici quelques exemples : +Examples: -* Vous voulez afficher une liste déroulante basée sur une énumération nommée "colors" définie dans la Boîte à outils (contenant les valeurs "bleu", "jaune" et "vert"), la stocker en tant que valeur et afficher "bleu" par défaut : +* You want to display a drop-down list based on a "colors" list defined in the Tool box (containing the values "blue", "yellow", and "green"), save it as a value and display "blue" by default: -![](assets/fr/FormObjects/listbox_column_objectArray_colors.png) +![](assets/en/FormObjects/listbox_column_objectArray_colors.png) ```4d C_OBJECT($ob) OB SET($ob;"valueType";"text") OB SET($ob;"saveAs";"value") - OB SET($ob;"value";"bleu") + OB SET($ob;"value";"blue") OB SET($ob;"requiredListName";"colors") ``` ![](assets/en/FormObjects/listbox_column_objectArray_colorsResult.png) -* Vous voulez afficher une liste déroulante basée sur une liste créée par programmation, et la stocker en tant que référence : +* You want to display a drop-down list based on a list defined by programming and save it as a reference: ```4d <>List:=New list @@ -1052,75 +1052,75 @@ Voici quelques exemples : C_OBJECT($ob) OB SET($ob;"valueType";"integer") OB SET($ob;"saveAs";"reference") - OB SET($ob;"value";2) //affiche London par défaut + OB SET($ob;"value";2) //displays London by default OB SET($ob;"requiredListReference";<>List) ``` ![](assets/en/FormObjects/listbox_column_objectArray_cities.png) -#### choiceListName et choiceListReference +#### choiceListName and choiceListReference -Les attributs "choiceListName" et "choiceListReference" permettent d'utiliser, dans une cellule de list box, une énumération définie dans 4D soit en mode Développement (via l'éditeur de la Boîte à outils) soit par programmation (à l'aide de la commande New list). La cellule sera alors affichée sous forme de combo box, ce qui signifie que l'utilisateur pourra choisir une des valeurs de la liste ou en saisir une. +The "choiceListName" and "choiceListReference" attributes allow you to use, in a list box cell, a list defined in 4D either in Design mode (in the Tool box) or by programming (using the New list command). The cell is then displayed as a combo box, which means that the user can select or type a value. -Utilisez "choiceListName" ou "choiceListReference" en fonction de la provenance de la liste : si la liste provient de la Boîte à outils, utilisez son nom ; sinon, si la liste a été définie par programmation, passez sa référence. Dans les deux cas, vous pouvez utiliser un attribut "value" pour présélectionner une valeur dans le widget. -> * Si vous souhaitez définir des valeurs d'énumération via un simple tableau, vous pouvez utiliser l'attribut "choiceList". -> * Si la liste contient du texte représentant des valeurs réelles, le séparateur décimal doit être le point ("."), quels que soient les paramètres locaux, ex : "17.6" "1234.456". +Use "choiceListName" or "choiceListReference" depending on the origin of the list: if the list comes from the Tool box, you pass a name; otherwise, if the list has been defined by programming, you pass a reference. In both cases, a "value" attribute can be used to preselect a value in the widget. +> * If you want to define these values through a simple array, you need to use the "choiceList" attribute. +> * If the list contains text items representing real values, the decimal separator must be a period ("."), regardless of the local settings, e.g.: "17.6" "1234.456". -Exemple : +Example: -Vous voulez afficher une combo box basée sur une énumération nommée "colors" définie dans la Boîte à outils (contenant les valeurs "bleu", "jaune" et "vert") et afficher "vert" par défaut : +You want to display a combo box based on a "colors" list defined in the Tool box (containing the values "blue", "yellow", and "green") and display "green" by default: -![](assets/fr/FormObjects/listbox_column_objectArray_colors.png) +![](assets/en/FormObjects/listbox_column_objectArray_colors.png) ````4d C_OBJECT($ob) OB SET($ob;"valueType";"text") - OB SET($ob;"value";"vert") + OB SET($ob;"value";"blue") OB SET($ob;"choiceListName";"colors") ```` ![](../assets/en/FormObjects/listbox_column_objectArray_colorsResult.png) -#### unitsList, unitsListName, unitsListReference et unitReference +#### unitsList, unitsListName, unitsListReference and unitReference -Vous pouvez utiliser des attributs spécifiques afin d'associer des unités aux valeurs des cellules (par exemple "10 cm", "20 pixels", etc.). Pour définir une liste d'unités, vous pouvez utiliser l'un des attributs suivants : +You can use specific attributes to add units associated with cell values (*e.g.*: "10 cm", "20 pixels", etc.). To define the unit list, you can use one of the following attributes: -* "unitsList" : un tableau contenant les x éléments définissant les unités disponibles (ex : "cm", "pouces", "km", "miles", etc.). Utilisez cet attribut pour définir des unités dans l'objet. -* "unitsListReference" : une référence de liste 4D contenant les unités disponibles. Utilisez cet attribut pour définir des unités à l'aide d'une liste 4D créée avec la commande [New list](https://doc.4d.com/4Dv15/4D/15.6/New-list.301-3818474.en.html). -* "unitsListName" : un nom d'énumération 4D créée en mode Développement contenant les unités disponibles. Utilisez cet attribut pour définir des unités à l'aide d'une énumération 4D créée dans la Boîte à outils. +* "unitsList": an array containing the x elements used to define the available units (e.g.: "cm", "inches", "km", "miles", etc.). Use this attribute to define units within the object. +* "unitsListReference": a reference to a 4D list containing available units. Use this attribute to define units with a 4D list created with the [New list](https://doc.4d.com/4Dv15/4D/15.6/New-list.301-3818474.en.html) command. +* "unitsListName": a name of a design-based 4D list that contains available units. Use this attribute to define units with a 4D list created in the Tool box. -Quel que soit son mode de définition, la liste d'unités peut être associée à l'attribut suivant : +Regardless of the way the unit list is defined, it can be associated with the following attribute: -* "unitReference" : une valeur simple contenant l'indice (de 1 à x) de l'élément sélectionné dans la liste de valeurs "unitList", "unitsListReference" ou "unitsListName". +* "unitReference": a single value that contains the index (from 1 to x) of the selected item in the "unitList", "unitsListReference" or "unitsListName" values list. -L'unité courante est affichée sous forme de bouton affichant successivement les valeurs de "unitList", "unitsListReference" ou "unitsListName" à chaque clic (par exemple "pixels" -> "lignes" -> "cm" -> "pixels" -> etc.) +The current unit is displayed as a button that cycles through the "unitList", "unitsListReference" or "unitsListName" values each time it is clicked (e.g., "pixels" -> "rows" -> "cm" -> "pixels" -> etc.) -Exemple : +Example: -Vous souhaitez définir une valeur de saisie numérique suivie d'une unité parmi deux possibles : "cm" ou "pixels". La valeur courante est "2" + "cm". Vous utilisez des valeurs définies directement dans l'objet (attribut "unitsList") : +We want to set up a numeric input followed by two possible units: "rows" or "pixels". The current value is "2" + "lines". We use values defined directly in the object ("unitsList" attribute): ````4d ARRAY TEXT($_units;0) -APPEND TO ARRAY($_units;"cm") +APPEND TO ARRAY($_units;"lines") APPEND TO ARRAY($_units;"pixels") C_OBJECT($ob) OB SET($ob;"valueType";"integer") OB SET($ob;"value";2) // 2 "units" -OB SET($ob;"unitReference";1) //"cm" +OB SET($ob;"unitReference";1) //"lines" OB SET ARRAY($ob;"unitsList";$_units) ```` -![](assets/fr/FormObjects/listbox_column_objectArray_unitList.png) +![](assets/en/FormObjects/listbox_column_objectArray_unitList.png) #### alternateButton -Si vous souhaitez ajouter un bouton d'ellipse [...] dans une cellule, il suffit de passer l'attribut "alternateButton" avec la valeur vrai dans l'objet. Le bouton sera automatiquement affiché dans la cellule. +If you want to add an ellipsis button [...] to a cell, you just need to pass the "alternateButton" with the True value in the object. The button will be displayed in the cell automatically. -Lorsque l'utilisateur clique sur ce bouton, un événement `On Alternative Click` est généré, vous permettant de traiter cette action comme vous le souhaitez (reportez-vous ci-dessous au paragraphe "Gestion des événements" pour plus d'informations). +When this button is clicked by a user, an `On Alternate Click` event will be generated, and you will be able to handle it however you want (see the "Event management" paragraph for more information). -Exemple : +Example: ```4d C_OBJECT($ob1) @@ -1133,11 +1133,11 @@ OB SET($ob;"value";$entry) ![](assets/en/FormObjects/listbox_column_objectArray_alternateButton.png) -#### valueType color +#### color valueType -L'attribut "valueType" de valeur "color" vous permet d'afficher soit une couleur, soit un texte. +The "color" valueType allows you to display either a color or a text. -* Si la valeur est un nombre, un rectangle de couleur est dessiné à l'intérieur de la cellule. Exemple : +* If the value is a number, a colored rectangle is drawn inside the cell. Example: ````4d C_OBJECT($ob4) @@ -1147,16 +1147,16 @@ L'attribut "valueType" de valeur "color" vous permet d'afficher soit une couleur ![](assets/en/FormObjects/listbox_column_objectArray_colorValue.png) -* Si la valeur est un texte, le texte est simplement affiché (par exemple : "value";"Automatic"). +* If the value is a text, then the text is displayed (*e.g.*: "value";"Automatic"). -#### valueType event +#### event valueType -L'attribut "valueType" de valeur "event" affiche un bouton qui génère simplement un événement `On Clicked` lorsque l'utilisateur clique dessus. Aucune donnée ou valeur ne peut être passée ou retournée. +The "event" valueType displays a simple button that generates an `On Clicked` event when clicked. No data or value can be passed or returned. -Optionnellement, il est possible de passer un attribut "label". +Optionally, you can pass a "label" attribute. -Exemple : +Example: ````4d C_OBJECT($ob) @@ -1167,17 +1167,17 @@ OB SET($ob;"label";"Edit...") ![](assets/en/FormObjects/listbox_column_objectArray_eventValueType.png) -### Gestion des événements -Plusieurs événements peuvent être gérés dans les colonnes de list box de type tableau d'objets. Voici une synthèse des événements spécifiques : +### Event management +Several events can be handled while using an object list box array: * **On Data Change**: An `On Data Change` event is triggered when any value has been modified either: - * zone de saisie de texte - * listes déroulante - * zone de combo box - * bouton d'unité (passage valeur x à valeur x+1) - * case à cocher (passage cochée/non cochée) -* **On Clicked**: When the user clicks on a button installed using the "event" *valueType* attribute, an `On Clicked` event will be generated. Cet événement doit être ensuite géré par le programmeur. -* **On Alternative Click**: When the user clicks on an ellipsis button ("alternateButton" attribute), an `On Alternative Click` event will be generated. Cet événement doit être ensuite géré par le programmeur. + * in a text input zone + * in a drop-down list + * in a combo box area + * in a unit button (switch from value x to value x+1) + * in a check box (switch between checked/unchecked) +* **On Clicked**: When the user clicks on a button installed using the "event" *valueType* attribute, an `On Clicked` event will be generated. This event is managed by the programmer. +* **On Alternative Click**: When the user clicks on an ellipsis button ("alternateButton" attribute), an `On Alternative Click` event will be generated. This event is managed by the programmer. From 73ceeeed106973a888ae0b32d7d34900f41a6c9a Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:22:12 +0100 Subject: [PATCH 156/260] New translations pictureButton_overview.md (French) --- .../fr/FormObjects/pictureButton_overview.md | 58 +++++++++---------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/pictureButton_overview.md b/website/translated_docs/fr/FormObjects/pictureButton_overview.md index 58fd4c22411046..877b653c4aa716 100644 --- a/website/translated_docs/fr/FormObjects/pictureButton_overview.md +++ b/website/translated_docs/fr/FormObjects/pictureButton_overview.md @@ -1,65 +1,65 @@ --- id: pictureButtonOverview -title: Bouton image +title: Picture Button --- ## Aperçu -Un bouton image est similaire à un [bouton standard](button_overview.md). Cependant, contrairement à un bouton standard (qui accepte trois états : activé, désactivé et cliqué), un bouton image contient une image différente pour représenter chaque état. +A picture button is similar to a [standard button](button_overview.md). However unlike a standard button (which accepts three states: enabled, disabled and clicked), a picture button has a different image to represent each state. -Les boutons image peuvent être utilisés de deux manières : +Picture buttons can be used in two ways: -* Comme boutons de commande dans un formulaire. In this case, the picture button generally includes four different states: enabled, disabled, clicked and rolled over. +* As command buttons in a form. In this case, the picture button generally includes four different states: enabled, disabled, clicked and rolled over. For example, a table of thumbnails that has one row of four columns, each thumbnail corresponds to the Default, Clicked, Roll over, and Disabled states. - | Propriété | Nom JSON | Valeur | - | -------------------------- | ---------------------- | ------ | - | Rows | rowCount | 1 | - | Columns | columnCount | 4 | - | Switch back when Released | switchBackWhenReleased | true | - | Switch when Roll Over | switchWhenRollover | true | - | Use Last Frame as Disabled | useLastFrameAsDisabled | true | + | Property | JSON name | Value | + | -------------------------- | ---------------------- | ----- | + | Rows | rowCount | 1 | + | Columns | columnCount | 4 | + | Switch back when Released | switchBackWhenReleased | true | + | Switch when Roll Over | switchWhenRollover | true | + | Use Last Frame as Disabled | useLastFrameAsDisabled | true | -* Comme bouton permettant à l’utilisateur de choisir entre plusieurs options. Dans ce cas, le bouton image peut être utilisé à la place d’un pop-up menu image. With [Picture Pop-up Menus](picturePopupMenu_overview.md), all choices are displayed simultaneously (as the items in the pop-up menu), while the picture button displays the choices consecutively (as the user clicks the button). - Here is an example of a picture button. Vous souhaitez permettre aux utilisateurs de votre application de choisir la langue qui sera utilisée dans les menus, les boîtes de dialogue, etc. Vous pouvez implémenter cette option à l’aide d’un bouton image, placé dans une boîte de dialogue personnalisée de Propriétés : +* As a picture button letting the user choose among several choices. In this case, a picture button can be used in place of a pop-up picture menu. With [Picture Pop-up Menus](picturePopupMenu_overview.md), all choices are displayed simultaneously (as the items in the pop-up menu), while the picture button displays the choices consecutively (as the user clicks the button). + Here is an example of a picture button. Suppose you want to give the users of a custom application the opportunity to choose the interface language for the application. You implement the option as a picture button in a custom properties dialog box: ![](assets/en/FormObjects/button_pictureButton.png) -Chaque clic modifie l'état du bouton. +Clicking the object changes the picture. -## Utiliser des boutons images +## Using picture buttons -Un bouton image est créé de la manière suivante : +You can implement a picture button in the following manner: -1. Tout d’abord, vous préparez une image, dans laquelle la série d’images est organisée en colonnes, en lignes, ou les deux. +1. First, prepare a single graphic in which the series of images are arranged in a row, a column, or a row-by-column grid. ![](assets/en/FormObjects/pictureButton_grid.png) -Vous pouvez organiser les images sous la forme de colonnes, de lignes ou de tableaux. Dans ce dernier cas, les images sont alors numérotées de gauche à droite, ligne par ligne, en débutant par 0. Par exemple, la deuxième image de la deuxième ligne d’un tableau de 2 lignes et de 3 colonnes a pour numéro 4. +You can organize pictures as columns, rows, or a row-by-column grid (as shown above). When organizing pictures as a grid, they are numbered from left to right, row by row, beginning with 0. For example, the second picture of the second row of a grid that consists of two rows and three columns, is numbered 4 (The UK flag in the example above). -2. Puis, assurez-vous que l'image se trouve dans les ressources de votre projet et saisissez le chemin dans la propriété [Chemin d'accès image](properties_TextAndPicture.md#picture-pathname). +2. Next, make sure the image is in your project's Resources and enter the path in the [Pathname](properties_TextAndPicture.md#picture-pathname) property. -3. Définissez les propriétés de [lignes et colonnes](properties_Crop.md) du graphique. +3. Define the graphic's [Rows and Columns](properties_Crop.md) properties. -4. Spécifiez quand les images changent en sélectionnant les propriétés d'[animation](properties_Animation.md) appropriées. +4. Specify when the images change by selecting appropriate [animation](properties_Animation.md) properties. ## Animation -Outre les paramètres de positionnement et d'apparence standard, vous pouvez définir certaines propriétés spécifiques pour les boutons image, en particulier la manière et le moment où les images sont affichées. Ces options de propriétés peuvent être combinées pour améliorer vos boutons d'image. +In addition to the standard positioning and appearance settings, you can set some specific properties for picture buttons, especially concerning how and when the pictures are displayed. These property options can be combined to enhance your picture buttons. -- By default (when no [animation option](properties_Animation.md) is selected), a picture button displays the next picture in the series when the user clicks; it displays the previous picture in the series when the user holds down the **Shift** key and clicks. La séquence d’images s’arrête lorsqu’on atteint la dernière image de la série. En d’autres termes, le bouton ne retourne pas à la première image de la série. +- By default (when no [animation option](properties_Animation.md) is selected), a picture button displays the next picture in the series when the user clicks; it displays the previous picture in the series when the user holds down the **Shift** key and clicks. When the user reaches the last picture in the series, the picture does not change when the user clicks again. In other words, it does not cycle back to the first picture in the series. -Les autres modes disponibles sont les suivants : -- [Recommencer la séquence](properties_Animation.md#loopBackToFirstFrame) +The following other modes are available: +- [Loop back to first frame](properties_Animation.md#loopBackToFirstFrame) - [Switch back when Released](properties_Animation.md#switch-back-when-released) - [Switch when Roll Over](properties_Animation.md#switch-when-roll-over) -- [Défilement continu sur clic](properties_Animation.md#switch-continuously-on-clicks) +- [Switch continuously on clicks](properties_Animation.md#switch-continuously-on-clicks) - [Use Last Frame as Disabled](properties_Animation.md#use-last-frame-as-disabled) - [Use Last frame as disabled](properties_Animation.md#use-last-frame-as-disabled) -> La [variable associée](properties_Object.md#variable-or-expression) à un bouton image retourne le numéro d’indice, dans le tableau d’imagettes, de l’image actuellement affichée. La numérotation des images dans le tableau débute à 0. +> The [associated variable](properties_Object.md#variable-or-expression) of the picture button returns the index number, in the thumbnail table, of the current picture displayed. The numbering of pictures in the table begins with 0. -## Propriétés prises en charge +## Supported Properties -[Bold](properties_Text.md#bold) - [ Style de la bordure](properties_BackgroundAndBorder.md#border-line-style) - [Bas](properties_CoordinatesAndSizing.md#bottom) - [Style de bouton](properties_TextAndPicture.md#button-style) - [Class](properties_Object.md#css-class) - [Colonnes](properties_Crop.md#columns) - [Déposable](properties_Action.md#droppable) - [Focusable](properties_Entry.md#focusable) - [Police](properties_Text.md#font) - [Couleur de la police](properties_Text.md#font-color) - [Hauteur](properties_CoordinatesAndSizing.md#height) - [Message d'aide](properties_Help.md#help-tip) - [Dim. horizontal](properties_ResizingOptions.md#horizontal-sizing) - [Italique](properties_Text.md#italic) - [Gauche](properties_CoordinatesAndSizing.md#left) - [Recommencer la séquence](properties_Animation.md#loopBackToFirstFrame) - [Nom](properties_Object.md#object-name) - [Chemin d'accès de l'image](properties_Picture.md#pathname) - [Droite](properties_CoordinatesAndSizing.md#right) - [Lignes](properties_Crop.md#rows) - [Raccouric](properties_Entry.md#shortcut) - [Action standard ](properties_Action.md#standard-action) - [Retour sur relâchement du clic](properties_Animation.md#switchBackWhenReleased) - [Défilement continu sur clic](properties_Animation.md#switch-continuously-on-clicks) - [Défilement tous les n ticks](properties_Animation.md#switch-every-x-ticks) - [Titre](properties_Object.md#title) - [Recommencer la séquence](properties_Animation.md#switchWhenRollOver) - [Haut](properties_CoordinatesAndSizing.md#top) - [Type](properties_Object.md#type) - [Dernière imagette si désactivé](properties_Animation.md#use-last-frame-as-disabled) - [Variable ou expression](properties_Object.md#variable-or-expression) - [Dim. vertical](properties_ResizingOptions.md#vertical-sizing) - [Visibilité](properties_Display.md#visibility) - [Largeur](properties_CoordinatesAndSizing.md#width) +[Bold](properties_Text.md#bold) - [Border Line Style](properties_BackgroundAndBorder.md#border-line-style) - [Bottom](properties_CoordinatesAndSizing.md#bottom) - [Button Style](properties_TextAndPicture.md#button-style) - [Class](properties_Object.md#css-class) - [Columns](properties_Crop.md#columns) - [Droppable](properties_Action.md#droppable) - [Focusable](properties_Entry.md#focusable) - [Font](properties_Text.md#font) - [Font Color](properties_Text.md#font-color) - [Height](properties_CoordinatesAndSizing.md#height) - [Help Tip](properties_Help.md#help-tip) - [Horizontal Sizing](properties_ResizingOptions.md#horizontal-sizing) - [Italic](properties_Text.md#italic) - [Left](properties_CoordinatesAndSizing.md#left) - [Loop back to first frame](properties_Animation.md#loopBackToFirstFrame) - [Object Name](properties_Object.md#object-name) - [Pathname](properties_Picture.md#pathname) - [Right](properties_CoordinatesAndSizing.md#right) - [Rows](properties_Crop.md#rows) - [Shortcut](properties_Entry.md#shortcut) - [Standard action](properties_Action.md#standard-action) - [Switch back when released](properties_Animation.md#switchBackWhenReleased) - [Switch continuously on clicks](properties_Animation.md#switch-continuously-on-clicks) - [Switch every x ticks](properties_Animation.md#switch-every-x-ticks) - [Title](properties_Object.md#title) - [Switch when roll over](properties_Animation.md#switchWhenRollOver) - [Top](properties_CoordinatesAndSizing.md#top) - [Type](properties_Object.md#type) - [Use Last frame as disabled](properties_Animation.md#use-last-frame-as-disabled) - [Variable or Expression](properties_Object.md#variable-or-expression) - [Vertical Sizing](properties_ResizingOptions.md#vertical-sizing) - [Visibility](properties_Display.md#visibility) - [Width](properties_CoordinatesAndSizing.md#width) From 399e717dc8297b961acef6976735a51c91247f9e Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:22:14 +0100 Subject: [PATCH 157/260] New translations picturePopupMenu_overview.md (French) --- .../FormObjects/picturePopupMenu_overview.md | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/picturePopupMenu_overview.md b/website/translated_docs/fr/FormObjects/picturePopupMenu_overview.md index 40c32d16e27029..e2ef9966c1c58b 100644 --- a/website/translated_docs/fr/FormObjects/picturePopupMenu_overview.md +++ b/website/translated_docs/fr/FormObjects/picturePopupMenu_overview.md @@ -1,32 +1,32 @@ --- id: picturePopupMenuOverview -title: Pop-up menu image +title: Picture Pop-up Menu --- ## Aperçu -Un pop-up menu image affiche un tableau d’images bidimensionnel. Un pop-up menu image peut être utilisé à la place d’un [bouton image](pictureButton_overview.md). Le mode de création d’une image destinée à être utilisée dans un pop-up menu image est identique à celui d’un bouton image. Le mode de fonctionnement de l’objet, quant à lui, s’apparente à la [Grille de boutons](buttonGrid_overview.md), à la différence près que l’image est utilisée comme un pop-up menu et non comme un objet du formulaire. +A picture pop-up menu is a pop-up menu that displays a two-dimensional array of pictures. A picture pop-up menu can be used instead of a [picture button](pictureButton_overview.md). The creation of the picture to use with a picture pop-up menu is similar to the creation of a picture for a picture button. The concept is the same as for [button grids](buttonGrid_overview.md), except that the graphic is used as a pop-up menu instead of a form object. -## Utiliser des pop-up menus images +## Using picture pop-up menus -Pour créer un pop-up menu image, vous devez [faire référence à une image](properties_Picture.md#pathname) conçue dans ce but. L’exemple suivant vous permet de sélectionner la langue d’interface de l’application à l’aide d’un pop-up menu image. Chaque langue est symbolisée par un drapeau : +To create a picture pop-up menu, you need to [refer to a picture](properties_Picture.md#pathname). The following example allows you to select the interface language by selecting it from a picture pop-up menu. Each language is represented by the corresponding flag: ![](assets/en/FormObjects/picturePopupMenu_example.png) -### Programmation +### Programming -Vous pouvez gérer les pop-up menus image par l’intermédiaire de méthodes. A l’instar des [grilles de boutons](buttonGrid_overview.md), les variables associées au pop-up menu image prennent pour valeur le numéro de l’élément sélectionné et zéro (0) si aucun élément n’est sélectionné. Les éléments sont numérotés de gauche à droite et de haut en bas, à compter de l’élément situé en haut à gauche. +You can manage picture pop-up menus using methods. As with [button grids](buttonGrid_overview.md), variables associated with picture pop-up menus are set to the value of the selected element in the picture pop-up menu. If no element is selected, the value is 0. Elements are numbered, row by row, from left to right starting with the top row. -### Aller à page +### Goto page -Vous pouvez associer l’[action standard](https://doc.4d.com/4Dv17R5/4D/17-R5/Standard-actions.300-4163633.en.html) `Aller à page` à un objet de type pop-up menu image. Lorsque cette action est activée, 4D affiche automatiquement la page du formulaire correspondant à la position de l'image sélectionnée dans le tableau d'images. Les éléments sont numérotés de gauche à droite et de haut en bas, à compter de l’élément situé en haut à gauche. +You can assign the `gotoPage` [standard action](https://doc.4d.com/4Dv17R5/4D/17-R5/Standard-actions.300-4163633.en.html) to a picture pop-up menu. When that action is selected, 4D will automatically display the page of the form that corresponds to the position of the picture selected in the picture array. Elements are numbered from left to right and top to bottom, beginning with the top left corner. -Par exemple, si l’utilisateur clique sur le 3e élément, 4D affichera la page 3 du formulaire courant (si elle existe). Si vous souhaitez gérer vous-même l’effet du clic, conservez l’option par défaut `Pas d’action`. +For example, if the user selects the 3rd element, 4D will display the third page of the current form (if it exists). If you want to manage the effect of a click yourself, select `No action`. -## Propriétés prises en charge +## Supported Properties [Bold](properties_Text.md#bold) - [Border Line Style](properties_BackgroundAndBorder.md#border-line-style) -[Bottom](properties_CoordinatesAndSizing.md#bottom) - [Class](properties_Object.md#css-class) - [Columns](properties_Crop.md#columns) - [Height](properties_CoordinatesAndSizing.md#height) - [Help Tip](properties_Help.md#help-tip) - [Horizontal Sizing](properties_ResizingOptions.md#horizontal-sizing) - [Left](properties_CoordinatesAndSizing.md#left) - [Object Name](properties_Object.md#object-name) - [Pathname](properties_Picture.md#pathname) - [Right](properties_CoordinatesAndSizing.md#right) - [Rows](properties_Crop.md#rows)- [Standard action](properties_Action.md#standard-action) - [Top](properties_CoordinatesAndSizing.md#top) - [Type](properties_Object.md#type) - [Variable or Expression](properties_Object.md#variable-or-expression) - [Vertical Sizing](properties_ResizingOptions.md#vertical-sizing) - [Visibility](properties_Display.md#visibility) - [Width](properties_CoordinatesAndSizing.md#width) \ No newline at end of file From 6c42630c0f26f4fca83464e4595127bacd94b425 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:22:16 +0100 Subject: [PATCH 158/260] New translations pluginArea_overview.md (French) --- .../fr/FormObjects/pluginArea_overview.md | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/pluginArea_overview.md b/website/translated_docs/fr/FormObjects/pluginArea_overview.md index 988bc67cde0ec9..ea5ddde3787595 100644 --- a/website/translated_docs/fr/FormObjects/pluginArea_overview.md +++ b/website/translated_docs/fr/FormObjects/pluginArea_overview.md @@ -1,35 +1,35 @@ --- id: pluginAreaOverview -title: Zone de plug-in +title: Plug-in Area --- ## Aperçu -Une zone de plug-in est une zone du formulaire contrôlée par un plug-in. La capacité d’intégrer des plug-ins dans les formulaires permet d’accéder à des possibilités illimitées lorsque vous créez des applications personnalisées. Une zone de plug-in peut réaliser une tâche simple comme l’affichage d’une horloge numérique dans un formulaire, ou plus complexe comme proposer un environnement de traitement de textes, un tableur ou un éditeur graphique. +A plug-in area is an area on the form that is completely controlled by a plug-in. The ability to incorporate plug-ins into forms gives you unlimited possibilities when creating custom applications. A plug-in can perform a simple task such as displaying a digital clock on a form, or a complex task such as providing full-featured word processing, spreadsheet, or graphics capabilities. When opening an application, 4D creates an internal list of the plug-ins [installed in your application](#installing-plug-ins). Once you have inserted a Plug-in Area in a form, you can assign a plug-in to the area directly in the **Type** list in the Property List: ![](assets/en/FormObjects/pluginArea.png) -> Certains plug-ins, comme 4D Internet Commands, ne peuvent pas être utilisés dans des formulaires ou des fenêtres externes. Dans ce cas, ils n’apparaissent pas dans la liste de propriétés. +> Some plug-ins, such as 4D Internet Commands, cannot be used in forms or external windows. When a plug-in cannot be used in a form, it does not appear in the plug-in list of the Property List. -Si vous dessinez une zone de plug-in trop petite, 4D l’affiche sous forme de bouton dont le libellé est le nom de la variable associée à la zone. En exécution, l’utilisateur peut cliquer sur ce bouton afin d’ouvrir une fenêtre spécifique affichant le plug-in. +If you draw a plug-in area that is too small, 4D will display it as a button whose title is the name of the variable associated with the area. During execution, the user can click on this button in order to open a specific window displaying the plug-in. -### Propriétés avancées +### Advanced properties If advanced options are provided by the author of the plug-in, a **Plug-in** theme containing an [**Advanced Properties**](properties_Plugins.md) button may be enabled in the Property list. In this case, you can click this button to set these options, usually through a custom dialog box. -## Installer un plug-in +## Installing plug-ins -Pour ajouter un plug-in dans votre environnement 4D, vous devez dans un premier temps quitter votre application 4D. Le chargement des plug-ins s’effectue au lancement de l’application 4D. Pour plus d’informations sur l’installation d’un plug-in, reportez-vous à la section [Installer des plugins ou des composants](https://doc.4d.com/4Dv17R6/4D/17-R6/Installing-plugins-or-components.300-4354866.en.html). +To add a plug-in in your 4D environment, you first need to quit 4D. Plug-ins are loaded when you launch 4D. For more information about the installation of plug-ins, refer to [Installing plugins or components](https://doc.4d.com/4Dv17R6/4D/17-R6/Installing-plugins-or-components.300-4354866.en.html). -## Créer des plug-ins +## Creating plug-ins -Si vous souhaitez concevoir vos propres plug-ins, vous pouvez obtenir des informations détaillées sur l'écriture et la création de plug-ins. 4D fournit un [kit complet (sur github)](https://github.com/4d/4D-Plugin-SDK) pour vous aider à écrire des plug-ins personnalisés. +If you are interested in designing your own plug-ins, you can receive extensive information about writing and implementing plug-ins. 4D provides a [complete kit (on github)](https://github.com/4d/4D-Plugin-SDK) to help you write custom plug-ins. -## Propriétés prises en charge -[Style de la bordure](properties_BackgroundAndBorder.md#border-line-style) - [Bas](properties_CoordinatesAndSizing.md#bottom) - [Propriétés avancées](properties_Plugins.md) - [Class](properties_Object.md#css-class) - [Glissable](properties_Action.md#draggable-and-droppable) - [Déposable](properties_Action.md#draggable-and-droppable) - [Type d'expression](properties_Object.md#expression-type) - [Focusable](properties_Entry.md#focusable) - [Hauteur](properties_CoordinatesAndSizing.md#height) - [Dim. horizontal](properties_ResizingOptions.md#horizontal-sizing) - [Gauche](properties_CoordinatesAndSizing.md#left) - [Méthode](properties_Action.md#method) - [Nom](properties_Object.md#object-name) - [Type de Plug-in](properties_Object.md#plug-in-kind) - [Droite](properties_CoordinatesAndSizing.md#right) - [Haut](properties_CoordinatesAndSizing.md#top) - [Type](properties_Object.md#type) - [Variable ou expression](properties_Object.md#variable-or-expression) - [Dim. vertical](properties_ResizingOptions.md#vertical-sizing) - [Visibilté](properties_Display.md#visibility) - [Largeur](properties_CoordinatesAndSizing.md#width) \ No newline at end of file +## Supported Properties +[Border Line Style](properties_BackgroundAndBorder.md#border-line-style) - [Bottom](properties_CoordinatesAndSizing.md#bottom) - [Advanced Properties](properties_Plugins.md) - [Class](properties_Object.md#css-class) - [Draggable](properties_Action.md#draggable-and-droppable) - [Droppable](properties_Action.md#draggable-and-droppable) - [Expression Type](properties_Object.md#expression-type) - [Focusable](properties_Entry.md#focusable) - [Height](properties_CoordinatesAndSizing.md#height) - [Horizontal Sizing](properties_ResizingOptions.md#horizontal-sizing) - [Left](properties_CoordinatesAndSizing.md#left) - [Method](properties_Action.md#method) - [Object Name](properties_Object.md#object-name) - [Plug-in Kind](properties_Object.md#plug-in-kind) - [Right](properties_CoordinatesAndSizing.md#right) - [Top](properties_CoordinatesAndSizing.md#top) - [Type](properties_Object.md#type) - [Variable or Expression](properties_Object.md#variable-or-expression) - [Vertical Sizing](properties_ResizingOptions.md#vertical-sizing) - [Visibilty](properties_Display.md#visibility) - [Width](properties_CoordinatesAndSizing.md#width) \ No newline at end of file From 9c8b0cd4cdc6a8a760558daabfd0863a3dc96db1 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:22:18 +0100 Subject: [PATCH 159/260] New translations properties_Action.md (French) --- .../fr/FormObjects/properties_Action.md | 236 +++++++----------- 1 file changed, 86 insertions(+), 150 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/properties_Action.md b/website/translated_docs/fr/FormObjects/properties_Action.md index d7ebc5c0888179..7779fa5bb6e0a5 100644 --- a/website/translated_docs/fr/FormObjects/properties_Action.md +++ b/website/translated_docs/fr/FormObjects/properties_Action.md @@ -5,97 +5,80 @@ title: Action --- -## Glissable +## Draggable -Contrôlez si l'utilisateur peut faire glisser l'objet et comment il peut le faire. Par défaut, aucune opération de glisser n'est autorisée. +Control whether and how the user can drag the object. By default, no drag operation is allowed. -Deux modes de glisser-déposer sont proposés dans 4D : +Two drag modes are available: -- Un mode **personnalisé**, dans lequel le glisser déclenche l'événement formulaire `Sur début glisser` dans le contexte de l'objet. Vous gérez ensuite le glisser à l'aide d'une méthode. - En mode personnalisé, le glisser-déposer est géré par le programmeur. Ce mode vous permet de mettre en place des interfaces basées sur le glisser-déposer, y compris des interfaces qui ne déplacent pas nécessairement des données mais qui peuvent effectuer tout type d'action, telle que l'ouverture de fichiers ou le lancement d'un calcul. Ce mode est basé sur un ensemble de propriétés, d'événements et de commandes spécifiques à partir du thème `Conteneur de données`. -- Un mode **automatique**, dans lequel 4D **copie** du texte ou des images directement à partir de l'objet formulaire. Il peut alors être utilisé dans la même zone 4D, entre deux zones 4D, ou entre 4D et une autre application. Par exemple, le glisser-déposer automatique vous permet de copier une valeur entre deux champs, sans programmation : +- **Custom**: In this mode, any drag operation performed on the object triggers the `On Begin Drag` form event in the context of the object. You then manage the drag action using a method. + In custom mode, basically the whole drag-and-drop operation is handled by the programmer. This mode lets you implement any interface based upon drag-on-drop, including interfaces that do not necessarily transport data, but can perform any action like opening files or triggering a calculation. This mode is based upon a combination of specific properties, events, and commands from the `Pasteboard` theme. +- **Automatic**: In this mode, 4D **copies** text or pictures directly from the form object. It can then be used in the same 4D area, between two 4D areas, or between 4D and another application. For example, automatic drag (and drop) lets you copy a value between two fields without using programming: ![](assets/en/FormObjects/property_automaticDragDrop.png) - ![](assets/en/FormObjects/property_automaticDragDrop2.png) Dans ce mode, l'événement de formulaire `Sur début glisser` n'est PAS généré. Si vous souhaitez "forcer" l'utilisation du glissement personnalisé alors que le glissement automatique est activé, maintenez la touche **Alt** (Windows) ou **Option** (macOS) enfoncée pendant l'action. Cette option n'est pas disponible pour les images. + ![](assets/en/FormObjects/property_automaticDragDrop2.png) In this mode, the `On Begin Drag` form event is NOT generated. If you want to "force" the use of the custom drag while automatic drag is enabled, hold down the **Alt** (Windows) or **Option** (macOS) key during the action. This option is not available for pictures. -Pour plus d'informations, reportez-vous à [Glisser-déposer](https://doc.4d.com/4Dv18/4D/18/Drag-and-Drop.300-4505037.en.html) dans le manuel *Langage 4D*. +For more information, refer to [Drag and Drop](https://doc.4d.com/4Dv18/4D/18/Drag-and-Drop.300-4505037.en.html) in the *4D Language Reference* manual. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| -------- | --------------- | ---------------------------------------------------------- | -| dragging | Texte | "none" (par défaut), "custom", "automatic" (hors list box) | +| Name | Data Type | Possible Values | +| -------- | --------- | ------------------------------------------------------------ | +| dragging | text | "none" (default), "custom", "automatic" (excluding list box) | -#### Objets pris en charge +#### Objects Supported -[Zones 4D Write Pro](writeProArea_overview.md) - [Zone de saisie](input_overview.md) - [Liste hiérarchique](list_overview.md#overview) - [List Box](listbox_overview.md#overview) - [Zone de plug-in](pluginArea_overview.md#overview) +[4D Write Pro areas](writeProArea_overview.md) - [Input](input_overview.md) - [Hierarchical List](list_overview.md#overview) - [List Box](listbox_overview.md#overview) - [Plug-in Area](pluginArea_overview.md#overview) -#### Voir également -[Déposable](#droppable) +#### See also +[Droppable](#droppable) --- -## Déposable +## Droppable -Contrôlez si et comment l'objet peut être la destination d'une opération de glisser-déposer. +Control whether and how the object can be the destination of a drag and drop operation. -Deux modes de glisser-déposer sont proposés dans 4D : +Two drop modes are available: -- Un mode **personnalisé**, dans lequel le déposer déclenche les événements formulaire `Sur glisser` et `Sur déposer` dans le contexte de l'objet. Vous gérez ensuite le déposer à l'aide d'une méthode. - En mode personnalisé, le glisser-déposer est géré par le programmeur. Ce mode vous permet de mettre en place des interfaces basées sur le glisser-déposer, y compris des interfaces qui ne déplacent pas nécessairement des données mais qui peuvent effectuer tout type d'action, telle que l'ouverture de fichiers ou le lancement d'un calcul. Ce mode est basé sur un ensemble de propriétés, d'événements et de commandes spécifiques à partir du thème `Conteneur de données`. -- Un mode **automatique**, dans lequel 4D gère automatiquement — si possible — l’insertion des données glissées de type texte ou image et déposées sur l’objet (les données sont collées dans l’objet). Les événements `Sur glisser` et `Sur déposer` ne sont pas générés. En revanche, les événements `Sur après modification` (lors du déposer) et `Sur données modifiées` (lorsque l'objet perd le focus) sont générés. +- **Custom**: In this mode, any drop operation performed on the object triggers the `On Drag Over` and `On Drop` form events in the context of the object. You then manage the drop action using a method. + In custom mode, basically the whole drag-and-drop operation is handled by the programmer. This mode lets you implement any interface based upon drag-on-drop, including interfaces that do not necessarily transport data, but can perform any action like opening files or triggering a calculation. This mode is based upon a combination of specific properties, events, and commands from the `Pasteboard` theme. +- **Automatic**: In this mode, 4D automatically manages — if possible — the insertion of dragged data of the text or picture type that is dropped onto the object (the data are pasted into the object). The `On Drag Over` and `On Drop` form events are NOT generated. On the other hand, the `On After Edit` (during the drop) and `On Data Change` (when the object loses the focus) events are generated. -Pour plus d'informations, reportez-vous à [Glisser-déposer](https://doc.4d.com/4Dv18/4D/18/Drag-and-Drop.300-4505037.en.html) dans le manuel *Langage 4D*. +For more information, refer to [Drag and Drop](https://doc.4d.com/4Dv18/4D/18/Drag-and-Drop.300-4505037.en.html) in the *4D Language Reference* manual. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| -------- | --------------- | ---------------------------------------------------------- | -| dropping | Texte | "none" (par défaut), "custom", "automatic" (hors list box) | +| Name | Data Type | Possible Values | +| -------- | --------- | ------------------------------------------------------------ | +| dropping | text | "none" (default), "custom", "automatic" (excluding list box) | -#### Objets pris en charge +#### Objects Supported -[Zones 4D Write Pro](writeProArea_overview.md) - [Bouton](button_overview.md) - [Zone de saisie](input_overview.md) - [Liste hiérarchique](list_overview.md#overview) - [List Box](listbox_overview.md#overview) - [Zone de plug-in](pluginArea_overview.md#overview) - -

    - - - - -#### Voir également - -[Glissable](#draggable) +[4D Write Pro areas](writeProArea_overview.md) - [Button](button_overview.md) - [Input](input_overview.md) - [Hierarchical List](list_overview.md#overview) - [List Box](listbox_overview.md#overview) - [Plug-in Area](pluginArea_overview.md#overview) +#### See also +[Draggable](#draggable) --- +## Execute object method +When this option is enabled, the object method is executed with the `On Data Change` event *at the same moment* the user changes the value of the indicator. When the option is disabled, the method is executed *after* the modification. +#### JSON Grammar -## Exécuter méthode objet - -Lorsque cette option est activée, la méthode objet est exécutée avec l'événement `Sur données modifiées` *au même moment* où l'utilisateur change la valeur de l'indicateur. Lorsque l'option est désactivée, la méthode est exécutée *après* la modification. - - - -#### Grammaire JSON - -| Nom | Type de données | Valeurs possibles | -| ------------------- | --------------- | ----------------- | -| continuousExecution | boolean | true, false | - - - - -#### Objets pris en charge - -[Indicateur de progression](progressIndicator.md) - [Règle](ruler.md) - [Stepper](stepper.md) +| Name | Data Type | Possible Values | +| ------------------- | --------- | --------------- | +| continuousExecution | boolean | true, false | +#### Objects Supported +[Progress bar](progressIndicator.md) - [Ruler](ruler.md) - [Stepper](stepper.md) @@ -103,67 +86,50 @@ Lorsque cette option est activée, la méthode objet est exécutée avec l'évé --- +## Method +Reference of a method attached to the object. Object methods generally "manage" the object while the form is displayed or printed. You do not call an object method—4D calls it automatically when an event involves the object to which the object method is attached. -## Méthode +Several types of method references are supported: -Référence d'une méthode attachée à l'objet. Les méthodes d'objet "gèrent" généralement l'objet pendant que le formulaire est affiché ou imprimé. Vous n'appelez pas de méthode objet - 4D l'appelle automatiquement lorsqu'un événement implique l'objet auquel la méthode objet est rattachée. - -Plusieurs types de références de méthode sont pris en charge : - -- un chemin de fichier de méthode objet standard, c'est-à-dire qui utilise le modèle suivant : +- a standard object method file path, i.e. that uses the following pattern: `ObjectMethods/objectName.4dm` - ... où `objectName` est le [nom de l'objet](properties_Object.md#object-name). Ce type de référence indique que le fichier de méthode se trouve à l'emplacement par défaut ("sources/forms/*formName*/ObjectMethods/"). Dans ce cas, 4D gère automatiquement la méthode objet lorsque des opérations sont exécutées sur l'objet formulaire (renommage, duplication, copier/coller, etc.) + ... where `objectName` is the actual [object name](properties_Object.md#object-name). This type of reference indicates that the method file is located at the default location ("sources/forms/*formName*/ObjectMethods/"). In this case, 4D automatically handles the object method when operations are executed on the form object (renaming, duplication, copy/paste...) -- un nom de méthode projet : nom d'une méthode projet existante sans extension de fichier, c'est-à-dire : `maMéthode` Dans ce cas, 4D ne prend pas en charge automatiquement les opérations objet. +- a project method name: name of an existing project method without file extension, i.e.: `myMethod` In this case, 4D does not provide automatic support for object operations. - a custom method file path including the .4dm extension, e.g.: `../../CustomMethods/myMethod.4dm` You can also use a filesystem: `/RESOURCES/Buttons/bOK.4dm` In this case, 4D does not provide automatic support for object operations. +#### JSON Grammar - -#### Grammaire JSON - -| Nom | Type de données | Valeurs possibles | -| ------ | --------------- | ------------------------------------------------------------------------------------------ | -| method | Texte | Chemin de fichier standard ou personnalisé de la méthode objet ou nom de la méthode projet | +| Name | Data Type | Possible Values | +| ------ | --------- | ------------------------------------------------------------------ | +| method | text | Object method standard or custom file path, or project method name | - - - -#### Objets pris en charge +#### Objects Supported [4D View Pro Area](viewProArea_overview.md) - [4D Write Pro Area](writeProArea_overview.md) - [Button](button_overview.md) - [Button Grid](buttonGrid_overview.md) - [Check Box](checkbox_overview.md) - [Combo Box](comboBox_overview.md) - [Dropdown list](dropdownList_Overview.md) - [Forms](forms.md) - [Hierarchical List](list_overview.md#overview) - [Input](input_overview.md) - [List Box](listbox_overview.md#overview) - [List Box Column](listbox_overview.md#list-box-columns) - [Picture Button](pictureButton_overview.md) - [Picture Pop up menu](picturePopupMenu_overview.md) - [Plug-in Area](pluginArea_overview.md#overview) - [Progress Indicators](progressIndicator.md) - [Radio Button](radio_overview.md) - [Ruler](ruler.md) - [Spinner](spinner.md) - [Splitter](splitters.md) - [Stepper](stepper.md) - [Subform](subform_overview.md) - [Tab control](tabControl.md) - [Web Area](webArea_overview.md#overview) - - --- +## Movable Rows +`Array type list boxes` +Authorizes the movement of rows during execution. This option is selected by default. It is not available for [selection type list boxes](listbox_overview.md#selection-list-boxes) nor for [list boxes in hierarchical mode](properties_Hierarchy.md#hierarchical-list-box). -## Lignes déplaçables - -`List box de type tableau` - -Autorise le déplacement des lignes pendant l'exécution. Cette option est sélectionnée par défaut. Il n'est pas disponible pour les [list box de type sélection](listbox_overview.md#selection-list-boxes) ni pour les [list box en mode hiérarchique](properties_Hierarchy.md#hierarchical-list-box). - - - -#### Grammaire JSON - -| Nom | Type de données | Valeurs possibles | -| ----------- | --------------- | ----------------- | -| movableRows | boolean | true, false | - +#### JSON Grammar +| Name | Data Type | Possible Values | +| ----------- | --------- | --------------- | +| movableRows | boolean | true, false | - -#### Objets pris en charge +#### Objects Supported [List Box](listbox_overview.md#overview) @@ -171,62 +137,42 @@ Autorise le déplacement des lignes pendant l'exécution. Cette option est séle - - --- - - -## Multi-sélectionnable +## Multi-selectable Allows the selection of multiple records/options in a [hierarchical list](list_overview.md). +#### JSON Grammar +| Name | Data Type | Possible Values | +| ------------- | --------- | ---------------------------- | +| selectionMode | text | "multiple", "single", "none" | -#### Grammaire JSON - -| Nom | Type de données | Valeurs possibles | -| ------------- | --------------- | ---------------------------- | -| selectionMode | Texte | "multiple", "single", "none" | - - - - -#### Objets pris en charge - -[Liste hiérarchique](list_overview.md) - +#### Objects Supported +[Hierarchical List](list_overview.md) --- +## Sortable +Allows sorting column data by clicking a [listbox](listbox_overview.md) header. This option is selected by default. Picture type arrays (columns) cannot be sorted using this feature. -## Triable - -Permet de trier les données de colonne en cliquant sur un en-tête de [Listbox](listbox_overview.md). Cette option est sélectionnée par défaut. Les tableaux de types d'image (colonnes) ne peuvent pas être triés à l'aide de cette fonction. - -Dans les list box basées sur une sélection d'enregistrements, la fonction de tri standard est disponible uniquement : - -* Lorsque la source de données est *Sélection courante*, -* Avec des colonnes associées à des champs (de type Alpha, Numérique, Date, Heure ou Booléen). - -Dans d'autres cas (list box basées sur des sélections nommées, colonnes associées à des expressions), la fonction de tri standard n'est pas disponible. Un tri de list box standard modifie l'ordre de la sélection courante dans la base de données. Cependant, les enregistrements en surbrillance et l'enregistrement courant ne sont pas modifiés. Un tri standard synchronise toutes les colonnes de la list box, y compris les colonnes calculées. +In list boxes based on a selection of records, the standard sort function is available only: +* When the data source is *Current Selection*, +* With columns associated with fields (of the Alpha, Number, Date, Time or Boolean type). +In other cases (list boxes based on named selections, columns associated with expressions), the standard sort function is not available. A standard list box sort changes the order of the current selection in the database. However, the highlighted records and the current record are not changed. A standard sort synchronizes all the columns of the list box, including calculated columns. +#### JSON Grammar -#### Grammaire JSON - -| Nom | Type de données | Valeurs possibles | -| -------- | --------------- | ----------------- | -| sortable | boolean | true, false | - - - - -#### Objets pris en charge +| Name | Data Type | Possible Values | +| -------- | --------- | --------------- | +| sortable | boolean | true, false | +#### Objects Supported [List Box](listbox_overview.md) @@ -234,30 +180,20 @@ Dans d'autres cas (list box basées sur des sélections nommées, colonnes assoc - - --- +## Standard action +Typical activities to be performed by active objects (*e.g.*, letting the user accept, cancel, or delete records, move between records or from page to page in a multi-page form, etc.) have been predefined by 4D as standard actions. They are described in detail in the [Standard actions](https://doc.4d.com/4Dv17R5/4D/17-R5/Standard-actions.300-4163633.en.html) section of the *Design Reference*. +You can assign both a standard action and a project method to an object. In this case, the standard action is usually executed after the method and 4D uses this action to enable/disable the object according to the current context. When an object is deactivated, the associated project method cannot be executed. -## Action standard - -Activités typiques à réaliser par les objets actifs (par exemple, permettre à l'utilisateur d'accepter, d'annuler ou de supprimer des enregistrements, de se déplacer entre les enregistrements ou de page en page dans un formulaire multi-pages, etc.) ont été prédéfinies par 4D comme actions standard. Elles sont décrites en détail dans la section [Actions standard](https://doc.4d.com/4Dv17R5/4D/17-R5/Standard-actions.300-4163633.en.html) du *manuel de développement*. - -Vous pouvez associer à la fois une action standard et la méthode projet d'un objet. Dans ce cas, l'action standard est généralement exécutée après la méthode et 4D utilise cette action pour activer/désactiver l'objet en fonction du contexte courant. Lorsqu’un objet est désactivé, la méthode projet associée ne peut être exécutée. - -Vous pouvez également définir cette propriété à l'aide de la commande `OBJECT SET ACTION`. - - - -#### Grammaire JSON - -| Nom | Type de données | Valeurs possibles | -| ------ | --------------- | ---------------------------------------------------------------------------------------------------------------- | -| action | string | Le nom d'une [action standard valide](https://doc.4d.com/4Dv17R5/4D/17-R5/Standard-actions.300-4163633.en.html). | - +You can also set this property using the `OBJECT SET ACTION` command. +#### JSON Grammar +| Name | Data Type | Possible Values | +| ------ | --------- | ---------------------------------------------------------------------------------------------------------------- | +| action | string | The name of a [valid standard action](https://doc.4d.com/4Dv17R5/4D/17-R5/Standard-actions.300-4163633.en.html). | -#### Objets pris en charge +#### Objects Supported -[Bouton](button_overview.md) - [Grille de boutons](buttonGrid_overview.md) - [Check Box](checkbox_overview.md) - [Liste déroulante](dropdownList_Overview.md) - [List Box](listbox_overview.md) - [Bouton image](pictureButton_overview.md) - [Pop-up Menu image](picturePopupMenu_overview.md) - [Onglet](tabControl.md) +[Button](button_overview.md) - [Button Grid](buttonGrid_overview.md) - [Check Box](checkbox_overview.md) - [Drop-down List](dropdownList_Overview.md) - [List Box](listbox_overview.md) - [Picture Button](pictureButton_overview.md) - [Picture Pop-up Menu](picturePopupMenu_overview.md) - [Tab control](tabControl.md) From ad0f1c63a64fe77ba7791cef758ee6abd79436fc Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:22:20 +0100 Subject: [PATCH 160/260] New translations properties_Menu.md (French) --- website/translated_docs/fr/FormEditor/properties_Menu.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/website/translated_docs/fr/FormEditor/properties_Menu.md b/website/translated_docs/fr/FormEditor/properties_Menu.md index 4918ed2523c3c8..cff6ffb7234a10 100644 --- a/website/translated_docs/fr/FormEditor/properties_Menu.md +++ b/website/translated_docs/fr/FormEditor/properties_Menu.md @@ -15,9 +15,9 @@ The selection of a menu command causes an `On Menu Selected` event to be sent to The form menu bar will operate for both input and output forms. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------- | --------------- | ------------------ | -| menuBar | string | Name of a menu bar | +| Name | Data Type | Possible Values | +| ------- | --------- | ------------------ | +| menuBar | string | Name of a menu bar | From 8684deb31de09158993e36b6aabfba0304ca382b Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:22:24 +0100 Subject: [PATCH 161/260] New translations properties_BackgroundAndBorder.md (French) --- .../properties_BackgroundAndBorder.md | 190 +++++++++--------- 1 file changed, 95 insertions(+), 95 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/properties_BackgroundAndBorder.md b/website/translated_docs/fr/FormObjects/properties_BackgroundAndBorder.md index 4466f9a67cba75..ca5d9aa37bd1ea 100644 --- a/website/translated_docs/fr/FormObjects/properties_BackgroundAndBorder.md +++ b/website/translated_docs/fr/FormObjects/properties_BackgroundAndBorder.md @@ -1,64 +1,64 @@ --- id: propertiesBackgroundAndBorder -title: Fond et bordure +title: Background and Border --- --- -## Couleur de fond alternée +## Alternate Background Color -Permet de définir une couleur d'arrière-plan différente pour les lignes / colonnes impaires dans une list box. Par défaut, *Automatique* est sélectionné : la colonne utilise la couleur de fond alternative définie au niveau de la list box. +Allows setting a different background color for odd-numbered rows/columns in a list box. By default, *Automatic* is selected: the column uses the alternate background color set at the list box level. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------------- | --------------- | ------------------------------------------ | -| alternateFill | string | une valeur css; "transparent"; "automatic" | +| Name | Data Type | Possible Values | +| ------------- | --------- | ----------------------------------------- | +| alternateFill | string | any css value; "transparent"; "automatic" | -#### Objets pris en charge -[List Box](listbox_overview.md#overview) - [Colonne List Box](listbox_overview.md#list-box-columns) +#### Objects Supported +[List Box](listbox_overview.md#overview) - [List Box Column](listbox_overview.md#list-box-columns) --- -## Couleur de fond / Couleur de remplissage +## Background Color / Fill Color -Définit la couleur de fond d'un objet. +Defines the background color of an object. -Dans le cas d'une list box, par défaut *Automatique* est sélectionné : la colonne utilise la couleur de fond définie au niveau de la list box. +In the case of a list box, by default *Automatic* is selected: the column uses the background color set at the list box level. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------------ | --------------- | ------------------------------------------ | -| border-style | string | une valeur css; "transparent"; "automatic" | +| Name | Data Type | Possible Values | +| ---- | --------- | ----------------------------------------- | +| fill | string | any css value; "transparent"; "automatic" | -#### Objets pris en charge +#### Objects Supported -[Liste Hiérarchique](list_overview.md) - [List Box](listbox_overview.md) - [Colonne List Box](listbox_overview.md#list-box-columns) - [Pied List Box](listbox_overview.md#list-box-footers) - [Ovale](shapes_overview.md#oval) - [Rectangle](shapes_overview.md#rectangle) - [Zone de texte](text.md) +[Hierarchical List](list_overview.md) - [List Box](listbox_overview.md) - [List Box Column](listbox_overview.md#list-box-columns) - [List Box Footer](listbox_overview.md#list-box-footers) - [Oval](shapes_overview.md#oval) - [Rectangle](shapes_overview.md#rectangle) - [Text Area](text.md) -#### Voir également +#### See also [Transparent](#transparent) --- -## Expression couleur de fond +## Background Color Expression -`List box de type collection et de type sélection d'entité` +`Selection and collection type list boxes` -Une expression ou une variable (les variables de tableau ne peuvent pas être utilisées) pour appliquer une couleur d'arrière-plan personnalisée à chaque ligne de la list box. L'expression ou la variable sera évaluée pour chaque ligne affichée et doit retourner une valeur de couleur RGB. Pour plus d'informations, reportez-vous à la description de la commande `OBJECT SET RGB COLORS` dans le *manuel de langage 4D*. +An expression or a variable (array variables cannot be used) to apply a custom background color to each row of the list box. The expression or variable will be evaluated for each row displayed and must return a RGB color value. For more information, refer to the description of the `OBJECT SET RGB COLORS` command in the *4D Language Reference manual*. -Vous pouvez également définir cette propriété à l'aide de la commande `LISTBOX SET PROPERTY` avec la constante `lk background color expression`. -> Avec les list box de type collection ou sélection d'entité, cette propriété peut également être définie à l'aide d'une [Meta Info Expression](properties_Text.md#meta-info-expression). +You can also set this property using the `LISTBOX SET PROPERTY` command with `lk background color expression` constant. +> With collection or entity selection type list boxes, this property can also be set using a [Meta Info Expression](properties_Text.md#meta-info-expression). -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------------- | --------------- | --------------------------------------------------- | -| rowFillSource | string | Une expression retournant une valeur de couleur RGB | +| Name | Data Type | Possible Values | +| ------------- | --------- | ----------------------------------------- | +| rowFillSource | string | An expression returning a RGB color value | -#### Objets pris en charge -[List Box](listbox_overview.md#overview) - [Colonne List Box](listbox_overview.md#list-box-columns) +#### Objects Supported +[List Box](listbox_overview.md#overview) - [List Box Column](listbox_overview.md#list-box-columns) @@ -66,58 +66,58 @@ Vous pouvez également définir cette propriété à l'aide de la commande `LIST --- -## Style de la bordure +## Border Line Style -Permet de définir un style standard pour la bordure de l'objet. +Allows setting a standard style for the object border. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ----------- | --------------- | ----------------------------------------------------------------- | -| borderStyle | Texte | "system", "none", "solid", "dotted", "raised", "sunken", "double" | +| Name | Data Type | Possible Values | +| ----------- | --------- | ----------------------------------------------------------------- | +| borderStyle | text | "system", "none", "solid", "dotted", "raised", "sunken", "double" | -#### Objets pris en charge +#### Objects Supported -[Zone 4D View Pro](viewProArea_overview.md) - [Zone 4D Write Pro](writeProArea_overview.md) - [Boutons](button_overview.md) - [Grille de boutons](buttonGrid_overview.md) - [Case à cocher](list_overview.md#overview) - [Zone de saisie](input_overview.md) - [List Box](listbox_overview.md#overview) - [Bouton image](pictureButton_overview.md) - [Pop up menu image](picturePopupMenu_overview.md) - [Zone de plug-in](pluginArea_overview.md#overview) - [Indicateur de progression](progressIndicator.md) - [Règle](ruler.md) - [Spinner](spinner.md) - [Stepper](stepper.md) - [Sous-formulaire](subform_overview.md#overview) - [Onglet](text.md) - [Zone Web](webArea_overview.md#overview) +[4D View Pro Area](viewProArea_overview.md) - [4D Write Pro areas](writeProArea_overview.md) - [Buttons](button_overview.md) - [Button Grid](buttonGrid_overview.md) - [Hierarchical List](list_overview.md#overview) - [Input](input_overview.md) - [List Box](listbox_overview.md#overview) - [Picture Button](pictureButton_overview.md) - [Picture Pop-up Menu](picturePopupMenu_overview.md) - [Plug-in Area](pluginArea_overview.md#overview) - [Progress Indicator](progressIndicator.md) - [Ruler](ruler.md) - [Spinner](spinner.md) - [Stepper](stepper.md) - [Subform](subform_overview.md#overview) - [Text Area](text.md) - [Web Area](webArea_overview.md#overview) --- ## Dotted Line Type -Décrit le type de ligne en pointillé comme une séquence de points noirs et blancs. +Describes dotted line type as a sequence of black and white points. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| --------------- | ---------------------- | --------------------------------------------------------------------------- | -| strokeDashArray | number array or string | Ex : "6 1" ou \[6,1\] pour une séquence de points noirs et un point blanc | +| Name | Data Type | Possible Values | +| --------------- | ---------------------- | ------------------------------------------------------------------------ | +| strokeDashArray | number array or string | Ex. "6 1" or \[6,1\] for a sequence of 6 black point and 1 white point | -#### Objets pris en charge +#### Objects Supported -[Rectangle](shapes_overview.md#rectangle) - [Ovale](shapes_overview.md#oval) - [Ligne](shapes_overview.md#line) +[Rectangle](shapes_overview.md#rectangle) - [Oval](shapes_overview.md#oval) - [Line](shapes_overview.md#line) --- -## Masquer lignes vides finales +## Hide extra blank rows -Contrôle l'affichage des lignes vides supplémentaires ajoutées au bas d'un objet list box. Par défaut, 4D ajoute ces lignes supplémentaires pour remplir la zone vide : +Controls the display of extra blank rows added at the bottom of a list box object. By default, 4D adds such extra rows to fill the empty area: ![](assets/en/FormObjects/property_hideExtraBlankRows1.png) -Vous pouvez supprimer ces lignes vides en sélectionnant cette option. Le bas de l'objet list box est alors laissé vide : +You can remove these empty rows by selecting this option. The bottom of the list box object is then left blank: ![](assets/en/FormObjects/property_hideExtraBlankRows2.png) -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------------------ | --------------- | ----------------- | -| hideExtraBlankRows | boolean | true, false | +| Name | Data Type | Possible Values | +| ------------------ | --------- | --------------- | +| hideExtraBlankRows | boolean | true, false | -#### Objets pris en charge +#### Objects Supported [List Box](listbox_overview.md#overview) @@ -127,42 +127,42 @@ Vous pouvez supprimer ces lignes vides en sélectionnant cette option. Le bas de --- ## Line Color -Désigne la couleur des lignes de l'objet. La couleur peut être spécifiée par : +Designates the color of the object's lines. The color can be specified by: -* un nom de couleur - comme "red" -* une valeur HEX - comme "# ff0000" -* une valeur RVB - comme "rgb (255,0,0)" +* a color name - like "red" +* a HEX value - like "#ff0000" +* an RGB value - like "rgb(255,0,0)" -Vous pouvez également définir cette propriété à l'aide de la commande [**OBJECT SET RGB COLORS**](https://doc.4d.com/4Dv18/4D/18/OBJECT-SET-RGB-COLORS.301-4505456.en.html). +You can also set this property using the [**OBJECT SET RGB COLORS**](https://doc.4d.com/4Dv18/4D/18/OBJECT-SET-RGB-COLORS.301-4505456.en.html) command. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------ | --------------- | ------------------------------------------ | -| stroke | string | une valeur css; "transparent"; "automatic" | +| Name | Data Type | Possible Values | +| ------ | --------- | ----------------------------------------- | +| stroke | string | any css value, "transparent", "automatic" | -> Cette propriété est également disponible pour les objets à base de texte, auquel cas elle désigne à la fois la couleur de la police et les lignes de l'objet, voir [Couleur de la police](properties_Text.md#font-color). +> This property is also available for text based objects, in which case it designates both the font color and the object's lines, see [Font color](properties_Text.md#font-color). -#### Objets pris en charge +#### Objects Supported -[Ligne](shapes_overview.md#line) - [Ovale](shapes_overview.md#oval) - [Rectangle](shapes_overview.md#rectangle) +[Line](shapes_overview.md#line) - [Oval](shapes_overview.md#oval) - [Rectangle](shapes_overview.md#rectangle) --- ## Line Width -Désigne l'épaisseur d'une ligne. +Designates the thickness of a line. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ----------- | --------------- | --------------------------------------------------------------------------------------- | -| strokeWidth | number | 0 pour la plus petite largeur dans un formulaire imprimé, ou toute valeur d'entier < 20 | +| Name | Data Type | Possible Values | +| ----------- | --------- | ----------------------------------------------------------------- | +| strokeWidth | number | 0 for smallest width on a printed form, or any integer value < 20 | -#### Objets pris en charge +#### Objects Supported -[Ligne](shapes_overview.md#line) - [Ovale](shapes_overview.md#oval) - [Rectangle](shapes_overview.md#rectangle) +[Line](shapes_overview.md#line) - [Oval](shapes_overview.md#oval) - [Rectangle](shapes_overview.md#rectangle) @@ -171,43 +171,43 @@ Désigne l'épaisseur d'une ligne. --- -## Tableau couleurs de fond +## Row Background Color Array -`List box de type tableau` +`Array type list boxes` -Le nom d'un tableau pour appliquer une couleur d'arrière-plan personnalisée à chaque ligne ou colonne de la list box. +The name of an array to apply a custom background color to each row of the list box or column. -Le nom d'un tableau Entier long doit être saisi. Chaque élément de ce tableau correspond à une ligne de la zone de list box (si elle est appliquée à la liste box) ou à une cellule de la colonne (si elle est appliquée à une colonne), le tableau doit donc avoir la même taille que le tableau associé à la colonne. Vous pouvez utiliser les constantes du thème [SET RGB COLORS](https://doc.4d.com/4Dv17R6/4D/17-R6/SET-RGB-COLORS.302-4310385.en.html). Si vous souhaitez que la cellule hérite de la couleur d'arrière-plan définie au niveau supérieur, passez la valeur -255 à l'élément de tableau correspondant. +The name of a Longint array must be entered. Each element of this array corresponds to a row of the list box (if applied to the list box) or to a cell of the column (if applied to a column), so the array must be the same size as the array associated with the column. You can use the constants of the [SET RGB COLORS](https://doc.4d.com/4Dv17R6/4D/17-R6/SET-RGB-COLORS.302-4310385.en.html) theme. If you want the cell to inherit the background color defined at the higher level, pass the value -255 to the corresponding array element. -Par exemple, considérons une list box où les lignes ont une couleur alternée gris/gris clair, définie dans les propriétés de la list box. Un tableau de couleurs d'arrière-plan a également été défini pour la list box afin de changer en orange clair la couleur des lignes où au moins une valeur est négative : +For example, given a list box where the rows have an alternating gray/light gray color, defined in the properties of the list box. A background color array has also been set for the list box in order to switch the color of rows where at least one value is negative to light orange: ```4d <>_BgndColors{$i}:=0x00FFD0B0 // orange - <>_BgndColors{$i}:=-255 // valeur par défaut + <>_BgndColors{$i}:=-255 // default value ``` ![](assets/en/FormObjects/listbox_styles1.png) -Vous souhaitez ensuite colorer les cellules avec des valeurs négatives en orange foncé. Pour ce faire, définissez un tableau de couleurs d'arrière-plan pour chaque colonne, par exemple <>_BgndColor_1, <>_BgndColor_2 et <>_BgndColor_3. Les valeurs de ces tableaux ont la priorité sur celles définies dans les propriétés de list box ainsi que sur celles du tableau de couleurs d'arrière-plan général : +Next you want to color the cells with negative values in dark orange. To do this, you set a background color array for each column, for example <>_BgndColor_1, <>_BgndColor_2 and <>_BgndColor_3. The values of these arrays have priority over the ones set in the list box properties as well as those of the general background color array: ```4d - <>_BgndColorsCol_3{2}:=0x00FF8000 // orange foncé + <>_BgndColorsCol_3{2}:=0x00FF8000 // dark orange <>_BgndColorsCol_2{5}:=0x00FF8000 <>_BgndColorsCol_1{9}:=0x00FF8000 <>_BgndColorsCol_1{16}:=0x00FF8000 ``` ![](assets/en/FormObjects/listbox_styles2.png) -Vous pouvez obtenir le même résultat en utilisant les commandes `LISTBOX SET ROW FONT STYLE` et `LISTBOX SET ROW COLOR`. Elles ont l'avantage de vous permettre d'éviter d'avoir à prédéfinir des tableaux de style/couleur pour les colonnes : ils sont plutôt créés dynamiquement par les commandes. +You can get the same result using the `LISTBOX SET ROW FONT STYLE` and `LISTBOX SET ROW COLOR` commands. They have the advantage of letting you skip having to predefine style/color arrays for the columns: instead they are created dynamically by the commands. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------------- | --------------- | ----------------------------- | -| rowFillSource | string | Nom d'un tableau entier long. | +| Name | Data Type | Possible Values | +| ------------- | --------- | ---------------------------- | +| rowFillSource | string | The name of a longint array. | -#### Objets pris en charge -[List Box](listbox_overview.md) - [Colonne List Box](listbox_overview.md#list-box-columns) +#### Objects Supported +[List Box](listbox_overview.md) - [List Box Column](listbox_overview.md#list-box-columns) @@ -216,16 +216,16 @@ Vous pouvez obtenir le même résultat en utilisant les commandes `LISTBOX SET R --- ## Transparent -Définit l'arrière-plan de la list box sur "Transparent". Lorsqu'elle est définie, toute [autre couleur d'arrière-plan](#alternate-background-color) ou [couleur d'arrière-plan](#background-color-fill-color) définie pour la colonne est ignorée. +Sets the list box background to "Transparent". When set, any [alternate background color](#alternate-background-color) or [background color](#background-color-fill-color) defined for the column is ignored. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------------ | --------------- | ----------------- | -| border-style | Texte | "transparent" | +| Name | Data Type | Possible Values | +| ---- | --------- | --------------- | +| fill | text | "transparent" | -#### Objets pris en charge +#### Objects Supported [List Box](listbox_overview.md#overview) -#### Voir également -[Couleur de fond / Couleur de remplissage](#background-color-fill-color) \ No newline at end of file +#### See also +[Background Color / Fill Color](#background-color-fill-color) \ No newline at end of file From 5ea22d74029cd81c3259f085225b7be02a25bc42 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:22:26 +0100 Subject: [PATCH 162/260] New translations properties_CoordinatesAndSizing.md (French) --- .../properties_CoordinatesAndSizing.md | 246 +++++++++--------- 1 file changed, 123 insertions(+), 123 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/properties_CoordinatesAndSizing.md b/website/translated_docs/fr/FormObjects/properties_CoordinatesAndSizing.md index f988e77cb85f73..2772a4ee217472 100644 --- a/website/translated_docs/fr/FormObjects/properties_CoordinatesAndSizing.md +++ b/website/translated_docs/fr/FormObjects/properties_CoordinatesAndSizing.md @@ -1,135 +1,135 @@ --- id: propertiesCoordinatesAndSizing -title: Coordonnées & dimensions +title: Coordinates & Sizing --- --- -## Hauteur de ligne automatique +## Automatic Row Height -Cette propriété n'est disponible que pour les list box de type tableau, non hiérarchiques. Par défaut, cette option n'est pas sélectionnée. +This property is only available for array-based, non-hierarchical list boxes. The property is not selected by default. -Lorsqu'elle est utilisée, la hauteur de chaque ligne de la colonne est automatiquement calculée par 4D, et le contenu de la colonne est pris en compte. A noter que seules les colonnes avec l'option sélectionnée seront prises en compte pour calculer la hauteur de ligne. -> Lors du redimensionnement du formulaire, si la propriété de [dimensionnement horizontal](properties_ResizingOptions.md#horizontal-sizing) "Agrandir" a été affectée à la list box, la colonne la plus à droite sera agrandie, allant au-delà de sa largeur maximale, si nécessaire. +When used, the height of every row in the column will automatically be calculated by 4D, and the column contents will be taken into account. Note that only columns with the option selected will be taken into account to calculate the row height. +> When resizing the form, if the "Grow" [horizontal sizing](properties_ResizingOptions.md#horizontal-sizing) property was assigned to the list box, the right-most column will be increased beyond its maximum width if necessary. -Lorsque cette propriété est activée, la hauteur de chaque ligne est automatiquement calculée afin d'ajuster entièrement le contenu de la cellule ajusté sans être tronqué (sauf si l'option [Wordwrap](properties_Display.md#wordwrap) est désactivée. +When this property is enabled, the height of every row is automatically calculated in order to make the cell contents entirely fit without being truncated (unless the [Wordwrap](properties_Display.md#wordwrap) option is disabled. -* Le calcul de la hauteur de ligne prend en compte : - * tout type de contenu (texte, numérique, dates, heures, images (le calcul dépend du format de l'image), objets), - * tout types de contrôle (zones de saisie, cases à cocher, listes, listes déroulantes), - * polices, styles de polices et tailles de polices, - * l'option [Retour à la ligne](properties_Display.md#wordwrap) : si elle est désactivée, la hauteur est basée sur le nombre de paragraphes (les lignes sont tronquées); si elle est activée, la hauteur est basée sur le nombre de lignes (non tronquées). +* The row height calculation takes into account: + * any content types (text, numerics, dates, times, pictures (calculation depends on the picture format), objects), + * any control types (inputs, check boxes, lists, dropdowns), + * fonts, fonts styles and font sizes, + * the [Wordwrap](properties_Display.md#wordwrap) option: if disabled, the height is based on the number of paragraphs (lines are truncated); if enabled, the height is based on number of lines (not truncated). -* Le calcul de la hauteur de ligne ne tient pas compte de : - * du contenu de colonne masqué - * des propriétés du tableau [Hauteur de ligne](#row-height) et [Tableau hauteur de lignes](#row-height-array) (le cas échéant) définies dans la liste de propriété ou par programmation. -> Etant donné qu'elle nécessite des calculs supplémentaires lors de l'exécution, l'option "hauteur de ligne automatique" peut avoir une incidence sur la fluidité du défilement de votre list box, en particulier lorsqu'elle contient un grand nombre de lignes. +* The row height calculation ignores: + * hidden column contents + * [Row Height](#row-height) and [Row Height Array](#row-height-array) properties (if any) set either in the Property list or by programming. +> Since it requires additional calculations at runtime, the automatic row height option could affect the scrolling fluidity of your list box, in particular when it contains a large number of rows. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------------- | --------------- | ----------------- | -| rowHeightAuto | boolean | true, false | +| Name | Data Type | Possible Values | +| ------------- | --------- | --------------- | +| rowHeightAuto | boolean | true, false | -#### Objets pris en charge +#### Objects Supported -[Colonne de list box](listbox_overview.md#list-box-columns) +[List Box Column](listbox_overview.md#list-box-columns) --- -## Bas +## Bottom -Coordonnées inférieures de l'objet dans le formulaire. +Bottom coordinate of the object in the form. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------ | --------------- | ----------------- | -| bottom | number | minimum : 0 | +| Name | Data Type | Possible Values | +| ------ | --------- | --------------- | +| bottom | number | minimum: 0 | -#### Objets pris en charge +#### Objects Supported -[Zone 4D View Pro](viewProArea_overview.md) - [Zone 4D Write Pro](writeProArea_overview.md) - [Bouton](button_overview.md) - [Grille de boutons](buttonGrid_overview.md) - [Case à cocher](checkbox_overview.md) - [Combo Box](comboBox_overview.md) - [Liste déroulante](dropdownList_Overview.md) - [Group Box](groupBox.md) - [Liste hiérarchique](list_overview.md#overview) - [Zone de saisie](input_overview.md) - [List Box](listbox_overview.md#overview) - [Ligne](shapes_overview.md#line) - [Colonne List Box](listbox_overview.md#list-box-columns) - [Ovale](shapes_overview.md#oval) - [Bouton image](pictureButton_overview.md) - [Pop up menu image](picturePopupMenu_overview.md) - [Zone de plug-in](pluginArea_overview.md#overview) - [Indicateur de progression](progressIndicator.md) - [Bouton radio](radio_overview.md) - [ Rectangle](shapes_overview.md#rectangle) - [Règle](ruler.md) - [Spinner](spinner.md) - [Splitter](splitters.md) - [Image statique](staticPicture.md) [Stepper](stepper.md) - [Sous-formulaire](subform_overview.md) - [Onglet](tabControl.md) - [Zone de texte](text.md) - [Zone Web](webArea_overview.md#overview) +[4D View Pro Area](viewProArea_overview.md) - [4D Write Pro Area](writeProArea_overview.md) - [Button](button_overview.md) - [Button Grid](buttonGrid_overview.md) - [Check Box](checkbox_overview.md) - [Combo Box](comboBox_overview.md) - [Dropdown list](dropdownList_Overview.md) - [Group Box](groupBox.md) - [Hierarchical List](list_overview.md#overview) - [Input](input_overview.md) - [List Box](listbox_overview.md#overview) - [Line](shapes_overview.md#line) - [List Box Column](listbox_overview.md#list-box-columns) - [Oval](shapes_overview.md#oval) - [Picture Button](pictureButton_overview.md) - [Picture Pop up menu](picturePopupMenu_overview.md) - [Plug-in Area](pluginArea_overview.md#overview) - [Progress Indicators](progressIndicator.md) - [Radio Button](radio_overview.md) - [Rectangle](shapes_overview.md#rectangle) - [Ruler](ruler.md) - [Spinner](spinner.md) - [Splitter](splitters.md) - [Static Picture](staticPicture.md) - [Stepper](stepper.md) - [Subform](subform_overview.md) - [Tab control](tabControl.md) - [Text Area](text.md) - [Web Area](webArea_overview.md#overview) --- -## Gauche +## Left -Coordonnées de gauche de l'objet dans le formulaire. +Left coordinate of the object on the form. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ---- | --------------- | ----------------- | -| left | number | minimum : 0 | +| Name | Data Type | Possible Values | +| ---- | --------- | --------------- | +| left | number | minimum: 0 | -#### Objets pris en charge +#### Objects Supported -[Zone 4D View Pro](viewProArea_overview.md) - [Zone 4D Write Pro](writeProArea_overview.md) - [Bouton](button_overview.md) - [Grille de boutons](buttonGrid_overview.md) - [Case à cocher](checkbox_overview.md) - [Combo Box](comboBox_overview.md) - [Liste déroulante](dropdownList_Overview.md) - [Group Box](groupBox.md) - [Liste hiérarchique](list_overview.md#overview) - [Zone de saisie](input_overview.md) - [List Box](listbox_overview.md#overview) - [Ligne](shapes_overview.md#line) - [Colonne List Box](listbox_overview.md#list-box-columns) - [Ovale](shapes_overview.md#oval) - [Bouton image](pictureButton_overview.md) - [Pop up menu image](picturePopupMenu_overview.md) - [Zone de plug-in](pluginArea_overview.md#overview) - [Indicateur de progression](progressIndicator.md) - [Bouton radio](radio_overview.md) - [Règle](ruler.md) - [ Rectangle](shapes_overview.md#rectangle) - [Spinner](spinner.md) - [Splitter](splitters.md) - [Image statique](staticPicture.md) [Stepper](stepper.md) - [Sous-formulaire](subform_overview.md) - [Onglet](tabControl.md) - [Zone de texte](text.md) - [Zone Web](webArea_overview.md#overview) +[4D View Pro Area](viewProArea_overview.md) - [4D Write Pro Area](writeProArea_overview.md) - [Button](button_overview.md) - [Button Grid](buttonGrid_overview.md) - [Check Box](checkbox_overview.md) - [Combo Box](comboBox_overview.md) - [Dropdown list](dropdownList_Overview.md) - [Group Box](groupBox.md) - [Hierarchical List](list_overview.md#overview) - [Input](input_overview.md) - [List Box](listbox_overview.md#overview) - [Line](shapes_overview.md#line) - [List Box Column](listbox_overview.md#list-box-columns) - [Oval](shapes_overview.md#oval) - [Picture Button](pictureButton_overview.md) - [Picture Pop up menu](picturePopupMenu_overview.md) - [Plug-in Area](pluginArea_overview.md#overview) - [Progress Indicators](progressIndicator.md) - [Radio Button](radio_overview.md) - [Ruler](ruler.md) - [Rectangle](shapes_overview.md#rectangle) - [Spinner](spinner.md) - [Splitter](splitters.md) - [Static Picture](staticPicture.md) - [Stepper](stepper.md) - [Subform](subform_overview.md) - [Tab control](tabControl.md) - [Text Area](text.md) - [Web Area](webArea_overview.md#overview) --- -## Droite +## Right -Coordonnées de droite de l'objet dans le formulaire. +Right coordinate of the object in the form. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ----- | --------------- | ----------------- | -| right | number | minimum : 0 | +| Name | Data Type | Possible Values | +| ----- | --------- | --------------- | +| right | number | minimum: 0 | -#### Objets pris en charge +#### Objects Supported -[Zone 4D View Pro](viewProArea_overview.md) - [Zone 4D Write Pro](writeProArea_overview.md) - [Bouton](button_overview.md) - [Grille de boutons](buttonGrid_overview.md) - [Case à cocher](checkbox_overview.md) - [Combo Box](comboBox_overview.md) - [Liste déroulante](dropdownList_Overview.md) - [Group Box](groupBox.md) - [Liste hiérarchique](list_overview.md#overview) - [Zone de saisie](input_overview.md) - [List Box](listbox_overview.md#overview) - [Ligne](shapes_overview.md#line) - [Colonne List Box](listbox_overview.md#list-box-columns) - [Ovale](shapes_overview.md#oval) - [Bouton image](pictureButton_overview.md) - [Pop up menu image](picturePopupMenu_overview.md) - [Zone de plug-in](pluginArea_overview.md#overview) - [Indicateur de progression](progressIndicator.md) - [Bouton radio](radio_overview.md) - [Règle](ruler.md) - [ Rectangle](shapes_overview.md#rectangle) - [Spinner](spinner.md) - [Splitter](splitters.md) - [Image statique](staticPicture.md) [Stepper](stepper.md) - [Sous-formulaire](subform_overview.md) - [Onglet](tabControl.md) - [Zone de texte](text.md) - [Zone Web](webArea_overview.md#overview) +[4D View Pro Area](viewProArea_overview.md) - [4D Write Pro Area](writeProArea_overview.md) - [Button](button_overview.md) - [Button Grid](buttonGrid_overview.md) - [Check Box](checkbox_overview.md) - [Combo Box](comboBox_overview.md) - [Dropdown list](dropdownList_Overview.md) - [Group Box](groupBox.md) - [Hierarchical List](list_overview.md#overview) - [Input](input_overview.md) - [List Box](listbox_overview.md#overview) - [Line](shapes_overview.md#line) - [List Box Column](listbox_overview.md#list-box-columns) - [Oval](shapes_overview.md#oval) - [Picture Button](pictureButton_overview.md) - [Picture Pop up menu](picturePopupMenu_overview.md) - [Plug-in Area](pluginArea_overview.md#overview) - [Progress Indicators](progressIndicator.md) - [Radio Button](radio_overview.md) - [Ruler](ruler.md) - [Rectangle](shapes_overview.md#rectangle) - [Spinner](spinner.md) - [Splitter](splitters.md) - [Static Picture](staticPicture.md) - [Stepper](stepper.md) - [Subform](subform_overview.md) - [Tab control](tabControl.md) - [Text Area](text.md) - [Web Area](webArea_overview.md#overview) --- -## Haut +## Top -Coordonnées supérieures de l'objet dans le formulaire. +Top coordinate of the object in the form. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| --- | --------------- | ----------------- | -| top | number | minimum : 0 | +| Name | Data Type | Possible Values | +| ---- | --------- | --------------- | +| top | number | minimum: 0 | -#### Objets pris en charge +#### Objects Supported -[Zone 4D View Pro](viewProArea_overview.md) - [Zone 4D Write Pro](writeProArea_overview.md) - [Bouton](button_overview.md) - [Grille de boutons](buttonGrid_overview.md) - [Case à cocher](checkbox_overview.md) - [Combo Box](comboBox_overview.md) - [Liste déroulante](dropdownList_Overview.md) - [Group Box](groupBox.md) - [Liste hiérarchique](list_overview.md#overview) - [Zone de saisie](input_overview.md) - [List Box](listbox_overview.md#overview) - [Ligne](shapes_overview.md#line) - [Colonne List Box](listbox_overview.md#list-box-columns) - [Ovale](shapes_overview.md#oval) - [Bouton image](pictureButton_overview.md) - [Pop up menu image](picturePopupMenu_overview.md) - [Zone de plug-in](pluginArea_overview.md#overview) - [Indicateur de progression](progressIndicator.md) - [Bouton radio](radio_overview.md) - [Règle](ruler.md) - [ Rectangle](shapes_overview.md#rectangle) - [Spinner](spinner.md) - [Splitter](splitters.md) - [Image statique](staticPicture.md) [Stepper](stepper.md) - [Sous-formulaire](subform_overview.md) - [Onglet](tabControl.md) - [Zone de texte](text.md) - [Zone Web](webArea_overview.md#overview) +[4D View Pro Area](viewProArea_overview.md) - [4D Write Pro Area](writeProArea_overview.md) - [Button](button_overview.md) - [Button Grid](buttonGrid_overview.md) - [Check Box](checkbox_overview.md) - [Combo Box](comboBox_overview.md) - [Dropdown list](dropdownList_Overview.md) - [Group Box](groupBox.md) - [Hierarchical List](list_overview.md#overview) - [Input](input_overview.md) - [List Box](listbox_overview.md#overview) - [Line](shapes_overview.md#line) - [List Box Column](listbox_overview.md#list-box-columns) - [Oval](shapes_overview.md#oval) - [Picture Button](pictureButton_overview.md) - [Picture Pop up menu](picturePopupMenu_overview.md) - [Plug-in Area](pluginArea_overview.md#overview) - [Progress Indicators](progressIndicator.md) - [Radio Button](radio_overview.md) - [Ruler](ruler.md) - [Rectangle](shapes_overview.md#rectangle) - [Spinner](spinner.md) - [Splitter](splitters.md) - [Static Picture](staticPicture.md) - [Stepper](stepper.md) - [Subform](subform_overview.md) - [Tab control](tabControl.md) - [Text Area](text.md) - [Web Area](webArea_overview.md#overview) --- -## Rayon d'arrondi +## Corner Radius -Définit l'arrondi des coins (en pixels) des objets de type [rectangle](shapes_overview.md#rectangle). Par défaut, la valeur du rayon des rectangles est de 0 pixel. Vous pouvez modifier cette propriété pour dessiner des rectangles arrondis avec des formes personnalisées : +Defines the corner roundness (in pixels) of objects of the [rectangle](shapes_overview.md#rectangle) type. By default, the radius value for rectangles is 0 pixels. You can change this property to draw rounded rectangles with custom shapes: ![](assets/en/FormObjects/shape_rectangle.png) -La valeur minimale est 0, dans ce cas un rectangle standard non arrondi est dessiné. La valeur maximale dépend de la taille du rectangle (elle ne peut pas dépasser la moitié de la taille du côté le plus court du rectangle) et est calculée dynamiquement. +Minimum value is 0, in this case a standard non-rounded rectangle is drawn. Maximum value depends on the rectangle size (it cannot exceed half the size of the shortest rectangle side) and is calculated dynamically. -Vous pouvez également définir cette propriété à l'aide des commandes [OBJECT Get corner radius](https://doc.4d.com/4Dv17R6/4D/17-R6/OBJECT-Get-corner-radius.301-4311357.en.html) et [OBJECT SET CORNER RADIUS](https://doc.4d.com/4Dv17R6/4D/17-R6/OBJECT-SET-CORNER-RADIUS.301-4311356.en.html). +You can also set this property using the [OBJECT Get corner radius](https://doc.4d.com/4Dv17R6/4D/17-R6/OBJECT-Get-corner-radius.301-4311357.en.html) and [OBJECT SET CORNER RADIUS](https://doc.4d.com/4Dv17R6/4D/17-R6/OBJECT-SET-CORNER-RADIUS.301-4311356.en.html) commands. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------------ | --------------- | ----------------- | -| borderRadius | integer | minimum : 0 | +| Name | Data Type | Possible Values | +| ------------ | --------- | --------------- | +| borderRadius | integer | minimum: 0 | -#### Objets pris en charge +#### Objects Supported [Rectangle](shapes_overview.md#rectangle) @@ -137,40 +137,40 @@ Vous pouvez également définir cette propriété à l'aide des commandes [OBJEC --- -## Hauteur +## Height -Cette propriété désigne la taille verticale d'un objet. -> Certains objets peuvent avoir une hauteur prédéfinie qui ne peut pas être modifiée. +This property designates an object's vertical size. +> Some objects may have a predefined height that cannot be altered. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------ | --------------- | ----------------- | -| height | number | minimum : 0 | +| Name | Data Type | Possible Values | +| ------ | --------- | --------------- | +| height | number | minimum: 0 | -#### Objets pris en charge +#### Objects Supported -[Zone 4D View Pro](viewProArea_overview.md) - [Zone 4D Write Pro](writeProArea_overview.md) - [Bouton](button_overview.md) - [Grille de boutons](buttonGrid_overview.md) - [Case à cocher](checkbox_overview.md) - [Combo Box](comboBox_overview.md) - [Liste déroulante](dropdownList_Overview.md) - [Group Box](groupBox.md) - [Liste hiérarchique](list_overview.md#overview) - [Zone de saisie](input_overview.md) - [List Box](listbox_overview.md#overview) - [Ligne](shapes_overview.md#line) - [Colonne List Box](listbox_overview.md#list-box-columns) - [Ovale](shapes_overview.md#oval) - [Bouton image](pictureButton_overview.md) - [Pop up menu image](picturePopupMenu_overview.md) - [Zone de plug-in](pluginArea_overview.md#overview) - [Indicateur de progression](progressIndicator.md) - [Bouton radio](radio_overview.md) - [Règle](ruler.md) - [ Rectangle](shapes_overview.md#rectangle) - [Spinner](spinner.md) - [Splitter](splitters.md) - [Image statique](staticPicture.md) [Stepper](stepper.md) - [Sous-formulaire](subform_overview.md) - [Onglet](tabControl.md) - [Zone de texte](text.md) - [Zone Web](webArea_overview.md#overview) +[4D View Pro Area](viewProArea_overview.md) - [4D Write Pro Area](writeProArea_overview.md) - [Button](button_overview.md) - [Button Grid](buttonGrid_overview.md) - [Check Box](checkbox_overview.md) - [Combo Box](comboBox_overview.md) - [Dropdown list](dropdownList_Overview.md) - [Group Box](groupBox.md) - [Hierarchical List](list_overview.md#overview) - [Input](input_overview.md) - [List Box](listbox_overview.md#overview) - [Line](shapes_overview.md#line) - [List Box Column](listbox_overview.md#list-box-columns) - [Oval](shapes_overview.md#oval) - [Picture Button](pictureButton_overview.md) - [Picture Pop up menu](picturePopupMenu_overview.md) - [Plug-in Area](pluginArea_overview.md#overview) - [Progress Indicators](progressIndicator.md) - [Radio Button](radio_overview.md) - [Ruler](ruler.md) - [Rectangle](shapes_overview.md#rectangle) - [Spinner](spinner.md) - [Splitter](splitters.md) - [Static Picture](staticPicture.md) - [Stepper](stepper.md) - [Subform](subform_overview.md) - [Tab control](tabControl.md) - [Text Area](text.md) - [Web Area](webArea_overview.md#overview) --- -## Largeur +## Width -Cette propriété désigne la taille horizontale d'un objet. -> * Certains objets peuvent avoir une hauteur prédéfinie qui ne peut pas être modifiée. -> * Si la propriété [Resizable](properties_ResizingOptions.md#resizable) est utilisée pour une [colonne de list box](listbox_overview.md#list-box-columns), l'utilisateur peut également redimensionner manuellement la colonne. -> * Lors du redimensionnement du formulaire, si la propriété de [dimensionnement horizontal "Agrandir"](properties_ResizingOptions.md#horizontal-sizing) a été affectée à la list box, la colonne la plus à droite sera agrandie, allant au-delà de sa largeur maximale, si nécessaire. +This property designates an object's horizontal size. +> * Some objects may have a predefined height that cannot be altered. +> * If the [Resizable](properties_ResizingOptions.md#resizable) property is used for a [list box column](listbox_overview.md#list-box-columns), the user can also manually resize the column. +> * When resizing the form, if the ["Grow" horizontal sizing](properties_ResizingOptions.md#horizontal-sizing) property was assigned to the list box, the right-most column will be increased beyond its maximum width if necessary. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ----- | --------------- | ----------------- | -| width | number | minimum : 0 | +| Name | Data Type | Possible Values | +| ----- | --------- | --------------- | +| width | number | minimum: 0 | -#### Objets pris en charge +#### Objects Supported -[Zone 4D View Pro](viewProArea_overview.md) - [Zone 4D Write Pro](writeProArea_overview.md) - [Bouton](button_overview.md) - [Grille de boutons](buttonGrid_overview.md) - [Case à cocher](checkbox_overview.md) - [Combo Box](comboBox_overview.md) - [Liste déroulante](dropdownList_Overview.md) - [Group Box](groupBox.md) - [Liste hiérarchique](list_overview.md#overview) - [Zone de saisie](input_overview.md) - [List Box](listbox_overview.md#overview) - [Ligne](shapes_overview.md#line) - [Colonne List Box](listbox_overview.md#list-box-columns) - [Ovale](shapes_overview.md#oval) - [Bouton image](pictureButton_overview.md) - [Pop up menu image](picturePopupMenu_overview.md) - [Zone de plug-in](pluginArea_overview.md#overview) - [Indicateur de progression](progressIndicator.md) - [Bouton radio](radio_overview.md) - [Règle](ruler.md) - [ Rectangle](shapes_overview.md#rectangle) - [Spinner](spinner.md) - [Splitter](splitters.md) - [Image statique](staticPicture.md) [Stepper](stepper.md) - [Sous-formulaire](subform_overview.md) - [Onglet](tabControl.md) - [Zone de texte](text.md) - [Zone Web](webArea_overview.md#overview) +[4D View Pro Area](viewProArea_overview.md) - [4D Write Pro Area](writeProArea_overview.md) - [Button](button_overview.md) - [Button Grid](buttonGrid_overview.md) - [Check Box](checkbox_overview.md) - [Combo Box](comboBox_overview.md) - [Dropdown list](dropdownList_Overview.md) - [Group Box](groupBox.md) - [Hierarchical List](list_overview.md#overview) - [Input](input_overview.md) - [List Box](listbox_overview.md#overview) - [Line](shapes_overview.md#line) - [List Box Column](listbox_overview.md#list-box-columns) - [Oval](shapes_overview.md#oval) - [Picture Button](pictureButton_overview.md) - [Picture Pop up menu](picturePopupMenu_overview.md) - [Plug-in Area](pluginArea_overview.md#overview) - [Progress Indicators](progressIndicator.md) - [Radio Button](radio_overview.md) - [Ruler](ruler.md) - [Rectangle](shapes_overview.md#rectangle) - [Spinner](spinner.md) - [Splitter](splitters.md) - [Static Picture](staticPicture.md) - [Stepper](stepper.md) - [Subform](subform_overview.md) - [Tab control](tabControl.md) - [Text Area](text.md) - [Web Area](webArea_overview.md#overview) @@ -181,39 +181,39 @@ Cette propriété désigne la taille horizontale d'un objet. --- -## Largeur maxi +## Maximum Width -La largeur maximale de la colonne (en pixels). La largeur de la colonne ne peut pas être augmentée au-delà de cette valeur lors du redimensionnement de la colonne ou du formulaire. -> Lors du redimensionnement du formulaire, si la propriété de [dimensionnement horizontal "Agrandir"](properties_ResizingOptions.md#horizontal-sizing) a été affectée à la list box, la colonne la plus à droite sera agrandie, allant au-delà de sa largeur maximale, si nécessaire. +The maximum width of the column (in pixels). The width of the column cannot be increased beyond this value when resizing the column or form. +> When resizing the form, if the ["Grow" horizontal sizing](properties_ResizingOptions.md#horizontal-sizing) property was assigned to the list box, the right-most column will be increased beyond its maximum width if necessary. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| -------- | --------------- | ----------------- | -| maxWidth | number | minimum : 0 | +| Name | Data Type | Possible Values | +| -------- | --------- | --------------- | +| maxWidth | number | minimum: 0 | -#### Objets pris en charge +#### Objects Supported -[Colonne de list box](listbox_overview.md#list-box-columns) +[List Box Column](listbox_overview.md#list-box-columns) --- -## Largeur mini +## Minimum Width -La largeur minimale de la colonne (en pixels). La largeur de la colonne ne peut pas être réduite en dessous de cette valeur lors du redimensionnement de la colonne ou du formulaire. -> Lors du redimensionnement du formulaire, si la propriété de [dimensionnement horizontal "Agrandir"](properties_ResizingOptions.md#horizontal-sizing) a été affectée à la list box, la colonne la plus à droite sera agrandie, allant au-delà de sa largeur maximale, si nécessaire. +The minimum width of the column (in pixels). The width of the column cannot be reduced below this value when resizing the column or form. +> When resizing the form, if the ["Grow" horizontal sizing](properties_ResizingOptions.md#horizontal-sizing) property was assigned to the list box, the right-most column will be increased beyond its maximum width if necessary. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| -------- | --------------- | ----------------- | -| minWidth | number | minimum : 0 | +| Name | Data Type | Possible Values | +| -------- | --------- | --------------- | +| minWidth | number | minimum: 0 | -#### Objets pris en charge +#### Objects Supported -[Colonne de list box](listbox_overview.md#list-box-columns) +[List Box Column](listbox_overview.md#list-box-columns) @@ -223,59 +223,59 @@ La largeur minimale de la colonne (en pixels). La largeur de la colonne ne peut --- -## Hauteur des lignes +## Row Height -Définit la hauteur des lignes de list box (hors en-têtes et pieds de page). Par défaut, la hauteur de ligne est définie en fonction de la plate-forme et de la taille de la police. +Sets the height of list box rows (excluding headers and footers). By default, the row height is set according to the platform and the font size. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| --------- | --------------- | ------------------------------------------------- | -| rowHeight | string | valeur css dans l'unité "em" ou "px" (par défaut) | +| Name | Data Type | Possible Values | +| --------- | --------- | ---------------------------------------- | +| rowHeight | string | css value in unit "em" or "px" (default) | -#### Objets pris en charge +#### Objects Supported [List Box](listbox_overview.md#overview) -#### Voir également -[Tableau hauteurs des lignes](#row-height-array) +#### See also +[Row Height Array](#row-height-array) --- -## Tableau hauteurs des lignes +## Row Height Array -Cette propriété est utilisée pour indiquer le nom d'un tableau de hauteur de ligne que vous souhaitez associer à la list box. Un tableau de hauteur de ligne doit être de type numérique (entier long par défaut). +This property is used to specify the name of a row height array that you want to associate with the list box. A row height array must be of the numeric type (longint by default). -Lorsqu'un tableau de hauteur de ligne est défini, chacun de ses éléments dont la valeur est différente de 0 (zéro) est pris en compte pour déterminer la hauteur de la ligne correspondante dans la list box, en fonction de l'unité hauteur de ligne courante. +When a row height array is defined, each of its elements whose value is different from 0 (zero) is taken into account to determine the height of the corresponding row in the list box, based on the current Row Height unit. -Par exemple, vous pouvez écrire : +For example, you can write: ```4d ARRAY LONGINT(RowHeights;20) RowHeights{5}:=3 ``` -En supposant que l'unité des lignes soit «lignes», alors la cinquième ligne de la list box aura une hauteur de trois lignes, tandis que chaque autre ligne conservera sa hauteur par défaut. -> * La propriété Row Height Array n'est pas prise en compte pour les list box hiérarchiques. -> * Pour les list box de type tableau, cette propriété n'est disponible que si l'option [Hauteur de ligne automatique](#automatic-row-height) n'est pas sélectionnée. +Assuming that the unit of the rows is "lines," then the fifth row of the list box will have a height of three lines, while every other row will keep its default height. +> * The Row Height Array property is not taken into account for hierarchical list boxes. +> * For array-based list boxes, this property is available only if the [Automatic Row Height](#automatic-row-height) option is not selected. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| --------------- | --------------- | ------------------------------ | -| rowHeightSource | string | Nom d'une variable tableau 4D. | +| Name | Data Type | Possible Values | +| --------------- | --------- | ---------------------------- | +| rowHeightSource | string | Name of a 4D array variable. | -#### Objets pris en charge +#### Objects Supported [List Box](listbox_overview.md#overview) -#### Voir également -[Hauteur des lignes](#row-height) +#### See also +[Row Height](#row-height) From 5d576e151ac7b8c256899f6fbce232e3820b22ac Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:22:29 +0100 Subject: [PATCH 163/260] New translations properties_Crop.md (French) --- .../fr/FormObjects/properties_Crop.md | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/properties_Crop.md b/website/translated_docs/fr/FormObjects/properties_Crop.md index cb4a4a2f0b6dd0..d41b255e7f470d 100644 --- a/website/translated_docs/fr/FormObjects/properties_Crop.md +++ b/website/translated_docs/fr/FormObjects/properties_Crop.md @@ -1,22 +1,22 @@ --- id: propertiesCrop -title: Découpage +title: Crop --- --- ## Columns -Définit le nombre de colonnes dans un tableau d'imagettes. +Sets the number of columns in a thumbnail table. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -|:----------- |:---------------:| ----------------- | -| columnCount | integer | minimum: 1 | +| Name | Data Type | Possible Values | +|:----------- |:---------:| --------------- | +| columnCount | integer | minimum: 1 | -#### Objets pris en charge +#### Objects Supported -[Bouton image](pictureButton_overview.md) - [Grille de boutons](buttonGrid_overview.md) - [Pop-up Menu image](picturePopupMenu_overview.md) +[Picture Button](pictureButton_overview.md) - [Button Grid](buttonGrid_overview.md) - [Picture Pop-up Menu](picturePopupMenu_overview.md) @@ -24,17 +24,17 @@ Définit le nombre de colonnes dans un tableau d'imagettes. --- ## Rows -Définit le nombre de lignes dans un tableau d'imagettes. +Sets the number of rows in a thumbnail table. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -|:-------- |:---------------:| ----------------- | -| rowCount | integer | minimum: 1 | +| Name | Data Type | Possible Values | +|:-------- |:---------:| --------------- | +| rowCount | integer | minimum: 1 | -#### Objets pris en charge +#### Objects Supported -[Bouton image](pictureButton_overview.md) - [Grille de boutons](buttonGrid_overview.md) - [Pop-up Menu image](picturePopupMenu_overview.md) +[Picture Button](pictureButton_overview.md) - [Button Grid](buttonGrid_overview.md) - [Picture Pop-up Menu](picturePopupMenu_overview.md) From 416776f5ae3aa6d25ca2a5c014616fb632595eab Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:22:31 +0100 Subject: [PATCH 164/260] New translations properties_DataSource.md (French) --- .../fr/FormObjects/properties_DataSource.md | 174 +++++++++--------- 1 file changed, 87 insertions(+), 87 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/properties_DataSource.md b/website/translated_docs/fr/FormObjects/properties_DataSource.md index 4c4ea42d5786fd..f6e906c292411c 100644 --- a/website/translated_docs/fr/FormObjects/properties_DataSource.md +++ b/website/translated_docs/fr/FormObjects/properties_DataSource.md @@ -1,34 +1,34 @@ --- id: propertiesDataSource -title: Source de données +title: Data Source --- --- -## Insertion automatique +## Automatic Insertion -Lorsque cette option est sélectionnée, si un utilisateur saisit une valeur introuvable dans la liste déroulante associée à l'objet, cette valeur est automatiquement ajoutée à la liste stockée en mémoire. Vous pouvez associer des listes de choix à des objets, à l'aide : -- de la propriété JSON [Choice List](properties_DataSource.md#choice-list) -- des commandes [OBJECT SET LIST BY NAME](https://doc.4d.com/4Dv17R5/4D/17-R5/OBJECT-SET-LIST-BY-NAME.301-4128227.en.html) ou [OBJECT SET LIST BY REFERENCE](https://doc.4d.com/4Dv17R5/4D/17-R5/OBJECT-SET-LIST-BY-REFERENCE.301-4128237.en.html). -- de la liste des propriétés de l'éditeur de formulaires. +When this option is selected, if a user enters a value that is not found in the choice list associated with the object, this value is automatically added to the list stored in memory. You can associate choice lists to objects using: +- the [Choice List](properties_DataSource.md#choice-list) JSON property +- the [OBJECT SET LIST BY NAME](https://doc.4d.com/4Dv17R5/4D/17-R5/OBJECT-SET-LIST-BY-NAME.301-4128227.en.html) or [OBJECT SET LIST BY REFERENCE](https://doc.4d.com/4Dv17R5/4D/17-R5/OBJECT-SET-LIST-BY-REFERENCE.301-4128237.en.html) commands. +- the form editor's Property List. -Par exemple, pour une liste de choix contenant "France, Allemagne, Italie" associée à une combo box "Pays" : si la propriété d'**insertion automatique** est définie et qu'un utilisateur saisit "Espagne", la valeur "Espagne" est alors automatiquement ajoutée à la liste en mémoire : +For example, given a choice list containing "France, Germany, Italy" that is associated with a "Countries" combo box: if the **automatic insertion** property is set and a user enters "Spain", then the value "Spain" is automatically added to the list in memory: ![](assets/en/FormObjects/comboBox_AutomaticInsertion_example.png) -Naturellement, la valeur saisie ne doit pas appartenir à la liste des [valeurs exclues](properties_RangeOfValues.md#excluded-list) associée à l'objet, si elle a été définie. -> Si la liste a été créée à partir d'une liste définie en mode Développement, la liste d'origine n'est pas modifiée. +Naturally, the value entered must not belong to the list of [excluded values](properties_RangeOfValues.md#excluded-list) associated with the object, if one has been set. +> If the list was created from a list defined in Design mode, the original list is not modified. -Lorsque l'option d'**insertion automatique** n'est pas sélectionnée (par défaut), la valeur saisie est stockée dans l'objet mais pas dans la liste en mémoire. +When the **automatic insertion** option is not selected (default), the value entered is stored in the object but not in the list in memory. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------------------ | --------------- | ----------------- | -| automaticInsertion | boolean | true, false | +| Name | Data Type | Possible Values | +| ------------------ | --------- | --------------- | +| automaticInsertion | boolean | true, false | -#### Objets pris en charge +#### Objects Supported -[Combo Box](comboBox_overview.md) - [Colonne List Box](listbox_overview.md#list-box-columns) +[Combo Box](comboBox_overview.md) - [List Box Column](listbox_overview.md#list-box-columns) @@ -36,17 +36,17 @@ Lorsque l'option d'**insertion automatique** n'est pas sélectionnée (par défa --- ## Choice List -Associe une liste de choix à un objet. Il peut s'agir d'un nom de liste de choix (une référence de liste) ou d'une collection de valeurs par défaut. +Associates a choice list with an object. It can be a choice list name (a list reference) or a collection of default values. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ---------- | ----------------- | ---------------------------------------------------------------- | -| choiceList | liste, collection | Une liste de valeurs possibles | -| liste | liste, collection | Une liste de valeurs possibles (listes hiérarchiques uniquement) | +| Name | Data Type | Possible Values | +| ---------- | ---------------- | --------------------------------------------------- | +| choiceList | list, collection | A list of possible values | +| list | list, collection | A list of possible values (hierarchical lists only) | -#### Objets pris en charge +#### Objects Supported [Drop-down List](dropdownList_Overview.md) - [Combo Box](comboBox_overview.md) - [Hierarchical List](list_overview.md#overview) - [List Box Column](listbox_overview.md#list-box-columns) @@ -57,31 +57,31 @@ Associe une liste de choix à un objet. Il peut s'agir d'un nom de liste de choi List of static values to use as labels for the tab control object. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------ | ----------------- | ---------------------------------------- | -| labels | liste, collection | A list of values to fill the tab control | +| Name | Data Type | Possible Values | +| ------ | ---------------- | ---------------------------------------- | +| labels | list, collection | A list of values to fill the tab control | -#### Objets pris en charge +#### Objects Supported -[Onglets](tabControl.md) +[Tab Control](tabControl.md) --- -## Élément courant +## Current item `Collection or entity selection list boxes` -Indique une variable ou une expression qui se verra attribuer l'élément/l'entité de collection sélectionné(e) par l'utilisateur. Vous devez utiliser une variable objet ou une expression assignable qui accepte des objets. Si l'utilisateur ne sélectionne rien ou si vous avez utilisé une collection de valeurs scalaires, la valeur Null est affectée. -> Cette propriété est en "lecture seule", elle est automatiquement mise à jour en fonction des actions de l'utilisateur dans la list box. Vous ne pouvez pas modifier sa valeur pour modifier l'état de sélection de la list box. +Specifies a variable or expression that will be assigned the collection element/entity selected by the user. You must use an object variable or an assignable expression that accepts objects. If the user does not select anything or if you used a collection of scalar values, the Null value is assigned. +> This property is "read-only", it is automatically updated according to user actions in the list box. You cannot edit its value to modify the list box selection status. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ----------------- | --------------- | ------------------ | -| currentItemSource | string | Expression d'objet | +| Name | Data Type | Possible Values | +| ----------------- | --------- | ----------------- | +| currentItemSource | string | Object expression | -#### Objets pris en charge +#### Objects Supported [List Box ](listbox_overview.md#overview) @@ -89,23 +89,23 @@ Indique une variable ou une expression qui se verra attribuer l'élément/l'enti --- -## Position élément courant +## Current item position `Collection or entity selection list boxes` -Indique une variable ou une expression qui se verra attribuer un entier long indiquant la position de l'élément/l'entité de collection sélectionné(e) par l'utilisateur. +Specifies a variable or expression that will be assigned a longint indicating the position of the collection element/entity selected by the user. -* si aucun(e) élément/entité n'est sélectionné(e), la variable ou l'expression reçoit zéro, -* si un(e) seul(e) élément/entité est sélectionné(e), la variable ou l'expression reçoit son emplacement, -* si plusieurs éléments/entités sont sélectionnés, la variable ou l'expression reçoit la position de l'élément/entité qui a été sélectionné(e) en dernier. -> Cette propriété est en "lecture seule", elle est automatiquement mise à jour en fonction des actions de l'utilisateur dans la list box. Vous ne pouvez pas modifier sa valeur pour modifier l'état de sélection de la list box. +* if no element/entity is selected, the variable or expression receives zero, +* if a single element/entity is selected, the variable or expression receives its location, +* if multiple elements/entities are selected, the variable or expression receives the position of element/entity that was last selected. +> This property is "read-only", it is automatically updated according to user actions in the list box. You cannot edit its value to modify the list box selection status. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------------------------- | --------------- | -------------------- | -| currentItemPositionSource | string | Expression numérique | +| Name | Data Type | Possible Values | +| ------------------------- | --------- | ----------------- | +| currentItemPositionSource | string | Number expression | -#### Objets pris en charge +#### Objects Supported [List Box ](listbox_overview.md) @@ -113,13 +113,13 @@ Indique une variable ou une expression qui se verra attribuer un entier long ind --- -## Type de données +## Data Type Please refer to [Expression Type](properties_Object.md#expression-type) section. -#### Objets pris en charge +#### Objects Supported -[Colonne de list box](listbox_overview.md#list-box-columns) +[List Box Column](listbox_overview.md#list-box-columns) @@ -140,13 +140,13 @@ You must enter a list of values. In the Form editor, a specific dialog box allow > You can also define a [choice list](properties_DataSource.md#choice-list) with the list box column. However, a choice list will be used as list of selectable values for each column row, whereas the default list fill all column rows. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------ | --------------- | ---------------------------------------------------------------- | -| values | collection | A collection of default values (strings), ex: "a", "b", "c", "d" | +| Name | Data Type | Possible Values | +| ------ | ---------- | ---------------------------------------------------------------- | +| values | collection | A collection of default values (strings), ex: "a", "b", "c", "d" | -#### Objets pris en charge +#### Objects Supported [List Box Column (array type only)](listbox_overview.md#list-box-columns) @@ -188,42 +188,42 @@ If you use a collection of scalar values, 4D will create an object for each coll If a field, a variable, or an assignable expression (*e.g. Person.lastName*) is used, the column can be enterable or not depending on the [Enterable](properties_Entry.md#enterable) property. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ---------- | --------------- | ----------------------------------------------------------------------- | -| dataSource | string | A 4D variable, field name, or an arbitrary complex language expression. | +| Name | Data Type | Possible Values | +| ---------- | --------- | ----------------------------------------------------------------------- | +| dataSource | string | A 4D variable, field name, or an arbitrary complex language expression. | -#### Objets pris en charge +#### Objects Supported -[Colonne de list box](listbox_overview.md#list-box-columns) +[List Box Column](listbox_overview.md#list-box-columns) --- -## Table principale +## Master Table `Current selection list boxes` Specifies the table whose current selection will be used. This table and its current selection will form the reference for the fields associated with the columns of the list box (field references or expressions containing fields). Even if some columns contain fields from other tables, the number of rows displayed will be defined by the master table. All database tables can be used, regardless of whether the form is related to a table (table form) or not (project form). -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ----- | --------------- | ----------------- | -| table | number | Table number | +| Name | Data Type | Possible Values | +| ----- | --------- | --------------- | +| table | number | Table number | -#### Objets pris en charge +#### Objects Supported [List Box](listbox_overview.md#overview) --- -## Enregistrer comme +## Save as This property is available in the following conditions: @@ -245,34 +245,34 @@ Using this property requires compliance with the following principles: - If you use this property for a [drop-down list](dropdownList_Overview.md), it must be associated with a field. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------ | --------------- | -------------------- | -| saveAs | string | "value", "reference" | +| Name | Data Type | Possible Values | +| ------ | --------- | -------------------- | +| saveAs | string | "value", "reference" | -#### Objets pris en charge +#### Objects Supported [Drop-down List](dropdownList_Overview.md) - [Input](input_overview.md) - [List Box Column](listbox_overview.md#list-box-columns) --- -## Eléments sélectionnés +## Selected Items `Collection or entity selection list boxes` Specifies a variable or expression that will be assigned the elements or entities selected by the user. * for a collection list box, you must use a collection variable or an assignable expression that accepts collections, -* for an entity selection list box, an entity selection object is built. Vous devez utiliser une variable objet ou une expression assignable qui accepte des objets. -> Cette propriété est en "lecture seule", elle est automatiquement mise à jour en fonction des actions de l'utilisateur dans la list box. Vous ne pouvez pas modifier sa valeur pour modifier l'état de sélection de la list box. +* for an entity selection list box, an entity selection object is built. You must use an object variable or an assignable expression that accepts objects. +> This property is "read-only", it is automatically updated according to user actions in the list box. You cannot edit its value to modify the list box selection status. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------------------- | --------------- | --------------------- | -| selectedItemsSource | string | Collection expression | +| Name | Data Type | Possible Values | +| ------------------- | --------- | --------------------- | +| selectedItemsSource | string | Collection expression | -#### Objets pris en charge +#### Objects Supported [List Box ](listbox_overview.md#overview) @@ -284,11 +284,11 @@ Specifies the named selection to be used. You must enter the name of a valid nam > Named selections are ordered lists of records. They are used to keep the order and current record of a selection in memory. For more information, refer to **Named Selections** section in the *4D Language Reference manual*. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| -------------- | --------------- | ------------------- | -| namedSelection | string | Nom de la sélection | +| Name | Data Type | Possible Values | +| -------------- | --------- | -------------------- | +| namedSelection | string | Named selection name | -#### Objets pris en charge +#### Objects Supported [List Box](listbox_overview.md#overview) From b4a94410bd599d80b783670d77a82fd9bd5a85fc Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:22:34 +0100 Subject: [PATCH 165/260] New translations properties_Display.md (French) --- .../fr/FormObjects/properties_Display.md | 170 +++++++++--------- 1 file changed, 85 insertions(+), 85 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/properties_Display.md b/website/translated_docs/fr/FormObjects/properties_Display.md index 7cf7831d56ef50..cbd13e0420f780 100644 --- a/website/translated_docs/fr/FormObjects/properties_Display.md +++ b/website/translated_docs/fr/FormObjects/properties_Display.md @@ -1,6 +1,6 @@ --- id: propertiesDisplay -title: Affichage +title: Display --- --- @@ -36,13 +36,13 @@ and the user enters "proportion", the field displays: The field actually contains "proportion". 4D accepts and stores the entire entry no matter what the display format. No information is lost. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ---------- | --------------- | ------------------------------------------------------------------------------------ | -| textFormat | string | "### ####", "(###) ### ####", "### ### ####", "### ## ####", "00000", custom formats | +| Name | Data Type | Possible Values | +| ---------- | --------- | ------------------------------------------------------------------------------------ | +| textFormat | string | "### ####", "(###) ### ####", "### ### ####", "### ## ####", "00000", custom formats | -#### Objets pris en charge +#### Objects Supported [Drop-down List](dropdownList_Overview.md) - [Combo Box](comboBox_overview.md) - [List Box Column](listbox_overview.md#list-box-columns) - [List Box Footer](listbox_overview.md#list-box-footers) @@ -85,13 +85,13 @@ The table below shows choices available: > Regardless of the display format, if the year is entered with two digits then 4D assumes the century to be the 21st if the year belongs to the interval (00;29) and the 20th if it belongs to the interval (30;99). This is the default setting but it can be modified using the [SET DEFAULT CENTURY](https://doc.4d.com/4Dv17R6/4D/17-R6/SET-DEFAULT-CENTURY.301-4311596.en.html) command. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ---------- | --------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| dateFormat | string | "systemShort", "systemMedium", "systemLong", "iso8601", "rfc822", "short", "shortCentury", "abbreviated", "long", "blankIfNull" (can be combined with the other possible values) | +| Name | Data Type | Possible Values | +| ---------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| dateFormat | string | "systemShort", "systemMedium", "systemLong", "iso8601", "rfc822", "short", "shortCentury", "abbreviated", "long", "blankIfNull" (can be combined with the other possible values) | -#### Objets pris en charge +#### Objects Supported [Combo Box](comboBox_overview.md) - [Drop-down List](dropdownList_Overview.md) - [Input](input_overview.md) - [List Box Column](listbox_overview.md#list-box-columns) - [List Box Footer](listbox_overview.md#list-box-footers) @@ -211,7 +211,7 @@ corresponds to the 5th time format in the pop-up menu, specifically the AM/PM ti 6:56 AM -### Exemples +### Examples The following table shows how different formats affect the display of numbers. The three columns — Positive, Negative, and Zero — each show how 1,234.50, –1,234.50, and 0 would be displayed. @@ -245,13 +245,13 @@ The following table shows how different formats affect the display of numbers. T | &5 | 1.23450e+3 | -1.23450e+3 | 0.00000 | | &xml | 1234.5 | -1234.5 | 0 | -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------------ | --------------- | -------------------------------------------------------------- | -| numberFormat | string | Numbers (including a decimal point or minus sign if necessary) | +| Name | Data Type | Possible Values | +| ------------ | --------- | -------------------------------------------------------------- | +| numberFormat | string | Numbers (including a decimal point or minus sign if necessary) | -#### Objets pris en charge +#### Objects Supported [Combo Box](comboBox_overview.md) - [Drop-down List](dropdownList_Overview.md) - [Input](input_overview.md) - [List Box Column](listbox_overview.md#list-box-columns) - [List Box Footer](listbox_overview.md#list-box-footers) - [Progress Indicators](progressIndicator.md) @@ -309,13 +309,13 @@ When the area that contains a picture with the **Replicated** format is enlarged If the field is reduced to a size smaller than that of the original picture, the picture is truncated (non-centered). -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------------- | --------------- | ----------------------------------------------------------------------------------------------------- | -| pictureFormat | string | "truncatedTopLeft", "scaled", "truncatedCenter", "tiled", "proportionalTopLeft", "proportionalCenter" | +| Name | Data Type | Possible Values | +| ------------- | --------- | ----------------------------------------------------------------------------------------------------- | +| pictureFormat | string | "truncatedTopLeft", "scaled", "truncatedCenter", "tiled", "proportionalTopLeft", "proportionalCenter" | -#### Objets pris en charge +#### Objects Supported [Input](input_overview.md) - [List Box Column](listbox_overview.md#list-box-columns) - [List Box Footer](listbox_overview.md#list-box-footers) @@ -331,27 +331,27 @@ Time formats control the way times appear when displayed or printed. For data en The table below shows the Time field display formats and gives examples: -| Format name | Chaine JSON | Commentaires | Exemple pour 04:30:25 | -| ---------------------------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------- | -| HH:MM:SS | hh_mm_ss | | 04:30:25 | -| HH:MM | hh_mm | | 04:30 | -| Hour Min Sec | HH_MM_SS | | 4 heures 30 minutes 25 secondes | -| Hour Min | HH_MM | | 4 heures 30 minutes | -| HH:MM AM/PM | hh_mm_am | | 4:30 a.m. | -| MM SS | mm_ss | Heure exprimée sous forme de durée à partir de 00:00:00 | 270:25 | -| Min Sec | MM_SS | Heure exprimée sous forme de durée à partir de 00:00:00 | 270 Minutes 25 Secondes | -| ISO Date Time | iso8601 | Corresponds to the XML standard for representing time-related data. It is mainly intended to be used when importing/exporting data in XML format | 0000-00-00T04:30:25 | -| System time short | - (default) | Standard time format defined in the system | 04:30:25 | -| System time long abbreviated | systemMedium | macOS only: Abbreviated time format defined in the system.
    Windows: this format is the same as the System time short format | 4•30•25 AM | -| System time long | systemLong | macOS only: Long time format defined in the system.
    Windows: this format is the same as the System time short format | 4:30:25 AM HNEC | +| Format name | JSON string | Comments | Example for 04:30:25 | +| ---------------------------- | ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------- | +| HH:MM:SS | hh_mm_ss | | 04:30:25 | +| HH:MM | hh_mm | | 04:30 | +| Hour Min Sec | HH_MM_SS | | 4 hours 30 minutes 25 seconds | +| Hour Min | HH_MM | | 4 hours 30 minutes | +| HH:MM AM/PM | hh_mm_am | | 4:30 a.m. | +| MM SS | mm_ss | Time expressed as a duration from 00:00:00 | 270:25 | +| Min Sec | MM_SS | Time expressed as a duration from 00:00:00 | 270 Minutes 25 Seconds | +| ISO Date Time | iso8601 | Corresponds to the XML standard for representing time-related data. It is mainly intended to be used when importing/exporting data in XML format | 0000-00-00T04:30:25 | +| System time short | - (default) | Standard time format defined in the system | 04:30:25 | +| System time long abbreviated | systemMedium | macOS only: Abbreviated time format defined in the system.
    Windows: this format is the same as the System time short format | 4•30•25 AM | +| System time long | systemLong | macOS only: Long time format defined in the system.
    Windows: this format is the same as the System time short format | 4:30:25 AM HNEC | -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ---------- | --------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| timeFormat | string | "systemShort", "systemMedium", "systemLong", "iso8601", "hh_mm_ss", "hh_mm", "hh_mm_am", "mm_ss", "HH_MM_SS", "HH_MM", "MM_SS", "blankIfNull" (can be combined with the other possible values) | +| Name | Data Type | Possible Values | +| ---------- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| timeFormat | string | "systemShort", "systemMedium", "systemLong", "iso8601", "hh_mm_ss", "hh_mm", "hh_mm_am", "mm_ss", "HH_MM_SS", "HH_MM", "MM_SS", "blankIfNull" (can be combined with the other possible values) | -#### Objets pris en charge +#### Objects Supported [Combo Box](comboBox_overview.md) - [Drop-down List](dropdownList_Overview.md) - [Input](input_overview.md) - [List Box Column](listbox_overview.md#list-box-columns) - [List Box Footer](listbox_overview.md#list-box-footers) @@ -369,14 +369,14 @@ When a [boolean expression](properties_Object.md#expression-type) is displayed a - **Text when True** - the text to be displayed when the value is "true" - **Text when False** - the text to be displayed when the value is "false" -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------------- | --------------- | ------------------------------------------------------------------------ | -| booleanFormat | string | "\<*textWhenTrue*\>;\<*textWhenFalse*\>", e.g. "Assigned;Unassigned" | +| Name | Data Type | Possible Values | +| ------------- | --------- | ------------------------------------------------------------------------ | +| booleanFormat | string | "\<*textWhenTrue*\>;\<*textWhenFalse*\>", e.g. "Assigned;Unassigned" | -#### Objets pris en charge +#### Objects Supported [List Box Column](listbox_overview.md#list-box-columns) - [Input](input_overview.md) @@ -392,15 +392,15 @@ Boolean and number (numeric or integer) columns can be displayed as check boxes. Boolean columns can also be displayed as pop-up menus. In this case, the [Text when False and Text when True](#text-when-false-text-when-true) properties must be defined. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ----------- | --------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| controlType | string |
  • **number columns**: "automatic" (default) or "checkbox"
  • **boolean columns**: "checkbox" (default) or "popup" | +| Name | Data Type | Possible Values | +| ----------- | --------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| controlType | string |
  • **number columns**: "automatic" (default) or "checkbox"
  • **boolean columns**: "checkbox" (default) or "popup" | -#### Objets pris en charge +#### Objects Supported -[Colonne de list box](listbox_overview.md#list-box-columns) +[List Box Column](listbox_overview.md#list-box-columns) @@ -414,13 +414,13 @@ When this property is enabled, the object is not drawn on the form, however it c In particular, this property allows implementing "invisible" buttons. Non-rendered buttons can be placed on top of graphic objects. They remain invisible and do not highlight when clicked, however their action is triggered when they are clicked. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------- | --------------- | ----------------- | -| display | boolean | true, false | +| Name | Data Type | Possible Values | +| ------- | --------- | --------------- | +| display | boolean | true, false | -#### Objets pris en charge +#### Objects Supported [Button](button_overview.md) - [Drop-down List](dropdownList_Overview.md) @@ -435,7 +435,7 @@ In particular, this property allows implementing "invisible" buttons. Non-rende -Allows a check box object to accept a third state. La variable associée à la case à cocher retourne la valeur 2 lorsque celle-ci se trouve dans le troisième état. +Allows a check box object to accept a third state. The variable associated with the check box returns the value 2 when the check box is in the third state. #### Three-states check boxes in list box columns @@ -451,13 +451,13 @@ List box columns with a numeric [data type](properties_Object.md#expression-type In this case as well, the [Title](#title) property is also available so that the title of the check box can be entered. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ---------- | --------------- | ----------------- | -| threeState | boolean | true, false | +| Name | Data Type | Possible Values | +| ---------- | --------- | --------------- | +| threeState | boolean | true, false | -#### Objets pris en charge +#### Objects Supported [Check box](checkbox_overview.md) - [List Box Column](listbox_overview.md#list-box-columns) @@ -465,7 +465,7 @@ In this case as well, the [Title](#title) property is also available so that the --- -## Titre de menu +## Title This property is available for a list box column if: - the [column type](properties_Object.md#expression-type) is **boolean** and its [display type](properties_Display.md#display-type) is "Check Box" @@ -473,15 +473,15 @@ This property is available for a list box column if: In that cases, the title of the check box can be entered using this property. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------------ | --------------- | ---------------------------------- | -| controlTitle | string | Any custom label for the check box | +| Name | Data Type | Possible Values | +| ------------ | --------- | ---------------------------------- | +| controlTitle | string | Any custom label for the check box | -#### Objets pris en charge +#### Objects Supported -[Colonne de list box](listbox_overview.md#list-box-columns) +[List Box Column](listbox_overview.md#list-box-columns) @@ -512,15 +512,15 @@ The Truncate with ellipsis property can be applied to Boolean type columns; howe - For Pop-up type Boolean formats, labels are truncated with an ellipsis, - For Check box type Boolean formats, labels are always clipped. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------------ | --------------- | ---------------------- | -| truncateMode | string | "withEllipsis", "none" | +| Name | Data Type | Possible Values | +| ------------ | --------- | ---------------------- | +| truncateMode | string | "withEllipsis", "none" | -#### Objets pris en charge +#### Objects Supported [List Box Column](listbox_overview.md#list-box-columns) - [List Box Header](listbox_overview.md#list-box-footers) @@ -529,7 +529,7 @@ The Truncate with ellipsis property can be applied to Boolean type columns; howe --- -## Visibilité +## Visibility This property allows hiding by default the object in the Application environment. @@ -537,13 +537,13 @@ You can handle the Visible property for most form objects. This property simplif -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ---------- | --------------- | ------------------- | -| visibility | string | "visible", "hidden" | +| Name | Data Type | Possible Values | +| ---------- | --------- | ------------------- | +| visibility | string | "visible", "hidden" | -#### Objets pris en charge +#### Objects Supported [4D View Pro area](viewProArea_overview) - [4D Write Pro area](writeProArea_overview) - [Button](button_overview.md) - [Button Grid](buttonGrid_overview.md) - [Check Box](checkbox_overview.md) - [Combo Box](comboBox_overview.md) - [Drop-down List](dropdownList_Overview.md) - [Group Box](groupBox.md) - [Hierarchical List](list_overview.md) - [List Box](listbox_overview.md) - [List Box Column](listbox_overview.md#list-box-columns) - [List Box Footer](listbox_overview.md#list-box-footers) - [List Box Header](listbox_overview.md#list-box-headers) - [Picture Button](pictureButton_overview.md) - [Picture Pop-up Menu](picturePopupMenu_overview.md) - [Plug-in Area](pluginArea_overview.md) - [Progress indicator](progressIndicator.md) - [Radio Button](radio_overview.md) - [Spinner](spinner.md) - [Splitter](splitters.md) - [Static Picture](staticPicture.md) - [Stepper](stepper.md) - [Subform](subform_overview.md) - [Tab control](tabControl.md) - [Text Area](text.md) - [Web Area](webArea_overview.md) @@ -597,13 +597,13 @@ Note that regardless of the Wordwrap option’s value, the row height is not cha ![](assets/en/FormObjects/wordwrap1.png) -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| -------- | --------------- | -------------------------------------------------- | -| wordwrap | string | "automatic" (excluding list box), "normal", "none" | +| Name | Data Type | Possible Values | +| -------- | --------- | -------------------------------------------------- | +| wordwrap | string | "automatic" (excluding list box), "normal", "none" | -#### Objets pris en charge +#### Objects Supported [Input](input_overview.md) - [List Box Column](listbox_overview.md#list-box-columns) - [List Box Footer](listbox_overview.md#list-box-footers) From 6b8e480e7af7c83954f0710baed71bae33dea84a Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:22:37 +0100 Subject: [PATCH 166/260] New translations properties_Entry.md (French) --- .../fr/FormObjects/properties_Entry.md | 160 +++++++++--------- 1 file changed, 80 insertions(+), 80 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/properties_Entry.md b/website/translated_docs/fr/FormObjects/properties_Entry.md index 58c5d850239e2d..e6f875c0a5c85b 100644 --- a/website/translated_docs/fr/FormObjects/properties_Entry.md +++ b/website/translated_docs/fr/FormObjects/properties_Entry.md @@ -1,26 +1,26 @@ --- id: propertiesEntry -title: Saisie +title: Entry --- --- -## Correction orthographique +## Auto Spellcheck -4D inclut des fonctionnalités de correction orthographique intégrées et personnalisables. Text type [inputs](input_overview.md) can be checked, as well as [4D Write Pro](writeProArea_overview.md) documents. +4D includes an integrated and customizable spell-check utility. Text type [inputs](input_overview.md) can be checked, as well as [4D Write Pro](writeProArea_overview.md) documents. The Auto Spellcheck property activates the spell-check for each object. When used, a spell-check is automatically performed during data entry. You can also execute the `SPELL CHECKING` 4D language command for each object to be checked. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ---------- | --------------- | ----------------- | -| spellcheck | boolean | true, false | +| Name | Data Type | Possible Values | +| ---------- | --------- | --------------- | +| spellcheck | boolean | true, false | -#### Objets pris en charge +#### Objects Supported -[Zone 4D Write Pro](writeProArea_overview.md) - [Zone de saisie](input_overview.md) +[4D Write Pro area](writeProArea_overview.md) - [Input](input_overview.md) --- @@ -38,13 +38,13 @@ For a [multi-style](properties_Text.md#multi-style) text type [input](input_over For a [Web Area](webArea_overview.md), the contents of the menu depend of the rendering engine of the platform. It is possible to control access to the context menu via the [`WA SET PREFERENCE`](https://doc.4d.com/4Dv17R6/4D/17-R6/WA-SET-PREFERENCE.301-4310780.en.html) command. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ----------- | --------------- | ------------------------------------- | -| contextMenu | string | "automatic" (used if missing), "none" | +| Name | Data Type | Possible Values | +| ----------- | --------- | ------------------------------------- | +| contextMenu | string | "automatic" (used if missing), "none" | -#### Objets pris en charge +#### Objects Supported [Input](input_overview.md) - [Web Area](webArea_overview.md) - [4D Write Pro areas](writeProArea_overview.md) @@ -54,7 +54,7 @@ For a [Web Area](webArea_overview.md), the contents of the menu depend of the re --- -## Saisissable +## Enterable The Enterable attribute indicates whether users can enter values into the object. @@ -63,13 +63,13 @@ Objects are enterable by default. If you want to make a field or an object non-e When this property is disabled, any pop-up menus associated with a list box column via a list are disabled. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| --------- | --------------- | ----------------- | -| enterable | boolean | true, false | +| Name | Data Type | Possible Values | +| --------- | --------- | --------------- | +| enterable | boolean | true, false | -#### Objets pris en charge +#### Objects Supported [4D Write Pro areas](writeProArea_overview.md) - [Hierarchical List](list_overview.md) - [Input](input_overview.md) - [List Box Column](listbox_overview.md#list-box-columns) - [Progress Bar](progressIndicator.md) - [Ruler](ruler.md) - [Stepper](stepper.md) @@ -121,14 +121,14 @@ Here is a table that explains each of the entry filter choices in the Entry Filt | &"0-9;.;-" | Numbers. Allow only numbers, decimal points, and hyphens (minus sign). | -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ----------- | --------------- | ---------------------------------------------------------------------------------------------------------------------------- | -| entryFilter | string |
  • Entry filter code or
  • Entry filter name (filter names start with | ) | +| Name | Data Type | Possible Values | +| ----------- | --------- | ---------------------------------------------------------------------------------------------------------------------------- | +| entryFilter | string |
  • Entry filter code or
  • Entry filter name (filter names start with | ) | -#### Objets pris en charge +#### Objects Supported [Combo Box](comboBox_overview.md) - [Hierarchical List](list_overview.md) - [Input](input_overview.md) - [List Box Column](listbox_overview.md#list-box-columns) @@ -153,14 +153,14 @@ When the **Focusable** property is enabled for an object, the object can have th When the **Focusable** property is selected for a non-enterable object, the user can select, copy or even drag-and-drop the contents of the area. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| --------- | --------------- | ----------------- | -| focusable | boolean | true, false | +| Name | Data Type | Possible Values | +| --------- | --------- | --------------- | +| focusable | boolean | true, false | -#### Objets pris en charge +#### Objects Supported [4D Write Pro areas](writeProArea_overview.md) - [Button](button_overview.md) - [Check Box](checkbox_overview.md) - [Drop-down List](dropdownList_Overview.md) - [Hierarchical List](list_overview.md) - [Input](input_overview.md) - [List Box](listbox_overview.md) - [Plug-in Area](pluginArea_overview.md) - [Radio Button](radio_overview.md) - [Subform](subform_overview.md) @@ -176,46 +176,46 @@ By default, the object uses the current keyboard layout. > You can also set and get the keyboard dynamically using the `OBJECT SET KEYBOARD LAYOUT` and `OBJECT Get keyboard layout` commands. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| --------------- | --------------- | --------------------------------------------------------------------------- | -| keyboardDialect | Texte | Language code, for example "ar-ma" or "cs". See RFC3066, ISO639 and ISO3166 | +| Name | Data Type | Possible Values | +| --------------- | --------- | --------------------------------------------------------------------------- | +| keyboardDialect | text | Language code, for example "ar-ma" or "cs". See RFC3066, ISO639 and ISO3166 | -#### Objets pris en charge +#### Objects Supported [4D Write Pro areas](writeProArea_overview.md) - [Input](input_overview.md) --- -## Multilignes +## Multiline -Cette propriété est disponible pour les [objets de zone de saisie](input_overview.md) contenant les expressions de type texte et les champs de type alpha et texte. Elle peut prendre trois valeurs : Oui, Non, Automatique (par défaut). +This property is available for [inputs objects](input_overview.md) containing expressions of the Text type and fields of the Alpha and Text type. It can have three different values: Yes, No, Automatic (default). -#### Automatique -- Dans les zones mono-lignes, les mots situés en fin de ligne sont tronqués et il n’y a pas de retours à la ligne. -- Dans les zones multi-lignes, 4D effectue des retours à la ligne automatiques : +#### Automatic +- In single-line inputs, words located at the end of lines are truncated and there are no line returns. +- In multiline inputs, 4D carries out automatic line returns: ![](assets/en/FormObjects/multilineAuto.png) -#### Non -- Dans les zones mono-lignes, les mots situés en fin de ligne sont tronqués et il n’y a pas de retours à la ligne. -- Il n’y a aucun retour à la ligne : le texte est toujours affiché sur une seule ligne. Si le champ ou la variable alpha ou texte contient des retour chariots, le texte situé après le premier retour chariot est effacé dès que la zone est modifiée : +#### No +- In single-line inputs, words located at the end of lines are truncated and there are no line returns. +- There are never line returns: the text is always displayed on a single row. If the Alpha or Text field or variable contains carriage returns, the text located after the first carriage return is removed as soon as the area is modified: ![](assets/en/FormObjects/multilineNo.png) -#### Oui -Lorsque cette valeur est sélectionnée, la propriété est gérée par l'option [Retour à la ligne](properties_Display.md#wordwrap). +#### Yes +When this value is selected, the property is managed by the [Wordwrap](properties_Display.md#wordwrap) option. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| --------- | --------------- | --------------------------------------------------- | -| multiline | Texte | "yes", "no", "automatic" (par défaut si non défini) | +| Name | Data Type | Possible Values | +| --------- | --------- | ------------------------------------------------- | +| multiline | text | "yes", "no", "automatic" (default if not defined) | -#### Objets pris en charge +#### Objects Supported [Input](input_overview.md) @@ -244,20 +244,20 @@ You can use an XLIFF reference in the ":xliff:resname" form as a placeholder, fo You only pass the reference in the "Placeholder" field; it is not possible to combine a reference with static text. > You can also set and get the placeholder text by programming using the [OBJECT SET PLACEHOLDER](https://doc.4d.com/4Dv17R5/4D/17-R5/OBJECT-SET-PLACEHOLDER.301-4128243.en.html) and [OBJECT Get placeholder](https://doc.4d.com/4Dv17R5/4D/17-R5/OBJECT-Get-placeholder.301-4128249.en.html) commands. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ----------- | --------------- | ------------------------------------------------------------------ | -| placeholder | string | Texte à afficher (grisé) lorsque l'objet ne contient aucune valeur | +| Name | Data Type | Possible Values | +| ----------- | --------- | ---------------------------------------------------------------------------- | +| placeholder | string | Text to be displayed (grayed out) when the object does not contain any value | -#### Objets pris en charge +#### Objects Supported -[Combo Box](comboBox_overview.md) - [Zone de saisie](input_overview.md) +[Combo Box](comboBox_overview.md) - [Input](input_overview.md) -#### Voir également +#### See also -[Message d'aide](properties_Help.md) +[Help tip](properties_Help.md) @@ -267,14 +267,14 @@ You only pass the reference in the "Placeholder" field; it is not possible to co This property keeps the selection visible within the object after it has lost the focus. This makes it easier to implement interfaces that allow the text style to be modified (see [Multi-style](properties_Text.md#multi-style)). -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------------- | --------------- | ----------------- | -| showSelection | boolean | true, false | +| Name | Data Type | Possible Values | +| ------------- | --------- | --------------- | +| showSelection | boolean | true, false | -#### Objets pris en charge +#### Objects Supported [4D Write Pro areas](writeProArea_overview.md) - [Input](input_overview.md) @@ -293,20 +293,20 @@ You can configure this option by clicking the [...] button in the Shortcuts prop To view a list of all the shortcuts used in the 4D Design environment, see the [Shortcuts Page](https://doc.4d.com/4Dv17R5/4D/17-R5/Shortcuts-Page.300-4163701.en.html) in the Preferences dialog box. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| --------------- | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| shortcutAccel | boolean | true, false (Ctrl Windows/Command macOS) | -| shortcutAlt | boolean | true, false | -| shortcutCommand | boolean | true, false | -| shortcutControl | boolean | true, false (macOS Control) | -| shortcutShift | boolean | true, false | -| | | | -| shortcutKey | string |
  • any character key: "a", "b"...
  • [F1]" -> "[F15]", "[Return]", "[Enter]", "[Backspace]", "[Tab]", "[Esc]", "[Del]", "[Home]", "[End]", "[Help]", "[Page up]", "[Page down]", "[left arrow]", "[right arrow]", "[up arrow]", "[down arrow]" | +| Name | Data Type | Possible Values | +| --------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| shortcutAccel | boolean | true, false (Ctrl Windows/Command macOS) | +| shortcutAlt | boolean | true, false | +| shortcutCommand | boolean | true, false | +| shortcutControl | boolean | true, false (macOS Control) | +| shortcutShift | boolean | true, false | +| | | | +| shortcutKey | string |
  • any character key: "a", "b"...
  • [F1]" -> "[F15]", "[Return]", "[Enter]", "[Backspace]", "[Tab]", "[Esc]", "[Del]", "[Home]", "[End]", "[Help]", "[Page up]", "[Page down]", "[left arrow]", "[right arrow]", "[up arrow]", "[down arrow]" | -#### Objets pris en charge +#### Objects Supported [Button](button_overview.md) - [Check Box](checkbox_overview.md) - [Picture Button](pictureButton_overview.md) - [Radio Button](radio_overview.md) @@ -315,7 +315,7 @@ To view a list of all the shortcuts used in the 4D Design environment, see the [ --- -## Saisie sur clic unique +## Single-Click Edit Enables direct passage to edit mode in list boxes. @@ -323,13 +323,13 @@ When this option is enabled, list box cells switch to edit mode after a single u When this option is not enabled, users must first select the cell row and then click on a cell in order to edit its contents. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| --------------- | --------------- | ----------------- | -| singleClickEdit | boolean | true, false | +| Name | Data Type | Possible Values | +| --------------- | --------- | --------------- | +| singleClickEdit | boolean | true, false | -#### Objets pris en charge +#### Objects Supported [List Box](listbox_overview.md) From d1d46778825282560eb0ee313b2c3aee0d3f0a09 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:22:39 +0100 Subject: [PATCH 167/260] New translations properties_Footers.md (French) --- .../fr/FormObjects/properties_Footers.md | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/properties_Footers.md b/website/translated_docs/fr/FormObjects/properties_Footers.md index 6336d78d939a9b..b9de67269ca9b2 100644 --- a/website/translated_docs/fr/FormObjects/properties_Footers.md +++ b/website/translated_docs/fr/FormObjects/properties_Footers.md @@ -1,20 +1,20 @@ --- id: propertiesFooters -title: Pieds +title: Footers --- --- -## Afficher pieds +## Display Footers -Cette propriété est utilisée pour afficher ou masquer [les pieds de de colonne listbox](listbox_overview.md#list-box-footers). Il existe un pied par colonne; chaque pied est configuré séparément. +This property is used to display or hide [list box column footers](listbox_overview.md#list-box-footers). There is one footer per column; each footer is configured separately. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ----------- | --------------- | ----------------- | -| showFooters | boolean | true, false | +| Name | Data Type | Possible Values | +| ----------- | --------- | --------------- | +| showFooters | boolean | true, false | -#### Objets pris en charge +#### Objects Supported [List Box](listbox_overview.md) @@ -22,13 +22,13 @@ Cette propriété est utilisée pour afficher ou masquer [les pieds de de colonn --- -## Hauteur +## Height -Cette propriété sert à définir la hauteur de ligne d'un pied de list box en **pixels** ou en **lignes de texte** (lorsqu'elle est affichée). Les deux types d'unités peuvent être utilisés dans la même list box : +This property is used to set the row height for a list box footer in **pixels** or **text lines** (when displayed). Both types of units can be used in the same list box: -* *Pixel* - la valeur de hauteur est appliquée directement à la ligne concernée, quelle que soit la taille de la police contenue dans les colonnes. Si une police est trop grande, le texte est tronqué. De plus, les images sont tronquées ou redimensionnées selon leur format. +* *Pixel* - the height value is applied directly to the row concerned, regardless of the font size contained in the columns. If a font is too big, the text is truncated. Moreover, pictures are truncated or resized according to their format. -* *Ligne* - la hauteur est calculée en tenant compte de la taille de police de la ligne concernée. +* *Line* - the height is calculated while taking into account the font size of the row concerned. * If more than one size is set, 4D uses the biggest one. For example, if a row contains "Verdana 18", "Geneva 12" and "Arial 9", 4D uses "Verdana 18" to determine the row height (for instance, 25 pixels). This height is then multiplied by the number of rows defined. * This calculation does not take into account the size of pictures nor any styles applied to the fonts. * In macOS, the row height may be incorrect if the user enters characters that are not available in the selected font. When this occurs, a substitute font is used, which may cause variations in size. @@ -42,7 +42,7 @@ Note that converting back and forth may lead to an end result that is different *(font Arial 18)*: 52 pixels -> 2 lines -> 40 pixels *(font Arial 12)*: 3 pixels -> 0.4 line rounded up to 1 line -> 19 pixels -#### Exemple JSON : +#### JSON Example: ``` "List Box": { @@ -54,17 +54,17 @@ Note that converting back and forth may lead to an end result that is different ``` -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------------ | --------------- | --------------------------------- | -| footerHeight | string | décimales positives +px | em | +| Name | Data Type | Possible Values | +| ------------ | --------- | ----------------------------- | +| footerHeight | string | positive decimal+px | em | -#### Objets pris en charge +#### Objects Supported [List Box](listbox_overview.md) -#### Voir également +#### See also -[En-têtes](properties_Headers.md) - [Pieds List box](listbox_overview.md#list-box-footers) \ No newline at end of file +[Headers](properties_Headers.md) - [List box footers](listbox_overview.md#list-box-footers) \ No newline at end of file From 4010d3376ac5b68aa0742bef5dd4c899a1d363e0 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:22:41 +0100 Subject: [PATCH 168/260] New translations properties_Gridlines.md (French) --- .../fr/FormObjects/properties_Gridlines.md | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/properties_Gridlines.md b/website/translated_docs/fr/FormObjects/properties_Gridlines.md index f48522ea8d80a4..ffbcdaa2a01f39 100644 --- a/website/translated_docs/fr/FormObjects/properties_Gridlines.md +++ b/website/translated_docs/fr/FormObjects/properties_Gridlines.md @@ -1,20 +1,20 @@ --- id: propertiesGridlines -title: Quadrillage +title: Gridlines --- --- -## Couleur lignes horizontales +## Horizontal Line Color -Définit la couleur des lignes horizontales dans une list box (gris par défaut). +Defines the color of the horizontal lines in a list box (gray by default). -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| -------------------- | --------------- | ------------------------------------------ | -| horizontalLineStroke | color | une valeur css; "transparent"; "automatic" | +| Name | Data Type | Possible Values | +| -------------------- | --------- | ------------------------------------------ | +| horizontalLineStroke | color | any css value, "'transparent", "automatic" | -#### Objets pris en charge +#### Objects Supported [List Box](listbox_overview.md) @@ -22,16 +22,16 @@ Définit la couleur des lignes horizontales dans une list box (gris par défaut) --- -## Couleur lignes verticales +## Vertical Line Color -Définit la couleur des lignes verticales d'une list box (gris par défaut). +Defines the color of the vertical lines in a list box (gray by default). -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------------------ | --------------- | ------------------------------------------ | -| verticalLineStroke | color | une valeur css; "transparent"; "automatic" | +| Name | Data Type | Possible Values | +| ------------------ | --------- | ------------------------------------------ | +| verticalLineStroke | color | any css value, "'transparent", "automatic" | -#### Objets pris en charge +#### Objects Supported [List Box](listbox_overview.md) \ No newline at end of file From 548cb721762b2d1b64a21bb01b58abf7aec2dfb6 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:22:43 +0100 Subject: [PATCH 169/260] New translations properties_Headers.md (French) --- .../fr/FormObjects/properties_Headers.md | 42 +++++++++---------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/properties_Headers.md b/website/translated_docs/fr/FormObjects/properties_Headers.md index 9286fa655e8bbd..8949ac077f9a09 100644 --- a/website/translated_docs/fr/FormObjects/properties_Headers.md +++ b/website/translated_docs/fr/FormObjects/properties_Headers.md @@ -1,20 +1,20 @@ --- id: propertiesHeaders -title: En-têtes +title: Headers --- --- -## Afficher en-têtes +## Display Headers -Cette propriété est utilisée pour afficher ou masquer [les en-têtes de colonne listbox](listbox_overview.md#list-box-headers). Il existe un en-tête par colonne; chaque en-tête est configuré séparément. +This property is used to display or hide [list box column headers](listbox_overview.md#list-box-headers). There is one header per column; each header is configured separately. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ----------- | --------------- | ----------------- | -| showHeaders | boolean | true, false | +| Name | Data Type | Possible Values | +| ----------- | --------- | --------------- | +| showHeaders | boolean | true, false | -#### Objets pris en charge +#### Objects Supported [List Box](listbox_overview.md) @@ -22,17 +22,17 @@ Cette propriété est utilisée pour afficher ou masquer [les en-têtes de colon --- -## Hauteur +## Height -Cette propriété sert à définir la hauteur de ligne d'un en-tête de list box en **pixels** ou en **lignes de texte** (lorsqu'elle est affichée). Les deux types d'unités peuvent être utilisés dans la même list box : +This property is used to set the row height for a list box header in **pixels** or **text lines** (when displayed). Both types of units can be used in the same list box: -* *Pixel* - la valeur de hauteur est appliquée directement à la ligne concernée, quelle que soit la taille de la police contenue dans les colonnes. Si une police est trop grande, le texte est tronqué. De plus, les images sont tronquées ou redimensionnées selon leur format. +* *Pixel* - the height value is applied directly to the row concerned, regardless of the font size contained in the columns. If a font is too big, the text is truncated. Moreover, pictures are truncated or resized according to their format. -* *Ligne* - la hauteur est calculée en tenant compte de la taille de police de la ligne concernée. +* *Line* - the height is calculated while taking into account the font size of the row concerned. * If more than one size is set, 4D uses the biggest one. For example, if a row contains "Verdana 18", "Geneva 12" and "Arial 9", 4D uses "Verdana 18" to determine the row height (for instance, 25 pixels). This height is then multiplied by the number of rows defined. * This calculation does not take into account the size of pictures nor any styles applied to the fonts. * In macOS, the row height may be incorrect if the user enters characters that are not available in the selected font. When this occurs, a substitute font is used, which may cause variations in size. -> Cette propriété peut être également définie dynamiquement à l'aide de la commande [LISTBOX SET HEADERS HEIGHT](https://doc.4d.com/4Dv17R6/4D/17-R6/LISTBOX-SET-HEADERS-HEIGHT.301-4311129.en.html). +> This property can also be set dynamically using the [LISTBOX SET HEADERS HEIGHT](https://doc.4d.com/4Dv17R6/4D/17-R6/LISTBOX-SET-HEADERS-HEIGHT.301-4311129.en.html) command. Conversion of units: When you switch from one unit to the other, 4D converts them automatically and displays the result in the Property List. For example, if the font used is "Lucida grande 24", a height of "1 line" is converted to "30 pixels" and a height of "60 pixels" is converted to "2 lines". @@ -40,7 +40,7 @@ Note that converting back and forth may lead to an end result that is different *(font Arial 18)*: 52 pixels -> 2 lines -> 40 pixels *(font Arial 12)*: 3 pixels -> 0.4 line rounded up to 1 line -> 19 pixels -#### Exemple JSON : +#### JSON Example: ``` "List Box": { @@ -53,17 +53,17 @@ Note that converting back and forth may lead to an end result that is different -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------------ | --------------- | ----------------------------------- | -| headerHeight | string | décimales positives +px | em ) | +| Name | Data Type | Possible Values | +| ------------ | --------- | ------------------------------- | +| headerHeight | string | positive decimal+px | em ) | -#### Objets pris en charge +#### Objects Supported [List Box](listbox_overview.md) -#### Voir également +#### See also -[Pieds](properties_Footers.md) - [En-têtes List box](listbox_overview.md#list-box-headers) \ No newline at end of file +[Footers](properties_Footers.md) - [List box headers](listbox_overview.md#list-box-headers) \ No newline at end of file From 57ee0d09ab013a3d46bd6509bc2978c00b39755b Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:22:45 +0100 Subject: [PATCH 170/260] New translations properties_Help.md (French) --- .../fr/FormObjects/properties_Help.md | 48 +++++++++---------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/properties_Help.md b/website/translated_docs/fr/FormObjects/properties_Help.md index dd2c7964506fe6..995397a25f1617 100644 --- a/website/translated_docs/fr/FormObjects/properties_Help.md +++ b/website/translated_docs/fr/FormObjects/properties_Help.md @@ -1,51 +1,51 @@ --- id: propertiesHelp -title: Aide +title: Help --- --- -## Infobulle +## Help Tip -Cette propriété permet d'associer les messages d'aide aux objets actifs de vos formulaires. Ils peuvent être affichés au moment de l'exécution : +This property allows associating help messages with active objects in your forms. They can be displayed at runtime: ![](assets/en/FormObjects/property_helpTip.png) -> - Le délai d'affichage et la durée maximale des messages d'aide peuvent être définis à l'aide des sélecteurs de délai et de durée des conseils de la commande **[SET DATABASE PARAMETER](https://doc.4d.com/4Dv17R5/4D/17-R5/SET-DATABASE-PARAMETER.301-4128139.en.html)**. -> - Ces infobulles peuvent être désactivées ou activées pour l'application à l'aide du sélecteur de la commande [**SET DATABASE PARAMETER**](https://doc.4d.com/4Dv17R5/4D/17-R5/SET-DATABASE-PARAMETER.301-4128139.en.html). +> - The display delay and maximum duration of help tips can be controlled using the `Tips delay` and `Tips duration` selectors of the **[SET DATABASE PARAMETER](https://doc.4d.com/4Dv17R5/4D/17-R5/SET-DATABASE-PARAMETER.301-4128139.en.html)** command. +> - Help tips can be globally disabled or enabled for the application using the Tips enabled selector of the [**SET DATABASE PARAMETER**](https://doc.4d.com/4Dv17R5/4D/17-R5/SET-DATABASE-PARAMETER.301-4128139.en.html) command. -Vous pouvez : +You can either: -- désigner une info-bulle existante, préalablement spécifiée dans l'éditeur de [messages d'aide](https://doc.4d.com/4Dv17R5/4D/17-R5/Help-tips.200-4163423.en.html) de 4D. -- ou saisir directement le message d'aide sous forme de chaîne. Cela vous permet de profiter de l'architecture XLIFF. Vous pouvez saisir ici une référence XLIFF afin d'afficher un message dans le langage de l'application (pour plus d'informations sur XLIFF, reportez-vous à [l'Annexe B: Architecture XLIFF](https://doc.4d.com/4Dv17R5/4D/17-R5/Appendix-B-XLIFF-architecture.300-4163748.en.html). Vous pouvez également utiliser des références 4D ([voir Utilisation de références en texte statique](https://doc.4d.com/4Dv17R5/4D/17-R5/Using-references-in-static-text.300-4163725.en.html)). -> Sous macOS, l'affichage des messages d'aide n'est pas pris en charge dans les fenêtres de type pop-up. +- designate an existing help tip, previously specified in the [Help tips](https://doc.4d.com/4Dv17R5/4D/17-R5/Help-tips.200-4163423.en.html) editor of 4D. +- or enter the help message directly as a string. This allows you to take advantage of XLIFF architecture. You can enter an XLIFF reference here in order to display a message in the application language (for more information about XLIFF, refer to [Appendix B: XLIFF architecture](https://doc.4d.com/4Dv17R5/4D/17-R5/Appendix-B-XLIFF-architecture.300-4163748.en.html). You can also use 4D references ([see Using references in static text](https://doc.4d.com/4Dv17R5/4D/17-R5/Using-references-in-static-text.300-4163725.en.html)). +> In macOS, displaying help tips is not supported in pop-up type windows. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -|:-------:|:---------------:| ------------------------------------------------------------ | -| tooltip | Texte | informations supplémentaires destinées à aider l'utilisateur | +| Name | Data Type | Possible Values | +|:-------:|:---------:| ------------------------------------- | +| tooltip | text | additional information to help a user | -#### Objets pris en charge +#### Objects Supported -[Bouton](button_overview.md) - [Grille de boutons](buttonGrid_overview.md) - [Check Box](checkbox_overview.md) - [Liste déroulante](dropdownList_Overview.md) - [Combo Box](comboBox_overview.md#overview) - [Liste hiérarchique ](list_overview.md#overview) - [En-tête List Box](listbox_overview.md#list-box-headers) - [Pied List Box](listbox_overview.md#list-box-footers) - [Bouton image](pictureButton_overview.md) - [Pop-up menu image](picturePopupMenu_overview.md) - [Bouton Radio](radio_overview.md) +[Button](button_overview.md) - [Button Grid](buttonGrid_overview.md) - [Check Box](checkbox_overview.md) - [Drop-down List](dropdownList_Overview.md) - [Combo Box](comboBox_overview.md#overview) - [Hierarchical List](list_overview.md#overview) - [List Box Header](listbox_overview.md#list-box-headers) - [List Box Footer](listbox_overview.md#list-box-footers) - [Picture Button](pictureButton_overview.md) - [Picture Pop-up menu](picturePopupMenu_overview.md) - [Radio Button](radio_overview.md) -#### Autres fonctionnalités d'aide +#### Other help features -Vous pouvez aussi associer des messages d'aides aux objets formulaire de deux autres façons : +You can also associate help messages with form objects in two other ways: -- au niveau de la structure de la base (champs uniquement). Dans ce cas, le message d'aide du champ apparaîtra sur les autres formulaires. Pour plus d'informations, référez-vous à la section [Propriétés des champs](https://doc.4d.com/4Dv17R5/4D/17-R5/Field-properties.300-4163580.en.html). -- en utilisant la commande **[OBJECT SET HELP TIP](https://doc.4d.com/4Dv17R5/4D/17-R5/OBJECT-SET-HELP-TIP.301-4128221.en.html)**, pour le process courant. +- at the level of the database structure (fields only). In this case, the help tip of the field is displayed in every form where it appears. For more information, refer to “Help Tips” in [Field properties](https://doc.4d.com/4Dv17R5/4D/17-R5/Field-properties.300-4163580.en.html). +- using the **[OBJECT SET HELP TIP](https://doc.4d.com/4Dv17R5/4D/17-R5/OBJECT-SET-HELP-TIP.301-4128221.en.html)** command, for the current process. -Lorsque différentes astuces sont associées au même objet à plusieurs emplacements, l'ordre de priorité suivant est appliqué : +When different tips are associated with the same object in several locations, the following priority order is applied: -1. structure (priorité la plus faible) -2. éditeur de formulaire -3. Commande **[OBJECT SET HELP TIP](https://doc.4d.com/4Dv17R5/4D/17-R5/OBJECT-SET-HELP-TIP.301-4128221.en.html)** (haute priorité) +1. structure level (lowest priority) +2. form editor level +3. **[OBJECT SET HELP TIP](https://doc.4d.com/4Dv17R5/4D/17-R5/OBJECT-SET-HELP-TIP.301-4128221.en.html)** command (highest priority) -#### Voir également +#### See also [Placeholder](properties_Entry.md#placeholder) From 687f3637489a27dcddfca69ae55fd67fbb6c3216 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:22:47 +0100 Subject: [PATCH 171/260] New translations properties_Hierarchy.md (French) --- .../fr/FormObjects/properties_Hierarchy.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/properties_Hierarchy.md b/website/translated_docs/fr/FormObjects/properties_Hierarchy.md index bb8fef26ac3f03..a87c6c4f1ffffd 100644 --- a/website/translated_docs/fr/FormObjects/properties_Hierarchy.md +++ b/website/translated_docs/fr/FormObjects/properties_Hierarchy.md @@ -1,26 +1,26 @@ --- id: propertiesHierarchy -title: Hiérarchie +title: Hierarchy --- --- -## List box hiérarchique -`List box de type tableau` +## Hierarchical List Box +`Array type list boxes` This property specifies that the list box must be displayed in hierarchical form. In the JSON form, this feature is triggered [when the *dataSource* property value is an array](properties_Object.md#hierarchical-list-box), i.e. a collection. Additional options (**Variable 1...10**) are available when the *Hierarchical List Box* option is selected, corresponding to each *dataSource* array to use as break column. Each time a value is entered in a field, a new row is added. Up to 10 variables can be specified. These variables set the hierarchical levels to be displayed in the first column. -Voir [List box hiérarchiques](listbox_overview.md#hierarchical-list-boxes) +See [Hierarchical list boxes](listbox_overview.md#hierarchical-list-boxes) -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ---------- | --------------- | -------------------------------------------------------- | -| datasource | tableau chaîne | Collection de noms de tableaux définissant la hiérarchie | +| Name | Data Type | Possible Values | +| ---------- | ------------ | ------------------------------------------------ | +| datasource | string array | Collection of array names defining the hierarchy | -#### Objets pris en charge +#### Objects Supported [List Box](listbox_overview.md) From 49c876e0d8dd7314b2d1ee9d0744dc5381afd409 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:22:49 +0100 Subject: [PATCH 172/260] New translations onMouseUp.md (French) --- website/translated_docs/fr/Events/onMouseUp.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/translated_docs/fr/Events/onMouseUp.md b/website/translated_docs/fr/Events/onMouseUp.md index 76761dd253b56b..a79ed6300ff914 100644 --- a/website/translated_docs/fr/Events/onMouseUp.md +++ b/website/translated_docs/fr/Events/onMouseUp.md @@ -3,7 +3,7 @@ id: onMouseUp title: On Mouse Up --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ----------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------- | | 2 | [Input](FormObjects/input_overview.md) of the `picture` [Type](FormObjects/properties_Object.md#type) | The user has just released the left mouse button in a Picture object | @@ -12,7 +12,7 @@ title: On Mouse Up The `On Mouse Up` event is generated when the user has just released the left mouse button while dragging in a picture input. This event is useful, for example, when you want the user to be able to move, resize or draw objects in a SVG area. -When the `On Mouse Up` event is generated, you can get the local coordinates where the mouse button was released. These coordinates are returned in the `MouseX` and `MouseY` System variables. Les coordonnées sont exprimées en pixels par rapport à l'angle supérieur gauche de l'image (0,0). +When the `On Mouse Up` event is generated, you can get the local coordinates where the mouse button was released. These coordinates are returned in the `MouseX` and `MouseY` System variables. The coordinates are expressed in pixels with respect to the top left corner of the picture (0,0). When using this event, you must also use the `Is waiting mouse up` command to handle cases where the "state manager" of the form is desynchronized, i.e. when the `On Mouse Up` event is not received after a click. This is the case for example when an alert dialog box is displayed above the form while the mouse button has not been released. For more information and an example of use of the `On Mouse Up` event, please refer to the description of the `Is waiting mouse up` command. From 9f9504a49487cd8ed8a296cb85f22590659dbc57 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:22:51 +0100 Subject: [PATCH 173/260] New translations properties_ListBox.md (French) --- .../fr/FormObjects/properties_ListBox.md | 128 +++++++++--------- 1 file changed, 64 insertions(+), 64 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/properties_ListBox.md b/website/translated_docs/fr/FormObjects/properties_ListBox.md index d1ad0554132f67..f4a8c0fbb46881 100644 --- a/website/translated_docs/fr/FormObjects/properties_ListBox.md +++ b/website/translated_docs/fr/FormObjects/properties_ListBox.md @@ -6,38 +6,38 @@ title: List Box --- ## Columns -Collection de colonnes de la list box. +Collection of columns of the list box. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------- | --------------------------- | ------------------------------------------------ | -| columns | collection d'objets colonne | Contient les propriétés des colonnes de list box | +| Name | Data Type | Possible Values | +| ------- | ---------------------------- | ------------------------------------------------ | +| columns | collection of column objects | Contains the properties for the list box columns | For a list of properties supported by column objects, please refer to the [Column Specific Properties](listbox_overview#column-specific-properties) section. -#### Objets pris en charge +#### Objects Supported [List Box](listbox_overview.md) --- -## Nom formulaire détaillé -`Liste box sélection` +## Detail Form Name +`Selection type list box` -Indique le formulaire à utiliser pour modifier ou afficher les enregistrements individuels de la list box. +Specifies the form to use for modifying or displaying individual records of the list box. The specified form is displayed: * when using `Add Subrecord` and `Edit Subrecord` standard actions applied to the list box (see [Using standard actions](https://doc.4d.com/4Dv17R6/4D/17-R6/Using-standard-actions.300-4354811.en.html)), * when a row is double-clicked and the [Double-click on Row](#double-click-on-row) property is set to "Edit Record" or "Display Record". -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ---------- | --------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| detailForm | string |
  • Name (string) of table or project form
  • POSIX path (string) to a .json file describing the form
  • Object describing the form | +| Name | Data Type | Possible Values | +| ---------- | --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| detailForm | string |
  • Name (string) of table or project form
  • POSIX path (string) to a .json file describing the form
  • Object describing the form | -#### Objets pris en charge +#### Objects Supported [List Box](listbox_overview.md) @@ -47,8 +47,8 @@ The specified form is displayed: --- -## Double-clic sur ligne -`Liste box sélection` +## Double-click on row +`Selection type list box` Sets the action to be performed when a user double-clicks on a row in the list box. The available options are: @@ -61,13 +61,13 @@ Regardless of the action selected/chosen, the `On Double clicked` form event is For the last two actions, the On `Open Detail` form event is also generated. The `On Close Detail` is then generated when a record displayed in the detail form associated with the list box is about to be closed (regardless of whether or not the record was modified). -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ---------------------- | --------------- | ----------------------------------- | -| doubleClickInRowAction | string | "editSubrecord", "displaySubrecord" | +| Name | Data Type | Possible Values | +| ---------------------- | --------- | ----------------------------------- | +| doubleClickInRowAction | string | "editSubrecord", "displaySubrecord" | -#### Objets pris en charge +#### Objects Supported [List Box](listbox_overview.md) @@ -75,9 +75,9 @@ For the last two actions, the On `Open Detail` form event is also generated. The --- -## Ensemble surlignage +## Highlight Set -`Liste box sélection` +`Selection type list box` This property is used to specify the set to be used to manage highlighted records in the list box (when the **Arrays** data source is selected, a Boolean array with the same name as the list box is used). @@ -85,13 +85,13 @@ This property is used to specify the set to be used to manage highlighted record > * The highlighted status of the list box rows and the highlighted status of the table records are completely independent. > * If the “Highlight Set” property does not contain a name, it will not be possible to make selections in the list box. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------------ | --------------- | ----------------- | -| highlightSet | string | Name of the set | +| Name | Data Type | Possible Values | +| ------------ | --------- | --------------- | +| highlightSet | string | Name of the set | -#### Objets pris en charge +#### Objects Supported [List Box](listbox_overview.md) @@ -120,32 +120,32 @@ These properties interact as follows: * You can set a combination of locked and static columns according to your needs. For example, if you set three locked columns and one static column, the user can swap the two right-most columns within the locked area (since only the first column is static). -### Nombre de colonnes verrouillées +### Number of Locked Columns Number of columns that must stay permanently displayed in the left part of the list box, even when the user scrolls through the columns horizontally. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ----------------- | --------------- | ----------------- | -| lockedColumnCount | integer | minimum : 0 | +| Name | Data Type | Possible Values | +| ----------------- | --------- | --------------- | +| lockedColumnCount | integer | minimum: 0 | -#### Objets pris en charge +#### Objects Supported [List Box](listbox_overview.md) -### Nombre de colonnes statiques +### Number of Static Columns Number of columns that cannot be moved during execution. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ----------------- | --------------- | ----------------- | -| staticColumnCount | integer | minimum : 0 | +| Name | Data Type | Possible Values | +| ----------------- | --------- | --------------- | +| staticColumnCount | integer | minimum: 0 | -#### Objets pris en charge +#### Objects Supported [List Box](listbox_overview.md) @@ -155,18 +155,18 @@ Number of columns that cannot be moved during execution. --- -## Nombre de colonnes +## Number of Columns Sets the number of columns of the list box. > You can add or remove columns dynamically by programming, using commands such as [LISTBOX INSERT COLUMN](https://doc.4d.com/4Dv18/4D/18/LISTBOX-INSERT-COLUMN.301-4505224.en.html) or [LISTBOX DELETE COLUMN](https://doc.4d.com/4Dv18/4D/18/LISTBOX-DELETE-COLUMN.301-4505185.en.html). -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ----------- | --------------- | ----------------- | -| columnCount | integer | minimum: 1 | +| Name | Data Type | Possible Values | +| ----------- | --------- | --------------- | +| columnCount | integer | minimum: 1 | -#### Objets pris en charge +#### Objects Supported [List Box](listbox_overview.md) @@ -174,7 +174,7 @@ Sets the number of columns of the list box. --- -## Tableau de contrôle des lignes +## Row Control Array `Array type list box` @@ -184,11 +184,11 @@ You can set the "hidden", "disabled" and "selectable" interface properties for e The row control array must be of the Longint type and include the same number of rows as the list box. Each element of the *Row Control Array* defines the interface status of its corresponding row in the list box. Three interface properties are available using constants in the "List Box" constant theme: -| Constant | Valeur | Commentaire | -| ------------------------ | ------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| lk row is disabled | 2 | The corresponding row is disabled. The text and controls such as check boxes are dimmed or grayed out. Enterable text input areas are no longer enterable. Default value: Enabled | -| lk row is hidden | 1 | The corresponding row is hidden. Hiding rows only affects the display of the list box. The hidden rows are still present in the arrays and can be managed by programming. The language commands, more particularly `LISTBOX Get number of rows` or `LISTBOX GET CELL POSITION`, do not take the displayed/hidden status of rows into account. For example, in a list box with 10 rows where the first 9 rows are hidden, `LISTBOX Get number of rows` returns 10. From the user’s point of view, the presence of hidden rows in a list box is not visibly discernible. Only visible rows can be selected (for example using the Select All command). Default value: Visible | -| lk row is not selectable | 4 | The corresponding row is not selectable (highlighting is not possible). Enterable text input areas are no longer enterable unless the [Single-Click Edit](properties_Entry.md#single-click-edit) option is enabled. Controls such as check boxes and lists are still functional however. This setting is ignored if the list box selection mode is "None". Default value: Selectable | +| Constant | Value | Comment | +| ------------------------ | ----- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| lk row is disabled | 2 | The corresponding row is disabled. The text and controls such as check boxes are dimmed or grayed out. Enterable text input areas are no longer enterable. Default value: Enabled | +| lk row is hidden | 1 | The corresponding row is hidden. Hiding rows only affects the display of the list box. The hidden rows are still present in the arrays and can be managed by programming. The language commands, more particularly `LISTBOX Get number of rows` or `LISTBOX GET CELL POSITION`, do not take the displayed/hidden status of rows into account. For example, in a list box with 10 rows where the first 9 rows are hidden, `LISTBOX Get number of rows` returns 10. From the user’s point of view, the presence of hidden rows in a list box is not visibly discernible. Only visible rows can be selected (for example using the Select All command). Default value: Visible | +| lk row is not selectable | 4 | The corresponding row is not selectable (highlighting is not possible). Enterable text input areas are no longer enterable unless the [Single-Click Edit](properties_Entry.md#single-click-edit) option is enabled. Controls such as check boxes and lists are still functional however. This setting is ignored if the list box selection mode is "None". Default value: Selectable | To change the status for a row, you just need to set the appropriate constant(s) to the corresponding array element. For example, if you do not want row #10 to be selectable, you can write: @@ -206,7 +206,7 @@ You can define several interface properties at once: ![](assets/en/FormObjects/listbox_styles6.png) -Note that setting properties for an element overrides any other values for this element (if not reset). Par exemple: +Note that setting properties for an element overrides any other values for this element (if not reset). For example: ```4d aLControlArr{6}:=lk row is disabled + lk row is not selectable @@ -216,20 +216,20 @@ Note that setting properties for an element overrides any other values for this ``` -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ---------------- | --------------- | ---------------------- | -| rowControlSource | string | Row control array name | +| Name | Data Type | Possible Values | +| ---------------- | --------- | ---------------------- | +| rowControlSource | string | Row control array name | -#### Objets pris en charge +#### Objects Supported [List Box](listbox_overview.md) --- -## Mode de sélection +## Selection Mode Designates the option for allowing users to select rows: - **None**: Rows cannot be selected if this mode is chosen. Clicking on the list will have no effect unless the [Single-Click Edit](properties_Entry.md#single-click-edit) option is enabled. The navigation keys only cause the list to scroll; the `On Selection Change` form event is not generated. @@ -238,12 +238,12 @@ Designates the option for allowing users to select rows: - **Multiple**: Several rows can be selected simultaneously in this mode. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------------- | --------------- | ---------------------------- | -| selectionMode | string | "multiple", "single", "none" | +| Name | Data Type | Possible Values | +| ------------- | --------- | ---------------------------- | +| selectionMode | string | "multiple", "single", "none" | -#### Objets pris en charge +#### Objects Supported [List Box](listbox_overview.md) \ No newline at end of file From d84b1fb3cb18dbd3d173d14523875898a61c15a6 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:22:54 +0100 Subject: [PATCH 174/260] New translations properties_Object.md (French) --- .../fr/FormObjects/properties_Object.md | 170 +++++++++--------- 1 file changed, 85 insertions(+), 85 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/properties_Object.md b/website/translated_docs/fr/FormObjects/properties_Object.md index 19ebcd7418cf34..87cc120ce756a1 100644 --- a/website/translated_docs/fr/FormObjects/properties_Object.md +++ b/website/translated_docs/fr/FormObjects/properties_Object.md @@ -1,30 +1,30 @@ --- id: propertiesObject -title: Objets +title: Objects --- --- ## Type - `PARAMETRAGE OBLIGATOIRE` + `MANDATORY SETTING` This property designates the type of the [active or inactive form object](formObjects_overview.md). -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ---- | --------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| type | string | "button", "buttonGrid", "checkbox", "combo", "dropdown", "groupBox", "input", "line", "list", "listbox", "oval", "picture", "pictureButton", "picturePopup", "plugin", "progress", "radio", "rectangle", "ruler", "spinner", "splitter", "stepper", "subform", "tab", "text", "view", "webArea", "write" | +| Name | Data Type | Possible Values | +| ---- | --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| type | string | "button", "buttonGrid", "checkbox", "combo", "dropdown", "groupBox", "input", "line", "list", "listbox", "oval", "picture", "pictureButton", "picturePopup", "plugin", "progress", "radio", "rectangle", "ruler", "spinner", "splitter", "stepper", "subform", "tab", "text", "view", "webArea", "write" | -#### Objets pris en charge +#### Objects Supported [4D View Pro area](viewProArea_overview) - [4D Write Pro area](writeProArea_overview) - [Button](button_overview.md) - [Button Grid](buttonGrid_overview.md) - [Check Box](checkbox_overview.md) - [Combo Box](comboBox_overview.md) - [Drop-down List](dropdownList_Overview.md) - [Group Box](groupBox.md) - [Hierarchical List](list_overview.md) - [List Box](listbox_overview.md) - [List Box Column](listbox_overview.md#list-box-columns) - [List Box Footer](listbox_overview.md#list-box-footers) - [List Box Header](listbox_overview.md#list-box-headers) - [Picture Button](pictureButton_overview.md) - [Picture Pop-up Menu](picturePopupMenu_overview.md) - [Plug-in Area](pluginArea_overview.md) - [Progress indicator](progressIndicator.md) - [Radio Button](radio_overview.md) -[Spinner](spinner.md) - [Splitter](splitters.md) - [Static Picture](staticPicture.md) - [Stepper](stepper.md) - [Subform](subform_overview.md) - [Tab control](tabControl.md) - [Text Area](text.md) - [Web Area](webArea_overview.md) --- -## Nom d'objet +## Object Name Each active form object is associated with an object name. Each object name must be unique. > Object names are limited to a size of 255 bytes. @@ -35,13 +35,13 @@ When using 4D’s language, you can refer to an active form object by its object For more information about naming rules for form objects, refer to [Identifiers](Concepts/identifiers.md) section. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ---- | --------------- | -------------------------------------------------------------------- | -| name | string | Any allowed name which does not belong to an already existing object | +| Name | Data Type | Possible Values | +| ---- | --------- | -------------------------------------------------------------------- | +| name | string | Any allowed name which does not belong to an already existing object | -#### Objets pris en charge +#### Objects Supported [4D View Pro area](viewProArea_overview) - [4D Write Pro area](writeProArea_overview) - [Button](button_overview.md) - [Button Grid](buttonGrid_overview.md) - [Check Box](checkbox_overview.md) - [Combo Box](comboBox_overview.md) - [Drop-down List](dropdownList_Overview.md) - [Group Box](groupBox.md) - [Hierarchical List](list_overview.md) - [List Box](listbox_overview.md) - [List Box Column](listbox_overview.md#list-box-columns) - [List Box Footer](listbox_overview.md#list-box-footers) - [List Box Header](listbox_overview.md#list-box-headers) - [Picture Button](pictureButton_overview.md) - [Picture Pop-up Menu](picturePopupMenu_overview.md) - [Plug-in Area](pluginArea_overview.md) - [Progress indicator](progressIndicator.md) - [Spinner](spinner.md) - [Splitter](splitters.md) - [Static Picture](staticPicture.md) - [Stepper](stepper.md) - [Radio Button](radio_overview.md) - [Subform](subform_overview.md) - [Tab control](tabControl.md) - [Text Area](text.md) - [Web Area](webArea_overview.md) @@ -55,28 +55,28 @@ This feature is only supported for objects that contribute to the overall geomet Here is the list of objects whose value can be saved: -| Objet | Saved value | -| -------------------------------------------- | -------------------------------------------------------------------------------------- | -| [Case à cocher](checkbox_overview.md) | Value of associated variable (0, 1, 2) | -| [Liste déroulante](dropdownList_Overview.md) | Number of selected row | -| [Bouton radio](radio_overview.md) | Value of associated variable (1, 0, True or False for buttons according to their type) | -| [Tab control](tabControl.md) | Number of selected tab | +| Objet | Saved value | +| ------------------------------------------ | -------------------------------------------------------------------------------------- | +| [Check Box](checkbox_overview.md) | Value of associated variable (0, 1, 2) | +| [Drop-down List](dropdownList_Overview.md) | Number of selected row | +| [Radio Button](radio_overview.md) | Value of associated variable (1, 0, True or False for buttons according to their type) | +| [Tab control](tabControl.md) | Number of selected tab | -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------------- | --------------- | ----------------- | -| memorizeValue | boolean | true, false | +| Name | Data Type | Possible Values | +| ------------- | --------- | --------------- | +| memorizeValue | boolean | true, false | -#### Objets pris en charge +#### Objects Supported [Check Box](checkbox_overview.md) - [Drop-down List](dropdownList_Overview.md) - [Radio Button](radio_overview.md) - [Tab control](tabControl.md) --- -## Variable ou expression +## Variable or Expression > See also **[Expression](properties_DataSource#expression)** for Selection and collection type list box columns. @@ -113,7 +113,7 @@ When a variable is not named, when the form is loaded, 4D creates a new variable End if ``` -In the 4D code, dynamic variables can be accessed using a pointer obtained with the `OBJECT Get pointer` command. Par exemple: +In the 4D code, dynamic variables can be accessed using a pointer obtained with the `OBJECT Get pointer` command. For example: ```4d // assign the time 12:00:00 to the variable for the "tstart" object @@ -133,14 +133,14 @@ For an array list box, the **Variable or Expression** property usually holds the -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | +| Name | Data Type | Possible Values | | ---------- | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | dataSource | string, or string array |
  • 4D variable, field name, or arbitrary complex language expression.
  • Empty string for [dynamic variables](#dynamic-variables).
  • String array (collection of array names) for a [hierarchical listbox](listbox_overview.md#hierarchical-list-boxes) column] | -#### Objets pris en charge +#### Objects Supported [4D View Pro area](viewProArea_overview) - [4D Write Pro area](writeProArea_overview) - [Button](button_overview.md) - [Button Grid](buttonGrid_overview.md) - [Check Box](checkbox_overview.md) - [Combo Box](comboBox_overview.md) - [Drop-down List](dropdownList_Overview.md) - [Hierarchical List](list_overview.md#overview) - [List Box](listbox_overview.md#overview) - [List Box Column](listbox_overview.md#list-box-columns) - [List Box Header](listbox_overview.md#list-box-headers) - [List Box Footer](listbox_overview.md#list-box-footers) - [Picture Pop-up Menu](picturePopupMenu_overview.md) - [Plug-in Area](pluginArea_overview.md#overview) - [Progress indicator](progressIndicator.md) - [Spinner](spinner.md) - [Splitter](splitters.md) - [Stepper](stepper.md) - [Tab control](tabControl.md) - [Subform](subform_overview.md#overview) - [Radio Button](radio_overview.md) - [Web Area](webArea_overview.md) @@ -163,13 +163,13 @@ However, this property has a typing function in the following specific cases: - **[Picture variables](input_overview.md)**: you can use this menu to declare the variables before loading the form in interpreted mode. Specific native mechanisms govern the display of picture variables in forms. These mechanisms require greater precision when configuring variables: from now on, they must have already been declared before loading the form — i.e., even before the `On Load` form event — unlike other types of variables. To do this, you need either for the statement `C_PICTURE(varName)` to have been executed before loading the form (typically, in the method calling the `DIALOG` command), or for the variable to have been typed at the form level using the expression type property. Otherwise, the picture variable will not be displayed correctly (only in interpreted mode). -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------------------ | --------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| dataSourceTypeHint | string |
  • **standard objects:** "integer", "boolean", "number", "picture", "text", date", "time", "arrayText", "arrayDate", "arrayTime", "arrayNumber", "collection", "object", "undefined"
  • **list box columns:** "boolean", "number", "picture", "text", date" (*array/selection list box only*) "integer", "time", "object" | +| Name | Data Type | Possible Values | +| ------------------ | --------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| dataSourceTypeHint | string |
  • **standard objects:** "integer", "boolean", "number", "picture", "text", date", "time", "arrayText", "arrayDate", "arrayTime", "arrayNumber", "collection", "object", "undefined"
  • **list box columns:** "boolean", "number", "picture", "text", date" (*array/selection list box only*) "integer", "time", "object" | -#### Objets pris en charge +#### Objects Supported [Check Box](checkbox_overview.md) - [Combo Box](comboBox_overview.md) - [Drop-down List](dropdownList_Overview.md) - [Input](input_overview.md) - [List Box Column](listbox_overview.md#list-box-columns) - [List Box Footer](listbox_overview.md#list-box-footers) - [Plug-in Area](pluginArea_overview.md#overview) - [Progress indicator](progressIndicator.md) - [Radio Button](radio_overview.md) - [Ruler](ruler.md) - [Spinner](spinner.md) - [Stepper](stepper.md) - [Subform](subform_overview.md) - [Tab Control](tabControl.md) @@ -180,21 +180,21 @@ However, this property has a typing function in the following specific cases: A list of space-separated words used as class selectors in [css files](FormEditor/createStylesheet.md#style-sheet-files). -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ----- | --------------- | --------------------------------------------------------- | -| class | string | One string with CSS name(s) separated by space characters | +| Name | Data Type | Possible Values | +| ----- | --------- | --------------------------------------------------------- | +| class | string | One string with CSS name(s) separated by space characters | -#### Objets pris en charge +#### Objects Supported [4D View Pro area](viewProArea_overview) - [4D Write Pro area](writeProArea_overview) - [Button](button_overview.md) - [Button Grid](buttonGrid_overview.md) - [Check Box](checkbox_overview.md) - [Combo Box](comboBox_overview.md) - [Drop-down List](dropdownList_Overview.md) - [Group Box](groupBox.md) - [Hierarchical List](list_overview.md#overview) - [List Box](listbox_overview.md#overview) - [Picture Button](pictureButton_overview.md) - [Picture Pop-up Menu](picturePopupMenu_overview.md) - [Plug-in Area](pluginArea_overview.md#overview) - [Radio Button](radio_overview.md) - [Static Picture](staticPicture.md) - [Subform](subform_overview.md#overview) - [Text Area](text.md) - [Web Area](webArea_overview.md#overview) --- -## Collection ou entity selection +## Collection or entity selection To use collection elements or entities to define the row contents of the list box. @@ -206,13 +206,13 @@ The collection or the entity selection must be available to the form when it is * if you used an entity selection, you can call **This** in the datasource expression to access each attribute value, for example **This.\**. > If you used a collection of scalar values (and not objects), 4D allows you to display each value by calling **This.value** in the datasource expression. However in this case you will not be able to modify values or to access the current ite object (see below) Note: For information about entity selections, please refer to the [ORDA](https://doc.4d.com/4Dv17R6/4D/17-R6/ORDA.200-4354624.en.html) chapter. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ---------- | --------------- | ------------------------------------------------------------ | -| dataSource | string | Expression that returns a collection or an entity selection. | +| Name | Data Type | Possible Values | +| ---------- | --------- | ------------------------------------------------------------ | +| dataSource | string | Expression that returns a collection or an entity selection. | -#### Objets pris en charge +#### Objects Supported [List Box](listbox_overview.md) @@ -222,7 +222,7 @@ The collection or the entity selection must be available to the form when it is --- -## Source de données +## Data Source Specify the type of list box. @@ -233,13 +233,13 @@ Specify the type of list box. - **Named Selection**: use expressions, fields or methods whose values will be evaluated for each record of a named selection. - **Collection or Entity Selection**: use collection elements or entities to define the row contents of the list box. Note that with this list box type, you need to define the [Collection or Entity Selection](properties_Object.md#collection-or-entity-selection) property. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ----------- | --------------- | ----------------------------------------------------------- | -| listboxType | string | "array", "currentSelection", "namedSelection", "collection" | +| Name | Data Type | Possible Values | +| ----------- | --------- | ----------------------------------------------------------- | +| listboxType | string | "array", "currentSelection", "namedSelection", "collection" | -#### Objets pris en charge +#### Objects Supported [List Box](listbox_overview.md) @@ -254,15 +254,15 @@ Specify the type of list box. Name of the [plug-in external area](pluginArea_overview.md) associated to the object. Plug-in external area names are published in the manifest.json file of the plug-in. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| -------------- | --------------- | ------------------------------------------------------------- | -| pluginAreaKind | string | Name of the plug-in external area (starts with a % character) | +| Name | Data Type | Possible Values | +| -------------- | --------- | ------------------------------------------------------------- | +| pluginAreaKind | string | Name of the plug-in external area (starts with a % character) | -#### Objets pris en charge -[Zone de plug-in](pluginArea_overview.md) +#### Objects Supported +[Plug-in Area](pluginArea_overview.md) @@ -272,22 +272,22 @@ Name of the [plug-in external area](pluginArea_overview.md) associated to the ob Enables radio buttons to be used in coordinated sets: only one button at a time can be selected in the set. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ---------- | --------------- | ----------------- | -| radioGroup | string | Radio group name | +| Name | Data Type | Possible Values | +| ---------- | --------- | ---------------- | +| radioGroup | string | Radio group name | -#### Objets pris en charge +#### Objects Supported -[Bouton radio](radio_overview.md) +[Radio Button](radio_overview.md) --- -## Titre de menu +## Title Allows inserting a label on an object. The font and the style of this label can be specified. @@ -301,13 +301,13 @@ By default, the label is placed in the center of the object. When the object als For application translation purposes, you can enter an XLIFF reference in the title area of a button (see [Appendix B: XLIFF architecture](https://doc.4d.com/4Dv17R5/4D/17-R5/Appendix-B-XLIFF-architecture.300-4163748.en.html)). -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ----- | --------------- | ----------------- | -| Texte | string | any text | +| Name | Data Type | Possible Values | +| ---- | --------- | --------------- | +| text | string | any text | -#### Objets pris en charge +#### Objects Supported [Button](button_overview.md) - [Check Box](checkbox_overview.md) - [List Box Header](listbox_overview.md#list-box-headers) - [Radio Button](radio_overview.md) - [Text Area](text.md) @@ -325,17 +325,17 @@ This property sets the type of calculation to be done in a [column footer](listb There are several types of calculations available. The following table shows which calculations can be used according to the type of data found in each column and indicates the type automatically affected by 4D to the footer variable (if it is not typed by the code): -| Calculation | Num | Texte | Date | Heure | Bool | Pict | footer var type | -| --------------------- | --- | ----- | ---- | ----- | ---- | ---- | ------------------- | -| Minimum | X | | X | X | X | | Same as column type | -| Maximum | X | | X | X | X | | Same as column type | -| Sum | X | | X | | X | | Same as column type | -| Count | X | X | X | X | X | X | Entier long | -| Average | X | | | X | | | Réel | -| Standard deviation(*) | X | | | X | | | Réel | -| Variance(*) | X | | | X | | | Réel | -| Sum squares(*) | X | | | X | | | Réel | -| Custom ("none") | X | X | X | X | X | X | Any | +| Calculation | Num | Text | Date | Heure | Bool | Pict | footer var type | +| --------------------- | --- | ---- | ---- | ----- | ---- | ---- | ------------------- | +| Minimum | X | | X | X | X | | Same as column type | +| Maximum | X | | X | X | X | | Same as column type | +| Sum | X | | X | | X | | Same as column type | +| Count | X | X | X | X | X | X | Longint | +| Average | X | | | X | | | Real | +| Standard deviation(*) | X | | | X | | | Real | +| Variance(*) | X | | | X | | | Real | +| Sum squares(*) | X | | | X | | | Real | +| Custom ("none") | X | X | X | X | X | X | Any | (*) Only for array type list boxes. @@ -344,13 +344,13 @@ When an automatic calculation is set, it is applied to all the values found in t When **Custom** ("none" in JSON) is set, no automatic calculations are performed by 4D and you must assign the value of the variable in this area by programming. > Automatic calculations are not supported with: * footers of columns based on formulas, * footers of [Collection and Entity selection](listbox_overview.md#collection-or-entity-selection-list-boxes) list boxes. You need to use custom calculations. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------------------- | --------------- | ----------------------------------------------------------------------------------------------------- | -| variableCalculation | string | "none", "minimum", "maximum", "sum", "count", "average", "standardDeviation", "variance", "sumSquare" | +| Name | Data Type | Possible Values | +| ------------------- | --------- | ----------------------------------------------------------------------------------------------------- | +| variableCalculation | string | "none", "minimum", "maximum", "sum", "count", "average", "standardDeviation", "variance", "sumSquare" | -#### Objets pris en charge +#### Objects Supported [List Box Footer](listbox_overview.md#list-box-footers) From 04a216936b5508384fe4a2be043086942c5dd41a Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:22:57 +0100 Subject: [PATCH 175/260] New translations properties_Print.md (French) --- .../fr/FormEditor/properties_Print.md | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/website/translated_docs/fr/FormEditor/properties_Print.md b/website/translated_docs/fr/FormEditor/properties_Print.md index e89f2552f85543..e6ad89b3ea0a97 100644 --- a/website/translated_docs/fr/FormEditor/properties_Print.md +++ b/website/translated_docs/fr/FormEditor/properties_Print.md @@ -1,6 +1,6 @@ --- id: print -title: Imprimer +title: Print --- @@ -22,16 +22,16 @@ You can modify the following print settings: -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ----------- | --------------- | ------------------------------------------------------------------------------------ | -| pageFormat | object | Available print properties: paperName, paperWidth, paperHeight, orientation, scale | -| paperName | string | "A4", "US Letter"... | -| paperWidth | string | Used if a paper named paperName was not found. Requires unit suffix: pt, in, mm, cm. | -| paperHeight | string | Used if a paper named paperName was not found. Requires unit suffix: pt, in, mm, cm. | -| orientation | string | "landscape" (default is "portrait") | -| scale | number | minimum : 0 | +| Name | Data Type | Possible Values | +| ----------- | --------- | ------------------------------------------------------------------------------------ | +| pageFormat | object | Available print properties: paperName, paperWidth, paperHeight, orientation, scale | +| paperName | string | "A4", "US Letter"... | +| paperWidth | string | Used if a paper named paperName was not found. Requires unit suffix: pt, in, mm, cm. | +| paperHeight | string | Used if a paper named paperName was not found. Requires unit suffix: pt, in, mm, cm. | +| orientation | string | "landscape" (default is "portrait") | +| scale | number | minimum: 0 | --- From e58c3e2d61ae2d4b38d5283a428326bd75af1c34 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:23:00 +0100 Subject: [PATCH 176/260] New translations properties_Appearance.md (French) --- .../fr/FormObjects/properties_Appearance.md | 420 +++++++++--------- 1 file changed, 210 insertions(+), 210 deletions(-) diff --git a/website/translated_docs/fr/FormObjects/properties_Appearance.md b/website/translated_docs/fr/FormObjects/properties_Appearance.md index 217b36a33b963f..deef16f5718ed4 100644 --- a/website/translated_docs/fr/FormObjects/properties_Appearance.md +++ b/website/translated_docs/fr/FormObjects/properties_Appearance.md @@ -1,75 +1,75 @@ --- id: propertiesAppearance -title: Apparence +title: Appearance --- --- -## Bouton par défaut +## Default Button -La propriété de bouton par défaut désigne le bouton qui obtient le focus initial à l'exécution lorsqu'aucun bouton du formulaire ne possède la propriété [Focusable](properties_Entry.md#focusable). +The default button property designates the button that gets the initial focus at runtime when no button of the form has the [Focusable](properties_Entry.md#focusable) property. -Il ne peut y avoir qu'un seul bouton par défaut par page de formulaire. +There can only be one default button per form page. -De plus, sous macOS, la propriété du bouton par défaut modifie l'apparence du bouton afin d'indiquer un «choix recommandé» à l'utilisateur. Le bouton par défaut peut être différent du bouton sélectionné. Les boutons par défaut ont une apparence bleue spécifique sur macOS : +In addition, on macOS, the default button property modifies the button's appearance in order to indicate a "recommended choice" to the user. The default button can be different from the focused button. Default buttons have a specific blue appearance on macOS: ![](assets/en/FormObjects/property_defaultButtonmacOS.en.png) -> Le bouton doit avoir une hauteur standard pour obtenir l'apparence du bouton par défaut. +> Button must have a standard height to get the default button appearance. -Sous Windows, le concept de "choix recommandé" n'est pas pris en charge: seul le bouton focalisé a une apparence différente à l'exécution. Cependant, dans l'éditeur de formulaires 4D, le bouton par défaut est représenté par un contour bleu : +On Windows, the concept of "recommended choice" is not supported: only the focused button has a different appearance at runtime. However, in the 4D form editor, the default button is represented with a blue outline: ![](assets/en/FormObjects/property_defaultButtonWindows.en.png) -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| --- | --------------- | ----------------- | -| | | | - defaultButton|booléen|true, false | +| Name | Data Type | Possible Values | +| ---- | --------- | --------------- | +| | | | + defaultButton|boolean|true, false | -#### Objets pris en charge +#### Objects Supported -[Bouton](button_overview.md#regular) - [Bouton plat](button_overview.md#regular) +[Regular Button](button_overview.md#regular) - [Flat Button](button_overview.md#regular) --- -## Cacher rectangle de focus +## Hide focus rectangle -A l'exécution, un champ ou toute zone saisissable est délimité par un rectangle de sélection lorsqu'il a le focus (via la touche Tab ou un simple clic). Vous pouvez masquer ce rectangle en activant cette propriété. Masquer le rectangle de focus peut être utile dans le cas d'interfaces spécifiques. +During execution, a field or any enterable area is outlined by a selection rectangle when it has the focus (via the Tab key or a single click). You can hide this rectangle by enabling this property. Hiding the focus rectangle may be useful in the case of specific interfaces. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------------- | --------------- | ----------------- | -| hideFocusRing | boolean | true, false | +| Name | Data Type | Possible Values | +| ------------- | --------- | --------------- | +| hideFocusRing | boolean | true, false | -#### Objets pris en charge +#### Objects Supported -[Zones 4D Write Pro](writeProArea_overview.md) - [Liste hiérarchique](list_overview.md) - [Zone de saisie](input_overview.md) - [List Box](listbox_overview.md) - [Sous-formulaire](subform_overview.md) +[4D Write Pro area](writeProArea_overview.md) - [Hierarchical List](list_overview.md) - [Input](input_overview.md) - [List Box](listbox_overview.md) - [Subform](subform_overview.md) --- -## Cacher surlignage sélection -`List boxes de type sélection` +## Hide selection highlight +`Selection type list boxes` -Cette propriété est utilisée pour désactiver la mise en évidence de la sélection dans les list box. +This property is used to disable the selection highlight in list boxes. -Lorsque cette option est activée, la surbrillance de la sélection n'est plus visible pour les sélections effectuées dans les list box. Les sélections elles-mêmes sont toujours valides et fonctionnent exactement de la même manière que précédemment; cependant, ils ne sont plus représentés graphiquement à l'écran et vous devrez [définir leur apparence par programmation](listbox_overview.md#customizing-appearance-of-selected-rows). +When this option is enabled, the selection highlight is no longer visible for selections made in list boxes. Selections themselves are still valid and work in exactly the same way as previously; however, they are no longer represented graphically onscreen, and you will need to [define their appearance programmatically](listbox_overview.md#customizing-appearance-of-selected-rows). -Par défaut, cette option n'est pas activée. +By default, this option is not enabled. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------------------- | --------------- | ----------------- | -| hideSystemHighlight | boolean | true, false | +| Name | Data Type | Possible Values | +| ------------------- | --------- | --------------- | +| hideSystemHighlight | boolean | true, false | -#### Objets pris en charge +#### Objects Supported [List Box](listbox_overview.md) @@ -77,359 +77,359 @@ Par défaut, cette option n'est pas activée. --- -## Barre de défilement horizontale +## Horizontal Scroll Bar -Un outil d'interface permettant à l'utilisateur de déplacer la zone de visualisation vers la gauche ou la droite. +An interface tool allowing the user to move the viewing area to the left or right. -Valeurs disponibles : +Available values: -| Liste de propriétés | Valeur JSON | Description | -| ------------------- | ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Oui | "visible" | La barre de défilement est toujours visible, même lorsqu'elle n'est pas nécessaire (en d'autres termes, lorsque la taille du contenu de l'objet est inférieure à celle du cadre). | -| Non | "hidden" | La barre de défilement n'est jamais visible | -| Automatique | "automatic" | La barre de défilement apparaît automatiquement chaque fois que nécessaire et l'utilisateur peut saisir du texte plus grand que la largeur de l'objet | +| Property List | JSON value | Description | +| ------------- | ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Yes | "visible" | The scrollbar is always visible, even when it is not necessary (in other words, when the size of the object contents is smaller than that of the frame). | +| No | "hidden" | The scrollbar is never visible | +| Automatic | "automatic" | The scrollbar appears automatically whenever necessary and the user can enter text larger than the object width | -> Les objets image peuvent avoir des barres de défilement lorsque le format d'affichage de l'image est défini sur "Tronqué (non centré)" +> Picture objects can have scrollbars when the display format of the picture is set to “Truncated (non-centered).” -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------------------- | --------------- | -------------------------------- | -| scrollbarHorizontal | Texte | "visible", "hidden", "automatic" | +| Name | Data Type | Possible Values | +| ------------------- | --------- | -------------------------------- | +| scrollbarHorizontal | text | "visible", "hidden", "automatic" | -#### Objets pris en charge +#### Objects Supported -[Liste hiérarchique](list_overview.md#overview) - [Sous-formulaire](subform_overview.md#overview) - [List Box](listbox_overview.md#overview) - [Zone de saisie](input_overview.md) - [Zone 4D Write Pro](writeProArea_overview.md) +[Hierarchical List](list_overview.md#overview) - [Subform](subform_overview.md#overview) - [List Box](listbox_overview.md#overview) - [Input](input_overview.md) - [4D Write Pro area](writeProArea_overview.md) -#### Voir également -[Barre de défilement verticale](#vertical-scroll-bar) +#### See also +[Vertical scroll bar](#vertical-scroll-bar) --- ## Resolution -Définit la résolution d'écran pour le contenu de la zone 4D Write Pro. Par défaut, elle est définie sur 72 dpi (macOS), qui est la résolution standard des formulaires 4D sur toutes les plateformes. La définition de cette propriété sur 96 dpi définira un rendu Windows/Web sur les plateformes macOS et Windows. La définition de cette propriété sur **automatique** signifie que le rendu du document sera différent entre les plates-formes macOS et Windows. +Sets the screen resolution for the 4D Write Pro area contents. By default, it is set to 72 dpi (macOS), which is the standard resolution for 4D forms on all platforms. Setting this property to 96 dpi will set a windows/web rendering on both macOS and Windows platforms. Setting this property to **automatic** means that document rendering will differ between macOS and Windows platforms. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| --- | --------------- | ----------------- | -| | | | +| Name | Data Type | Possible Values | +| ---- | --------- | --------------- | +| | | | dpi|number|0=automatic, 72, 96 | -#### Objets pris en charge +#### Objects Supported -[Zone 4D Write Pro](writeProArea_overview.md) +[4D Write Pro area](writeProArea_overview.md) --- -## Afficher l'arrière-plan +## Show background -Affiche/masque les images d'arrière-plan et la couleur d'arrière-plan. +Displays/hides both background images and background color. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| --- | --------------- | ----------------- | -| | | | - showBackground|booléen|true (par défaut), false| +| Name | Data Type | Possible Values | +| ---- | --------- | --------------- | +| | | | + showBackground|boolean|true (default), false| -#### Objets pris en charge +#### Objects Supported -[Zone 4D Write Pro](writeProArea_overview.md) +[4D Write Pro area](writeProArea_overview.md) --- -## Afficher les pieds de page +## Show footers -Affiche/masque les pieds de page lorsque le [mode d'affichage de la page](#view-mode) est défini sur "Page". +Displays/hides the footers when [Page view mode](#view-mode) is set to "Page". -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| --- | --------------- | ----------------- | -| | | | - showFooters|booléen|true (par défaut), false| +| Name | Data Type | Possible Values | +| ---- | --------- | --------------- | +| | | | + showFooters|boolean|true (default), false| -#### Objets pris en charge +#### Objects Supported -[Zone 4D Write Pro](writeProArea_overview.md) +[4D Write Pro area](writeProArea_overview.md) --- -## Afficher la barre de formule +## Show Formula Bar -Lorsqu'elle est activée, la barre de formule est visible sous l'interface de la barre d'outils dans la zone 4D View Pro. Si elle n'est pas sélectionnée, la barre de formule est masquée. +When enabled, the formula bar is visible below the Toolbar interface in the 4D View Pro area. If not selected, the formula bar is hidden. -> Cette propriété est disponible uniquement pour l'interface de la [barre d'outils](#user-interface). +> This property is available only for the [Toolbar](#user-interface) interface. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| --- | --------------- | ----------------- | -| | | | - withFormulaBar|booléen|true (par défaut), false| +| Name | Data Type | Possible Values | +| ---- | --------- | --------------- | +| | | | + withFormulaBar|boolean|true (default), false| -#### Objets pris en charge +#### Objects Supported -[Zone 4D View Pro](viewProArea_overview.md) +[4D View Pro area](viewProArea_overview.md) --- -## Montrer les entêtes +## Show headers -Affiche/masque les en-têtes de la page lorsque le [mode d'affichage de la page](#view-mode) est défini sur "Page". +Displays/hides the headers when [Page view mode](#view-mode) is set to "Page". -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| --- | --------------- | ----------------- | -| | | | - showHeaders|booléen|true (par défaut), false| +| Name | Data Type | Possible Values | +| ---- | --------- | --------------- | +| | | | + showHeaders|boolean|true (default), false| -#### Objets pris en charge +#### Objects Supported -[Zone 4D Write Pro](writeProArea_overview.md) +[4D Write Pro area](writeProArea_overview.md) --- -## Montrer les caractères cachés +## Show hidden characters -Affiche/masque les caractères visibles +Displays/hides invisible characters -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| --- | --------------- | ----------------- | -| | | | - showHiddenChars|booléen|true (par défaut), false| +| Name | Data Type | Possible Values | +| ---- | --------- | --------------- | +| | | | + showHiddenChars|boolean|true (default), false| -#### Objets pris en charge +#### Objects Supported -[Zone 4D Write Pro](writeProArea_overview.md) +[4D Write Pro area](writeProArea_overview.md) --- -## Montrer la règle horizontale +## Show horizontal ruler -Affiche/masque la règle horizontale lorsque la vue du document est en mode [Page](#view-mode). +Displays/hides the horizontal ruler when the document view is in [Page mode](#view-mode). -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| --- | --------------- | ----------------- | -| | | | - showHorizontalRuler|booléen|true (par défaut), false| +| Name | Data Type | Possible Values | +| ---- | --------- | --------------- | +| | | | + showHorizontalRuler|boolean|true (default), false| -#### Objets pris en charge +#### Objects Supported -[Zone 4D Write Pro](writeProArea_overview.md) +[4D Write Pro area](writeProArea_overview.md) --- -## Montrer HTML WYSYWIG +## Show HTML WYSYWIG -Active/désactive la vue HTML WYSIWYG, dans laquelle tous les attributs avancés de 4D Write Pro qui ne sont pas compatibles avec tous les navigateurs sont supprimés. +Enables/disables the HTML WYSIWYG view, in which any 4D Write Pro advanced attributes which are not compliant with all browsers are removed. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| --- | --------------- | ----------------- | -| | | | - showHTMLWysiwyg|booléen|true, false (par défaut)| +| Name | Data Type | Possible Values | +| ---- | --------- | --------------- | +| | | | + showHTMLWysiwyg|boolean|true, false (default)| -#### Objets pris en charge +#### Objects Supported -[Zone 4D Write Pro](writeProArea_overview.md) +[4D Write Pro area](writeProArea_overview.md) --- -## Afficher le cadre de la page +## Show page frame -Affiche/masque le cadre de la page lorsque le [mode d'affichage de la page](#view-mode) est défini sur "Page". +Displays/hides the page frame when [Page view mode](#view-mode) is set to "Page". -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| --- | --------------- | ----------------- | -| | | | - showPageFrames|booléen|true, false| +| Name | Data Type | Possible Values | +| ---- | --------- | --------------- | +| | | | + showPageFrames|boolean|true, false| -#### Objets pris en charge +#### Objects Supported -[Zone 4D Write Pro](writeProArea_overview.md) +[4D Write Pro area](writeProArea_overview.md) --- -## Afficher les références +## Show references -Affiche toutes les expressions 4D insérées dans le document 4D Write Pro comme *références*. Lorsque cette option est désactivée, les expressions 4D sont affichées sous forme de *valeurs*. Par défaut, lorsque vous insérez un champ ou une expression 4D, 4D Write Pro calcule et affiche sa valeur actuelle. Sélectionnez cette propriété si vous souhaitez savoir quel champ ou quelle expression est affiché(e). Les références de champ ou d'expression apparaissent alors dans votre document, sur fond gris. +Displays all 4D expressions inserted in the 4D Write Pro document as *references*. When this option is disabled, 4D expressions are displayed as *values*. By default when you insert a 4D field or expression, 4D Write Pro computes and displays its current value. Select this property if you wish to know which field or expression is displayed. The field or expression references then appear in your document, with a gray background. -Par exemple, vous avez inséré la date courante avec un format, la date s'affiche : +For example, you have inserted the current date along with a format, the date is displayed: ![](assets/en/FormObjects/writePro1.png) -Lorsque la propriété Afficher les références est activée, la référence s'affiche : +With the Show references property on, the reference is displayed: ![](assets/en/FormObjects/writeProExpr.png) -> Les expressions 4D peuvent être insérées à l'aide de la commande `ST INSERT EXPRESSION`. +> 4D expressions can be inserted using the `ST INSERT EXPRESSION` command. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| --- | --------------- | ----------------- | -| | | | - showReferences|booléen|true, false (par défaut)| +| Name | Data Type | Possible Values | +| ---- | --------- | --------------- | +| | | | + showReferences|boolean|true, false (default)| -#### Objets pris en charge +#### Objects Supported -[Zone 4D Write Pro](writeProArea_overview.md) +[4D Write Pro area](writeProArea_overview.md) --- -## Afficher règle verticale +## Show vertical ruler -Affiche/masque la règle verticale lorsque la vue du document est en mode [Page](#view-mode). +Displays/hides the vertical ruler when the document view is in [Page mode](#view-mode). -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| --- | --------------- | ----------------- | -| | | | - showVerticalRuler|booléen|true (par défaut), false| +| Name | Data Type | Possible Values | +| ---- | --------- | --------------- | +| | | | + showVerticalRuler|boolean|true (default), false| -#### Objets pris en charge +#### Objects Supported -[Zone 4D Write Pro](writeProArea_overview.md) +[4D Write Pro area](writeProArea_overview.md) --- -## Onglets +## Tab Control Direction -Vous pouvez définir la direction des onglets dans vos formulaires. Cette propriété est disponible sur toutes les plateformes mais ne peut être affichée que sous macOS. Vous pouvez choisir de placer les onglets en haut (standard) ou en bas. +You can set the direction of tab controls in your forms. This property is available on all the platforms but can only be displayed in macOS. You can choose to place the tab controls on top (standard) or on the bottom. -Lorsque des onglets sont affichés avec une direction personnalisée sous Windows, ils retournent automatiquement à la direction standard (en haut). +When tab controls with a custom direction are displayed under Windows, they automatically return to the standard direction (top). -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| --- | --------------- | ----------------- | -| | | | - labelsPlacement|booléen|"top", "bottom" | +| Name | Data Type | Possible Values | +| ---- | --------- | --------------- | +| | | | + labelsPlacement|boolean|"top", "bottom" | -#### Objets pris en charge +#### Objects Supported -[Onglets](tabControl.md) +[Tab Control](tabControl.md) --- -## Interface utilisateur +## User Interface -Vous pouvez ajouter une interface aux zones 4D View Pro pour permettre aux utilisateurs finaux d'effectuer des modifications de base et des manipulations de données. 4D View Pro propose deux interfaces en option, le **ruban** et **la barre d'outils**. +You can add an interface to 4D View Pro areas to allow end users to perform basic modifications and data manipulations. 4D View Pro offers two optional interfaces to choose from, **Ribbon** and **Toolbar**. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| --- | --------------- | ----------------- | -| | | | - userInterface|texte|"none" (par défaut), "ribbon", "toolbar" | +| Name | Data Type | Possible Values | +| ---- | --------- | --------------- | +| | | | + userInterface|text|"none" (default), "ribbon", "toolbar" | -#### Objets pris en charge +#### Objects Supported -[Zone 4D View Pro](viewProArea_overview.md) +[4D View Pro area](viewProArea_overview.md) -#### Voir également +#### See also -[guide de référence 4D View Pro](https://doc.4d.com/4Dv18/4D/18/4D-View-Pro-Reference.100-4522233.en.html) +[4D View Pro reference guide](https://doc.4d.com/4Dv18/4D/18/4D-View-Pro-Reference.100-4522233.en.html) --- -## Barre de défilement verticale +## Vertical Scroll Bar -Un outil d'interface permettant à l'utilisateur de déplacer la zone de visualisation de haut en bas. +An interface tool allowing the user to move the viewing area up and down. -Valeurs disponibles : +Available values: -| Liste de propriétés | Valeur JSON | Description | -| ------------------- | ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Oui | "visible" | La barre de défilement est toujours visible, même lorsqu'elle n'est pas nécessaire (en d'autres termes, lorsque la taille du contenu de l'objet est inférieure à celle du cadre). | -| Non | "hidden" | La barre de défilement n'est jamais visible | -| Automatique | "automatic" | La barre de défilement apparaît automatiquement chaque fois que nécessaire (en d'autres termes, lorsque la taille du contenu de l'objet est supérieure à celle du cadre) | +| Property List | JSON value | Description | +| ------------- | ----------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Yes | "visible" | The scrollbar is always visible, even when it is not necessary (in other words, when the size of the object contents is smaller than that of the frame). | +| No | "hidden" | The scrollbar is never visible | +| Automatic | "automatic" | The scrollbar appears automatically whenever necessary (in other words, when the size of the object contents is greater than that of the frame) | -> Les objets image peuvent avoir des barres de défilement lorsque le format d'affichage de l'image est défini sur "Tronqué (non centré)" +> Picture objects can have scrollbars when the display format of the picture is set to “Truncated (non-centered).” -> Si un objet de saisie de texte n'a pas de barre de défilement, l'utilisateur peut faire défiler les informations à l'aide des flèches du clavier. +> If a text input object does not have a scroll bar, the user can scroll the information using the arrow keys. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ----------------- | --------------- | -------------------------------- | -| scrollbarVertical | Texte | "visible", "hidden", "automatic" | +| Name | Data Type | Possible Values | +| ----------------- | --------- | -------------------------------- | +| scrollbarVertical | text | "visible", "hidden", "automatic" | -#### Objets pris en charge +#### Objects Supported -[Liste hiérarchique](list_overview.md#overview) - [Sous-formulaire](subform_overview.md#overview) - [List Box](listbox_overview.md#overview) - [Zone de saisie](input_overview.md) - [Zone 4D Write Pro](writeProArea_overview.md) +[Hierarchical List](list_overview.md#overview) - [Subform](subform_overview.md#overview) - [List Box](listbox_overview.md#overview) - [Input](input_overview.md) - [4D Write Pro area](writeProArea_overview.md) -#### Voir également +#### See also -[Barre de défilement horizontale](#horizontal-scroll-bar) +[Horizontal scroll bar](#horizontal-scroll-bar) --- -## Mode d'affichage +## View mode -Définit le mode d'affichage du document 4D Write Pro dans la zone de formulaire. Trois valeurs sont disponibles : +Sets the mode for displaying the 4D Write Pro document in the form area. Three values are available: -- **Page** : le mode d'affichage le plus complet, qui comprend les contours de page, l'orientation, les marges, les sauts de page, les en-têtes et pieds de page, etc. -- **Brouillon** : mode brouillon avec propriétés de base du document -- **Embedded** : mode d'affichage adapté aux zones intégrées; il n'affiche pas les marges, les pieds de page, les en-têtes, les cadres, etc. Ce mode peut également être utilisé pour produire un affichage de type Web (si vous sélectionnez également la [résolution de 96 dpi](#resolution) et les propriétés [Afficher HTML WYSIWYG](#show-html-wysiwyg)). +- **Page**: the most complete view mode, which includes page outlines, orientation, margins, page breaks, headers and footers, etc. +- **Draft**: draft mode with basic document properties +- **Embedded**: view mode suitable for embedded areas; it does not display margins, footers, headers, page frames, etc. This mode can also be used to produce a web-like view output (if you also select the [96 dpi resolution](#resolution) and the [Show HTML WYSIWYG](#show-html-wysiwyg) properties). -> La propriété Mode d'affichage est utilisée uniquement pour le rendu à l'écran. Concernant les paramètres d'impression, des règles de rendu spécifiques sont automatiquement utilisées. +> The View mode property is only used for onscreen rendering. Regarding printing settings, specific rendering rules are automatically used. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| --- | --------------- | ----------------- | -| | | | - layoutMode|texte|"page", "draft", "embedded"| +| Name | Data Type | Possible Values | +| ---- | --------- | --------------- | +| | | | + layoutMode|text|"page", "draft", "embedded"| -#### Objets pris en charge +#### Objects Supported -[Zone 4D Write Pro](writeProArea_overview.md) +[4D Write Pro area](writeProArea_overview.md) --- ## Zoom -Définit le pourcentage de zoom pour l'affichage du contenu de la zone 4D Write Pro. +Sets the zoom percentage for displaying 4D Write Pro area contents. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| --- | --------------- | ----------------- | -| | | | - zoom|numérique|minimum = 0 | +| Name | Data Type | Possible Values | +| ---- | --------- | --------------- | +| | | | + zoom|number|minimum = 0 | -#### Objets pris en charge +#### Objects Supported -[Zone 4D Write Pro](writeProArea_overview.md) +[4D Write Pro area](writeProArea_overview.md) From 9f209c98e14a895f1105714e98e1115532a686ff Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:23:04 +0100 Subject: [PATCH 177/260] New translations properties_Markers.md (French) --- .../fr/FormEditor/properties_Markers.md | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/website/translated_docs/fr/FormEditor/properties_Markers.md b/website/translated_docs/fr/FormEditor/properties_Markers.md index 13c885583bd633..2c70c981fe6ab4 100644 --- a/website/translated_docs/fr/FormEditor/properties_Markers.md +++ b/website/translated_docs/fr/FormEditor/properties_Markers.md @@ -21,9 +21,9 @@ The Break area is defined as the area between the Detail control line and the Br You can make Break areas smaller or larger. You can use a Break area to display information that is not part of the records (instructions, current date, current time, etc.), or to display a line or other graphic element that concludes the screen display. In a printed report, you can use a Break area for calculating and printing subtotals and other summary calculations. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | +| Name | Data Type | Possible Values | | ----------- | --------------------------------- | -------------------------------------------------------------------------------------------------- | | markerBreak | integer | integer collection | Break marker position or collection of break marker positions in pixels.
    Minimum value: 0 | @@ -35,11 +35,11 @@ The form Detail area is displayed on the screen and printed once for each record You can make the Detail area smaller or larger. Whatever you place in the Detail area is displayed or printed once for each record. Most often you place fields or variables in the Detail area so that the information in each record is displayed or printed, but you can place other elements in the Detail area as well. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ---------- | --------------- | ----------------------------------- | -| markerBody | integer | Detail marker position. Minimum : 0 | +| Name | Data Type | Possible Values | +| ---------- | --------- | ---------------------------------- | +| markerBody | integer | Detail marker position. Minimum: 0 | --- @@ -50,11 +50,11 @@ You make the Footer area smaller or larger.

    You can use the Footer area to print graphics, page numbers, the current date, or any text you want at the bottom of each page of a report. For output forms designed for use on screen, the Footer area typically contains buttons that give the user options such as doing a search or sort, printing records, or putting away the current report. Active objects are accepted. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------------ | --------------- | ----------------- | -| markerFooter | integer | minimum : 0 | +| Name | Data Type | Possible Values | +| ------------ | --------- | --------------- | +| markerFooter | integer | minimum: 0 | --- @@ -78,9 +78,9 @@ The form can contains [additional header areas](#additional-areas) to be associa -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | +| Name | Data Type | Possible Values | | ------------ | --------------------------------- | ---------------------------------------------------------------------------------------------------- | | markerHeader | integer | integer collection | Header marker position or collection of header marker positions in pixels.
    Minimum value: 0 | From 54880accd923d8450f594869e2055f7575a0ba6a Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:23:06 +0100 Subject: [PATCH 178/260] New translations onUrlFiltering.md (French) --- website/translated_docs/fr/Events/onUrlFiltering.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/translated_docs/fr/Events/onUrlFiltering.md b/website/translated_docs/fr/Events/onUrlFiltering.md index dde9d375bed51d..4a950e58287b8a 100644 --- a/website/translated_docs/fr/Events/onUrlFiltering.md +++ b/website/translated_docs/fr/Events/onUrlFiltering.md @@ -3,9 +3,9 @@ id: onUrlFiltering title: On URL Filtering --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ------------------------------------------- | --------------------------------- | -| 51 | [Zone Web](FormObjects/webArea_overview.md) | A URL was blocked by the Web area | +| 51 | [Web Area](FormObjects/webArea_overview.md) | A URL was blocked by the Web area | ## Description @@ -14,5 +14,5 @@ This event is generated when the loading of a URL is blocked by the Web area bec You can find out the blocked URL using the `WA Get last filtered URL` command. -### Voir également +### See also [`On Open External Link`](onOpenExternalLink.md) \ No newline at end of file From 7d7323129a05a34dcb77fb5458a251a3d1d7efa0 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:23:08 +0100 Subject: [PATCH 179/260] New translations onOpenExternalLink.md (French) --- website/translated_docs/fr/Events/onOpenExternalLink.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/translated_docs/fr/Events/onOpenExternalLink.md b/website/translated_docs/fr/Events/onOpenExternalLink.md index 474e997aab0c4b..120a009da05026 100644 --- a/website/translated_docs/fr/Events/onOpenExternalLink.md +++ b/website/translated_docs/fr/Events/onOpenExternalLink.md @@ -3,9 +3,9 @@ id: onOpenExternalLink title: On Open External Link --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ------------------------------------------- | ---------------------------------------------- | -| 52 | [Zone Web](FormObjects/webArea_overview.md) | An external URL has been opened in the browser | +| 52 | [Web Area](FormObjects/webArea_overview.md) | An external URL has been opened in the browser | ## Description @@ -15,5 +15,5 @@ This event is generated when the loading of a URL was blocked by the Web area an You can find out the blocked URL using the `WA Get last filtered URL` command. -### Voir également +### See also [`On URL Filtering`](onUrlFiltering.md) \ No newline at end of file From b4571eb05df24eade5301b47c8a7ff085e1f0aa4 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:23:10 +0100 Subject: [PATCH 180/260] New translations onOutsideCall.md (French) --- website/translated_docs/fr/Events/onOutsideCall.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/translated_docs/fr/Events/onOutsideCall.md b/website/translated_docs/fr/Events/onOutsideCall.md index f759867393d437..6f584430593139 100644 --- a/website/translated_docs/fr/Events/onOutsideCall.md +++ b/website/translated_docs/fr/Events/onOutsideCall.md @@ -3,9 +3,9 @@ id: onOutsideCall title: Sur appel extérieur --- -| Code | Peut être appelé par | Définition | -| ---- | -------------------- | -------------------------------------------- | -| 10 | Formulaire | The form received a `POST OUTSIDE CALL` call | +| Code | Can be called by | Definition | +| ---- | ---------------- | -------------------------------------------- | +| 10 | Form | The form received a `POST OUTSIDE CALL` call | ## Description From 0365d879474a48cae258565916ec6d83830d957d Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:23:14 +0100 Subject: [PATCH 181/260] New translations properties_JSONref.md (French) --- .../fr/FormEditor/properties_JSONref.md | 82 +++++++++---------- 1 file changed, 41 insertions(+), 41 deletions(-) diff --git a/website/translated_docs/fr/FormEditor/properties_JSONref.md b/website/translated_docs/fr/FormEditor/properties_JSONref.md index 8997298d7e92c0..239b2d0e09b171 100644 --- a/website/translated_docs/fr/FormEditor/properties_JSONref.md +++ b/website/translated_docs/fr/FormEditor/properties_JSONref.md @@ -1,48 +1,48 @@ --- id: jsonReference -title: Liste de propriétés JSON +title: JSON property list --- -This page provides a comprehensive list of all form properties, sorted by their JSON name. Cliquez sur un nom de propriété pour accéder à sa description détaillée. +This page provides a comprehensive list of all form properties, sorted by their JSON name. Click on a property name to access its detailed description. > In the "Form Properties" chapter, properties are sorted according to their names and themes in the Property List. -| Propriété | Description | Valeurs possibles | -| ----------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| **a** | | | -| [bottomMargin](properties_FormSize.md#vert-margin) | Vertical margin value (in pixels) | minimum : 0 | -| **d** | | | -| [destination](properties_FormProperties.md#form-type) | Form type | "detailScreen", "listScreen", "detailPrinter", "listPrinter" | -| **e** | | | -| [events](Events/overview.md) | List of all events selected for the object or form | Collection of event names, e.g. ["onClick","onDataChange"...]. | -| **f** | | | -| [formSizeAnchor](properties_FormSize.md#form-size) | Nom de l'objet dont la position détermine la taille du formulaire. (longueur minimale : 1) | Nom d'un objet 4D | -| **h** | | | -| [height](properties_FormSize.md#height) | Hauteur du formulaire | minimum : 0 | -| **i** | | | -| [inheritedForm](properties_FormProperties.md#inherited-form-name) | Désigne le formulaire à hériter | Nom (chaîne) de la table ou du formulaire projet OU d'un chemin POSIX (chaîne) vers un fichier .json décrivant le formulaire OU un objet décrivant le formulaire | -| [inheritedFormTable](properties_FormProperties.md#inherited-form-table) | Désigne la table qu'un formulaire hérité utilisera | Un nom ou un numéro de table | -| **m** | | | -| [markerBody](properties_Markers.md#form-detail) | Position du marqueur de détail | minimum : 0 | -| [markerBreak](properties_Markers.md#form-break) | Position(s) du marqueur de rupture | minimum : 0 | -| [markerFooter](properties_Markers.md#form-footer) | Position du marqueur de pied | minimum : 0 | -| [markerHeader](properties_Markers.md#forrm-header) | Position(s) du marqueur d'en-tête | integer minimum: 0; integer array minimum: 0 | -| [memorizeGeometry](properties_FormProperties.md#memorize-geometry) | Enregistre les paramètres du formulaire lorsque la fenêtre du formulaire est fermée | true, false | -| [menuBar](properties_Menu.md#associated-menu-bar) | Barre de menu à associer au formulaire | Nom d'une barre de menus valide | -| [method](properties_Action.md#method) | A project method name. | The name of an existing project method | -| **p** | | | -| [pages](properties_FormProperties.md#pages) | Collection de pages (chaque page est un objet) | Objets page | -| [pageFormat](properties_Print.md#settings) | object | Propriétés d'impression disponibles | -| **r** | | | -| [rightMargin](properties_FormSize.md#hor-margin) | Valeur de la marge horizontale (en pixels) | minimum : 0 | -| **s** | | | -| [shared](properties_FormProperties.md#published-as-subform) | Indique si un formulaire peut être utilisé comme sous-formulaire | true, false | -| **w** | | | -| [width](properties_FormSize.md#width) | Largeur du formulaire | minimum : 0 | -| [windowMaxHeight](properties_FormProperties.md#maximum-height) | La plus grande hauteur autorisée de la fenêtre de formulaire | minimum : 0 | -| [windowMaxWidth](properties_FormProperties.md#maximum-width) | La plus grande largeur autorisée de la fenêtre de formulaire | minimum : 0 | -| [windowMinHeight](properties_FormProperties.md#minimum-height) | La plus petite hauteur autorisée de la fenêtre de formulaire | minimum : 0 | -| [windowMinWidth](properties_FormProperties.md#minimum-width) | La plus petite largeur autorisée de la fenêtre de formulaire | minimum : 0 | -| [windowSizingX](properties_WindowSize.md#fixed-width) | Dimensionnement vertical de la fenêtre de formulaire | "fixed", "variable" | -| [windowSizingY](properties_WindowSize.md#fixed-height) | Dimensionnement horizontal de la fenêtre de formulaire | "fixed", "variable" | -| [windowTitle](properties_FormProperties.md#window-title) | Désigne le titre d'une fenêtre de formulaire | Un nom pour la fenêtre de formulaire | \ No newline at end of file +| Property | Description | Possible Values | +| ----------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ | +| **a** | | | +| [bottomMargin](properties_FormSize.md#vert-margin) | Vertical margin value (in pixels) | minimum: 0 | +| **d** | | | +| [destination](properties_FormProperties.md#form-type) | Form type | "detailScreen", "listScreen", "detailPrinter", "listPrinter" | +| **e** | | | +| [events](Events/overview.md) | List of all events selected for the object or form | Collection of event names, e.g. ["onClick","onDataChange"...]. | +| **f** | | | +| [formSizeAnchor](properties_FormSize.md#form-size) | Name of the object whose position determines the size of the form. (minimum length: 1) | Name of a 4D object | +| **h** | | | +| [height](properties_FormSize.md#height) | Height of the form | minimum: 0 | +| **i** | | | +| [inheritedForm](properties_FormProperties.md#inherited-form-name) | Designates the form to inherit | Name (string) of table or project form OR a POSIX path (string) to a .json file describing the form OR an object describing the form | +| [inheritedFormTable](properties_FormProperties.md#inherited-form-table) | Designates the table an inherited form will use | A table name or number | +| **m** | | | +| [markerBody](properties_Markers.md#form-detail) | Detail marker position | minimum: 0 | +| [markerBreak](properties_Markers.md#form-break) | Break marker position(s) | minimum: 0 | +| [markerFooter](properties_Markers.md#form-footer) | Footer marker position | minimum: 0 | +| [markerHeader](properties_Markers.md#forrm-header) | Header marker position(s) | integer minimum: 0; integer array minimum: 0 | +| [memorizeGeometry](properties_FormProperties.md#memorize-geometry) | Saves the form parameters when the form window is closed | true, false | +| [menuBar](properties_Menu.md#associated-menu-bar) | Menu bar to associate to the form | Name of a valid menu bar | +| [method](properties_Action.md#method) | A project method name. | The name of an existing project method | +| **p** | | | +| [pages](properties_FormProperties.md#pages) | Collection of pages (each page is an object) | Page objects | +| [pageFormat](properties_Print.md#settings) | object | Available print properties | +| **r** | | | +| [rightMargin](properties_FormSize.md#hor-margin) | Horizontal margin value (in pixels) | minimum: 0 | +| **s** | | | +| [shared](properties_FormProperties.md#published-as-subform) | Specifies if a form can be used as a subform | true, false | +| **w** | | | +| [width](properties_FormSize.md#width) | Width of the form | minimum: 0 | +| [windowMaxHeight](properties_FormProperties.md#maximum-height) | Form window's largest allowable height | minimum: 0 | +| [windowMaxWidth](properties_FormProperties.md#maximum-width) | Form window's largest allowable width | minimum: 0 | +| [windowMinHeight](properties_FormProperties.md#minimum-height) | Form window's smallest allowable height | minimum: 0 | +| [windowMinWidth](properties_FormProperties.md#minimum-width) | Form window's smallest allowable width | minimum: 0 | +| [windowSizingX](properties_WindowSize.md#fixed-width) | Form window's vertical sizing | "fixed", "variable" | +| [windowSizingY](properties_WindowSize.md#fixed-height) | Form window's horizontal sizing | "fixed", "variable" | +| [windowTitle](properties_FormProperties.md#window-title) | Designates a form window's title | A name for the form window | \ No newline at end of file From 7c7997ab2dd703f29de059eda6fdb08aa637ee9e Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:23:16 +0100 Subject: [PATCH 182/260] New translations onPageChange.md (French) --- website/translated_docs/fr/Events/onPageChange.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/translated_docs/fr/Events/onPageChange.md b/website/translated_docs/fr/Events/onPageChange.md index bd7d72a9d83349..3770239bcb97d1 100644 --- a/website/translated_docs/fr/Events/onPageChange.md +++ b/website/translated_docs/fr/Events/onPageChange.md @@ -3,9 +3,9 @@ id: onPageChange title: Sur changement page --- -| Code | Peut être appelé par | Définition | -| ---- | -------------------- | --------------------------------------- | -| 56 | Formulaire | The current page of the form is changed | +| Code | Can be called by | Definition | +| ---- | ---------------- | --------------------------------------- | +| 56 | Form | The current page of the form is changed | ## Description From 08e54761b91ff99cd84a346c28a3b6d3ed368950 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:23:18 +0100 Subject: [PATCH 183/260] New translations onPlugInArea.md (French) --- website/translated_docs/fr/Events/onPlugInArea.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/fr/Events/onPlugInArea.md b/website/translated_docs/fr/Events/onPlugInArea.md index 202d90d00e27b5..640b1bf8caede3 100644 --- a/website/translated_docs/fr/Events/onPlugInArea.md +++ b/website/translated_docs/fr/Events/onPlugInArea.md @@ -3,7 +3,7 @@ id: onPlugInArea title: Sur appel zone du plug in --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ------------------------------------------------------------------ | ------------------------------------------------------------- | | 19 | Form - [Plug-in Area](FormObjects/pluginArea_overview.md#overview) | An external object requested its object method to be executed | From 62a1be54e1265afd9d8fd29ac5ce557970593d31 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:23:20 +0100 Subject: [PATCH 184/260] New translations onPrintingBreak.md (French) --- website/translated_docs/fr/Events/onPrintingBreak.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/fr/Events/onPrintingBreak.md b/website/translated_docs/fr/Events/onPrintingBreak.md index 879ba3117ec355..d6fde44f7cd5f2 100644 --- a/website/translated_docs/fr/Events/onPrintingBreak.md +++ b/website/translated_docs/fr/Events/onPrintingBreak.md @@ -3,7 +3,7 @@ id: onPrintingBreak title: On Printing Break --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------- | | 6 | [4D Write Pro area](FormObjects/writeProArea_overview) - [Button](FormObjects/button_overview.md) - [Button Grid](FormObjects/buttonGrid_overview.md) - [Check Box](FormObjects/checkbox_overview.md) - [Combo Box](FormObjects/comboBox_overview.md) - [Dropdown list](FormObjects/dropdownList_Overview.md) - Form - [Hierarchical List](FormObjects/list_overview.md) - [Input](FormObjects/input_overview.md) - [Picture Button](FormObjects/pictureButton_overview.md) - [Picture Pop up menu](FormObjects/picturePopupMenu_overview.md) - [Plug-in Area](FormObjects/pluginArea_overview.md#overview) - [Progress Indicators](FormObjects/progressIndicator.md) - [Radio Button](FormObjects/radio_overview.md) - [Ruler](FormObjects/ruler.md) - [Spinner](FormObjects/spinner.md) - [Splitter](FormObjects/splitters.md) - [Stepper](FormObjects/stepper.md) - [Tab control](FormObjects/tabControl.md) | One of the form’s break areas is about to be printed | From 4b25b2af31cd8d601423241757cf1fe9a2d8fd35 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:23:22 +0100 Subject: [PATCH 185/260] New translations onPrintingDetail.md (French) --- website/translated_docs/fr/Events/onPrintingDetail.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/fr/Events/onPrintingDetail.md b/website/translated_docs/fr/Events/onPrintingDetail.md index e04039919ee5bf..7770c6c6afad20 100644 --- a/website/translated_docs/fr/Events/onPrintingDetail.md +++ b/website/translated_docs/fr/Events/onPrintingDetail.md @@ -3,7 +3,7 @@ id: onPrintingDetail title: On Printing Detail --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------- | | 23 | [4D Write Pro area](FormObjects/writeProArea_overview) - [Button](FormObjects/button_overview.md) - [Button Grid](FormObjects/buttonGrid_overview.md) - [Check Box](FormObjects/checkbox_overview.md) - [Combo Box](FormObjects/comboBox_overview.md) - [Dropdown list](FormObjects/dropdownList_Overview.md) - Form - [Hierarchical List](FormObjects/list_overview.md) - [Input](FormObjects/input_overview.md) - [Picture Button](FormObjects/pictureButton_overview.md) - [Picture Pop up menu](FormObjects/picturePopupMenu_overview.md) - [Plug-in Area](FormObjects/pluginArea_overview.md#overview) - [Progress Indicators](FormObjects/progressIndicator.md) - [Radio Button](FormObjects/radio_overview.md) - [Ruler](FormObjects/ruler.md) - [Spinner](FormObjects/spinner.md) - [Splitter](FormObjects/splitters.md) - [Stepper](FormObjects/stepper.md) - [Tab control](FormObjects/tabControl.md) | The form’s detail area is about to be printed | From 41e22bee00d7c3b08c2b46a883ebf533283e38a3 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:23:24 +0100 Subject: [PATCH 186/260] New translations onPrintingFooter.md (French) --- website/translated_docs/fr/Events/onPrintingFooter.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/fr/Events/onPrintingFooter.md b/website/translated_docs/fr/Events/onPrintingFooter.md index ed66a547593634..940044383e1760 100644 --- a/website/translated_docs/fr/Events/onPrintingFooter.md +++ b/website/translated_docs/fr/Events/onPrintingFooter.md @@ -3,7 +3,7 @@ id: onPrintingFooter title: On Printing Footer --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------- | | 7 | [4D Write Pro area](FormObjects/writeProArea_overview) - [Button](FormObjects/button_overview.md) - [Button Grid](FormObjects/buttonGrid_overview.md) - [Check Box](FormObjects/checkbox_overview.md) - [Combo Box](FormObjects/comboBox_overview.md) - [Dropdown list](FormObjects/dropdownList_Overview.md) - Form - [Hierarchical List](FormObjects/list_overview.md) - [Input](FormObjects/input_overview.md) - [Picture Button](FormObjects/pictureButton_overview.md) - [Picture Pop up menu](FormObjects/picturePopupMenu_overview.md) - [Plug-in Area](FormObjects/pluginArea_overview.md#overview) - [Progress Indicators](FormObjects/progressIndicator.md) - [Radio Button](FormObjects/radio_overview.md) - [Ruler](FormObjects/ruler.md) - [Spinner](FormObjects/spinner.md) - [Splitter](FormObjects/splitters.md) - [Stepper](FormObjects/stepper.md) - [Tab control](FormObjects/tabControl.md) | The form’s footer area is about to be printed | From 14b2b1530b2f81684fe17a66a0b7a6c12b180860 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:23:26 +0100 Subject: [PATCH 187/260] New translations onResize.md (French) --- website/translated_docs/fr/Events/onResize.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/translated_docs/fr/Events/onResize.md b/website/translated_docs/fr/Events/onResize.md index 9258900815af35..de069bcca70cda 100644 --- a/website/translated_docs/fr/Events/onResize.md +++ b/website/translated_docs/fr/Events/onResize.md @@ -3,9 +3,9 @@ id: onResize title: Sur redimensionnement --- -| Code | Peut être appelé par | Définition | -| ---- | -------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | -| 29 | Formulaire | The form's window is resized or the subform object is resized (in this case the event is generated in the form method of the subform) | +| Code | Can be called by | Definition | +| ---- | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------- | +| 29 | Form | The form's window is resized or the subform object is resized (in this case the event is generated in the form method of the subform) | ## Description From 306f8c07a8a00650a6334b8f91c6ba943bcaee78 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:23:28 +0100 Subject: [PATCH 188/260] New translations onRowResize.md (French) --- .../translated_docs/fr/Events/onRowResize.md | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/website/translated_docs/fr/Events/onRowResize.md b/website/translated_docs/fr/Events/onRowResize.md index 197fb0abdd6bab..85d571afe88df2 100644 --- a/website/translated_docs/fr/Events/onRowResize.md +++ b/website/translated_docs/fr/Events/onRowResize.md @@ -3,7 +3,7 @@ id: onRowResize title: On Row Resize --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ------------------------------------------------------- | -------------------------------------------------------- | | 60 | [4D View Pro Area](FormObjects/viewProArea_overview.md) | The height of a row is modified by a user with the mouse | @@ -12,16 +12,16 @@ title: On Row Resize This event is generated when the height of a row is modified by a user in a 4D View Pro document. In this context, the [event object](overview.md#event-object) returned by the `FORM Event` command contains: -| Propriété | Type | Description | -| ----------- | ----------- | ---------------------------------------------------------------- | -| code | entier long | 60 | -| description | Texte | "On Row Resize" | -| objectName | Texte | 4D View Pro area name | -| sheetName | Texte | Name of the sheet of the event | -| range | object | Cell range of the rows whose heights have changed | -| header | boolean | True if the column header row (first row) is resized, else false | +| Property | Type | Description | +| ----------- | ------- | ---------------------------------------------------------------- | +| code | longint | 60 | +| description | text | "On Row Resize" | +| objectName | text | 4D View Pro area name | +| sheetName | text | Name of the sheet of the event | +| range | object | Cell range of the rows whose heights have changed | +| header | boolean | True if the column header row (first row) is resized, else false | -#### Exemple +#### Example ```4d If(FORM Event.code=On Row Resize) From 90d99ba9ec689228f3a8ab975a0e9e8a2414c99c Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:23:30 +0100 Subject: [PATCH 189/260] New translations onScroll.md (French) --- website/translated_docs/fr/Events/onScroll.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/fr/Events/onScroll.md b/website/translated_docs/fr/Events/onScroll.md index 368213959a1f69..640af5ab1ee425 100644 --- a/website/translated_docs/fr/Events/onScroll.md +++ b/website/translated_docs/fr/Events/onScroll.md @@ -3,7 +3,7 @@ id: onScroll title: Sur défilement --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | --------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------ | | 59 | [Input](FormObjects/input_overview.md) of the `picture` [Type](FormObjects/properties_Object.md#type) - [List Box](FormObjects/listbox_overview.md) | The user scrolls the contents of a picture object or list box using the mouse or keyboard. | From b70df7c54d77a4c450c65755e9885174b4b35ace Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:23:32 +0100 Subject: [PATCH 190/260] New translations onSelectionChange.md (French) --- .../fr/Events/onSelectionChange.md | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/website/translated_docs/fr/Events/onSelectionChange.md b/website/translated_docs/fr/Events/onSelectionChange.md index d44004a6b1f106..7983d9db36f916 100644 --- a/website/translated_docs/fr/Events/onSelectionChange.md +++ b/website/translated_docs/fr/Events/onSelectionChange.md @@ -3,7 +3,7 @@ id: onSelectionChange title: Sur nouvelle sélection --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------- | | 31 | [4D View Pro area](FormObjects/viewProArea_overview.md) - [4D Write Pro area](FormObjects/writeProArea_overview.md) - Form - [Hierarchical List](FormObjects/list_overview.md) - [Input](FormObjects/input_overview.md) - [List Box](FormObjects/listbox_overview.md) | The selection in the object is modified | @@ -16,16 +16,16 @@ This event can be generated in different contexts. ### 4D View Pro The current selection of rows or columns is modified. In this context, the [event object](overview.md#event-object) returned by the `FORM Event` command contains: -| Propriété | Type | Description | -| ------------- | ----------- | ------------------------------ | -| code | entier long | 31 | -| description | Texte | "On Selection Change" | -| objectName | Texte | 4D View Pro area name | -| sheetName | Texte | Name of the sheet of the event | -| oldSelections | object | Cell range before change | -| newSelections | object | Cell range after change | +| Property | Type | Description | +| ------------- | ------- | ------------------------------ | +| code | longint | 31 | +| description | text | "On Selection Change" | +| objectName | text | 4D View Pro area name | +| sheetName | text | Name of the sheet of the event | +| oldSelections | object | Cell range before change | +| newSelections | object | Cell range after change | -#### Exemple +#### Example ```4d If(FORM Event.code=On Selection Change) From 2faa5278b5d337839890dfc90ca66cc70eb8f54e Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:23:34 +0100 Subject: [PATCH 191/260] New translations onTimer.md (French) --- website/translated_docs/fr/Events/onTimer.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/translated_docs/fr/Events/onTimer.md b/website/translated_docs/fr/Events/onTimer.md index 8f35ec82fc92ef..497ad22e399838 100644 --- a/website/translated_docs/fr/Events/onTimer.md +++ b/website/translated_docs/fr/Events/onTimer.md @@ -3,9 +3,9 @@ id: onTimer title: Sur minuteur --- -| Code | Peut être appelé par | Définition | -| ---- | -------------------- | ----------------------------------------------------------------- | -| 27 | Formulaire | The number of ticks defined by the `SET TIMER` command has passed | +| Code | Can be called by | Definition | +| ---- | ---------------- | ----------------------------------------------------------------- | +| 27 | Form | The number of ticks defined by the `SET TIMER` command has passed | ## Description From a8add5edb51cfa4e5071d0637e4628d7292f812d Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:23:36 +0100 Subject: [PATCH 192/260] New translations onUnload.md (French) --- website/translated_docs/fr/Events/onUnload.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/website/translated_docs/fr/Events/onUnload.md b/website/translated_docs/fr/Events/onUnload.md index 1dfcf112e86609..eb978ff72d16ad 100644 --- a/website/translated_docs/fr/Events/onUnload.md +++ b/website/translated_docs/fr/Events/onUnload.md @@ -3,7 +3,7 @@ id: onUnload title: On Unload --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------- | | 24 | [4D View Pro Area](FormObjects/viewProArea_overview.md) - [4D Write Pro area](FormObjects/writeProArea_overview) - [Button](FormObjects/button_overview.md) - [Button Grid](FormObjects/buttonGrid_overview.md) - [Check Box](FormObjects/checkbox_overview.md) - [Combo Box](FormObjects/comboBox_overview.md) - [Dropdown list](FormObjects/dropdownList_Overview.md) - Form - [Hierarchical List](FormObjects/list_overview.md#overview) - [Input](FormObjects/input_overview.md) - [List Box](FormObjects/listbox_overview.md) - [List Box Column](FormObjects/listbox_overview.md#list-box-columns) - [Picture Button](FormObjects/pictureButton_overview.md) - [Picture Pop up menu](FormObjects/picturePopupMenu_overview.md) - [Plug-in Area](FormObjects/pluginArea_overview.md#overview) - [Progress Indicators](FormObjects/progressIndicator.md) - [Radio Button](FormObjects/radio_overview.md) - [Ruler](FormObjects/ruler.md) - [Spinner](FormObjects/spinner.md) - [Splitter](FormObjects/splitters.md) - [Stepper](FormObjects/stepper.md) - [Subform](FormObjects/subform_overview.md) - [Tab control](FormObjects/tabControl.md) - [Web Area](FormObjects/webArea_overview.md) | The form is about to be exited and released | @@ -18,11 +18,11 @@ All the objects of the form (from any page) whose `On Unload` object event prope -### Sous-formulaire +### Subform -The `On Unload` event is generated when the subform is closing (this event must also have been activated at the parent form level in order to be taken into account). The event is generated before those of the parent form. The event is generated before those of the parent form. +The `On Unload` event is generated when the subform is closing (this event must also have been activated at the parent form level in order to be taken into account). The event is generated before those of the parent form. Also note that, in accordance with the operating principles of form events, if the subform is placed on a page other than page 0 or 1, this event will only be generated when that page is closed (and not when the form is closed). -### Voir également +### See also [`On Load`](onLoad.md) \ No newline at end of file From 4f4c1bec4c1098b6a8a7221bf18a60c53ba37982 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:23:39 +0100 Subject: [PATCH 193/260] New translations onRowMoved.md (French) --- website/translated_docs/fr/Events/onRowMoved.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/fr/Events/onRowMoved.md b/website/translated_docs/fr/Events/onRowMoved.md index b73bc7248df3bd..71ff0c4ce6b236 100644 --- a/website/translated_docs/fr/Events/onRowMoved.md +++ b/website/translated_docs/fr/Events/onRowMoved.md @@ -3,7 +3,7 @@ id: onRowMoved title: Sur déplacement ligne --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ---------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------- | | 34 | [List Box of the array type](FormObjects/listbox_overview.md#array-list-boxes) - [List Box Column](FormObjects/listbox_overview.md#list-box-columns) | A list box row is moved by the user via drag and drop | From 778e66c9be7f431b1349e6f598c7798091ee6232 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:23:41 +0100 Subject: [PATCH 194/260] New translations onUrlLoadingError.md (French) --- website/translated_docs/fr/Events/onUrlLoadingError.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/translated_docs/fr/Events/onUrlLoadingError.md b/website/translated_docs/fr/Events/onUrlLoadingError.md index 73f78df966eeef..b5b6930770155a 100644 --- a/website/translated_docs/fr/Events/onUrlLoadingError.md +++ b/website/translated_docs/fr/Events/onUrlLoadingError.md @@ -3,9 +3,9 @@ id: onUrlLoadingError title: On URL Loading Error --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ------------------------------------------- | ------------------------------------------ | -| 50 | [Zone Web](FormObjects/webArea_overview.md) | An error occurred when the URL was loading | +| 50 | [Web Area](FormObjects/webArea_overview.md) | An error occurred when the URL was loading | ## Description @@ -15,5 +15,5 @@ This event is generated when an error is detected during the loading of a URL. You can call the `WA GET LAST URL ERROR` command in order to get information about the error. -### Voir également +### See also [`On Open External Link`](onOpenExternalLink.md) \ No newline at end of file From e1c3d80614108e7c07c4c8f354abf03096143ca3 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:23:43 +0100 Subject: [PATCH 195/260] New translations createStylesheet.md (French) --- .../fr/FormEditor/createStylesheet.md | 194 +++++++++--------- 1 file changed, 97 insertions(+), 97 deletions(-) diff --git a/website/translated_docs/fr/FormEditor/createStylesheet.md b/website/translated_docs/fr/FormEditor/createStylesheet.md index cf2382d7630f8c..aa9c4fdcfec052 100644 --- a/website/translated_docs/fr/FormEditor/createStylesheet.md +++ b/website/translated_docs/fr/FormEditor/createStylesheet.md @@ -5,51 +5,51 @@ title: Feuilles de style (style sheets) ## Aperçu -Une feuille de style regroupe une combinaison d’attributs d'objets formulaire — allant des attributs de texte à quasiment tous les attributs d'objet disponibles. +A style sheet groups together a combination of attributes for form objects — from text attributes to nearly any available object attribute. -Outre l’harmonisation de l’interface de vos applications, l’usage de feuilles de style a trois avantages majeurs : +In addition to harmonizing an application's interface, style sheets provide three major advantages: -* Gain de temps en développement : pour chaque objet, vous définissez en une seule opération un ensemble de paramétrages. -* Facilité de maintenance : les feuilles de styles ont la propriété de modifier l’apparence de tous les objets qui les utilisent. Changer, par exemple, la taille de la police dans une feuille de style changera la taille de la police pour tous les objets qui utilisent cette feuille de style. -* Contrôle du développement multi-plate-forme : les feuilles de style peuvent s'appliquer aux deux plate-formes macOS et Windows, ou bien à l'une d'elles uniquement. Lorsqu'une feuille de style est appliquée, 4D utilise automatiquement la feuille de style appropriée. +* Saves time during development: Each object has specific group of settings within a single operation. +* Facilitates maintenance: Style sheets modify the appearance of any objects that uses them, so changing the font size in a style sheet will change the font size for all of the objects that use this same style sheet. +* Controls multi-platform development: You can have a style sheets that apply to both macOS and Windows platforms, only macOS, or only Windows. When a style sheet is applied, 4D automatically uses the appropriate style sheet. -### Fichiers feuilles de style +### Style Sheet Files -4D accepte trois fichiers feuilles de style spécifiques : +4D accepts three, specific style sheet files: -| Feuille de style | Plateforme | -| ----------------------- | ----------------------------------------------------------------------- | -| styleSheets.css | Feuille de style globale par défaut pour macOS et Windows | -| styleSheets_mac.css | Pour définir des styles d'attributs spécifiques de macOS uniquement | -| styleSheets_windows.css | Pour définir des styles d'attributs spécifiques pour Windows uniquement | +| Style Sheet | Platform | +| ----------------------- | ----------------------------------------------------- | +| styleSheets.css | Default global style sheet for both macOS and Windows | +| styleSheets_mac.css | For defining macOS only specific attribute styles | +| styleSheets_windows.css | For defining Windows only specific attribute styles | -Ces fichiers sont stockés dans le dossier "/SOURCES" du projet. +These files are stored in the project's "/SOURCES" folder. -### Architecture des feuilles de style +### Style Sheet Architecture While adapted to meet the specific needs of 4D forms, style sheets for application projects generally follow CSS2 syntax and grammar. -Chaque règle de style d'une feuille de style contient deux parties : +Every style rule in a style sheet contains two parts: -* un *sélecteur* - Un sélecteur définit où appliquer le style. 4D prend en charge les sélecteurs "object type", "object name", "class", "all objects", et "attribute value". +* a *Selector* - A selector defines where to apply the style. 4D supports "object type", "object name", "class", "all objects", as well as "attribute value" selectors. -* une *déclaration* - La déclaration définit le style à appliquer. Plusieurs lignes de déclaration peuvent être regroupées pour former un bloc de déclaration. Chaque ligne d'un bloc de déclaration CSS doit se terminer par un point-virgule et l'intégralité du bloc doit être entourée d'accolades. +* a *Declaration* - The declaration defines the actual style to apply. Multiple declaration lines can be grouped together to form a declaration block. Each line in a CSS declaration block must end with a semicolon, and the entire block must be surrounded by curly braces. -## Sélecteurs de feuilles de style +## Style Sheet Selectors -### Type d'objet +### Object Type -Le type d'objet définit le type d'objet à styler et correspond au sélecteur d'élément CSS. +Corresponding to the CSS element selector, the object type defines the type of object to style. Specify the object type, then in curly braces, declare the style(s) to apply. > The object type corresponds to the JSON [type](FormObjects/properties_Object.md#type) property of form objects. -Dans l'exemple suivant, tous les objets du type *bouton* afficheront du texte dans la police Helvetica Neue, d'une taille de 20 pixels : +In the following example, all objects of the *button* type will display text in the Helvetica Neue font, with a size of 20 pixels: ``` button { @@ -67,13 +67,13 @@ text, input { } ``` -### Nom d'objet +### Object Name -Le nom de l'objet correspond au **sélecteur d'ID** CSS et définit un objet spécifique à styler, puisque que ce nom est unique dans le formulaire. +Corresponding to the CSS **ID selector**, the object name defines a specific object to style since the object's name is unique within the form. -Désignez l'objet avec le caractère "#" avant le nom de l'objet, puis entre accolades, déclarez le(s) style(s) à appliquer. +Designate the object with a "#" character before the object's name, then in curly braces, declare the style(s) to apply. -Dans l'exemple suivant, le texte de l'objet portant le nom "okButton" sera affiché dans la police Helvetica Neue, avec une taille de 20 pixels : +In the following example, the text of the object with the name "okButton" will be displayed in Helvetica Neue font, with a size of 20 pixels: ``` #okButton { @@ -86,11 +86,11 @@ Dans l'exemple suivant, le texte de l'objet portant le nom "okButton" sera affic ### Class -Class correspond au **sélecteur class** CSS et définit un objet le style de tous les objets formulaires de l'attribut `class`. +Corresponding to the CSS **class selector**, the class defines the style for all form objects with the `class` attribute. -Vous pouvez spécifier les classes à utiliser avec un caractère "." suivi du nom de la classe et, entre accolades, déclarez le(s) style(s) à appliquer. +You can specify the classes to use with a "." character followed by the name of the class, and in curly braces, declare the style(s) to apply. -Dans l'exemple suivant, le texte de tous les objets de la classe `okButtons` sera affiché dans la police Helvetica Neue, avec une taille de 20 pixels, alignée au centre : +In the following example, the text of all objects with the `okButtons` class will be displayed in Helvetica Neue font, with a size of 20 pixels, aligned in the center: ``` .okButtons { @@ -100,7 +100,7 @@ Dans l'exemple suivant, le texte de tous les objets de la classe `okButtons` ser } ``` -Pour indiquer qu'un style doit être appliqué uniquement à des objets de type différent, spécifiez le type suivi de "." et du nom de la classe, puis déclarez entre accolades le(s) style(s) à appliquer. +To designate that a style should be applied only to objects of a distinct type, specify the type followed by "." and the name of the class, then in curly braces, declare the style(s) to apply. ``` text.center { @@ -109,20 +109,20 @@ text.center { } ``` -Dans la description du formulaire 4D, vous associez un nom de classe à un objet à l'aide de l'attribut `class`. Cet attribut contient un ou plusieurs noms de "class", séparés par un espace : +In the 4D form description, you associate a class name to an object using the `class` attribute. This attribute contains one or several class names, separated by a space character: ``` class: "okButtons important" ``` -### Tous les objets +### All Objects -Le caractère "*" correspond au **sélecteur universel** CSS et indique que le style qui suit sera appliqué à tous les objets du formulaire. +Corresponding to the CSS **universal selector**, the "*" character indicates that the following style will be applied to all objects on the form. -Indiquez qu'un style doit s'appliquer à tous les objets de formulaire avec le caractère "*", puis, entre accolades, déclarez le(s) style(s) à appliquer. +Designate that a style should apply to all form objects with the "*" character, then in curly braces, declare the style(s) to apply. -Dans l'exemple suivant, tous les objets auront un fond gris : +In the following example, all objects will have a gray fill: ``` * { @@ -131,24 +131,24 @@ Dans l'exemple suivant, tous les objets auront un fond gris : ``` -### Attributs spécifiques +### Specific Attribute -Les styles correspondent aux **sélecteurs d'attributs** et peuvent s'appliquer à tous les objets du formulaire avec un attribut spécifique. +Corresponding to the CSS **attribute selectors**, styles can be applied to all form objects with a specific attribute. -Spécifiez l'attribut entre parenthèses, puis entre accolades, déclarez le(s) style(s) à appliquer. +Specify the attribute within brackets, then in curly braces, declare the style(s) to apply. -#### Syntaxes prises en charge +#### Supported syntaxes -| Syntaxe | Description | -| -------------------------- | --------------------------------------------------------------------------------------------------------------------------- | -| [attribute] | les objets ayant un `attribute` | -| [attribute="valeur"] | les objets dont la valeur de l'`attribute` correspond à la "valeur" indiquée | -| [attribute~="valeur"] | les objets dont la valeur de l'`attribute` correspond à la "valeur" présente dans une liste de mots séparés par des espaces | -| [attribute|="valeur"] | les objets dont l'`attribute` contient une valeur qui commence par celle de "valeur" | +| Syntax | Description | +| ------------------------- | ------------------------------------------------------------------------------------------------------- | +| [attribute] | matches objects with the `attribute` | +| [attribute="value"] | matches objects with the `attribute` value containing exactly the specified "value" | +| [attribute~="value"] | matches objects with the `attribute` value containing the "value" among a space-separated list of words | +| [attribute|="value"] | matches objects with an `attribute` whose value starts with "value" | -#### Exemples +#### Examples -Tous les objets ayant l'attribut `borderStyle` auront des lignes violettes : +All objects with the `borderStyle` attribute will have purple lines: ``` [borderStyle] @@ -157,7 +157,7 @@ Tous les objets ayant l'attribut `borderStyle` auront des lignes violettes : } ``` -Tous les objets de type texte ayant un attribut text dont la valeur est "Hello" auront des lettres bleues : +All objects of the text type with a text attribute whose value is "Hello" will have blue letters: ``` @@ -167,7 +167,7 @@ text[text=Hello] } ``` -Tous les objets ayant un attribut text dont la valeur est "Hello" auront des traits bleus : +All objects with a text attribute whose value contains "Hello" will have blue lines: ``` [text~=Hello] @@ -177,7 +177,7 @@ Tous les objets ayant un attribut text dont la valeur est "Hello" auront des tra ``` -Tous les objets de type texte ayant un attribut text dont la valeur commence par "Hello" auront des lettres jaunes : +All objects of the text type with a text attribute whose value starts with "Hello" will have yellow letters: ``` text[text|=Hello] @@ -187,25 +187,25 @@ text[text|=Hello] ``` -## Déclarations de feuilles de style +## Style Sheet Declarations -La majorité des attributs d'objet formulaire peuvent être définis dans une feuille de style, à l'exception des attributs suivants : +The majority of form object attributes can be defined within a style sheet, except the following attributes: - "method" - "type" - - "type" - "class" - - choiceList, excludedList, labels, list, requiredList (type liste) + - "event" + - choiceList, excludedList, labels, list, requiredList (list type) -Les attributs d'objet formulaire peuvent être déclarés avec leur nom JSON en tant qu'attributs CSS (à l'exclusion des types d'objet, méthodes, événements et listes). Pour plus d'informations, voir la page **Formulaires dynamiques** dans le manuel du mode Développement. +Form object attributes can be declared with their JSON name as CSS attributes (not including object types, methods, events, and lists). For more information, see the **Dynamic Forms** page in the Design Reference. -### Mappage d'attributs +### Attribute Mapping -Les attributs répertoriés ci-dessous peuvent accepter le nom 4D ou le nom CSS. +The attributes listed below are able to accept either the 4D name or the CSS name. | 4D | CSS | | -------------- | ---------------- | | borderStyle | border-style | -| border-style | background-color | +| fill | background-color | | fontFamily | font-family | | fontSize | font-size | | fontStyle | font-style | @@ -214,70 +214,70 @@ Les attributs répertoriés ci-dessous peuvent accepter le nom 4D ou le nom CSS. | textAlign | text-align | | textDecoration | text-decoration | | verticalAlign | vertical-align | -> Les valeurs spécifiques à 4D (*ex :* "enfoncées") ne sont pas prises en charge lors de l'utilisation de noms d'attribut CSS. +> 4D-specific values (*e.g.*, "sunken") are not supported when using CSS attribute names. -### Valeurs d'attributs spécifiques +### Specific Attribute Values -- Pour les attributs `icon`, `picture`, et `customBackgroundPicture` qui prennent en charge un chemin vers une image, la syntaxe est la suivante : +- For `icon`, `picture`, and `customBackgroundPicture` attributes that support a path to an image, the syntax is: ``` -icon: url("/RESOURCES/Images/Buttons/edit.png"); /* chemin absolu */ -icon: url("edit.png"); /* chemin relatif vers le fichier du formulaire */ +icon: url("/RESOURCES/Images/Buttons/edit.png"); /* absolute path */ +icon: url("edit.png"); /* relative path to the form file */ ``` -- Pour `fill`, `stroke` , `alternateFill` , `horizontalLineStroke` et `verticalLineStroke`, trois syntaxes sont prises en charge : +- For `fill`, `stroke` , `alternateFill` , `horizontalLineStroke` and `verticalLineStroke`, three syntaxes are supported: - - nom de la couleur css : `fill: red;` - - valeur valeur hexadécimale : `fill: #FF0000;` - - fonction `rgb()` : `fill:rgb(255,0,0)` + - css color name: `fill: red;` + - hexa value: `fill: #FF0000;` + - the `rgb()` function: `fill:rgb(255,0,0)` -- Si une chaîne utilise des caractères interdits en CSS, vous pouvez l'entourer de guillemets simples ou doubles. Par exemple: - - une référence xliff : `tooltip: ":xliff:CommonMenuFile";` - - un datasource avec l'expression de champ : `dataSource: "[Table_1:1]ID:1";` +- If a string uses forbidden characters in CSS, you can surround the string with simple or double quotes. For example: + - a xliff reference: `tooltip: ":xliff:CommonMenuFile";` + - a datasource with a field expression: `dataSource: "[Table_1:1]ID:1";` -## Ordre de priorité +## Priority Order -Les projets 4D hiérarchisent les définitions de style en conflit, d'abord par la définition du formulaire, puis par les feuilles de style. +4D projects prioritizes conflicting style definitions first by the form definition, then by the style sheets. -### JSON vs Feuille de style +### JSON vs Style Sheet -Si un attribut est défini dans la description du formulaire JSON et dans une feuille de style, 4D utilisera la valeur du fichier JSON. +If an attribute is defined in the JSON form description and a style sheet, 4D will use the value in the JSON file. -Pour remplacer ce comportement, la valeur du style doit être suivie d'une déclaration `! Important`. +To override this behavior, the style value must be followed with an `!important` declaration. -**Exemple 1 :** +**Example 1:** -| Description du formulaire JSON | Feuille de style | 4D affiche | -| ------------------------------ | ---------------- | ---------- | -| `"text": "Button",` | `text: Edit;` | `"Button"` | +| JSON form description | Style Sheet | 4D displays | +| --------------------- | ------------- | ----------- | +| `"text": "Button",` | `text: Edit;` | `"Button"` | -**Exemple 2 :** +**Example 2:** -| Description du formulaire JSON | Feuille de style | 4D affiche | -| ------------------------------ | ------------------------ | ---------- | -| `"text": "Button",` | `text: Edit !important;` | `"Edit"` | +| JSON form description | Style Sheet | 4D displays | +| --------------------- | ------------------------ | ----------- | +| `"text": "Button",` | `text: Edit !important;` | `"Edit"` | -### Feuilles de style multiples +### Multiple Style Sheets -A l'exécution, 4D hiérarchise automatiquement les feuilles de style dans l'ordre suivant : +At runtime, 4D automatically prioritizes style sheets in the following order: -1. Le formulaire 4D chargera d’abord le fichier CSS par défaut `/SOURCES/styleSheets.css`. -2. Il chargera ensuite le fichier CSS pour la plate-forme courante `/SOURCES/styleSheets__mac.css` ou `/SOURCES/styleSheets_windows.css`. -3. S'il existe, il chargera alors un fichier CSS spécifique défini dans le formulaire JSON : +1. The 4D form will first load the default CSS file `/SOURCES/styleSheets.css`. +2. It will then load the CSS file for the current platform `/SOURCES/styleSheets_mac.css` or `/SOURCES/styleSheets_windows.css`. +3. If it exists, it will then load a specific CSS file defined in the JSON form: - * un fichier pour les deux plateformes : + * a file for both platforms: ``` "css": "" ``` - * ou une liste de fichiers pour les deux plateformes : + * or a list of files for both platforms: ``` "css": [ @@ -286,7 +286,7 @@ A l'exécution, 4D hiérarchise automatiquement les feuilles de style dans l'ord ], ``` - * ou une liste de fichiers par plateforme : + * or a list of files per platform: ``` "css": [ @@ -295,7 +295,7 @@ A l'exécution, 4D hiérarchise automatiquement les feuilles de style dans l'ord ], ``` -> Les chemins de fichiers peuvent être relatifs ou absolus. * Les chemins relatifs sont résolus par rapport au fichier de description de formulaire JSON. * Pour des raisons de sécurité, seuls les chemins de système de fichiers (filesystem) sont acceptés pour les chemins absolus. (*ex :*, "/RESOURCES", "/DATA") +> Filepaths can be relative or absolute. * Relative paths are resolved relative to the JSON form description file. * For security reasons, only filesystem paths are accepted for absolute paths. (*e.g.*, "/RESOURCES", "/DATA") @@ -304,16 +304,16 @@ A l'exécution, 4D hiérarchise automatiquement les feuilles de style dans l'ord -## Création ou modification d'une feuille de style +## Creating or Editing Style Sheets -Vous créez des feuilles de styles à partir d'un éditeur de feuilles de styles de votre choix, en sauvegardant le fichier sous une extension ".css" dans le dossier "/SOURCES" du projet. +You can create style sheets using your preferred text editor and saving the file with a ".css" extension in the project's "/SOURCES" folder. -La Boîte à Outils fournit une page **Feuilles de style** sous forme de raccourci pour créer et modifier l'une des trois feuilles de style nommées en fonction de la plateforme. +The 4D Tool Box provides a **Style Sheets** page as a shortcut option to create and edit one of three platform-specific named style sheets. -1. Ouvrez la page **Styles** en choisissant la **Boîte à outils > Styles ** dans le menu Développement ou en cliquant sur l'icône **Boîte à outils** dans la barre d'outils de l'éditeur de formulaire. +1. Open the **Style Sheets** page by choosing the **Tool Box > Style Sheet** from the Design menu or click on the **Tool Box** icon in the Form Editor toolbar. ![](assets/en/FormEditor/stylesheets.png) -2. Choisissez le type de feuille de style que vous souhaitez créer et cliquez sur le bouton **Créer** ou **Editer** : ![](assets/en/FormEditor/createButton.png) +2. Select the type of style sheet to create and click on the **Create** or **Edit** button: ![](assets/en/FormEditor/createButton.png) -3. La feuille de style s'ouvrira dans votre éditeur de texte par défaut. +3. The style sheet will open in your default text editor. From 765c8656bab4e9c3a9f9ec23f0176f1ef22352a9 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:23:45 +0100 Subject: [PATCH 196/260] New translations properties_Action.md (French) --- .../fr/FormEditor/properties_Action.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/website/translated_docs/fr/FormEditor/properties_Action.md b/website/translated_docs/fr/FormEditor/properties_Action.md index b53c111e425c8b..88c6e0f0a7d513 100644 --- a/website/translated_docs/fr/FormEditor/properties_Action.md +++ b/website/translated_docs/fr/FormEditor/properties_Action.md @@ -4,13 +4,13 @@ title: Action --- -## Méthode +## Method -Reference of a method attached to the form. Vous pouvez utiliser une méthode formulaire pour gérer les données et les objets, mais il est généralement plus simple et plus efficace d'utiliser une méthode objet dans ces cas de figure. See [Specialized methods](Concepts/methods.md#specialized-methods). +Reference of a method attached to the form. You can use a form method to manage data and objects, but it is generally simpler and more efficient to use an object method for these purposes. See [Specialized methods](Concepts/methods.md#specialized-methods). You do not call a form method—4D calls it automatically when an event involves the form to which the method is attached. -Plusieurs types de références de méthode sont pris en charge : +Several types of method references are supported: - a standard project method file path, i.e. that uses the following pattern: `method.4dm` @@ -23,9 +23,9 @@ Plusieurs types de références de méthode sont pris en charge : `/RESOURCES/Forms/FormMethod.4dm` In this case, 4D does not provide automatic support for object operations. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------ | --------------- | ---------------------------------------------------------------- | -| method | Texte | Form method standard or custom file path, or project method name | +| Name | Data Type | Possible Values | +| ------ | --------- | ---------------------------------------------------------------- | +| method | text | Form method standard or custom file path, or project method name | From 5aecfd51f7b43284db5c48d0fc9eda7d4f0a3aa8 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:23:48 +0100 Subject: [PATCH 197/260] New translations properties_FormProperties.md (French) --- .../FormEditor/properties_FormProperties.md | 68 ++++++++++--------- 1 file changed, 35 insertions(+), 33 deletions(-) diff --git a/website/translated_docs/fr/FormEditor/properties_FormProperties.md b/website/translated_docs/fr/FormEditor/properties_FormProperties.md index f3945e027c03b8..2654606a481b50 100644 --- a/website/translated_docs/fr/FormEditor/properties_FormProperties.md +++ b/website/translated_docs/fr/FormEditor/properties_FormProperties.md @@ -1,6 +1,6 @@ --- id: propertiesForm -title: Propriétés des formulaires +title: Form Properties --- --- @@ -15,11 +15,11 @@ Each form has is made of at least two pages: For more information, please refer to [Form pages](forms.md#form-pages). -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ----- | --------------- | ------------------------------------------------------------------------ | -| pages | collection | Collection of pages (each page is an object, page 0 is the first element | +| Name | Data Type | Possible Values | +| ----- | ---------- | ------------------------------------------------------------------------ | +| pages | collection | Collection of pages (each page is an object, page 0 is the first element | --- @@ -29,7 +29,7 @@ For more information, please refer to [Form pages](forms.md#form-pages). This property is the name of the form itself and is used to refer to the form by name using the 4D language. The form name must comply with the [rules specified for identifiers](Concepts/identifiers.md) in 4D. -#### Grammaire JSON +#### JSON Grammar The form name is defined by the name of the folder that contains the form.4Dform file. See [project architecture](Project/architecture.md#sources-folder) for more information. @@ -51,18 +51,18 @@ Supported types depend on the form category: | Form Type | JSON grammar | Description | Supported with | | ------------------------ | ---------------- | ------------------------------------------------------------- | --------------------------- | -| Formulaire détaillé | detailScreen | A display form for data entry and modification | Project forms - Table forms | +| Detail Form | detailScreen | A display form for data entry and modification | Project forms - Table forms | | Detail Form for Printing | detailPrinter | A printed report with one page per record, such as an invoice | Project forms - Table forms | | List Form | listScreen | A form for listing records on the screen | Table forms | | List Form for Printing | listPrinter | A printed report that list records | Table forms | -| Aucun | *no destination* | A form with no specific feature | Project forms - Table forms | +| None | *no destination* | A form with no specific feature | Project forms - Table forms | -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ----------- | --------------- | ------------------------------------------------------------ | -| destination | string | "detailScreen", "listScreen", "detailPrinter", "listPrinter" | +| Name | Data Type | Possible Values | +| ----------- | --------- | ------------------------------------------------------------ | +| destination | string | "detailScreen", "listScreen", "detailPrinter", "listPrinter" | --- @@ -75,11 +75,11 @@ To inherit from a table form, set the table in the [Inherited Form Table](#inher To remove inheritance, select **\** in the Property List (or " " in JSON). -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------------- | --------------- | ------------------------------------------------------------------------------------------------------------------ | -| inheritedForm | string | Name of table or project form OR a POSIX path to a .json file describing the form OR an object describing the form | +| Name | Data Type | Possible Values | +| ------------- | --------- | ------------------------------------------------------------------------------------------------------------------ | +| inheritedForm | string | Name of table or project form OR a POSIX path to a .json file describing the form OR an object describing the form | --- @@ -91,9 +91,9 @@ This property specifies the database table from which to [inherit a form](forms. Set to **\** in the Property List (or " " in JSON) to inherited from a project form. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | +| Name | Data Type | Possible Values | | ------------------ | ---------------- | -------------------------- | | inheritedFormTable | string or number | table name or table number | @@ -108,11 +108,11 @@ Only project forms can be specified as published subforms. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------ | --------------- | ----------------- | -| shared | boolean | true, false | +| Name | Data Type | Possible Values | +| ------ | --------- | --------------- | +| shared | boolean | true, false | --- @@ -123,17 +123,17 @@ When the option is used, if the window is opened using the `Open form window` co * the current page, * the position, size and visibility of each form object (including the size and visibility of list box columns). -> > > This option does not take into account objects generated using the `OBJECT DUPLICATE` command. In order for a user to recover their environment when using this command, the developer must repeat the sequence of creation, definition and positioning of the objects. +> This option does not take into account objects generated using the `OBJECT DUPLICATE` command. In order for a user to recover their environment when using this command, the developer must repeat the sequence of creation, definition and positioning of the objects. When this option is selected, the [Save Value](FormObjects/properties_Object.md#save-value) option is available for certain objects. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ---------------- | --------------- | ----------------- | -| memorizeGeometry | boolean | true, false | +| Name | Data Type | Possible Values | +| ---------------- | --------- | --------------- | +| memorizeGeometry | boolean | true, false | -#### Voir également +#### See also [**Save Value**](FormObjects/properties_Object.md#save-value) @@ -146,15 +146,17 @@ The window title is used when the form is opened using the `Open form window` an You can use dynamic references to set the window titles for forms, *i.e.*: * A standard XLIFF reference stored in the Resources folder. -* A table or field label: The syntax to apply is or +* A table or field label: The syntax to apply is or + + . * A variable or a field: The syntax to apply is \ or <[TableName]FieldName>. The current value of the field or variable will be displayed in the window title. > The number of characters for a window title is limited to 31. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ----------- | --------------- | ------------------------------------------------------ | -| windowTitle | string | The name of the window as plain text or as a reference | +| Name | Data Type | Possible Values | +| ----------- | --------- | ------------------------------------------------------ | +| windowTitle | string | The name of the window as plain text or as a reference | From 1387d3d58ad0165c413549764ac5259dff14fa53 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:23:49 +0100 Subject: [PATCH 198/260] New translations onUrlResourceLoading.md (French) --- website/translated_docs/fr/Events/onUrlResourceLoading.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/translated_docs/fr/Events/onUrlResourceLoading.md b/website/translated_docs/fr/Events/onUrlResourceLoading.md index 9724229d7f807c..529bff80d522be 100644 --- a/website/translated_docs/fr/Events/onUrlResourceLoading.md +++ b/website/translated_docs/fr/Events/onUrlResourceLoading.md @@ -3,9 +3,9 @@ id: onUrlResourceLoading title: On URL Resource Loading --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ------------------------------------------- | ---------------------------------------- | -| 48 | [Zone Web](FormObjects/webArea_overview.md) | A new resource is loaded in the Web area | +| 48 | [Web Area](FormObjects/webArea_overview.md) | A new resource is loaded in the Web area | ## Description @@ -15,5 +15,5 @@ This event is generated each time a new resource (picture, frame, etc.) is loade The [Progression](FormObjects/properties_WebArea.md#progression) variable associated with the area lets you find out the current state of the loading. -### Voir également +### See also [`On Open External Link`](onOpenExternalLink.md) \ No newline at end of file From b82fb7aeb79a08ceeedfd16d9dbac836d3936597 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:23:51 +0100 Subject: [PATCH 199/260] New translations pictures.md (French) --- .../translated_docs/fr/FormEditor/pictures.md | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/website/translated_docs/fr/FormEditor/pictures.md b/website/translated_docs/fr/FormEditor/pictures.md index 980b27349da5df..a3e434869c580f 100644 --- a/website/translated_docs/fr/FormEditor/pictures.md +++ b/website/translated_docs/fr/FormEditor/pictures.md @@ -3,28 +3,28 @@ id: pictures title: Images --- -## Formats natifs pris en charge +## Native Formats Supported -4D intègre une gestion native des images. Cela signifie que les images sont affichées et stockées dans leur format d’origine, sans interprétation dans 4D. Les spécificités des différents formats (ombrages, zones transparentes...) sont conservées en cas de copier-coller et affichées sans altération. Ce support natif est valable pour toutes les images stockées dans les formulaires 4D : [images statiques](FormObjects/staticPicture.md) collées en mode Développement, images collées dans des [objets de saisie](FormObjects/input_overview.md) à l'exécution, etc. +4D integrates native management of picture formats. This means that pictures will be displayed and stored in their original format, without any interpretation in 4D. The specific features of the different formats (shading, transparent areas, etc.) will be retained when they are copied and pasted, and will be displayed without alteration. This native support is valid for all pictures stored in 4D forms: [static pictures](FormObjects/staticPicture.md) pasted in Design mode, pictures pasted into [inputs objects](FormObjects/input_overview.md) at runtime, etc. -Les formats d'image les plus courants sont pris en charge par les deux plates-formes : jpeg, gif, png, tiff, bmp, etc. Sous macOS, le format pdf est également disponible pour l'encodage et le décodage. +The most common picture formats are supported of both platforms: .jpeg, .gif, .png, .tiff, .bmp, etc. On macOS, the .pdf format is also available for encoding and decoding. -> La liste complète des formats pris en charge varie en fonction du système d’exploitation et des codecs personnalisés installés sur les postes. Pour savoir quels sont codecs disponibles, vous devez utiliser la commande `PICTURE CODEC LIST` (voir aussi la description du [type de données image](Concepts/dt_picture.md)). +> The full list of supported formats varies according to the operating system and the custom codecs that are installed on the machines. To find out which codecs are available, you must use the `PICTURE CODEC LIST` command (see also the [picture data type](Concepts/dt_picture.md) description). -### Format d'image non disponible +### Unavailable picture format -Une icône spécifique est affichée pour les images stockées dans un format non disponible sur le poste. L'extension du format manquant est inscrite en bas de l'icône : +A specific icon is displayed for pictures saved in a format that is not available on the machine. The extension of the missing format is shown at the bottom of the icon: ![](assets/en/FormEditor/picNoFormat.png) -L'icône est automatiquement utilisée partout où l'image doit être affichée : +The icon is automatically used wherever the picture is meant to be displayed: ![](assets/en/FormEditor/picNoFormat2.png) -Cette icône indique que l'image ne peut être ni affichée ni manipulée localement -- mais elle peut être stockée sans altération pour être affichée sur une autre machine. C'est le cas, par exemple, pour les images PDF sous Windows ou les images au format PICT. +This icon indicates that the picture cannot be displayed or manipulated locally -- but it can be saved without alteration so that it can be displayed on other machines. This is the case, for example, for PDF pictures on Windows, or for PICT format pictures. ## High Resolution Pictures @@ -37,10 +37,10 @@ High resolution displays have a higher pixel density than traditional standard d When using high resolution pictures, you can specify the scale factor by adding "@nx" in the picture's name (where *n* designates the scale factor). In the table below, you can see that the scale factor is indicated in the names of the high resolution pictures, *circle@2x.png* and *circle@3x.png*. -| Display Type | Facteur d'échelle | Exemple | +| Display Type | Scale Factor | Example | | ------------------- | ---------------------------------------------- | ------------------------------------------------------------------------ | -| Résolution standard | 1:1 pixel density. | **1x**
    ![](assets/en/FormEditor/pictureScale1.png) *circle.png* | -| Haute résolution | Pixel density increased by a factor of 2 or 3. |
    2x3x
    ![](assets/en/FormEditor/pictureScale2.png)*circle@2x.png*![](assets/en/FormEditor/pictureScale3.png)
    *circle@3x.png*
    | +| Standard Resolution | 1:1 pixel density. | **1x**
    ![](assets/en/FormEditor/pictureScale1.png) *circle.png* | +| High Resolution | Pixel density increased by a factor of 2 or 3. |
    2x3x
    ![](assets/en/FormEditor/pictureScale2.png)*circle@2x.png*![](assets/en/FormEditor/pictureScale3.png)
    *circle@3x.png*
    | @@ -50,7 +50,7 @@ High resolution pictures with the @nx convention can be used in the following ob * [Buttons](FormObjects/button_overview.md)/[radio](FormObjects/radio_overview.md)/[check boxes](FormObjects/checkbox_overview.md) * [Picture buttons](FormObjects/pictureButton_overview.md)/[Picture pop-ups](FormObjects/picturePopupMenu_overview.md) * [Tab controls](FormObjects/tabControl.md) -* [En-têtes de list box](FormObjects/listbox_overview.md#list-box-headers) +* [List box headers](FormObjects/listbox_overview.md#list-box-headers) * [Menu icons](Menus/properties.md#item-icon) @@ -64,7 +64,7 @@ High resolution pictures with the @nx convention can be used in the following ob While 4D automatically prioritizes the highest resolution, there are, however, some behavioral differences depending on screen and image dpi*(\*)*, and picture format: -| Opération | Behavior | +| Operation | Behavior | | ---------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ | | Drop or Paste | If the picture has:

    • **72dpi or 96dpi** - The picture is "[Center](FormObjects/properties_Picture.md#center--truncated-non-centered)" formatted and the object containing the picture has the same number of pixels.
    • **Other dpi** - The picture is "[Scaled to fit](FormObjects/properties_Picture.md#scaled-to-fit)" formatted and the object containing the picture is equal to (picture's number of pixels * screen dpi) / (picture's dpi)
    • **No dpi** - The picture is "[Scaled to fit](FormObjects/properties_Picture.md#scaled-to-fit)" formatted.
    • | | [Automatic Size](https://doc.4d.com/4Dv18/4D/18/Setting-object-display-properties.300-4575725.en.html#148057) (Form Editor context menu) | If the picture's display format is:
      • **[Scaled](FormObjects/properties_Picture.md#scaled-to-fit)** - The object containing the picture is resized according to (picture's number of pixels * screen dpi) / (picture's dpi)
      • **Not scaled** - The object containing the picture has the same number of pixels as the picture.

      | @@ -75,10 +75,10 @@ While 4D automatically prioritizes the highest resolution, there are, however, -## Coordonnées de la souris dans une image +## Mouse Coordinates in a Picture -4D vous permet de récupérer les coordonnées locales de la souris dans un [objet de saisie](FormObjects/input_overview.md) associé à une [expression d'image](FormObjects/properties_Object.md#expression-type), en cas de clic ou de survol, même si un défilement ou un zoom a été appliqué à l'image. Ce mécanisme, proche de celui d'une image map, peut être utilisé par exemple pour gérer les barres de bouton défilables ou bien l'interface de logiciels de cartographie. +4D lets you retrieve the local coordinates of the mouse in an [input object](FormObjects/input_overview.md) associated with a [picture expression](FormObjects/properties_Object.md#expression-type), in case of a click or a hovering, even if a scroll or zoom has been applied to the picture. This mechanism, similar to that of a picture map, can be used, for example, to handle scrollable button bars or the interface of cartography software. -Les coordonnées sont retournées dans les [Variables système](https://doc.4d.com/4Dv18/4D/18/System-Variables.300-4505547.en.html) *MouseX* et *MouseY*. Les coordonnées sont exprimées en pixels par rapport à l'angle supérieur gauche de l'image (0,0). Lorsque la souris se trouve en dehors du système de coordonnées de l'image, la valeur -1 est retournée dans *MouseX* et *MouseY*. +The coordinates are returned in the *MouseX* and *MouseY* [System Variables](https://doc.4d.com/4Dv18/4D/18/System-Variables.300-4505547.en.html). The coordinates are expressed in pixels with respect to the top left corner of the picture (0,0). If the mouse is outside of the picture coordinates system, -1 is returned in *MouseX* and *MouseY*. You can get the value of these variables as part of the [`On Clicked`](Events/onClicked.md), [`On Double Clicked`](Events/onDoubleClicked.md), [`On Mouse up`](Events/onMouseUp.md), [`On Mouse Enter`](Events/onMouseEnter.md), or [`On Mouse Move`](Events/onMouseMove.md) form events. From 673b3e90e997eee83e8ba11af9dc6463e9bcdbd4 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:23:53 +0100 Subject: [PATCH 200/260] New translations objectLibrary.md (French) --- .../fr/FormEditor/objectLibrary.md | 90 +++++++++---------- 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/website/translated_docs/fr/FormEditor/objectLibrary.md b/website/translated_docs/fr/FormEditor/objectLibrary.md index c08eb96cd4ea89..b14e83bf8e7c38 100644 --- a/website/translated_docs/fr/FormEditor/objectLibrary.md +++ b/website/translated_docs/fr/FormEditor/objectLibrary.md @@ -5,101 +5,101 @@ title: Bibliothèques d'objets ## Aperçu -Vous pouvez utiliser des bibliothèques d'objets dans vos formulaires. Une bibliothèque d'objets propose une collection d'objets préconfigurés pouvant être utilisés dans vos formulaires par simple copier-coller ou glisser-déposer. +You can use object librairies in your forms. An object library offers a collection of preconfigured objects that can be used in your forms by simple or copy-paste or drag-and-drop. -4D propose deux types de bibliothèques d'objets : +4D proposes two kinds of object libraries: -- une bibliothèque d'objets standard préconfigurée, standard, disponible dans tous vos projets. -- des bibliothèques d’objets personnalisées, que vous pouvez utiliser pour stocker vos objets formulaires favoris ou des formulaires projets complets. +- a standard, preconfigured object library, available in all your projects. +- custom object librairies, that you can use to store your favorite form objects or full project forms. -## Utilisation de la bibliothèque d'objets standard +## Using the standard object library -La bibliothèque d'objets standard est disponible dans l'éditeur de formulaire : cliquez sur le dernier bouton de la barre d'outils : +The standard object library is available from the Form editor: click on the last button of the toolbar: ![](assets/en/FormEditor/library1.png) -La bibliothèque est affichée dans une fenêtre séparée : +The library is displayed in a separate window: ![](assets/en/FormEditor/library2.png) -La fenêtre présente les caractéristiques principales suivantes : +The window has the following main features: -- Zone d'aperçu avec des messages d'aide : la zone centrale affiche un aperçu de chaque objet. Vous pouvez survoler un objet pour obtenir des informations sur celui-ci dans un message d'aide. -- Vous pouvez filtrer le contenu de la fenêtre en utilisant le menu **Catégories** : ![](assets/en/FormEditor/library3.png) -- Pour utiliser un objet de la bibliothèque dans votre formulaire, vous pouvez soit : - - faire un clic droit sur un objet et sélectionnez **Copier** dans le menu contextuel - - ou glisser-déposer l'objet de la bibliothèque. L'objet est ensuite ajouté au formulaire. +- Preview area with tips: The central area displays a preview of each object. You can hover on an object to obtain information about the object in a tip. +- You can filter the window contents by using the **Categories** menu: ![](assets/en/FormEditor/library3.png) +- To use an object from the library to your form, you can either: + - right-click on an object and select **Copy** in the contextual menu + - or drag and drop the object from the library The object is then added to the form. -Cette bibliothèque est en lecture seule. Si vous souhaitez modifier des objets par défaut ou créer votre propre bibliothèque d'objets préconfigurés ou vos formulaires projets, vous devez créer une bibliothèque d'objets personnalisée (voir ci-dessous). +This library is read-only. If you want to edit default objects or create your own library of preconfigured objects or project forms, you need to create a custom object library (see below). -Tous les objets proposés dans la bibliothèque d'objets standard sont décrits dans [cette section sur doc.4d.com](https://doc.4d.com/4Dv17R6/4D/17-R6/Library-objects.200-4354586.en.html). +All objects proposed in the standard object library are described on [this section on doc.4d.com](https://doc.4d.com/4Dv17R6/4D/17-R6/Library-objects.200-4354586.en.html). -## Créer et utiliser des bibliothèques d'objets personnalisées +## Creating and using custom object libraries -4D permet de créer et d’utiliser des bibliothèques d’objets personnalisées. Une bibliothèque d'objets personnalisés est un projet 4D dans lequel vous pouvez stocker vos objets favoris (boutons, textes, images, etc.). Vous pouvez ensuite réutiliser ces objets sous différentes formes et dans différents projets. +You can create and use custom object libraries in 4D. A custom object library is a 4D project where you can store your favorite objects (buttons, texts, pictures, etc.) You can then reuse these objects in different forms and different projects. -Les objets sont stockés avec toutes leurs propriétés, y compris leurs méthodes objet. Les bibliothèques sont constituées et utilisées par simple glisser-déposer ou copier-coller. +Objects are stored with all their properties, including their object methods. Libraries are put together and used by simple drag-and-drop or copy-paste operations. -A l’aide des bibliothèques d'objets, vous pouvez constituer des fonds d’objets de formulaires regroupés par familles graphiques, par fonctionnalités, etc. +Using libraries, you can build form object backgrounds grouped by graphic families, by behavior, etc. -### Créer une bibliothèque d’objets +### Creating an object library -Pour créer une bibliothèque d’objets, sélectionnez la commande **Nouveau > Bibliothèque d’objets...** dans le menu **Fichier** ou dans la barre d’outils de 4D. Une boîte de dialogue standard d’enregistrement de fichiers apparaît, vous permettant de choisir le nom et l’emplacement de la bibliothèque d’objets. +To create an object library, select **New>Object Library...** from the 4D **File** menu or tool bar. A standard save file dialog box appears, which allows you to choose the name and the location of the object library. -Lorsque vous validez la boîte de dialogue, 4D crée sur disque une nouvelle bibliothèque d’objets et affiche sa fenêtre (vide par défaut). +Once you validate the dialog box, 4D creates a new object library on your disk and displays its window (empty by default). ![](assets/en/FormEditor/library4.png) -Vous pouvez créer autant de bibliothèques que vous voulez par projet. Une bibliothèque créée et construite sous macOS peut être utilisée sous Windows et inversement. +You can create as many libraries as desired per project. A library created and built under macOS can be used under Windows and vice-versa. -### Ouvrir une bibliothèque d’objets +### Opening an object library A given object library can only be opened by one project at a time. However, several different libraries can be opened in the same project. -Pour ouvrir une bibliothèque d’objets personnalisée, sélectionnez la commande **Ouvrir>Bibliothèque d’objets...** dans le menu **Fichier** ou la barre d’outils de 4D. Une boîte de dialogue standard d’ouverture de fichiers apparaît, vous permettant de désigner la bibliothèque d’objets à ouvrir. Vous pouvez sélectionner les types de fichier suivants : +To open a custom object library, select **Open>Object Library...** command in the 4D **File** menu or tool bar. A standard open file dialog box appears, which allows you to select the object library to open. You can select the following file types: - **.4dproject** - **.4dz** -Les bibliothèques d’objets personnalisées sont des projets 4D classiques. Seules les parties suivantes d'un projet sont exposées lorsqu'il est ouvert en tant que bibliothèque : +In fact, custom object libraries are regular 4D projects. Only the following parts of a project are exposed when it is opened as library: -- formulaires projet +- project forms - form pages 1 -### Construire une bibliothèque d’objets +### Building an object library -Les objets sont placés dans une bibliothèque d’objets par glisser-déposer ou couper/copier-coller. Ils peuvent provenir soit d’un formulaire soit d’une autre bibliothèque d’objets (y compris la [bibliothèque préconfigurée](#using-the-standard-object-library)). Aucun lien n’est conservé avec l’objet d’origine : si celui-ci est modifié, la modification ne sera pas reportée dans l’objet copié. +Objects are placed in an object library using drag-and-drop or a cut-copy-paste operation. They can come from either a form or another object library (including the [standard library](#using-the-standard-object-library)). No link is kept with the original object: if the original is modified, the copied object is not affected. -> Pour que vous puissiez effectuer des glisser-déposer d’objets depuis les formulaires vers des bibliothèques, vous devez sélectionner l’option de déplacement **Commencer un glisser-déposer** dans les Préférences de 4D. +> In order to be able to drag and drop objects from forms to object libraries, you must make sure the **Start drag and drop** option in the 4D Preferences is selected. -Les principales opérations sont accessibles via le menu contextuel ou le menu d'options de la fenêtre : +Basic operations are available in the context menu or the options menu of the window: ![](assets/en/FormEditor/library5.png) -- **Couper ** ou **Copier** vers le conteneur de données -- **Coller** un objet à partir du conteneur de données -- **Effacer** - supprime l'objet de la bibliothèque -- **Renommer** - une boite de dialogue apparait pour vous permettre de renommer l'élément. A noter que les noms d'objets doivent être uniques dans une bibliothèque. +- **Cut** or **Copy** to the pasteboard +- **Paste** an object from the pasteboard +- **Clear** - deletes the object from the library +- **Rename** - a dialog box appears allowing you to rename the item. Note that object names must be unique in a library. -Vous pouvez placer dans la bibliothèque des objets individuels (y compris des sous-formulaires) ou des ensembles d’objets. Chaque objet ou ensemble d’objets est regroupé en un seul élément : +You can place individual objects (including subforms) or sets of objects in an object library. Each object or set is grouped into a single item: ![](assets/en/FormEditor/library6.png) -Une bibliothèque d’objets peut contenir jusqu’à 32 000 éléments. +An object library can contain up to 32,000 items. -Les objets sont copiés avec toutes leurs propriétés, graphiques et fonctionnelles, y compris leurs méthodes. Elles sont intégralement conservées lorsque l’élément est recopié dans un formulaire ou une autre bibliothèque. +Objects are copied with all their properties, both graphic and functional, including their methods. These properties are kept in full when the item is copied into a form or another library. -#### Objets dépendants -Le copier-coller ou le glisser-déposer de certains objets dans la bibliothèque entraîne également la copie des objets dépendants. Par exemple, la copie d’un bouton entraînera obligatoirement la copie de la méthode objet qui lui est éventuellement attachée. Ces objets dépendants ne peuvent, quant à eux, être directement copiés ou glissés-déposés. +#### Dependent objects +Using copy-paste or drag-and-drop with certain library objects also causes their dependent objects to be copied. For example, copying a button will cause the object method that may be attached to be copied as well. These dependent objects cannot be copied or dragged and dropped directly. -Voici la liste des objets dépendants qui seront collés dans la bibliothèque en même temps que l’objet principal qui les utilise (le cas échéant) : +The following is a list of dependent objects that will be pasted into the library at the same time as the main object that uses them (when applicable): -- Enumérations -- Formats/Filtres +- Lists +- Formats/Filters - Images -- Messages d’aide (liés à un champ) -- Méthodes objet +- Help Tips (linked to a field) +- Object methods From e4297930d92cec1197f7e433a07f01fbfde6cb7c Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:23:55 +0100 Subject: [PATCH 201/260] New translations forms.md (French) --- .../translated_docs/fr/FormEditor/forms.md | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/website/translated_docs/fr/FormEditor/forms.md b/website/translated_docs/fr/FormEditor/forms.md index aad2a98c7325eb..71b2849175e015 100644 --- a/website/translated_docs/fr/FormEditor/forms.md +++ b/website/translated_docs/fr/FormEditor/forms.md @@ -21,7 +21,7 @@ You can add or modify 4D forms using the following elements: - **4D Developer interface:** Create new forms from the **File** menu or the **Explorer** window. - **Form Editor**: Modify your forms using the **[Form Editor](FormEditor/formEditor.md)**. -- **JSON code:** Create and design your forms using JSON and save the form files at the [appropriate location](Project/architecture.md#sources-folder). Exemple : +- **JSON code:** Create and design your forms using JSON and save the form files at the [appropriate location](Project/architecture.md#sources-folder). Example: ``` { @@ -81,7 +81,7 @@ There are two categories of forms: Typically, you select the form category when you create the form, but you can change it afterwards. -## Pages formulaire +## Form pages Each form has is made of at least two pages: @@ -92,7 +92,7 @@ You can create multiple pages for an input form. If you have more fields or vari - Place the most important information on the first page and less important information on other pages. - Organize each topic on its own page. -- Réduisez ou éliminez le défilement pendant la saisie des données. +- Reduce or eliminate scrolling during data entry. - Provide space around the form elements for an attractive screen design. Multiple pages are a convenience used for input forms only. They are not for printed output. When a multi-page form is printed, only the first page is printed. @@ -102,35 +102,35 @@ There are no restrictions on the number of pages a form can have. The same field A multi-page form has both a background page and several display pages. Objects that are placed on the background page may be visible on all display pages, but can be selected and edited only on the background page. In multi-page forms, you should put your button palette on the background page. You also need to include one or more objects on the background page that provide page navigation tools for the user. -## Formulaires hérités +## Inherited Forms 4D forms can use and be used as "inherited forms," meaning that all of the objects from *Form A* can be used in *Form B*. In this case, *Form B* "inherits" the objects from *Form A*. -Les références à un formulaire hérité est toujours active : si un élément d'un formulaire hérité est modifié (par exemple le style des boutons), tous les formulaires qui l’utilisent seront automatiquement modifiés. +References to an inherited form are always active: if an element of an inherited form is modified (button styles, for example), all forms using this element will automatically be modified. -Tous les formulaires (formulaires table et formulaires projet) peuvent être désignés comme un formulaire hérité. Cependant, les éléments qu'ils contiennent doivent être compatibles avec une utilisation dans différentes tables de base de données. +All forms (table forms and project forms) can be designated as an inherited form. However, the elements they contain must be compatible with use in different database tables. -A l’exécution du formulaire, les objets sont chargés et combinés dans l’ordre suivant : +When a form is executed, the objects are loaded and combined in the following order: -1. Page zéro du formulaire hérité -2. Page 1 du formulaire hérité -3. Page zéro du formulaire ouvert -4. Page courante du formulaire ouvert. +1. Page zero of the inherited form +2. Page 1 of the inherited form +3. Page zero of the open form +4. Current page of the open form. -Cet ordre détermine l’ordre de saisie des objets dans le formulaire. +This order determines the default entry order of objects in the form. -> Seules les pages 0 et 1 du formulaire hérité peuvent apparaître dans les autres formulaires. +> Only pages 0 and 1 of an inherited form can appear in other forms. -Les propriétés ainsi que la méthode d’un formulaire ne sont pas prises en compte lorsque celui-ci est utilisé comme formulaire hérité. En revanche, les méthodes des objets qu’il contient sont appelées. +The properties and method of a form are not considered when that form is used as an inherited form. On the other hand, the methods of objects that it contains are called. -Pour définir un formulaire hérité, les propriétés de [Inherited Form Name](properties_FormProperties.md#inherited-form-name) et [Inherited Form Table](properties_FormProperties.md#inherited-form-table) (pour les formulaires table) doivent être définies dans le formulaire qui héritera de quelque chose issue d'un autre formulaire. +To define an inherited form, the [Inherited Form Name](properties_FormProperties.md#inherited-form-name) and [Inherited Form Table](properties_FormProperties.md#inherited-form-table) (for table form) properties must be defined in the form that will inherit something from another form. A form can inherit from a project form, by setting the [Inherited Form Table](properties_FormProperties.md#inherited-form-table) property to **\** in the Property List (or " " in JSON). To stop inheriting a form, select **\** in the Property List (or " " in JSON) for the [Inherited Form Name](properties_FormProperties.md#inherited-form-name) property. -> Il est possible de définir un formulaire hérité dans un formulaire qui servira à son tour de formulaire hérité pour un troisième formulaire. La combinaison des objets s’effectue alors de manière récursive. 4D détecte les boucles récursives (par exemple si le formulaire [table1]form1 est défini comme formulaire hérité de [table1]form1, c’est-à-dire de lui-même) et interrompt le chaînage des formulaires. +> It is possible to define an inherited form in a form that will eventually be used as an inherited form for a third form. The combining of objects takes place in a recursive manner. 4D detects recursive loops (for example, if form [table1]form1 is defined as the inherited form of [table1]form1, in other words, itself) and interrupts the form chain. -## Propriétés prises en charge +## Supported Properties [Associated Menu Bar](properties_Menu.md#associated-menu-bar) - [Fixed Height](properties_WindowSize.md#fixed-height) - [Fixed Width](properties_WindowSize.md#fixed-width) - [Form Break](properties_Markers.md#form-break) - [Form Detail](properties_Markers.md#form-detail) - [Form Footer](properties_Markers.md#form-footer) - [Form Header](properties_Markers.md#form-header) - [Form Name](properties_FormProperties.md#form-name) - [Form Type](properties_FormProperties.md#form-type) - [Inherited Form Name](properties_FormProperties.md#inherited-form-name) - [Inherited Form Table](properties_FormProperties.md#inherited-form-table) - [Maximum Height](properties_WindowSize.md#maximum-height-minimum-height) - [Maximum Width](properties_WindowSize.md#maximum-width-minimum-width) - [Method](properties_Action.md#method) - [Minimum Height](properties_WindowSize.md#maximum-height-minimum-height) - [Minimum Width](properties_WindowSize.md#maximum-width-minimum-width) - [Pages](properties_FormProperties.md#pages) - [Print Settings](properties_Print.md#settings) - [Published as Subform](properties_FormProperties.md#published-as-subform) - [Save Geometry](properties_FormProperties.md#save-geometry) - [Window Title](properties_FormProperties.md#window-title) From 15cb2d85e1890644e68ed1cd5123c057284056e5 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:23:59 +0100 Subject: [PATCH 202/260] New translations formEditor.md (French) --- .../fr/FormEditor/formEditor.md | 218 +++++++++--------- 1 file changed, 109 insertions(+), 109 deletions(-) diff --git a/website/translated_docs/fr/FormEditor/formEditor.md b/website/translated_docs/fr/FormEditor/formEditor.md index df3003e145ae6f..372c4585fe16ad 100644 --- a/website/translated_docs/fr/FormEditor/formEditor.md +++ b/website/translated_docs/fr/FormEditor/formEditor.md @@ -3,297 +3,297 @@ id: formEditor title: Éditeur de formulaire --- -## Création de list box +## List Box Builder -Vous pouvez créer rapidement de nouvelles list box de type sélection d'entités avec le **générateur de list box**. La nouvelle list box peut être utilisée immédiatement ou elle peut être modifiée via l'éditeur de formulaires. +You can create new entity selection list boxes quickly with the **List box builder**. The new list box can be used immediately or it can be edited via the Form Editor. -Le générateur de list box vous permet de créer et de remplir des list box de type sélection d'entités en quelques opérations simples. +The List box builder lets you create and fill entity selection list boxes in a few simple operations. -### Utilisation du générateur de list box +### Using the List Box Builder -1. Dans la barre d'outils de l'éditeur de formulaire, cliquez sur l'icône du générateur de zone de liste : +1. In the Form Editor toolbar, click on the List box builder icon: ![](assets/en/FormEditor/listboxBuilderIcon.png) - Le générateur de list box s'affiche : + The List box builder is displayed: ![](assets/en/FormEditor/listboxBuilder.png) -2. Sélectionnez une table dans la liste déroulante **Table** : +2. Select a table from the **Table** dropdown list: ![](assets/en/FormEditor/listboxBuilderTable.png) -3. Sélectionnez les champs de la list box dans la zone **Champs** : +3. Select the fields for the list box in the **Fields** area: ![](assets/en/FormEditor/listboxBuilderFields.png) - Par défaut, tous les champs sont sélectionnés. Vous pouvez sélectionner ou désélectionner les champs individuellement ou utiliser **Ctrl+clic** (Windows) ou **Cmd+clic** (macOS) pour les sélectionner ou les désélectionner tous à la fois. + By default, all fields are selected. You can select or deselect fields individually or use **Ctrl+click** (Windows) or **Cmd+click** (macOS) to select or deselect them all at once. - Vous pouvez modifier l'ordre des champs via un glisser-déposer. + You can change the order of the fields by dragging them and dropping them. -4. L'expression qui permet de remplir les lignes de la list box à partir de la sélection d'entité est préremplie : +4. The expression to fill the list box's rows from the entity selection is prefilled: ![](assets/en/FormEditor/listboxBuilderExpression.png) - Cette expression peut être modifiée si nécessaire. + This expression can be changed if necessary. -5. En cliquant sur le bouton **Copier**, l'expression sera copiée pour charger tous les enregistrements en mémoire : +5. Clicking on the **Copy** button will copy the expression for loading all records into memory: ![](assets/en/FormEditor/listboxBuilderCode.png) -6. Cliquez sur le bouton **Créer un widget** pour créer la list box. +6. Click the the **Build widget** button to create the list box. ![](assets/en/FormEditor/listboxBuilderBuild.png) -La list box finale : +The final list box: ![](assets/en/FormEditor/listboxBuilderListbox.png) -## Badges +## Shields -L’éditeur de formulaires 4D permet d’utiliser des badges afin de faciliter la visualisation des propriétés des objets. Ils se trouvent dans la barre d'outils du formulaire : +The 4D Form Editor uses shields to make viewing object properties easier. You can find them on the form toolbar: ![](assets/en/FormEditor/shields.png) -Le principe de cette fonction est le suivant : chaque badge est associé à une propriété (par exemple **Vues**, signifiant que l'objet “est dans la vue courante”). Lorsque vous activez un badge, 4D affiche une petite icône (un badge) en haut à gauche de chaque objet du formulaire auquel s’applique la propriété. +This function works as follows: Each shield is associated with a property (for example, **Views**, which means the object “is in the current view”). When you activate a shield, 4D displays a small icon (shield) in the upper left of each object of the form where the property is applied. ![](assets/en/FormEditor/shield.png) -### Utilisation des badges +### Using shields -Pour activer un badge, cliquez sur l'icône *badge* jusqu’à ce que le badge souhaité soit sélectionné. Vous pouvez également cliquer sur la partie droite du bouton et sélectionner directement le type de badge à afficher dans le menu associé : +To activate a shield, click the *Shield* icon from the toolbar until the desired shield is selected. You can also click on the right side of the button and select the type of shield to display directly in the associated menu: -Pour ne pas afficher de badges, choisissez la ligne **Pas de badges** dans le menu de sélection. -> Vous pouvez définir les badges à afficher par défaut dans la Préférences de l’application. +If you don't want to display shields, select **No Shields** in the selection menu. +> You can set which shields to display by default on the Forms Page of the application Preferences. -### Description du badge +### Shield descriptions -Voici la description de chaque type de badge : +Here is a description of each type of shield: -| Icône | Nom | Est affiché... | -| -------------------------------------------- | ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | -| ![](assets/en/FormEditor/objectMethod.png) | Méthode objet | Pour les objets auxquels une méthode objet est associée | -| ![](assets/en/FormEditor/standardAction.png) | Action standard | Pour les objets auxquels une action standard est associée | -| ![](assets/en/FormEditor/resizing.png) | Redimensionnement | Pour les objets disposant d’au moins une propriété de redimensionnement, indique la combinaison de propriétés courante | -| ![](assets/en/FormEditor/entryOrder.png) | Ordre de saisie | Pour les objets saisissables, indique le numéro d’ordre de saisie | -| ![](assets/en/FormEditor/viewNumber.png) | Vue courante | Pour tous les objets de la vue courante | -| ![](assets/en/FormEditor/filter.png) | Filtre | Pour les objets saisissables auxquels un filtre de saisie est associé | -| ![](assets/en/FormEditor/helpTip.png) | Infobulle | Pour les objets auxquels une infobulle (message d’aide) est associée | -| ![](assets/en/FormEditor/localized.png) | Localisé | Pour les objets dont le libellé provient d’une référence (libellé débutant par “:”). La référence peut être de type ressource (STR#) ou XLIFF | -| ![](assets/en/FormEditor/noShields.png) | Pas de badge | Aucun badge n’apparaît | +| Icon | Name | Is displayed ... | +| -------------------------------------------- | --------------- | ------------------------------------------------------------------------------------------------------------------------------------ | +| ![](assets/en/FormEditor/objectMethod.png) | Object Method | For objects with an associated object method | +| ![](assets/en/FormEditor/standardAction.png) | Standard Action | For objects with an associated standard action | +| ![](assets/en/FormEditor/resizing.png) | Resizing | For objects with at least one resizing property, indicates the combination of current properties | +| ![](assets/en/FormEditor/entryOrder.png) | Entry Order | For enterable objects, indicates the number of entry order | +| ![](assets/en/FormEditor/viewNumber.png) | Current View | For all objects in the current view | +| ![](assets/en/FormEditor/filter.png) | Filter | For enterable objects with an associated entry filter | +| ![](assets/en/FormEditor/helpTip.png) | Help Tip | For objects with an associated tip | +| ![](assets/en/FormEditor/localized.png) | Localized | For objects whose label comes from a reference (label beginning with “:”). The reference can be of the resource (STR#) or XLIFF type | +| ![](assets/en/FormEditor/noShields.png) | No Shields | No shields appear | -## Vues +## Views -L'éditeur de formulaires 4D vous permet de créer des formulaires complexes en distribuant des objets de formulaire entre des vues séparées qui peuvent ensuite être masquées ou affichées selon les besoins. +The 4D Form Editor enables you to build complex forms by distributing form objects among separate views that can then be hidden or shown as needed. -Par exemple, vous pouvez répartir les objets par type (champs, variables, objets statiques, etc.). Tout type d'objet formulaire, y compris les sous-formulaires et les zones de plug-in, peut être inclus dans les vues. +For example, you can distribute objects according to type (fields, variables, static objects, etc.). Any type of form object, including subforms and plug-in areas, can be included in views. -Il n'y a pas de limite au nombre de vues par formulaire. Vous pouvez créer autant de vues différentes que nécessaire. De plus, chaque vue peut être affichée, masquée et/ou verrouillée. +There is no limit on the number of views per form. You can create as many different views as you need. Additionally, each view can be displayed, hidden, and/or locked. -Les vues sont gérées via à la palette de vues. +View management is handled via the View palette. ![](assets/en/FormEditor/viewEditor.png) -### Accéder à la palette de vues +### Accessing the View palette -Il existe trois façons d'accéder à la palette de vues : +There are three ways to access the View palette: -* **Barre d'outils** : cliquez sur l'icône de Vues dans la barre d'outils de l'éditeur de formulaires. (Cette icône apparaît en gris lorsqu'au moins un objet appartient à une vue autre que la vue par défaut.) +* **Toolbar**: Click on the Views icon in the Form Editor toolbar. (This icon appears gray when at least one object belongs to a view other than the default view.) - | Vue par défaut uniquement | Avec des vues supplémentaires | + | Default view only | With additional views | |:----------------------------------------------------:|:--------------------------------------------------:| | ![](assets/en/FormEditor/icon.png "No views in use") | ![](assets/en/FormEditor/icon2.png "Views in use") | -* **Menu contextuel** (formulaire ou objet) : faites un clic droit n'importe où dans l'éditeur de formulaires ou sur un objet, puis sélectionnez **Vue courante** +* **Context menu** (form or object): Right-click anywhere in the Form Editor or an object, and select **Current View** ![](assets/en/FormEditor/contextMenu.png) -La vue courante est indiquée par une coche (par exemple, "Adresse professionnelle" dans l'image ci-dessus) +The current view is indicated with a check mark (*e.g.*, "Work Address" in the image above) -* **Menu Formulaire** : cliquez sur le menu **Formulaire** et sélectionnez **Afficher la liste** +* **Form menu**: Click on the **Form** menu and select **View List** ![](assets/en/FormEditor/formMenu.png) -### Avant de commencer +### Before you begin -Voici quelques éléments importants à connaitre avant de commencer à travailler avec les vues : +Here are a few important things to know before you start working with views: -* **Contexte d’utilisation** : les vues sont un outil purement graphique, utilisable uniquement dans l’éditeur de formulaires ; il n’est pas possible d’accéder aux vues par programmation ou en mode Application. +* **Context of use**: Views are a purely graphic tool which can only be used in the Form Editor; you cannot access views programmatically or in the Application environment. -* **Vues et pages** : Les objets d’une même vue peuvent appartenir à des pages différentes d’un formulaire ; seuls les objets de la page courante (et de la page 0 si elle est visible) peuvent être affichés, quelle que soit la configuration des vues. +* **Views and pages**: Objects of the same view can belong to different form pages; only objects of the current page (and of page 0 if it is visible) can be displayed, regardless of the view configuration. -* **Vues et plans** : Les vues sont indépendantes des plans des objets, il n’y a pas de hiérarchie d’affichage entre les différentes vues. +* **Views and levels**: Views are independent of object levels; there is no display hierarchy among different views. -* **Vues et groupes** : Seuls les objets appartenant à la vue courante peuvent être groupés. +* **Views and groups**: Only objects belonging to the current view can be grouped. -* **Vues courantes et par défaut** : la vue par défaut est la première vue d'un formulaire et ne peut pas être supprimée; la vue courante est la vue en cours de modification et le nom est affiché en gras. +* **Current and Default** views: The Default view is the first view of a form and cannot be deleted; the Current view is the view that is being edited and the name is displayed in bold text. -### Gestion des vues +### Managing views -#### Créer des vues +#### Creating views -Tout objet créé dans un formulaire est placé dans la première vue ("Vue 1") du formulaire. La première vue 1 est **toujours** la vue par défaut, indiquée par (par défaut) après le nom. Le nom de la vue peut être modifié (voir [Renommer les vues](#renaming-views)), mais il demeure la vue par défaut. +Any object created in a form is placed in the first view ("View 1") of the form. The first view is **always** the default view, indicated by (Default) after the name. The view's name can be changed (see [Renaming views](#renaming-views)), however it remains the default view. ![](assets/en/FormEditor/createView.png) -Il existe deux façons d'ajouter des vues supplémentaires : +There are two ways to add additional views: -* Cliquez sur le bouton **Ajouter une nouvelle vue** en bas de la palette Vue : +* Click on the **Add a new view** button at the bottom of the View palette: ![](assets/en/FormEditor/addView.png) -* Faites un clic droit sur une vue existante et sélectionnez **Insérer une vue** : +* Right-click on an existing view and select **Insert view**: ![](assets/en/FormEditor/addView2.png) -Il n'y a pas de limitation du nombre de vues. +There is no limitation on the number of views. -#### Renommer des vues +#### Renaming views -Par défaut, les vues sont nommées "Vue" + le numéro de vue, mais vous pouvez modifier ces noms pour améliorer la lisibilité et mieux répondre à vos besoins. +By default views are named as "View" + the view number, however you can change these names to improve readability and better suit your needs. -Pour renommer une vue, vous pouvez soit : +To rename a view, you can use either: -* Double-cliquer directement sur le nom de la vue (dans ce cas, la vue est sélectionnée). Le nom devient alors éditable : +* Double-click directly on the view name (the selected view in this case). The name then becomes editable: ![](assets/en/FormEditor/rename.png) -* Faire un clic droit sur le nom de la vue. Le nom devient alors éditable : +* Right-click on the view name. The name then becomes editable: ![](assets/en/FormEditor/rename2.png) -#### Réordonner les vues +#### Reordering views -Vous pouvez modifier l'ordre d'affichage des vues en les faisant glisser/déposer dans la palette des vues. +You can change the display order of views by dragging/dropping them within the View palette. -A noter que la vue par défaut ne change pas : +Note that the Default view does not change: ![](assets/en/FormEditor/reorderView.png) -#### Supprimer des vues +#### Deleting views -Pour renommer une vue, vous pouvez soit : +To rename a view, you can use either: -* Cliquer sur le bouton **Supprimer la vue sélectionnée** en bas de la palette des vues : +* Click on the **Delete the selected view** button at the bottom of the View palette: ![](assets/en/FormEditor/deleteView.png) -* Faire un clic droit sur le nom de la vue et sélectionner **Supprimer la vue** : +* Right-click on the view name, and select **Delete View**: ![](assets/en/FormEditor/deleteView2.png) -> Si une vue est supprimée, tous les objets qu'elle contient sont automatiquement déplacés vers la vue par défaut. +> If a view is deleted, any objects in it are automatically moved to the Default view. -### Utilisation des vues +### Using views -Une fois que les vues sont créées, vous pouvez utiliser la palette des vues pour : +Once views are created, you can use the View palette to: -* Ajouter un objet aux vues, -* Déplacer des objets d'une vue à une autre, -* Sélectionner tous les objets d'une même vue en un seul clic, -* Afficher ou masquer des objets pour chaque vue, -* Verrouiller les objets d'une vue. +* Add object to views, +* Move objects from one view to another, +* Select all objects of the same view in a single click, +* Display or hide objects for each view, +* Lock the objects of a view. -#### Ajouter des objets aux vues +#### Adding objects to views -Un objet ne peut appartenir qu’à une seule vue. +An object can only belong to a single view. -Pour créer un objet dans une autre vue, sélectionnez simplement la vue dans la palette des vues (avant de créer l'objet) en cliquant sur son nom (une icône Modifier est affichée pour la [Vue courante](#before-you-begin) et le nom apparaît en gras) : +To create an object in another view, simply select the view in the View palette (prior to creating the object) by clicking its name (an Edit icon is displayed for the [Current view](#before-you-begin) and the name appears in bold text): ![](assets/en/FormEditor/addObject.png) -#### Déplacer des objets entre les vues +#### Moving objects between views -Il est également possible de déplacer un ou plusieurs objets d'une vue à une autre. Dans le formulaire, sélectionnez le ou les objets dont vous souhaitez modifier la vue. La liste des vues indique, à l'aide d'un symbole, la vue à laquelle appartient la sélection : +It's also possible to move one or more objects from one view to another. In the form, select the object(s) whose view you wish to change. The view list indicates, using a symbol, the view to which the selection belongs: ![](assets/en/FormEditor/symbol.png) -> La sélection peut contenir plusieurs objets appartenant à différentes vues. +> The selection can contain several objects belonging to different views. -Sélectionnez simplement la vue de destination, faites un clic droit puis sélectionnez **Déplacer vers** : +Simply select the destination view, right-click, and select **Move to**: ![](assets/en/FormEditor/moveObject.png) -OU +OR -Sélectionnez la vue de destination de la sélection et cliquez sur le bouton **Déplacer vers** en bas de la palette des vues : +Select the destination view of the selection and click **Move to** button at the bottom of the View palette: ![](assets/en/FormEditor/moveObject3.png) -La sélection est ensuite placée dans la nouvelle vue : +The selection is then placed in the new view: ![](assets/en/FormEditor/objNewView.png) -Vous pouvez également déplacer un objet vers une autre vue via le menu contextuel de l'objet. Faites un clic droit sur l'objet, sélectionnez **Déplacer vers la vue** puis sélectionnez une vue dans la liste de vues disponibles : +You can also move an object to another view via the object's context menu. Right-click on the object, select **Move to view**, and select a view from the list of available views: ![](assets/en/FormEditor/moveObject2.png) -> La [vue courante](#before-you-begin) est affichée en texte gras. +> The [Current view](#before-you-begin) is shown in bold text. -#### Sélectionner tous les objets d’une vue +#### Select all objects of a view -Vous pouvez sélectionner dans la page courante du formulaire tous les objets appartenant à une même vue. Cette fonction est utile pour appliquer des modifications globales à un ensemble d’objets. +You can select all objects belong to the same view in the current page of the form. This function is useful for applying global changes to a set of objects. -Pour cela, faites un clic droit sur la vue dans laquelle vous souhaitez sélectionner tous les objets et cliquez sur le bouton **Tout sélect. dans vue**: +To do this, right-click on the view in which you wish to select all the objects, click on **Select All**: ![](assets/en/FormEditor/selectAll.png) -Vous pouvez également utiliser le bouton situé en dessous de la palette des vues : +You can also use the button at the bottom of the View palette: ![](assets/en/FormEditor/selectAll2.png) -#### Afficher ou masquer les objets d’une vue +#### Show or hide objects of a view -Vous pouvez à tout moment afficher ou masquer les objets d’une vue dans la page courante du formulaire. Cette fonction permet par exemple de se concentrer sur certains objets lors de la modification du formulaire. +You can show or hide objects belonging to a view at any time in the form's current page. This way you can focus on certain objects when editing the form, for example. -Par défaut, toutes les vues sont affichées, comme l’indique l’icône en regard de chaque vue dans la palette des vues: +By default, all views are shown, as indicated by the *Show/Hide* icon: ![](assets/en/FormEditor/showHide.png) -Pour masquer une vue, cliquez sur cette icône. Elle est alors grisée et les objets de la vue correspondante ne sont plus affichés dans le formulaire : +To hide a view, click the *Show/Hide* icon. It is then dimmed and objects of the corresponding view are no longer shown in the form: ![](assets/en/FormEditor/hidden.png) -> Il n’est pas possible de masquer la [vue courante](#before-you-begin). +> The [Current view](#before-you-begin) cannot be hidden. -Pour afficher une vue masquée, il suffit de la sélectionner ou de cliquer de nouveau sur l’icône de visualisation. +To show a view that is hidden, simply select it or click on the *Show/Hide* icon for that view. -#### Verrouiller les objets d’une vue +#### Locking objects of a view -Vous pouvez verrouiller les objets d’une vue. Cela empêche leur sélection, leur modification ou leur suppression dans le formulaire. Une fois verrouillé, un objet ne peut pas être sélectionné par un clic, un rectangle de sélection ou la commande **Sélectionner objets de même type** du menu contextuel. Cette fonction est utile pour éviter les erreurs de manipulation. +You can lock the objects of a view. This prevents them from being selected, changed, or deleted from the form. Once locked, an object cannot be selected by a click, a rectangle, or the **Select Similar Objects** command of the context menu. This function is useful for preventing handling errors. -Par défaut, toutes les vues sont déverrouillées, comme l’indique l’icône en regard de chaque vue dans la palette des vues: +By default, all views are unlocked, as indicated by the *Lock/Unlock* icon next to each view: ![](assets/en/FormEditor/lockUnlock.png) -Pour verrouiller les objets d’une vue, cliquez sur cette icône. Le cadenas est alors refermé, ce qui indique que la vue est verrouillée : +To lock the objects of a view, click the *Lock/Unlock* icon. The padlock is shut, which means that the view is now locked: ![](assets/en/FormEditor/locked.png) -> Il n’est pas possible de verrouiller la [vue courante](#before-you-begin). +> The [Current view](#before-you-begin) cannot be locked. -Pour déverrouiller une vue, il suffit de la sélectionner ou de cliquer à nouveau sur l’icône de verrouillage. +To unlock a view that is locked, simply select it or click on the *Lock/Unlock* icon for that view. From 6ee37a0b97b7a2c2cb3d4786c747a15272c79630 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:24:01 +0100 Subject: [PATCH 203/260] New translations properties_FormSize.md (French) --- .../fr/FormEditor/properties_FormSize.md | 44 +++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/website/translated_docs/fr/FormEditor/properties_FormSize.md b/website/translated_docs/fr/FormEditor/properties_FormSize.md index 91c7acf2e10a59..3df46057873485 100644 --- a/website/translated_docs/fr/FormEditor/properties_FormSize.md +++ b/website/translated_docs/fr/FormEditor/properties_FormSize.md @@ -23,23 +23,23 @@ Size options depend on the value of the **Size based on** option. > For output forms, only the [**Hor. margin**](#hor-margin) or [**Width**](width) fields are available. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| -------------- | --------------- | ----------------------------------------------------- | -| formSizeAnchor | string | Name of object to use to defined the size of the form | +| Name | Data Type | Possible Values | +| -------------- | --------- | ----------------------------------------------------- | +| formSizeAnchor | string | Name of object to use to defined the size of the form | --- -## Hauteur +## Height Height of the form (in pixels) when the [form size](#size-based-on) is **Set size**. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------ | --------------- | ----------------- | -| height | number | integer value | +| Name | Data Type | Possible Values | +| ------ | --------- | --------------- | +| height | number | integer value | --- @@ -48,11 +48,11 @@ Value to add (in pixels) to the right margin of the form when the [form size](#s This value also determines the right-hand margins of forms used in the Label editor. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ----------- | --------------- | ----------------- | -| rightMargin | number | integer value | +| Name | Data Type | Possible Values | +| ----------- | --------- | --------------- | +| rightMargin | number | integer value | --- @@ -62,21 +62,21 @@ Value to add (in pixels) to the bottom margin of the form when the [form size](# This value also determines the top margins of forms used in the Label editor. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ------------ | --------------- | ----------------- | -| bottomMargin | number | integer value | +| Name | Data Type | Possible Values | +| ------------ | --------- | --------------- | +| bottomMargin | number | integer value | --- -## Largeur +## Width Width of the form (in pixels) when the [form size](#size-based-on) is **Set size**. -#### Grammaire JSON +#### JSON Grammar -| Nom | Type de données | Valeurs possibles | -| ----- | --------------- | ----------------- | -| width | number | integer value | +| Name | Data Type | Possible Values | +| ----- | --------- | --------------- | +| width | number | integer value | From bec8914a0cffb813be6c5a9604041e3cec28177d Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:24:04 +0100 Subject: [PATCH 204/260] New translations overview.md (French) --- website/translated_docs/fr/Events/overview.md | 134 +++++++++--------- 1 file changed, 68 insertions(+), 66 deletions(-) diff --git a/website/translated_docs/fr/Events/overview.md b/website/translated_docs/fr/Events/overview.md index a40602be541ab2..e6a59403991ae4 100644 --- a/website/translated_docs/fr/Events/overview.md +++ b/website/translated_docs/fr/Events/overview.md @@ -5,7 +5,7 @@ title: Aperçu Form events are events that can lead to the execution of the form method and/or form object method(s). Form events allow you to control the flow of your application and to write code that is executed only when a specific event occurs. -In your code, you control the events using the `FORM Event` command, that returns the triggered event. Par exemple: +In your code, you control the events using the `FORM Event` command, that returns the triggered event. For example: ```4d //code of a button @@ -21,10 +21,12 @@ End if Each event is returned as an object by the `FORM Event` command. By default, it contains the following properties: -| Propriété | Type | Description | -| --------- | ---- | ----------- | -| | | | - objectName|text|Name of the object triggering the event - Not included if the event is triggered by the form| |code|longint|Numeric value of the form event. Also returned by the +| Property | Type | Description | +| -------- | ---- | ----------- | +| | | | + objectName|text|Name of the object triggering the event - Not included if the event is triggered by the form| |code|longint|Numeric value of the form event. Also returned by the + +`Form event code` command| |description|text|Name of the form event (e.g. "On After Edit")| Additional properties are returned when the event occurs on specific objects. For example, the [On After Edit](onAfterEdit.md) event object returned by a [4D View Pro area](FormObjects/viewProArea_overview.md) contains `sheetName` or `action` properties. @@ -46,67 +48,67 @@ The number of objects involved in an event depends on the nature of the event. The following table summarizes how object and form methods are called for each event type: -| Evénement | Méthode objet | Méthode formulaire | Objets | -| ----------------------------- | ---------------------------------- | ------------------ | --------------------------- | -| On Load | Oui | Oui | Tous les objets | -| On Unload | Oui | Oui | Tous les objets | -| Sur validation | Oui | Oui | Tous les objets | -| Sur clic | Oui | Oui | Objets concernés uniquement | -| Sur double clic | Oui | Oui | Objets concernés uniquement | -| Sue avant frappe clavier | Oui | Oui | Objets concernés uniquement | -| Sue après frappe clavier | Oui | Oui | Objets concernés uniquement | -| Sur après modification | Oui | Oui | Objets concernés uniquement | -| On Getting Focus | Oui | Oui | Objets concernés uniquement | -| On Losing Focus | Oui | Oui | Objets concernés uniquement | -| Sur activation | Jamais | Oui | Aucun | -| On Deactivate | Jamais | Oui | Aucun | -| Sur appel extérieur | Jamais | Oui | Aucun | -| Sur changement page | Jamais | Oui | Aucun | -| Sur début survol | Oui | Oui | Objets concernés uniquement | -| Sur déposer | Oui | Oui | Objets concernés uniquement | -| Sur glisser | Oui | Jamais | Objets concernés uniquement | -| Sur début survol | Oui | Oui | Tous les objets | -| Sur survol | Oui | Oui | Tous les objets | -| Sur fin survol | Oui | Oui | Tous les objets | -| On Mouse Up | Oui | Jamais | Objets concernés uniquement | -| Sur menu sélectionné | Jamais | Oui | Aucun | -| On Bound variable change | Jamais | Oui | Aucun | -| Sur données modifiées | Oui | Oui | Objets concernés uniquement | -| Sur appel zone du plug in | Oui | Oui | Objets concernés uniquement | -| Sur entête | Oui | Oui | Tous les objets | -| On Printing Detail | Oui | Oui | Tous les objets | -| On Printing Break | Oui | Oui | Tous les objets | -| On Printing Footer | Oui | Oui | Tous les objets | -| On Close Box | Jamais | Oui | Aucun | -| Sur affichage corps | Oui | Oui | Tous les objets | -| Sur ouverture corps | Oui (List box) | Oui | Aucun, excepté les List box | -| Sur fermeture corps | Oui (List box) | Oui | Aucun, excepté les List box | -| Sur redimensionnement | Jamais | Oui | Aucun | -| Sur nouvelle sélection | Oui | Oui | Objets concernés uniquement | -| Sur chargement ligne | Jamais | Oui | Aucun | -| Sur minuteur | Jamais | Oui | Aucun | -| Sur défilement | Oui | Jamais | Objets concernés uniquement | -| Sur avant saisie | Oui (List box) | Jamais | Objets concernés uniquement | -| Sur déplacement colonne | Oui (List box) | Jamais | Objets concernés uniquement | -| Sur déplacement ligne | Oui (List box) | Jamais | Objets concernés uniquement | -| Sur redimensionnement colonne | Oui (List box et Zone 4D View Pro) | Jamais | Objets concernés uniquement | -| Sur clic entête | Oui (List box et Zone 4D View Pro) | Jamais | Objets concernés uniquement | -| Sur clic pied | Oui (List box) | Jamais | Objets concernés uniquement | -| Sur après tri | Oui (List box) | Jamais | Objets concernés uniquement | -| Sur clic long | Oui (Bouton) | Oui | Objets concernés uniquement | -| Sur clic alternatif | Oui (Bouton et List box) | Jamais | Objets concernés uniquement | -| Sur déployer | Yes (Hier. list and list box) | Jamais | Objets concernés uniquement | -| Sur contracter | Yes (Hier. list and list box) | Jamais | Objets concernés uniquement | -| Sur action suppression | Yes (Hier. list and list box) | Jamais | Objets concernés uniquement | -| On URL Resource Loading | Oui (Zone Web) | Jamais | Objets concernés uniquement | -| On Begin URL Loading | Oui (Zone Web) | Jamais | Objets concernés uniquement | -| On URL Loading Error | Oui (Zone Web) | Jamais | Objets concernés uniquement | -| On URL Filtering | Oui (Zone Web) | Jamais | Objets concernés uniquement | -| On End URL Loading | Oui (Zone Web) | Jamais | Objets concernés uniquement | -| On Open External Link | Oui (Zone Web) | Jamais | Objets concernés uniquement | -| On Window Opening Denied | Oui (Zone Web) | Jamais | Objets concernés uniquement | -| On VP Ready | Oui (4D View Pro Area) | Jamais | Objets concernés uniquement | -| On Row Resize | Oui (4D View Pro Area) | Jamais | Objets concernés uniquement | +| Event | Object Methods | Form Method | Which Objects | +| ----------------------------- | ----------------------------------- | ----------- | ---------------------- | +| On Load | Yes | Yes | All objects | +| On Unload | Yes | Yes | All objects | +| Sur validation | Yes | Yes | All objects | +| Sur clic | Yes | Yes | Involved object only | +| Sur double clic | Yes | Yes | Involved object only | +| Sue avant frappe clavier | Yes | Yes | Involved object only | +| Sue après frappe clavier | Yes | Yes | Involved object only | +| Sur après modification | Yes | Yes | Involved object only | +| On Getting Focus | Yes | Yes | Involved object only | +| On Losing Focus | Yes | Yes | Involved object only | +| Sur activation | Never | Yes | None | +| On Deactivate | Never | Yes | None | +| Sur appel extérieur | Never | Yes | None | +| Sur changement page | Never | Yes | None | +| Sur début survol | Yes | Yes | Involved object only | +| Sur déposer | Yes | Yes | Involved object only | +| Sur glisser | Yes | Never | Involved object only | +| Sur début survol | Yes | Yes | All objects | +| Sur survol | Yes | Yes | All objects | +| Sur fin survol | Yes | Yes | All objects | +| On Mouse Up | Yes | Never | Involved object only | +| Sur menu sélectionné | Never | Yes | None | +| On Bound variable change | Never | Yes | None | +| Sur données modifiées | Yes | Yes | Involved object only | +| Sur appel zone du plug in | Yes | Yes | Involved object only | +| Sur entête | Yes | Yes | All objects | +| On Printing Detail | Yes | Yes | All objects | +| On Printing Break | Yes | Yes | All objects | +| On Printing Footer | Yes | Yes | All objects | +| On Close Box | Never | Yes | None | +| Sur affichage corps | Yes | Yes | All objects | +| Sur ouverture corps | Yes (List box) | Yes | None except List boxes | +| Sur fermeture corps | Yes (List box) | Yes | None except List boxes | +| Sur redimensionnement | Never | Yes | None | +| Sur nouvelle sélection | Yes | Yes | Involved object only | +| Sur chargement ligne | Never | Yes | None | +| Sur minuteur | Never | Yes | None | +| Sur défilement | Yes | Never | Involved object only | +| Sur avant saisie | Yes (List box) | Never | Involved object only | +| Sur déplacement colonne | Yes (List box) | Never | Involved object only | +| Sur déplacement ligne | Yes (List box) | Never | Involved object only | +| Sur redimensionnement colonne | Yes (List box and 4D View Pro Area) | Never | Involved object only | +| Sur clic entête | Yes (List box and 4D View Pro Area) | Never | Involved object only | +| Sur clic pied | Yes (List box) | Never | Involved object only | +| Sur après tri | Yes (List box) | Never | Involved object only | +| Sur clic long | Yes (Button) | Yes | Involved object only | +| Sur clic alternatif | Yes (Button and List box) | Never | Involved object only | +| Sur déployer | Yes (Hier. list and list box) | Never | Involved object only | +| Sur contracter | Yes (Hier. list and list box) | Never | Involved object only | +| Sur action suppression | Yes (Hier. list and list box) | Never | Involved object only | +| On URL Resource Loading | Yes (Web Area) | Never | Involved object only | +| On Begin URL Loading | Yes (Web Area) | Never | Involved object only | +| On URL Loading Error | Yes (Web Area) | Never | Involved object only | +| On URL Filtering | Yes (Web Area) | Never | Involved object only | +| On End URL Loading | Yes (Web Area) | Never | Involved object only | +| On Open External Link | Yes (Web Area) | Never | Involved object only | +| On Window Opening Denied | Yes (Web Area) | Never | Involved object only | +| On VP Ready | Yes (4D View Pro Area) | Never | Involved object only | +| On Row Resize | Yes (4D View Pro Area) | Never | Involved object only | Always keep in mind that, for any event, the method of a form or an object is called if the corresponding event property is selected for the form or objects. The benefit of disabling events in the Design environment (using the Property List of the Form editor) is that you can reduce the number of calls to methods and therefore significantly optimize the execution speed of your forms. From 390543adcebfd7f902e4331f37ea0cd4b31708bc Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:24:06 +0100 Subject: [PATCH 205/260] New translations onWindowOpeningDenied.md (French) --- website/translated_docs/fr/Events/onWindowOpeningDenied.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/website/translated_docs/fr/Events/onWindowOpeningDenied.md b/website/translated_docs/fr/Events/onWindowOpeningDenied.md index 5ec79b5c22d122..baf5cec0a000a4 100644 --- a/website/translated_docs/fr/Events/onWindowOpeningDenied.md +++ b/website/translated_docs/fr/Events/onWindowOpeningDenied.md @@ -3,9 +3,9 @@ id: onWindowOpeningDenied title: On Window Opening Denied --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ------------------------------------------- | -------------------------------- | -| 53 | [Zone Web](FormObjects/webArea_overview.md) | A pop-up window has been blocked | +| 53 | [Web Area](FormObjects/webArea_overview.md) | A pop-up window has been blocked | ## Description @@ -15,5 +15,5 @@ This event is generated when the opening of a pop-up window is blocked by the We You can find out the blocked URL using the `WA Get last filtered URL` command. -### Voir également +### See also [`On Open External Link`](onOpenExternalLink.md) \ No newline at end of file From a96215178a9394ac6ccd78a8b05d2730077124c8 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:24:08 +0100 Subject: [PATCH 206/260] New translations onVpReady.md (French) --- website/translated_docs/fr/Events/onVpReady.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/fr/Events/onVpReady.md b/website/translated_docs/fr/Events/onVpReady.md index 853f1b1aade52d..b6faa860588d50 100644 --- a/website/translated_docs/fr/Events/onVpReady.md +++ b/website/translated_docs/fr/Events/onVpReady.md @@ -3,7 +3,7 @@ id: onVpReady title: On VP Ready --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ------------------------------------------------------- | ----------------------------------------------- | | 9 | [4D View Pro Area](FormObjects/viewProArea_overview.md) | The loading of the 4D View Pro area is complete | From 0405e5127bf939e6152dd1b46962707e0f34d091 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:24:10 +0100 Subject: [PATCH 207/260] New translations onOpenDetail.md (French) --- website/translated_docs/fr/Events/onOpenDetail.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/fr/Events/onOpenDetail.md b/website/translated_docs/fr/Events/onOpenDetail.md index d45cab7ac8dfad..94f5cb038f4466 100644 --- a/website/translated_docs/fr/Events/onOpenDetail.md +++ b/website/translated_docs/fr/Events/onOpenDetail.md @@ -3,7 +3,7 @@ id: onOpenDetail title: Sur ouverture corps --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | -------------------------------------------------- | ------------------------------------------------------------------------------------------- | | 25 | Form - [List Box](FormObjects/listbox_overview.md) | The detail form associated with the output form or with the list box is about to be opened. | From 2e62501bfb661f7eb023db6d61e843b5ac62248a Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:24:12 +0100 Subject: [PATCH 208/260] New translations onValidate.md (French) --- website/translated_docs/fr/Events/onValidate.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/translated_docs/fr/Events/onValidate.md b/website/translated_docs/fr/Events/onValidate.md index 29bf3e88ad4ac8..36f9d7aac17467 100644 --- a/website/translated_docs/fr/Events/onValidate.md +++ b/website/translated_docs/fr/Events/onValidate.md @@ -3,7 +3,7 @@ id: onValidate title: Sur validation --- -| Code | Peut être appelé par | Définition | +| Code | Can be called by | Definition | | ---- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------- | | 3 | [4D Write Pro area](FormObjects/writeProArea_overview) - [Button](FormObjects/button_overview.md) - [Button Grid](FormObjects/buttonGrid_overview.md) - [Check Box](FormObjects/checkbox_overview.md) - [Combo Box](FormObjects/comboBox_overview.md) - [Dropdown list](FormObjects/dropdownList_Overview.md) - Form - [Hierarchical List](FormObjects/list_overview.md#overview) - [Input](FormObjects/input_overview.md) - [List Box](FormObjects/listbox_overview.md) - [List Box Column](FormObjects/listbox_overview.md#list-box-columns) - [Picture Button](FormObjects/pictureButton_overview.md) - [Picture Pop up menu](FormObjects/picturePopupMenu_overview.md) - [Plug-in Area](FormObjects/pluginArea_overview.md#overview) - [Progress Indicators](FormObjects/progressIndicator.md) - [Radio Button](FormObjects/radio_overview.md) - [Ruler](FormObjects/ruler.md) - [Spinner](FormObjects/spinner.md) - [Splitter](FormObjects/splitters.md) - [Stepper](FormObjects/stepper.md) - [Subform](FormObjects/subform_overview.md) - [Tab control](FormObjects/tabControl.md) | The record data entry has been validated | @@ -13,6 +13,6 @@ title: Sur validation This event is triggered when the record data entry has been validated, for example after a `SAVE RECORD` command call or an `accept` [standard action](FormObjects/properties_Action.md#standard-action). -### Sous-formulaire +### Subform The `On Validate` event is triggered when data entry is validated in the subform. \ No newline at end of file From 7d9105d98e1430aa9b23afeee0f19a480f5aa264 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:24:52 +0100 Subject: [PATCH 209/260] New translations parameters.md (Spanish) --- website/translated_docs/es/Concepts/parameters.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/translated_docs/es/Concepts/parameters.md b/website/translated_docs/es/Concepts/parameters.md index c9390a5867423b..7d143c63709dbc 100644 --- a/website/translated_docs/es/Concepts/parameters.md +++ b/website/translated_docs/es/Concepts/parameters.md @@ -58,7 +58,7 @@ Tables or array expressions can only be passed [as reference using a pointer](Co ## Returning values -Data can be returned from methods. Data can be returned from methods. The statement puts the value returned by `Length` in a variable called *MyLength*. Here is the statement: +Data can be returned from methods. For example, the following line is a statement that uses the built-in command, `Length`, to return the length of a string. The statement puts the value returned by `Length` in a variable called *MyLength*. Here is the statement: ```4d MyLength:=Length("How did I get here?") From 075cd278643df0a8850b1ffa9fb98e9910cf6483 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:25:12 +0100 Subject: [PATCH 210/260] New translations onAfterEdit.md (Spanish) --- website/translated_docs/es/Events/onAfterEdit.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/website/translated_docs/es/Events/onAfterEdit.md b/website/translated_docs/es/Events/onAfterEdit.md index 4e95b7529dc1f0..4c9580463ea7e5 100644 --- a/website/translated_docs/es/Events/onAfterEdit.md +++ b/website/translated_docs/es/Events/onAfterEdit.md @@ -96,8 +96,6 @@ Here is an example handling an `On After Edit` event: from "+String(FORM Event.oldValue)+\ " to "+String(FORM Event.newValue)+"!") End if - End if - End if End if ``` From 6b9acc624cfb0f930c44bafa04adc2c019fd17a1 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:25:37 +0100 Subject: [PATCH 211/260] New translations classes.md (Spanish) --- .../translated_docs/es/Concepts/classes.md | 21 ------------------- 1 file changed, 21 deletions(-) diff --git a/website/translated_docs/es/Concepts/classes.md b/website/translated_docs/es/Concepts/classes.md index 0eef6ac3953703..326effb120de45 100644 --- a/website/translated_docs/es/Concepts/classes.md +++ b/website/translated_docs/es/Concepts/classes.md @@ -396,27 +396,6 @@ This example illustrates the use of `Super` in a class constructor. The command #### Example 2 -This example illustrates the use of `Super` in a class member method. Function getArea C_LONGINT($0) $0:=This.height*This.width - -```4d - //Class: Square - - Class extends Rectangle - - Class constructor - C_LONGINT($1) - - // It calls the parent class's constructor with lengths - // provided for the Rectangle's width and height - Super($1;$1) - - // In derived classes, Super must be called before you - // can use 'This' - This.name:="Square" -``` - -#### Example 2 - This example illustrates the use of `Super` in a class member method. You created the `Rectangle` class with a function: ```4d From 374ceb145c5f1f94a40f06296b16551ba7c44521 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:26:37 +0100 Subject: [PATCH 212/260] New translations licenses.md (French) --- website/translated_docs/fr/Admin/licenses.md | 118 +++++++++---------- 1 file changed, 59 insertions(+), 59 deletions(-) diff --git a/website/translated_docs/fr/Admin/licenses.md b/website/translated_docs/fr/Admin/licenses.md index bd4f6f0010e648..1b734fe7a246a4 100644 --- a/website/translated_docs/fr/Admin/licenses.md +++ b/website/translated_docs/fr/Admin/licenses.md @@ -3,146 +3,146 @@ id: licenses title: Gestion des licences 4D --- -Une fois installés sur votre disque, les produits 4D doivent être activés pour que vous puissiez les utiliser. Habituellement, l'activation est automatique si vous [vous connectez à l'aide de votre compte 4D](GettingStarted/Installation.md) dans l'assistant de bienvenue. +Once installed on your disk, you must activate your 4D products in order to be able to use them. Usually, the activation is automatic if you [sign in using your 4D account](GettingStarted/Installation.md) in the Welcome Wizard. -Cependant, dans des cas spécifiques, vous pourriez avoir besoin d'activer vos licences manuellement, si par exemple : +However, in specific cases you could need to activate your licenses manually, for example if: -- votre configuration ne permet pas l'activation automatique, -- vous avez acheté des licences supplémentaires. +- your configuration does not allow the automatic activation, +- you have purchased additional licenses. -Aucune activation n’est requise pour les usages suivants : +No activation is required for the following uses: -- 4D utilisé en mode distant (connexion à un 4D Server) -- 4D utilisé en mode local avec un projet d'application interprété sans accès au mode Développement. +- 4D used in remote mode (connection to a 4D Server) +- 4D used in local mode with an interpreted application project with no access to the Design environment. -## Première activation +## First activation -Pour activer 4D, sélectionnez la commande **Gestionnaire de licences...** du menu **Aide**. Pour activer 4D Server, lancez l'application 4D Server. La boîte de dialogue de choix du [mode d'activation](#activation-mode) apparaît. +With 4D, select the **License Manager...** command from the **Help** menu of the application. With 4D Server, just launch the 4D Server application. The dialog box for choosing the [activation mode](#activation-mode) appears. ![](assets/en/getStart/server1.png) -4D vous propose trois modes d’activation. **L'activation immédiate** est recommandée. +4D offers three activation modes. We recommend **Instant Activation**. -### Activation immédiate +### Instant Activation -Saisissez votre identifiant utilisateur (e-mail ou compte 4D) ainsi que votre mot de passe. Si vous n'avez pas encore de compte client chez 4D, vous devez en créer un à l'adresse suivante : +Enter your user ID (email or 4D account) as well as your password. If you do not have an existing user account, you will need to create it at the following address: [https://account.4d.com/us/login.shtml](https://account.4d.com/us/login.shtml) ![](assets/en/getStart/activ1.png) -Entrez ensuite le numéro de licence du produit à activer. Ce numéro se trouve dans l'e-mail de livraison ou le certificat d'authenticité reçu par courrier. +Then enter the license number of the product you want to activate. This number is provided by email or by mail after a product is purchased. ![](assets/en/getStart/activ2.png) -### Activation différée +### Deferred Activation -Si vous ne pouvez pas utiliser [l'activation immédiate](#instant-activation) parce que votre ordinateur n'a pas d'accès Internet, vous pouvez effectuer une activation différée comme décrit dans les étapes suivantes. +If you are unable to use [instant activation](#instant-activation) because your computer does not have internet access, please proceed to deferred activation using the following steps. -1. Dans la fenêtre du Gestionnaire de licences de 4D accessible depuis le menu Aide, sélectionnez l'onglet **Activation différée**. -2. Entrez votre Numéro de licence ainsi que votre adresse E-mail, puis cliquez sur **Générer le fichier...** afin de créer le fichier d'ID (*reg.txt*). +1. In the License Manager window, select the **Deferred Activation** tab. +2. Enter the License Number and your e-mail address, then click **Generate file** to create the ID file (*reg.txt*). ![](assets/en/getStart/activ3.png) -3. Enregistrez le fichier *reg.txt* sur un support USB puis connectez ce support à un ordinateur qui a un accès Internet. -4. Depuis la machine qui a un accès Internet, connectez-vous sur [https://activation.4d.com](https://activation.4d.com). -5. Dans la page Web, cliquez sur le bouton **Parcourir...** et sélectionnez le fichier *reg.txt* généré lors des étapes 3 et 4 ; puis cliquez sur le bouton **Activer**. -6. Téléchargez le(s) fichier(s) de licence. +3. Save the *reg.txt* file to a USB drive and take it to a computer that has internet access. +4. On the machine with internet access, login to [https://activation.4d.com](https://activation.4d.com). +5. On the Web page, click on the **Choose File...** button and select the *reg.txt* file from steps 3 and 4; then click on the **Activate** button. +6. Download the serial file(s). ![](assets/en/getStart/activ4.png) -7. Enregistrez le ou les fichier(s) *license4d* sur un support partagé et transférez-le(s) sur la machine 4D utilisée lors de l'étape 1. -8. De retour sur la machine avec 4D, toujours dans l'écran **Activation différée**, cliquez sur le bouton **Suivant** ; puis cliquez sur le bouton **Charger...** et sélectionnez un fichier *license4d* depuis le media partagé utilisé à l'étape 7. +7. Save the *license4d* file(s) on a shared media and transfer them back to the 4D machine from step 1. +8. Now back on the machine with 4D, still on the **Deferred Activation** page, click **Next**; then click the **Load...** button and select a *license4d* file from the shared media from step 7. ![](assets/en/getStart/activ5.png) -Une fois le fichier de licence chargé, cliquez sur le bouton **Suivant**. +With the license file loaded, click on **Next**. ![](assets/en/getStart/activ6.png) -9. Cliquez sur le bouton **Ajouter N°** pour ajouter une autre licence. Répétez ces étapes jusqu'à ce que toutes les licences téléchargées à l'étape 6 aient été intégrées. +9. Click on the **Add N°** button to add another license. Repeat these steps until all licenses from step 6 have been integrated. -Votre application 4D est désormais activée. +Your 4D application is now activated. -### Activation d’urgence +### Emergency Activation -Ce mode permet l’activation exceptionnelle et temporaire de l’application 4D (5 jours maximum) sans connexion au site Internet de 4D. Cette activation ne peut être utilisée qu’une seule fois. +This mode can be used for a special temporary activation of 4D (5 days maximum) without connecting to the 4D Web site. This activation can only be used one time. -## Ajouter des licences +## Adding licenses -Vous pouvez à tout moment ajouter de nouvelles licences, par exemple pour étendre les capacités de votre application. +You can add new licenses, for example to extend the capacities of your application, at any time. -Choisissez la commande **Gestionnaire de licences...** dans le menu **Aide** de l’application 4D ou 4D Server puis cliquez sur le bouton **Actualiser** : +Choose the **License Manager...** command from the **Help** menu of the 4D or 4D Server application, then click on the **Refresh** button: ![](assets/en/getStart/licens1.png) -Ce bouton vous connecte à notre base clients et active automatiquement toutes les licences nouvelles ou mises à jour liées à la licence courante (la licence courante est affichée en **gras** dans la liste des Licences actives). Vous devrez simplement saisir vos identifiants 4D (compte et mot de passe). Vous devrez simplement saisir vos identifiants 4D (compte et mot de passe). +This button connects you to our customer database and automatically activates any new or updated licenses related to the current license (the current license is displayed in **bold** in the "Active Licenses" list). You will just be prompted for your user account and password. -- Si vous avez acheté des expansions supplémentaires pour un 4D Server, vous n'avez pas besoin de saisir de numéro -- cliquez simplement sur **Actualiser**. -- A la première activation d'un 4D Server, vous devez uniquement saisir le numéro du serveur et toutes les licences d'expansion associées sont automatiquement affectées. +- If you purchased additional expansions for a 4D Server, you do not need to enter any license number -- just click **Refresh**. +- At the first activation of a 4D Server, you just need to enter the server number and all the purchased expansions are automatically assigned. -Vous pouvez utiliser le bouton **Actualiser** dans les contextes suivants : +You can use the **Refresh** button in the following contexts: -- Lorsque vous avez acquis une expansion supplémentaire et souhaitez l'activer, -- Lorsque vous voulez mettre à jour un numéro de licence temporaire ayant expiré (Partenaires ou évolutions). +- When you have purchased an additional expansion and want to activate it, +- When you need to update an expired temporary number (Partners or evolutions). ## 4D Online Store -Sur le site web 4D Store, vous pouvez commander, mettre à jour, étendre et gérer vos produits 4D. Vous pouvez vous connecter au store à l'adresse suivante : [https://store.4d.com/fr/](https://store.4d.com/us/) (veuillez sélectionner votre pays). +In 4D Store, you can order, upgrade, extend, and/or manage 4D products. You can reach the store at the following address: [https://store.4d.com/us/](https://store.4d.com/us/) (you will need to select your country). -Cliquez sur **Se connecter** pour vous identifier à l'aide de votre compte existant ou sur **Nouveau compte** pour en créer un nouveau, puis suivez les instructions à l'écran. +Click **Login** to sign in using your existing account or **New Account** to create a new one, then follow the on-screen instructions. -### Gestion des licences +### License Management -Après vous être identifié, vous pouvez cliquer sur le lien **Liste de mes licences** en haut de la partie droite de la fenêtre : +After you log in, you can click on **License list** at the top right of the page: ![](assets/en/getStart/licens2.png) -Vous pouvez ensuite gérer vos licences en les affectant à des projets. +Here you can manage your licenses by assigning them to projects. -Sélectionnez la licence que vous souhaitez dans la liste, puis cliquez sur **Lier à un projet:

      +Select the appropriate license from the list then click **Link to a project... >**: ![](assets/en/getStart/licens3.png) -Vous pouvez sélectionner un projet existant ou créer un nouveau : +You can either select an existing project or create a new one: ![](assets/en/getStart/licens4.png) ![](assets/en/getStart/licens5.png) -Les projets vous permettent d'organiser vos licences comme vous le souhaitez : +You can use projects to organize your licenses according to your needs: ![](assets/en/getStart/licens6.png) -## Dépannage +## Troubleshooting -En cas d’échec du processus d’installation ou d’activation, veuillez consulter le tableau suivant, présentant les causes de dysfonctionnements les plus fréquentes : +If the installation or activation process fails, please check the following table, which gives the most common causes of malfunctioning: -| Symptômes | Causes possibles | Solution(s) | -| ----------------------------------------------------------------------- | ----------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | -| Impossible de télécharger le produit depuis le site Internet de 4D | Site Internet indisponible, antivirus, firewall | 1- Réessayez ultérieurement OU 2- Désactivez temporairement votre antivirus ou votre firewall. | -| Impossible d’installer le produit sur le disque (installation refusée). | Droits d’accès utilisateur insuffisants | Ouvrez une session avec des droits d’accès permettant l’installation d’applications (accès administrateur) | -| Echec de l’activation en ligne | Antivirus, firewall, proxy | 1- Désactivez temporairement votre antivirus ou votre firewall OU 2- Utilisez l’activation différée (non disponible avec les licences des versions "R") | +| Symptoms | Possible causes | Solution(s) | +| ------------------------------------------------------------- | ---------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- | +| Impossible to download product from 4D Internet site | Internet site unavailable, antivirus application, firewall | 1- Try again later OR 2- Temporarily disable your antivirus application or your firewall. | +| Impossible to install product on disk (installation refused). | Insufficient user access rights | Open a session with access rights allowing you to install applications (administrator access) | +| Failure of on-line activation | Antivirus application, firewall, proxy | 1- Temporarily disable your antivirus application or your firewall OR 2- Use deferred activation (not available with licenses for "R" versions) | -Si ces informations ne vous permettent pas de résoudre votre problème, veuillez contacter 4D ou votre distributeur local. +If this information does not help you resolve your problem, please contact 4D or your local distributor. ## Contacts -Pour toute question relative à l’installation ou l’activation de votre produit, veuillez contacter 4D Sas ou votre distributeur local. +For any questions about the installation or activation of your product, please contact 4D, Inc. or your local distributor. -Pour la France : +For the US: -- Web : [http://www.4d.com/fr/](https://us.4d.com/4d-technical-support) -- Téléphone : 0892 68 09 97 (0,34 Euro Ttc/Min) +- Web: [https://us.4d.com/4d-technical-support](https://us.4d.com/4d-technical-support) +- Telephone: 1-408-557-4600 -Pour le Royaume-Uni : +For the UK: - Web: [https://uk.4d.com/4d-technical-support](https://uk.4d.com/4d-technical-support) -- Téléphone : 01625 536178 +- Telephone: 01625 536178 From 17c59e89bce5d645243c3515218af8195bfcbd51 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:26:46 +0100 Subject: [PATCH 213/260] New translations CryptoKey.md (French) --- website/translated_docs/fr/API/CryptoKey.md | 238 ++++++++++---------- 1 file changed, 119 insertions(+), 119 deletions(-) diff --git a/website/translated_docs/fr/API/CryptoKey.md b/website/translated_docs/fr/API/CryptoKey.md index f10dd31d052151..59d43b5a757b0c 100644 --- a/website/translated_docs/fr/API/CryptoKey.md +++ b/website/translated_docs/fr/API/CryptoKey.md @@ -1,28 +1,28 @@ --- id: cryptoClass -title: Classe CryptoKey +title: CryptoKey Class --- ## Aperçu -La classe `CryptoKey` du langage 4D contient une paire de clés de chiffrement asymétrique. +The `CryptoKey` class in the 4D language encapsulates an asymetric encryption key pair. -Cette classe est disponible depuis le "class store" de `4D`. +This class is available from the `4D` class store. -### Propriétés de l'objet `cryptoKey` +### `cryptoKey` object properties -Un objet `cryptoKey` est instancié par la méthode [4D.CryptoKey.new](#4dcryptokeynew). Ses propriétés sont les suivantes (en lecture seule) : +A `cryptoKey` object is instanciated by the [4D.CryptoKey.new](#4dcryptokeynew) method. It has the following properties (all are read-only): -| Propriété | Type | Description | -| --------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------- | -| type | Texte | Nom du type de clé. Par exemple : "ECDSA" ou "RSA". | -| size | integer | Défini uniquement pour les clés RSA : la taille de la clé est exprimée en octets. Généralement 2048 | -| curve | Texte | Définie uniquement pour les clés ECDSA : le nom de courbe normalisé de la clé. Par exemple : "prime256v1", "secp384r1" or "secp521r1" | +| Property | Type | Description | +| -------- | ------- | ------------------------------------------------------------------------------------------------------------------------ | +| type | text | Name of the key type. For example: "ECDSA" or "RSA". | +| size | integer | Defined only for RSA keys: the size of the key in bits. Typically 2048 | +| curve | text | Defined only for ECDSA keys: the normalised curve name of the key. For example: "prime256v1", "secp384r1" or "secp521r1" | -### Exemple +### Example -L'exemple suivant illustre la signature et la vérification d'un message à l'aide d'une nouvelle paire de clés ECDSA, afin de créer, par exemple, un token Web JSON ES256. +The following example signs and verifies a message using a new ECDSA key pair, for example in order to make a ES256 JSON Web token. ```4d // Generate a new ECDSA key pair @@ -39,187 +39,187 @@ ASSERT($status.success) ## 4D.CryptoKey.new() -
      Historique +
      History -| Version | Modifications | -| ------- | ------------- | -| v18 R4 | Ajoutées | +| Version | Changes | +| ------- | ------- | +| v18 R4 | Added |
      #### 4D.CryptoKey.new(settings) -> keyPair -| Paramètres | Propriété | Type | | Description | -| ---------- | --------- | ------- | -- | ------------------------------------------------------------------------------------------------------------------------------ | -| settings | | object | -> | Paramètres pour générer ou charger une paire de clés | -| | type | Texte | | Type de clé : "RSA", "ECDSA", ou "PEM" (voir ci-dessous) | -| | size | integer | | Taille de la clé RSA en octets. 2048 par défaut | -| | curve | Texte | | nom de la courbe ECDSA. Généralement "prime256v1" pour ES256 (par défaut), "secp384r1" pour ES384, "secp521r1" pour ES512 | -| | pem | Texte | | Définition PEM d'une clé de chiffrement à charger. Si la clé est une clé privée, la clé publique RSA ou ECDSA en sera déduite. | -| | | | | | -| keyPair | | object | <- | Objet contenant une paire de clés de chiffrement | +| Parameter | Property | Type | | Description | +| --------- | -------- | ------- | -- | ------------------------------------------------------------------------------------------------------------------------------ | +| settings | | object | -> | Settings to generate or load a key pair | +| | type | text | | Type of the key: "RSA", "ECDSA", or "PEM" (see below) | +| | size | integer | | Size of RSA key in bits. 2048 by default | +| | curve | text | | name of ECDSA curve. Usually "prime256v1" for ES256 (default), "secp384r1" for ES384, "secp521r1" for ES512 | +| | pem | text | | PEM definition of an encryption key to load. If the key is a private key, the RSA or ECDSA public key will be deduced from it. | +| | | | | | +| keyPair | | object | <- | Object encapsulating an encryption key pair | -Cette méthode crée un nouvel objet contenant une paire de clés de chiffrement, fondée sur le paramètre `settings`. Elle permet de générer une nouvelle clé RSA ou ECDSA, ou de charger une paire de clés existante à partir de la définition PEM. +This method creates a new object encapsulating an encryption key pair, based upon the `settings` object parameter. It allows to generate a new RSA or ECDSA key, or to load an existing key pair from a PEM definition. -Passez le type de clé dans la propriété `type` du paramètre `settings` : +Pass the type of key in the `type` property of the `settings` parameter: -- "RSA" : génère une paire de clés RSA, à l'aide de `settings.size` pour la taille. -- "ECDSA": génère une paire de clés Elliptic Curve Digital Signature Algorithm, à l'aide de `settings.curve` pour la propriété curve. A noter que les clés ECDSA ne peuvent pas être utilisées pour le chiffrement, mais uniquement pour la signature. -- "PEM" : charge une définition de paire de clés au format PEM, à l'aide de `settings.pem`. +- "RSA": generates an RSA key pair, using `settings.size` as size. +- "ECDSA": generates an Elliptic Curve Digital Signature Algorithm key pair, using `settings.curve` as curve. Note that ECDSA keys cannot be used for encryption but only for signature. +- "PEM": loads a key pair definition in PEM format, using `settings.pem`. -L'objet `keyPair` qui en résulte est un objet partagé et peut être alors utilisé par de multiples traitements 4D simultanés. +The resulting `keyPair` object is a shared object and can therefore be used by multiple 4D processes simultaneously. ## cryptoKey.getPrivateKey() -
      Historique +
      History -| Version | Modifications | -| ------- | ------------- | -| v18 R4 | Ajoutées | +| Version | Changes | +| ------- | ------- | +| v18 R4 | Added |
      #### cryptoKey.getPrivateKey() -> privateKey -| Paramètres | Propriété | Type | | Description | -| ---------- | --------- | ----- | -- | -------------------------- | -| | | | | | -| privateKey | | Texte | <- | Clé primaire au format PEM | +| Parameter | Property | Type | | Description | +| ---------- | -------- | ---- | -- | ------------------------- | +| | | | | | +| privateKey | | text | <- | Private key in PEM format | -Cette méthode retourne la clé privée de l'objet `cryptoKey` au format PEM, ou une chaine vide si aucune n'est disponible. +This method returns the private key of the `cryptoKey` object in PEM format, or an empty string if none is available. ## cryptoKey.getPublicKey() -
      Historique +
      History -| Version | Modifications | -| ------- | ------------- | -| v18 R4 | Ajoutées | +| Version | Changes | +| ------- | ------- | +| v18 R4 | Added |
      #### cryptoKey.getPublicKey() -> publicKey -| Paramètres | Propriété | Type | | Description | -| ---------- | --------- | ----- | -- | -------------------------- | -| | | | | | -| publicKey | | Texte | <- | Clé publique au format PEM | +| Parameter | Property | Type | | Description | +| --------- | -------- | ---- | -- | ------------------------ | +| | | | | | +| publicKey | | text | <- | Public key in PEM format | -Cette méthode retourne la clé publique de l'objet `cryptoKey` au format PEM, ou une chaine vide si aucune n'est disponible. +This method returns the public key of the `cryptoKey` object in PEM format, or an empty string if none is available. ## cryptoKey.sign() -
      Historique +
      History -| Version | Modifications | -| ------- | ------------- | -| v18 R4 | Ajoutées | +| Version | Changes | +| ------- | ------- | +| v18 R4 | Added |
      #### cryptoKey.sign(message;options) -> signature -| Paramètres | Propriété | Type | | Description | -| ---------- | --------- | ------- | -- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| message | | Texte | -> | Chaîne message à signer | -| options | | object | -> | Options de signature | -| | hash | Texte | | Algorithme de hachage à utiliser. For example: "SHA256", "SHA384", or "SHA512". Lorsqu'elle est utilisée pour produire un JWT, la taille du hachage doit correspondre à la taille de l'algorithme PS@, ES@, RS@ ou PS@ | -| | pss | boolean | | Utilise le Probabilistic Signature Scheme (PSS). Ignoré si la clé n'est pas une clé RSA. Passez `true` lors de la production d'un JWT pour l'algorithme PS@ | -| | encoding | Texte | | Représentation à utiliser pour la signature. Valeurs possibles : "Base64" ou "Base64URL". La valeur par défaut est "Base64". | -| | | | | | -| signature | | Texte | <- | Signature résultante en représentation Base64 ou Base64URL, selon l'option "encoding" | +| Parameter | Property | Type | | Description | +| --------- | -------- | ------- | -- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| message | | text | -> | Message string to sign | +| options | | object | -> | Signing options | +| | hash | text | | Digest algorithm to use. For example: "SHA256", "SHA384", or "SHA512". When used to produce a JWT, the hash size must match the PS@, ES@, RS@, or PS@ algorithm size | +| | pss | boolean | | Use Probabilistic Signature Scheme (PSS). Ignored if the key is not an RSA key. Pass `true` when producing a JWT for PS@ algorithm | +| | encoding | text | | Representation to be used for result signature. Possible values: "Base64" or "Base64URL". Default is "Base64". | +| | | | | | +| signature | | text | <- | Resulting signature in Base64 or Base64URL representation, depending on "encoding" option | -Cette méthode signe la représentation utf8 d'une chaîne `message` à l'aide des clés d'objet `cryptoKey` et des `options` fournies. Elle retourne sa signature au format base64 ou base64URL, selon la valeur de l'attribut `options.encoding` que vous avez passé. +This method signs the utf8 representation of a `message` string using the `cryptoKey` object keys and provided `options`. It returns its signature in base64 or base64URL format, depending on the value of the `options.encoding` attribute you passed. -La `cryptoKey` doit contenir une clé **privée** valide. +The `cryptoKey` must contain a valid **private** key. ## cryptoKey.verify() -
      Historique +
      History -| Version | Modifications | -| ------- | ------------- | -| v18 R4 | Ajoutées | +| Version | Changes | +| ------- | ------- | +| v18 R4 | Added |
      #### cryptoKey.verify(message;signature;options) -> status -| Paramètres | Propriété | Type | | Description | -| ---------- | --------- | ---------- | -- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| message | | Texte | -> | Chaîne message utilisée pour générer la signature | -| signature | | Texte | -> | Signature à vérifier, en représentation Base64 ou Base64URL, selon l'option "encoding" | -| options | | object | -> | Options de signature | -| | hash | Texte | | Algorithme de hachage à utiliser. For example: "SHA256", "SHA384", or "SHA512". Lorsqu'elle est utilisée pour produire un JWT, la taille du hachage doit correspondre à la taille de l'algorithme PS@, ES@, RS@ ou PS@ | -| | pss | boolean | | Utilise le Probabilistic Signature Scheme (PSS). Ignoré si la clé n'est pas une clé RSA. Passez `true` lors de la vérification d'un JWT pour l'algorithme PS@ | -| | encoding | Texte | | Représentation de la signature fournie. Valeurs possibles : "Base64" ou "Base64URL". La valeur par défaut est "Base64". | -| | | | | | -| status | | object | <- | Résultat de la vérification | -| | success | boolean | | True si la signature correspond au message | -| | errors | collection | | Si `success` est mis sur `false`, il peut contenir une collection d'erreurs | +| Parameter | Property | Type | | Description | +| --------- | -------- | ---------- | -- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| message | | text | -> | Message string that was used to produce the signature | +| signature | | text | -> | Signature to verify, in Base64 or Base64URL representation, depending on "encoding" option | +| options | | object | -> | Signing options | +| | hash | text | | Digest algorithm to use. For example: "SHA256", "SHA384", or "SHA512". When used to produce a JWT, the hash size must match the PS@, ES@, RS@, or PS@ algorithm size | +| | pss | boolean | | Use Probabilistic Signature Scheme (PSS). Ignored if the key is not an RSA key. Pass `true` when verifying a JWT for PS@ algorithm | +| | encoding | text | | Representation of provided signature. Possible values are "Base64" or "Base64URL". Default is "Base64". | +| | | | | | +| status | | object | <- | Result of the verification | +| | success | boolean | | True if the signature matches the message | +| | errors | collection | | If `success` is `false`, may contain a collection of errors | -Cette méthode vérifie et compare la signature base64 par rapport à la représentation utf8 du `message` à l'aide des clés d'objet `cryptoKey` et des `options` fournies. +This method verifies the base64 signature against the utf8 representation of `message` using the `cryptoKey` object keys and provided `options`. -La méthode renvoie un objet `status` avec la propriété `success` définie sur `true` si le `message` a pu être déchiffré avec succès (la signature est correspondante). +The method returns a `status` object with `success` property set to `true` if `message` could be successfully verified (i.e. the signature matches). -Si la signature n'a pas pu être vérifiée car elle n'a pas été signée avec le même `message`, la clé ou l'algorithme, l'objet `status` retourné contient une collection d'erreurs dans `status.errors`. +In case the signature couldn't be verified because it was not signed with the same `message`, key or algorithm, the `status` object being returned contains an error collection in `status.errors`. -La `cryptoKey` doit contenir une clé **publique** valide. +The `cryptoKey` must contain a valid **public** key. ## cryptoKey.encrypt() -
      Historique +
      History -| Version | Modifications | -| ------- | ------------- | -| v18 R4 | Ajoutées | +| Version | Changes | +| ------- | ------- | +| v18 R4 | Added |
      #### cryptoKey.encrypt(message;options) -> result -| Paramètres | Propriété | Type | | Description | -| ---------- | ----------------- | ------ | -- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| message | | Texte | -> | Chaine message à chiffrer à l'aide de options.encodingDecrypted et encrypted. | -| options | | object | -> | Options de chiffrement | -| | hash | Texte | | Algorithme de hachage à utiliser. For example: "SHA256", "SHA384", or "SHA512". | -| | encodingEncrypted | Texte | | Chiffrement utilisé pour convertir le message chiffré binaire en chaîne de résultat. Peut être "Base64" ou "Base64URL". La valeur par défaut est "Base64". | -| | encodingDecrypted | Texte | | Chiffrement utilisé pour convertir le paramètre `message` en représentation binaire à chiffrer. Peut être "UTF-8", "Base64" ou "Base64URL". La valeur par défaut est "UTF-8". | -| | | | | | -| result | | Texte | <- | Message chiffré et encodé à l'aide de `options.encodingEncrypted` | +| Parameter | Property | Type | | Description | +| --------- | ----------------- | ------ | -- | --------------------------------------------------------------------------------------------------------------------------------------------------------- | +| message | | text | -> | Message string to be encoded using options.encodingDecrypted and encrypted. | +| options | | object | -> | Encoding options | +| | hash | text | | Digest algorithm to use. For example: "SHA256", "SHA384", or "SHA512". | +| | encodingEncrypted | text | | Encoding used to convert the binary encrypted message into the result string. Can be "Base64", or "Base64URL". Default is "Base64". | +| | encodingDecrypted | text | | Encoding used to convert the `message` parameter into the binary representation to encrypt. Can be "UTF-8", "Base64", or "Base64URL". Default is "UTF-8". | +| | | | | | +| result | | text | <- | Message encrypted and encoded using the `options.encodingEncrypted` | -Cette méthode déchiffre le paramètre de `message` à l'aide de la clé **privée**. L'algorithme utilisé dépend du type de clé. +This method encrypts the `message` parameter using the **public** key. The algorithm used depends on the type of the key. -La clé doit être une clé RSA, l'algorithme est RSA-OAEP (voir [RFC 3447](https://tools.ietf.org/html/rfc3447)). +The key must be a RSA key, the algorithm is RSA-OAEP (see [RFC 3447](https://tools.ietf.org/html/rfc3447)). ## cryptoKey.decrypt() -
      Historique +
      History -| Version | Modifications | -| ------- | ------------- | -| v18 R4 | Ajoutées | +| Version | Changes | +| ------- | ------- | +| v18 R4 | Added |
      #### cryptoKey.decrypt(message;options) -> status -| Paramètres | Propriété | Type | | Description | -| ---------- | ----------------- | ---------- | -- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| message | | Texte | -> | Chaine message à décoder à l'aide de options.encodingEncrypted et decrypted. | -| options | | object | -> | Options de décodage | -| | hash | Texte | | Algorithme de hachage à utiliser. For example: "SHA256", "SHA384", or "SHA512". | -| | encodingEncrypted | Texte | | Chiffrement utilisé pour convertir le paramètre `message` en représentation binaire à déchiffrer. Peut être "Base64" ou "Base64URL". La valeur par défaut est "Base64". | -| | encodingDecrypted | Texte | | Encodage utilisé pour convertir le message binaire déchiffré en chaîne de résultat. Peut être "UTF-8", "Base64" ou "Base64URL". La valeur par défaut est "UTF-8". | -| | | | | | -| status | | object | <- | Résultat | -| | success | boolean | | True si le message a été déchiffré avec succès | -| | result | Texte | | Message déchiffré et décodé à l'aide de `options.encodingDecrypted` | -| | errors | collection | | Si `success` est mis sur `false`, il peut contenir une collection d'erreurs | +| Parameter | Property | Type | | Description | +| --------- | ----------------- | ---------- | -- | ------------------------------------------------------------------------------------------------------------------------------------------------ | +| message | | text | -> | Message string to be decoded using options.encodingEncrypted and decrypted. | +| options | | object | -> | Decoding options | +| | hash | text | | Digest algorithm to use. For example: "SHA256", "SHA384", or "SHA512". | +| | encodingEncrypted | text | | Encoding used to convert the `message` parameter into the binary representation to decrypt. Can be "Base64" or "Base64URL". Default is "Base64". | +| | encodingDecrypted | text | | Encoding used to convert the binary decrypted message into the result string. Can be "UTF-8", "Base64", or "Base64URL". Default is "UTF-8". | +| | | | | | +| status | | object | <- | Result | +| | success | boolean | | True if the message has been successfully decrypted | +| | result | text | | Message decrypted and decoded using the `options.encodingDecrypted` | +| | errors | collection | | If `success` is `false`, may contain a collection of errors | -Cette méthode chiffre le paramètre `message` à l'aide de la clé **publique**. L'algorithme utilisé dépend du type de clé. +This method decrypts the `message` parameter using the **private** key. The algorithm used depends on the type of the key. -La clé doit être une clé RSA, l'algorithme est RSA-OAEP (voir [RFC 3447](https://tools.ietf.org/html/rfc3447)). +The key must be a RSA key, the algorithm is RSA-OAEP (see [RFC 3447](https://tools.ietf.org/html/rfc3447)). -La méthode renvoie un objet "status" avec la propriété `success` définie sur `true` si le `message` a pu être déchiffré avec succès. +The method returns a status object with `success` property set to `true` if the `message` could be successfully decrypted. -Si le `message` n'a pas pu être déchiffré car il n'a pas été chiffré avec la même clé ou le même algorithme, l'objet `status` retourné contient une collection d'erreurs dans `status.errors`. +In case the `message` couldn't be decrypted because it was not encrypted with the same key or algorithm, the `status` object being returned contains an error collection in `status.errors`. From 1dd109e2b26b8ab6386faee813abc7ce4e1987fa Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:26:48 +0100 Subject: [PATCH 214/260] New translations dsMapping.md (French) --- website/translated_docs/fr/ORDA/dsMapping.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/website/translated_docs/fr/ORDA/dsMapping.md b/website/translated_docs/fr/ORDA/dsMapping.md index 7ff5709a31dfd5..0efb9de3638aab 100644 --- a/website/translated_docs/fr/ORDA/dsMapping.md +++ b/website/translated_docs/fr/ORDA/dsMapping.md @@ -104,7 +104,7 @@ For example, consider the following table in the 4D structure: ![](assets/en/ORDA/companyTable.png) -The `Company` table is automatically available as a dataclass in the `ds` datastore. Vous pouvez écrire : +The `Company` table is automatically available as a dataclass in the `ds` datastore. You can write: ```4d var $compClass : cs.Company //declares a $compClass object variable of the Company class @@ -133,9 +133,9 @@ OB GET PROPERTY NAMES(ds.Employee;$prop) ``` -### Attribut +### Attribute -Dataclass properties are attribute objects describing the underlying fields or relations. Par exemple: +Dataclass properties are attribute objects describing the underlying fields or relations. For example: ```4d $nameAttribute:=ds.Company.name //reference to class attribute @@ -200,7 +200,7 @@ The entity properties are however enumerable: An entity selection is an object containing one or more reference(s) to entities belonging to the same dataclass. It is usually created as a result of a query or returned from a relation attribute. An entity selection can contain 0, 1 or X entities from the dataclass -- where X can represent the total number of entities contained in the dataclass. -Exemple : +Example: ```4d var $e : cs.EmployeeSelection //declares a $e object variable of the EmployeeSelection class type From ac787f8ebc6d400321362dec0ad6620e95e1606d Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:26:51 +0100 Subject: [PATCH 215/260] New translations entities.md (French) --- website/translated_docs/fr/ORDA/entities.md | 271 ++++++++++---------- 1 file changed, 136 insertions(+), 135 deletions(-) diff --git a/website/translated_docs/fr/ORDA/entities.md b/website/translated_docs/fr/ORDA/entities.md index 89437761b527dd..877d40accad16e 100644 --- a/website/translated_docs/fr/ORDA/entities.md +++ b/website/translated_docs/fr/ORDA/entities.md @@ -1,71 +1,71 @@ --- id: entities -title: Travailler avec des données +title: Working with data --- -Dans ORDA, vous accédez aux données via des [entités](dsMapping.md#entity) (entities) et des [sélections d'entités](dsMapping.md#entity-selection) (entity selections). Ces objets vous permettent de créer, mettre à jour, rechercher ou trier les données du datastore. +In ORDA, you access data through [entities](dsMapping.md#entity) and [entity selections](dsMapping.md#entity-selection). These objects allow you to create, update, query, or sort the data of the datastore. -## Créer une entité +## Creating an entity -Il existe deux façons de créer une nouvelle entité dans une dataclass : +There are two ways to create a new entity in a dataclass: -* Les entités étant des références à des enregistrements de base de données, vous pouvez créer des entités en créant des enregistrements en utilisant le langage 4D "classique", puis les référencer avec des méthodes ORDA telles que `entity.next()` ou `entitySelection.first()`. -* Vous pouvez également créer une entité à l'aide de la méthode `dataClass.new()`. +* Since entities are references to database records, you can create entities by creating records using the "classic" 4D language and then reference them with ORDA methods such as `entity.next( )` or `entitySelection.first( )`. +* You can also create an entity using the `dataClass.new( )` method. -Gardez à l'esprit que l'entité est créée uniquement en mémoire. Si vous souhaitez l'ajouter à la banque de données, vous devez appeler la méthode `entity.save ()`. +Keep in mind that the entity is only created in memory. If you want to add it to the datastore, you must call the `entity.save( )` method. -Les attributs de l'entité sont directement disponibles en tant que propriétés de l'objet entité. Pour plus d'informations, reportez-vous à [Utilisation des attributs d'entité](#using-entity-attributes). +Entity attributes are directly available as properties of the entity object. For more information, please refer to [Using entity attributes](#using-entity-attributes). -Par exemple, nous voulons créer une nouvelle entité dans la dataclass "Employee" dans le datastore courant avec "John" et "Dupont" affectés aux attributs de prénom et de nom : +For example, we want to create a new entity in the "Employee" dataclass in the current datastore with "John" and "Dupont" assigned to the firstname and name attributes: ```4d var $myEntity : cs.EmployeeEntity -$myEntity:=ds.Employee.new() //Créer un nouvel objet de type entité -$myEntity.name:="Dupont" //assigner 'Dupont' à l'attribut 'name' -$myEntity.firstname:="John" //assigner 'John' à l'attribut 'firstname' -$myEntity.save() //sauvegarder l'entité +$myEntity:=ds.Employee.new() //Create a new object of the entity type +$myEntity.name:="Dupont" //assign 'Dupont' to the 'name' attribute +$myEntity.firstname:="John" //assign 'John' to the 'firstname' attribute +$myEntity.save() //save the entity ``` -> Une entité est définie uniquement dans le processus où elle a été créée. Vous ne pouvez pas, par exemple, stocker une référence à une entité dans une variable interprocess et l'utiliser dans un autre processus. +> An entity is defined only in the process where it was created. You cannot, for example, store a reference to an entity in an interprocess variable and use it in another process. -## Entités et références +## Entities and references -Une entité contient une référence à un enregistrement 4D. Différentes entités peuvent référencer le même enregistrement 4D. De plus, comme une entité peut être stockée dans une variable objet 4D, différentes variables peuvent contenir une référence à la même entité. +An entity contains a reference to a 4D record. Different entities can reference the same 4D record. Also, since an entity can be stored in a 4D object variable, different variables can contain a reference to the same entity. -Si vous exécutez le code suivant : +If you execute the following code: ```4d var $e1; $e2 : cs.EmployeeEntity - $e1:=ds.Employee.get(1) //accéder à l'employé avec ID 1 + $e1:=ds.Employee.get(1) //access the employee with ID 1 $e2:=$e1 $e1.name:="Hammer" - //les variables $e1 et $e2 partagent la référence à la même entité - //$e2.name contient "Hammer" + //both variables $e1 and $e2 share the reference to the same entity + //$e2.name contains "Hammer" ``` -Ceci est illustré par le graphique suivant : +This is illustrated by the following graphic: ![](assets/en/ORDA/entityRef1.png) -Maintenant, si vous exécutez : +Now if you execute: ```4d var $e1; $e2 : cs.EmployeeEntity $e1:=ds.Employee.get(1) $e2:=ds.Employee.get(1) $e1.name:="Hammer" - //la variable $e1 contient une référence vers une entité - //variable $e2 contient une autre référence vers une autre entité - //$e2.name contient "smith" + //variable $e1 contains a reference to an entity + //variable $e2 contains another reference to another entity + //$e2.name contains "smith" ``` -Ceci est illustré par le graphique suivant : +This is illustrated by the following graphic: ![](assets/en/ORDA/entityRef2.png) -A noter cependant que les entités font référence au même enregistrement. Dans tous les cas, si vous appelez la méthode `entity.save()`, l'enregistrement sera mis à jour (sauf en cas de conflit, voir [Verrouillage d'entité](#entity-locking)). +Note however that entities refer to the same record. In all cases, if you call the `entity.save( )` method, the record will be updated (except in case of conflict, see [Entity locking](#entity-locking)). -In fact, `$e1` and `$e2` are not the entity itself, but a reference to the entity. It means that you can pass them directly to any function or method, and it will act like a pointer, and faster than a 4D pointer. Par exemple: +In fact, `$e1` and `$e2` are not the entity itself, but a reference to the entity. It means that you can pass them directly to any function or method, and it will act like a pointer, and faster than a 4D pointer. For example: ```4d For each($entity;$selection) @@ -73,7 +73,7 @@ In fact, `$e1` and `$e2` are not the entity itself, but a reference to the entit End for each ``` -Et la méthode est : +And the method is: ```4d $entity:=$1 @@ -84,113 +84,113 @@ Et la méthode est : $entity.lastname:=$name ``` -Vous pouvez gérer les entités comme n'importe quel autre objet dans 4D et passer leurs références directement en tant que [paramètres](Concepts/parameters.md). -> Avec les entités, il n'y a pas de notion de "enregistrement courant" comme dans le langage classique de 4D. Vous pouvez utiliser autant d'entités que nécessaire, en même temps. Il n'existe pas non plus de verrouillage automatique d'une entité (voir [Verrouillage d'une entité](#entity-locking)). When an entity is loaded, it uses the [lazy loading](glossary.md#lazy-loading) mechanism, which means that only the needed information is loaded. Néanmoins, en mode client/serveur, l'entité peut être automatiquement chargée directement si nécessaire. +You can handle entities like any other object in 4D and pass their references directly as [parameters](Concepts/parameters.md). +> With the entities, there is no concept of "current record" as in the classic 4D language. You can use as many entities as you need, at the same time. There is also no automatic lock on an entity (see [Entity locking](#entity-locking)). When an entity is loaded, it uses the [lazy loading](glossary.md#lazy-loading) mechanism, which means that only the needed information is loaded. Nevertheless, in client/server, the entity can be automatically loaded directly if necessary. -## Utilisation des attributs d'entités +## Using entity attributes -Les attributs d'entité stockent les données et mappent les champs correspondants dans la table correspondante. Les attributs d'entité du type de stockage peuvent être définis ou obtenus sous forme de propriétés simples de l'objet entité, tandis que l'entité de type **relatedEntity** ou **relatedEntities** renverra une entité ou une sélection d'entité. -> Pour plus d'informations sur le type d'attribut, reportez-vous au paragraphe [Attributs de stockage et de relation](dsMapping.md#storage-and-relation-attributes). +Entity attributes store data and map corresponding fields in the corresponding table. Entity attributes of the storage kind can be set or get as simple properties of the entity object, while entity of the **relatedEntity** or **relatedEntities** kind will return an entity or an entity selection. +> For more information on the attribute kind, please refer to the [Storage and Relation attributes](dsMapping.md#storage-and-relation-attributes) paragraph. -Par exemple, pour définir un attribut de stockage : +For example, to set a storage attribute: ```4d $entity:=ds.Employee.get(1) //get employee attribute with ID 1 $name:=$entity.lastname //get the employee name, e.g. "Smith" $entity.lastname:="Jones" //set the employee name ``` -> Les attributs d'images ne peuvent pas être assignés directement à un chemin donné dans une entité. +> Pictures attributes cannot be assigned directly with a given path in an entity. -L'accès à un attribut associé dépend du type d'attribut. Par exemple, avec la structure suivante : +Accessing a related attribute depends on the attribute kind. For example, with the following structure: ![](assets/en/ORDA/entityAttributes.png) -Vous pouvez accéder aux données via le ou les objets associé(s) : +You can access data through the related object(s): ```4d - $entity:=ds.Project.all().first().theClient //récupérer l'entité Company associée au projet - $EntitySel:=ds.Company.all().first().companyProjects //récupère la sélection de projets pour l'entreprise(Company) + $entity:=ds.Project.all().first().theClient //get the Company entity associated to the project + $EntitySel:=ds.Company.all().first().companyProjects //get the selection of projects for the company ``` -Notez que dans l'exemple ci-dessus, *theClient* et *companyProjects* sont des attributs de relation et représentent une relation directe entre les deux dataclasses. Cependant, les attributs de relation peuvent également être créés sur des chemins via des relations à plusieurs niveaux, y compris des références circulaires. Par exemple, considérons la structure suivante : +Note that both *theClient* and *companyProjects* in the above example are primary relation attributes and represent a direct relationship between the two dataclasses. However, relation attributes can also be built upon paths through relationships at several levels, including circular references. For example, consider the following structure: ![](assets/en/ORDA/entityAttributes2.png) -Chaque employé peut être un manager et peut avoir un manager. Pour obtenir le manager du manager d'un employé, vous pouvez simplement écrire : +Each employee can be a manager and can have a manager. To get the manager of the manager of an employee, you can simply write: ```4d $myEmp:=ds.Employee.get(50) $manLev2:=$myEmp.manager.manager.lastname ``` -## Assigner des valeurs aux attributs de relation +## Assigning values to relation attributes -Dans l'architecture ORDA, les attributs de relation contiennent directement des données liées aux entités : +In the ORDA architecture, relation attributes directly contain data related to entities: -* Un attribut de relation de type N-> 1 (type **relatedEntity**) contient une entité -* Un attribut de relation de type 1-> N (type **relatedEntities**) contient une sélection d'entité +* An N->1 type relation attribute (**relatedEntity** kind) contains an entity +* A 1->N type relation attribute (**relatedEntities** kind) contains an entity selection -Regardons la structure (simplifiée) suivante : +Let's look at the following (simplified) structure: ![](assets/en/ORDA/entityAttributes3.png) -Dans cet exemple, une entité de la dataclass "Employee" contient un objet de type Entité dans l'attribut "employer" (ou une valeur nulle). Une entité de la dataclass "Company" contient un objet de type EntitySelection dans l'attribut "staff" (ou une valeur nulle). -> Dans ORDA, la propriété Automatic ou Manual des relations ne produit aucun effet. +In this example, an entity in the "Employee" dataclass contains an object of type Entity in the "employer" attribute (or a null value). An entity in the "Company" dataclass contains an object of type EntitySelection in the "staff" attribute (or a null value). +> In ORDA, the Automatic or Manual property of relations has no effect. -Pour attribuer une valeur directement à l'attribut "employer", vous devez passer une entité existante de la dataclass "Company". Par exemple: +To assign a value directly to the "employer" attribute, you must pass an existing entity from the "Company" dataclass. For example: ```4d - $emp:=ds.Employee.new() // créer un employé - $emp.lastname:="Smith" // attribuer une valeur à un attribut - $emp.employer:=ds.Company.query("name =:1";"4D")[0] //attribuer une entité de "company" + $emp:=ds.Employee.new() // create an employee + $emp.lastname:="Smith" // assign a value to an attribute + $emp.employer:=ds.Company.query("name =:1";"4D")[0] //assign a company entity $emp.save() ``` -4D fournit une fonctionnalité supplémentaire pour saisir un attribut de relation pour une entité N liée à une entité "1": vous passez directement la clé primaire de l'entité "1" lors de l'attribution d'une valeur à l'attribut de relation. Pour que cela fonctionne, passez des données de type Numérique ou Texte (la valeur de la clé primaire) à l'attribut de relation. 4D se charge alors automatiquement de rechercher l'entité correspondante dans la dataclass. Par exemple: +4D provides an additional facility for entering a relation attribute for an N entity related to a "1" entity: you pass the primary key of the "1" entity directly when assigning a value to the relation attribute. For this to work, you pass data of type Number or Text (the primary key value) to the relation attribute. 4D then automatically takes care of searching for the corresponding entity in the dataclass. For example: ```4d $emp:=ds.Employee.new() $emp.lastname:="Wesson" - $emp.employer:=2 // attribuer une clé primaire à l'attribut relation - //4D recherche l'entreprise dont la clé primaire (dans ce cas, son ID) est 2 - //et l'attribue à l'employé + $emp.employer:=2 // assign a primary key to the relation attribute + //4D looks for the company whose primary key (in this case, its ID) is 2 + //and assigns it to the employee $emp.save() ``` -Ceci est particulièrement utile lorsque vous importez un grand nombre de données à partir d'une base de données relationnelle. Ce type d'import contient généralement une colonne "ID", qui référence une clé primaire que vous pouvez ensuite affecter directement à un attribut de relation. +This is particularly useful when you are importing large amounts of data from a relational database. This type of import usually contains an "ID" column, which references a primary key that you can then assign directly to a relation attribute. -Cela signifie également que vous pouvez attribuer des clés primaires dans les N entités sans que les entités correspondantes aient déjà été créées dans la 1e classe de datastore. Si vous affectez une clé primaire qui n'existe pas dans la classe de datastore associée, elle est néanmoins stockée et affectée par 4D dès que cette entité "1" est créée. +This also means that you can assign primary keys in the N entities without corresponding entities having already been created in the 1 datastore class. If you assign a primary key that does not exist in the related datastore class, it is nevertheless stored and assigned by 4D as soon as this "1" entity is created. -Vous pouvez attribuer ou modifier la valeur d'un attribut d'entité associé "1" à partir de la dataclass "N" directement via l'attribut associé. Par exemple, si vous souhaitez modifier l'attribut de nom d'une entité "Company" associée d'une entité "Employee", vous pouvez écrire : +You can assign or modify the value of a "1" related entity attribute from the "N" dataclass directly through the related attribute. For example, if you want to modify the name attribute of a related Company entity of an Employee entity, you can write: ```code4d - $emp:=ds.Employee.get(2) // charge l'entité Employee avec la clé primaire 2 - $emp.employer.name:="4D, Inc." //modifier l'attribut de nom de la société associée - $emp.employer.save() //sauvegarder l'attribut associé - //l'entité associée est mise à jour + $emp:=ds.Employee.get(2) // load the Employee entity with primary key 2 + $emp.employer.name:="4D, Inc." //modify the name attribute of the related Company + $emp.employer.save() //save the related attribute + //the related entity is updated ``` -## Créer une sélection d'entité (entity selection) +## Creating an entity selection -Vous pouvez créer un objet de type sélection d'entité comme suit : +You can create an object of type entity selection as follows: -* Recherchez les entités d'une dataclass (voir la méthode `dataClass.query()`); -* Utilisez la méthode `dataClass.all()` pour sélectionner toutes les entités d'une dataclass; -* Utilisez la commande `Create entity selection` ou la méthode `dataClass.newSelection()` pour créer un objet de collection d'entités (entity collection) vide; +* Querying the entities in a dataclass (see the `dataClass.query()` method); +* Using the `dataClass.all( )` method to select all the entities in a dataclass; +* Using the `Create entity selection` command or the `dataClass.newSelection()` method to create a blank entity collection object; -* Utilisez l'une des diverses méthodes du thème **ORDA - EntitySelection** qui retourne une nouvelle sélection d'entité, telle que `entitySelection.or()`; +* Using one of the various methods from the **ORDA - EntitySelection** theme that returns a new entity selection, such as `entitySelection.or()`; -* Utilisez un attribut de relation de type "related entities" ("entités liées") (voir ci-dessous). +* Using a relation attribute of type "related entities" (see below). -Vous pouvez créer et utiliser simultanément autant de sélections d'entités différentes que vous le souhaitez pour une dataclass. A noter qu'une sélection d'entité ne contient que des références à des entités. Différentes sélections d'entités peuvent contenir des références vers les mêmes entités. -> Une sélection d'entité n'est définie que dans le process où elle a été créée. Vous ne pouvez pas, par exemple, stocker une référence à une sélection d'entité dans une variable interprocess et l'utiliser dans un autre process. +You can simultaneously create and use as many different entity selections as you want for a dataclass. Keep in mind that an entity selection only contains references to entities. Different entity selections can contain references to the same entities. +> An entity selection is only defined in the process where it was created. You cannot, for example, store a reference to an entity selection in an interprocess variable and use it in another process. -## Sélections d'entités et attributs +## Entity selections and attributes -### Sélections d'entités et attributs de stockage +### Entity selections and Storage attributes -Tous les attributs de stockage (texte, numérique, booléen, date) sont disponibles en tant que propriétés des sélections d'entités et en tant qu'entités. Lorsqu'il est utilisé avec une sélection d'entité, un attribut scalaire retourne une collection de valeurs scalaires. Par exemple: +All storage attributes (text, number, boolean, date) are available as properties of entity selections as well as entities. When used in conjunction with an entity selection, a scalar attribute returns a collection of scalar values. For example: ```4d $locals:=ds.Person.query("city = :1";"San Jose") //entity selection of people @@ -199,9 +199,9 @@ Tous les attributs de stockage (texte, numérique, booléen, date) sont disponib This code returns in *$localEmails* a collection of email addresses as strings. -### Sélections d'entités et attributs de relation +### Entity selections and Relation attributes -Outre la variété de méthodes de recherche, vous pouvez également utiliser des attributs de relation comme propriétés des sélections d'entités pour retourner de nouvelles sélections d'entités. Par exemple, considérons la structure suivante : +In addition to the variety of ways you can query, you can also use relation attributes as properties of entity selections to return new entity selections. For example, consider the following structure: ![](assets/en/ORDA/entitySelectionRelationAttributes.png) @@ -211,94 +211,95 @@ Outre la variété de méthodes de recherche, vous pouvez également utiliser de //All invoices with at least one line item related to a part in $myParts ``` -La dernière ligne renverra, dans $myInvoices, une sélection d'entité de toutes les factures qui ont au moins un poste de facture lié à une partie de la sélection d'entités myParts. Lorsqu'un attribut de relation est utilisé comme propriété d'une sélection d'entité, le résultat est toujours une autre sélection d'entité, même si une seule entité est retournée. Lorsqu'un attribut de relation est utilisé comme propriété d'une sélection d'entité et qu'aucune entité n'est retournée, le résultat est une sélection d'entité vide et non nulle. +The last line will return in $myInvoices an entity selection of all invoices that have at least one invoice item related to a part in the entity selection myParts. When a relation attribute is used as a property of an entity selection, the result is always another entity selection, even if only one entity is returned. When a relation attribute is used as a property of an entity selection and no entities are returned, the result is an empty entity selection, not null. -## Verrouillage d'une entité +## Entity Locking -Vous devez souvent gérer d'éventuels conflits pouvant survenir lorsque plusieurs utilisateurs ou process se chargent et tentent de modifier les mêmes entités en même temps. Le verrouillage des enregistrements est une méthodologie utilisée dans les bases de données relationnelles pour éviter les mises à jour incohérentes des données. Le concept consiste soit à verrouiller un enregistrement lors de sa lecture afin qu'aucun autre processus ne puisse le mettre à jour, soit à vérifier lors de la sauvegarde d'un enregistrement qu'un autre processus ne l'a pas modifié depuis sa lecture. Le premier est appelé **verrouillage d'enregistrement pessimiste** et garantit qu'un enregistrement modifié peut être écrit au détriment du verrouillage des enregistrements pour d'autres utilisateurs. Ce dernier est appelé **verrouillage d'enregistrement optimiste** et il échange la garantie des privilèges d'écriture sur l'enregistrement contre la flexibilité de décider des privilèges d'écriture uniquement si l'enregistrement doit être mis à jour. Dans le verrouillage d'enregistrement pessimiste, l'enregistrement est verrouillé même s'il n'est pas nécessaire de le mettre à jour. Dans le verrouillage d'enregistrement optimiste, la validité de la modification d'un enregistrement est fixée au moment de la mise à jour. +You often need to manage possible conflicts that might arise when several users or processes load and attempt to modify the same entities at the same time. Record locking is a methodology used in relational databases to avoid inconsistent updates to data. The concept is to either lock a record upon read so that no other process can update it, or alternatively, to check when saving a record to verify that some other process hasn’t modified it since it was read. The former is referred to as **pessimistic record locking** and it ensures that a modified record can be written at the expense of locking records to other users. The latter is referred to as **optimistic record locking** and it trades the guarantee of write privileges to the record for the flexibility of deciding write privileges only if the record needs to be updated. In pessimistic record locking, the record is locked even if there is no need to update it. In optimistic record locking, the validity of a record’s modification is decided at update time. -ORDA vous propose deux modes de verrouillage d'entité : +ORDA provides you with two entity locking modes: -- un mode automatique "optimiste", adapté à la plupart des applications, -- un mode "pessimiste" permettant de verrouiller les entités avant d'y accéder. +- an automatic "optimistic" mode, suitable for most applications, +- a "pessimistic" mode allowing you to lock entities prior to their access. -### Verrouillage optimiste automatique +### Automatic optimistic lock -Ce mécanisme automatique est basé sur le concept de "verrouillage optimiste" qui est particulièrement adapté aux problématiques des applications web. Ce concept se caractérise par les principes de fonctionnement suivants : +This automatic mechanism is based on the concept of "optimistic locking" which is particularly suited to the issues of web applications. This concept is characterized by the following operating principles: -* Toutes les entités peuvent toujours être chargées en lecture-écriture; il n'y a pas de «verrouillage» *a priori* des entités. -* Chaque entité possède un marqueur de verrouillage interne qui est incrémenté à chaque fois qu'il est enregistré. -* Lorsqu'un utilisateur ou un process tente de sauvegarder une entité à l'aide de la méthode `entity.save()`, 4D compare la valeur du marqueur de l'entité à sauvegarder avec celle de l'entité trouvée dans les données (en cas de modification) : - * Lorsque les valeurs correspondent, l'entité est enregistrée et la valeur du marqueur interne est incrémentée. - * Lorsque les valeurs ne correspondent pas, cela signifie qu'un autre utilisateur a modifié cette entité entre-temps. La sauvegarde n'est pas effectuée et une erreur est retournée. +* All entities can always be loaded in read-write; there is no *a priori* "locking" of entities. +* Each entity has an internal locking stamp that is incremented each time it is saved. +* When a user or process tries to save an entity using the `entity.save( )` method, 4D compares the stamp value of the entity to be saved with that of the entity found in the data (in the case of a modification): + * When the values match, the entity is saved and the internal stamp value is incremented. + * When the values do not match, it means that another user has modified this entity in the meantime. The save is not performed and an error is returned. -Le diagramme suivant illustre le verrouillage optimiste : +The following diagram illustrates optimistic locking: -1. Deux process chargent la même entité.

      ![](assets/en/ORDA/optimisticLock1.png) +1. Two processes load the same entity.

      ![](assets/en/ORDA/optimisticLock1.png) -2. Le premier process modifie l'entité et valide le changement. La méthode `entity.save()` est appelée. Le moteur 4D compare automatiquement la valeur du marqueur interne de l'entité modifiée avec celle de l'entité stockée dans les données. Puisqu'ils correspondent, l'entité est enregistrée et la valeur de son marqueur est incrémentée.

      ![](assets/en/ORDA/optimisticLock2.png) +2. The first process modifies the entity and validates the change. The `entity.save( )` method is called. The 4D engine automatically compares the internal stamp value of the modified entity with that of the entity stored in the data. Since they match, the entity is saved and its stamp value is incremented.

      ![](assets/en/ORDA/optimisticLock2.png) -3. Le deuxième process modifie également l'entité chargée et valide ses modifications. La méthode `entity.save()` est appelée. Etant donné que la valeur de marqueur de l'entité modifiée ne correspond pas à celle de l'entité stockée dans les données, la sauvegarde n'est pas effectuée et une erreur est retournée.

      ![](assets/en/ORDA/optimisticLock3.png) +3. The second process also modifies the loaded entity and validates its changes. The `entity.save( )` method is called. Since the stamp value of the modified entity does not match the one of the entity stored in the data, the save is not performed and an error is returned.

      ![](assets/en/ORDA/optimisticLock3.png) -Cela peut également être illustré par le code suivant : +This can also be illustrated by the following code: ```4d - $person1:=ds.Person.get(1) //Référence à l'entité - $person2:=ds.Person.get(1) //Autre référence à la même entité + $person1:=ds.Person.get(1) //Reference to entity + $person2:=ds.Person.get(1) //Other reference to same entity $person1.name:="Bill" - $result:=$person1.save() //$result.success=true, modification enregistrée + $result:=$person1.save() //$result.success=true, change saved $person2.name:="William" + $result:=$person2.save() //$result.success=false, change not saved ``` -Dans cet exemple, nous attribuons à $person1 une référence à l'entité "person" avec une clé de 1. Nous attribuons ensuite une autre référence de la même entité à la variable $person2. Avec $person1, nous modifions le prénom de la personne et sauvegardons l'entité. Lorsque nous essayons de faire de même avec $person2, 4D vérifie que l'entité sur le disque est la même que lors de la première attribution de la référence dans $person1. Puisqu'elles ne sont pas identiques, 4D retourne "faux" dans la propriété "success" et ne sauvegarde pas la deuxième modification. +In this example, we assign to $person1 a reference to the person entity with a key of 1. Then, we assign another reference of the same entity to variable $person2. Using $person1, we change the first name of the person and save the entity. When we attempt to do the same thing with $person2, 4D checks to make sure the entity on disk is the same as when the reference in $person1 was first assigned. Since it isn't the same, it returns false in the success property and doesn’t save the second modification. -Lorsque cette situation se produit, vous pouvez, par exemple, recharger l'entité à partir du disque à l'aide de la méthode `entity.reload()` afin de réessayer d'effectuer la modification. La méthode `entity.save()` propose également une option «auto-fusion» ("automerge") pour enregistrer l'entité au cas où les process auraient modifié des attributs non identiques. +When this situation occurs, you can, for example, reload the entity from the disk using the `entity.reload( )` method so that you can try to make the modification again. The `entity.save( )` method also proposes an "automerge" option to save the entity in case processes modified attributes that were not the same. -### Verrouillage pessimiste +### Pessimistic lock -Vous pouvez verrouiller et déverrouiller des entités à la demande lorsque vous accédez aux données. Lorsqu'une entité est verrouillée par un process, elle est chargée en lecture/écriture dans ce process mais elle est verrouillée pour tous les autres process. L'entité peut être chargée uniquement en mode lecture seule dans ces process; ses valeurs ne peuvent pas être modifiées ou enregistrées. +You can lock and unlock entities on demand when accessing data. When an entity is getting locked by a process, it is loaded in read/write in this process but it is locked for all other processes. The entity can only be loaded in read-only mode in these processes; its values cannot be edited or saved. This feature is based upon two methods of the `Entity` class: * `entity.lock()` * `entity.unlock()` -Pour plus d'informations, reportez-vous aux descriptions de ces méthodes. +For more information, please refer to the descriptions for these methods. -### Utilisation simultanée des verrouillages classiques 4D et des verrouillages pessimistes ORDA +### Concurrent use of 4D classic locks and ORDA pessimistic locks -L'utilisation des commandes classiques et ORDA pour le verrouillage des enregistrements est basé sur les principes suivants : +Using both classic and ORDA commands to lock records is based upon the following principles: -* Un verrouillage défini avec une commande 4D classique sur un enregistrement empêche ORDA de verrouiller l'entité correspondant à l'enregistrement. -* Un verrouillage défini avec ORDA sur une entité empêche les commandes 4D classiques de verrouiller l'enregistrement correspondant à l'entité. +* A lock set with a classic 4D command on a record prevents ORDA to lock the entity matching the record. +* A lock set with ORDA on an entity prevents classic 4D commands to lock the record matching the entity. -Ces principes sont illustrés dans le diagramme suivant : +These principles are shown in the following diagram: ![](assets/en/ORDA/concurrent1.png) -Les **verrouillages de transaction** s'appliquent également aux commandes classiques et aux commandes ORDA. Dans une application multiprocess ou multi-utilisateurs, un verrouillage défini dans une transaction sur un enregistrement par une commande classique aura pour effet d'empêcher tout autre process de verrouiller les entités liées à cet enregistrement (ou inversement), jusqu'à ce que la transaction soit validée ou annulée. +**Transaction locks** also apply to both classic and ORDA commands. In a multiprocess or a multi-user application, a lock set within a transaction on a record by a classic command will result in preventing any other processes to lock entities related to this record (or conversely), until the transaction is validated or canceled. -* Exemple avec un verrouillage défini par une commande classique :

      ![](assets/en/ORDA/concurrent2.png) -* Exemple avec un verrouillage défini par une méthode ORDA :

      ![](assets/en/ORDA/concurrent3.png) +* Example with a lock set by a classic command:

      ![](assets/en/ORDA/concurrent2.png) +* Example with a lock set by an ORDA method:

      ![](assets/en/ORDA/concurrent3.png) -## Optimisation client/serveur +## Client/server optimization -4D optimise automatiquement les requêtes ORDA qui utilisent des sélections d'entités ou qui chargent des entités en configuration client/serveur. Cette optimisation accélère l'exécution de votre application 4D en réduisant drastiquement le volume d'informations transmises sur le réseau. +4D provides an automatic optimization for ORDA requests that use entity selections or load entities in client/server configurations. This optimization speeds up the execution of your 4D application by reducing drastically the volume of information transmitted over the network. -Les mécanismes d'optimisation suivants sont mis en œuvre : +The following optimization mechanisms are implemented: -* Lorsqu'un client demande une sélection d'entité au serveur, 4D "apprend" automatiquement attributs de la sélection d'entité sont réellement utilisés côté client lors de l'exécution du code, et génère un "contexte d'optimisation" correspondant. Ce contexte est relié à la sélection d'entité et stocke les attributs utilisés. Il sera mis à jour dynamiquement si d'autres attributs sont utilisés par la suite. +* When a client requests an entity selection from the server, 4D automatically "learns" which attributes of the entity selection are actually used on the client side during the code execution, and builds a corresponding "optimization context". This context is attached to the entity selection and stores the used attributes. It will be dynamically updated if other attributes are used afterwards. -* Les requêtes ultérieures envoyées au serveur sur la même sélection d'entité réutilisent automatiquement le contexte d'optimisation et lisent uniquement les attributs nécessaires depuis le serveur, ce qui accélère le traitement. Par exemple, dans une list box basée sur une sélection d'entités, la phase d'apprentissage a lieu durant l'affichage des premières lignes et l'affichage des lignes suivantes est fortement optimisé. +* Subsequent requests sent to the server on the same entity selection automatically reuse the optimization context and only get necessary attributes from the server, which accelerates the processing. For example in an entity selection-based list box, the learning phase takes place during the display of the first rows, next rows display is very optimized. -* Un contexte d'optimisation existant peut être passé en tant que propriété à une autre sélection d'entité de la même dataclass, ce qui permet d'éviter la phase d'apprentissage et d'accélérer l'application (voir [Utilisation de la propriété context](#using-the-context-property) ci-dessous). +* An existing optimization context can be passed as a property to another entity selection of the same dataclass, thus bypassing the learning phase and accelerating the application (see [Using the context property](#using-the-context-property) below). -Les méthodes suivantes associent automatiquement le contexte d'optimisation de la sélection d'entité d'origine à la sélection d'entité retournée : +The following methods automatically associate the optimization context of the source entity selection to the returned entity selection: * `entitySelection.and()` * `entitySelection.minus()` @@ -308,14 +309,14 @@ Les méthodes suivantes associent automatiquement le contexte d'optimisation de * `entitySelection.drop()` -**Exemple** +**Example** -Considérons le code suivant : +Given the following code: ```4d $sel:=$ds.Employee.query("firstname = ab@") For each($e;$sel) - $s:=$e.firstname+" "+$e.lastname+" works for "+$e.employer.name // $e.employer renvoie à la table Company + $s:=$e.firstname+" "+$e.lastname+" works for "+$e.employer.name // $e.employer refers to Company table End for each ``` @@ -323,16 +324,16 @@ Thanks to the optimization, this request will only get data from used attributes -### Utilisation de la propriété context +### Using the context property -Vous pouvez tirer un meilleur parti de l'optimisation en utilisant la propriété **context**. Cette propriété référence un contexte d'optimisation "appris" pour une sélection d'entités. Elle peut être passée comme paramètre aux méthodes ORDA qui retournent de nouvelles sélections d'entités, afin que les sélections d'entités demandent directement au serveur les attributs utilisés, sans passer par la phase d'apprentissage. +You can increase the benefits of the optimization by using the **context** property. This property references an optimization context "learned" for an entity selection. It can be passed as parameter to ORDA methods that return new entity selections, so that entity selections directly request used attributes to the server and bypass the learning phase. -Une même propriété de contexte d'optimisation peut être passée à un nombre illimité de sélections d'entités de la même dataclass. Toutes les méthodes ORDA qui gèrent les sélections d'entités prennent en charge la propriété **context** (par exemple les méthodes `dataClass.query( )` ou `dataClass.all( )`). Il est toutefois important de garder à l'esprit qu'un contexte est automatiquement mis à jour lorsque de nouveaux attributs sont utilisés dans d'autres parties du code. Si le même contexte est réutilisé dans différents codes, il risque d'être surchargé et de perdre en efficacité. -> Un mécanisme similaire est mis en place pour des entités qui sont chargées, afin que seuls les attributs utilisés soient demandés (voir la méthode `dataClass.get( )`). +A same optimization context property can be passed to unlimited number of entity selections on the same dataclass. All ORDA methods that handle entity selections support the **context** property (for example `dataClass.query( )` or `dataClass.all( )` method). Keep in mind, however, that a context is automatically updated when new attributes are used in other parts of the code. Reusing the same context in different codes could result in overloading the context and then, reduce its efficiency. +> A similar mechanism is implemented for entities that are loaded, so that only used attributes are requested (see the `dataClass.get( )` method). -**Exemple avec la méthode `dataClass.query( )` :** +**Example with `dataClass.query( )` method:** ```4d var $sel1; $sel2; $sel3; $sel4; $querysettings; $querysettings2 : Object @@ -353,23 +354,23 @@ Une même propriété de contexte d'optimisation peut être passée à un nombre $data:=extractDetailedData($sel4) // In extractDetailedData method the optimization associated to context "longList" is applied ``` -### Listbox basée sur une sélection d'entités +### Entity selection-based list box -L'optimisation d'une sélection d'entités s'applique automatiquement aux listbox basées sur une sélection d'entités dans les configurations client/serveur, au moment d'afficher et de dérouler le contenu d'une listbox : seuls les attributs affichés dans la listbox sont demandés depuis le serveur. +Entity selection optimization is automatically applied to entity selection-based list boxes in client/server configurations, when displaying and scrolling a list box content: only the attributes displayed in the list box are requested from the server. -Un contexte spécifique nommé "mode page" est également proposé lorsque l'entité courante de la sélection est chargée à l'aide de l'expression **élément courant** de la listbox (voir [List box de type collection ou entity selection](FormObjects/listbox_overview.md#list-box-types)). Cette fonctionnalité vous permet de ne pas surcharger le contexte initial de la listbox dans ce cas précis, notamment si la "page" requiert des attributs supplémentaires. A noter que seule l'utilisation de l'expression **Élément courant** permettra de créer/utiliser le contexte de la page (l'accès via `entitySelection[index]` modifiera le contexte de la sélection d'entité). +A specific "page mode" context is also provided when loading the current entity through the **Current item** property expression of the list box (see [Collection or entity selection type list boxes](FormObjects/listbox_overview.md#list-box-types)). This feature allows you to not overload the list box initial context in this case, especially if the "page" requests additional attributes. Note that only the use of **Current item** expression will create/use the page context (access through `entitySelection\[index]` will alter the entity selection context). -Cette optimisation sera également prise en charge par les requêtes ultérieures envoyées au serveur via les méthodes de navigation des entités. Les méthodes suivantes associeront automatiquement le contexte d'optimisation de l'entité source à l'entité retournée : +Subsequent requests to server sent by entity browsing methods will also support this optimization. The following methods automatically associate the optimization context of the source entity to the returned entity: * `entity.next( )` * `entity.first( )` * `entity.last( )` * `entity.previous( )` -Par exemple, le code suivant charge l'entité sélectionnée et permet de naviguer dans la sélection d'entités. Les entités sont chargées dans un contexte séparé et le contexte initial de la listbox demeure inchangé : +For example, the following code loads the selected entity and allows browsing in the entity selection. Entities are loaded in a separate context and the list box initial context is left untouched: ```4d - $myEntity:=Form.currentElement //expression de l'élément courant - //... faire quelque chose - $myEntity:=$myEntity.next() //charge la prochaine entité à l'aide du même contexte + $myEntity:=Form.currentElement //current item expression + //... do something + $myEntity:=$myEntity.next() //loads the next entity using the same context ``` From b26136ea8b786a6ef2bc1d58117f6c93d36c9cfe Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:26:54 +0100 Subject: [PATCH 216/260] New translations glossary.md (French) --- website/translated_docs/fr/ORDA/glossary.md | 52 ++++++++++----------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/website/translated_docs/fr/ORDA/glossary.md b/website/translated_docs/fr/ORDA/glossary.md index 59d56105ddc0ac..7bcc5626295f59 100644 --- a/website/translated_docs/fr/ORDA/glossary.md +++ b/website/translated_docs/fr/ORDA/glossary.md @@ -1,25 +1,25 @@ --- id: glossary -title: Glossaire +title: Glossary --- -## Aperçu des principaux concepts +## Main concepts at a glance ![](assets/en/ORDA/mainConcepts.png) -## Attribut +## Attribute -Un attribut est la plus petite cellule de stockage dans une base de données relationnelle (voir aussi [Attribut relationnel](#relation-attribute)). Ne confondez pas les attributs de la dataclass et les attributs d'entités : +An attribute is the smallest storage cell in a relational database (see also [Relation attribute](#relation-attribute)). Do not confuse dataclass attributes and entity attributes: -* Dans un objet dataclass, chaque propriété est un attribut de dataclass qui correspond à un champ dans la table correspondante (même nom et même type). -* Dans un objet entity, les attributs d'entités sont des propriétés qui contiennent les valeurs pour les attributs du datastore correspondants. -> Les *attributs* et les *propriétés* sont des concepts similaires. "Attribut" est utilisé pour désigner les propriétés de la dataclass qui stockent les données, tandis que "propriété" est plus générique et définit une donnée stockée dans un objet. +* In a dataclass object, each property is a dataclass attribute that maps to a corresponding field in the corresponding table (same name and type). +* In an entity object, entity attributes are properties that contain values for the corresponding datastore attributes. +> *Attributes* and *properties* are similar concepts. "Attribute" is used to designate dataclass properties that store data, while "property" is more generic and defines a piece of data stored within an object. ## AttributePath -Un attributePath est le chemin d'un attribut à l'intérieur d'une dataclass ou d'une entité donnée. Voir aussi [propertyPath](#propertyPath). +An attributePath is the path of an attribute inside a given dataclass or entity. See also [PropertyPath](#propertyPath). ## Class code @@ -55,8 +55,8 @@ A datastore is the interface object provided by ORDA to reference a structure an A datastore provides: -* une connexion à la base de données 4D -* un ensemble de dataclasses pour travailler avec la base de données +* a connection to the 4D database +* a set of dataclasses to work with the database The database can be a 4D local database (the Main datastore), or a 4D Server database exposed as REST resource (a Remote datastore). @@ -93,16 +93,16 @@ An entity selection is an object. When querying the datastore, an entity selecti An entity selection contains: -* un ensemble de 0 à X références d'entités -* une propriété length (toujours), -* les propriétés queryPlan et queryPath (si demandées lors de la requête). +* a set of 0 to X entity references, +* a length property (always), +* queryPlan and queryPath properties (if asked while querying). An entity selection can also be empty. ## Generic class -Built-in class for ORDA objects such as entities, or dataclasses. Les fonctions et propriétés des classes génériques sont automatiquement disponibles dans les classes utilisateur étendues, telles que `EmployeeEntity`. +Built-in class for ORDA objects such as entities, or dataclasses. Functions and properties of generic classes are automatically available in user extended classes, e.g. `EmployeeEntity`. ## Lazy loading @@ -113,11 +113,11 @@ Since entities are managed as references, data is loaded only when necessary, i. The Datastore object matching the opened 4D database (standalone or client/server). The main datastore is returned by the ds command. -## Méthode +## Method -ORDA objects such as datastores, dataclasses, entity selections, and entities, define classes of objects. Ils fournissent des méthodes spécifiques pour interagir directement avec eux. Ces méthodes sont aussi appelées des fonctions membres (member functions). Ces méthodes sont utilisées en étant appelées sur une instance de l'objet. +ORDA objects such as datastores, dataclasses, entity selections, and entities, define classes of objects. They provide specific methods to directly interact with them. These methods are also called member functions. Such methods are used by calling them on an instance of the object. -Par exemple, la méthode `query()` est une "member function" de dataclass. If you have stored a dataclass object in the `$myClass` variable, you can write: +For example, the `query()` method is a dataclass member function. If you have stored a dataclass object in the `$myClass` variable, you can write: ```code4d $myClass.query("name = smith") @@ -125,31 +125,31 @@ $myClass.query("name = smith") ## Mixed data type -In this documentation, "Mixed" data type is used to designate the various type of values that can be stored within dataclass attributes. Par exemple : +In this documentation, "Mixed" data type is used to designate the various type of values that can be stored within dataclass attributes. It includes: * number -* Texte +* text * null * boolean * date * object * collection -* image(\*) +* picture(\*) *(\*) picture type is not supported by statistical methods such as* `entitySelection.max( )`. -## Verrouillage optimiste +## Optimistic Lock -En mode "verrouillage optimiste", les entités ne sont pas verrouillées explicitement avant d'être mises à jour. Chaque entité a un marqueur interne qui est automatiquement incrémenté chaque fois que l'entité est enregistrée sur le disque. Les méthodes entity.save( ) ou entity.drop( ) retourneront une erreur si le marqueur de l'entité chargée en mémoire et le marqueur de l'entité sur le disque ne correspondent pas, ou si l'entité a été supprimée. Le verrouillage optimiste est uniquement disponible dans l'implémentation ORDA. Voir aussi "verrouillage pessimiste". +In "optimistic lock" mode, entities are not locked explicitly before updating them. Each entity has an internal stamp that is automatically incremented each time the entity is saved on disk. The entity.save( ) or entity.drop( ) methods will return an error if the stamp of the loaded entity (in memory) and the stamp of the entity on disk do not match, or if the entity has been dropped. Optimistic locking is only available in ORDA implementation. See also "Pessimistic lock". -## Verrouillage pessimiste +## Pessimistic Lock -Un "verrouillage pessimiste" signifie qu'une entité est verrouillée avant que l'on y accède, en utilisant la méthode entity.lock( ). Les autres process ne peuvent ni mettre à jour ni supprimer l'entité tant qu'elle n'est pas déverrouillée. Le langage 4D classique n'autorise que les verrouillages pessimistes. Voir "Verrouillage optimiste". +A "pessimistic lock" means that an entity is locked prior to its being accessed, using the entity.lock( ) method. Other processes can neither update nor drop the entity until it is unlocked. The classic 4D language only allows pessimistic locks. See "Optimistic lock". -## Propriété +## Property See [Attribute](#attribute). -> Les attributs et les propriétés sont des concepts similaires. "Attribut" est utilisé pour désigner les propriétés de la dataclass qui stockent les données, tandis que "propriété" est plus générique et définit une donnée stockée dans un objet. +> Attributes and properties are similar concepts. "Attribute" is used to designate dataclass properties that store data, while "property" is more generic and defines a piece of data stored within an object. ## PropertyPath From 39db3e54a487adca258440a221c1e2afb4ccc1ae Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:26:56 +0100 Subject: [PATCH 217/260] New translations ordaClasses.md (French) --- .../translated_docs/fr/ORDA/ordaClasses.md | 158 +++++++++--------- 1 file changed, 79 insertions(+), 79 deletions(-) diff --git a/website/translated_docs/fr/ORDA/ordaClasses.md b/website/translated_docs/fr/ORDA/ordaClasses.md index 58d2773bba2998..38b9df268b863d 100644 --- a/website/translated_docs/fr/ORDA/ordaClasses.md +++ b/website/translated_docs/fr/ORDA/ordaClasses.md @@ -1,78 +1,78 @@ --- id: ordaClasses -title: Classes du modèle de données +title: Data Model Classes --- -## Fonction d'aperçu +## Preview feature -> Les fonctions de classe ORDA du modèle de données sont fournies en tant que **fonctionnalité de prévisualisation** dans 4D v18 R4 : toutes les fonctions que vous créez sont exposées sans restrictions. Les futures versions octroieront plus de contrôle sur les fonctions, en particulier à partir des requêtes REST. Dans la prochaine version, **par défaut, toutes les fonctions de classe de votre modèle de données seront définies comme privées**. Vous devrez spécifier individuellement chaque fonction que vous souhaitez exposer. +> ORDA data model class functions are provided as a **preview feature** in 4D v18 R4: all functions you create are exposed without restrictions. Future releases will include more control over the function availability, especially from REST requests. In the next release, **by default all your data model class functions will be set to private**. You will have to specify individually each function that you want to be exposed. ## Aperçu -ORDA vous permet de créer des fonctions de classe de haut niveau au-dessus du modèle de données. Cela vous permet d'écrire du code orienté métier et de le «publier» comme une API. Le datastore, les dataclasses, les sélections d'entités et les entités sont tous disponibles en tant qu'objets de classe pouvant contenir des fonctions. +ORDA allows you to create high-level class functions above the data model. This allows you to write business-oriented code and "publish" it just like an API. Datastore, dataclasses, entity selections, and entities are all available as class objects that can contain functions. -Par exemple, vous pouvez créer une fonction `getNextWithHigherSalary()` dans la classe `EmployeeEntity` pour retourner les employés ayant un salaire supérieur à celui qui est sélectionné. Il serait aussi simple à appeler que : +For example, you could create a `getNextWithHigherSalary()` function in the `EmployeeEntity` class to return employees with a salary higher than the selected one. It would be as simple to call as: ```4d $nextHigh:=ds.Employee(1).getNextWithHigherSalary() ``` -Les développeurs peuvent non seulement utiliser ces fonctions dans des datastores locaux, mais également dans des architectures client/serveur et des architectures distantes (voir l'exemple complet [ci-dessous](#example-with-remote-datastore)) : +Developers can not only use these functions in local datastores, but also in client/server as well as remote architectures (see the full example [below](#example-with-remote-datastore)): ```4d - //$cityManager est la référence d'un datastore distant + //$cityManager is the reference of a remote datastore Form.comp.city:=$cityManager.City.getCityName(Form.comp.zipcode) ``` -Grâce à cette fonctionnalité, toute la logique métier de votre application 4D peut être stockée comme une couche indépendante afin d'être facilement maintenue ou réutilisée : +Thanks to this feature, the entire business logic of your 4D application can be stored as a independent layer so that it can be easily maintained or reused: -- elle vous permet de «masquer» la complexité globale de la structure physique sous-jacente et d'exposer uniquement des fonctions compréhensibles et prêtes à l'emploi. +- it allows you to "hide" the overall complexity of the underlying physical structure and only expose understandable and ready-to-use functions. -- si la structure physique évolue, il vous suffit d'adapter le code de la fonction et les applications clientes continueront de les appeler de manière transparente. +- if the physical structure evolves, you simply to adapt function code and client applications will continue to call them transparently. ![](assets/en/ORDA/api.png) -De plus, 4D Developer [crée préalablement et automatiquement](#creating-classes) les classes pour chaque objet de modèle de données disponible. +In addition, 4D Developer [automatically pre-creates](#creating-classes) the classes for each available data model object. ## Architecture -ORDA fournit des **classes génériques** exposées via le [class store](Concepts/classes.md#class-stores) **`4D`**, ainsi que des **classes utilisateurs** (étendant les classes génériques) exposées dans le [class store](Concepts/classes.md#class-stores) **`cs`** : +ORDA provides **generic classes** exposed through the **`4D`** [class store](Concepts/classes.md#class-stores), as well as **user classes** (extending generic classes) exposed in the **`cs`** [class store](Concepts/classes.md#class-stores): ![](assets/en/ORDA/ClassDiagramImage.png) -Toutes les classes de modèle de données ORDA sont exposées en tant que propriétés du class store **`cs`**. Les classes ORDA suivantes sont disponibles : +All ORDA data model classes are exposed as properties of the **`cs`** class store. The following ORDA classes are available: -| Class | Nom de l'exemple | Instanciée par | +| Class | Example name | Instantiated by | | --------------------------- | -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| cs.DataStore | cs.DataStore | Commande `ds` | +| cs.DataStore | cs.DataStore | `ds` command | | cs.*DataClassName* | cs.Employee | `dataStore.DataClassName`, `dataStore[DataClassName]` | | cs.*DataClassName*Entity | cs.EmployeeEntity | `dataClass.get()`, `dataClass.new()`, `entitySelection.first()`, `entitySelection.last()`, `entity.previous()`, `entity.next()`, `entity.first()`, `entity.last()`, `entity.clone()` | | cs.*DataClassName*Selection | cs.EmployeeSelection | `dataClass.query()`, `entitySelection.query()`, `dataClass.all()`, `dataClass.fromCollection()`, `dataClass.newSelection()`, `entitySelection.drop()`, `entity.getSelection()`, `entitySelection.and()`, `entitySelection.minus()`, `entitySelection.or()`, `entitySelection.orderBy()`, `entitySelection.orderByFormula()`, `entitySelection.slice()`, `Create entity selection` | -> Les classes utilisateur ORDA sont stockées sous forme de fichiers de classe standard (.4dm) dans le sous-dossier Classes du projet [(voir ci-dessous)](#class-files). +> ORDA user classes are stored as regular class files (.4dm) in the Classes subfolder of the project [(see below)](#class-files). -De plus, les instances d'objet de classes utilisateurs du modèles de données ORDA bénéficient des propriétés et fonctions de leurs parents. Par exemple, un objet de classe Entity peut appeler des fonctions de la [classe générique d'entité ORDA](https://doc.4d.com/4Dv18R3/4D/18-R3/ORDA-Entity.201-4900374.en.html). +In addition, object instances from ORDA data model user classes benefit from their parent's properties and functions. For example, an Entity class object can call functions from the [ORDA Entity generic class](https://doc.4d.com/4Dv18R3/4D/18-R3/ORDA-Entity.201-4900374.en.html). -## Description de la classe +## Class Description -> **Note** : Les fonctions du modèle de données ORDA sont toujours exécutées sur le serveur. Ainsi, l'appel d'une fonction génère une requête auprès du serveur. +> **Note**: Keep in mind that ORDA data model functions are always executed on the server. Thus, calling a function generates a request to the server. -### Classe DataStore +### DataStore Class -Une base de données 4D expose sa propre classe DataStore dans le class store `cs`. +A 4D database exposes its own DataStore class in the `cs` class store. - **Extends**: 4D.DataStoreImplementation -- **Nom de classe** : cs.DataStore +- **Class name**: cs.DataStore -Vous pouvez créer des fonctions dans la classe DataStore qui seront disponibles via l'objet `ds`. +You can create functions in the DataStore class that will be available through the `ds` object. -#### Exemple +#### Example ```4d // cs.DataStore class @@ -83,7 +83,7 @@ Function getDesc $0:="Database exposing employees and their companies" ``` -Cette foncton peut alors être appelée : +This function can then be called: ```4d $desc:=ds.getDesc() //"Database exposing..." @@ -91,17 +91,17 @@ $desc:=ds.getDesc() //"Database exposing..." -### Classe DataClass +### DataClass Class -Chaque table exposée avec ORDA affiche une classe DataClass dans le class store `cs`. +Each table exposed with ORDA offers a DataClass class in the `cs` class store. -- **Extends** : 4D.DataClass -- **Nom de classe **: cs.*DataClassName* (où *DataClassName* est le nom de la table) -- **Exemple ** : cs.Employee +- **Extends**: 4D.DataClass +- **Class name**: cs.*DataClassName* (where *DataClassName* is the table name) +- **Example name**: cs.Employee -#### Exemple +#### Example ```4D // cs.Company class @@ -109,15 +109,15 @@ Chaque table exposée avec ORDA affiche une classe DataClass dans le class store Class extends DataClass -// Retourne les entreprises dont le revenu est au-dessus de la moyenne -// Retourne une sélection d'entités relative à DataClass Company +// Returns companies which revenue is over the average +// Returns an entity selection related to the DataClass Company Function GetBestOnes() $sel:=This.query("revenues >= :1";This.all().average("revenues")); $0:=$sel ``` -Vous pouvez ensuite obtenir une sélection d'entité des "meilleures" entreprises en exécutant le code suivant : +Then, you can get an entity selection of the "best" companies by executing: ```4d var $best : cs.CompanySelection @@ -125,13 +125,13 @@ Vous pouvez ensuite obtenir une sélection d'entité des "meilleures" entreprise ``` -#### Exemple avec un datastore distant +#### Example with a remote datastore -Le catalogue *City* suivant est exposé dans un datastore distant (vue partielle) : +The following *City* catalog is exposed in a remote datastore (partial view): ![](assets/en/ORDA/Orda_example.png) -La classe `City Class` fournit une API : +The `City Class` provides an API: ```4d // cs.City class @@ -152,13 +152,13 @@ Function getCityName() End if ``` -L'application cliente ouvre une session sur le datastore distant : +The client application opens a session on the remote datastore: ```4d $cityManager:=Open datastore(New object("hostname";"127.0.0.1:8111");"CityManager") ``` -Une application cliente peut alors utiliser l'API pour obtenir la ville correspondant au code postal (par exemple) à partir d'un formulaire : +Then a client application can use the API to get the city matching a zip code (for example) from a form: ```4d Form.comp.city:=$cityManager.City.getCityName(Form.comp.zipcode) @@ -166,32 +166,32 @@ Form.comp.city:=$cityManager.City.getCityName(Form.comp.zipcode) ``` -### Classe EntitySelection +### EntitySelection Class -Chaque table exposée avec ORDA affiche une classe EntitySelection dans le class store `cs`. +Each table exposed with ORDA offers an EntitySelection class in the `cs` class store. -- **Extends** : 4D.EntitySelection -- **Nom de classe** : *DataClassName*Selection (où *DataClassName* est le nom de la table) -- **Exemple ** : cs.EmployeeSelection +- **Extends**: 4D.EntitySelection +- **Class name**: *DataClassName*Selection (where *DataClassName* is the table name) +- **Example name**: cs.EmployeeSelection -#### Exemple +#### Example ```4d -// Classe cs.EmployeeSelection +// cs.EmployeeSelection class -Classe extends EntitySelection +Class extends EntitySelection -//Extrait, de cette sélection d'entité, les employés ayant un salaire supérieur à la moyenne +//Extract from this entity selection the employees with a salary greater than the average -Fonction withSalaryGreaterThanAverage +Function withSalaryGreaterThanAverage C_OBJECT($0) $0:=This.query("salary > :1";This.average("salary")).orderBy("salary") ``` -Vous pouvez alors obtenir les employés dont le salaire est supérieur à la moyenne, dans une sélection d'entité, en exécutant le code suivant : +Then, you can get employees with a salary greater than the average in any entity selection by executing: ```4d $moreThanAvg:=ds.Company.all().employees.withSalaryGreaterThanAverage() @@ -199,13 +199,13 @@ $moreThanAvg:=ds.Company.all().employees.withSalaryGreaterThanAverage() ### Entity Class -Chaque table exposée avec ORDA affiche une classe Entity dans le class store `cs`. +Each table exposed with ORDA offers an Entity class in the `cs` class store. -- **Extends** : 4D.Entity -- **Nom de classe **: *DataClassName*Entity (où *DataClassName* est le nom de la table) -- **Exemple ** : cs.CityEntity +- **Extends**: 4D.Entity +- **Class name**: *DataClassName*Entity (where *DataClassName* is the table name) +- **Example name**: cs.CityEntity -#### Exemple +#### Example ```4d // cs.CityEntity class @@ -219,11 +219,11 @@ Function getPopulation() Function isBigCity C_BOOLEAN($0) -// La fonction getPopulation() peut être utilisée dans la classe +// The function getPopulation() is usable inside the class $0:=This.getPopulation()>50000 ``` -Vous pouvez ensuite appeler ce code : +Then, you can call this code: ```4d var $cityManager; $city : Object @@ -236,66 +236,66 @@ If ($city.isBigCity()) End if ``` -## Règles de définition +## Definition Rules -Lors de la création ou de la modification de classes de modèles de données, vous devez veiller aux règles décrites ci-dessous. +When creating or editing data model classes, you must pay attention to the rules described below. -- Puisqu'ils sont utilisés pour définir des noms de classe DataClass automatiques dans le [class store](Concepts/classes.md#class-stores) **cs**, les noms de table 4D doivent être conformes afin d'éviter tout conflit dans l'espace de nommage **cs**. En particulier : - - Ne donnez pas le même nom à une table 4D et à une [classe d'utilisateurs](Concepts/classes.md#class-names) (user class). Si un tel cas se produit, le constructeur de la classe utilisateur devient inutilisable (un avertissement est retourné par le compilateur). - - N'utilisez pas de nom réservé pour une table 4D (par exemple "DataClass"). +- Since they are used to define automatic DataClass class names in the **cs** [class store](Concepts/classes.md#class-stores), 4D table names must be compliant in order to avoid any conflict in the **cs** namespace. In particular: + - Do not give the same name to a 4D table and to a [user class name](Concepts/classes.md#class-names). If such a case occurs, the constructor of the user class becomes unusable (a warning is returned by the compiler). + - Do not use a reserved name for a 4D table (e.g. "DataClass"). -- Lors de la définition d'une classe, assurez-vous que l'instruction [`Class extends`](Concepts/classes.md#class-extends-classnameclass) correspond exactement au nom de la classe parente (sensible à la casse). Par exemple, `Class extends EntitySelection` pour une classe de sélection d'entité. +- When defining a class, make sure the [`Class extends`](Concepts/classes.md#class-extends-classnameclass) statement matches exactly the parent class (case sensitive) name. For example, `Class extends EntitySelection` for an entity selection class. -- Vous ne pouvez pas instancier un objet de classe de modèle de données avec le mot clé `new()` (une erreur est retournée). You must use a regular method as listed in the [`Instantiated by` column of the ORDA class table](#architecture). +- You cannot instantiate a data model class object with the `new()` keyword (an error is returned). You must use a regular method as listed in the [`Instantiated by` column of the ORDA class table](#architecture). -- Vous ne pouvez pas remplacer une méthode de classe ORDA native du [class store](Concepts/classes.md#class-stores) **`4D`** par une fonction de classe utilisateur de modèle de données. +- You cannot override a native ORDA class method from the **`4D`** [class store](Concepts/classes.md#class-stores) with a data model user class function. -## Prise en charge dans les projets 4D +## Support in 4D projects -### Fichiers de classe (class files) +### Class files -Une classe utilisateur ORDA de modèle de données est définie en ajoutant, au [même emplacement que les fichiers de classe usuels](Concepts/classes.md#class-files) (c'est-à-dire dans le dossier `/Sources/Classes` du dossier projet), un fichier .4dm avec le nom de la classe. Par exemple, une classe d'entité pour la dataclass `Utilities` sera définie via un fichier `UtilitiesEntity.4dm`. +An ORDA data model user class is defined by adding, at the [same location as regular class files](Concepts/classes.md#class-files) (*i.e.* in the `/Sources/Classes` folder of the project folder), a .4dm file with the name of the class. For example, an entity class for the `Utilities` dataclass will be defined through a `UtilitiesEntity.4dm` file. -### Créer des classes +### Creating classes -4D crée préalablement et automatiquement des classes vides en mémoire pour chaque objet de modèle de données disponible. +4D automatically pre-creates empty classes in memory for each available data model object. ![](assets/en/ORDA/ORDA_Classes-3.png) -> Par défaut, les classes ORDA vides ne sont pas affichées dans l'Explorateur. Vous devez les afficher en sélectionnant **Afficher toutes dataclasses** dans le menu d'options de l'Explorateur : ![](assets/en/ORDA/showClass.png) +> By default, empty ORDA classes are not displayed in the Explorer. You need to show them by selecting **Show all data classes** from the Explorer's options menu: ![](assets/en/ORDA/showClass.png) -Les classes d'utilisateurs ORDA ont une icône différente des autres classes. Les classes vides sont grisées : +ORDA user classes have a different icon from regular classes. Empty classes are dimmed: ![](assets/en/ORDA/classORDA2.png) -Pour créer un fichier de classe ORDA, il vous suffit de double-cliquer sur la classe prédéfinie correspondante dans l'Explorateur. 4D crée le fichier de classe et ajoute le code `extends`. Par exemple, pour une classe Entity : +To create an ORDA class file, you just need to double-click on the corresponding predefined class in the Explorer. 4D creates the class file and add the `extends` code. For example, for an Entity class: ``` Class extends Entity ``` -Une fois qu'une classe est définie, son nom n'est plus grisé dans l'Explorateur. +Once a class is defined, its name is no longer dimmed in the Explorer. -### Modifier des classes +### Editing classes -Pour ouvrir une classe ORDA définie dans l'éditeur de méthode 4D, sélectionnez ou double-cliquez sur un nom de classe ORDA et utilisez **Editer...** dans le menu contextuel/menu d'options de la fenêtre d'Explorateur (comme pour n'importe quelle classe) : +To open a defined ORDA class in the 4D method editor, select or double-click on an ORDA class name and use **Edit...** from the contextual menu/options menu of the Explorer window (like for any class): ![](assets/en/ORDA/classORDA4.png) -Pour les classes ORDA basées sur le datastore local (`ds`), vous pouvez accéder directement au code de la classe depuis la fenêtre de 4D Structure : +For ORDA classes based upon the local datastore (`ds`), you can directly access the class code from the 4D Structure window: ![](assets/en/ORDA/classORDA5.png) -### Éditeur de méthode +### Method editor -Dans l'éditeur de méthode de 4D, les variables saisies comme une classe ORDA bénéficient automatiquement des fonctionnalités d'auto-complétion. Exemple avec une variable de classe Entity : +In the 4D method editor, variables typed as an ORDA class automatically benefit from autocompletion features. Example with an Entity class variable: ![](assets/en/ORDA/AutoCompletionEntity.png) From 08153f3409d6534fbaa061d8db2c82cb2b5bbbc7 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:26:58 +0100 Subject: [PATCH 218/260] New translations overview.md (French) --- website/translated_docs/fr/ORDA/overview.md | 26 ++++++++++----------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/website/translated_docs/fr/ORDA/overview.md b/website/translated_docs/fr/ORDA/overview.md index ac21bc959a2679..5ce9403a6a6996 100644 --- a/website/translated_docs/fr/ORDA/overview.md +++ b/website/translated_docs/fr/ORDA/overview.md @@ -3,32 +3,32 @@ id: overview title: Aperçu --- -## Que signifie ORDA ? +## What is ORDA? -ORDA signifie **Object Relational Data Access** (Accès objet aux données relationnelles). C'est une technologie avancée permettant l'accès au modèle et aux données d'une base de données à l'aide d'objets. +ORDA stands for **Object Relational Data Access**. It is an enhanced technology allowing to access both the model and the data of a database through objects. -Les relations font partie du concept de façon transparente, en combinaison avec le principe du [Lazy loading](glossary.md#lazy-loading), afin de supprimer toutes les problématiques spécifiques à la sélection ou au transfert de données. +Relations are transparently included in the concept, in combination with [lazy loading](glossary.md#lazy-loading), to remove all the typical hassles of data selection or transfer from the developer. -Avec ORDA, les données sont accessibles via une couche d'abstraction, le [datastore](dsMapping.md#datastore). Un datastore est un objet fournissant une interface au modèle de base de données et aux données via des objets et des classes. Par exemple, une table correspond à un objet [dataclass](dsMapping.md#dataclass), un champ est un [attribut](dsMapping.md##attribute) d'une dataclass, et les enregistrements sont des [entités](dsMapping.md#entity) et des [sélections d'éntités](dsMapping.md#entity-selection). +With ORDA, data is accessed through an abstraction layer, the [datastore](dsMapping.md#datastore). A datastore is an object that provides an interface to the database model and data through objects and classes. For example, a table is mapped to a [dataclass](dsMapping.md#dataclass) object, a field is an [attribute](dsMapping.md##attribute) of a dataclass, and records are accessed through [entities](dsMapping.md#entity) and [entity selections](dsMapping.md#entity-selection). -## Pourquoi utiliser ORDA ? +## Why use ORDA? -Au lieu de représenter des informations sous forme de tables, d'enregistrements et de champs, ORDA utilise une autre approche qui permet de faire correspondre plus précisément les données aux concepts concrets. +Instead of representing information as tables, records, and fields, ORDA uses an alternate approach that more accurately maps data to real-world concepts. -Imaginez la possibilité de dénormaliser une structure relationnelle sans pour autant réduire l'efficacité. Imaginez que vous décriviez la totalité des objets métier dans votre application de telle sorte que l'utilisation des données devienne simple et directe, et supprime le besoin d'une compréhension complète de la structure relationnelle. +Imagine the ability to denormalize a relational structure, yet not affect efficiency. Imagine describing everything about the business objects in your application in such a way that using the data becomes simple and straightforward and removes the need for a complete understanding of the relational structure. -Dans un datastore, une seule dataclass peut incorporer tous les éléments qui composent une table de base de données relationnelle traditionnelle, mais peut également inclure des valeurs d'entités parentes liées et des références directes aux entités et aux sélections d'entités liées. +In the ORDA data model, a single dataclass can incorporate all of the elements that make up a traditional relational database table, but can also include values from related parent entities, and direct references to related entities and entity selections. -Une requête retourne une liste d'entités appelée sélection d'entités (entity selection), qui joue le rôle d'un ensemble de lignes d'une requête SQL. La différence est que chaque entité "sait" à quoi elle appartient dans le modèle de données et "comprend" sa relation avec toutes les autres entités. Cela signifie qu'un développeur n'a pas besoin d'expliquer, dans une requête, comment relier les différentes informations, ni comment écrire, dans une mise à jour, des valeurs modifiées dans la structure relationnelle. +A query returns a list of entities called an entity selection, which fulfills the role of a SQL query’s row set. The difference is that each entity "knows" where it belongs in the data model and "understands" its relationship to all other entities. This means that a developer does not need to explain in a query how to relate the various pieces of information, nor in an update how to write modified values back to the relational structure. -En outre, les objets ORDA tels que les sélections d'entités ou les entités peuvent être facilement liés à des objets UI tels que des list box ou des variables. Combinés avec des fonctionnalités puissantes telles que les commandes `This` et `Form`, ils permettent de construire des interfaces modernes et modulaires basés sur des objets et des collections. +In addition, ORDA objects such as entity selections or entities can be easily bound to UI objects such as list boxes or variables. Combined with powerful features such as the `This` and `Form` commands, they allow the building modern and modular interfaces based upon objects and collections. -## Comment utiliser ORDA ? +## How to use ORDA? -Fondamentalement, ORDA gère des objets. Dans ORDA, tous les concepts principaux, y compris le datastore lui-même, sont disponible via des objets. The datastore is automatically [mapped upon the 4D structure](dsMapping.md). +Basically, ORDA handles objects. In ORDA, all main concepts, including the datastore itself, are available through objects. The datastore is automatically [mapped upon the 4D structure](dsMapping.md). -Les objets dans ORDA peuvent être manipulés comme des objets standard 4D, mais ils bénéficient automatiquement de propriétés et de méthodes spécifiques. +ORDA objects can be handled like 4D standard objects, but they automatically benefit from specific properties and methods. ORDA objects are created and instanciated when necessary by 4D methods (you do not need to create them). However, ORDA data model objects are associated with [classes where you can add custom functions](ordaClasses.md). From e9d3a01e6f2d08384124f362c2207abd1d8d3fab Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:27:00 +0100 Subject: [PATCH 219/260] New translations quickTour.md (French) --- website/translated_docs/fr/ORDA/quickTour.md | 112 +++++++++---------- 1 file changed, 56 insertions(+), 56 deletions(-) diff --git a/website/translated_docs/fr/ORDA/quickTour.md b/website/translated_docs/fr/ORDA/quickTour.md index 937770f237d6ee..e6be52203e916f 100644 --- a/website/translated_docs/fr/ORDA/quickTour.md +++ b/website/translated_docs/fr/ORDA/quickTour.md @@ -1,13 +1,13 @@ --- id: quickTour -title: Tour d'horizon d'ORDA +title: A Quick Tour in ORDA --- Since ORDA is object-based, using ORDA requires basic knowledge in object programmming. ## Exploring the datastore -La banque de données ORDA est automatiquement basée sur une structure de base de données 4D, à condition qu'elle soit conforme aux prérequis ORDA. Cet exemple utilisera la structure de base de données 4D simple suivante: Pour savoir ce qui est exposé en tant que magasin de données, créez une nouvelle méthode de projet, écrivez la ligne suivante: TRACE Exécutez la méthode - elle appelle simplement la fenêtre du débogueur. Dans la zone Expression, double-cliquez pour insérer une expression et entrez ds. Il renvoie l'objet de banque de données. Déployez l'objet, vous pouvez voir que les tables et les champs sont automatiquement exposés par ORDA en tant que propriétés de l'objet ds: Cela signifie par exemple que, chaque fois que vous avez besoin de vous référer au champ city de la table [Company], dans ORDA il vous suffit d'écrire: ds.Company.city // renvoie le nom de la ville Dans le monde ORDA, ds.Company est une classe de données. ds.Company.city est un attribut. ORDA est sensible à la casse. ds.company.city ne fera pas référence à l'attribut ds.Company.city. Vous avez également remarqué la propriété extra hires dans la classe de données ds.Company. Cela ne correspond pas à un champ. embauche est en fait le nom de la relation un à plusieurs entre l'entreprise et l'employé: Nom de la relation tel que défini dans l'inspecteur Cela signifie que, chaque fois que vous avez besoin d'accéder à la liste des employés travaillant pour une entreprise, dans ORDA il vous suffit d'écrire: ds.Company.hires // renvoie la liste des employés Mais n'allez pas trop vite. Voyons maintenant comment enregistrer des données dans des classes de données ORDA. Ajout de données Dans ORDA, vous pouvez ajouter un enregistrement à une classe de données à l'aide de la commande new (). Dans le monde ORDA, un enregistrement est une entité - une entité est elle-même un objet. Une commande attachée à un objet spécifique est appelée une méthode membre. $ entity: = ds.Company.new () // créer une nouvelle référence d'entité // dans la classe de données de l'entreprise // et affectez-le à la variable $ entity Un nouvel objet entité contient une "copie" de tous les attributs de sa classe de données parent, vous pouvez donc leur attribuer des valeurs: $ entity.name: = "ACME, inc." $ entity.city: = "Londres" //$entity.ID est automatiquement rempli Pour le moment, l'entité n'existe qu'en mémoire. Pour le stocker dans le fichier de données, vous devez l'enregistrer à l'aide de la méthode membre save (). +The ORDA datastore is automatically based upon a 4D database structure, provided it complies with the [ORDA prerequisites](overview.md#orda-prerequisites). This example will use the following simple 4D database structure: @@ -78,117 +78,117 @@ $status:=$entity.save() -L'éditeur des utilisateurs se trouve dans la boîte à outils de 4D. +The editor for users is located in the Toolbox of 4D. ![](assets/en/Users/editor.png) -### Ajouter et modifier des utilisateurs +### Adding and modifying users -Vous utilisez l’éditeur d’utilisateurs pour créer des comptes utilisateurs, définir leurs propriétés et leur appartenance aux différents groupes. +You use the users editor to create user accounts, set their properties and assign them to various groups. -Pour ajouter un utilisateur depuis la boite à outils : +To add a user from the Toolbox : -1. Sélectionnez **Boîte à outils > Utilisateurs** dans le menu **Développement** ou cliquez sur le bouton **Boîte outils** de la barre d’outils de 4D. 4D affiche la fenêtre d’édition des utilisateurs. +1. Select **Tool Box > Users** from the **Design** menu or click on the **Tool Box** button of the 4D toolbar. 4D displays the users editor. -La liste des utilisateurs affiche tous les utilisateurs, y compris [le Super_Utilisateur et l'l’Administrateur](#designer-and-administrator). +The list of users displays all the users, including the [Designer and the Administrator](#designer-and-administrator). -2. Cliquez sur le bouton d’ajout ![](assets/en/Users/PlussNew.png) situé au-dessous de la Liste des utilisateurs. OU Cliquez avec le bouton droit de la souris dans la Liste des utilisateurs et choisissez la commande **Ajouter** ou **Dupliquer** dans le menu contextuel. +2. Click on the ![](assets/en/Users/PlussNew.png) button located below the list of users. OR Right-click in the list of users and choose **Add** or **Duplicate** in the context menu. -> La commande **Dupliquer** permet de créer rapidement plusieurs utilisateurs ayant des caractéristiques communes. +> The **Duplicate** command can be used to create several users having the same characteristics quickly. -4D ajoute un nouvel utilisateur à la liste, nommé par défaut "Nouvel utilisateurN". +4D adds a new user to the list, named "New userX" by default. -3. Saisissez le nom du nouvel utilisateur. Ce nom sera utilisé par l’utilisateur pour ouvrir la base. Vous pouvez renommer un utilisateur à tout moment en utilisant la commande **Renommer** du menu contextuel, ou en utilisant la combinaison Alt+clic (Windows) ou Option+clic (macOS) ou en cliquant deux fois sur un nom. +3. Enter the user name. This name will be used by the user to open the database. You can rename a user at any time using the **Rename** command of the context menu, or by using the Alt+click (Windows) or Option+click (macOS) shortcuts, or by clicking twice on the name you want to change. -4. Pour saisir le mot de passe de l’utilisateur, cliquez sur le bouton **Modifier...** dans la zone des propriétés de l’utilisateur et saisissez deux fois le mot de passe dans la boite de dialogue. Vous pouvez saisir jusqu’à 15 caractères alphanumériques. L’éditeur de mots de passe tient compte de la casse des caractères (majuscules ou minuscules). +4. To enter a password for the user, click the **Edit...** button in the user properties area and enter the password twice in the dialog box. You can use up to 15 alphanumeric characters for a password. The password editor is case sensitive. -> Les utilisateurs peuvent modifier leur mot de passe à tout moment en fonction des options de la page Sécurité des propriétés de la base, ou à l'aide de la commande `CHANGE PASSWORD`. +> Users can change their password at any time according to the options in the "Security" page of the database settings, or using the `CHANGE PASSWORD` command. -5. Définissez le ou les groupe(s) d’appartenance de l’utilisateur à l’aide du tableau “Membre des groupes”. Vous pouvez ajouter l’utilisateur sélectionné à un groupe en cochant l’option correspondante dans la colonne Membre. +5. Set the group(s) to which the user belongs using the "Member of Groups" table. You can add or remove the selected user to/from a group by checking the corresponding option in the Member column. -L’appartenance des utilisateurs aux groupes peut également être définie par groupe dans la [page Groupes](#configuring-access-groups). +The membership of users to different groups can also be set by group on the [Groups page](#configuring-access-groups). -### Supprimer un utilisateur +### Deleting a user -Pour supprimer un utilisateur, sélectionnez-le puis cliquez sur le bouton de suppression ou utilisez la commande **Supprimer** du menu contextuel. ![](assets/en/Users/MinussNew.png) +To delete a user, select it then click the deletion button or use the **Delete** command of the context menu. ![](assets/en/Users/MinussNew.png) -Les utilisateurs supprimés n'apparaissent plus dans la liste de l'éditeur d'utilisateurs. A noter que les numéros des utilisateurs supprimés peuvent être réattribués lors de la création de nouveaux comptes. +Deleted user names no longer appear in the Users editor. Note that the IDs for deleted users are reassigned when new user accounts are created. -### Propriétés des utilisateurs +### User properties -- Le champ **Type d’utilisateur** : le champ Type d’utilisateur contient "Super_Utilisateur", "Administrateur", ou (pour tous les autres utilisateurs) "Utilisateur". +- **User Kind**: The User Kind field contains "Designer", "Administrator", or (for all other users) "User". -- **Méthodes de démarrage** : Nom d'une méthode associée qui sera automatiquement associée lorsque l'utilisateur ouvre la base (facultatif). Cette méthode peut être utilisée par exemple pour charger les préférences utilisateur. +- **Startup Method**: Name of an associated method that will be automatically executed when the user opens the database (optional). This method can be used for example to load the user preferences. -## Éditeur de groupes +## Groups editor -L'éditeur de groupes se trouve dans la boîte à outils de 4D. +The editor for groups is located in the Toolbox of 4D. -### Configurer des groupes +### Configuring groups -Vous utilisez l’éditeur de groupes pour définir les éléments qu’ils contiennent (utilisateurs et/ou autres groupes) et pour répartir les accès aux plug-ins. +You use the groups editor to set the elements that each group contains (users and/or other groups) and to distribute access to plug-ins. -Attention, une fois créé, un groupe ne peut pas être supprimé. Si vous souhaitez désactiver un groupe, il vous suffit de retirer tous les utilisateurs qu’il contient. +Keep in mind that once a group has been created, it cannot be deleted. If you want to deactivate a group, you just need to remove any users it contains. -Pour créer un groupe : +To create a group: -1. Sélectionnez **Boîte à outils > Groupes** dans le menu **Développement** ou cliquez sur le bouton **Boîte outils** de la barre d’outils de 4D puis cliquez sur le bouton **Groupes**. 4D affiche la fenêtre d’édition des groupes. La liste des groupes affiche tous les groupes de la base. +1. Select **Tool Box > Groups** in the **Design** menu or click on the **Tool Box** button of the 4D toolbar then on the **Groups** button. 4D displays the groups editor window. The list of groups displays all the groups of the database. -2. Cliquez sur le bouton ![](assets/en/Users/PlussNew.png) situé en-dessous de la liste des groupes. - OU - Faites un clic droit sur la liste de groupes et sélectionnez la commande **Ajouter** ou **Dupliquer** dans le menu contextuel. +2. Click on the ![](assets/en/Users/PlussNew.png) button located below the list of groups. + OR + Right-click in the list of groups and choose the **Add** or **Duplicate** command in the context menu. -> La commande Dupliquer permet de créer rapidement plusieurs groupes ayant des caractéristiques communes. +> The Duplicate command can be used to create several groups having the same characteristics quickly. -4D ajoute un nouveau groupe à la liste, nommé par défaut "Nouveau groupe1". +4D adds a new group to the list, named "New groupX" by default. -3. Saisissez le nom du nouveau groupe. Le nom du groupe peut avoir une longueur maximale de 15 caractères. Vous pouvez renommer un groupe à tout moment en utilisant la commande **Renommer** du menu contextuel, ou en utilisant la combinaison Alt+clic (Windows) ou Option+clic (macOS) ou en cliquant deux fois sur un nom. +3. Enter the name of the new group. The group name can be up to 15 characters long. You can rename a group at any time using the **Rename** command of the context menu, or by using the Alt+click (Windows) or Option+click (macOS) shortcuts, or by clicking twice on the name you want to change. -### Placer des utilisateurs ou des groupes dans des groupes +### Placing users or groups into groups -Vous pouvez placer tout utilisateur ou tout groupe dans un groupe et vous pouvez aussi le placer dans plusieurs groupes. Il n’est pas obligatoire de placer un utilisateur dans un groupe. +You can place any user or group into a group, and you can also place the group itself into several other groups. It is not mandatory to place a user in a group. -Pour placer un utilisateur ou un groupe dans un groupe, il suffit de sélectionner le groupe dans la liste puis de cocher l’option "Membre" pour chaque utilisateur ou groupe dans la zone d’attribution des membres : +To place a user or group in a group, you simply need to check the "Member" option for each user or group in the member attribution area: ![](assets/en/Users/groups.png) -Si vous cochez le nom d’un utilisateur, l’utilisateur est ajouté au groupe. Si vous cochez un nom de groupe, tous les utilisateurs du groupe sont ajoutés au nouveau groupe. L’utilisateur ou le groupe affilié dispose alors des privilèges d’accès affectés au nouveau groupe. +If you check the name of a user, this user is added to the group. If you check the name of a group, all the users of the group are added to the new group. The affiliated user or group will then have the same access privileges as those assigned to the new group. -Placer des groupes dans d’autres groupes permet de créer une hiérarchie d’utilisateurs. Les utilisateurs d’un groupe placé dans un autre groupe disposent des autorisations d’accès des deux groupes. Reportez-vous au paragraphe [Un schéma d’accès hiérarchique](#an-access-hierarchy-scheme) ci-dessous. +Placing groups into other groups lets you create a user hierarchy. The users of a group placed in another group will have the access privileges of both groups. See "[An access hierarchy scheme](#an-access-hierarchy-scheme)" below. -Pour supprimer un utilisateur ou un groupe d’un autre groupe, il suffit de désélectionner l’option correspondante dans la liste des membres. +To remove a user or group from another group, you just need to deselect the corresponding option in the member attribution area. -### Affecter un groupe à un plug-in ou à un serveur +### Assigning a group to a plug-in or to a server -Vous pouvez affecter un groupe d’accès à tout plug-in 4D installé dans votre base de données. Les plug-ins comprennent tous les plug-ins de 4D ainsi que tout plug-in développés par une société tierce. +You can assign a group privileges to any plug-ins installed in the database. This includes all the 4D plug-ins and any third-party plug-ins. -Répartir les accès aux plug-ins vous permet de contrôler l’utilisation des licences dont vous disposez pour ces plug-ins. Tout utilisateur n’appartenant pas au groupe d’accès à un plug-in ne pourra pas charger ce plug-in. +Distributing access to the plug-ins lets you control the use of the licenses you possess for these plug-ins. Any users that do not belong to the access group of a plug-in cannot load this plug-in. -Vous pouvez également contrôler l’utilisation du serveur Web et du serveur SOAP de 4D en mode distant via la zone d’accès aux plug-ins. +You can also restrict the use of the 4D Client Web server and SOAP server via the plug-in access area. -La zone “Plug-ins” de la page Groupes de la boîte à outils liste tous les plug-ins chargés par l’application 4D. Pour affecter un groupe à un plug-in, il suffit de cocher l’option correspondante. +The “Plug-in” area on the Groups page of the tool box lists all the plug-ins loaded by the 4D application. To give a group access to a plug-in, you simply need to check the corresponding option. ![](assets/en/Users/plugins.png) -Les lignes **4D Client Web Server** et **4D Client SOAP Server** permettent contrôler la possibilité de publication Web et SOAP (Web Services) de chaque 4D en mode distant. En effet, ces licences sont considérées par 4D Server comme des licences de plug-ins. Ainsi, comme pour un plug-in, vous pouvez restreindre le droit d’utiliser ces licences à un groupe d’utilisateurs spécifique. +The **4D Client Web Server** and **4D Client SOAP Server** items lets you control the possibility of Web and SOAP (Web Services) publication for each 4D in remote mode. These licenses are considered as plug-in licenses by 4D Server. Therefore, in the same way as for plug-ins, you can restrict the right to use these licenses to a specific group of users. -### Un schéma d’accès hiérarchique +### An access hierarchy scheme -Le meilleur moyen d’assurer la sécurité de votre base de données et de proposer différents niveaux d’accès aux utilisateurs est d’utiliser un schéma hiérarchique des accès. Les utilisateurs peuvent être affectés à différents groupes et les groupes peuvent être hiérarchisés pour créer des niveaux de droits d’accès. Cette section décrit différentes approches de ce thème. +The best way to ensure the security of your database and provide users with different levels of access is to use an access hierarchy scheme. Users can be assigned to appropriate groups and groups can be nested to create a hierarchy of access rights. This section discusses several approaches to such a scheme. -Dans cet exemple, un utilisateur appartient à l’un des trois groupes définis suivant son niveau de responsabilité. Les utilisateurs du groupe Comptabilité sont responsables de la saisie de données. Les utilisateurs du groupe Dir. finance sont responsables de la mise à jour des données, comme la mise à jour d’enregistrements ou la suppression d’enregistrements obsolètes. Les utilisateurs du groupe Direction générale sont responsables de l’analyse de données, ce qui inclut la réalisation de recherches et l’impression d’états. +In this example, a user is assigned to one of three groups depending on their level of responsibility. Users assigned to the Accounting group are responsible for data entry. Users assigned to the Finances group are responsible for maintaining the data, including updating records and deleting outdated records. Users assigned to the General Management group are responsible for analyzing the data, including performing searches and printing analytical reports. -Les groupes sont hiérarchisés afin que les privilèges soient correctement affectés aux utilisateurs de chacun des groupes. +The groups are then nested so that privileges are correctly distributed to the users of each group. -- Le groupe Direction générale ne contient que les utilisateurs de “haut niveau”. ![](assets/en/Users/schema1.png) +- The General Management group contains only “high-level” users. ![](assets/en/Users/schema1.png) -- Le groupe Dir. finance contient les utilisateurs du groupe Direction générale. ![](assets/en/Users/schema2.png) +- The Finances group contains data maintenance users as well as General Management users, thus the users in General Management have the privileges of the Finances group as well. ![](assets/en/Users/schema2.png) -- Le groupe Comptabilité contient des opérateurs de saisie mais aussi les utilisateurs des groupes Dir. finance et donc Direction générale. ![](assets/en/Users/schema3.png) +- The Accounting group contains data entry users as well as Finances group users, so the users who belong to the Finances group and the General Management group enjoy the privileges of the Accounting group as well. ![](assets/en/Users/schema3.png) -Vous pouvez ensuite décider des privilèges affectés à chaque groupe suivant le niveau de responsabilité des utilisateurs qu’il contient. +You can decide which access privileges to assign to each group based on the level of responsibility of the users it includes. -Un tel système hiérarchique rend aisée l’affectation d’un utilisateur à un groupe. Il suffit de placer chaque utilisateur dans un groupe et d’utiliser la hiérarchie des groupes pour déterminer les accès. +Such a hierarchical system makes it easy to remember to which group a new user should be assigned. You only have to assign each user to one group and use the hierarchy of groups to determine access. From 159221a3ea24bb203c5a0e863a7809049ebe129d Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:27:02 +0100 Subject: [PATCH 220/260] New translations remoteDatastores.md (French) --- .../fr/ORDA/remoteDatastores.md | 62 +++++++++---------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/website/translated_docs/fr/ORDA/remoteDatastores.md b/website/translated_docs/fr/ORDA/remoteDatastores.md index b98b99e71e4168..9302c997f5c7d6 100644 --- a/website/translated_docs/fr/ORDA/remoteDatastores.md +++ b/website/translated_docs/fr/ORDA/remoteDatastores.md @@ -1,60 +1,60 @@ --- id: datastores -title: Utiliser un datastore distant +title: Using a remote datastore --- -Un [datastore](dsMapping.md#datastore) exposé sur une application 4D Server est accessible simultanément via différents clients : +A [datastore](dsMapping.md#datastore) exposed on a 4D application can be accessed simultaneously through different clients: -- Les applications 4D distantes utilisant ORDA pour accéder au datastore principal à l’aide de la commande `ds`. A noter que l'application 4D distante peut toujours accéder à la base de données en mode classique. Ces accès sont gérés par le **serveur d'applications 4D**. -- D'autres applications 4D (4D Remote, 4D Server) ouvrant une session sur le datastore distant via la commande `Open datastore`. Ces accès sont transmis par le **serveur HTTP REST**. -- Les requêtes 4D for iOS pour la mise à jour des applications iOS. Ces accès sont remis par le **serveur HTTP**. +- 4D remote applications using ORDA to access the main datastore with the `ds` command. Note that the 4D remote application can still access the database in classic mode. These accesses are handled by the **4D application server**. +- Other 4D applications (4D remote, 4D Server) opening a session on the remote datastore through the `Open datastore` command. These accesses are handled by the **HTTP REST server**. +- 4D for iOS queries for updating iOS applications. These accesses are handled by the **HTTP server**. -Lorsque vous travaillez avec un datastore distant référencé par des appels à la commande `Open datastore`, la connexion entre les process qui effectuent la requête et le datastore distant est gérée par des sessions. +When you work with a remote datastore referenced through calls to the `Open datastore` command, the connection between the requesting processes and the remote datastore is handled via sessions. ## Ouverture des sessions -Lorsqu'une application 4D (c'est-à-dire un process) ouvre un datastore externe à l'aide de la commande `Open datastore`, une session est créée sur le datastore distant pour gérer la connexion. Cette session est identifiée à l'aide d'un ID de session interne, associé au `localID` de l'application 4D. Cette session gère automatiquement l'accès aux données, aux sélections d'entités ou aux entités. +When a 4D application (*i.e.* a process) opens an external datastore using the `Open datastore` command, a session in created on the remote datastore to handle the connection. This session is identified using a internal session ID which is associated to the `localID` on the 4D application. This session automatically manages access to data, entity selections, or entities. -Le `localID` est local à la machine qui se connecte au datastore distant, ce qui signifie : +The `localID` is local to the machine that connects to the remote datastore, which means: -* Que si d'autres process de la même application doivent accéder au même datastore distant, ils peuvent utiliser le même `localID` et partager alors la même session. -* Que si un autre process de la même application ouvre le même datastore distant, mais avec un autre `localID`, il créera une nouvelle session sur le datastore distant. -* Que si un autre poste se connecte au même datastore distant avec le même `localID`, il créera une autre session avec un autre cookie. +* If other processes of the same application need to access the same remote datastore, they can use the same `localID` and thus, share the same session. +* If another process of the same application opens the same remote datastore but with another `localID`, it will create a new session on the remote datastore. +* If another machine connects to the same remote datastore with the same `localID`, it will create another session with another cookie. -Ces principes sont illustrés dans les graphiques suivants : +These principles are illustrated in the following graphics: ![](assets/en/ORDA/sessions.png) -> Pour les sessions ouvertes par des requêtes REST, veuillez consulter aux [Utilisateurs et sessions](REST/authUsers.md). +> For sessions opened by REST requests, please refer to [Users and sessions](REST/authUsers.md). -## Visionnage des sessions +## Viewing sessions -Les process qui gèrent les sessions d'accès aux datastore apparaissent dans la fenêtre d'administration de 4D Server : +Processes that manage sessions for datastore access are shown in the 4D Server administration window: -* nom : "Gestionnaire REST : < nom du process > " -* type : type Worker Server HTTP -* session : le nom de session est le nom d'utilisateur passé à la commande Open datastore. +* name: "REST Handler: \" +* type: HTTP Server Worker type +* session: session name is the user name passed to the Open datastore command. -Dans l'exemple suivant, deux process sont en cours d'exécution pour la même session : +In the following example, two processes are running for the same session: ![](assets/en/ORDA/sessionAdmin.png) -## Verrouillage et transactions +## Locking and transactions -Les fonctionnalités ORDA relatives au verrouillage d'entité et aux transactions sont gérées au niveau du process dans les datastore distants, tout comme en mode client/serveur ORDA : +ORDA features related to entity locking and transaction are managed at process level in remote datastores, just like in ORDA client/server mode: -* Si un process verrouille une entité à partir d'un datastore distant, l'entité est verrouillée pour tous les autres process, même lorsque ces process partagent la même session (voir [Verrouillage d'entités](entities.md#entity-locking)). Si plusieurs entités pointant vers le même enregistrement ont été verrouillées dans un process, elles doivent toutes être déverrouillées dans le process pour supprimer le verrou. Si un verrou a été mis sur une entité, il est supprimé lorsqu'il n'existe plus de référence à cette entité en mémoire. -* Les transactions peuvent être lancées, validées ou annulées séparément sur chaque datastore distant à l'aide des méthodes `dataStore.startTransaction( )`, `dataStore.cancelTransaction( )`, et `dataStore.validateTransaction( )`. Elles n’ont pas d’incidences sur les autres datastore. -* Les commandes classiques du langage 4D (`START TRANSACTION`, `VALIDATE TRANSACTION`, `CANCEL TRANSACTION`) s'appliquent uniquement au datastore principal (renvoyé par `ds`). Si une entité d'un datastore distant est verrouillée par une transaction dans un process, les autres process ne peuvent pas la mettre à jour, même si ces process partagent la même session. -* Les verrous sur les entités sont supprimés et les transactions sont annulées : - * quand le processus est tué. - * quand la session est fermée sur le serveur - * lorsque la session est arrêtée à partir de la fenêtre d’administration du serveur. +* If a process locks an entity from a remote datastore, the entity is locked for all other processes, even when these processes share the same session (see [Entity locking](entities.md#entity-locking)). If several entities pointing to a same record have been locked in a process, they must be all unlocked in the process to remove the lock. If a lock has been put on an entity, the lock is removed when there is no more reference to this entity in memory. +* Transactions can be started, validated or cancelled separately on each remote datastore using the `dataStore.startTransaction()`, `dataStore.cancelTransaction()`, and `dataStore.validateTransaction()` functions. They do not impact other datastores. +* Classic 4D language commands (`START TRANSACTION`, `VALIDATE TRANSACTION`, `CANCEL TRANSACTION`) only apply to the main datastore (returned by `ds`). If an entity from a remote datastore is hold by a transaction in a process, other processes cannot update it, even if these processes share the same session. +* Locks on entities are removed and transactions are rollbacked: + * when the process is killed. + * when the session is closed on the server + * when the session is killed from the server administration window. -## Fermeture des sessions +## Closing sessions -Une session est automatiquement fermée par 4D lorsqu'il n'y a pas eu d'activité durant son timeout. Le timeout par défaut est de 60 mn mais cette valeur peut être paramétrée à l'aide du paramètre `connectionInfo` de la commande `Open datastore`. +A session is automatically closed by 4D when there has been no activity during its timeout period. The default timeout is 60 mn, but this value can be modified using the `connectionInfo` parameter of the `Open datastore` command. -Si une demande est envoyée au datastore distant après la fermeture de la session, elle est automatiquement recréée si possible (licence disponible, serveur non arrêté, etc.). A noter cependant que le contexte de la session des verrous et des transactions est perdu (voir ci-dessus). +If a request is sent to the remote datastore after the session has been closed, it is automatically re-created if possible (license available, server not stopped...). However, keep in mind that the context of the session regarding locks and transactions is lost (see above). From cc0f67fa07f927b66847ab318d4f193f2b587d6f Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:27:04 +0100 Subject: [PATCH 221/260] New translations ClassFunctions.md (French) --- .../translated_docs/fr/REST/ClassFunctions.md | 234 +++++++++--------- 1 file changed, 117 insertions(+), 117 deletions(-) diff --git a/website/translated_docs/fr/REST/ClassFunctions.md b/website/translated_docs/fr/REST/ClassFunctions.md index 648b63081c7913..2be244f0652494 100644 --- a/website/translated_docs/fr/REST/ClassFunctions.md +++ b/website/translated_docs/fr/REST/ClassFunctions.md @@ -1,32 +1,32 @@ --- id: classFunctions -title: Appeler des fonctions de classe ORDA +title: Calling ORDA class functions --- ## Aperçu -Vous pouvez appeler les [fonctions de classe utilisateur](ORDA/ordaClasses.md) définies pour le modèle de données ORDA via vos requêtes REST, afin de bénéficier de l'API de l'application 4D ciblée. +You can call [user class functions](ORDA/ordaClasses.md) defined for the ORDA Data Model through your REST requests, so that you can benefit from the exposed API of the targeted 4D application. -Les fonctions sont simplement appelées dans les requêtes POST sur l'interface ORDA appropriée, sans (). Par exemple, si vous avez défini une fonction `getCity()` dans la dataclass City, vous pouvez l'appeler à l'aide de la requête suivante : +Functions are simply called in POST requests on the appropriate ORDA interface, without (). For example, if you have defined a `getCity()` function in the City dataclass class, you could call it using the following request: `/rest/City/getCity` -avec des données contenues dans le corps de la requête POST : `["Paris"]` +with data in the body of the POST request: `["Aguada"]` -Dans le langage 4D, cet appel équivaut à : +In 4D language, this call is equivalent to, : ```4d $city:=ds.City.getCity("Aguada") ``` -## Appeler des fonctions +## Function calls -Les fonctions doivent toujours être appelées à l'aide des requêtes **POST** (une requête GET recevra une erreur). +Functions must always be called using REST **POST** requests (a GET request will receive an error). -Les fonctions sont appelées sur l'objet correspondant au datastore du serveur. +Functions are called on the corresponding object on the server datastore. -| Fonction de classe | Syntaxe | +| Class function | Syntax | | ------------------------------------------------------------------ | --------------------------------------------------------------------------- | | [datastore class](ORDA/ordaClasses.md#datastore-class) | `/rest/$catalog/datastoreClassFunction` | | [dataclass class](ORDA/ordaClasses.md#dataclass-class) | `/rest/{dataClass}/dataClassClassFunction` | @@ -38,85 +38,85 @@ Les fonctions sont appelées sur l'objet correspondant au datastore du serveur. -> `/rest/{dataClass}/Function` peut être utilisé pour appeler une fonction de dataclass ou de sélection d'entité (`/rest/{dataClass}` retourne toutes les entités de la DataClass en tant que sélection d'entité). -> La fonction est d'abord recherchée dans la classe de sélection d'entité. Si elle n'est pas trouvée, elle est recherchée dans la dataclass. En d'autres termes, si une fonction portant le même nom est définie à la fois dans la classe DataClass et la classe EntitySelection, la fonction de classe de dataclass ne sera jamais exécutée. +> `/rest/{dataClass}/Function` can be used to call either a dataclass or an entity selection function (`/rest/{dataClass}` returns all entities of the DataClass as an entity selection). +> The function is searched in the entity selection class first. If not found, it is searched in the dataclass. In other words, if a function with the same name is defined in both the DataClass class and the EntitySelection class, the dataclass class function will never be executed. ## Paramètres -Vous pouvez envoyer des paramètres aux fonctions définies dans les classes utilisateurs ORDA. Côté serveur, ils seront reçus dans les fonctions de classe dans les paramètres normaux $1, $2, etc. +You can send parameters to functions defined in ORDA user classes. On the server side, they will be received in the class functions in regular $1, $2, etc. parameters. -Les règles suivantes s'appliquent : +The following rules apply: -- Les paramètres doivent être passés dans le **corps de la requête POST** -- Les paramètres doivent être inclus dans une collection (format JSON) -- Tous les types de données scalaires pris en charge dans les collections JSON peuvent être passés en tant que paramètres. -- La sélection d'entité et l'entité peuvent être passées en tant que paramètres. L'objet JSON doit contenir des attributs spécifiques utilisés par le serveur REST pour affecter des données aux objets ORDA correspondants : __DATACLASS, __ENTITY, __ENTITIES, __DATASET. +- Parameters must be passed in the **body of the POST request** +- Parameters must be enclosed within a collection (JSON format) +- All scalar data types supported in JSON collections can be passed as parameters. +- Entity and entity selection can be passed as parameters. The JSON object must contain specific attributes used by the REST server to assign data to the corresponding ORDA objects: __DATACLASS, __ENTITY, __ENTITIES, __DATASET. -Voir [cet exemple](#request-receiving-an-entity-as-parameter) et [cet exemple](#request-receiving-an-entity-selection-as-parameter). +See [this example](#request-receiving-an-entity-as-parameter) and [this example](#request-receiving-an-entity-selection-as-parameter). -### Paramètre de valeur scalaire +### Scalar value parameter -Le(s) paramètre(s) doivent simplement être incluse dans une collection définie dans le corps. Par exemple, avec une fonction de dataclass `getCities()` qui reçoit des paramètres de type texte : `/rest/City/getCities` +Parameter(s) must simply be enclosed in a collection defined in the body. For example, with a dataclass function `getCities()` receiving text parameters: `/rest/City/getCities` -**Parmaètres dans le corps :** ["Aguada","Paris"] +**Parameters in body:** ["Aguada","Paris"] -Tous les types de données JSON sont pris en charge dans les paramètres, y compris les pointeurs JSON. Les dates peuvent être passées sous forme de chaînes au format de date ISO 8601 (par exemple, "2020-08-22T22:00:000Z"). +All JSON data types are supported in parameters, including JSON pointers. Dates can be passed as strings in ISO 8601 date format (e.g. "2020-08-22T22:00:000Z"). -### Paramètre d'entité +### Entity parameter -Les entités passées en paramètres sont référencées sur le serveur via leur clé (c'est-à-dire la propriété __KEY). Si le paramètre clé est omis dans une requête, une nouvelle entité est chargée en mémoire du serveur. Vous pouvez également transmettre des valeurs pour tous les attributs de l'entité. Ces valeurs seront automatiquement utilisées pour l'entité traitée sur le serveur. +Entities passed in parameters are referenced on the server through their key (*i.e.* __KEY property). If the key parameter is omitted in a request, a new entity is loaded in memory the server. You can also pass values for any attributes of the entity. These values will automatically be used for the entity handled on the server. -> Si la requête envoie des valeurs d'attribut modifiées pour une entité existante sur le serveur, la fonction de modèle de données ORDA appelée sera automatiquement exécutée sur le serveur avec des valeurs modifiées. Cette fonctionnalité vous permet, par exemple, de vérifier le résultat d'une opération sur une entité, après avoir appliqué toutes les règles métier, depuis l'application cliente. Vous pouvez alors décider de sauvegarder ou non l'entité sur le serveur. +> If the request sends modified attribute values for an existing entity on the server, the called ORDA data model function will be automatically executed on the server with modified values. This feature allows you, for example, to check the result of an operation on an entity, after applying all business rules, from the client application. You can then decide to save or not the entity on the server. -| Propriétés | Type | Description | -| --------------------- | ------------------------------------------------- | --------------------------------------------------------------------------- | -| Attributs de l'entité | mixte | Optionnelle - Valeurs à modifier | -| __DATACLASS | Chaine | Obligatoire - Indique la Dataclass de l'entité | -| __ENTITY | Booléen | Obligatoire - Vrai pour indiquer au serveur que le paramètre est une entité | -| __KEY | mixte (type identique à celui de la clé primaire) | Optionnel - clé primaire de l'entité | +| Properties | Type | Description | +| ------------------------ | ------------------------------------ | -------------------------------------------------------------------------- | +| Attributes of the entity | mixed | Optional - Values to modify | +| __DATACLASS | Chaine | Mandatory - Indicates the Dataclass of the entity | +| __ENTITY | Booléen | Mandatory - True to indicate to the server that the parameter is an entity | +| __KEY | mixed (same type as the primary key) | Optional - Primary key of the entity | -- Si __KEY n'est pas fourni, une nouvelle entité est créée sur le serveur avec les attributs donnés. -- Si __KEY est fourni, l'entité correspondant à _KEY est chargée sur le serveur avec les attributs donnés +- If __KEY is not provided, a new entity is created on the server with the given attributes. +- If __KEY is provided, the entity corresponding to __KEY is loaded on the server with the given attributes -Voir les exemple de [création](#creating-an-entity) ou de [mise à jour](#updating-an-entity) des entités. +See examples for [creating](#creating-an-entity) or [updating](#updating-an-entity) entities. -#### Paramètre d'entité associé +#### Related entity parameter -Mêmes propriétés que pour un [paramètre d'entité](#entity-parameter). De plus, l'entité associée doit exister et est référencée par __KEY, qui contient sa clé primaire. +Same properties as for an [entity parameter](#entity-parameter). In addition, the related entity must exist and is referenced by __KEY containing its primary key. -Reportez-vous aux exemples de [création](#creating-an-entity-with-a-related-entity) ou de [mise à jour](#updating-an-entity-with-a-related-entity) des entités avec des entités associées. +See examples for [creating](#creating-an-entity-with-a-related-entity) or [updating](#updating-an-entity-with-a-related-entity) entities with related entities. -### Paramètre de sélection d'entité +### Entity selection parameter -La sélection d'entité doit avoir été définie au préalable à l'aide de [$method=entityset]($method.md#methodentityset). +The entity selection must have been defined beforehand using [$method=entityset]($method.md#methodentityset). -> Si la requête envoie une sélection d'entité modifiée au serveur, la fonction de modèle de données ORDA appelée sera automatiquement exécutée sur le serveur avec la sélection d'entité modifiée. +> If the request sends a modified entity selection to the server, the called ORDA data model function will be automatically executed on the server with the modified entity selection. -| Propriétés | Type | Description | -| --------------------- | ------- | --------------------------------------------------------------------------------------- | -| Attributs de l'entité | mixte | Optionnelle - Valeurs à modifier | -| __DATASET | Chaine | Obligatoire - entitySetID (UUID) de la sélection d'entité | -| __ENTITIES | Booléen | Obligatoire - Vrai pour indiquer au serveur que le paramètre est une sélection d'entité | +| Properties | Type | Description | +| ------------------------ | ------- | ------------------------------------------------------------------------------------ | +| Attributes of the entity | mixed | Optional - Values to modify | +| __DATASET | Chaine | Mandatory - entitySetID (UUID) of the entity selection | +| __ENTITIES | Booléen | Mandatory - True to indicate to the server that the parameter is an entity selection | -Reportez-vous aux exemples de [réception d'une sélection d'entité](#receiving-an-entity-selection-as-parameter). +See example for [receiving an entity selection](#receiving-an-entity-selection-as-parameter). -## Exemples de requêtes +## Request examples -Cette base de données est exposée comme un datastore distant sur localhost (port 8111) : +This database is exposed as a remote datastore on localhost (port 8111): ![alt-text](assets/en/REST/ordastructure.png) -### Utiliser une fonction de classe de datastore +### Using a datastore class function -La classe de `DataStore` US_Cities fournit une API : +The US_Cities `DataStore` class provides an API: ``` // DataStore class @@ -127,11 +127,11 @@ Function getName() $0:="US cities and zip codes manager" ``` -Vous pouvez lancer cette requête : +You can then run this request: **POST** `127.0.0.1:8111/rest/$catalog/getName` -#### Résultat +#### Result ``` { @@ -139,31 +139,31 @@ Vous pouvez lancer cette requête : } ``` -### Utiliser une fonction de classe de dataclass +### Using a dataclass class function -La classe de Dataclass `City` fournit une API qui retourne une entité de ville à partir du nom passé en paramètre : +The Dataclass class `City` provides an API that returns a city entity from a name passed in parameter: ``` // City class Class extends DataClass -Fonction getCity() +Function getCity() var $0 : cs.CityEntity var $1,$nameParam : text $nameParam:=$1 $0:=This.query("name = :1";$nameParam).first() ``` -Vous pouvez lancer cette requête : +You can then run this request: **POST** `127.0.0.1:8111/rest/City/getCity` -Requête : ["Paris"] +Body of the request: ["Aguada"] -#### Résultat +#### Result -Le résultat est une entité : +The result is an entity: ``` { "__entityModel": "City", @@ -172,7 +172,7 @@ Le résultat est une entité : "__TIMESTAMP": "2020-03-09T08:03:19.923Z", "__STAMP": 1, "ID": 1, - "name": "Paris", + "name": "Aguada", "countyFIPS": 72003, "county": { "__deferred": { @@ -188,9 +188,9 @@ Le résultat est une entité : } ``` -### Utiliser une fonction de classe d'une entité +### Using an entity class function -La classe d'entité `CityEntity` fournit une API : +The Entity class `CityEntity` provides an API: ``` // CityEntity class @@ -201,11 +201,11 @@ Function getPopulation() $0:=This.zips.sum("population") ``` -Vous pouvez lancer cette requête : +You can then run this request: **POST** `127.0.0.1:8111/rest/City(2)/getPopulation` -#### Résultat +#### Result ``` { @@ -214,9 +214,9 @@ Vous pouvez lancer cette requête : ``` -### Utiliser une fonction de classe d'une sélection d'entité +### Using an entitySelection class function -La classe de sélection d'entité `CityEntity` fournit une API : +The EntitySelection class `CitySelection` provides an API: ``` // CitySelection class @@ -227,11 +227,11 @@ Function getPopulation() $0:=This.zips.sum("population") ``` -Vous pouvez lancer cette requête : +You can then run this request: **POST** `127.0.0.1:8111/rest/City/getPopulation/?$filter="ID<3"` -#### Résultat +#### Result ``` { @@ -239,9 +239,9 @@ Vous pouvez lancer cette requête : } ``` -### Utiliser une fonction de classe de sélection d'entité et un ensemble d'entité +### Using an entitySelection class function and an entitySet -La classe `StudentsSelection` a une fonction `getAgeAverage` : +The `StudentsSelection` class has a `getAgeAverage` function: ``` // StudentsSelection Class @@ -259,11 +259,11 @@ Function getAgeAverage $0:=$sum/This.length ``` -Une fois que vous avez créé un ensemble d'entité, vous pouvez lancer cette requête : +Once you have created an entityset, you can run this request: **POST** `127.0.0.1:8044/rest/Students/getAgeAverage/$entityset/17E83633FFB54ECDBF947E5C620BB532` -#### Résultat +#### Result ``` { @@ -271,9 +271,9 @@ Une fois que vous avez créé un ensemble d'entité, vous pouvez lancer cette re } ``` -### Utiliser une fonction de classe de sélection d'entité et un "orderBy" +### Using an entitySelection class function and an orderBy -La classe `StudentsSelection` a une fonction `getLastSummary` : +The `StudentsSelection` class has a `getLastSummary` function: ``` // StudentsSelection Class @@ -289,12 +289,12 @@ Function getLastSummary $0:=$last.firstname+" - "+$last.lastname+" is ... "+String($last.age()) ``` -Vous pouvez lancer cette requête : +You can then run this request: **POST** `127.0.0.1:8044/rest/Students/getLastSummary/$entityset/?$filter="lastname=b@"&$orderby="lastname"` -#### Résultat +#### Result ``` { @@ -303,10 +303,10 @@ Vous pouvez lancer cette requête : ``` -### Utiliser une entité à créer sur le serveur +### Using an entity to be created on the server -La classe de Dataclass `Students` possède la fonction `pushData()` qui reçoit une entité contenant les données du client. La méthode `checkData()` effectue quelques contrôles. Si elles sont valides, l'entité est sauvegardée et retournée. +The Dataclass class `Students` has the function `pushData()` receiving an entity containing data from the client. The `checkData()` method runs some controls. If they are OK, the entity is saved and returned. ``` // Students Class @@ -318,7 +318,7 @@ Function pushData $entity:=$1 - $status:=checkData($entity) // $status est un objet avec une propriété avec une propriété booléenne "success" + $status:=checkData($entity) // $status is an object with a success boolean property $0:=$status @@ -331,11 +331,11 @@ Function pushData ``` -Lancez cette requête : +You run this request: **POST** `http://127.0.0.1:8044/rest/Students/pushData` -Corps de la requête : +Body of the request: ``` [{ @@ -346,10 +346,10 @@ Corps de la requête : }] ``` -Si aucune `__KEY` n'est donnée, une nouvelle entité Students est chargée sur le serveur **avec les attributs du client**. Parce que la fonction `pushData()` exécute une action `save()`, la nouvelle entité est créée. +Since no `__KEY` is given, a new Students entity is loaded on the server **with the attributes received from the client**. Because the `pushData()` function runs a `save()` action, the new entity is created. -#### Résultat +#### Result ``` { @@ -366,15 +366,15 @@ Si aucune `__KEY` n'est donnée, une nouvelle entité Students est chargée sur } ``` -### Utiliser une entité à mettre à jour sur le serveur +### Using an entity to be updated on the server -Description semblable à la précédente, avec l'attribut _KEY +Same as above but with a __KEY attribute -Lancez cette requête : +You run this request: **POST:**`http://127.0.0.1:8044/rest/Students/pushData` -Corps de la requête : +Body of the request: ``` [{ "__DATACLASS":"Students", @@ -384,9 +384,9 @@ Corps de la requête : }] ``` -Si aucune `__KEY` n'est donnée, l'entité Students est chargée avec la clé primaire 55 **avec la valeur lastname reçue par le client**. Parce que la fonction exécute une action `save()`, la nouvelle entité est mise à jour. +Since `__KEY` is given, the Students entity with primary key 55 is loaded **with the lastname value received from the client**. Because the function runs a `save()` action, the entity is updated. -#### Résultat +#### Result ``` { @@ -403,15 +403,15 @@ Si aucune `__KEY` n'est donnée, l'entité Students est chargée avec la clé pr } ``` -### Créer une entité avec une entité liée +### Creating an entity with a related entity -Dans cet exemple, nous créons une nouvelle entité Students avec l'entité Schools ayant la clé primaire 2. +In this example, we create a new Students entity with the Schools entity having primary key 2. -Lancez cette requête : +You run this request: **POST:**`http://127.0.0.1:8044/rest/Students/pushData` -Corps de la requête : +Body of the request: ``` [{ "__DATACLASS":"Students", @@ -422,7 +422,7 @@ Corps de la requête : }] ``` -#### Résultat +#### Result ``` { @@ -445,21 +445,21 @@ Corps de la requête : ``` -### Mettre à jour une entité avec une entité liée +### Updating an entity with a related entity -Dans cet exemple, nous associons une école existante à l'entité Students. La classe `StudentsEntity` possède une API : +In this example, we associate an existing school to a Students entity. The `StudentsEntity` class has an API: ``` -// classe StudentsEntity +// StudentsEntity class Class extends Entity Function putToSchool() var $1, $school , $0, $status : Object - //$1 est une entité Schools + //$1 is a Schools entity $school:=$1 - //Associe l'entité reliée "school" à l'entité courante "Students" + //Associate the related entity school to the current Students entity This.school:=$school $status:=This.save() @@ -476,7 +476,7 @@ You run this request, called on a Students entity : **POST** `http://127.0.0.1:8 }] ``` -#### Résultat +#### Result ``` { @@ -487,30 +487,30 @@ You run this request, called on a Students entity : **POST** `http://127.0.0.1:8 ``` -### Recevoir une sélection d'entité comme paramètre +### Receiving an entity selection as parameter -Dans la classe de Dataclass `Students`, la fonction `setFinalExam()` met à jour une sélection d'entité reçue ($1). Elle met à jour l'attribut *finalExam* avec la valeur reçue ($2). Elle retourne les clés primaires des entités mises à jour. +In the `Students` Dataclass class, the `setFinalExam()` function updates a received entity selection ($1). It actually updates the *finalExam* attribute with the received value ($2). It returns the primary keys of the updated entities. ``` -// classe Students +// Students class Class extends DataClass -Fonction setFinalExam() +Function setFinalExam() var $1, $es, $student, $status : Object var $2, $examResult : Text var $keys, $0 : Collection - //Sélection d'entité + //Entity selection $es:=$1 $examResult:=$2 $keys:=New collection() - //Boucle sur la sélection d'entité + //Loop on the entity selection For each ($student;$es) $student.finalExam:=$examResult $status:=$student.save() @@ -522,15 +522,15 @@ Fonction setFinalExam() $0:=$keys ``` -Un ensemble d'entité est d'abord créé avec cette requête : +An entity set is first created with this request: `http://127.0.0.1:8044/rest/Students/?$filter="ID<3"&$method=entityset` -Vous pouvez ensuite exécuter cette requête : +Then you can run this request: **POST** `http://127.0.0.1:8044/rest/Students/setFinalExam` -Corps de la requête : +Body of the request: ``` [ @@ -543,9 +543,9 @@ Corps de la requête : ``` -#### Résultat +#### Result -Les entités ayant les clés primaires sont 1 et 2 ont été mises à jour. +The entities with primary keys 1 and 2 have been updated. ``` { @@ -556,9 +556,9 @@ Les entités ayant les clés primaires sont 1 et 2 ont été mises à jour. } ``` -### Utiliser une sélection d'entité mise à jour sur le client +### Using an entity selection updated on the client -A l'aide de la fonction `getAgeAverage()` [définie ci-dessus](#using-an-entityselection-class-function-and-an-entityset). +Using the `getAgeAverage()` function [defined above](#using-an-entityselection-class-function-and-an-entityset). ```4d var $remoteDS, $newStudent, $students : Object @@ -566,13 +566,13 @@ var $ageAverage : Integer $remoteDS:=Open datastore(New object("hostname";"127.0.0.1:8044");"students") -// $newStudent est une entité "student" à traiter +// $newStudent is a student entity to procees $newStudent:=... $students:=$remoteDS.Students.query("school.name = :1";"Math school") -// Nous avons ajouté une entité à la sélection d'entité $students sur le client +// We add an entity to the $students entity selection on the client $students.add($newStudent) -// Nous appelons une fonction sur la classe StudentsSelection qui retourne l'âge moyen des étudiants de la sélection d'entité -// La fonction est utilisée sur le serveur sur la sélection d'entité $students mise à jour, qui inclut l'étudiant ajouté par le client +// We call a function on the StudentsSelection class returning the age average of the students in the entity selection +// The function is executed on the server on the updated $students entity selection which included the student added from the client $ageAverage:=$students.getAgeAverage() ``` \ No newline at end of file From 3607d8620f891c0c013f23b9731c5588bf5b3ac9 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:28:00 +0100 Subject: [PATCH 222/260] New translations building.md (Spanish) --- website/translated_docs/es/Admin/building.md | 8 -------- 1 file changed, 8 deletions(-) diff --git a/website/translated_docs/es/Admin/building.md b/website/translated_docs/es/Admin/building.md index f13d0e02417b1d..1c8f6b414247e8 100644 --- a/website/translated_docs/es/Admin/building.md +++ b/website/translated_docs/es/Admin/building.md @@ -238,10 +238,6 @@ Used to indicate the current version number for the application generated. You m #### Data linking mode -This option lets you choose the linking mode between the merged application and the local data file. - -#### Data linking mode - This option lets you choose the linking mode between the merged application and the local data file. Two data linking modes are available: * **By application name** (default) - The 4D application automatically opens the most recently opened data file corresponding to the structure file. This allows you to move the application package freely on the disk. This option should generally be used for merged applications, unless you specifically need to duplicate your application. @@ -295,8 +291,6 @@ In some cases, you may want to prevent client applications from being able to ca To force the update, simply exclude the current version number of client applications (X-1 and earlier) in the version number range compatible with the server application. In this case, the update mechanism will not allow non-updated client applications to connect. For example, if the new version of the client-server application is 6, you can stipulate that any client application with a version number lower than 6 will not be allowed to connect. -The [current version number](build-server-application) is set on the Client/Server page of the Build Application dialog box. - The [current version number](#current_version) is set on the Client/Server page of the Build Application dialog box. The intervals of authorized numbers are set in the application project using specific [XML keys](#build-application-settings). @@ -324,8 +318,6 @@ The contents of these folders vary depending on the current platform: > The macOS packages built contain the same items as the Windows subfolders. You can display their contents (**Control+click** on the icon) in order to be able to modify them. -If you checked the “Allow automatic update of client application” option, an additional subfolder called *Upgrade4DClient* is added in the *\Server* folder/package.
    - If you checked the “Allow automatic update of client application” option, an additional subfolder called *Upgrade4DClient* is added in the *\Server* folder/package. This subfolder contains the client application in macOS and/or Windows format as a compressed file. This file is used during the automatic client application update. From c7114bde070d1423ec3fd34f4aee5c72e521a3f6 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:29:35 +0100 Subject: [PATCH 223/260] New translations onCloseBox.md (Spanish) --- website/translated_docs/es/Events/onCloseBox.md | 1 - 1 file changed, 1 deletion(-) diff --git a/website/translated_docs/es/Events/onCloseBox.md b/website/translated_docs/es/Events/onCloseBox.md index 36f0caaee610d5..5c0bff081375fc 100644 --- a/website/translated_docs/es/Events/onCloseBox.md +++ b/website/translated_docs/es/Events/onCloseBox.md @@ -24,7 +24,6 @@ This example shows how to respond to a close window event with a form used for r :(Form event code=On Close Box) If(Modified record($vpFormTable->)) CONFIRM("This record has been modified. Save Changes?") - Save Changes?") If(OK=1) ACCEPT Else From 8704f5c508e9143858577b7388eb97e0c39d4aa0 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:31:48 +0100 Subject: [PATCH 224/260] New translations hierarch3.png (French) --- docs/assets/fr/FormObjects/hierarch3.png | Bin 7670 -> 7607 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/FormObjects/hierarch3.png b/docs/assets/fr/FormObjects/hierarch3.png index 1f8adcf60e4a0ab6e6be083a7ec9b7cb9fee0387..db80bf6ddcc6233b5cb028cc8a45e09c4b849889 100644 GIT binary patch literal 7607 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 Lx*COQHlhCyZa`_3 literal 7670 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 YYkXID<~1A%yw3%xD{Csfx^5Z%f9IcSyZ`_I From 41ebdfc5a775dec7d0aa7bc54b5bfbc8f2bf82bb Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:31:49 +0100 Subject: [PATCH 225/260] New translations hierarch4.png (French) --- docs/assets/fr/FormObjects/hierarch4.png | Bin 114067 -> 23582 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/FormObjects/hierarch4.png b/docs/assets/fr/FormObjects/hierarch4.png index 7fee1c19ee075193afd6843c1a5106a5702af400..c197d38b5a10804018cb65acfa1678fd75b4db67 100644 GIT binary patch literal 23582 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%0A|cf<&Bb`%$Ow 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

    e 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 Z(k)5sGYOB^b+#Y7Pzjh8jYkKw# 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

    JvA>^re;;@QEBaMal-li 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 Mrz%_X&NTRc0lQ*q3;+NC From bfdec1a1d046f08fd81c8a07bedbc0c960735249 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:31:51 +0100 Subject: [PATCH 226/260] New translations hierarch5.png (French) --- docs/assets/fr/FormObjects/hierarch5.png | Bin 1862 -> 2328 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/FormObjects/hierarch5.png b/docs/assets/fr/FormObjects/hierarch5.png index 1c82ef869c853009cd371a9d742e860ac1cc516b..9bc1d0857ccd825be018797cb68a316ba669971a 100644 GIT binary patch literal 2328 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 ylKo!xm)}n3l|Pp@c^XdEaCwJG!zY9LKh7YtIaf zBiquRUHz=+8qTfu8>H@$qoNcDv0jVP_Ct`~4m}-QM1| z%jD+f=JoY8Had&rz;d2XO^s}L9rDs^YzrSZ>q-D$Ch~h|*5tE)n z$2fjIJUr+rZ!qPUi{;dExzxMpEy!82>f0m~itQ8BV)Af}oZ>*bx0n*ZZnu*hxEO_S z;Fg$BQQxX)O`o%p`274FQ^;g+a8Uj2-ni-D?d@%~T77=F8rKY^ZVWY$ZwS+vLequ@>U6t_i^5W?^p`xx- z5i{#0^db1?&mWko;Sv>QvRHJ{TF@VKH{4 zUhih8V8CT?l(C)+dvb4-7abKPGH~nKlqc|6@&uJYqU%Dq$7vPyr;5wz(@x-pW7dat zhD7^`EP6q4GTuo~b_u-RqF2t0HrS7fsJ>}ydAe1?Fsf)xU;G~^PkkY~eWj{mDtRWi2rty7Aiuj0Qr({&`|QPx5srUY`}=We%?Q_UX+4WNp4^x?~0$~vZy$)L%+ zq@KM%)At4Hx-4}wk;O%}o_;(qpMIVwnR^=M(;Ey1 zLjf@NW}YaSdm8567)pdydP5^Dm&+OKuM}8d_<5LO9JB(-HC#)!4L9eq*=%Clp(hD% zXTr2%0@AxI>b&;*{bI4WBsgOd`ti(qI0bMaJQ@%^$c~_{b~;T3Re|nJnUT>F{6UT1 zZny4EGEzv-zL_}#ymk=VWl3FGtya3p&JCMj?34cEa0)-uQyO_G;8>qcqIbOu1L$Tw ziJbT8NcPYk{a5x3pRi{1ZRV`dFrlL+%;h9x*UeAq`%Gn@U z#kYUDr$l3FN77xh(ylzU17XB}H#|2+HfWKqa9*XaEHHe^f#JdEl2C+l8ns zFgz&mECa)1S&`miSw?U1?yYC#S)4YYOGXK@y{;5lVE9GyOeHX!n)iK#moAAJcYqFQ zcZCIppCM;+C5$aFTpX2pBbOBSjiqjP+sQcN(b?^GZoFs~yIWv*0P_nBr+T4$B%zf` zf6sr8NnxI?-WP3ErA7Wu-qa^_L|q(EuC}p(?XGBF>6v*TG2R&B$^yl&rWL;e{_;vh zb*V84xruv+x6qS6r%@ftf9^Y-_g@FIXlKf&3oU$7`W2_r1H@| z-Ny@^i!rtb*j0f~WV2v|f#LH0747>c_RitUV1ePiU@C#(QuS$*>T;9-tMq+=x-Nb{ z)5MVnhL2gcK46hk^F+zq({R6zVK9^e>*?o-lDVg0F|vjdVU^xc9IVnCih~7)pNEMC zhI?l1Z~yjWF!JZdmppK;^C~ki+!b5mm0~d^vqx2+dsAj$xC;qCZ9Ue_0QSZ3;=UMO z)uN?>B_@PyA%FdA6bZQKIGFOp{}f#HhH z5s2+hKe{b({9hZl!0S+51y1%&N1h(H~;_u07*qoM6N<$g69jE AkN^Mx From 59f652f5823b56719e6661306d51172a0c727956 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:31:53 +0100 Subject: [PATCH 227/260] New translations hierarch6.png (French) --- docs/assets/fr/FormObjects/hierarch6.png | Bin 1796 -> 2119 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/FormObjects/hierarch6.png b/docs/assets/fr/FormObjects/hierarch6.png index b67742d4422225c34110be8244d7f503b03d63d0..2190a4d247406cdfac71ae1d782f62919a50e6f6 100644 GIT binary patch literal 2119 zcmV-N2)Or&P)Px#1ZP1_K>z@;j|==^1poj5AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF* zm;eA5aGbhPJOBUy32;bRa{vGf5&!@T5&_cPe*6Fc2e3&*K~#8N?VaIK+~-}fvg}42m&#nNFW9lhl9y8i{91$nQRVUR z@!{d&?(XjW{T*id{QSfg4j;dN|Ni*+pzZMU>FLS-g-%dI(S^S9!Q9ncQ;?Pk&zsFp68)U-5Jy1R4SwI^I{cF9g0@GuN}>AQuU8!$EHQ zPIj59+I=CgWRM}D1On!XJ~3o6h+zfWUtV7D9oGx|qE8bG>4BT!R+BciQ()7R162bnaWQp_SUwWYfnd!z>l&)W|Eo})5?DK0pbJGp0IGb<>q{I zScCh5fPRHL(b20E1L*{GZc6$v%ihp|dV~Px3$qDV4Jrt(nrNj!rx0Kk5y8OP&3Q$y zUi4nacKk%-z!y#|rCVy%j+mwN4Ir1Mf%}QYJKVQN2;cxT3mP&H0k>GL5W4==NKmVG zas5gd~S%;Z$-UW3xV%{g=$ByjO9G|s1oPCAh3krROj4swWD7xfJ$oB zj&wXPI>y#FcM1VJu4z-R`uJ*r4Qfa9dsK_D2^<&=9ggTfZ_+FfcuES@jxa8UB!CDG zFoOKt*4@_7DForR<1%Xct?Ru{yConOi zUB!hh+tiNC1{NQN*=+F+ckBp)4y{A}>>{Pl7XG|df?&;td<6FAR_?q8L6CJ2pMV%X z3^3XSD@byFF$nX)QEw4OmkWZeQzSUR$h{w;6as(ortjlfKsiD0J$3K)l}3WS z+oAeTw16Nu(fGX_dR_>^E$W7|12?B}of?A8y4LkBoX%_a(&aPl5Cj*))aqIVLFZVP zHqZChtGZTHy10}k1`#gBV$0{G8rRYWomWng;HyN}np;W}1VDI#B*3Q>8V=6mx$?;2 zhR?dLHMf+e7o*zo1wo}N&MWR+RibMR(6Hg0X|$zQxls_D=hez1r>-j3wfaMm1OH&8 zAgFZ3dBv+BSQnWg68PLo5S-`L$|HMMUDdTNE~SZl5CH&x0f84FrK;D;rX5{;>Z^lr z)6gU&i(MHP2w^ErphNX~kRzw6*Q32!dAxZcs5I2b#Rb90-Yq;gK~QL@k&6j}k-b}Z zZi1lDP$L%;1S5O5@Z3rv2scgjb1(}8T=eisVgDJYSZO2}=ZtkGi3J3~b|{8fRdsd< zaO>CJ)(czUdsrEDg^{qT>UNsW-g9aQxR4Phf#`Vr<$T~I&!HN7^FqLh!Sscj6rIlS zM7kijtV085r%MxZ(K7#T?~*tAawxGk`C%9T?sxwdN0NsR6{`5_m&}A?78R|m->>P~ za15C@65z~pixE*VOe=?Ik$a;rZyQi<$|S?)m${26QCX5g1QZT3*PNo2d-*k81wjJ~ zG>5>HhKwZ^Kf=%SxQHLNj&e@XioJr8v4IKxRWWrW2uoO-S^Yx$<&j`TX6P#k72=>F zy0FvRXE7i(B!JOw(mRG6ztamsu3c!WR~`?+;>+PvbQ*FnF9f_gNMkIo5)F<}#%oGf z`gibIC>e4Q1Rl#nbBb0$&=C6nRmG$XeqFgwz$DSXx!wBBW(cq&4($^|OB-`9hZh8U zL4bPw8`?PxhiBCBlN@l2Xc7rfiQT45-}aO$TGNY^wicOpI7saXAn5O^o5!{O*tJjB zHpa5fNfX1Iy$pq&ZXOGQZKR&C7f{&gJtuN7SB+1xgb`rpNk>Y5^sN zv&VzdNHDvdhCY8mFtmHiPEHV%*=guf^Fk0(JlrMR>Bd0+{7emjP1;h=GyGf6aySZt zZ_9W|S^s^vZ3_j#w>`a@2%BZfA zol1i_)^?(<-RpijRX+A2YCsJZ(*SSbYQO*Cy8$pV4S xg~crU=jAt<#jsA&!4#v|ljr9|1Ji6uM<0JMN8jtd)nDqYs z{`vVC`^1dSu(n!1O*KZl{r2{@SS%)!$?xwkQm)r4QrM)gR;$b9B00C)t!%&xZsHW!SpXs)af4V$5q6(n$GRR;Sg9pd^cc?h0onOMyh;+ zNOynDXdL(S|C?MbbrtG!5B93D&t|i!aRb&^_*{i;G`sZ;LLRJ^Zpvz1h5FosuK$=T z%c~9=RkVcS5eQ5HcUkyKeS=8!y90l@^oZ>aJrpAJ$8>|>y4QGm8d~_e^$p&2=mGJH z&p?`6_^Nz^_!$M&y7NO1h&XXIT50@cM_8oB!Y4*SwxU(OL6m@1gx1{D{E>@V_h3Ig zzYppe!d=-^45JY5uoJ~!$(iK=GrLko!m^4I7(dJVHSz=6YuUv2s$0s}sjG){kkdADtR^Wf3egMAM*7ja^3;!6HL64XV|cm_^X3*VsK^ z5yVy|$_Qi8G&mSy4}U#nK<#mh;CMWy!$ig_vsy#hYob|WpLP~O-{|R=Y#P4=?$#p6 z0STtK297P+vG{`+qQ?6B5XSds_`ap2($L8I`H&KgY4;*?DPe=-=)tEy@{5q=-Qk*wrRpvnM<=Y6my%eT#BaOw?#g;%e1*^s5LQBL1T&^+) zy4vp!KYl6H##~iC4WzdSm}Qq>-(pe0gawdXg87(m$*`jQi*Gcn@45m6@b z)2T6A-J;iyDgI57Uzs|wXa)Aa zYM9^4*37T$3eg!3?Z;daM)44g!*MX(+^y3Dovm_ zWL_*5oc_n()EX2bFG`^jjlf6R&lE^YW0KmOdns!CJTh}l8Bs9Lo^s5ymjtGG zn%bdLW9L0@Ivfti*=wdQ(;D$5d-J-8Fw(tV^L*V;_IaxS^>k@OIt%oz>F$+hSb`wQV)4 z6o=*grnQ}^>fZ0H;<%^N=|$eAQL8ao=0FDD+tsb9>h&G Date: Wed, 16 Dec 2020 16:31:55 +0100 Subject: [PATCH 228/260] New translations hierarch7.png (French) --- docs/assets/fr/FormObjects/hierarch7.png | Bin 2332 -> 2813 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/FormObjects/hierarch7.png b/docs/assets/fr/FormObjects/hierarch7.png index 919cb6e5db57d73cc9aca4b065dec0c398effc57..1b98f44ae735ee0c457ba7d10f8c738184b3aba6 100644 GIT binary patch literal 2813 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 literal 2332 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 Date: Wed, 16 Dec 2020 16:31:57 +0100 Subject: [PATCH 229/260] New translations hierarch8.png (French) --- docs/assets/fr/FormObjects/hierarch8.png | Bin 1911 -> 2171 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/FormObjects/hierarch8.png b/docs/assets/fr/FormObjects/hierarch8.png index 324ace96f36b0ab834adfb20186d94d293f2e3a5..994dbc977fc39813ebe0255989559b12abc6dd1b 100644 GIT binary patch literal 2171 zcmV->2!!{EP)Px#1ZP1_K>z@;j|==^1poj5AY({UO#lFTCIA3{ga82g0001h=l}q9FaQARU;qF* zm;eA5aGbhPJOBUy32;bRa{vGf5&!@T5&_cPe*6Fc2jodaK~#8N?VXKL>^cmEc_q*S zEkFshKnt`$3$#EBv_K0`0xi%2_poQ5R@ly;V`IlshGBLSM{)E?wqk3Y|GvM!uY6n5 zz{khO-QC^i=jYAM%~ILEkAt^wiyC-+eFetFV*M95-$UOv>9s4M0ovk)cmKBOHO$t4 zG)~StTZczF(Rm+<*8aLK@D93*r>Cd=mvjjYHL%Rv88^gJ{L;?5xJtVgn8_QbJv=ynyx zQV5MH*o;Fec>Be8qsNtYdj{%C-rj~6WUNIMQA=sjSPqpV$`zxuyl-OdtB}Sv8 zui?$`O~-4D(aFh!riv+|Vsm_GdfUzH6(H`If z=gs0hTQesy->NG>6O<&oJ<9Fy+{V12Yt#TqYMM9qNWUI9^rC-n&7917peOd+PMVh{R4=G!j*@n>~?XK6uFm2QU zwV=Im-kmqVg{$Yh3oEp9aS7h~Ny$HtrvdBzcjq2iwtC*4m(^$Q(wukigv!>>1n*$% zw%`c);Zh~7@Xk(;oOiEya<;5H7MEs=H`KQ^J<@p>x4G&9wHGd?N1`^#)g93baKRE; zPbN;4tbQlEFJQ~R*Q7^It?mfe$caFQt-F73&v#p31p&dB$$Wa`)as5pr%~$Yyer_^ zEmBiilO7q^2d~dLv|trc=e-+F1pzUY_34qiIz+C2%;vl+;My&66Yu$~Ciu66JgArR z-VLXM08M2vJuPeHU5LQPJ@Y)Co5FHq)03Ac`(E#*$qhtMTj1(?g%SkYIBgl z8YfSdgi}G53Ema-c2tqh`>5pd>g~Mq^mf#TLPHn|Ys&QE+{VL-%uR3L4 zAg@isDf+F}`t5i$GHgtA#DBf29~dMPBPn06Fj=r?FyY_0$*F}|m}7b#g81DAOug!q z!!OKQWI!O3q&!6u8d;JP=O`RxOHL(5@+`f=r1RdUf#SR+i;XRWvuK zZ^lYMIP?6?*iFBa`r-|$lb!+mGw<}fB);O(I$o1#ZtAty&bt6_h|uqzW|tZKFc@En zoQ-@D|Ar75)QjKL5+_Cm7E|WVl@t^0d8{?CC)!P;s#~>R)l;`tMuNffhv0jjxMQ6q z)GLjuI`1Cs0n{tK&A@s0$h%&hoOeCly5vM z+i`L|Z09|)2Hd|#rW-eDCU^&-7m^e(Z*8-Ax568lCj|WZ`a>Ussm_~&^#dy6H1Kh` zFHVX$Z!5fSZjf?z;f++~Q$8Uw7ccERzG8O#l%95O53o2BO=RW}jwYqyTwVgxvTg0m zR(p-b{`-{J^b4f61AZ1K)?I$Ud*)Ce zkkZ&fXaj0R-HLw;p;PW6lGf5(1%sFf_pIlwO+iB?@~NYLhTk0TQ%>sTc?|fI&t`eN zr=$_*DLvBTwffUDNqCIK*upbxhABw=oX0yU4PhGG8vnstKNtL&PwNYr^KaZdRL_7} z!ZgHL*zjLMxjfzwh!8!H1~XzOf{S{5-ne~h;$#gkYQn!8>bJK`J8xSJjPrKh^#kVK xS~)xQN%(g>(!j6r)Ky8XUg-E5_y@??B_w$IOkDr~002ovPDHLkV1i@-E_wg} literal 1911 zcmV--2Z;EIP)000L*NklYl#rAFB^)LA#-1-5;lDV>AY0mbT%Ik- zl27AZt*x;vVu%1E{7aI=_h}ezh|y^DpYL-p+yh2)6v)#&y2SJIv+pxBbbvp_q^GB+ zmzNjcCuZmp=Cq?gQ<~wxA0HnVi^XIz`TYDu%K3ao3Vr*-!^7!x(vq9aMze4T%M;i} zVP?%{Gd*gz+o5Jwg_?bLONdAuNanPY0$6gt-_PgskB<+eyuH1xR;#}m#^dpFxpYe+ z7uzU_ZO!5?kK!)VQ7zKBi^8QRU}%kUnq81BrmxrQs*1pz){`p<&NK@Y;wmW~KAleW z5KxYb#&^#I1u1pft}%faO-JwNO1{6p!#S%PuPLeJ-3k?O-Ei9U353U4+WY`87f=n})!AKp!oM5j#=_N;VT}k-E~O?_ z%0r~fmzIt5r0)NeyQR9s@briGrrE`My{^#{)`$S5LVKEADi6UBc1yF8T3upz`a|&& zf+d*&!MnmGs{faBtELBp zo<1IFE&{Al9^y*M8F%MR4+!2OZMbXv<)BzZjR;VshIFS@%0twET?E_AYW_4PSpDJM z0s$AWHUz+$Rg9_-{%}CWUoDwrAvA|o#>Tpf8W>UQJ3D#}tux4F2K4-^v5 z3>BOQ>@tS`X%P|4P*uIx6AAuYUqwH`QJJwf>=?r>ADG06kgXZ)^7a=Y7>3)JtvQyl zIc7vOHX97#!<=^bFsB_0jOHj1EX`dh42u||<}g^Ar6Yx55ku4*hDbYxL;I2ibzD7)3{+w}^=@pw#KicW4OwPLh>B5;~rv{M+mQc<^Nqq#4TONAll zEtnz=)LwdE@tPPS%~6catrdp!>KKEEzI=QXH2;VinID*jH4j}876r}i6o!bmag+)R zwQx>zI2iaIJ8m@~xoDvLnyFF zJA7EA9Se-+C}1>KVm6y?HXGk((G3Ep`E)wzs!$Y-G*{~_m&;&2t`aiMyWI{JIh{_A z$0MIngEpiz6!&bm+n_#h?EBIBO~BV&i&GSwq*5hG3<#NKPA>7&vM!J!&g7C*uTJ4+ zN%pF=zB-F^RisGv88x?0pEA(laNnw!$BiZJ>E&C2Z-+XbD754c^W zEtJ~tCSTtbA%|d9>JFs02%+_m+_A-~a?2usbq()pmJqyYR39wO=<8F4TsjjyE>PiR z3Bh1#ru!{Q^_b$`DY+)qiM%VP9y}ZldR6&cLhyzoq*stjjCp$B%theb72P;aGwRW$ zhSbj75w~WsXDI}0Xxa_IG^%0~jLdO98luZBwcir3HM8T;t#Hw^*$iVLAB>>KNj3q> z!SrIW;DSSLR%@UVefbKej23w@iQi8c`?k6}0hF`5aYsb^z6GRz?_@~W)|>+@35KQi zJ+Su~uS2k_{8fQuBMwqW8Uv!EnTT!0zes7m9THPq8GIr8G?QI`VZ$VUk-%t<0!DKb z2$$y3=;HVID8qW|yi29IF!69gx6|0rZ=hEG>or6OhG)p>@ zEbesBZYPsT>dax{>ddjb*`)5Betxm|zA|dEs%k?4CiZ1{8hW)6aJs!*e*1Rf?JeETRs>6Pf6S_?4Oi8AEr0+1pXIkJLZ;b;a*W?}ni8NSfe$@I z)A8f7LqBF!)rJkd6nu9@&`z6%MNNq7V^62l&6Y;sHS_#cSyi>6-S>Ct$6HuI(@emm z@B Date: Wed, 16 Dec 2020 16:31:59 +0100 Subject: [PATCH 230/260] New translations hierarch9.png (French) --- docs/assets/fr/FormObjects/hierarch9.png | Bin 3242 -> 4288 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/FormObjects/hierarch9.png b/docs/assets/fr/FormObjects/hierarch9.png index 3953368eaca2955a7d3d6f2c8077e999bb153c9c..088da8a61450bbe43774365bb321bdeb683137b6 100644 GIT binary patch literal 4288 zcmYLN2Rsz+|3Am!4re6e$n0<#$qJ!!*4Z4{z>%n;}{k0|3yu(ek#;Kw9jg zQP)gM=Fx2X!|<=01MZ@fo^y@>I4AbKp5(3Ti&T;5EI7ZP1~9?!eQ%FPCjV?Y7n;3*rS zI3m+Cs!)^9xieUFiK^#)b6XC!5D8-O`zg6RI8lsPd@Yh5(FnhPv`}td&^Y2OsV72n zRgGcj>p9Xi>He~j`QN)$g2!jb;XfBYu$NcHfTw@Xwnw{#qsq-+R*&rY8tapWMjNV( z%PQ+k6GflAbZrlMC_NzcCV+SSL1!l8ityDa5^zy>76n`JpOvk|(Iezip0*ts zTRjQQY?7)0u?0Y$!D)(PCFt8C_agxhPbcF>yo_Km zaYIWLi3??!6TV;8z`4sQdt+n$7#LzzcQtJ7#%|KTf}vcy!$?=%K21FuS$tHQ;#29X%fpZ z;>*zYj-h(Is0g7-W`7RMpDbPaOpI+2wTZd&7NpJOT}P8;Lyw`3HoO&Aj8YG$`z~Vl zz_5~&TMB#JFB4WmXEedB9S{s}V4GGBeh`qery?2yy@h(69`^&LGzohY_p`YLae=YCv$UTfr=Lj#C? zNs#(k=Rl%Zs+R&+HwSca<*@^tsO6=S=2ysrvir8Kqb^;b0U|wUM?y5$N^8~YT^HjED90iuh5XFJ+M_|}@y>A$9vIzv9yzCOR>;s~hp;~2WvljAwL{5>hy<}k27Tg$t!m~c`#8l_Ld z4;OZN!~pIH8WDmktGiQwQMt?vAZ8A0qGXpn{sEl_?m_bpl?z|uyhy%pzh_%K+29(k z*!)Q8MJd2T!?e06ZUO$@8$JMG&s_1+AElQJpigJU><8>#%^;KDjPaIF)u5npE92mB zvVNTVyK=j6m8P~?X)!Ce$m{GB&C#CSiQzc&Jzw#tjoW|8W9Hv|-{c%-!Z2X!*I(-; zZ9+|*SpRa;<=a_+gAS_!dR$FN&>YgOXVFz3$hjfAYE`YJ&bqa44@4wM@uNA>Lw>XD zy-lrkI(W}pd)*)Cj}Un7bLi_l9tLd-6Mp0x{(*HJ+?EgIP%Vgvaw#avfjLZ{Em+oH&P`e**Q z?>;&FD-RMftehDdlS18h36p3i)#A)`CZrG^?UXYTkm9C76;W*@ADsVJd|ik2%U|ZdK)Vh;CVF) zlzipqzVQu__)hJ|EV!XY16>G(A&%fKoLeNs%X{;KTXLvsUj3xn%caL`-OgLr20f=v znRvG$O_G=%EoL&;rJw`F8s3B$KkgejGv;)10Dp$@w6C7_9py2~Lka!1oJS)4#c0ly zRzaZxf#LJWoFDu+SxiDC>=SUjA#t4z>iMJSp*IOVj_~-%!WRT z9WrI)Y<{ht#w|s6Z6l$K0bvjNX+*s+p%fZS!V+U|5u^0rd^kcN?!uzKL=^aA7TKgY zX2QP1JQf7?I*`)>K{A+hM#!uT3OiFD-?Zd-s74``v(OS#S=T) zxe^kV5qyyzr5hh`pEAwRW#@m{Mdp=0^c)j7ocsFziCf*RX*_pTT7SkCgv3np`uq}^ z*l_qy)ns=(N&&f#X=&a$D3)cXq|lYBK6LnfpSis~%3 z8_%n67}WJX)IGebym_Z}y1tM0{n@xAc z;)FoJK(7!&;AK9Xr{cCcny#iRSQ31Mf|&GhsK2|u{CnuT_R`JJ$)QQZ!9@%yf!rOirPPa^3=P&`yjL&s zuAgaAivXyD5F+|p?d4Th_xAG~S8ZMO+xsU!GZ{FiYYLDiT2odDfwn9p42-sYspdsY z4(<5jpOM&=1s}e1RB6=}n@XkWQ!6L18@u9HK*V{!c7L5j8=Nz#VrfWM(oxMrIYHf_ zmACtmhoxEK(knO5k^4`ipMup%+UurKDv(q)b)r)yqvT~xHZO*GHKvcuZ$*fZ3$A3o0R8qg+5vB|w% zNGQ5pdqVao%QdQ#$EQGRXnLSPRQPZ=-&E^=JswtV0;f>r{Jm9=BOuWM%HR;!_U=2T zI!Rn6g)DzNGcIm#IW|~~c&D_&3xMOzS=jo_4NfVk!6DSM;Fnspr5P$1tzAw3Epd3i zHsl?{I%<_kAw$Pu`@c#zyEzp?jJ>3iXoGxOId&xdc2KJTm|a#%7t^%#gpjF~MjLe_ z5OIsZ8RZdi@LGHv55r`zg#XPfQ>) zHJJtzBw9o)cZ2?TP?ohoEF#G!JBgfblc%+ zLF>6oL6>dc&K_d5<;*%dqJqpTmA9-N*kc>-3jq}$WJ(+NsaHfHFj&?j zNXfFl61vDWVpQW%CBwaV&_c|`vhZ@xWi9)RCut*;<-oZxZ5F0$wqZBaRGwqgA^EsYCt95rC5D7_`FeflqLpZfJ~qD%pSdWqJdx5B~7@8+OKW*8F+O% z8I!6B7c%uAMPTBjGUgRLw+z4HRL2kAg?ucU2d5}h7gl*?XFsz;UzC`hud!*Iv4)j; zC!NZs-ewZsnNtT(#OzCq_7L5zJEzk|)6Puh2H)cqWK zJN8s8e#a`oQJcrR*MFHSlC0Zu#jDrA)0GLK+NX~7KK9pohJz97m z2xp^-H@a-5e3h7O&s6G4@2(+;wd@`9 z*~EvfHJvS0!R_ur9rlMNc(ozSHqqTRqdu%p%>Fa?b_#c`waT6f6Jj_)!q&+iGZuJ? zKJ_DT*HVaC>S@Ii3>8&fcPz?-m`Anh|Mqo<3oHD?Mu=MEARI zq8!~-D-sfTMkb4F=!f!dAC`s&eD5_SUR%6>7`-|~UGQE`cT zY~UNmhMb-+egCn6T!a=oaUg<6fOxnZ{OSkezc<|r4z!1J=a^CY-UfDq?SH`ke@1Vk}I>pTb7y$j$I;pDZiRlrOg1nnmQV5n!N`vQfH{XbB`?hXI| literal 3242 zcmV;b3{~@qP);wv&^&7OenTBZVxJ0+#vT(0LF-j2AfwAw&{6 z2q8q0&_SGh<>uyQ=p1&2FW1Gz#mmb}*?HdI-~asiGjwUjVvQ#AuumVrGTZHTwOYaE z%~VSQo6QD0`vZUd`o$zH_@sPlSyIT(fz|8l>)k9!747x)_5A$&^z^j&v{N)uPu7@$ zeFDq$2kd-#dAVM%n^%Oza0~A4?j9c>v5XzCCzIaZ-f-ZLA3xq|uz*!8>`g683M{ik z2f_PMTrDPQqMob~z0kDmb2JA*Qr7nE6V283`ThGhmf^>_iUq7<Jo zAQnA4J7YNNLzJICe_B+@0LhYq@D?p)nI5SU`i*`B!*X2D(l`fSf?8781 z;BUqb;NjtcXTZ*|i4QFER+@@6kjjm>x3?+#h?XFNh;BzMIm$7kgYFSc*z-L6= zKli-9zehCk{QQh9h=mXZF+@Sx5IFfgk&0#PiDgUTDv#nSx8t%@ znkii-OM!_}cEEPC1475Z)EO&H$Qmf`)zuXWZntu$2x1?5<2BYCvmusoBm53nwKHT= z%aQ`iL>z>NHJIB`6;ee)3-LMjdwO%AZUxyQ@LqNZ>S9;V!}+4&ikZ@7vXp56-VP|N zJw^sec`HrG8r~tcvClXem4je61B3hQ4d@^uj~M>$azG^&0zExFAr|$4Xg*lN{{Dmp zLR^HStp-%ThZPMy9xjS#*2qNs4=Kgj4;_feutpX>ATqQm#ExmwD#~^oTYB+4HVdUVoF;>~(=Tpm)0?Hi(`VCYXMg%S2qGM-tIPJF&Nc$|M>;Q8I0Y&GR9)mSd zOgP7kXAx~kd55YVv-6*pU;(SJ`QFsBqzFOJkQ$^6w%hY(Faj6s>7TfogOoPjS$)1` zd3}9tzHTWaQ#4$K8RM2_=`vZeg0mDUJ8)o+gMZOM%9NF+Vht1@yWuY?mLDhy>@$9< zp~oQjRRU|vqr-OKTLunRXyfM_nfk4V5Lb|1D=AnlF!U3`;4E#9fZ}B zRL||7Uafy^lUkPKEu-n)M*>gjh{FfW�_1DrA`yn(lo(Qg3jC7&HGLIs>zX-=#5% zL+tSK^1>&1Atr<(h#rAo;I{+Y?H14QiXg<~&=|y0kTp`sGAW|d(uEM>FNz?R!bfi) zYeZ2!NuakFLWmr45JHF~auA}F)vD4w&bcGe+Jl*uC@Tu`>laM(_aBzq7j3<+5;NAt zp`cQ2HXF)w9V##@(b_^PiPnD2_QxQl|Hmn0*VonS>&Ghoay}on2Yb%@-*M++M7g}Y zM4hBaB99YVTYi#aN-bB2XD7aau8K|^4_qbwQU_lRev=M zPh(T}{A{rGdTkf0>dA|iWV(g~%l1K`xy)TXA=;(@b~Q~nQ#3m4OzBctqNoP8+w{kj z9d@7UY}Kb|Le-F*OIfKWYkX-HybEt{VQayb`oh+DzBm!Ok7iPB!OA`r#rEgtf2*jD zt~Gw7;vXMR@b~^cjBA*L!!3I}Ka7tgoOyN*f--Zyd$+l;?B4y(KEBALmL-LCroDrx zBw8CY(S$^6gI4j;-l7eL%0h=ah&t0B%k+BIl6i==YV#m${Pn%~=OgN}|J@l5A~-)% zk+(TI2-BFOxQ6c-Dv8!kNTzj{eZ&~KXl=g^0wI!*K`bd)ZC)3S;QajWG8XJSa0l=* z&GXOk5yNT-BS#^ zv^IS9rWZi9$b1LEUWMa=CU_GagYZ3nW|iR5evs0}9eD}9^+0~?^+y$ZBRiup2*#dl z4s0fVh)SZh(~xNm3O+f}+DO|#gAAS~f_DU1wa62dm>%St4gx2!XR+p62{=}c*Wj~}HB(d6NOEo| zNOCTT>PZ5L)(RnVD1ulDvPKG7CWS<6g%CO9AcPP}q)B-&^U$OWZgjuXM#U%F?RK?V z(dL`YrW5^0X;PMd2No^bVl^pKrQo!Ys8q)isE+j|B|oOVySsaQeB_t4rWjJJA1O`B zaxz6*rY2>k6j8m9g>cM*`$ov=He4>&kCY~5Ihmp@Q8p!P0FY>;L+HyZQ5um1DQM*6bH7V%8qv>gD{ALVD<2}Et7{U zJFt=_s-L;MOD)!qlqTgc%wLnz!66cK?|oz-b2g6MW_>v}I~i zW^O1mz(JW*1~Pd*v^Z2)!(aYROeY2G$}&B{PY+ln9v!wrv3_K)nv~@c1j>mX5)YPe zKWqSd;|K=!@KyX3V~Z`(z;HG`sUloI?M;cm1R7SW6}mNK`?r^Gc4V?-1!tF=vIG1e z+5kUR!AWh1?n5rhF5DrBUJu+cU zN+D`A2C)=mjTEv>3XMSsA%qa32t8sf1z977ER#Zy7($2~auCzt=H|x#ipgrVTHriL zaeS5~T5I!>JWo$gllujs^?KdOC)n@r@3*(NCZl?Gb_Ns8K$3TITwGk7H1Iq4?c1-v zt1QvlLaLZVidRM<{C;WZ%^|qtd3iW2TwY!dt^s#s#&Gvxc|U`T>W7wU z>SV;L5K6SRoMzEDoi6YZ%XARbDIJNX)3A)~?t8I9a&>hToo%_3Xzh1s77a${)qR!% z2XTLYPd|dcfo^4B0dBG4z;3>D-rQxj%4^>G+tkK-fi-whFR>et5#v2n(styG%|SHv zW4&x&fJAG{i8=_ImTy=04uU!HvIt(cGOz%*aG4Fmd6_gV@!5BO5bq?HvSi;;S{5trayb;J5Ic z)>?wqGF#;}Z|&qQt=F_h`(MiOS1*vX9XaF4C#y}gp`n(Vq=*mA`gRb@60NoD!Nk=6 z3a%9>^99m<&2rh6AgL2uAz>jw#@9>!4D39`I((7}yi7 zBlY+RJM%kN+zY;4@~IN7Ekv{QJhDa#Stf;Ma|$7H$Uz7plE^^_A(F^J2qBWlK?os) c5aMwD16eC!9-k!c&;S4c07*qoM6N<$g6B6PCIA2c From 5a97a1b906caae762e3cae8dfe34dbb57732a061 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:32:03 +0100 Subject: [PATCH 231/260] New translations hierarch16.png (French) --- docs/assets/fr/FormObjects/hierarch16.png | Bin 12228 -> 12363 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/FormObjects/hierarch16.png b/docs/assets/fr/FormObjects/hierarch16.png index fe8150e1b233e47890790619f04b37a0b924fc3b..fd58a2263ffbecbe2076f9c0ae7770f56bd0e2ef 100644 GIT binary patch literal 12363 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 From bfc743be4250d7edd10d28636ed13493e0d43c5d Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:32:12 +0100 Subject: [PATCH 232/260] New translations hierarch2.png (French) --- docs/assets/fr/FormObjects/hierarch2.png | Bin 6559 -> 4459 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/FormObjects/hierarch2.png b/docs/assets/fr/FormObjects/hierarch2.png index a88405946841088ec1729c5016d8566d9aacefa0..c86e3aea4f799f3d1348984fbbbd57ebbb6e7c97 100644 GIT binary patch literal 4459 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 literal 6559 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 Date: Wed, 16 Dec 2020 16:32:14 +0100 Subject: [PATCH 233/260] New translations hierarch15.png (French) --- docs/assets/fr/FormObjects/hierarch15.png | Bin 9005 -> 9430 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/FormObjects/hierarch15.png b/docs/assets/fr/FormObjects/hierarch15.png index 7da50e0fa1e4934c2ad0f656e2a89cf8395c4768..7c96ce64727f97d1487b633d33aec0392c77abc5 100644 GIT binary patch literal 9430 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 Mr6^hPUO(V}0U?S^PXGV_ literal 9005 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 Date: Wed, 16 Dec 2020 16:32:27 +0100 Subject: [PATCH 234/260] New translations hierarch14.png (French) --- docs/assets/fr/FormObjects/hierarch14.png | Bin 5004 -> 5130 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/FormObjects/hierarch14.png b/docs/assets/fr/FormObjects/hierarch14.png index f863b99d1dc9658a4ccc980c1fb7b4b19763104f..5162868f9589bb2af2f4f53182b973114778a4d2 100644 GIT binary patch literal 5130 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 literal 5004 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 From 2eb8780084bf6e3ecf8e79b2c4e2b295ca444c8f Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:32:32 +0100 Subject: [PATCH 235/260] New translations hierarch1.png (French) --- docs/assets/fr/FormObjects/hierarch1.png | Bin 7797 -> 4423 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/FormObjects/hierarch1.png b/docs/assets/fr/FormObjects/hierarch1.png index 5ac2887997d817102619fa57f902f7764179b5e9..d6152bc100580d48569ffb83bbc13cc18a5598a7 100644 GIT binary patch literal 4423 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 V<8IQjzz-yVo{o`r`8C^!{{kFKrwaf8 literal 7797 zcmdUU2UHX7wst^KItYq_KmZX7y#xeAq$4CCL_r9>NC^ZC1O%i>6OkfH3m_;m5NXnT z6Gb2tA(0{h1f*Ay5V|*f=bUxEd;fFSIsf_pweGrW%_Nzbop;Z>-)HuIo;}gG4Rlx- zc^E+;5X&uHO=A#eJX^<_NP5q+rGS*QC75DNkP!Enfsln7hpwf7zeOo%} zv4FjZy=<5C|g$0xjBrKuW0~&{@xnI-~2<3k;sRW?mo=6UWg` zGcXpk4+8Ox-_lgO^U!J~a|t!pekOu&sqe)Px{bUPkQU!@al4N$5$(D*$11%rHu^qp zon>b_@A6)BsfKX$Fn3PAVj2?Zv!Xqp|GABOBmGl+o8sKF!}Zkwh4D!?h6E5pLJOAR z363o*uqXDoZpd+6(9Q4LJFSw<`}?ZozW)B!^q+DtmihDYYP7;PX+uL&&BX$Pf_%{E zhmZC(H6K0Po*yZXQr%y_S#`;<>BY*=X%7me`MQcqa^lI8)&%0CQ~??e0h-I9Hm?1f zJ39*nrkCDKgM%Lhq0!#8d`*vbmOsVhrJR^JYpvgTl5O=1@eBVuUikj6LF>1pS4GY2 zC@8c?bXO~;m`f(LZJ=l82XC)Zs=0+2_J(qRU(tf7&PkYR@L`QC`Cu;qAw!sQvf`F`D@SreyQC%Od6CcEvl{Rx{4puC|UIThtD&Z7JPc zM5S1V;K9pRrLP9I@Ys`K5i)2Fpv-PT$8^3hT054s`6xWsRp*-gSne-aAjRy~EXdg* zhuN(|@t=o9=#zf$0?E+}htHy%{XN!Zb8{&5;;Fm8`hFY0y|(NlTMBWoM|BoC1u_`# z3mF@D4g<3|&wM{0XybgU*buSEnHd^*P6P-8+C;F)3g_B_!*CuGht9sxv0yta&l1bA zqJ{S+nRl$?qc!itRD>tyz%W~#%GlNOD*J<8_;;{seB|hA)>e`80Y#PZm$(srd zwzqoDBqHwDdReS2>)1gv^*!9f5@p~+8I@m~+PoutPk;K*?`$rDQ+AB%TZ!lkavLB< z)0q0-Ycx_$*B7RJbUML<>_Y%5 z&XpYR=k3~b=rFEE>B_}5*UFJ&-Q#gOPGv8b2e~IIoM#Q|e$zgqz698>z%@TNoTf8735)8x9g{tCW@n9%H?fAraZb;e zT_{<>Nj-mvRWdzEHv<#Mi}#Xi-{xo*Z==smYT83V6>+G?|mQaB{ey35ZRCm_fApjRsOv{mE$p|GC@$L&NpNDT>?ZbO zq(>RcZl>Y#dh@};JAv0u<@MPHQ&Nh}AtrXjMjaVrdg@M*oLQVRG91(#q(nub-uSf5oE^ zLulY!?`MR+PN|qHVnMxUq>`l?_%tPRKGQn!*BJYcsd2NmICn*l8JRVx_%YX+H+j~9 zm;j2Y%9!5oqRB3oAZA2{wJU4r89REnCB2kBIQ}V^vU;F@<8os)We8DyxZimxnAa_M zcay-@v^@nbdrCmSRrgor6{t@>bpwT#zsMo2xNc3W`l8Smj!toa*gL*fylj>sH~-#I zKv6Rbbpz4P04BZe<*ACHl!@Sp{c}EtAbM`XCzK+Am>ObMH6>5doezKZdL>yF7R!+8 zD2i%}4L9gG_w8RWP>{lGl6TgFrN`P$6iGj#W)3%QP0 zLl%Da=A6ViT8(JtwiJwT12@|PNL0qx3qg#>pkwhAo*=eNefU~XN4kDE0N{!w&ST9> zmJ2+Zye%P^G1jcp+F5*W=6;Si#o|t~7t9wnTQ=e#mcSLx)Ms06DBlvW$2E18A5Wm( ze3(b~t+U=;`nhXjBNE4HvxvK7Q1BBoEsdF?UA3-GYBp^B7D_MS%eZ@msLN^6Pnt@# z^l%k@ho@sUlN}%$vAQc8sJ>j)n~lZgSY>edfBO!fW@^IVYIVDWWq42fRz!)2FAdsm zR`0dk@lTwUj+^smkty&_?Kz|_XS<+ zjLSWGI?Y!Q%zg~;wRJMBROQ`e!m$(*P322TUN};se?+EUjxkIz_nuJsn9=&>6vU-x z#*P|}30^M5mnGL*la>wOOG%c_i<1p=%cRZu!Wo}DnWC~+$`RjGd#`+pzB224GcO}H zcFOkCyPB~IoQ{VJ{Dp4Up7rBlR_hB=aHq~ofoV{f-;#Ao(;!owD0h0@H4^ER28exi zGa9O5U}pd(JXLh)cEMIpQSsycs__$Bi!f%M`4r)axu3V@~We|p!{rYy3bhru9YndjGh@b zR#J77ovvO^@j1klgZu4wQS94y3)UL&A+h+oDf4P*C5vaT4I*vD?LW$sDK>(xCfv&&E1bz)*|!d~8W za)AFk*V7)49ai1C^;)!})Zjx{r3W-fb(|P{{dR3{i(tH-sv%!v&+T6wgRa)X`Piyt zsmhHv^QfoTjeeW_*_W^_h#W?4d)}b=E|GvHP?s)E0f?*f(wkpM(7Nqo?+s$|Pt%MH zn_3kD-}v$pvm}KbT^W(-z+3)U;16{y@zaO|tcuI!w!*M=%3n!d{EdMSw$@^kdm_)B z-wsB}DuI(AWduzx#F)_uMT&Zdc-DNS`{YVoGB7Aw?+ML3U)G=IY+!iS!p4!q2wMjr zd|f1vjOc@Pd{*`Ye1yrM~vQ3xleRLRdZ% z5e?ua)m$enbj+Qo*4b2QQurWE_8j-xI`zZtUsgJce1?wqDf$jKbMfr`PGkN zUFvg4V{!fs)U)Sa%1nKV6#BDQOTc=Dy+LB$4uw@`XkK^*r00Fm0B{IPf%N<+U|dt- zE}yWKP@CEFcbvl?dLMSkk-5iV@!^!H!MiAsD*lhP2!kI?!Wmx@q)Yztz?QnKGM@XE34oCO?D%9L zK0|cmzhGRoHAl34!8Bx4udg!V`tfVzE|cvFC4-h!|M`i@R!R4{$-p-wsZ@w7H2ivq zpyb_ZBE$1@Ox%Y9>5e6c90w((-aL^p^bLD245#xs4sR)vEsY@(;Od51PNtpfETxqf zT_QfeP$s447WvJ+b^9U>(W+5@*DpvTfNb|)I(gSGd=_Z$dwMRlPPvnWzlPRvbP5=4 zG!|OWX+D%vtVZ}QFyIt_u)5hDpA+vyH&p@rfl&Z8)uw2akFXt(Eq>8=Q_2`6dS^LW zHOs$4S$thsYl9`~z4Z&0FKECGJ5PEky0sC@!+v(HPOOZj>pCo4Ls@EzB={;<=Q!z5 zQ*cjnPE9G3Fr}w>(%C>(L1F)z&L;3-8F6Yf^KIO#uBbJjLo}MZ0mo_B+*Ep6Udh4> z9`B=P#^yS{w(vePD{B^IpBmV9tO8DGt$Fi%s5;t9)?JD_wzs zGUy~LPoqc?@XctsJIiBhf@k~LW(@kkogY{=1u?x!M;+&mw@e(tpGl$Imk_MR-vvx+~&#b2h3&Xsw{!rSVevdnOt!zwj0YoQK$@M|Hs z>W7Rydk>-+Szs!6+$V@_FWf8h&GM;rMaW?3ofnaqS!h~w`7`e;ZAoQYrGHs`9|jxZUe56_;oAj z8?pSJoJ)Lh9O>M$wjb79wT9oCEH^nbDXac-ERrpWZfG=LQz>z`>0D)A5G7K2zQN?C z{cFpY04f6cy8K>n z{s6%b#ig#n!v$Be5WtxX6Y@MvCEyHmo}Tk!Tqh%}XrYAkkWDK}7IRQqyq;G571QLb zA_5dIpn95OI7IU;cH-<-aS!Sw7nu<7zPQtngLH%l`*0+#JW`M@WdyaBn4qgrIH+2$ zMZuGX#f^ek#?Ep(L=!T;e&o3(7RW3r2LVbR0IS8GxqNRnENKT7VYS{jk&9V;tK_^r zou7lg*H0s5+Nq|1rGKa3-02zF;t61Tc@)}&!g`JU; z;m+S2s`i)3ZM5nFcp}eizpJNNJQ^5_L`0pmh@hizI@#g!Y%vg$`Dtq$^x$z`t0AEs0@q!hB zO{#N;n!gO*LKEy4FDl_%h;-96M*S%a_!TQS$CW0e>(nq9?%Xw(Y=-cd#rkh<$4Dkv z_#*>^`YFIps=v3f1d{#5sF^c-j(@^AwJKdIkSje!P8tLAMQ*tp;L1Mu!;!s8UBBnE zYqDQ;dFiZDsqm#jrr+{@s1R+u;oZmGU9;b?2cWduUkxuSWP~6&qLaKoi~X2wE5@~2 zvV2Wyf$~Pa#vxkAQ!so)y-u5A;pG-du*(!m@gCg_mtv4m6HDx2EltPLcY_C zuvDl#l1jSLPu;nr*}{P|yjxBve)=~auP;|@OR>4zK#9q)q0)<%>i z`O~7J1j+N85caZHcVV}vO^HS9u$%o6_I%j>&3ya0k1c3t#!2NzPEMHbME%dWeZyup z{cjx9^d{`{2V*gViih|0^%)qj#>ZzpdBVm9RteZzj{@^|Z2jo;EmH~FUpYKX$;9MSz^gxsMW>7U9Jos>Dg4*8^Nw1`~DSPOz zUKMhndwW8QgkDYCy)6PzwouyGWK+$-4S9Ph^2#W$!gbrO#M zd|mU4(9HYJhA20?xz(gzVpiamAT0JDln|{M-qzA4OmYs!gM+hxWZuDrRrE;11A}HE+Un-yu`rL6iX%{yVRoN@d zrWVHi!EaZg;^1|958+7hM@84W1D@aP_(sDe zZ7#_uLqiH5pULlp=w+Sw)n9y{&S*k@vy&o~!FPA~!!3FxoD7fF{;02AD=6DPG+I5j zwo&Ky#$~6X@@0e9+;oBO=|7?TBT**XWSrQvySO!a*U+(#w6gg_w>dMDSG*>ZKTEu- zQ7NGG%hrUcWXh;RZ1GIhkZPuQP2-K=#$lfaKM9GWOEEDpRP*8PFLgv~;tqmz(e#zE zmC1gM@0#_7+CpPv^LQP3&hW<0w9OtNFDq#M)7jq%cQeMZN=P$g?U@EML^x3VVjGQ3 z#-9gCv<`)hMS61e5dC8Tp%tx?5 zF)xxpoNmvpTwJkO;PAkk(Mfe`2lZaM2+Ij)JK#3yNZ)X(#YN%GeXX^? zmQ;V#!CbLQDqeQE2A=h%9%GgV&x;g-xw4z*2l7?%Fg|hQK>#ei&FwZyVR)iO@&P34d{p1z3UA{VR+~MTo8($)zT$SCzVZt_p237LrMSGTAE+I4eEi z9o)FU1CN(Xz8bdGPd5Hzo<{*e!hiQ>Z5SmO5ONO16v*>-xG}K6x#ASPzuosqxX$5n zbLMc7-8XBGx-MedC*!@~OCsif_pu7)+xfN8M++@hu%t$ldfhk7x$zD)kbenMs?t!_ z3}7IZe6;{z9n#M|irmq)u%qxhyB^r#&`{gI+nYlzzxS!bMY;5oX5hiqR#&OP`y+

    Date: Wed, 16 Dec 2020 16:32:35 +0100 Subject: [PATCH 236/260] New translations hierarch11.png (French) --- docs/assets/fr/FormObjects/hierarch11.png | Bin 3479 -> 3974 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/FormObjects/hierarch11.png b/docs/assets/fr/FormObjects/hierarch11.png index 37fa77455ed6e9044e9cf2a601eeb02c53af93c4..142b5083f9dd84f4ebe9dd5071429e961ddad7dd 100644 GIT binary patch literal 3974 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 SkevT82y?;OwA$Ds_WuCXnd#I3 literal 3479 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 Date: Wed, 16 Dec 2020 16:32:36 +0100 Subject: [PATCH 237/260] New translations hierarch12.png (French) --- docs/assets/fr/FormObjects/hierarch12.png | Bin 9713 -> 10923 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/FormObjects/hierarch12.png b/docs/assets/fr/FormObjects/hierarch12.png index 6a1a95bbba71f8a448319b24527ab7957a2b9de5..6b2d48d92cebf8d3469d85d40e1a363cf2797cdd 100644 GIT binary patch literal 10923 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 LHQ738i;w>Yl>Op? literal 9713 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 QU%B9<#N Date: Wed, 16 Dec 2020 16:32:38 +0100 Subject: [PATCH 238/260] New translations hierarch13.png (French) --- docs/assets/fr/FormObjects/hierarch13.png | Bin 4327 -> 4809 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/FormObjects/hierarch13.png b/docs/assets/fr/FormObjects/hierarch13.png index 297a435ea970030705b028a42ca22b97e151fb19..9b6e12a921d94412166ec8a04ad324aa33e6c651 100644 GIT binary patch literal 4809 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 literal 4327 zcmZWtcQhOB*H`t`B36B?u~K5zh*`T@HA<_fF2oE%?WQ$qR*l%Bh*eUft=h9h>@BES zu?b>J)QVBO`uqLyzURDuJmcKwo_p@O&vWnne4YqH{RfQnob*&wRE)YhnnoAv@x}Od zmHJ|?$r{t3qGBo0)l`4xJ-L+`<*}f~*3sd0#wacrf9-RK;eC;yB$kJ~g7@eQsgvR_ zwpV%D=c>svD&294u{U}9$(zgLDD=+0w}2dI1;Ed#eTWw58T@7q%#`JfIaAnE0%`}Q zPRE3A6V>YA)uxR8VPQj@=foQg_4P&gjckKHsmZQS9Q@#Q98YXNtUR?JzWDp_^pxk( z&lOqJ;7Z!S%C`~SF~5KS6xg|SpYCh9OcV$NvMt>5jJosY<@oO4FIdQ<9QQQY#HIOk z?2M~&W@AHxbq~Sa+sEg)?{IfzU~w_mg6&IcXL>3M{1YMe6QSf8Mf}u(3l+8kHsu+U zI15m{DZO?Rv7fCb;%bDd#I)jNvQU4P6MHn}gZ6%J1I%T$-`C!^*XDY8^%+VdbT++f zkySscR^hr6?$`%OZN{l6yXRh}@dh3p>oEH)^d7;!O|(rm+vA)u>$2?IYM}M78Ob5; zes0xRmWSkJv9@Nsr7LjjLbz?5k4QaAhnbh+$2F&uDS(tTPrdra#=5?8LWp&h{u@m0 zW4f5usjzzr88L;{i$nTaQ#VZQ(Yb$Y88%`YhWwGi&z6t5Iwi|l6ST$0!*%!}dL(Vl zzu}g`aIsn=6aZ~kSvSJvU@gkvnA*Rxp~PvA+L{}4d;C9FDrxRT3Ks;=q_K_dpKyqO#UE%2JDcR`PoSFvEDDf6y7$)QLa43=gR z;a<_G_miDA4jS*>yeI0_kH8dNJuV3!^%T7MP^YA=E&Ev?JG)?V%Obk~NUG%gtK&zG zXWl&S*9Gd^qE-%{Kfbtl}}{HU~Q=8GNm8KTWQ5x^y_SSwzUPmbyx&p zI?!qB4;)iMk&6*K(f%7qc~XM44}89JUNUo8^?JhOHD-N1RbpWF9QBA5sG#Y8YXmFn#lIlnXP(ON@~H&uN*XYBM+BMOyRW~UklW7Tnk=s zPu6;w3Gjn|%LHXIoyo*F!Z=t>4$9T|<Bj0bh?{B; zo?a)_ns~KoEnvCAdi^Nb1}#!P?M1$a%>@$@p1=3{fV9&8y+SZp4^wlUE~^XHb~`_2 z%kyM=+i+}+?@KiA$mIeLfpmqjy8RrnFi`Jc&+63(8nm8}g!Zf2ox_hAU$D@=Zkw~O z36fe`*~p`@OW~el0v zIcVtJ2|&av2BlJ5`V#jETYO{9=c*a0DS`%B#33wbpamOi2v&16&M&8(6Ge$2Oodxhri`Ps-?ISA#$-a-)e$|)w9?ZzZq^ocCS|_tIznHVp56F zs(tX|L&P~M(%pIV#xz%yv5R)vnE4p=b6`s|4V=Sf!Y9Gt+g7T&JI*T5&#z3PLl9!$ zI}r(^FuYi%G0it-418i&H)YZIe0hIuR>pj8q4le%N~`&pn7d&&eImd!@l72T{2ggU zEP2I3$27BxXPdE1TY|NbKd3KR9Hh~is0VU}TdHlA=&ZNUQX%6QsZc&rb2H&r6S1tU zLSFn}JyMu8kPmi8mSA&7)`)qz5BN8S!L3UceQj;QF`+Wi3Ysu7#O62@T-RlWRyR>YNVAE1>FT>)E-zkfWB$3q;30h1?bXpP)pZzwt z-A?!tGwbgC4w_i#@Zt{4DjvFtdzuHhmXb*$?!^S}yE|vRFlyBq30)|;EJobDW_EUP zAXHgrYJy|duXUFD!j$;h~vC8*vOQBk_S(m;@+vhnQaUM>0GKl;hIM{GGZB4S1e zB%YzlwD_V9Ijf3OS2f~*$9dGrDso=9ZPXjW`v|86-Ja9qV^Oqh%kz!+x$K1s^L)fN z=tt)7%hyh;*-FU=6y!lpy)|KJEmA_TCctiOjc>8SJiO5t@k(eRUF>+~71g+M(x@NI ztNKAnF``49@?PU2_p8(xY?>2EO?vX(5?>d8I@wn~uQ51|>(!@rEx6X*y9=!kU_Ocm zN`&Z_%ovmYXmU`}$gghc_3-3PAKkjL7QYWEJFndo7#-a7H7FZ9-dYW$+TNO`_9s{~ zQI$w3l~LqYco+rUUB=h4H%h0VgR-*`p=r0VfJ6Ch$e=}4>8DOzGlVcoUBwiZspgQUiy`zqv$U2nb%i5TPLu8W0r?ZaM=a;BABb}Y4JxpA1%a!^2F(Kqh}tS+=EwEMY{4nalhSy%Z#>y-MpFIt=S>7qkBjpd;Lptp&8jZK!GT< z3kfR3(lK*R71=s@`kuGz_3ng`TLcAaAMs%t2qkHAN=SP#ZOLM=J9j0tg=K@bUlHbhPCyZ*)jLm%E)24GC2q3S{ zZhFQtQT#{&l%SM_hL)20rnt_7E&C*f zT)FxoCLC~+i}lt%3(`X&8t}ix>@N~wY?Hd*egQs=%VPh7PUb32i}w`NB-*x5hZCpM zvILv{c&pC-#KW9m9AV^?Gqv=ZIdaXE%PalRlOVdt7~j0R_HdcB<}2?Pkd3zd7RQMy z(coz+ku&oS_ILA)R0BW~;~A;)Qgle;ptC$zT-WrcN6WiPY!fXForttwCTSNia%>4v z#LM9)6_uC(-ZVo4V`FVzV^S(3kclR$&1P&WZi3jvA&FA}Mva@PFJlq07OB`Tj_sTO zN&MKKx$>QD3!$4i+Bi;EnL@Q(`RinfFI811a&M@^V+apcV!+8<=2Fm^Ll{8bdGV>h z2Zj*%ckPKAH1&`a2mCMntwKWZlUjpJ4InbW2z_N3Du_o&_5z%zc}vb?btbLq_jdI^ zq%e#;LZy)b-_es4Z`IaUtPk>Gk4?~Sd^z9li2k+TO?65dl#W&oF&e);p&ZX&?>KIi z`KefIp$EWC)n-e6UqgikN@%$-l^a4W^=dvor+p9v#uP@rsGwaoD>X?tQTWlK%Bkp7r~)J;|W1*4*Yke3H;Wh`Gji!2%yau#EpIxe))kNri<cPCh?C)Ks1&gQP6zyY07MFtVdHSi$8{zI}@0Oz98h(EH|w&};LqC9vw z{2wmXSM8xa|G&BMBoJ)o!jpWY>^uM4`1pEH{nVNo8)a1Kqq`P6V6S(K(t$Hl8U5Ny zd-OgSrnS)_``OfWxK{c_<3BrN@+VVHW?Z|nF#y3K=^$+{XZeg^m~!U&B`xkk;V&|8 zBZF9^bfeYULfW zqf4Vj-GxXgqP`O!9{m96Gyi?isa1T4$@*wTkl{yfm@ZD}nvCxaKtNRX=9MQj=u@v_l-Gf5<>|qz7bD3_&%EFV+upcEoy?guX@Im^$HFL8=s8k-sx_>Jd zJ}Zd)b!Svb|{@=X^!F-~EF8Vf75DUq$vE69ETc_u~|; zI#6pB3E~7&Fa0C>#gEqrplee9Bh<9!pLG_J<^On7Fx&@-zt8N!6k?_oFsEC zwNy**5wsGp$%g&-QdqvFw<u;5d@P+m6V|PvPmUUuLt&ph6G2i(gb?dbil%p#zbM3!w%1su>@VRLV9`RE2H7bLX zv9u4hs+Ug=w}EAkBbo-qZaie8&oFFHQVb5nXr!`nGB+qV3#ufH Date: Wed, 16 Dec 2020 16:33:08 +0100 Subject: [PATCH 239/260] New translations listbox_column_objectArray_colors.png (French) --- .../listbox_column_objectArray_colors.png | Bin 6907 -> 7375 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/FormObjects/listbox_column_objectArray_colors.png b/docs/assets/fr/FormObjects/listbox_column_objectArray_colors.png index 24f7c73a34622f1a45ea82cfcecb9715ce45377b..6e55460c4cdaed63485165edf7c9e21774ea8a07 100644 GIT binary patch literal 7375 zcmYj$byQSuv^L#2fP|EE4c#G#APhq{3@zOy-62vUAVY&7snRiYm!!bJkPe76(kXSv z-@WTw-ybL5v-Wy-JkQ=|?{ng{HC2cS=m^lz(1<~*O1fxh=(MPNOFRtJSr3aX7Ii`Q z(N$4ItDdCaMJ=!#UTC~PL#s<6ytBqet?@loO?=SMNc#UB=))crwrFVdwjiY!`T-Vy z^6~Zcc8elzCj*ZS;7p zs{%>Lt5nXt+idP5Q?Jppyzi-jVc@;S<9hH z5vkU%9Y>G|83y~e!0TH2R#7~&zGIP z5av55U6AoYNApFL$U@M10S;$Pwu-WH?2W=TQ0%h4?`&!QY2GWt)^A^{eL^Q>d3bon zaak4sGA!MpoxM(P945c=Rytv^863tQEc`I>0CR6xE6o>LUL~T+<-(=4K zK{be~h}Kq6pi%hi+NlI0>Givx#&=f*fdMun*#b4~4)}Z@@~30}yuepFqCwWkKM#?~ z+9_P>KL4l*R!n-C?LLO z>)-lJsCu#ARaROS{(z~u2a8d7`ymbX*Z6KDl)97r1S#k;iH0u8OQ#18-;MJ;wg6zC zY~z09eOS@-bXGF0WR(>Aga=tk*5LQUQ}@N2Aeo?Uxg$=JxoOZNon33$mnvFwQusBy z*0>$GlD(5hz#85>oE9?Je|s(xreb=jjm^rz3WR~ry5TF?GZ2RA2T^( zvfTV6mzj-LAc3mL7MNtL2QPKEo~JSQjGB z&Nzlf)m&e~;)Ver4hNF_4%gUegVperNnV)QQBPp!f_v~jB$&kJ-2JDKYeP(6}vN!GJSN~~@O z)6v6CHPeF*#q!?ni8g3VroKdg4I}s__;y5cTkG*mMgC@ylPSDqU*PYHwo&9^Ye7%9 zu}#0f^l0J1!*9~yZ}&!=tpG~D!l1P83~@NmwL8|x4b=u6GIn}LS7LEY=xb;qeUKH?^rMQ=<*bm3@YgL3N`WGJ=;PA zQ!x(u5ttG3?3MkOwM#p%;iOSo zQ@nIsU^BGJxI~@<(Kusy|A<`1liZ&V8_A7w`8Qp>VO{R*bj@fCwNY)1P}n9Ms-6Zh z;>wF$^6i;-HfkfDhW}mex~;p*PF9!fg!Dd7lo@&}tFP}hl;$Wz8z_x~C>)GCyjkm@ zAP+H0ex(xr`b7o&5rG|j{aghivI$9zr_$HT#HAirq|l>(&rnaqSIYhbvFB9LX4iz9 zW%F>CJlbDjxX!DnylR|98iUl836(9~8w`pD`F`#|-yBC5Y`*Gey53`U1fhJ=x$&1c z%+u=*Qo2do+KBo11#c4*c9+-#N*%pTx(DcyhIt*wl&!-od3JtDhjhAiJ^vK4Ro`3L z;9T}F2Qn~#@$)cB$4ix0htC1ex|*nH@?`DSJ}h=#n#QP0cix`Q(jQ88F{`L3Uwlk> zSoFz}FpEDi_>G%28%K3M#clrFfriP%!0ot(@NK;4c3fH9`-*6f)88h4Zr6#q4K|0U zrW^O)sgv$2yX9)T|WBc;|G4!<+OOw4-=d(@UjgYsx9GFS>qqIXx zTmDLi0r~e{*b@ut!s6xG+9xbcWfC0Std(@*(Jz8^FA`fqgvHy@Ggache!9I`FrT@? zpJZ0~tqb63blVG7u8=p-G@!sdFIN^z*GluU7Jm#QJ-?WGPMpuCS0vNoebg zxlzC}wb8WykiD<*#qK%3^+JZ=%s!3vu7OtJIs=9c;u|?4D+%LjWE9@kbXHNZ4E~P; z)IL04!^o(p41BGhlZAm-qxBYvUshC96che?4Km0E)H--dmwN@wy{FD|v-O!`ewMyN zNp{r(q^B})N9BepxG?l`F$X%-Ohtsl%EH3J0hE`{=fV{E`Q~I9KAz7pj$8lP)H``9 zn9}H)s~S(JYe#7P&GSV9ir+=~pW?kGK#G4#g-i(aY>)H`1er$OJAZ%1G0YNOeU##51EQ{xt+En2mW@cV#bnLHzKOGwfwp95o*pA#C#|`n%A`dE{eEqsf zQM$=dGoOZforb22fF5QR?(W~jHs8<6jRt*najBNqf?W8y(q@YxRmYX=6>Zmuy@)g5 zf+j&{$u`Kh>nwpTBCNLG@U^l?l{A6GBqUqg+i|h6*f==9JX`kmoW*mK^Ee2tz(`yU zn~odjTaLZ!DpRxWjumYqC!(Q;_>@!A`b3a)SS)@O9AE{~QSJY6-ACXM@gzfMNB@U9 zR(f(3$+d5-v25YV+^X;e7V!tTLSV2M7sxvrnKmV1SjdTL6H=fGs?VQ44+;ueT3VtZ z!U+)*6l5mDV`XI>A*hT5(%uYINUD65+#okU`QrZd37oI{TNQ^>WLQNm;X(R@!A^m(W(GDp zPlM<2ISVF3rsBUQ(!W{NFO}HiC>lM49NrLLd{CT1ppYE-%?fC8jamN{{c)O#vCAJZ+B|tktEXf-kqpmOtrXXf0yitb~G_5f~U0#BzbR zvA37-?E~Gy4E2y-JO9dNAnA42QYR^YHQh&8eSKr2s7SXq(@|;eeUwRtwOO;ETzAW{ zH{WsOMO-Gmt6C*tBHdT>rk0{vdH-UA=d@?dJC5+atuC8z6?0l4KOT*2A?+WT^wS3l6^v54n zF5Vn2sf%%Uj9i6!b+V=Ir3D4PmR}GK4;fVS7E?Oq%&p|EG<|ye48>pDF^IFH;|~Nv zWsm%omR3zy7o!O$Lv5+tD=ojutRvmJh^`vvlV0W4;P|7IL0xmAaF!jr_>THYrY;>~ z{Cm~2>fg@szlVjX8|vgYQJ}a6f+-2G8}Lz_%+Jpsk=~5}h6b)4zHDljJ@V=dIAXm( z+??23K>K(@!g;FcivNnd5MwuRdF}6!EkA6mR^9Bor~2h^=ppJqif@D0*Vk3$`qWSYwyob$?V~(78v7?Ts4A;or|0xO|_Z{{FbE zjtLT5>9OnvY+IQ%bG{i3jWKl&kun|5#Z*OfKDSA%e<8#*A`@%LB z-UFR9z72E#H9DKT?*{7*eUyHDpwqBhlOMQvUy=hVxfu$pvpcNw%v@<_Y4sO50)5#W zI^6hQ7L&w958A9V$tj$lp93f;>>m6{_xP>j7;#QQDbFu95P<IR zNwV#R1vdYVTA`ZR4dmj&9|yJ90!gS^~aOlnEN9vX!}n6+@Wt9Y=r zwY8TQIel?7E1~B&DIvNHWms%dN=kHkLPCN9cm&R?07lJm$ItKP7r#K?#>Iiybp8DN zKp>Ezy*CJ7!vM_USZ~$k+2sp$dTi7|(hI=|a$)dFAFN|y8 zg5aZUy}ZqV_855v{My>W>FUc<@`#siB3fJhY}pj!dWyS3Wwr+8TWl#c<2H46bJNJ6 z^rU=emXL+l2%k9MY3eQtTkng7q=YQdHk#e?mZzAvdtp>?ke6 znK#pJkK)}c$WooTTa6?%^&716+9OcuX;hgO1W=7a>$=#{@-<0`iQoA84y=2wIbx5$ zo7cUYyC0Pxt}&Nwcsy)Ks8n76tZIRVb8pcnlF;V97MSz0<|{3KZQIL)C#!du4p9eQ zg=Rm4>%I{Ahnfd=7&srut$B46yBW>U6RRfK1QyyKyuQ|MzdzAZbY5Q3wDkJIG;!SG zvYU>rSp&Wl_8(48;@DyO!F{-ul(`u8X6D0!Fy2&hed+l4_&2Bc3H#xJ0om{eS$1}I zPR=+bmdNxTH67C#`Ji^Fl$`vEl|$Iq-+o0?DX8?rv+>=YD?U087iIgx$3aBM8BW)Xu5eM`sis|z%a>loBSzjQ(HmTf$A2Ul=1UkK(A{s z`DK?8UNGCkmIQ}^K+Cq3=vDy|c1r*qT2)w7D=RNYz_3XEV4-W}DYV$g4B)QoGT zGSOMOF}?*7Uq?gRdUi3V_;(_q2_Z}}Dn@R-Ck&bS^Sb{24q%-RPliOfxbO1q8;oz`J~9?I4Ck3jh0B5O#9E`vh)!HF9@f zX|6$v9uB0EwKIJT!AJAsx+5U3DwRx@b1;woTszq|ugShKa#p%1Eua6||8sGl+*GI+ zK_eV;X{LAY$HvdYBUPR$hIw>XuUJv4Nbs~RAF{{z^tE9*r?Qd~o9&YelG-e}46Iu6 zRBf;waf1cio*Ev3o^A^LZl3iOWId+Mcwd}P|dpJhhQ-~lz)N3%M%_b~VVRj8N z3X&BU6oh5UfOrW)8EMFk5QAuhr>uC_jeP~yntImiR?J0_&(<%Z7#fxUEvwn%FW~-` zWZy~L;>BLN+P$<}21tp)_qz0aiQ>h@=Rf}K=@DK*T%`J_O1rS#oO)a?#%$`D3^sFC z-wfEoNYrlqNkcIyZX3Ljh8`(tpS}PD2Xp5B(wA6!|twAYc%&|Ud^hg zJUzt_8YX?b>6@K=rb#-zeY|bSBwu~_qQdG7!qXXkxAW5nkzk6u7W;0@8GKwAU7x&= z4a{iv`ZUvcZm0lR>N@Cw{#_I){X@^S1V~s}*n>hXFO4?g$pW>YsoB4Fcij%LWX_e} zqA@32UO^O7DIlveGm355#Tp2<#bew@H3yb-NTe0G!H$7dyOEu;^;tS}t89omKmg0k zA}hN9Viwja_+2j4#?RWx4Lp{p*Kwvf!5?vP)}RL#XhjYlzz=3lM@PqQvZWq)2?nE( zGlZ9}fx~#BOm6tf79%C4jmws8WKvc?4ui)jjr8KKe&|Yw!UY=>xT)Qp+JMvRD^8d% z&EF7X1`7vs4`HWIi#MJAY8^VswZlB4V24Uza(5hoU9n7mjT`#DSD1!s|9-1(nzKXF z)U3(~ae^5LyD>P!q)(^hL*E=M6oq!rc~dx7!VnhU1(RA^>P6F!N}O`!A%J~A+N#Bw z@#0QhXn?y0-KXcE>mjqnmwb$IR`BrZFN4Wk09wjBfK85b?o`Bw!&h z_!wgIelqoT=#wLu%loC_aDWFx5p?f%sOaDNHEy%0q&Px>A?`^ruxKPPe^Hm!jh?3; zDoH=t(}Q-M;ChAzqeNw_1XDdw%n`ht$*?f?;6IlH)Edq{r&Kgz!y-p;+{{1i(`+Yv~1?N1Q)gqc}ZwxhFi zbzlH%am(7?ejdTOKIUZf;$Mo4L%9SvKE(os9r0zanOi%4J>1_imy1QB3kwT>I8!B9 znz^*&Y!($lDi%gO`CeSQ4D(>E>ga>R;nUMP$Cz`^dV5!{;y&Osmi|dhGBqurb(p=q zjpN{WwYZTucE&2ulW!B?YHw|49W_l#v(?q~`}7x$3z;iXJx8YDlb)Q^RO`bntg8!Z z-9C?aF(IT{VT>9QAPE%_7FIM3#Lg0uKn?nU04&Ja7{1p(gHdS{>y!{z2c5o<5r2=U zu2{O#K+xQ6muIzGEK+(;cJ3pR4p*kz-1Q`+7xLVK@0%-k84`mFi1Tuu9^J2>-gEj3 zmWS2EWIPx|DFT~_)fG!UxaH&+@RhN8beLMWQ+?F1P(CYj0FzrNQc-bQV@r zD=VXl&WYyunpa>Or_Ho=qfC4fZYdHOODIV))w!lXIf-)V`wS}JcioFX%#K}Vio71q$*^;T7%rVGEoXU0|cfg z!KH^kn?4RR!QJkydaHi&z*yYULNf`*{9kB+lU?up&{bri;-s_9r=jf@xZS0xm9dAt z++1}AU!XmIbWKba6^lyB%5t)^BUMUpNg01{Z5bLE8X6g(261ZY%%gw^G@jA1bldoA&e?OOOP)s}ktnG3^j^M8;RM7>(pR^& z(S>~jLm&`T2eP0J*3i(>I@;Y$JqQ;q0=ilLfQqBpVg{k5$bO>#K`I%*o~kM(i<+c* zHnfb4s1FFn%gak6e;!XyukBJuvVLl9rOoTiQnhUu?D9k9;TVZ4=|eO;wi^dZ20s@UtMLLK9?@rz$A~s3`$yDINHmbLrc$+{Rn-3g DVnAR~ literal 6907 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%0AMz%hy#=Z002{ghywrsvw!`d%8?V zN5|yk?Y7 zX}UBo6uDe3(#{?gx~~8rudq1ESLO%=0yW#y>9p7DWseHmQvm;!(z0OO@wLw@-rg{DRGsBQqhS#5>PvFY?=Yl+q_AZlEiqD7oiiFDoq75jk0LH`OXm@va&32_yDV0ju zqk?o0fLLTQ$J*MEtuVA;FCa?hHcea{Ex8?g!^d|gsX?RBgu~&A_OY?CJEH)PTUEW# zs)mv}qh)nSIahKzmX{4+Br{fT9&c}Nw_2@tMgc%11UTeIQB*~XTCJAL<^K`|05L#4 z4gk0}{di3?r3FySln2CMJAdZzvSfQIt-nV~=8$6hLrK zdH9TQD0FaekW41ETJ4|9OV{r1^z`)N;$rSBKWRTZJNxE#8^*_fot%8%-+wVUxUjI0 zOAs}q1kwk9fSQ{)uCK3YnvP#wP!y%<>B%()kB+`612OdPqn$_=;cq`vG~c%#Ww+NkgE zCof6%uzdBvp|!PjXn2^UiQS!@R~E}xntnbo(AL&g5#8S2w$9F~R4So65a2P&FOC+r zt>*vW>fQZ*zg}N==RC`FL!;4*j*gPCNnc;z@6*$o(I0h+cK|@M Date: Wed, 16 Dec 2020 16:33:09 +0100 Subject: [PATCH 240/260] New translations listbox_column_objectArray_colorsResult.png (French) --- ...istbox_column_objectArray_colorsResult.png | Bin 1896 -> 3599 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/FormObjects/listbox_column_objectArray_colorsResult.png b/docs/assets/fr/FormObjects/listbox_column_objectArray_colorsResult.png index eb7e1c0304a52f7618bd96558a49e346635dc4ce..f07ffa07e34a08f5a07a6cff3390f7d86b9ff8cb 100644 GIT binary patch literal 3599 zcmV+q4)F1bP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D4Wvm#K~#8N?VWj0 zlWCrS=dY>lnyJ~YnVQ`ldwQEzTe`RGownR{>|?}rRJ`$QK;#faY-mMnwObTgK?IZr zR1oBlvwV4|@gZ#cXBvs#2 z-}fR^`~^TDtN|5+untrV!a7hf2oVZ9)&xl z)EQ@yOUKK3)TRM}#qekSo1QX^M*LM{asGp)6p&#%rf zyEnR$HzBrRG23sFwZ_>AwGp|b3^ErprL~;TuNI?X471}3)!?XzB{%X_FEsFE%0c$j z$ZJC+MxM_x6(iPI&gU1SVl)OllSlA)dsj5wz*D|Z-qn?Pa<%K-fmeq}jC@`UywO<9 z=NF@5)H8a<7{UGRU6FkTw&I2Ij;EPkt6k$6uMUwI8E7sB-e@=q!@|X=7^Pm{%OSYE z?HEQAwLBZD?_p7R+F_ZT(vj)0+Vuyzen2Fl^$WVE48t-#LpV)iO!UC7rCK^q(EMzu z?%Bu_=5)Ud9z`yiXR}SkjH`?+xnbdIuqj5a*LRE(oPWLfRBVL9nh)Ol@T2Wvl=ew^ zV|$j{YS*YW;);p~9vl7R>AGjE-n0n64R-eL+I_awB_W5Wqff&H z$i*=r%T&y$!uaa2u6Lx0)^B0=q~^r}jEWI!^%V@9<1c^z-fiBR0 za&bJBVJfCeY^>$KblX9fU;fKmzj%dJc5Cw6M_(*Z&0tcDNTVmy3H$$bR}jTeGd@$^ zHx%q?=T<1kH)S5QbN#Mel2@H}$lmKJ4IUL|6+Jkz!T@+eoiDb`RIvpqIkz1*e08mbeeYh_w$H!6MORmG zXON4ox49UKaE8p)Tj*ep=8tRa(^>{C4q;S`P_4sv=k0jw4}ZQ^8B3}QkGb&Kr+4Gn zlB~LneReKEt;)RS$}>kc@4ej`OCSZFb6xw%neV8RDa8BxH}BYatt_^*HMXiJ<*B5E ztwS!BUg>SHnAQos#r(NjoLrI{`Ynb~g&vb)1S&nQr~1SuZ|6Xdb)Rfnzh$3askUfD zn%!LLwL3VZU0c-0y?_5AJhX1B<3``B-p3-tI7RA783`eFXvo$!T8o6|I zPi=+8G>mI4=JSh1F?%A(RegeiDP0v?gIqd#oA)tYB7GfCyKwu)rTZhxctV>MgC~~V z$ZPa{*g)*yR?{btOGlrSrbi8fZA_t62Bz0vdGvTfWV2$3MdX3Op|kgkPQ;Mh?i3@J zyM8fwz5N5j!^3K|+BVmi!qP;dCSVlgTP`7^>|m`o;}P9Gf|ot&JUo}QjN>kDSV#b`lV z8ThUNT(1LX38vwTV&GA~YH-wid-}f|;8$h7Riy$)JP2+8VGSUt4D5XUeIwtLu$YF1 zhQ`K57!9A#w_!1jGoZN}5Ey_w0=fo)OUBD$oQR-$3Pk0bR(@Fus)Qgc5B#+NMD~Ds zCLj(0LJtTvA4R@#VKLd+*?2sjN~LnST)35)JL?N(p~W=M0BR?2Oaa@AK;;BTEt16CE9$oSa-=Uk|r3HY}!52Z}4f#uTul5Ih!x zd-#{d>?;JNLU5l5Hl_pjI?xG=!GV*tplt#~yuMjRzHwnOQBhGzNl7*@2HurA`am27 zB=>?Q2Ke%oov%Y4xHSMe`b|f32SB%ZAG4bP(uV zH1Z9KQ8CCBBPs@IowhCJ^j86?odCI#JQHBcVgdpJ=0=E>!nt#(7=$$}onka%Hl-w< z*ez8FnNLa*NWHST1BfNX(kVvDYE3!+KW7NMDaPLtgT4qX9-ljaSW=*35Y~Z3F*6!f z&D~4H0rN4vN=z%bmfALDP>JcJ2!F_>?;|T&|F9UHnAwzj-L%F(G&a4J2P7kurpg?u zDW>V6#tKqa?T`Wh6^GhRX?`X&zW~CvU{Q=gBY$#p_ZN2=@N2zH&~VG)%fy~>eq*ZV z>5Gxc$?1+O#jj)$}V)#T*6VWEM37sJci+bdJ!zYVDv2UAbU(Wei4 zMCA4;R72%S$??g5Ll-41z~ruE)Jppv?E5^P0fP~>-1a#8m?s;167Be#H4e@`KJG3@ z4mvvCZ?r6Cbc~uC=Djnx3ce-1j849HJc0Ae=>b>B z>GRh}?LXPaXeA@H*_TfoaCCJ&>T=R2G_{f?fj1}t6?e_;;PIP`FN~ zOsg=jsBZ2RXv|O4%f|bkQrZ|o7>QoO?dfc%F-1D_A%yM0su-hAHc;sA5>z`mH$W^? zuqZ~aR^Tr<9p3MCqm-?Bz5=mq!J-)BjDD!Oyz()XgL+y1V7HG!tPD^w2R7CDPb>&LHQO}GX-4v@f?)YZN zKKHNl`{7eG{BF`MXVc`6UvTjd5cO5&+&>u<67m%s?ePuyvBT<5EX)W z)5m9$Xw;V4A47Jnd+%5#Tgj)Vc>TwJok(cx?Pm`462f=;#h24)wWWm*BE#y2hMTj) zj|3%F(rAwfImvOcExnYSD|o!+RrvKW*N&PyYn`D$;`Sh*d*{$EO;p30&H*Gx-TSm z&oi@zk`ocI`!bHH2D;(LaiM`8cbl#L>=ML33s%KEjoY>N;i&0>Ml_Q5^;|JoXV;y` z1{?Tpc&lZ!Y)#mw^s2Ax90g)1QJ zF}_p_W@j|A$+-!KHz8AL(ZDMWyhFh?h-J#;@FB9ib1RlZ1sQ9qGDDmi(d=^F%PI1gms`|5Y_;|{{t{+ VB+t`pW{Us-002ovPDHLkV1k*|?T7#X literal 1896 zcmV-u2bcJXP)`9@3|?8<0sBggbe{9N>NeK;Nbo!1!f+RdJsb zmR#-w0>;NL>TqIH^zPa|i`$d&*RSQX_!ZivoWN9rv+o33C_G(bViOeoj`v9jcPr@x zrWn8c{as>H$Vt)z13}UTA4w-L#rQ>RCHvuyY|?zNRISpgRi)pX3CiVU45EiC(yBl1 zpgrwhsNX))!xRZ@c=_|i;v^^bl7x%w5fb%2QCg94&(~!~9}+Vy2dfsZJ(&C3yJ^^o z{GG4i8Dp;3}?zUdJRsLQs$vCM|l61VTO-7#{ zYuGXumvW@fSYWi6Nk=k59jDq5RgS9>PyI&VSshIW-f5bkQ4rq7CF5A%Y&F6V<6zyUfynm{B_p;@mtY5J<>O8%8gF}N-5y~w=YuHVT+{Xd@5a~N@LD`v{F=|2W9mjASi(A>@Whv z4kNfU&JNN*h*5DvunCbJMu6C1givgAU5+BB&MbGQfXP94>7}i{PF2g@C1A3EG#*BX z#BQ&2rEzR=RJMzXcs66yaaG3#0D3qOGzJ2JaU)w-&)z?8(;I5Mj^f76UBzrg&lpu?TXU&7H{FM zot=pcki7$tam3bbtwl^G{;(^Pi)?N64!xm(NzN_E>)lmdy@_iLQ?!7>b3HqAwiZcW zanp0Qdd{wQyL7x_mkrnJ0f{iOaeijAHxP;lB3n_=S!=4-%H1bmk`RbZQP<_}4={@eav#pbV$0D%rfb{HWLyDo=!zsnu8;`K_ppt3T@wM@dSdBAP5U_c-? zeM7W`ldZkQpx;rgm0qtjcFy^kTL4AbwI*2Y2o8j4TvzN;yS=58S-O;7ugoqhgj+Ac zhiJ^!ZLRIZ;cKp|=^WD&)+<8<@dQmXWK?@o@mpDC^Cp{dzWlh1dClKJkb#@p5Vuul28n39Rc)tArK>#gwLxbQaiHC-U z`uh4zCKG Date: Wed, 16 Dec 2020 16:33:20 +0100 Subject: [PATCH 241/260] New translations listbox_column_objectArray_unitList.png (French) --- .../listbox_column_objectArray_unitList.png | Bin 779 -> 1183 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/FormObjects/listbox_column_objectArray_unitList.png b/docs/assets/fr/FormObjects/listbox_column_objectArray_unitList.png index bd1bb3bf15fea68c1627058c7113528f0fe4be67..96d78b37b014017a3241c7c7891c435c39b10121 100644 GIT binary patch literal 1183 zcmV;Q1YrA#P)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D1T;xRK~#8N?V5W` zQ&$|v`|sFhjEg#_Mz*<(4UHpa`)^t1#)3)RbaQ4CC}^lei(`bfLU2BSb*s=)vc%fb zffKC(s-o0dYyUZJv;5aI%&#H){Nez`+f5LqvxF7laroL z&pr3SLI5xuZ~_PhoB)EMoOlpGeOB}6(POd(h)SlWrUnKEsKOk86aO#5aiSK8Uh3-V z!g1nV`Q!C+1c}PLrwD7E04Jh2-~_|@NZOZGaD>n2f6FL>eRWN^l5_%3#(g?^ zZ)n7s>(Z6BzK%1=p69Rgmtz(!%Q_e6Yz~HphsVdq!HI}wyAG*cA@&p42|O7-I(n}+_?@Wea#2oL z`z(4Pd(o?F^Dp{tb+sMgtc(*h_-=Q%AI(^`5 z6A{g47tk3u(zXZJV<+%+2fh&PrNeAEU6j7&>vB_Pb8T^Y+_o~4rS+UJ?TydHM%+r6 zG$KyyrzHk+Yh~tJ{zW0c3yW89k6k&Lm9SvR$HG>!BN|*T7v55U6A{XXXOOHrgb+BS z6L{Tr(qY!CiqfzX#*U_%;L>q1;j18hx?1cVC%P;&5uklWi2R)&O zxT4w{|J=f*87HWkkYFvqiAY6-4id;nAa+oFAfyv`-R_~|>ZR&KocOOKE!P@Vg`Bvp z;^ymyy5iK;TS}U7tGT6Km=e25)YQ?YIkfqul^cIFkcU0RZZ_5Cf3TrYPnARAa5(VH zf)kNQ%9EQDB;I?owiMV2xm-RpG-RX0q&a>dzjYN zj9ahj)y3Oav43c^**Z;)$1X0ssI2GCr{uRYd`=yJG+dGOioS?n)qmx zQy+A7cXP0_7Zw(Zh=>fJGv2&;vvTE1pkvBPOOeG#qn!HS&Fj~trKJJ_0^h!U8$f3W z2?<3;Ms|01qlu5!<>Y}o6RjB`AbmT!-0$DNfx-Rb$B%(^BG3UqX8;|8CO(?W$pYKA zGA#W6Uj@iWXY@)B_&?JVRsKI1474j5u)1M1%EU(%xdx2$Ab8ASMHdJ!MaN zuQO$i9*uJH!S;030-bIDJ+Vmr`Sa%kY`%&Bc(`fp>4@xQLP+Yr{9-VyZVv|u8QVoL zTvoOK%YxWbFJJs%EKjTpxw*M91xKTtOaN@MdogUoXtyB%vAO&|7^ABG57GZ0ADe72 z8s%gGU=sA3uIPfXZN!1mwQnOA002>6bAqR002ov JPDHLkV1j!QV*>yH From 2657fad6d6716a5b497ec83198749973ddb0cf04 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:34:55 +0100 Subject: [PATCH 242/260] New translations MSC_encrypt7.png (French) --- docs/assets/fr/MSC/MSC_encrypt7.png | Bin 6288 -> 5046 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/MSC/MSC_encrypt7.png b/docs/assets/fr/MSC/MSC_encrypt7.png index 89da0635752aff3969a82cad3fae81f191caf6a5..3b30e573abd2530774b9b5ce804fa8016f1ce1a7 100644 GIT binary patch literal 5046 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 DSZ!Xv literal 6288 zcmeHMXH-+&nhy9;Y(cRhM5+pcfHXA}5rXs*dN(3fib&|8S&4`UC^a-gmCy;H7ZD)= z49x&0p@@c-P>g_JXp`@ovS!_xJ8Ragd;iUkv(DLP@3)+{?PtFy4r;1*^pM~o003~* zKwrlK0N|7b05|}=oa{G0%!i@u8%Lmpo;ILz0JO*+{Nbr(q6GldBp%*z;bM;uKG3%h z1OR|te_kAT|95TxfWQR<9WAS{+sl*F{-?V4@d101{QIe9A5Mi<+?ut$X;s&&N5zOe z6*7^D7XSE>pRuVM=f&ymDlYi;c=>Oqr026)H+MLmGx>L;r?E;cYD#KY&%s5oQUqmQ zLbBO2#3LkRaG>=|eTv5ZVZcqGnda^~g@Wos?;ik&Rs_xufWhlLY{ilxfQQ)xF~Chz z+A)BrB%BwJbOQVbfDi}b1kiMV900gD5&!`I!<*0?GrKh{URSKxJrR$q~_MnuvRsSUYObf@l`bMvjrc!tF zP@xA2?h|WO{#P-}XRgMZltex>lV2uBxb)UBB(__1$KV~m$1z*SHm&jsHbXGJmthMC zp_4uEQU&OA;KEE7vaGBuFfj0&@G-QX`)^;+MMe!=Fv$#;+*FWG$(X zZtLveRJ?r_VNoy_eC_r63I7!wWnxw5)n-Uv5@eUe05ylMPG$MG-{bf2V4M9HsnjxE z9yUdxAa=HxZzRoV9ksF-EaW0g+A`1HyWnRc@2Uqp+N*|h8Gjri+m=xM{M{6yW96lL zz!IXPv_yolI21wUn_QKGzsqA~LHN&0n&m2YDk=reeadVJUG3v_b*myN;5e_!)%n#SzqB(JvB z(b`j4odMkVg6;Cq-@EwAjL%P$?yPk_Tb0UE4QdKCK{*CL=Bc$#*FLM>sgR#LH$SP zN6E1qD1nE!hji5YZa5L!etbpx*u5-4H8>i{zf&b@)vGj&JqC6$s@)jZnj7G@ZV`=d zman&tCE~m-NXlITK^80Bb@uZk?qSW>_SdAjPq$Am?ZtPGI}}Vd5CeL8PF#1|9c#bb zwGO??T;XsW#E0MS zpn99hb5^qw>m79Vb^&zbnEjKbet{`rx|c@gOc$gNMtnlE!MlqZ7gT3gF4X`eEc zRBhGy!6jySW5LoEclFFS+Qb)$>uPdL$LfqUx|v^hnZ4d5V>AzSctbr|ZHnxE?!tBA zW4v^6gVIcVG{$>w_LbJzd>7jKu2xSXgS4cq9+LpoNGW>~>J%~KMNK;ptU-o0N$k~d zS6Xkx@da4qvYeWa$Y0^Ur5fPvFuLTUavj+mwP2dp8O!qX;j7`$lTWwSEA#2$b31&b zrBb93BVe)$U)bB-W|etkvDg|BV98+ihfh6`OcTedk0k) z{XWHX;{pQDkXROGu@7e-sYck zLvLqp(e)*3wuwzPka=jB`qT!WGRfaDVnJQYFky<0VjduuyM$)4eY^_yii&dn0LfMj zHk35{{Ow!5RnnG%-`*CazDTFfB;oNobX{2@3Wabz-pVzp9o)im-x9a}1v{KO3NgmY z;V}psp#j9T_wQqq;W0_f@2VM14b8=`A;RvyvuBci7T>NX^`kOnKbM24U3kUMkdAU(moaz^ z{wn|IbhYrqDAtPTt->bz#>rD?d!o(NHi0)uw2{ zfJ@$^`-Z%NSD0bok&(Vq-${SdeLDPTGDQ5ku>YrM2)KFU>KMfLJyET1q>=Ch=!Qi) z!yt>DVAcAvP;k)BR=_#oL=nxgfDzK{HbfgCg+L|WFj>u9f32FI{m3r=>y-z1fEiOtuAP+RExSj4i_XAv8VD;S9u~7(^!>cPxL$7bX^EH^ z{qNzt20#9l3o0*fd}er$N^8y_Z6bB?k8u+J#$Pq!S2-}Ts-0zs?|FR(F407hm7Rg z3ctI#o!Hs^i-i%8EVe!oI5^oJ<%sX~y12bv&jI-UIUXeF&ug+ZEkbG11QqSQXk6Ro zvapB=(D;!)!?6_kJJ4&%Oxv2*WNzAZvJ_l6P_}dQ-q|F``^r=>vPVFhy)jm_OP)8) zRS#dC(g@55p!);4V#v07n2HTX2S7A48>|fH-Tg)Nk6{;0wy}gYqg!#f;NL%IElW%n z^Im`u!Zg!a+-xMe6dRVbQ{FcQL&17|74NE5NEa6ucX#)wD2-8=jVzqtARe#z6}k8H zwrqOmp=dOHY+vD#T@K+m4|}tpYxW2dFnu8aNsv_3N2W?8fNEc}wWGyO)G@%hK%6O2-lU9M#T~_?@hk)$J=y5fJY-L0LB%C;5y znR~!R!a+q9f-vBV`_K6yLulZw7s*J7i6F&)LY(sraVoe9D1b0rz$ZR>> zyLX#?LMe~*CS-0RcA^AfDrxO7<@X_sG1>41a1?8uUH$e3)K&?W$#OB@6Rxpy|M$i? zOkQ4I6S2PVgzrXDNl`)qbAn78O0r5zVPb3QP6G4W&yHJM=Q5)AjO@Xmx`LK@ovlrZ zzvgqKj^Bu<>@R*~Imi(tMl)gRFpe!YG> z{L1S-L_`(=?b2KOtx5)?uViL8I#Q6ETdq+9U#);aJ5ChGLc2FwZcZcoHJZP*VH#pO ztS*IIedQ$G?5Gsczm{;?=G+*M(yj{dn8w|7)NS+rCei_giUPdfEBi0Fwn~x~v6M=U z-XE<@Q@zk)BwA*aE@$v1lC@Y;D{H3xr^Q-U+anf+(2Vh_K_bz>!T0|CzRJUAUXQK9k=u_QkP_uk_4M(Wkn2_%SH* z;=1K&j7b!zrOS|v-I+cMx4-SHTERVDjyHd;YIC8Z-J1Uk)oS#huoTI6$ z0t@d`z1t{bYL0hs5uZgj;NZb&JpUcW!nr*B3O9I1u!B`S$DVBTV6dOjT=bW24lg^Mep} z?VTUYOE1Yk1B+y`jiqFbe*_ZDv9F@L8`Vz~mAoC#%hxTRh;j_|N-j=NMDvyI`%F1* z^y&Tzs965`=tzr!wfq;e>Mn#1%Y<5LPx0oa)aMy(Pg%4X)xTgZJ99NqQFSB^mQn3I zJFi~rzP_oKD4d#|ggj5)+WMZjVW#l%I9Rz5R|G$5!Fb_t2g6lz`9Zq$tzRcsU1wvh zi4`S=-}>LNP8;BCaVq|#u=V07Cx5CMw40*xR-~+&Vr7Cs8SaoGnWzNQWe5+wVO7=| zM_-}x75+lWIBimvI=t`thXos2pL**ld?RveZBP?-X@Z@#!v%UCc)Mgsmql5eOU34k zz5}6)rHp1qqwR`qS&LP+f66u6+I(-aX(@Hg+Jq0|0OlrYBwezy!hO>NENO&Ly{U4( zPKU_%o|>7YU&`@Dq%N_=XHlB{){TW+ZFYvQJ6o%5u2%7U-Gn7nP@X4tVmOzyX~!Ph z338m*28ulgaVGJCpNhhHZ;Jo@9ziU2{$ory^ILa(`lg~0O`m|CABy5`4Y2gFhkwCtF-Ct3q2Dr(7`sYacKdbovg#Ux%n@5J)Spim5Rm4-?R{pzz^pln|v}(OmV}#PQumhyC}w@ z=nHYqiW0FzG@}IoPB{uz2GfR=#gQlidWC>CPlCLG08J#|@8Ur8S0F*IznRwYoNS7U zco{WsY>rTT-nPb=BmU@{W2{9qj1E30pzqZYK^AKs*-9Q+mZBK;F@~vGl{VmHckLOb z4$%-j^Qo+AZ$3X-=^zbyb;iEr^a@={Vgo7yXO3bMvvbrgHGgg}6$UjuRj>6~wFBnY0+ z0=l2b42ExB^N-m`af>N6wI2C|wN&t&Gr31rw-Z=0-ZdE6&DR~aY52j|UiF#H{r0Xo zeAKMK+R;6N^(8l1X(G%5 zIPV8`So^paQR)xz9C@n?G$|Mk)L#(`Oe8t7gq0dzP|6#$pM}V@O-?|wy3@SvRRnB0 z;Dp3XX%y+q(nng}vy*VCEDmg?UGC^*b0I{%9Z6?M(6VR>cU{}FyD;y0t4fhgEKtbSTVe3)H z|KxUL;!y~jn-mhIWpyS+Gv{q?{KY+}4%-vC!Si$d+m4faqv{VQkE5*xC#oxLCGEKH<+8{p0Mf}jGDvmv8Be(Bt3NcEMF@76-W zS&t`shgd0)+n?TDoBeK<2~o|uxbv5s%wT%)wNIap1-qErT%OF|)3T1ZYent+(2UD( z#+F%s+i*`bPaKpA<%(W^OO}R`G4=k_QU|1x*@meDNv~ErWJ>?a^;Wa9^F>8qnwjNo zImO1dyM1El5q!09Bpo#3e^Kxj+e8J#<{U3atm<`c-5_vs|+@i(sjDPakm zZAO1(>_59X4u|Vc0RTxEy<)#b008^)ii%xL`6YiJ(~~j&?7s*AgIlILmD+b6{|krm B;+p^f From 1891bfcee7c222a7b8ab751853bcf1f96841f076 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:34:57 +0100 Subject: [PATCH 243/260] New translations MSC_encrypt8.png (French) --- docs/assets/fr/MSC/MSC_encrypt8.png | Bin 1503 -> 1366 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/MSC/MSC_encrypt8.png b/docs/assets/fr/MSC/MSC_encrypt8.png index 1b0d6a3ed07c9ebb7e55b4dbf6eb8df5744d73d1..bb665844fc0668d929ddfbcdb307da87db49070e 100644 GIT binary patch delta 1333 zcmV-51E3txQMcaiUtAo18s?UofA62M^yl@X zd#c3xT(3gW39Ha#y}5OHJYC4U*fgG>{Zw4S5k3ebO!a1S=f=z7m#xNcoGy+cw2zMG z(ns6^iH^P_n5qH3n6}aU>?igT#{3Krl})v>xij-@aP8IZ)#b9U9(Q$=g$A-$J>kc; zk@mVQKUx*0YGCxm_}NeDe5bApD2sX8;VgB)llQ=y`S?lyQ8%0&f2;6o{4Q{9fp02r zAdVU2O2?yYs*i)6a|^@UtG~Qq5?>wJQG}n%O~3(aoQH|t8y%Ec-9eA4pq36*s<3NN z2?7gID5!f}etu418FieN6y-vpXepQ-*XpULdJf4-RmdYH>7;n7mGo1T_CdD@%Cw5g zm3rV9=Y_JNii0CAe-!pC3gry`Mf_~xl=+##uNODkluaD}T~ayaf*0TvbYE783-0mu|P5&(ZKq=mb})*n4>(u1V@` z3A~}SeAj;AX^Nzk4ar3DV^pUk9fDz3Hv1;P*^Y7#tVkL@A<|{i!w ztQ=V+RpC1Hz*{V%*X~TzfGV79kHrX686K{ZuilG`fArrG9c570E%5w=i_1JVLO(+7 zU~1e1Rls7CT}c0i4N;R(P9Ru_?~>B&ZkF!?hPWrSVe#)tn91Odfp zDnrp%e@Ax|m`3Q6s||20#46g=|B$gvWk`GlM}cnq4^N$RQyIip8;5Wd=!E<$)#+cT z?i5r`zNrkxR~MGP!BGIT(9KkaCmY*v6aX!BHWdJ%9heG$%D_|rR0gI3pfWHO0F{BM r0H_R11wdtBDgY`2Qvpzwy}iF!G_~o}&mH>!3jhEBNkvXXu0mjfn}B}L delta 1471 zcmV;w1wi`N3f~JMiBL{Q4GJ0x0000DNk~Le0003N0000W2m$~A09bp#9FZY3e+6_& zL_t(|UhSMuXk0}c$6wPJlE#{d#OTFCT#57`A%{KoAZ&}RAU)(HLWEx0Lx|E#K=2r} zMM5tr7Gdu_FhYfn!R0}&-C`pmg;}gv4}V@v@Rh{Ka919kM3`5e}3>vcc(P? zRAx`~_xGQet;n`%NDBm*EXZa%C`_`5?G2flBsCViLqBpv_A};TXdJEm&ek- ztRoV-Q)|3`XKU+l_dB02NufO?qf9;Kh)k^g**(dmL zY3)ihrfuq?zM4t$zSmVq6K(1#RMZfAc~Ld zG$Vi|o0Z;RMU4zKXq+*!s)Pk7UPc5X9pa4E>7(@WPH18)z%JEDEV$MTC4$_l#ZQeG zm8#VV>YmW{0;#QLe~EmXAe_#d9qWJ*vIKK@ti>}$%*7xip&#z9AOCdq?duPGd1xwX zRX?0yR?1XmouWkFLG2HrI0u(l1Zfm8ni#<cOK4ZRB1!(s6v? z@Y=nNMnmr329NeU*?WZV=(f|Ie{^6km!B_GO3SP`*u}wKW&AYX9{3I~4zu6IsZsr8 zt2zrG4jMu9g!U!NB`=g_gz@{EnEzRZFV5m>?e~f1oOQY2c`pemFuy#e7~-kXT6h z0;#+l!NE6JZvftTgfsYZA|oUNbX}afEZ;Z^vuw3cBL}N0RRJ&sji_|0b7V;Z=*?e@ zyVEUWy+ra6W%nGefZPPzG8N}8vK7ltPw*9sNfbFXBVBQ&%>EUhS8>eYQI`0*lwx&1nIt)WVXtmhGDz>l40I-PeVC#z-{f5NL zXc%LvN?JhB;g{}#)}T4#J|0Rh?}H``6k)j0zwq4sDnd5rh>aA%d`iBt#Hakc0@r3X%{(Sl~GS Z6#(EAD2k<3>2Lr5002ovPDHLkV1ffH%O3y$ From 432fb42a44e2847f14298f068094f3005d2f70dc Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:34:58 +0100 Subject: [PATCH 244/260] New translations MSC_encrypt9.png (French) --- docs/assets/fr/MSC/MSC_encrypt9.png | Bin 6396 -> 6236 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/MSC/MSC_encrypt9.png b/docs/assets/fr/MSC/MSC_encrypt9.png index d40afbffb8793c91b47b6c60785aac6a40e1f228..a215c22162f4a8cb38ad2b85a34fcb0b853d4e35 100644 GIT binary patch literal 6236 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 YB39V_zikhp_Xhxg($v=|2Jb!jFP?e+y#N3J literal 6396 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 O5K051UaI Date: Wed, 16 Dec 2020 16:35:00 +0100 Subject: [PATCH 245/260] New translations MSC_infowarn.png (French) --- docs/assets/fr/MSC/MSC_infowarn.png | Bin 1598 -> 1604 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/MSC/MSC_infowarn.png b/docs/assets/fr/MSC/MSC_infowarn.png index dcb018621d15873129de44002a666542b9a38fed..7cc2361865e68d4341af2399d807099fb3170dab 100644 GIT binary patch delta 1537 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 Date: Wed, 16 Dec 2020 16:35:02 +0100 Subject: [PATCH 246/260] New translations MSC_popup.png (French) --- docs/assets/fr/MSC/MSC_popup.png | Bin 8302 -> 10081 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/MSC/MSC_popup.png b/docs/assets/fr/MSC/MSC_popup.png index fe17355341b322f03a04c4372f0f0fdd5c4cbdd9..3033c6f2dda5b35ffee2c65ed70bf088b55c7ac3 100644 GIT binary patch literal 10081 zcma)icOYEdyRP1Y;ZqVpOeBIRAqWYgB!U=GhUmTbUPlc>l!Sy)20^sZdpANtgi)d! zz4tzPxjWzYyXV|<@A=((|CrtPUVE>#-sgRu=bgwm5QQ5QwA2zHQMdj1;WIo? z3IYz&xxaYpuHj_q?q%X?fv4bVVd3az?c{Ct9HD&Oc#U@2ySDO6P zT-G-piOFqTt1rX9Cuk*K+p&IMBBhefj^xSR7gTAf&DN(RTDQ5Eb3uh&7W}luar0I0 zi2UZ(5-mlPgdbiw`B&2aD=Oro4U z)XHcKp2)pXTCE}zsC9pT!oIUlF>(F4@5rmFd;bhHP&2L{)SargA=vLj?7G_!&6~FT z%p}~ehITC8w8XE|R(=6P$vwT;e)84ocT4N8dhh@hxJYx_kn|3VNZh zFL%_`)Pg1bjyS23kFYaWBlgi%S(CIv3V5CQ{{2)+;mO4tXokA@{c0!&F7B*=edXAbkKw{O8;0d_IT*4c56tjAJx>YD zNG(2kQ~A@?RuN7d%Y13|<#)bbU6eN982f-MJof9ioOG zCao6y@pdntRsT&pukc5n2Vfy9hr9EBGWO?ER;qKdviGc$DE+^N>{Y64GS!qyU*Tsq zuk_G77I<~vF&?{-8x$EU*WtGvXiP=UD{-q(1h_(c9EubL68C`y>_^> zw*t9My#=0+zWV+BP3qX)+k#g`FI zOEqa>P;Cs;0z(R$9_m*`rL2BOvanX8U)0yMg7xh;Pl719+v|zhjhYGy z`3hW}EYI-1hL*5#8<|dts$BWqA}!HjWxD*PAi=bzd&n~4bRP7vnDA32M1MRSZL%%8 zcgAE8Y?%7`8WLfxFg7V;AIz`kAqwxeFc9cO6|ZZo(KsntLP;tEBS*h&*Hqd%pk9d< zsx-Q9K&sOUpVIrg>M$xE zm)KRi4-ypw4Axww+v*s^D6>p3l2vTTc)ENo`dLvVO%KCMgJ}n!l?mAw8uBf>vgo!i zOJTK#g<{cHxIO;oC1`q-%de|%UF(bvS`DL?gYj3f$*~1@va~HfF`Qt${Yr{%Nv>nA z=It+d#m*j>d9Xa~f0&T?A(PUpG66Q1%a^po`)s7e=2Cb*v%zF4dF0dkYDXN&sBKAO z5i}=FV|7MMF6!+>C9a*hL{*9mGosGd7^H!^1$p?({s4D1hzSVe!JfJ0NIh7EeLr$g z#L2Y2gA-8)<#JtFnK3`qdSO>v zE9t2Gp(fT z$R3Gx)#gxGp{mC&Kn^T`$I+4RHhxGqUb-iUu1fKk3_Kw^A5Dzfh3V7S8mxD)w9dN5h{|2glAhN#d-TF)<>l{%<*8%j8Z-)i`Q#{E!3czDMmer6DwV@72%*K- z-O`stfq@r0t`vK1)e~zToO$Y(hl8pvhpTE$xDmZ4o|{Qhs`%Fipe_9-q&0pHrL%av zK4j5#XIc{0@Js&{RVnj&-#8h%tVu{;{rh^Z(k z6BiD3Mo?eqGu{J(UFkZj`=_q@z6jlBZV9pv^Y*qMYf_Mx*VMgTM>82yQyD+|>7=`; zA(?Wvs`*EN1YQ@;S^K6g=7P-;I+#PHT3Ph5(;h<)iqm*)?Hg*igKu4nR8dT-<|3N9$sqYFRiWOeTNT(UQGvn9(;%H#aad zGb0O=C4;w@yPO|67_0&FZ>c*NUkcv8r09W-6h`GIYWe7R&^Wt{6`i+FWpV2WOaUiQ#{l}%w>1`t})kMH=zcLL&q$I`Sq+_AAPDu2zZD%-VkrL9exVk74;jq z7_@}hP0i%BwUjlHy~efEQx!zq2O_(&ov?{mZbZha+=Z3A5v3PydQf77cAV^BER!^% zHtjC6pFh~IZEA{^p7IHqjzlj%mO|@A8bvFVH#FFmWa8;#tdEI6LiGNVPIl!Rzw}W% z)I=Z|qfimPVOP-sna9Zon|x>NS}_omiYwL$AA))cKU<@LOhE~=kQSXzR2of-hqB?__SlB_rj_-j?nDjuutXh?$)T`hZ_wh zPS&{)iin7uwP;QzG6@*Y8cCmvU35-S6kV=zEf4juUCz}qU#tXvS3IUEv+84Wv-J%t z99r{uEG!(VDt-Bv!Uwh=dQQz@W}UHXrQ-WD3c}S+bSLU3FV( z>)d3^x4ksFTH`u7UkF4DraqXl=4Pjx9W61CgF+b~>CXzBczJjz{HRDk3=D+NXx0ey zV>uD@^^=WWG|I}#z#Dz_@Sp!q4omGm{e5%xGY!d;xPwQn2Os%cm+mEqo*k_8xn1cd zRbgmuKMC63cXd;;q;md6N{IYNEe7vX*>B{)PTbIdM3UH$eX=U}hjI z$WwpE1EACO4#^V`D30(^Yh*;k?Ff7bAex{5PtnX2jQnX~Z%>u^hHTFHiKydDOWL5$ z2!O~HCPBbCmGeSJJ32>)Xxl!BS zXlp6DKSE=-sCwZRO%qjcs+yq!;gIGV(9yXgzgle3ghm?BzXG?SHyA zitJeN;@ykdd!VJQjS;a|*{U}j!WpO!*hZQ<8{fKInVA2O8m~J;x2qCr3!x~ntnv#X z%dt)P0N3=G?%ur*_9X^VKA7QDjD~S{c~5Nj8!1<1?3u=n@yxmg>&59_7RHKlauph# z#fmBa=#kkt3je|v*C{7+;@dck)R*rcHQpxN!F%a$2e8ZHkc#bhm+rObF`=%th?V{O^Iy(K z^ZM71Ni_Fgl9CEeO(R>*5-FtANxe|S?tYRXdcZ`=a#-odqscBTqO!;%OcKu9d`vfc zz|+buWzboB(5=(ic42mVy0P%N0={x;6E%z#_B_SeQ>2zK8{urD$*9OQv#=|cPZ7Y0 zQCpUn+!_`KfgG5${w-H(gT-|EQD3sL`wp_2EU&+GGNAp|uo&8Je_qGCM0W6kb9=c4 zp>4)cBVBdSd2;7THGr`DXc#jJi(vC1lUNhkiYDZ)ZbG#-GT?n56s=eVtl%~m*qx07ROv3 zBlBDRj<0z)PWD2tU&;-GZu>3xVUHyzts5>EfG{Jdap_&8NC+L9aSek&Kk?T|Gir9>+UFNHu>r)U9HCz9jk$%T< ztH-(DgVEAh5THdg)bZKaH0Fxk(`^Q70kLSUS=(+lH`a7^tG1Ym#?=TPZ+jL&I2 zp0xWa?R3DoL*3LiG91~f-un)Efrl88z|H{Ky%PrX49CNj1gU>Ph#UdBscBN55Cl@Q zyvH!hXBFLYg1KpCbfmv3bbq*5b5ZMuLr<#QYDG^Z@1hi7x@DQVc?PK-ebFU$dg!kg zUKWs}v2&bgGa|K<$=JGuE;;sNIY7DSh>ZfcgY3%0pAN~yc{I;V+$z5urJFCv1vr(xcmr#)H3{lI?y8 zz_RFiN@j5R6<_Uo;~0s)2FW$571?JMmjn&oOItB zcUqz<4EEliuMOta1@1_-oUQX3~Y-2bo0k>zIbp%gc1b+9RCfd=aN!HyNPe%1=idpd{8GyTG zb<9E9vJIIu9(P@#LL#|mkETp0x0rPxNAT3{7(7B>4)Pt6=o;0VgTrLr&1Ct+{=PGf zDU7pW9gz|5Bk>J6>1MsyCBOYrHV&{6*{HkTB|j?V+t4~6NgggmMX;Q$3&xjSV?#Z8 zG1+cOT54EJi=sl7<`y!?d!%)S{4Kq|sG&yPvIB+8F(>`qtW)yxrBr{z=>MtgdJgV@ zE6;|Z<(d;=v+WT&78~Dwr2uBlKOoseu?trn-P^iw9Vr*QW`-YcPo$Ub)lKHh(Q?>{ zdAQRO%ILjte1s65SQh=02h?8!`qcp-f$_uD9zD`$)CU5dCIL40HoR+gnH6}C90!k` zo5@x$r!DRDcUBYWO3`nhX7LuW^;f&AnIG-l>*ZJ8qe=&^HE-|cGDL`c9)zr?_0`rPjCPY zKo{Ny1Ihf$($De*>nCc#$J^K1BYO*^*D>L!yHAcfjtwtaR=vq&RJTOaFT#NKLKwW+ zenV$nIqQ)>m!_Nj-s>iaY*xuPQ^*FC0*%tMpC&=UcTW3+&fPD>-tJ5vv{@cmhJFkUFIMiFC`BJ%u1H@ea{!b`uMN0FyfQ(gh!*jw>Gm`4H`?=a&UMc@_?b8q0~yNxMRrap zzAQ`FXLHYyv#eM(t|nd8tAq-URE*=Su+xthtIG6X{Gd2FAVgk=_>DR)NX)nz5$K0& z&bpF_lH;T==4gm1TxgyR5^{&w-A0^&moM!X_5bAM&nAXKk2!K24siDrFKxHhzW!Ye zFzTx6rnpvd_AoPbDO_9RX_X5(BUt2(gUv-E+O3}4_Aj*b;n4&Hse_DB)BB}UEL-nLhJ0f<+vGH@;otW!mSyFYBs0*{(yuucObBY z@2ZZw04KR!TV4ODE@fbw9Q>Kb1V3$hkv&--L^Ngn-cYzJY0Z#i75 zx3rh&cj2Xk%A!xK^rDI$1z-957?OrWd?}St>8=S3idba;Ml_jWtV@nSpW6D<Gv`bOj2B6IPm#8s96Xb-E5d`rrqyEEsx{jJsGO6R8|7L zIMod$P1NMt(emMNEp>xLod(|*>`Ygt&FwnIxX?jPL1@D5$iqwygQ$S^vn|qk#T)}N zspuqV4O>xBWIhovEqf>|>#IL3(h5AZ`81kYnoWZ;SGn0+vg~PmNXH-Z3%oXuwbjTY zS7&X}!r5T`dL&4@v@5vIY^g7a{)%LZm)+7(MCLtY-M#SFX@{?)ZF)wVNs(Uz3I)->WX4% z?GDi9AnSkid1)XT?5_8FO3RZ6W6VYtnF-ujd}vufTgDa}u5FGJ@qjn`B{%owjH-v@ zK~B!S+tLA({^n(dj=*>M9dFOYh)wq&xT;0;vma}NhiZoLrnYjZ15`G~U8A;8;huSFS$5qlcqt z$It6^HhL%km`|McnJXN6lmG_gCU_q(k^>V7yx}G>&=ygd1GE@O*3X$C( z752xlV+(^U`UADoreAo7olo=*BY?!sak@Dx-`k1TN672!%JaAEBnCv^|E>=If!)7L zs{gH^RPF-o*Mx-SU9-s~vOo)ZlI*kK_OTjCiHO{2H2hPbDge-CK?n-+I%;Ec7f_T? zuI(c$PH&sP0gYga|KJg5z%CZwkSD8_c5eur=)|+z(7X%-gL%ZMcGc$`LIr-qOWY;R zr$R(0HdKx*><2AQFeun0I~tuS$=4Uz7p+`bGIl_^z<2e|p-g$KSKKYD%t`LAP?ds! z*cXY=19gYHAhk&2AOw{FL6n9yyTdDxE$HwDp4@L;_C1c@UWzY}Z)8UM;SHd|t?3VI z)OR_X9i)ilmX$i>l8*4QwPX5Y3|Wb7KlzQXjat0HIu~M+5M?(!BR81a9)v6-i53w3 z+G3_f$}!Jn^JLl#c9dI9=c&M1@jx=+=66?pJ7+`VLURUhh&gJ|Tuym(o__&yYDRgRzWJk8xk&)v95z7W&$;=B#m2`a+{1*4wY9WX0`I|SD$CB$mubuQK3>^F>afKsrrl~;-8|6<9`JDf7mc(e#ee(-CBy&Lb81JF>xtYS-}?AgBz0Cn z1%9nBQ+b_rEXOR$BW63x#F!rBP`inrJ}H|4xY$(_m^eqE=I$hg-aK48xpEB6UaEDNFh?qdof+YBtMMGpMxhHDJ%^m;(pBi5$WJ6@>$?RB}SpJ0NcDCfq8 zf#&)sSHSxwv@Z$c|E4G|!r)~Et(b11;Az-84b~U3m%;65$wN8cj1W>47mmQvA!{3GbdcP(v7n-!y ztfg!94OfAww7EI<_GF%Yrf{nU)OYhO2%5i;Z`$W&2;1_3+oubCFRTu3K;|;(QNk?s zluB7}9wYz3_Di0{ThSB-wIg|d6pNF1;Vuhac#qHOhWdg2>Nbvp`90~p_X9E`r`oL* zZ_wM@!8Cw{Ua->fD-e73(m&$RKqyqV#_X@HilTH?3CIMbs$FB~q{mov+nATqP zzV2<<_WH|Gfe^iNuKZmVq0n)uK5VY6&|j1@e~g}`q4?Tj)sf7AGh~sf6I_Q|*;yKjemIra)IM-IEvRcSX~!3lrbASy}%N?X^% zwXNPFpf1X|5-HI;?&3Hp=Q#beTI8dEkiAK7F&XW}oHClp;b>1)+8R@F8nqskR4-^4 ztRzrZyKCSZ{_9#XENZ8C-$Y)!fBDszO~!i%zpwYE@efWlR*#bgBO?rjSqSxy#FRHA zpkL}Q>m0W})d-lWbPDQX)+~w<7_J;H($qDJ?jG1&#_3#d8Gpf8j`8TQua3y?+wHma zmn%4U$e4`%zKo3IxOa&Q9#Zo(M`J8?YdiKUY=mc*WT_lrxzN%M0z(ycvWeql1wr58 zhpL~B@)}dH!2`;5k149eR&LHLdwz9H#paBsuky(k84&w6OmcvIFFzM62d304cEqsc z7ZeN}8@2csIMsHS7}%t6sb`8F7MuwCoIMgTsfnXs?z);Mci*__N;?+xR|gqMOnuAO z?D3`6a_Z=>#fdooHLG*;o2$6t`^C~nPkdN#ZkrpJDoIyk1Hv=&iq1Uje6?JMuUPes z()#4&oBEBOH=t1H6QBLBEyelyt=m(Ln0pb{d1gT?CJH1ciRLt7!@X z2TZpWUUP~!1@WGKy`-gpE97Y$q(QQ5qqAgZG%^5KBvp6I!qVZtZ88Tp!uj06D`pf= zKKmQb&W>%~$@&dcmH*Qgc47Bs+dOZLM85m8_`vYDS6oie7pgfc5BWiX{9~*TA5D49 z%=M-{O-f4}t_7^?XJ-h{uX1qex$lwm`6VSIwRE!=zTh}Fpc1}0UTNihvdhtOb!G=U z2WrSLam}o><58vzQ?(W7VoB<>ac#Zp8`_nUj literal 8302 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 t@_ Date: Wed, 16 Dec 2020 16:35:07 +0100 Subject: [PATCH 247/260] New translations msc_Backup.png (French) --- docs/assets/fr/MSC/msc_Backup.png | Bin 30679 -> 23198 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/MSC/msc_Backup.png b/docs/assets/fr/MSC/msc_Backup.png index ebb0452c9193fcc3f83a55e36b8dde574e91a9a7..04ac3a99ed1879f93ca47ea6e499ccf2e01e601d 100644 GIT binary patch literal 23198 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 literal 30679 zcmZ_0by$>N*flx^5+VX3h!WBQ0@57{14v2?9nuZb-6|!`&>H1mReO^xUuu4lK_+pc) zlKzjWrn&jZG}_F)(#gHcLZV?p%?AW3V&>2!34@!!ArXwP$N0FI^SF->gsZ1g=2GUi zXv@2-4_uo)KJl9L^Rk!!K3>`cFT4{v?nR$II&DvnmFPAP8MJ#@AG5*0XalJYR>`mT z(3McrQ#|#SYVJCE2Hx^9bm+r~z#Gyy(ZahBh!475ARK($gOuWo-f zyf?Dq=3SOU$H&KY8r?{F?ZhrGhvS+YuFuxvVq%iL&Ns5@!7XmzO8S!FFI32cJZcIH zw`$i@>$l2!#QaEjKD@WLKfJ!W2zY^xL*fE%cJVg1obk!O{1xIcRi0vUD*jwkTU}@Gt>s% zh;wLByHo)!-wO4j?6s6w^1QM|s8IDb+RV@ODyNerzwLqfD3f6N?)ud!l{wxM{3w#C z0t<3sug#_0N4a}8TuG%rO?DWrn(-izLC1c<)7kaZt9o{IqzpYn8?*K!)q@hzUHdKD zvjqm>i;nOUQkP3!=PSLVLh=)#?B*#V)#WJSYg-GA-6Z{P%F0>%>HfPjo7~|nPl~Ej z*2j6=Ue~i5>2Eya4YOS?gmH#Z*PN8DmK*o6fsO8i(QlaWCOam|i}ZY*+`H!Lnm^3r zAbs+B>qk@jV__kWJ*v{VdS{#ca$Vu-v!3=uSdxkMb|Tf-o5G9<(=m=o{Bp7)+E%f? z(baL|8`C*4u6RLB2gU8odj83JX05WmQH=d*`C2#d<(J$u?je^WQ(HBO<=pH3xAlWn zhuDr;e>NKKPDEPaNd#^@(dU*%B4hl}LfX$5x6a#XLaOf(YFSAkzdaa%rPVe@BDnG0 zXD6An$3Ku!W+(I*Q8zF{AQ80bh6z&HmYeh4%VGR--`e-6=6QKlcD+hUbZFPu`G3Yq;qcOj%SUT^*|yJdHdO!%nnIn=ETb7h`9isdcqz zk%E2LE)LSR^HNqbE7Bk<{xYFMVsvo?W80YOqNysCw&MpQZ`Ne4f%xgF{54BaXV=&Co0R7c7V>O@sPsn2D*yz}QN^yH$<)T4T<=&h1=@xtG z=PjM2yrxO2s%&!_uyPe9AO2JBwDWKV36ijl3n&IsI%3n(xJ&ixnkq6NR-()4hd zFqSkNbOVEPvmx(Y2cEp!aj>b!j8(PObcNYMlc!MHfHE}N-n{4d<=62V!=TCjXYBoU z>h`iKemnZAE-=T^1TyJCuWkH#4Y|0k#}||B3?vdx7gGaaf+uPUuA>SPS1WYFc=U(A1ISZ(?TxLii>#+E&=+>=B&Mm1d;dT8zH z)W=gVe#~X7?$#^yN4fG4A3xRUhoZN8#>(&C2X{|PwChg_bgz)Q zH|Guxoxx4~aS@j>W98w1@Qp7znW?pPD!0u%Fx=IqLm3j} zo=5%syA9h_Go3M@xv4vzfMIVuYxB+3?s{*+A+Y{Bc3m`Ji|9&8N%abWCP$WC%zk&k z8_Zc?s?yeE7P)7@1Ndrc-Z`#JPsf)cvqM-W=Rj^LxIVhik5R z<4(`hS8F|We;TK!cQ=^8H?52F-8HnyoLZNci$Mi)jb_oskw;PG+0MD2>>ABVBsPV& zz4{d`PdoWuGn;g9g_sfyt>n{*ombX|J_MeCSnY23rhBD#lfKU%CF-6Jl1Y1u&(fj$ z4^wNp1Z!no_V^9Nnq^N5L~@MF3_12~q*pxlL5 zsmLrM1Zlyc^)gsphhP%ImPdmd{Wx(>btCM4&Q?mFc$%D3QW$0P8+P0&kFQ>zOgY6R zOI55tah%&LrwvTgC8K(1SVLy?My8mg7wRUC_f>3RvfPiSLI%=voMr5i z_WCg07{$cpdd@ql_6UBTGKdjey&q}JSodLMFl>0#XvpKK@2j40osfJzY9DH2gC{X8 zfwx3P(^?dF@dqq)N@h9vlEU(&(vCaP^oh+zsmb z}4dVtc!|l2deC95=9w(egr5 zF(dT27=Nz3lsd7KtodNVcE6@MA&^eKYcyd=_d)@?mCogG;ppSl5Aoos=j<#<>BhqqRg*UooIX~q*)L$J4zPC^*I}n`s z6f9`rzBke3^Tv(s#TNhOt8E)_24{2R)1;YeS1uNAng-S%bscR)o1=%8_AkeK`Y({+^2t7oMrI(`@ZJN&3><0uVs%;jC*^Lo1FGO)j`HmKD zt`>C9x>dc-N77P(C16x7=HMq7Qggr~g*vka{&%}-p;o!EtcArUlt`Q4!mt`6L^J>= z<(1yg(hf3y+ojfD0S|WB8A2&-y>E z?ZhSs{mv?@8I?k{QkVTDFuQf|Y$lt%Z@8P!`X-GN!{BZ&Py?;0Xzh-TCET}145rsT zIRHImegD2k)cmLI=coJLN15c>p2uVI0{b7Qhzusb>n-JwVS(F-nVCutu1*(-gfqz? zH;eucPj=?&!TyAX5N

    Uiw8fd?aQVNqa>OLN32P=^8LCKDU0wt;Lsoo8fbzHaAk z+8>f2-*{R&1hS0eWD;#)6Gcv>qzfHVOi5VvTaDthX&K~sR|&4*3o}(#{Kun8$Mb5% zN~x&1%9sVg{m~y13ZHIGWroN-c<|s{okVYQyy)!g%#B~g-oE@#UH~xQBA=zD3rPgs zD*kMoTYuf2sZMiUOK`gYOZbf4_{-#Tfg?1)LPYi*J zrxO2yI|H1|5IVWX;OOX4i0&ojiS$#b1S#WkqZgPMgqVh@)UGpv!qwFkY|i}=d10%3 zOI}{ybJjf&Iiz`>Oz}JK5WKcu>5O!<2}Hc83wbTa^ZTw6Dl*0fi$X7x!Uv=7G)Z-B z=Y2F)pjuLD&{3>aTb7lz3eI>fA|vGdXv6-Xi|%xLW}@QV|Jr9&4sB9+ge*0Segi@m zG9M+^seXg}&1!ePakp->c*eTEsIJZpj1A>n`-GtX&XqQ{zB%w?5mRnN1O!@+W3cR% zJXVADEwC-Os~6_WjHE%_;01e^Cgdq6e0Ah~bLySOW2>*AFw_}Im9p^cdM(Lj-uvbX z*pMfj=A#d|XCsJqx*eZSPc+fq&Ik;G!{Oi=g}C{3 zyxqcoAjY0T50$vGmPT#EPaOR!Se_Rrg6qllIAj8U&NoYTXKN41Z~kGRghrj)f1u9)O^TUGy7zIV$xeliIb+8ZS^~!P9I$ zOxZ=4{L*##{Rz&fs-mnsTO9a6fdGD9YXi*8PSs(IEIj&NfNZ`c+i@P&Isa(m$j0Ug zx-2X4HUfYA_dt%Q!~pf&+8YQ&Jw5vNY!_YHWuJ}L;kc$v3ZEkqF_amAO>7rK$t9+s z9IT!3I^0D(C%2&(sv*ohF>1*Fc)1fK4@VzT_*h=NS^0?hsA)gcCJ^_G3ThenH`Svu zOnNU1pX$bK^R(Y0I6eY};XGw@(cyl4x#qhT7CIXv3N zWpP-O&Xu^6B}Y3e4GZQ=lY+yV5X3!$kWWUH+1;fAMW^C@wsj78N4Agcq5TZJVunMu z1aSo)#>L1Mt`MbEAE9L2Rawh2M{?fpZpXcDXtX?>w%#N@#&2mnmtv_fD<-M8WYcfY(keL@pID*ZxFsdM0uAdXqMPTMVD6W?!c-o+ zJEjx)rT3erGV9A0n3#un)CDHpla}L}$YvbpHX5g5jyy%Ok!_JWIq&)3O88o+(eN_^ zYbKA&SRSvX&-AifOvbTS3Nvicgp+eTB+V%XM!9x4TUnx-6Zyyq8ReK=P8pJJI<;RQ zDez|0Ou7BcvGu#X(W_*JXyGxJ=A%}&OCl@?f-DfOE>aTDmt9ps%Eus+lw2U{|96ruiQ;+vX>)$-9NkWwEU9SSRalmogcT!iPVG~AQQl;`u%AIL`Tclq}!)jw^ZM-)yQ_Q^M6UZ-uk}XOa zo!WvQXA``>%v4vx_s)~qQn^VUcfFz|V*LPZBCZUzH?0P;B^IoY|<(P z%%S(uk7qC<8Rqk|^a4-_yjz+(*${c&@%!W!i{c0i|&e zv_z~}8d<4}26?zC&#zXEda0);7meBny>2ei5jND&UUZ30bz8_dtA1xS0oOG8#Hs(S z?jR%o>EjDKQJde4fh4@hg+Z5qKmk^Ynu{QDIcEr5YI~4kImdaiV z@bCnX#`yG)jmi6k$f!q_&{2$OYVgU)d5^EEe#gK8=|O@(5IpQmw4+eJ?5L;yxZ0-` zK22e_&dkUn_39KvERb+lc1?AXT;_<~u4e+1s^t4iKe&Qwa&@y*4W`QBY_F%ow?5K% zVl-y!sHr?}HYEnPq)@fEGuD?Ey4uj7Ks7|CJ0mKqdZiCOLIgzqVTk`hh~Zn`)lstkwW?CA{_y*azLEL82Tu*Fz~#EQJLov^MWcAAUs=4BHqg%T~ zkbl2jbavHY$Yo=|*y8@qlb_Gr_g$97`Px}!n*D@_Q| zTmy93M$%zscy~a`b3k5S~;u8jF40 z&h@ZTb^X2W*V^34Lpe-5aBnpk+>vmNM57Vm|NtG04r z1PQv<7cD!dZ()ojW#$hk1lf-wf?J!VAR^8Zg}v0!v&`Pug4x>pSSlqJo8;SzioEN2 zxj_S8n?D?LH0okiy>U+_;6 zsi|7S`xM{`>r{4ANVCIV=#mPk^DU5jHrTrOJ8S8^ENsKCw$^q)_K_+gF)hznR(#^ zyOUo@x6qrRiZ1ic-1av|6v5qbd6`6Ufq}+uUEAmFh{NxvSjLGxCW;|E0U35FR)+bC zj(F2G%#W)LSg21{m@JM-5*#Qq;gt0=(JcqmZ_+9~efy<4&T_S~HK`*Oy)m{JA9|Yp z*2MMaJT^C(wO1PDsKQR8=<+1+>*?ya(ysBuQE2Wkyf&vfR3(56%HlDyi)U1h;_in# znWnzGq$=SiIJ5D1o!W_Zpb#EwG)}T_)7VI+VV)iTG55#n@T6;?Q)$lq)mGIq?xQy0 zTx=M!?px=5Ti!Dbyl_fU^@9~U)B7p%AI#K?g5*A#_t4by4!j~hAZ!ip&d%-*KL3C( z4@)Bd6w%sM|6Mp>a=}2+yOQtn6de+g;zH^s9yuZg6OwponqNpT)33SZK+QVE&Rz0# zT&GwW^QWyzHU@<9erFf!P&b?O(Ei6~jHI4>`Vyi=sSVMt(qp;oV+x{%dGXK>^!=}o zgNv|U+A>ogtb}AUY3f?l_Rat|g8^2IT%{;ME2N=%Oo-f_R1G(Po}nbfi)Y66^V>%^ z=z2vubq+?rKYCzHl@U>F_Vf*xTqS>!=zkKLPyT!xWpCeA8+Y?rB=%6&;M%@(H*@>|_0l%=<6L{AC9hMNR8{xR zXn!e6ku#>jd}_|43U6}-iuS?f|zXF`p|{M;=P2r7Fd??NNq7P6|1aY?Z1A@zP5#nHLbk29!_( zb0GXeKc2Lcvi2Z-k#L|%`+EV;!aRtx_`X>fGotfUR8=Kv0Ap{+MA(9I1il>YQirk6 z(aTXt-<+JA2_rh+%F0SSs*M9baRo+`_s#VjPKGIp{dvA@bkqnJ=mTvdnChOZR8>?o z{C*y6j1ImlQ<>;hA+voiHEis?T!w${x5`Yb>(1P)t(lTKjWN-x$GvsEV$-`HQs(X3 zUl5*O9uhQN6PB4v%IeKNnzUgseH${kG5my4Q$s_?c~Pf}ngBl075C*nnP;EVMc^O( z4uZ4k!%m{l9phpc=gZz*PTUz~TA?uW;QXH^upV7)$JbLNR~tbC3La08r+Gq=+1>5< zFsVseCz61SjPu~mZV;_#lw(3f;y~78WI?SIVqIu9dbyKEk9N!?>Wi<0KhbDi2@}%2 zY8KhQw6i$o!@Kh1R9LV|;CC)QYyPBg26dyV3!UM?!@{Bjfe$k&wh{!}2Lc+;S zfRiRW7cS2k^n}AP9VTDNmj5wMB9pI9d6MK&w6W&p5lp?(=u=%$xi4Y9Ex(jrI)cbE zW|GzIHr^ksr?L41bZZCB9HWFQL9Y^WL+dZk?qhYwPLtax89_bIE=@lyh{F>N|^Josqh+lY9qQqs~H@#sJQ_Cna{`L+-NB z3m&{+X{iEp2g4Zqq!HSHb-uQeAJ-|P@QDkz_p#^@2O51Nam+c*JiBRNi1Twz-x;dN z*sn9cD6*PNNBX(d4Xb8JF@(l2e<*I`;v5gST~N}!Gp?tQ6Sw$+GSBG(zQ5#yZFjJ= z&Os3W*t+LhFp%2R`?(z->(b6hE?4og7(=RVvCa3Gmie=!*k-?Bd{WgEZ&47g5VUq< zXYVX%8u#JhQ5nBhqQy8iL12d0*`4BMz!P1e6#FEG2U>D0495x`qJk;uT6@w!YydVZ zfGt(+iW^U+QFuI-d|Q*k3pzT9OPNX`(%Zg13%lH(3Mp<&guBpDqwrC{+gzwkO-`Ct zH2^f#q)OloD(c*e2!zkG`1PEoy7yr}KtWdUcIci=Y|39yftZ2m?<>Mgj&FndZ!F1& zEUKRWe^Lc5KL0D=+|^&5mu;@QQcXHZR2QwNzXOfXQ8G+8;+$r@X9b<8;6p;Nmg%k<&k)e zF<)I`$k$ER$Bah#BTs>}@ys3S`kY5rg6Y)1PeFX6-UY>JjgyoZ1gpzV^b>;lZ zD>>^DT=sf7>!MPgN5-a?T8In7dr(AyW`Z+Q22)e1Jm9&<}y%hPL~(OTY-GRvzwhYP04mBk})$#rdAK(!KvvQn^zX3W!9*5lb^yc*06S&{*1(8{ui^7AR4>x)B_M> z^HKUHV<`3H|K{AEF2k}&(4eU7P0WLl49bG2_vj#3lJHYOPQsYO7%So-Oj%RGBG+0g zjFMsV5SsFYWo)R9H34~KXke}Ly6COD?52uDp;Uq6j>{0c^G=yr!79rfIFPz!Z$ER= z*zSCM!AxJ2KNP9ZABkMHSW-2(fk#>(W zB}iaAwVX3h%wjYAc^sF=E5qqJHG3x&9Shjm+im~ZS>+~~ISBAczUu67^*7lOElmtC z#k_0>-$Smh?Dq3_?~h?qbNC?q%P5^65hpn?%jo9MMZ-(qQ20i3=)%_Y8S8Crk3HCKa$L^3QA3QsJxs(G;r^s zewGZ}98D`k3q73rG*7*+Nae^f3nNlAz-nsPGDoUWt?8&sFHUYSI&MPOSg=-k+;P*y zi89xtv^S9|L#o#=TLu?7Fc?kgxSIZIIb&4D9c#z_eeqVNn8kwWT&N5@%*gzLH}#k% zR_Bl_f%WyUQ$H6UEd_i@#IZpuH?H5`{8q!d*CoW~%ZSB9v9@t}WBWO!YL=|}C96Em z8||#>w$Dq4yyi0HjqZs|#}#4t=4KB`-KKM%mH5`<=|S(dpNk7x!7Ruo-YG?~4R4v| zGIf(1nXix~@CNtV)liUM2Ns%%_9`Ufe;F^|DT+yW=Xn(Q#$tZRK8Sf`xb_Mn_dQ$c zn%4g{zeXY!cdb1ULCje z;uz0!q|Fql0Ue3n2efba9u?Sp@LI?>0i(PEDp5p9w^p|%%vTU^L z6+dyQtXmhT_#4@|sgriYDVL@eD&j3i%j@H%MXln{RZX9^|bV?WYd3tx|v@=?>Fg)=({j^EP^CELM z)pdGj0buO+v?$SWA3&i)Eu078w{8wc0!TvJ-j%4_994TqE@P_}iK3VHymbeXrvYK% zM`XSrGDYBc9d_teug`a@7Lc2d>we?u556iRxj2sE#&JI|Yy819omBEWvZSD4|K%~~ zmvm>1U}j)`M{M4CJ8s7AB{8lh8;KdPhS3Bhc&i`Yt7Kzt4%Q0qxl0RBnF(`%qJ(X6 zJ85mjt#%SiY@{>AUe80PuFFCmp$R828qI*MNSeo%c==P}m{d?Y&C+`QusD}j5AmJp z;YQLc6pjMF=YHi!5lPRD4P#H>uA}aESvmD>*19pj>gl(+>r7$7%*iQCZz8__aBk4Q zsUPT)o-0)@N2WabjAP+dt0S1oM2BmD{VZRlP_&+8d-*Bl^wv}zonF2JxrCQ`O(GI_ zY!M>VIN3VY<(c94=QN8D^j)RP{fhU;!n8$cd+TlEtyxSSLqm)eg57K)wyLvuX<>ZN z_`{xgT}6CHo#>OjT@Uax2s>Wgi*WVR>jRVQQG<$$o@eClTdd`Ppc!n`0{oXTqoc{} zE3S1wq|SZU^Up)DPLndC|G)63Igr-yvP;?M;Q#sbuLW2HT3ZR}8X zm#76B8zf%x_86|dB%meMUi4QkPX4M*F%hc|*zdxX*iR6IB}J%FE>eFq2&Ee z+%hgVvqtCB@)61MxrhC%cwl~zP-*A=aI1|21%&XnZ!%5w9p2542zj=zqT^pPI;QVunpha_;8Lko4iBW2YFHzI{~a+-cj{(*O-(nFPYNKSJ_ z=Aj&deKR`tH-22jM5(Ju*@Ts6WU!OG|@*|JaY<6 z<9`~JOf>V`?PsEpmE-60yEKBOPj$v|RI(FIqKVVDxqjcbF%7iGEG38Td(=`l*S*n_ zQ8@EBGpi@--2OS|T`p&KUIRp@0nj~=7Wu_IdT(A^mfOI5>`G&QC+&$rzqt|(LZcQJ z*-*l~@vF;~?d{yVnwOU^932|5WZfD8(IB2o{l!jDkI8w*4R3aom@n1_TGXJc$g&yi z-{D}P#70GJ`N;LRugDfn>%|M@?t-GndBcTTpnKQf1x#~uSKON`TdS+6Ig{|RTc?(< z5D9Z;kx~8ATR_SrqTRGb%s4G3AU?e)r^BX+X&Cu`iGzes5>7t7CM@L-PhgMX6UVJ_ z6L%nGknk-?g1iu}VFZvuBrxP0CE4G3yqdid2{Z(N1#c=Y-T|CCH!SZN5W4E={r>hg z+U<15D!<{^Ut2(?c&d`Eho@!Oos;HON0p$6JJb;(`a2v19xW~>3Q4(GU z(P@G2{*d47lcQSZNzDP04%ob26`&1%h;F#yYYiwlQ7d89xufR@ zpsY5p3qBB~LdZJ5(zO73-2er#M_9Qf2-i=yhdx8;sG5N0EE`}lK7~1 z&EDJ7mDGUB^|2g1K2<@=xNa6zhY_={fnJ%rKwrUZkgcN@85UIK}r6kAr(SMLv#-@0j)Qk<4*Qd~H| zQp!5EQ}LH}DLz-K1Gu4u0t(VczwpoI)2R1C<&0oD*?cT2SbXZt+I2B92~kTv>clKX`MH+(SpYQAB6|@V zS%d=29dxXM=CZ>HDlL=^C35~I5SA($npLA8J8OQ4=M@bQX}1M-IfJ3iy~}BrdQIKq zdbk!zAFUK4EOkXZIsyl=dhp<=S_$3rvFqv2q}e)>-x)O&&dO?Qmj(b5S6L?9t~?ES=8BB(B`ZFGEZk;tPovp^^ zr;faPZ_F4XEd`T4d;i75SZgE5%(Yd^m&>d3%T-;B8D?8G|+ZfehDGd)m%Ls z$+)ddd~{KWjEx0M$~hK){}|wBM%bgJY`mMl%QA|tz%Odz3*o%W`QJ#i$F^r;lW!c^N2M@>uYQ7g%Rp|v- z!#J$$#Bjfe7JV6Trj}*Dzfn+ze6}pd)2(CdVarunFp&^@@-Bl-0c3xWZwh6l!wjh< z#x#HhNf&uRM^K3~clmcc4OD$VQ79KpckJJ--PCB zC&POy(Z?WonAH}g;F5{(C{(U38!sEt+L<+4RY~yBr#tGE8@5|7E@2+@gsRpyF{_TC zPpF+(X30dHQ1R=v-Kvi(Y4T8C@r;{$jqs&Tr;;bn>xiG;VkVD48V~T$IRAco;P47y z;C{&o8?g#_setI)j z)A}ti_bIf_JGVR7-y$4jGf_&}Z^3E_zgIL0J)Y$@jXb{$mS0an|2_R-6-S9kqx10{ z;_OHg^=;*6rMuS-&tO6Gc-||6Ra^LEG!?=pxK5#b6zqYUe@fH3zIBUNss@oxz3agF zT!$$CLj0~d0!Fwh@|&VJAxStHrr6-mmvjd*=n3FK1tp_T%L&xST<^{*JO_2vRKDt* z(k~DqM--r+zXDj7{p^J5tkURlEMnOs&cs%PJCC^ttI>pm`eZI`N$n(eOhqhUQSpMh z_cwl6Vb{jQ;QeF&HO)l*hj>jtjK-0Jhnm*Q^&Yfg%=_{>Wx~mIc8r(jO6xxTO|dfx z^->=1fCmr;=x*dg223{kPegj#K2xJ=HXFO#Y&|Onj_CmQm}nPIp*)m~KGaTqEx566 z?>;NEHkWpwwq__6J{a;g3*b&L+To``;#FPfr;s=a6|`5y#9^>wl}18*$b8fi6yB8FuFN5A99HIi>rJmHt?e3_ zXAyEuM&0Jhhm?+tRks)Oh_Yzx3bWMlm{ulslYrx{H5EwDfE$Ia(#xTEub5&3iqOl08bCTEMMt8Zy~& z^TovJ1|f(~s;^oCH2BUztW;$$gU#~DBmJ;ApLT&Xd=-I(1|tVK(btOhUI%I??r*6& zIHiZ}vUJ*C#zl^$#GDKK+NB)ZD9q1)POzf?P=O?ui*#LWM5cqQf3`^4FFGz5>*71#_K~I{>NvD+d@< z;Qg!ac6lD~53^knYj~fFtn_lrtY;9sQfh3u{}~*8fg`IMKZKg=31+~t)9K-Wv-=~I zhaT2T^}ZFd2pS+>?V$ABA|2bVCglGro*aj}ME~j+5V`WgSIK|n1vouj6#r?;yJhf? z9&%m2MhO5T(Cp%idY=Pl?xErsq8PXE!agf7A(|oSXh$vR6w8VW^sskt0W~r*s{KDz7H|5l1wQtBOCwN)&sx#}K^`j=C z^V<=T@Qr6sk=v>=(3cNASl=-ZrmQnDj31#Cmrlv)9_b@6v+WLHF4Iw*`YvX<>qL>{%D z!OwI)(RQ#|MWYJ%c+C#OP?XXL5FDg(Ml$4pvsC$jf7JLp?T`cQDOejH z2Owp~R!p9FzFRBk=6vQm^yo0jclRtZM_t z_|<>y#)SAEs-Fww>L{OLdv$(9i+WODGj+U|Q;y~}&o|*dt&4Sbn?lb)0?Uj{g!SK%xR`x`Q$8gVx~!$26uSB2Uv%mve>vJFf6_Gd zeW}B3=B>k*;BTlQ8-j*5+twVKkvL6<=LPT(jfdny2U9u6&FX*7I>-}ABbOWjWFc}- z%AnBW;yA^avHkk|W(o}QnfFb|L)``Ae0^#JKsS73qT46ZS(+_cs+d^f-yqwQ9p?+l zmE--01YAka4Z;PD{|R{tN}8rEv#fvr`~-RyPPX4hXWC78gS>}*{gbrk+7wG?k6H!i zDMzOzcu)>3Kz{m4Gfu$RNbl?sd_@f)|w{CP87V$sR@8P&7CSfanD(2P>w$W1pO zHUEBav)fW$P68?#E0eg_*3E)L>b2c>a~f4(&0z#C8ir#B!!J%6w2u#=7UX9|^k9!X zcmKw!5+=CrQ4X&tViBmnnKNz_ta`P&1KJ}P1Taz43+t|tK+(t%S^u~4v8& z6mMG*!xe%hqx@}@%>KEGQ);$jfdw@GC2Klc?@KyqV>7i0nMA|!9#~QCVV<)3YPreF zWla@?q~b_yo>W1VrP;gweOO$##*~Vj%e|{~v|~gn9_h^2&qH)yJ8YD8 zW{>Um_7Wz=Uf~;bW!ZMIk`wQG;A{DjwXxP+xY9m(y~Te2IO@sUz5_3 zR7~+#ePSZ^y;mE=uLU=s$=e2{Fp?hjSfdX+p8pE_gZLjcs83;pR^cqi%~HcHWV7_m z_nA>6pTz<8O^@lXOHwnuEN}k-Fhn^#bU5{4R3laC%W)AdcX@4c*X}r06dv`o8V9w9 zy?w(C62Z?(Mh7_z6JybQQXjuuS>1+2G*IiW?ksp*tf{V9{aM@)-(UE=DIRbBtp(zo2YB;Sv>sbqo`+9MHCjAD&=UBze;G zBZj%s%5%2I4b|BE9=C)kCj?DrK=Ay zL~_OR!=oI21-m7fCAYq!bjo}5;bjx;7Ji%%jVEiDfK${ZO)LMvN2F za6+ea$zPK${%I11eYoyu%~6ltat;+YqE@Edv!z}7Mt=D;O-Ji89D3)PfA{9X(X4pV zC0h-f(r=l&2y2R`LYnkvqKWumvcGP*eWWF=xu~|G27DyfI5{`cU_WJ1lKiSd@gIIf z#xS*eSGd;U*GQ;$nKjw_0iw@4RSj#Hn{e)>**TYkR*Qkjsw>%ojZiD-Bf4O*Cmw5f zo0zPU^UYWJ#ZD8){?IqlW<~PStTKBm7lC=vlRj0M}CGPPl0dbXS3kirk8P4ch zLTs!qZ`RbS1smSBHR+~ZySo;wru|fZH6GYQr{V2kJ)+C4F`@H5`(enIJBIq`Pl|BM^Dkr41t6%JZ?66@!TxF!TVw?Ubw6F2d1jd zekW%ct?AUG;Mxh#3*k|=it^!eyM1qg{Z7V{bH^RW$IhA|H?j{nZ^#um({-5r`D-0* ziT}z;8S*5Y_u zjPK$xmejXzd!l}9+ivm4t#UXAo+KYWqxxOo4N<~*@Wp@C?_~d_>i{` z98{2L}*suGEMwvYe$ zaRMLzQX}D9pUcb(1hLauhq|u_@EG00dc)u$)nN+))(S7woL(K$WP-atvL8k8%;d$g zSJ(Fxhunrdf4W=rk;7Br{pJ!)X!hNKP?jfF!0Y;`2EvKWj+j6-v`Oo|9?;|3lky2< zJ{TCNtR5c?>3$b|U-t9^d3{LVy#4Pet8DQ=>-n9X^b-XtvBzU)^=WytobFY*kJ=EP zddw0IUx-VY0+;?3YHM%KZaM{SXZKsLm@YH{I_2vHrHXMb{b^AUW-O?XJ_*+xVXy*K z!%w?KldeLF;2Cy(g{w;T#z3OkIHgNL)i;e*FF#sl<5B@1&tLuB4I8O07`J%ItCwhZ z8qfaaDaDXaWI!yJ4HIsh{Xz`29Mu7PkV&`aQf6c|tV*2OCgk}OJ`V)$?}y_a@p{|* zV9n~-^^MvUTZV~^pH^E{8fzCBNX;{a7+V!D6jwndHS#EjV+x?}6Lm6%qh{ypWWS{h zp)JSNXECu(|M_v7Gm%7QEKjsELBI@Y=jszv-;u00ih+6W3txqyu3UyraoXG9rxq$! zsg*Czg{0Qe3xs+jPEx=IngcRje_3_hNxsU=f?U^X0Y*9klfcX9*>~l=0!behVn*vb z0{_j%3His&g{8iq5aLrorD9wL>X(Dx^Nzh_T@NKTVe*#ghyfMraWmx(Z*h4|+~0e& zeoT7Or!xij2gF0*WWXmy8Kj%86LNf z|1+xcuJ^q2mYPaC(bW&vBoEq~R;*_<`86FoiMPp#YCHK?g&bM3U;Rq7Rw*5$cv)Uk zkUg!qOXdlBpnmcSIVgwe-sVAT$E%g5*>4c*X&n@VTVtH;c|@K4WX2inE(eo_YBnmK zc~m*<;;p|gK80fc|A^MVWAYW09s=O{{Gf-WM57Wp@4kE0CGS-RWZ(NrmLX3SSWXgA z(N^ah00j%5twaOd?HVB=?6%i}4sf?N@2gGS-R2um9PZ8R6>OzIg>2Iq60hL!1osTy z^1t_hO*19ylz08HEOS$9%S=!l=@!@&O@t zP#%Y>7su@w^_5?>9TVJRC>^^~~83w-TM2bY3}q`I{I01_ge`jJ%W) zU%E;4u;@WGRL(HJCK#-|(4R$rRGk>89a!v!f{BUd>*M<@4TGaq&e4~LU8F2_k@kLBBU^FZvW7TSH zm&HAWjZ9O^K%FDIaWBt)>myI01vaQM^1**=&P~{Oq^3pWb-_jr}E0-N;jvdV>frx`6rwQ1hDpB*1nS@pAd%2I0i z&H<*oULVg5BFsdR2pqnd^DQRV>`~SfuLBU?NA<^;NyW~0bbtQ*8Pw2Of+{_Q0R#rv zCW)XX&i|oMjs3cu0)cRwlbM;>mOETbm(}ly#24fLQ`=XDRkf{cv$t*&MFb35kS+!3 zQbLrJT7Z<&jdX*70*Zu43n;N@Z~=>st#nHZ2q>@sfyJUbzGvco&wKVc=e^$V`|KtgA?F5AsG)8)w-%bs7H&Q2BG zmSN~@7{n&q$`MN|7?-&=&SW;IlS|!-n_1j_U?Hx9qFOhYzVGB-GDxLQ+CzU87ZECM zUN7Xi?V zSF$A*e@dI1eqZ+oNt%3kD@utZA9y&0HTzcB?_$=4HAcCSZmr2WAE-+ZMUTn1Ged(Z zdlUT`E4a@A9K<4!zE(NYqe>)&W5BgNxi^7k8c-A~M4$fxozB21=q=$uIUA#dI1 zs1xDVT4>$STxD&pg6((5>X8uL6inkYW!3R)g&Er4A-qb0@_cXoxs|4p(D3GLRdSz5QDZg{=^>Fe1LdBPn z7$>JaS8OhSf6h?OXY)XtnnB6?O0>%Q+`6IMmukdBUZ28?Z^bxWkSm&-JlP`o96S;R zJr#KG@?}#UJL#F8SSmme#Yhi7j*OtCo`Sv z^^-fy7vxh8GIge91~myWB5lSE(1Z7OFeHXMmVpI8hMhCE`3ziTc>pH00kM< z5M$9lGN>8VIhIwpzT17f z)8BSKujA1RetoW|g4|_~vhLSLN91##UWBI>PPV-hCnQ!}jDK?xm3w~;5n}+LCPKPa z)Jz5XrlyuwXUuhDTuY=x63?i*D5B$o*hV00yKS%jM7R9aKao0i!p?oF+&b^tAC~y} z(RYVlr)ykkzv>GeNLt|SLcuK2q2cm)`d8l_ zd`Wxt9b`Fm^5GEdk2w#sd*dWJ>fD_@3*}xPS*7#mDaDNEI@Hl>J#YjhR5XWiV-?-g`Dz5=TkKa&#Lf2K0>$p)&JR^qV0L^HLrB?5XB zMRoEB6PiR~^MSH*2V(la?l8(4^kR6|e_PZt^jWJp*r@?WXJ7sk?LI~{=y3TG$LUV) zYsl!%wt^bKww&vY@Dn^Bxx^?J5*UoUPTWv&U{rF|4AVB62Wf)->GbnuBJ{Yqo=)JR4Shj>pmJxSLbupP2c(0_UFN_iyUk-7_X!7kHK6|C-6Ls>Xon~Z z$uEPmmDsJjf<~PBL(nhq?q%$Pq}Z%W zKryab{Ct{4`CSa!+&TFXg0-0$E$^&~RAyjPj^)MG?9bKM!PLMC+<2?5d>K0NK!dJR z!Ejm0RDIX3ySz>?U`Iq!0@6BVv zOxvr;3cm01wcaO{SN$-Pdk`UGQIU$S<7DTFVqq8>rr^jiY^`MJ7|3~$ee6ne(r*1L zH!)2$Mux<*E_u^zGWsFsygVI(j9EGC+_m3fS#wKo@kD3ag?qUm5-0*jrpLUtn-9Iq zUS+Nqwe(yg=2ZKgi-xYx`aUY8GGQL7jK%UCIaX7}9!P(vf%E`&0NcHF-mL zF~wQCYY`Ej$6vY7@0Ph_3n?}J?pUGhEAz9ny*(`PUHZhi3Tc%;#Bq-4=Hpcm+f)}D zrQHEscX_=wf&pXHPZZeTeR+x8SG&<5hC*hDt#U7OCZKR_+hrU(X2HlDrOm%FMkmr1 z7`_!%^_^4dTkU#V8hSw~SepWcHy#L*EheANK%ZN~raCUGXbny@U&=7Qh+io>pVsoV z=hb&1nVC#_kE76wUorqho8h?jAXF<24KA_@)Q5dJYGxs&s?5E;7vUT^h$ngBs)>rD zMJoq$4$FrK-}Tb2G4vl~&j!XhL8({!3|{O^y@cZWn@nDY{<4CB_i}q8giHZDR_7}# zL$xFUB#d;?cBMM6S?tw=DOKuZ*Wzepm2S7JN9i+W&!_9l_*+|x-+v^!^-4}4PX6){ zrG0AEZM?TbVo*S^xcH~Fb7MDHe5{SDV?#AaP6e@dwVT3cxg-CX$DZ85E(FVI_EOEH zE#t&neLUL53@F7m4XD=V%UaRmdi~;=ZMrHi{(_x}+ zw=%7g*>l;GEKu4gU7!*6nx((G7{MkzX&d<=zy)%K7xI@lWN#3s-&XnAeA}bK3`=ur zLg9mhYMB*_khx4awl|xV=kB<$BkX~`^PQ**0I_eG@?S6~Mztt4lBXGu^Iqwx&MaW~ zR!y(6&t`rJ3oV-^KAWcvcS9cMq$YB0%nvg{yhO=VS)!&Y$kU&tw$$;lpl(Uin2zl19&yqLQ_s>)t-%R_|W5+OPrKdL0nlWM$ImQo64`4I)z-bC^aQn5J4&vr$Mqr92NS6 zM?u{L+}F(lkt?VR$GaCP*8t|&UMO6dLIa!Nh{>D{Sa~AeQ-1?b)U^bcxVm=CW6g#O zD5Ldaptf@Sdb~5ZNru%*l=H)x$$GFvai?P)Y2a*E-s^7CH~`pBWiMou`;XU`do{x^mtQz zyL_0?c~9K)ik@-@0Sbrd%jR4~p2zUu4+!mv~+m4X(K@k!yBHf*EQRz{HBk&0P#oOKURC zMh9rss$&NY{jhpE28>3!_4hdlQL=?nSDf+2t>(>aUD!gooyMOOGe|B#^F-;qht+D< zPqUG22@i(kDt%1Dea@9cA;ZF_xs?7_{g%}itVbk#`Yc4TWr^wMT!f|Of1Zrrb4(4( zY;|#&kIgH=1~lt(b(rg0gi6YMD~9@!Vob4g0`u^2neD9Opr`YvO^sB@8Tv0 zxG{|pchyxM3{6`y$wy++qi@c~2GCNx3DD$ER&w|8!Nh(Jc4~&LLXR?Ijb&#vO5pIi zC1CFGX}x#4!^A+hTFm>>mdtv8rj?k-@rS+c4BT0Qzp+{IsvQRYrjqLr__ujFbCyIL zio~^~S}vPI{j4EqMN!OT{wLEprz!OdG0PwYXIAV8s&ZyrT1gGW*5x`!L-EjjvH1sB zs@M4FFW%^7`qCe7AE6RZZk- zMUQ@bE;dfP10XH0qRW^0Bv79}I5a=!%Zc>2fvev-U(qWw?g|+h~6ygY)o&TJ8=5qx%nO`);Py>P8*X}@|iry;S{U*6EX`T5l%tD zXxT^bHxs&lmks!@;_ghP_TbRaHi+#B2nyB!zgI~~Nz`@zD-@(and%A>FdK!<9B`EwfQac4(WTs4mpg}6KuIOJu zH*{gF=Ad10jQmM~-@$%*qG#5La42kutbaA$S;xmmMD&1?6zPrQB(&ZwZ0Uje$@>7c zguxXzMWZF*-3w$WjZGC4S}O?E90Jvw^*o8r-FM*uMR^CSJu0%_$m?F@k#4Wexq&zl z35|$`4Pm$>)C6jMVfvM!k#ydRw;(zr1wiPp z4!ts9Kow9ze=|%LZelnKT3zv=bro_Vn&I9$VQg&vBMs=lhB62!Mn1EUG-*25RZ>xE$zzZTp2*a3$t($Pit=j)k8wyGrv5$R? z)7V%EL&*llY^#vX?K=D1M=-Xr%zwcazP{~NG-*r;5y?_Xl0eTdZcQh_;+O$>DnZk= zQWZ#-K<()EYf96sO0r)u^zc7b({Efr3ZDq?F$%LOz2HsSIP6awF`T6OKW_CH` z{GdEF4}^2jZBmMKA^s9Vcm#{gHvRLQI&UUI)bz z4qs;X>tTt7!3l}M%djlsnejWA`(;$mCw7%%7+?@ zzvdK8eZ%4&tQ=T&)>&#LZUlqtPXiP2zIeoqi>TkH9VB)52t`LwM$eY;yj%zI)Ar_OQpVNU$fzE8y~oqtk;B^?gabhS zF2Vf3vUgo3D4yq%-2qW49`7HgziA>XS+-k?sC2-@Iy_bWrp{;Ks0_ z^9bpnXC)MitfRTqy{URo3Jbk-eH=bHp)Wi7M2Oe=Jn6}T%*;#-#sT#4jJ!b7YrB1# zK`De<_zl(`#&6SmxwCE+HHLN?0yE$~9)uLn3{P{bnSlub-D3+?KCn2dDYt!=UKvha zhEV7+XP?J)WtoQGjvONf%(Q~x_M5;M22kS@UhY*_q2O<%aib=rgMnlp z|Ao{_VvNh~D+$o7v9dA_G^-gZ8bA!@7x918dei~}D@z~F?0S&B$Y>A9q4JxjvUU{~ zj&n))i>`I#sGwMnr*?HE89ajwDnDC1U;1U}*{W9=Aaw`bxgIhO+`j zfY%{Z{JXHdvFS>L0`7IB!iJueQOeqEKUaTLfXPTid%M@DX71;@(TC<2GF})rCiLw( z`XuXFmcYc_oLUkmA&tG-mZM6eu!n0o%EcoRm7aU`G(m-v6c4LZ5m zM(_crK0UH*^7n{du$&M@nkiw;n!tG1lG zMoJx$M(19G^V)|#iQseMFGVYBKUkLg-omHngH5{&5Piiff9sP}Cgf5BVR%2T0r@UP zRShHG#8y3bI6fx~H)Qvb=m@^#Mn2?&{AU62Wq2g;Z&>mq-R-klTN5I&#l&sIkXuwo zs5;nLFYjFLbDQP#DHz=EXn4do068&HlTc!VJVHuK$T#Cq-|DV^7@a90Rfmtdjik&( zO(zUGQD>>x(=X$$8oyD#B$Bg*+jegq4%$F`s=7NRM`MVnLasJ^0C~@1$0q+dp29>u zb}wNAVH1T)1UMbb@DHp04}#*a760GShUla3kJ+xu9ep#dz{C5ToJ+4XOgome&VK2z z#0fvb&OsFp7`fFus4YmA`10hlBg zQ}dQTwRPNGpB%1OQah*#YafJ3*%eEmNWbor`rX{MP+} zCc-}3t5kNS55WRLQSRL!c=g9QeS?_g=TLyfV+TNYGV(B#Ng6CPxBvR_2M|iGRlrqY z2_pO`DC^GULrbs(G)qBE^Y*~IN1snZb+<>FM0|Crk!}vOO^HlWI$lNYfHT-5_(?iV zwZWo{W5?wbc5E9S%=w8gH!(t;6MYJ<97IPL;o!fsva-<135XJ5JbOTPUb#H5auPjT z-Xf2+h2r3>T+J8|0_A8uO!ACeS(7(&?R~64$WldOD|OTIu=}P7mq9o0ZB*2#Eg$x5 zd39x_Hz*e$K1PSBDqk82vZ8^x0S-{TSQ7Li> zD8bl?F7v#`sL9j3|4yN!RrPkHPMz<8*-fJ4SrzqeT~k`r`d#zOBl0 zKc4-v*Ahwj5jCbPRfeN6n7>6R3uGMj6?lQdJ_ENgpOV34N@VoTUL&)jpVVC--XozB zXhU32m^d#h%J;`;Fmq_Yv0)uwXlaoB;UU16(Z*A(oX+1odG&cPrDbz-H18YlK#jGjt zyx2w3JdI-jDq%!TdTi~e3y}lZJ0N0G?J83>epBK7R~wdmAH?K*$sEF-Fwj%8D)xUL zTVLd4rjEN>!Rfkn2dWI>h zps3h}trZ79sQ=$a>wH&4pu8oviW{GC0~C!TPMLlr7R+eM@7cOmgug#%_H2@)-j(Vv z{sHm1Z;Oim^eG8{J~@I8`&+v9)+p_)Ew7LO=a;fB@n+%VH0yb%T${pM%aKMEXa1%6 zfS=SJ43S;@R@T}w*Ul&ksw7rg`LC)|REt@&>=kEk%Lz->p2c3yIjQ7b&c@A#4Q0B2 zK`H*73_{|)Ic+h(C@P}ea@=GxN)weq8`E`*FM~FTjgv$Bz1bPl3q^F*Cmm2z9s2j~ z%JPEZJcyuihA2nv2|@&D5V-|T1` zTv;gd!mzDf`b8HyYv4Lpe6$~$9;Mlm!fZjvIEE&v9 zYBw_o!QcKxK<{rm{{QVQKtbBZ)>a>D)dxwBs)4~iaQPNMbKeh?UY!b|a!xcNJ7jDM zT_&J99Xm_?wYz&66sz}skoc7%^7LDsesLqnj9w5iCiMo!U!i%Y1b_rwmf%qvC#9Dz2AC=Q3?;^G1aCI$+_h8{QyRmSc~O)Y(wW+u>C)6vvigT_%%OLGLv zE6TnU^}p1v4yzXZwZ{>Y`M%a$V(iJ0PBDQ!_TKXAVhN8#b z+JGO9!;o|s(Z23*t9II4e2DR>r_j=KRu%26W(31`AyNMU@+oPe;^T*#F}(V(z5`%@ zPd6M6A_4RWv_n%$AYo1gwgbFEHwDM()2G2@@dzaI;>Hg4H$aWN6NroFhmkzk*S9(k ztl3SJf>zFaPkJZFL?fpI=!4jAha!@H&sMNM2TaJl8()y*tjP+7`}rq;ZUFx9g-jR@ zKiLF%^TBW5Y>*)}nSrlpWaX(^eRCojJeUcq`uf~}J+MiQCPv)G_SV3`0$?V43c1z@ zuKf&}!1UdzV}t_`N_T~}9wKqvyF1{wH&9Z&#+ASc)q+)!jn308$-`nb5n|y@0eL`j zx3}w;KKeo8y9fY}&I3+1wpdWwhA%JzStxKteW%)DKTvTb0h|WbqT6wjPJAJAn5vF)^VZ=m7NSCjdV-p?Mmq%LQXAPyoo_4~Ba3x1jXkczBEJ&uwis zz{^k^tlJ-$oqAc__vWzh!NtpfIyGSEx0j)svbqitzy{vlZwDDVoPFbrkQI3K&~+`a zE|JDJ4Ay7|mL{EmjW+o6x)-C+8+%L~&4y7En$1YDtKKprWqS7MJBiEgZI+oUXWevSZkUC+C${|M@#h{FQk(@k+7j7uH)le@F zf10HHJBRF-4SzU_G&aR1R<_Pk3q3d$wbre`li<`LjDBC&kCYWG>xSzheo1fMK37wJ zSh9m3tUO1-QQvtlB$(ZbCO8tYnnbJQB1*GKiHrz|!r4!C<*ih&hH2xWJg4VT^N>|B z^;5Lye5HkjT$emFs zR_%^uF>t{1WV5()mxYrJdNQ^Q%vxCMe^Vg?sw+|V2iP*uM=?`40bIq?wPZ0?$(Zgo zo1wwNOvg8QCzPaG%zO{7YK9DP{Bo|J?{x_~{j{*K`W$e&51#Qp0?UFD&_roK`$cW| zR!wJ?ouy?aM}GcCX?@@w-knS}15kQ_lm^9HE^NB6_1sD{HYX{bs;WeY-ZLv!wXEkB zb+$og^vf4cQlz}zr9+F~VOTR7Z1wWO&sfO?I6smZengmx&E*9{z>>|1yyL&pmxX=T zn`7Vmv$KtFJ4=cm1#*wBR?dS|3e>F&47c<2t2$^KaY!X{Mz7hgH6+lNV#|d=SwK_y z%_p^y#Y^#iM-Q(%;9Mm|2t^*Kcz5Y2g-}{Uls^Q z{QxA;27%Gd4ac=Ut@zyDUl~>0t!Kw#5diN34&o9}@%ZHcZ`R2la<=|2pt}F*ssAg! z_t#BN{%xm$lmN>R=!XpcZWC?bnK}3}v_|-6RGa;kCs3|)bw#}GUZdnb#k_Jw9Eu&sA2ds>xSn-s4qWZ!GbeRHdXz?^KJsG)x2McM@C;a=w+=8$x=A=>4m^0u(T! zp1bQ$$fYdOod{oxbiXZnH+^td>)MkXTsV515lpYh4q3(WUTfjHV zZUlarG3c4AIT_2yrqODpYg@q7=IIB;xbzGAl~Oy#l8O~mamQ&-oEaDKoj2^#IIuH$ zT6Bm?1fhYs;$b_oVF0yOe|^LRFJhEZSqYJYJ~Bi4B;R(vlxgW1q0boFT=MB$7{QU% z*Nl<*#^gtf366B#qii|Fv%hGdP!y;qO0sr}bR?-%imQN-SFqsoy=ZwvQ*hSQZIIoH zz->L@v;K+UwklV9qE`+J?J2F>u5Nr7J^pizKCHz-t(r0=p%Q7SXNPiwR4jTZRGJPh zp1@)K=?a+5Yw7OWi`eKLe0e<5S$2q7$M-RP^KihVzzTGft<+l52e#188o zAD|AZ;(!)P z1t&sTeOP-t0!O@tW}N6w$qiiVTK*<#mfaI}T*JkdnAXUwTweNe{UV?wr+;hB;)rh!hiGZ+n*3FjHP8W zl~=l|0A};1RU4yd*UGczHwTYdoKs@w$n-+am1)&SdgTyaUJLuyVmkh*e(-rB&!BT- z8M@=O4+RFVubi3tZ2cUg`KVK4880jI&J~q+K615Hj>5a6FBT8{t}Z=f7WI8QzscV$ zC>PhB=Q`vt%uQK*dv_yk|1}!oERxq^Tw?{%+&JDcaVN_`m5q7N*`SNkk=HdgN)^H! z)?d=Ij7!%l%T-xyjgt`6)30<&^3Gj0DJd&(WF|yF z;(=k@Zt!F}Zuvuk!1lK<^Mvg$Rb;-nuueU zo0LZ%=bF$qo|so==aCE{h^Es-23QTGk0~Ds{MS;GOLDU4@^d_ji!B{n5M- zr4!uS<1-sXqWYmYWg`x&ESzOWMANhLovBu9qeIx+Y{`P7(bHpZ-M}YAf?(abhL>zBTD(tx zZgFQ1Y7H|oR01|a&{|Tw!WfuQpUqs+4Honf#AR_(-mx2kEEE;ArDmVk2_}obyS}M; ze)IyjUJPkrr17zRb(5AKDJnu`4`!N;0}_R{{TY+|mOb&E?RH4?S-ezD7l$R-<<1%7 z9DL4t|170}<39|kuW$Z5UL1I!eCc{A99PkvFX8w|Qcwpu$Og-?THM?nVCP&J_kMVG z8;TN(3c{$lO!KqWyK*bBOdOr>?lTD}UluG{Yx*(L866K%Zfa}Yav;I%Xk{{Or6BL- zmMy_qEl2M{mQAkUD+yxN}i$szfvvTqzBi8thx2GdUe z%w@?2XRX3@UQ&faEOQLA=lq)aC1a=XU7Pu#O6>vUk_eaXi0`dYTs^YsRiga|os2!( zv^{Q8Kg)c!*Y@Y$n5T2^-s#QXx_i)SU$(fSLUNFswb1h{>4M(Y_a#Q|F8#{S5#Ncv zXoBy0P)wxzM&)TdSE^iN(oq$!oJz1Wp&|P^_|5ekvrfDnm&AOquFFd~PQBJukv~7uP~s1()}*MY6IE^{zN|Cy?4r-|{+zio zrO)!$59N-8yuEy}wHIH{!SO9k6E3*;H7|p+c9Ndoqfgm;GN)@9>JK{n6}q$<1XNG= z$;qOr7wadaKzb)u4M;oz3i!#V9~ymrXm^#C?UNoNJllHsG0Ro@%LdJ=h7z(DYwzo} zzmT>Iw<)%7Bs)9@hq#v?18A4@@##++l3lV~>!b4co>0j{iTfrEeJAK!ypXgx-68mV zGMLRkDjd;%Mk3yt? zpY7e6F1Gx>p;90kn0!8QT*IsHv02g}Q|XPo9OuNx8P^*NIw3P9O1K)NJqV|H@Y@!& zY8WH39`CAhxN||vOWx0_qW}~^_})G-nl2vI)lI5tQ#9UQBey^*TnR_|M#~+ub3Wb< z)(1YRrg8e6=!S5Xa}pQ$Qjnj`VGNxokL=V^#gwM@Lea?8_hVB?#-}*;>=r?2rhonw zc`FmzK{o+Zw{)zeL+3|J^;zIvA_5a=3l(SUS8;QFQ0m~cvQwB>RkK2ZS>?z!8&gnE z&bCpWajk!lCg{cu3N!K&dFb9t$Wys8k*d|)96FagZEQ*^TzYhTQd z<4)su3LG5nvVj5=Bt^eflOg?IntC@RU;2~kf2_->t-mok_0PB^dedoE^!vjAGc4!J zkedag|34|t{_{UQ7VwX%G!~Tl=V;aT1eZsno&SHur=SYeZ?kR#C+e_oFaHs6Hr}Y| zy3hS~R4TMn=jqm8fAeQ(%rI!&@l;6Zo2M`Ns`%o{~5og85^R=tP7uaW0$&oKUa&gx7Tnuz}7 s2iBN~h!nq5RpeD&6>bD**6$wp@Y4-3r1b*wm5AuBtg=j=)Ptx02lIO)761SM From 74b203de474f5e617399227be121fb1b9ad13f05 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:35:08 +0100 Subject: [PATCH 248/260] New translations MSC_encrypt5.png (French) --- docs/assets/fr/MSC/MSC_encrypt5.png | Bin 940 -> 717 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/MSC/MSC_encrypt5.png b/docs/assets/fr/MSC/MSC_encrypt5.png index 367b443a3113855449dbdcce1606d76207c42d2c..a2f1b974180020cb46ad820b64f76bb1631cfb37 100644 GIT binary patch delta 678 zcmV;X0$Kg62h9Z`iBL{Q4GJ0x0000DNk~Le0002?0000O2m$~A07gESZIK}~e*hA6 zMObuGZ)S9NVRB^vM{;FlZgXgFbY4{m1poj7L`g(JRCr$Pmy2z~FbqUHS|{oZ8KOgY zg94c$Gh~L0P*FdgB-)Y@2e5^E5DJRsM;0$Z`t>4YYAA6sIg~h=97>!_4kb<|hY}}~ zQ%U@>+%muSXY?L{t9)$15A(eLf9^Z*n=g2^`?(IS#N$Qp9&v~3j&Shgl=w+mmH5$@ ze%%ocp8U-hyzc#+ogs-kE3!QNBl(I4N452dkLXL~R-Mb@e3IAeVmJ~bk=7yWH^uV= zrylCI++782j0FVP7p-JtWYs5359+eyU3UFYfidXNnyu`UinR(j#msYUf0~HX>XQB5 zEVBBM?b|?%+RlJXb%HN70yAL8i)CarG1&u8$RTX}y9pCix4(Y>4Wxspw&j%ErXH%= zMWpN^-f4AFP+#3h@nC|Zd!99Cs8fB&94X8=XOm^e)D>HP{=T`kSG*};MSA&p8D+3DnnN?d~#Q)Q#uCj8r(b?+)d?7+si(@FV3CfOT zvCgA*3{16Ui`^rTYjpQ6%&KEjI+SUt#>v&LcvCIT4gNnH)--Ob#VZCWjIylS7GHr0n$zpNV5~|mH+?% M07*qoM6N<$f=66CasU7T delta 903 zcmX@hx`th`Gr-TCmrII^fq{Y7)59f*fq~Hu$d>0|0+Ju^nmJ5VG^uBH^mK6ysfc?! z<8|q61D@8+!Qy8GeqH7@X-@mVGwY!86opQ9&k2*3UNNnHS6(8-v4bITQpV&OTSf-q zri-izUIx1ud^p|28#E8TU@}mZh-FyDvY7k8l!Ow-8A3gJ48d?kClgBKUw{Ap{nv?n zmk&C(|JA&^J*j7ZJ>U9@M(LI8@*fs_n%SyvUj96IZ?pgV_x4FPyH0Pq@v!#)&O19E z*k?B^Pu5Z&$fZjbH_lZ$U(^=v8< z^`7pStCC)Roi*G-?(RgveV;WqXi6E~^fGzb8q6VAea+V^)Xb%8_64n#J`ehPvuo#k3DudsC%v_ z&*Wvm(PZ9zwkHMi*DVUy4qO^urVtYb=)*>fm|8*k0*~?Ze zUcJE0~L{!`}4<7_*`U3-^9|jVTu;Feopq^IcJK{`o%dee#{3| z=dPIBs=4;Ma|8FhSCOx)XHQo2{lhJA@aC-<8`o~ulxUJ%ck%VBDVv0DE|skfTYl$W z?5?&~vmRy6-xGZJBJ2NYMOq9R2Vd0bNW>a2E&jbRq2wS3N+QOQ(kDFs%pd)6@7}F? S#dm>ui^0>?&t;ucLK6TbTB$Pt From eed46f6c81bf9a1956e8b935593315359c30d07f Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:35:11 +0100 Subject: [PATCH 249/260] New translations mscrepair2.png (French) --- docs/assets/fr/MSC/mscrepair2.png | Bin 48768 -> 32817 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/MSC/mscrepair2.png b/docs/assets/fr/MSC/mscrepair2.png index c5daac47528ce2ed517503b152b628c95289715d..40cf9df248a6792a0ed3b2a812246ec346e57d04 100644 GIT binary patch literal 32817 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

    3Yhrri`fAa_O$>#S@!KT6w15d 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 Date: Wed, 16 Dec 2020 16:35:19 +0100 Subject: [PATCH 250/260] New translations MSC_encrypt6.png (French) --- docs/assets/fr/MSC/MSC_encrypt6.png | Bin 9774 -> 7492 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/MSC/MSC_encrypt6.png b/docs/assets/fr/MSC/MSC_encrypt6.png index 48614f46be3a40944a0e8b504b923c81972902b8..2a83cdd65c7fba4c46ae3dc0e7cb8954ab19db82 100644 GIT binary patch literal 7492 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 Rz(-C#Gq9ymnSpD}e*ocYyQ%;H literal 9774 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 Date: Wed, 16 Dec 2020 16:35:21 +0100 Subject: [PATCH 251/260] New translations MSC_encrypt4.png (French) --- docs/assets/fr/MSC/MSC_encrypt4.png | Bin 6396 -> 6236 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/MSC/MSC_encrypt4.png b/docs/assets/fr/MSC/MSC_encrypt4.png index d40afbffb8793c91b47b6c60785aac6a40e1f228..a215c22162f4a8cb38ad2b85a34fcb0b853d4e35 100644 GIT binary patch literal 6236 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 YB39V_zikhp_Xhxg($v=|2Jb!jFP?e+y#N3J literal 6396 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 O5K051UaI Date: Wed, 16 Dec 2020 16:35:29 +0100 Subject: [PATCH 252/260] New translations MSC_Data.png (French) --- docs/assets/fr/MSC/MSC_Data.png | Bin 39450 -> 26138 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/MSC/MSC_Data.png b/docs/assets/fr/MSC/MSC_Data.png index b34638944afb4bfae4a3f17b7d60f7dea8088206..bd8cae2f09ff713f1a4d9c1f1acf8958220e6707 100644 GIT binary patch literal 26138 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 literal 39450 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�=+eaS-*LLIa@CK4@k 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 z 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 z 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 N44$rjF6*2UngFrisH6Y@ From 7dad3ca12462bee30e5ac8fdb9212a65bce91a1b Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:35:34 +0100 Subject: [PATCH 253/260] New translations MSC_RepairOK.png (French) --- docs/assets/fr/MSC/MSC_RepairOK.png | Bin 1184 -> 1125 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/MSC/MSC_RepairOK.png b/docs/assets/fr/MSC/MSC_RepairOK.png index 9d4f3d41bbf36f9a0b0fea9c2e4e77c0f421a8af..3c4453f9d400bebc15f0fcce5dfbf4e4d5261309 100644 GIT binary patch delta 1090 zcmZ3$`IJMkGr-TCmrII^fq{Y7)59eQNIwK(T@EH7dHwh7M-vrI>KTMeTq826E^NKU_OX5N~SQ!|Y?|8a6hE&A8o$i<|>?m^l_sSw6{;vvM8WkTFa0s^E zbFuj@7w|`Ar{~tS97%6Xn~cm?-|X0fUN7M{LA z#$EpV@#pjSw%ga5zc*cY?XAK+Yui_eUurKz=wvPMS3Upvd3m_zI<1JN!`4SspUnK# zIj#P2-4j8bZ5<_R-1I-ZJ*w_?Fk^SQRqLl>?a+dol2xYNJKA5FmQJuem&Vy=_o`q2 zea+6>)_XtHn9N`HPq=_@AZK@9UuF&rR3)QkuO})asIpRd1p2puh6}EeKS^o{DX*~=3>6F}%*T-+?Y%A&RFLu?na+tVhQpF;PC2y_7=8Cp@X;tt( zx&2A~dPVCj9o2ZgZ=Gk}XXw0myIp)g;@Hm71ZVx4I|D))rgr{8{wn=ZXv4RJpi`x(t$%xJ z)~fxF6kpi;o$6baAE5eT@4b~q@2}nKj|i@5{wJ>T`o+P5qPpyo^#990>t7IQYPu?1 z*Pr*TZ`~e?sslPEv-%V@GT0t|4-Blo{B^A&3u~`}#i|a|yD#QC1YF?Qw7BbR?b?^s z%Buex7bHv-v05cy+PWa&=oHIU940`<*E0nni6*jh9D!;#%Z6(B>c6XLU9dn<%W_qP uk%Ti)G*p&#fhO(@g~)D~B+{(@GTRBy_WylUG7wlSFnGH9xvXMduVV}~gt6$BlbZW) zcUwKV?R7&c+H`T%j$5YLd+qKE`R=M*v1)T>fDyk{!;(p?p+~ZLCluUb&HHmly7`{* zx*36Yqmm=`w(gN`^SCo_#{IR|7&w>5zBqO}spseOVAJ(-ydlE;MsL2){#_+EaYwC9 z{l5=e**q-XI+^dYNPg4X_hXgZEW;O}N`F*$PO{aD)V;Qe<8Ik*nI%gm)$p~xV!hWD z-7U&e#kn^_Y~6wmvvdiQ6|z$oWGH_(EPhZCy5fnIvB(pl)Z-_^Hr{?+IH##FN_6EF zog)(2hflVqFYY~W|6?CpNl4LZGbQ=vnk|lJLWAo=UUhf`29;dib)nVXx9#lGCm)Og z3Rb8pN%Sl^C&{Lnwf<0ueTMTzJr%Dut#i!*J9OF?dMsR}I(g2G>E_L`XO%*i1Wmpt z;omlS_3Zff{C;|SC9Z#Ov+j|xvhJ+sx_9!))l-_MZLS~L|G{8pmlxa9NkI!&X+2q? zYP7P<^=G%dabs2;{0x-(0bJ)sFoWH_0rMxDsTiyF9>7lO;HGqL*({@&s+U zck}H2{Yd}$_x-PX6Wpf?&hhNA@ehB?$|+go`{&OFZ_oTHy-%F8UQdc~)1ByO8kLdd zxOK7A83oq*-Xy>Hu&FOQ98XmX{@XN9=XVfW{r#K^Yr}vhdnMO1)cLVN=%&VLZiIIGyNccZ!0o*j1kwtqgo_e-Ps1Fj2U&uR?A*x0Yf$=L|4x2sNO z3U4qo{%_y*s(0yE!5GG Date: Wed, 16 Dec 2020 16:35:36 +0100 Subject: [PATCH 254/260] New translations MSC_Tables.png (French) --- docs/assets/fr/MSC/MSC_Tables.png | Bin 31879 -> 28372 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/MSC/MSC_Tables.png b/docs/assets/fr/MSC/MSC_Tables.png index c280bf29344186ba70f0a48b78d5363cee66a006..84eb0daa54387590fb9905a0bdd1303b502ad0c2 100644 GIT binary patch literal 28372 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 From ae83c9b1d8e50a3a9cf85c2b1e531c1b1fde0312 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:35:41 +0100 Subject: [PATCH 255/260] New translations MSC_compactwarn.png (French) --- docs/assets/fr/MSC/MSC_compactwarn.png | Bin 2074 -> 1391 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/MSC/MSC_compactwarn.png b/docs/assets/fr/MSC/MSC_compactwarn.png index 92437fd9d2f47454541e0a61d4f9f84872e2e05c..5c69747af43a56899b28a5ce243ca87696784f95 100644 GIT binary patch delta 1358 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 From 638ddea329f8a972c7902d3204771226df6cdff2 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:35:42 +0100 Subject: [PATCH 256/260] New translations MSC_encrypt1.png (French) --- docs/assets/fr/MSC/MSC_encrypt1.png | Bin 3724 -> 3848 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/MSC/MSC_encrypt1.png b/docs/assets/fr/MSC/MSC_encrypt1.png index 74844ae23b9d26025815d43d671e7f28fcd5708b..2181fe33d09f03ca21cbf570417bbf6ce5688a5c 100644 GIT binary patch literal 3848 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 B5m*2K From 3f3b7a27d07e7f3f549e1859809ee43c8930b906 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:35:44 +0100 Subject: [PATCH 257/260] New translations MSC_encrypt10.png (French) --- docs/assets/fr/MSC/MSC_encrypt10.png | Bin 1579 -> 1170 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/MSC/MSC_encrypt10.png b/docs/assets/fr/MSC/MSC_encrypt10.png index 5e92a8df51db38e17acf5231c57437a29509b346..9ab73cab6f6bf714ddef606af7e5c24ea593b1ab 100644 GIT binary patch delta 1147 zcmV->1cdvm43Y^UiBL{Q4GJ0x0000DNk~Le0002s0000W2m$~A0EDOG0+Asof5QL( z4#NS*Z>VGd000tnMObuGZ)S9NVRB^vM{;FlZgXgFbY4{m1poj92}wjjRCr$PmrrXH zK@i3BsrDou;z1Nq@ZdoaRupm*@tk`=@ss2x(Ig^>7$l3Z(Of(!U0v1lf0%6M#){Hn)SybMQG+V2Mh&X88a1fWYSf@gt5Jh0 zt)^jvZVwLJNKu-gNrOJ^k1jkPtbY07=896A#tizTKf1d1?SAj*(#xTGRB4K449f0& zxOM#a)1QS8zty8kQ#4>ubSHmqy&Yd)AMWYTQKdF@4Vt_2?)$?ltHaO3f83tS-8oBl z8K-{M5dEc214*g0&Qjk^8{sT+{`*uuuagY=ZfF1Y>*3ek(l_BG?j+EYXY;@+8m2?5 z?W+c@!znMBnBJfpJNxr51~=av+*p@AYW`=R%$*jh-9Dyf-gG%9=jG#@KlL>HHwK;P zlBYDNd3PFjKIk18+uhmtf0=u9;&-Qq3+i;c<|{re?ul?gc$~2Z9yyYxl9gOciQo`Y zWP(UM9X8>C9PV^nhOiyvg_Mv}l9ePB`YJ?Ondp+65yWN1gVM&5oUDfZX2{?4C@r)I zo%urY0t)pOD^3s$x;@yxxH7!A`74;O;L)kwNrV=Bu^gZpxo$i3f0vL1U0Z%*05ZVP z1F3{n0|*>GlCL;85v>$z=Ik*T2)RUAc|txOHqnq%2PqGPQYEo?7LPDNnlrA`$PThR zEQM12Oe}zcsaQaMgD&=Vuf5uR1Qv829o2NF#WkLE;Ad$M+;E5`*8pIKC=L@sx;sJO z@TZ6M;+c>r6qO`Tf9fE7PFYr!Fy`YZVxnP>)dHeeI!j1U2>A-=o1&D*t@~9o#InT# zPyqX6N`Hfj9-Utq)O4o>8!Pk^>IF^gfk$DdM{JmbRtu?6DGD4IVO^XPkSG)dF)Z5S zbIP)+gh3cqZ8RW9OTyAwA%CQ}*-5%)HwS%3uxR(^Wfuw%fBPz<)S!mkqYJ&my6!Y! zW9c-O3r)nK*lrT$p%KRzZsIXzl?9GMh1nd-i`zj32YJG(D3cOGVLYUD7+RK>;yNcq zM6pg2F+< z@|zLFC1;`1M)I6a;6u=b#T94p3mnM{khbQhF%0qnFpdt2>oh zGJ!!2&$dSDPGy!%W>7_$F=|ky)u=(0R-*=0T8$c1X*Ft4rNxZLe*tPR?FMo|3UdGe N002ovPDHLkV1kCX63qYr delta 1559 zcmV+y2I%>c39AetiBL{Q4GJ0x0000DNk~Le0002!0000T2nGNE0HF3D(vcx3f5HF& z4#EKyC`y0;00qEFL_t(|UhSMqY#T)w$G@hbBsC@G5ds&4T%({IQ00S3dRg7i!z0@aC=f3kh|KHT2D z2k*T&2BUVgLM0Q2csv7@mWZIVDv*hj_)GNrFnP#2J{ zGL&kL#CyDNrdZU!f3HO56LqRvkl?ZHY`4>Oh334wZbyBzE;%1$8+385zLlm-fwK17e4#bymbA(lK0iG zZksQCx@rEhY3J=GG|Fje0nB`j+}HB#nz$G|UED*y=E_^kf0KAfo8^XDo)tQt<@wcm zbmdxU>9X1ACC#Xrd7385G#X`-*dB53oz`_bdalzhLtDpT`@kyCzE^_BvusR7n(Nw; zkCqwOC$gQQ4zGA!n{@Tb=Us8KJmp>bG|rk}t)S1I9)a_dCt>^6E*u=tcjQc+8Mjx` z{qTEE9n#IMe=ZR#w%#OHwtFjGsr*ImMmY1Hou*f-P$E`Lv7Um?XL){(U%3`DNo5bx zTzAx=ORFydE47;A7BW?0dufJGT2MPIdacueu8z=s5P&>Gu(mO4+(+t$pgsvarx5R* zNY1d^Ufx@a;?ebaoE<1G?&axIaBc!%eS1eM($~M;e~nz64C&@Jm*DCmX^yiqd`J{l zfLKL#y;@4?-KYV=jSG2wdcZ*TI#wWi6u-1E?eHttiLQ=yb~l`K+b3P^6(eSlIf$Up95MHpC7y%!0&#lW*%bmRhWu`Lj4$e1i(FgX4Y`3U`=Iz#P3{8aNe3qqn z|A7KUkRb*IiXcM_3KT(x7!)Xi3^6EB1Q}WY{sW|-=9niyrj!5x002ov JPDHLkV1fgM=k@>q From b25fa170880d014ee747df07dc14a9a864d3a76d Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:35:45 +0100 Subject: [PATCH 258/260] New translations MSC_encrypt2.png (French) --- docs/assets/fr/MSC/MSC_encrypt2.png | Bin 4975 -> 4750 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/MSC/MSC_encrypt2.png b/docs/assets/fr/MSC/MSC_encrypt2.png index 63a711cfdb7bd4fda7d4e012adb201082bd8c0ea..659086edf8cdc75f79382b77ab80c3b98166e463 100644 GIT binary patch literal 4750 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 literal 4975 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 From 5074fcfd2013cf6570d86feeca53d1160f8eca0e Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:36:13 +0100 Subject: [PATCH 259/260] New translations splash1.png (French) --- docs/assets/fr/Menus/splash1.png | Bin 52566 -> 57775 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/Menus/splash1.png b/docs/assets/fr/Menus/splash1.png index 2fda97392223978fcac17fb1213bc512da913810..e1965b105026122eff261dcd76b3fa8079ecad2e 100644 GIT binary patch literal 57775 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 j)TmLTMvWRZsz(0fy literal 52566 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 Hu0mjfa+Wx( From d3228a5c3d0eaf20f8725bee324869ec97d07662 Mon Sep 17 00:00:00 2001 From: arnaud4d Date: Wed, 16 Dec 2020 16:36:16 +0100 Subject: [PATCH 260/260] New translations splash3.png (French) --- docs/assets/fr/Menus/splash3.png | Bin 4624 -> 5032 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/assets/fr/Menus/splash3.png b/docs/assets/fr/Menus/splash3.png index aa786a67df6c8cb1d8bc800a56ad086fdaab5933..b5ed4e1d5786a5266d6494b97f0245e3fa6f3669 100644 GIT binary patch literal 5032 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 literal 4624 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