diff --git a/docs/assets/fr/FormObjects/hierarch1.png b/docs/assets/fr/FormObjects/hierarch1.png
index 5ac2887997d817..d6152bc100580d 100644
Binary files a/docs/assets/fr/FormObjects/hierarch1.png and b/docs/assets/fr/FormObjects/hierarch1.png differ
diff --git a/docs/assets/fr/FormObjects/hierarch11.png b/docs/assets/fr/FormObjects/hierarch11.png
index 37fa77455ed6e9..142b5083f9dd84 100644
Binary files a/docs/assets/fr/FormObjects/hierarch11.png and b/docs/assets/fr/FormObjects/hierarch11.png differ
diff --git a/docs/assets/fr/FormObjects/hierarch12.png b/docs/assets/fr/FormObjects/hierarch12.png
index 6a1a95bbba71f8..6b2d48d92cebf8 100644
Binary files a/docs/assets/fr/FormObjects/hierarch12.png and b/docs/assets/fr/FormObjects/hierarch12.png differ
diff --git a/docs/assets/fr/FormObjects/hierarch13.png b/docs/assets/fr/FormObjects/hierarch13.png
index 297a435ea97003..9b6e12a921d944 100644
Binary files a/docs/assets/fr/FormObjects/hierarch13.png and b/docs/assets/fr/FormObjects/hierarch13.png differ
diff --git a/docs/assets/fr/FormObjects/hierarch14.png b/docs/assets/fr/FormObjects/hierarch14.png
index f863b99d1dc965..5162868f9589bb 100644
Binary files a/docs/assets/fr/FormObjects/hierarch14.png and b/docs/assets/fr/FormObjects/hierarch14.png differ
diff --git a/docs/assets/fr/FormObjects/hierarch15.png b/docs/assets/fr/FormObjects/hierarch15.png
index 7da50e0fa1e493..7c96ce64727f97 100644
Binary files a/docs/assets/fr/FormObjects/hierarch15.png and b/docs/assets/fr/FormObjects/hierarch15.png differ
diff --git a/docs/assets/fr/FormObjects/hierarch16.png b/docs/assets/fr/FormObjects/hierarch16.png
index fe8150e1b233e4..fd58a2263ffbec 100644
Binary files a/docs/assets/fr/FormObjects/hierarch16.png and b/docs/assets/fr/FormObjects/hierarch16.png differ
diff --git a/docs/assets/fr/FormObjects/hierarch2.png b/docs/assets/fr/FormObjects/hierarch2.png
index a8840594684108..c86e3aea4f799f 100644
Binary files a/docs/assets/fr/FormObjects/hierarch2.png and b/docs/assets/fr/FormObjects/hierarch2.png differ
diff --git a/docs/assets/fr/FormObjects/hierarch3.png b/docs/assets/fr/FormObjects/hierarch3.png
index 1f8adcf60e4a0a..db80bf6ddcc623 100644
Binary files a/docs/assets/fr/FormObjects/hierarch3.png and b/docs/assets/fr/FormObjects/hierarch3.png differ
diff --git a/docs/assets/fr/FormObjects/hierarch4.png b/docs/assets/fr/FormObjects/hierarch4.png
index 7fee1c19ee0751..c197d38b5a1080 100644
Binary files a/docs/assets/fr/FormObjects/hierarch4.png and b/docs/assets/fr/FormObjects/hierarch4.png differ
diff --git a/docs/assets/fr/FormObjects/hierarch5.png b/docs/assets/fr/FormObjects/hierarch5.png
index 1c82ef869c8530..9bc1d0857ccd82 100644
Binary files a/docs/assets/fr/FormObjects/hierarch5.png and b/docs/assets/fr/FormObjects/hierarch5.png differ
diff --git a/docs/assets/fr/FormObjects/hierarch6.png b/docs/assets/fr/FormObjects/hierarch6.png
index b67742d4422225..2190a4d247406c 100644
Binary files a/docs/assets/fr/FormObjects/hierarch6.png and b/docs/assets/fr/FormObjects/hierarch6.png differ
diff --git a/docs/assets/fr/FormObjects/hierarch7.png b/docs/assets/fr/FormObjects/hierarch7.png
index 919cb6e5db57d7..1b98f44ae735ee 100644
Binary files a/docs/assets/fr/FormObjects/hierarch7.png and b/docs/assets/fr/FormObjects/hierarch7.png differ
diff --git a/docs/assets/fr/FormObjects/hierarch8.png b/docs/assets/fr/FormObjects/hierarch8.png
index 324ace96f36b0a..994dbc977fc398 100644
Binary files a/docs/assets/fr/FormObjects/hierarch8.png and b/docs/assets/fr/FormObjects/hierarch8.png differ
diff --git a/docs/assets/fr/FormObjects/hierarch9.png b/docs/assets/fr/FormObjects/hierarch9.png
index 3953368eaca295..088da8a61450bb 100644
Binary files a/docs/assets/fr/FormObjects/hierarch9.png and b/docs/assets/fr/FormObjects/hierarch9.png differ
diff --git a/docs/assets/fr/FormObjects/listbox_column_objectArray_colors.png b/docs/assets/fr/FormObjects/listbox_column_objectArray_colors.png
index 24f7c73a34622f..6e55460c4cdaed 100644
Binary files a/docs/assets/fr/FormObjects/listbox_column_objectArray_colors.png and b/docs/assets/fr/FormObjects/listbox_column_objectArray_colors.png differ
diff --git a/docs/assets/fr/FormObjects/listbox_column_objectArray_colorsResult.png b/docs/assets/fr/FormObjects/listbox_column_objectArray_colorsResult.png
index eb7e1c0304a52f..f07ffa07e34a08 100644
Binary files a/docs/assets/fr/FormObjects/listbox_column_objectArray_colorsResult.png and b/docs/assets/fr/FormObjects/listbox_column_objectArray_colorsResult.png differ
diff --git a/docs/assets/fr/FormObjects/listbox_column_objectArray_unitList.png b/docs/assets/fr/FormObjects/listbox_column_objectArray_unitList.png
index bd1bb3bf15fea6..96d78b37b01401 100644
Binary files a/docs/assets/fr/FormObjects/listbox_column_objectArray_unitList.png and b/docs/assets/fr/FormObjects/listbox_column_objectArray_unitList.png differ
diff --git a/docs/assets/fr/MSC/MSC_Data.png b/docs/assets/fr/MSC/MSC_Data.png
index b34638944afb4b..bd8cae2f09ff71 100644
Binary files a/docs/assets/fr/MSC/MSC_Data.png and b/docs/assets/fr/MSC/MSC_Data.png differ
diff --git a/docs/assets/fr/MSC/MSC_RepairOK.png b/docs/assets/fr/MSC/MSC_RepairOK.png
index 9d4f3d41bbf36f..3c4453f9d400be 100644
Binary files a/docs/assets/fr/MSC/MSC_RepairOK.png and b/docs/assets/fr/MSC/MSC_RepairOK.png differ
diff --git a/docs/assets/fr/MSC/MSC_Tables.png b/docs/assets/fr/MSC/MSC_Tables.png
index c280bf29344186..84eb0daa543875 100644
Binary files a/docs/assets/fr/MSC/MSC_Tables.png and b/docs/assets/fr/MSC/MSC_Tables.png differ
diff --git a/docs/assets/fr/MSC/MSC_compactwarn.png b/docs/assets/fr/MSC/MSC_compactwarn.png
index 92437fd9d2f474..5c69747af43a56 100644
Binary files a/docs/assets/fr/MSC/MSC_compactwarn.png and b/docs/assets/fr/MSC/MSC_compactwarn.png differ
diff --git a/docs/assets/fr/MSC/MSC_encrypt1.png b/docs/assets/fr/MSC/MSC_encrypt1.png
index 74844ae23b9d26..2181fe33d09f03 100644
Binary files a/docs/assets/fr/MSC/MSC_encrypt1.png and b/docs/assets/fr/MSC/MSC_encrypt1.png differ
diff --git a/docs/assets/fr/MSC/MSC_encrypt10.png b/docs/assets/fr/MSC/MSC_encrypt10.png
index 5e92a8df51db38..9ab73cab6f6bf7 100644
Binary files a/docs/assets/fr/MSC/MSC_encrypt10.png and b/docs/assets/fr/MSC/MSC_encrypt10.png differ
diff --git a/docs/assets/fr/MSC/MSC_encrypt2.png b/docs/assets/fr/MSC/MSC_encrypt2.png
index 63a711cfdb7bd4..659086edf8cdc7 100644
Binary files a/docs/assets/fr/MSC/MSC_encrypt2.png and b/docs/assets/fr/MSC/MSC_encrypt2.png differ
diff --git a/docs/assets/fr/MSC/MSC_encrypt4.png b/docs/assets/fr/MSC/MSC_encrypt4.png
index d40afbffb8793c..a215c22162f4a8 100644
Binary files a/docs/assets/fr/MSC/MSC_encrypt4.png and b/docs/assets/fr/MSC/MSC_encrypt4.png differ
diff --git a/docs/assets/fr/MSC/MSC_encrypt5.png b/docs/assets/fr/MSC/MSC_encrypt5.png
index 367b443a311385..a2f1b974180020 100644
Binary files a/docs/assets/fr/MSC/MSC_encrypt5.png and b/docs/assets/fr/MSC/MSC_encrypt5.png differ
diff --git a/docs/assets/fr/MSC/MSC_encrypt6.png b/docs/assets/fr/MSC/MSC_encrypt6.png
index 48614f46be3a40..2a83cdd65c7fba 100644
Binary files a/docs/assets/fr/MSC/MSC_encrypt6.png and b/docs/assets/fr/MSC/MSC_encrypt6.png differ
diff --git a/docs/assets/fr/MSC/MSC_encrypt7.png b/docs/assets/fr/MSC/MSC_encrypt7.png
index 89da0635752aff..3b30e573abd253 100644
Binary files a/docs/assets/fr/MSC/MSC_encrypt7.png and b/docs/assets/fr/MSC/MSC_encrypt7.png differ
diff --git a/docs/assets/fr/MSC/MSC_encrypt8.png b/docs/assets/fr/MSC/MSC_encrypt8.png
index 1b0d6a3ed07c9e..bb665844fc0668 100644
Binary files a/docs/assets/fr/MSC/MSC_encrypt8.png and b/docs/assets/fr/MSC/MSC_encrypt8.png differ
diff --git a/docs/assets/fr/MSC/MSC_encrypt9.png b/docs/assets/fr/MSC/MSC_encrypt9.png
index d40afbffb8793c..a215c22162f4a8 100644
Binary files a/docs/assets/fr/MSC/MSC_encrypt9.png and b/docs/assets/fr/MSC/MSC_encrypt9.png differ
diff --git a/docs/assets/fr/MSC/MSC_infowarn.png b/docs/assets/fr/MSC/MSC_infowarn.png
index dcb018621d1587..7cc2361865e68d 100644
Binary files a/docs/assets/fr/MSC/MSC_infowarn.png and b/docs/assets/fr/MSC/MSC_infowarn.png differ
diff --git a/docs/assets/fr/MSC/MSC_popup.png b/docs/assets/fr/MSC/MSC_popup.png
index fe17355341b322..3033c6f2dda5b3 100644
Binary files a/docs/assets/fr/MSC/MSC_popup.png and b/docs/assets/fr/MSC/MSC_popup.png differ
diff --git a/docs/assets/fr/MSC/msc_Backup.png b/docs/assets/fr/MSC/msc_Backup.png
index ebb0452c9193fc..04ac3a99ed1879 100644
Binary files a/docs/assets/fr/MSC/msc_Backup.png and b/docs/assets/fr/MSC/msc_Backup.png differ
diff --git a/docs/assets/fr/MSC/mscrepair2.png b/docs/assets/fr/MSC/mscrepair2.png
index c5daac47528ce2..40cf9df248a679 100644
Binary files a/docs/assets/fr/MSC/mscrepair2.png and b/docs/assets/fr/MSC/mscrepair2.png differ
diff --git a/docs/assets/fr/Menus/splash1.png b/docs/assets/fr/Menus/splash1.png
index 2fda9739222397..e1965b10502612 100644
Binary files a/docs/assets/fr/Menus/splash1.png and b/docs/assets/fr/Menus/splash1.png differ
diff --git a/docs/assets/fr/Menus/splash3.png b/docs/assets/fr/Menus/splash3.png
index aa786a67df6c8c..b5ed4e1d5786a5 100644
Binary files a/docs/assets/fr/Menus/splash3.png and b/docs/assets/fr/Menus/splash3.png differ
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 *\ In the "Certificate Assistant", be sure to select the appropriate options:  
+* **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:  
> 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:* 
-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 
- **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.
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.

-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)

-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.

-### 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*).

-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).

-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.

-Une fois le fichier de licence chargé, cliquez sur le bouton **Suivant**.
+With the license file loaded, click on **Next**.

-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:

-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:

-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:Historique
+History
-| Version | Modifications |
-| ------- | ------------- |
-| v18 R4 | Ajoutées |
+| Version | Changes |
+| ------- | ------- |
+| v18 R4 | Added |
Historique
+History
-| Version | Modifications |
-| ------- | ------------- |
-| v18 R4 | Ajoutées |
+| Version | Changes |
+| ------- | ------- |
+| v18 R4 | Added |
Historique
+History
-| Version | Modifications |
-| ------- | ------------- |
-| v18 R4 | Ajoutées |
+| Version | Changes |
+| ------- | ------- |
+| v18 R4 | Added |
Historique
+History
-| Version | Modifications |
-| ------- | ------------- |
-| v18 R4 | Ajoutées |
+| Version | Changes |
+| ------- | ------- |
+| v18 R4 | Added |
Historique
+History
-| Version | Modifications |
-| ------- | ------------- |
-| v18 R4 | Ajoutées |
+| Version | Changes |
+| ------- | ------- |
+| v18 R4 | Added |
Historique
+History
-| Version | Modifications |
-| ------- | ------------- |
-| v18 R4 | Ajoutées |
+| Version | Changes |
+| ------- | ------- |
+| v18 R4 | Added |
Historique
+History
-| Version | Modifications |
-| ------- | ------------- |
-| v18 R4 | Ajoutées |
+| Version | Changes |
+| ------- | ------- |
+| v18 R4 | Added |
Voici la table du ET logique :
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 :
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 :
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:
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:
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:
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 |
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
```
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
```
 
-Concaténation verticale
+Vertical concatenation
```4d
circle/rectangle //Place the rectangle under the circle
rectangle/circle //Place the circle under the rectangle
```
 
-Superposition exclusive
+Exclusive superimposition
```4d
-Pict3:=Pict1 & Pict2 // Superposer Pict2 à Pict1
+Pict3:=Pict1 & Pict2 // Superimposes Pict2 on top of Pict1
```

-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
```

-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
```

-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
```

-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
```

-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
```

-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
```

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.
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:

-### 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:

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
```
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
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("")
```
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.
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))
```
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).
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.
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
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:

-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 |
@@ -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.
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 |
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 **\
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.
 *circle.png* |
-| Haute résolution | Pixel density increased by a factor of 2 or 3. |
|
+| Standard Resolution | 1:1 pixel density. | **1x**2x 3x *circle@2x.png* 
*circle@3x.png*
 *circle.png* |
+| High Resolution | Pixel density increased by a factor of 2 or 3. |
|
@@ -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:2x 3x *circle@2x.png* 
*circle@3x.png*
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.
Minimum value: 0 |
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 |
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 |
---
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 |
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:

-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:

-## 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
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.

-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.

-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.

-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.

- - *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.

- - *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.

- - *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.

- - *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.

- - *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.

- - *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.

-#### 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.

-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.

-#### 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)
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).

-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.

-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):

-#### 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.

-#### 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:

-#### 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:

-#### 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:

> 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).

> 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.

- - *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.

-#### 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:

- - *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:

-#### 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.

- - *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.

-#### 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*

@@ -357,7 +357,7 @@ In macOS and Windows, a check box with the "Disclosure" button style appears as

-#### 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)
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.

-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
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:

-## 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’objet
(ex : This.firstName + This.lastName)* |
-| Sur clic alternatif |
(e.g., This.firstName + This.lastName)* |
+| Sur clic alternatif |
(ex : This.firstName + This.lastName)* |
-| Sur clic alternatif |
(e.g., This.firstName + This.lastName)* |
+| Sur clic alternatif |
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

-#### 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 :
```

-* 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)
```

-#### 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:
-
+
```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")
```

-* 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)
```

-#### 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:
-
+
````4d
C_OBJECT($ob)
OB SET($ob;"valueType";"text")
- OB SET($ob;"value";"vert")
+ OB SET($ob;"value";"blue")
OB SET($ob;"choiceListName";"colors")
````

-#### 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)
````
-
+
#### 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)

-#### 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

-* 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...")

-### 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.
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:

-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.

-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)
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:

-### 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
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:

-> 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
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.

-### 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

-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

-**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
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:

-  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.
+  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)
-
-
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 |
[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) |
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:

-#### 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)
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)
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)
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:

-> 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.\
- Par défaut, cette option n'est pas activée. + By default, this option is not enabled.
| - Nom + Name | - Type de données + Data Type | - Valeurs possibles + Possible Values |
|---|
@@ -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.
| - Nom + Name | - Type de données + Data Type | - Valeurs possibles + Possible Values |
|---|
- 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
- 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.
| - Nom + Name | - Type de données + Data Type | - Valeurs possibles + Possible Values | - Nom d'un tableau entier long + The name of a longint array |
|---|
- 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
- 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.
| - Nom + Name | - Type de données + Data Type | - Valeurs possibles + Possible Values | - Nom d'un tableau entier long. + The name of a longint array. |
|---|
- List Box - Colonne List Box + List Box - List Box Column
- 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
- Nom
+ Name
- Type de données
+ Data Type
- Valeurs possibles
+ Possible Values
@@ -734,13 +734,13 @@ Cette propriété permet d'utiliser des styles spécifiques dans la zone sélect
- true, false (par défaut).
+ true, false (default).
- Objets pris en charge
+ Objects Supported
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 |  |
-| Avec marge 13 pixels |  |
-> Cette propriété fonctionne avec la propriété [Marge verticale](#vertical-margin).
+| Without margin |  |
+| With 13-pixel margin |  |
+> 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:

-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. |  |
-| **Haut** | Le texte est placé au-dessus de l’icône. Le contenu du bouton est centré. |  |
-| **Droite** | Le texte est placé à droite de l’icône. Le contenu du bouton est aligné à gauche. |  |
-| **Bas** | Le texte est placé en-dessous de l’icône. Le contenu du bouton est centré. |  |
-| **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. |  |
+| Option | Description | Example |
+| ------------ | ------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------- |
+| **Left** | The text is placed to the left of the icon. The contents of the button are aligned to the right. |  |
+| **Top** | The text is placed above the icon. The contents of the button are centered. |  |
+| **Right** | The text is placed to the right of the icon. The contents of the button are aligned to the left. |  |
+| **Bottom** | The text is placed below the icon. The contents of the button are centered. |  |
+| **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. |  |
-#### 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:

-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 |
|:----------------------------------------------------:|:-------------------------------------------------------:|
|  |  |
-> 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
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
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).

-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):

-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.

-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.

-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.

- - *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.

- - *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. 
+ - *macOS* - the corners of the button are rounded. 
### 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.

@@ -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.

- - *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.

-### 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.

-### 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
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.

-[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
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.

-#### 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 : 
+Result: 
```
@@ -74,36 +74,36 @@ Résultat : 
"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 : 
+Result: 
-#### 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).

-#### 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
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).

-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
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:

-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.
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:

-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)
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.

-## 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)
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:

-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.

-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.

> 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:

@@ -104,49 +104,49 @@ You can modify the labels from the subform by assigning values to the *InvoiceAd

-### 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:

-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)
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:

-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:

-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)
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.

-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)
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 . 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)
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.

-## 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)
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.

-Apparaît ensuite l'assistant de bienvenue :
+The Welcome Wizard then appears:

-- 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!
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.
-
-
-
-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).
+
+
+
+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.
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.

-> 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.
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:  Otherwise, the following message is displayed:  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:  Otherwise, the following message is displayed: 
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.

- Vous serez ensuite invité à saisir une phrase secrète pour votre fichier de données :  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:  (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:  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:  (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. 
+## Encryption maintenance operations
+When an application is encrypted (see above), the Encrypt page provides several encryption maintenance operations, corresponding to standard scenarios. 
-### 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 : 
+- 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: 
-À 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 : 
+The data file is properly re-encrypted with the current key and a confirmation message is displayed: 
-### 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) :  Le fichier de données est entièrement déchiffré et un message de confirmation s'affiche : 
+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):  The data file is encrypted with the new key and the confirmation message is displayed. 
-### 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 : 
-> 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: 
+> 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).
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 :
-  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:
+  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:
-
-> Les informations présentes dans cette page sont disponibles en mode standard et en mode maintenance.
+
+> 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:
-
-> 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).
+
+> 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 :
+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:
-Une icône d’avertissement est également affichée sur le bouton de la Page [Compactage](compact.md) : 
+A warning icon is also displayed on the button of the [Compact](compact.md) page: 
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. 
+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. 
-## 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:
-
-> Si tous les enregistrements et toutes les tables ont été attribués, seule la zone principale est affichée.
+
+> 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:

-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
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.
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.

-> 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.

-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
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:

-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:
-|  | Vérification effectuée, pas de problème |
-| ------------------------------ | -------------------------------------------- |
-|  | Vérification effectuée, problèmes rencontrés |
-|  | Vérification partielle effectuée |
-|  | Vérification non effectuée |
+|  | Verification carried out with no problem |
+| ------------------------------ | ---------------------------------------------- |
+|  | Verification carried out, problems encountered |
+|  | Verification partially carried out |
+|  | 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.
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:
-
+
-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.

-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.
-
+
-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.
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  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  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  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  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  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  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 :  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 :
-  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:  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:
+  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.
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

-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.

-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.
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:

-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 :
->
-> 
->
-> 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 :
->
-> 
->
-> 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:
+
+
+
+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:
+
+
+
+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
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:

-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 |
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:

-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
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:

-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:

-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:

-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:

-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:

-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:

@@ -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é.

+1. Two processes load the same entity.

-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.

+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.

-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.

+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.

-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:

-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 :

-* Exemple avec un verrouillage défini par une méthode ORDA :

+* Example with a lock set by a classic command:

+* Example with a lock set by an ORDA method:

-## 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
```
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

-## 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
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.

-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):

-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):

-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.

-> 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 : 
+> 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: 
-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:

-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):

-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:

-### É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:

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).
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.

-### 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  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  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. 
+To delete a user, select it then click the deletion button or use the **Delete** command of the context menu. 
-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  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  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:

-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.

-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”. 
+- The General Management group contains only “high-level” users. 
-- Le groupe Dir. finance contient les utilisateurs du groupe Direction générale. 
+- 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. 
-- Le groupe Comptabilité contient des opérateurs de saisie mais aussi les utilisateurs des groupes Dir. finance et donc Direction générale. 
+- 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. 
-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.
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:

-> 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:

-## 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).
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
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** :

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

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:

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

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
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: 
-- if an open file is edited concurrently from different locations, 4D displays an alert dialog when trying to save the changes:
- - **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: 
+ - **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).
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:

-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.

-- 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.

-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.

-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:

-| 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:
```

@@ -189,18 +189,24 @@ The [documentation](https://doc.4d.com) of the command ....
[](https://blog.4d.com)
```
-[](https://blog.4d.com)
+[](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 : 
+- Explorer view: 
-- Vue de l’Éditeur de code : 
+- Code editor view: 
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:
````
{
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.
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
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**:
````
{
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
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:
```
{
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**:
````
[
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**

-**OU**
+**OR**

@@ -78,21 +78,21 @@ Vous trouverez ci-dessous une représentation des opérateurs logiques basés su

-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`
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
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"
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`
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
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:
```
{
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
]
}
```
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": {
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: {
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"`
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"`
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
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
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
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:
````
{
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
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):

-### 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
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.
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)
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.

-> 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** :  Procédez ainsi pour chaque table dont l'exposition doit être modifiée.
+2. Uncheck the **Expose as REST resource** option:  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.  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.  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.
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
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)

-> 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:

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:**
```
{
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 selection0>) 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")`
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 : 
-- Icône de l'Administrateur : 
+- Designer icon: 
+- Administrator icon: 
-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.

-### 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  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  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. 
+To delete a user, select it then click the deletion button or use the **Delete** command of the context menu. 
-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  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  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:

-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.

-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”. 
+- The General Management group contains only “high-level” users. 
-- Le groupe Dir. finance contient les utilisateurs du groupe Direction générale. 
+- 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. 
-- Le groupe Comptabilité contient des opérateurs de saisie mais aussi les utilisateurs des groupes Dir. finance et donc Direction générale. 
+- 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. 
-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.
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:

-## 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.

-> 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.
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 |