diff --git a/i18n/es/docusaurus-plugin-content-docs/current/API/WebServerClass.md b/i18n/es/docusaurus-plugin-content-docs/current/API/WebServerClass.md
index 253c6616ecccf2..6fed6a0c01983c 100644
--- a/i18n/es/docusaurus-plugin-content-docs/current/API/WebServerClass.md
+++ b/i18n/es/docusaurus-plugin-content-docs/current/API/WebServerClass.md
@@ -23,6 +23,7 @@ Ofrecen las siguientes propiedades y funciones:
| [](#corssettings)
|
| [](#debuglog)
|
| [](#defaulthomepage)
|
+| [](#handlers)
|
| [](#hstsenabled)
|
| [](#hstsmaxage)
|
| [](#httpcompressionlevel)
|
@@ -46,6 +47,7 @@ Ofrecen las siguientes propiedades y funciones:
| [](#opensslversion)
|
| [](#perfectforwardsecrecy)
|
| [](#rootfolder)
|
+| [](#rules)
|
| [](#scalablesession)
|
| [](#sessioncookiedomain)
|
| [](#sessioncookiename)
|
@@ -169,6 +171,26 @@ El nombre de la página de i
+
+
+## .handlers
+
+Historia
+
+| Lanzamiento | Modificaciones |
+| ----------- | -------------- |
+| 21 | Añadidos |
+
+
+
+**.handlers** : Collection
+
+*Propiedad de sólo lectura*
+
+A collection of custom HTTP handler objects. An HTTP handler object contains a listened URL pattern, a handled verb, and the code to be called. HTTP handlers can be defined through a HTTPHandlers.json file or the *settings* parameter of the [`.start()`](#start) function. For more information, please refer to the [HTTP Request handler](../WebServer/http-request-handler.md) page.
+
+
+
## .HSTSEnabled
@@ -457,6 +479,26 @@ La ruta de la carpeta raíz del s
+
+
+## .rules
+
+Historia
+
+| Lanzamiento | Modificaciones |
+| ----------- | -------------- |
+| 21 | Añadidos |
+
+
+
+**.rules** : Collection
+
+*Propiedad de sólo lectura*
+
+A collection of rule objects currently handled to customize HTTP headers. A rule object contains a "regexPattern" property, as well as an action name with a value. HTTP rules can be defined through a HTTPRules.json file or the *settings* parameter of the [`.start()`](#start) function. For more information, please refer to the [HTTP Rules](../WebServer/http-rules.md) page.
+
+
+
## .scalableSession
diff --git a/i18n/es/docusaurus-plugin-content-docs/current/Debugging/debugLogFiles.md b/i18n/es/docusaurus-plugin-content-docs/current/Debugging/debugLogFiles.md
index 578200aea20193..63614024cc5110 100644
--- a/i18n/es/docusaurus-plugin-content-docs/current/Debugging/debugLogFiles.md
+++ b/i18n/es/docusaurus-plugin-content-docs/current/Debugging/debugLogFiles.md
@@ -465,7 +465,7 @@ Como iniciar este historial:
- Utilice el comando `SET DATABASE PARAMETER`:
```4d
- SET DATABASE PARAMETER(TCPUDP log; 1)
+ SET DATABASE PARAMETER(TCPUDP log recording; 1)
```
- Cómo activar el archivo
diff --git a/i18n/es/docusaurus-plugin-content-docs/current/FormEditor/forms.md b/i18n/es/docusaurus-plugin-content-docs/current/FormEditor/forms.md
index f780ef9be2a24d..dc0b5a8bdb81ab 100644
--- a/i18n/es/docusaurus-plugin-content-docs/current/FormEditor/forms.md
+++ b/i18n/es/docusaurus-plugin-content-docs/current/FormEditor/forms.md
@@ -96,6 +96,73 @@ No hay restricciones en el número de páginas que puede tener un formulario. El
Un formulario multipáginas tiene una página de fondo y varias páginas de visualización. Los objetos que se colocan en la página de fondo pueden ser visibles en todas las páginas de visualización, pero sólo se pueden seleccionar y editar en la página de fondo. En los formularios multipágina, debe colocar su paleta de botones en la página de fondo. También es necesario incluir uno o más objetos en la página de fondo que ofrezcan las herramientas de navegación para el usuario.
+## Fluent UI rendering (Developer Preview)
+
+On Windows, 4D supports **Fluent UI** form rendering, Microsoft's modern graphical user interface design, based upon **WinUI 3** technology. **WinUI 3** is the foundation of the Windows App SDK and represents the upcoming Windows graphical interfaces.
+
+:::caution Vista previa para desarrolladores
+
+Fluent UI support is currently in the Developer Preview phase. No debe utilizarse en producción.
+
+:::
+
+:::info macOS
+
+This feature can only be used on Windows. On macOS, it is ignored.
+
+:::
+
+### Fluent UI rendering availability
+
+The Fluent UI rendering is available in the following execution environments only:
+
+- Windows with [Windows App SDK](https://learn.microsoft.com/en-us/windows/apps/windows-app-sdk/downloads) version 1.7.3 installed (you need to install this SDK on any Windows machine displaying your forms).
+- Fusionado aplicación 4D [autónomo](../Desktop/building.md#build-stand-alone-application) o [cliente](../Desktop/building.md#build-client-application)
+- [**Test application** feature](../Menus/bars.md#previewing-menu-bars) available from the Run menu.
+
+:::note
+
+If the Windows App SDK is not properly installed, 4D will render all your forms in classic mode with no error.
+
+:::
+
+### Enabling the Fluent UI rendering
+
+You can enable the Fluent UI rendering mode at the application level or at the form level. Form setting has priority over application setting.
+
+#### Application setting
+
+Check the **Use Fluent UI on Windows** option in the "Interface" page of the Settings dialog box.
+
+
+
+In this case, the Fluent UI rendering mode will be used by default on Windows for all forms.
+
+#### Form setting
+
+Each form can define its own rendering via the **Widget appearance** property. Las siguientes opciones están disponibles:
+
+- **Inherited**: inherits the global application setting (default),
+- **Classic**: uses the classic Windows style,
+- **Fluent UI**: enables the modern rendering based on Fluent UI.
+ 
+
+The corresponding [JSON form property](./properties_JSONref.md) is `fluentUI` with value undefined (i.e. inherited, default value), "true" or "false".
+
+### Features and limitations
+
+Fluent UI rendering offers modern and attractive controls, support of dark/light system themes, smoother rendering optimized for high-resolution displays, and consistent user experience aligned with recent Microsoft applications.
+
+When using 4D forms with Fluent UI rendering, you need to pay attention to the following points:
+
+- The `FORM Window theme` command returns the actual display theme of the current form. Possible values: "Classic" or "FluentUI". If there is no current form or the command is called on macOS, and empty string is returned.
+- If [`GET STYLE SHEET INFO`](../commands-legacy/get-style-sheet-info.md) is called in the context of a form, the information returned relates to the current appearance of the form (Classic or FluentUI). If the command is called outside the context of a form, the information returned relates to the [global project settings](#application-setting).
+- [`SET MENU ITEM STYLE`](../commands-legacy/set-menu-item-style.md) with `Underline` *itemStyle* parameter is not supported (ignored) for pop up menus.
+- A focus ring can be added to picture and text [inputs](../FormObjects/input_overview.md).
+- [Stepper](../FormObjects/stepper.md) form object does not support [double-click event](../Events/onDoubleClicked.md).
+- [Circle buttons](../FormObjects/button_overview.md#circle) are supported (similar as macOS).
+- The [`WA ZOOM IN`](../commands-legacy/wa-zoom-in.md) / [`WA ZOOM OUT`](../commands-legacy/wa-zoom-out.md) commands are not supported in Web areas with system rendering engine.
+
## Formularios heredados
Los formularios 4D pueden utilizar y ser utilizados como "formularios heredados", lo que significa que todos los objetos de *Formulario A* pueden ser utilizados en *Formulario B*. En este caso, *Formulario B* "hereda" los objetos de *Formulario A*.
diff --git a/i18n/es/docusaurus-plugin-content-docs/current/Notes/updates.md b/i18n/es/docusaurus-plugin-content-docs/current/Notes/updates.md
index e7f1f4b91f0b84..b730b0bbfb1492 100644
--- a/i18n/es/docusaurus-plugin-content-docs/current/Notes/updates.md
+++ b/i18n/es/docusaurus-plugin-content-docs/current/Notes/updates.md
@@ -9,12 +9,17 @@ Lea [**Novedades en 4D 21**](https://blog.4d.com/en-whats-new-in-4d-21/), la ent
#### Lo más destacado
-- Support of **AI Vector Searches** in the [`query()`](../API/DataClassClass.md#query-by-vector-similarity) function and in the [`$filter`](../REST/$filter.md#vector-similarity) REST API.
+- Support of AI Vector Searches in the [`query()`](../API/DataClassClass.md#query-by-vector-similarity) function and in the [`$filter`](../REST/$filter.md#vector-similarity) REST API.
- Support of TLS encryption for the [4D.TCPConnection](../API/TCPConnectionClass.md#4dtcpconnectionnew) class.
+- Servidor Web:
+ - new [HTTP rules](../WebServer/http-rules.md) to customize HTTP response headers,
+ - ability to set [HTTP request handlers](../WebServer/http-request-handler.md) using a `handlers` property in the *settings* parameter of the Web server [`start()`](../API/WebServerClass.md#start) function,
+ - the Web server object contains new [`rules`](../API/WebServerClass.md#rules) and [`handlers`](../API/WebServerClass.md#handlers) properties.
+- New [ORDA events on data](../ORDA/orda-events.md): validateSave, saving, afterSave, validateDrop, dropping, afterDrop.
- New option allowing to use certificates from Windows Certificate Store instead of a local certificates folder in [`HTTPRequest`](../API/HTTPRequestClass.md#4dhttprequestnew) and [`HTTPAgent`](../API/HTTPAgentClass.md#4dhttpagentnew) classes.
- Cliente/servidor:
- - use Qodly pages in Web areas and [share the remote client session](../Desktop/clientServer.md#sharing-the-session-with-qodly-pages-in-web-areas).
- - the [QUIC network layer](../settings/client-server.md#network-layer) has been enhanced to handle network interface changes transparently, for example when you travel with your laptop. See [this blog post](https://blog.4d.com/work-and-move-with-quic-and-network-switching).
+ - You can display Qodly pages in Web areas and [share the remote client session](../Desktop/clientServer.md#sharing-the-session-with-qodly-pages-in-web-areas).
+ - The [QUIC network layer](../settings/client-server.md#network-layer) has been enhanced to handle network interface changes transparently, for example when you travel with your laptop. See [this blog post](https://blog.4d.com/work-and-move-with-quic-and-network-switching).
- You can now [create components directly from the host project](../Extensions/develop-components.md#creating-components) and [edit their code from a dedicated tab](../Extensions/develop-components.md#editing-all-component-code) in the 4D Explorer without leaving or restarting the project.
- The 4D product activation step has been simplified and automated during [sign-in](../GettingStarted/Installation.md#sign-in).
- 4D AIKit component: new features to [invoke a specific tool automatically](../aikit/Classes/OpenAIChatHelper.md#registertool) and [specify a response format](../aikit/Classes/OpenAIChatCompletionsParameters.md#response-format).
@@ -22,6 +27,10 @@ Lea [**Novedades en 4D 21**](https://blog.4d.com/en-whats-new-in-4d-21/), la ent
- New "trim" commands to remove leading and trailing spaces from a string: [`Trim`](../commands/trim.md), [`Trim start`](../commands/trim-start.md), and [`Trim end`](../commands/trim-end.md).
- Los comandos [`Num`](../commands/num.md) y [`String`](../commands/string.md) han sido actualizados para soportar conversiones en diferentes bases (radix).
+#### Vista previa para desarrolladores
+
+[**Fluent UI** rendering for 4D forms](../FormEditor/forms.md#fluent-ui-rendering-developer-preview) is proposed in Developer Preview during the beta test program.
+
#### Cambios de comportamiento
:::caution Index rebuild
diff --git a/i18n/es/docusaurus-plugin-content-docs/current/ORDA/orda-events.md b/i18n/es/docusaurus-plugin-content-docs/current/ORDA/orda-events.md
index 180b84a719e117..884af1066d3c9f 100644
--- a/i18n/es/docusaurus-plugin-content-docs/current/ORDA/orda-events.md
+++ b/i18n/es/docusaurus-plugin-content-docs/current/ORDA/orda-events.md
@@ -16,6 +16,12 @@ ORDA events are functions that are automatically invoked by ORDA each time entit
No se puede activar directamente la ejecución de la función de evento. Events are called automatically by ORDA based on user actions or operations performed through code on entities and their attributes.
+:::tip Entrada de blog relacionada
+
+[ORDA – Handle an event-driven logic during data persistence actions](https://blog.4d.com/orda-handle-an-event-driven-logic-during-data-persistence-actions)
+
+:::
+
:::info Nota de compatibilidad
ORDA events in the datastore are equivalent to triggers in the 4D database. However, actions triggered at the 4D database level using the 4D classic language commands or standard actions do not trigger ORDA events.
@@ -112,12 +118,6 @@ When an error occurs in an event, the other events are stopped at the first rais
## Event function description
-:::tip Entrada de blog relacionada
-
-[ORDA – Handle an event-driven logic during data persistence actions](https://blog.4d.com/orda-handle-an-event-driven-logic-during-data-persistence-actions)
-
-:::
-
### `Function event touched`
#### Sintaxis
diff --git a/i18n/es/docusaurus-plugin-content-docs/current/Project/architecture.md b/i18n/es/docusaurus-plugin-content-docs/current/Project/architecture.md
index a68cafc8accf20..e0ab5ee9560f84 100644
--- a/i18n/es/docusaurus-plugin-content-docs/current/Project/architecture.md
+++ b/i18n/es/docusaurus-plugin-content-docs/current/Project/architecture.md
@@ -64,6 +64,7 @@ Este archivo de texto también puede contener llaves de configuración, en parti
| filters.json | Filtros definidos | JSON |
| dependencies.json | Nombres de [componentes a cargar](components.md) en el proyecto | JSON |
| HTTPHandlers.json | Personalizado [HTTP request handlers](../WebServer/http-request-handler.md) definido para el servidor web | JSON |
+| HTTPRules.json | Custom [HTTP response headers](../WebServer/http-responses.md) defined for the web server | JSON |
| styleSheets.css | Hojas de estilo CSS | CSS |
| styleSheets_mac.css | Hojas de estilo css de Mac (a partir de una base binaria convertida) | CSS |
| styleSheets_windows.css | Hojas de estilo css en Windows (a partir de una base binaria convertida) | CSS |
diff --git a/i18n/es/docusaurus-plugin-content-docs/current/WebServer/http-request-handler.md b/i18n/es/docusaurus-plugin-content-docs/current/WebServer/http-request-handler.md
index 979c997dc5f3c5..facb115670bf95 100644
--- a/i18n/es/docusaurus-plugin-content-docs/current/WebServer/http-request-handler.md
+++ b/i18n/es/docusaurus-plugin-content-docs/current/WebServer/http-request-handler.md
@@ -17,22 +17,33 @@ Custom HTTP request handlers meet various needs, including:
## Requisitos
-Se soportan gestores de solicitudes HTTP personalizados:
+Custom HTTP Request handlers are supported in the following context:
-- cuando las [sesiones escalables](./sessions.md#enabling-web-sessions) están habilitadas,
-- with the main Web Server only (HTTP Request handlers that may have been defined in [Web Servers of components](../WebServer/webServerObject.md) are ignored).
+- [scalable sessions](./sessions.md#enabling-web-sessions) or [no sessions](../settings/web.md#no-sessions) are enabled,
+- a web server run locally by 4D or 4D Server, including those [run by components](./webServerObject.md).
:::warning
-[Por defecto](../ORDA/privileges.md#default-file) por razones de seguridad, el acceso externo al datastore no está permitido en 4D. You need to configure the [ORDA privileges](../ORDA/privileges.md) to allow HTTP requests.
+For security reasons, external access to the datastore can be disallowed in 4D. You need to configure the [ORDA privileges](../ORDA/privileges.md) to allow HTTP requests.
:::
-## Archivo HTTPHandlers.json
+## How to set handlers
-Define sus manejadores de petición HTTP personalizados en un archivo de configuración llamado **HTTPHandlers.json** almacenado en la carpeta [`Project/Sources`](../Project/architecture.md#sources).
+You can declare HTTP Request handlers:
-This file contains all listened URL patterns, the handled verbs, and the code to be called. Los administradores se proporcionan en forma de colección en formato JSON.
+- in a configuration file named **HTTPHandlers.json** stored in the [`Project/Sources`](../Project/architecture.md#sources) folder of the project. HTTP Request handlers are loaded and applied in the main Web server once it is started.
+- using a [`.handlers`](../API/WebServerClass.md#handlers) property set in the *settings* parameter of the [start()](../API/WebServerClass.md#start) function, for any web server object:
+
+```4d
+WEB Server.start($settings.handlers) //set rules at web server startup
+```
+
+If both a **HTTPHandlers.json** file and a call to the [`WEB Server`](../commands/web-server.md) command with a valid `$settings.handlers` are used, the `WEB Server` command has priority.
+
+The json file (or the object in the *settings* parameter) contains all listened URL patterns, the handled verbs, and the code to be called.
+
+Handlers are provided as a collection.
At runtime, the first pattern matching the URL is executed, the others are ignored.
diff --git a/i18n/es/docusaurus-plugin-content-docs/current/WebServer/http-rules.md b/i18n/es/docusaurus-plugin-content-docs/current/WebServer/http-rules.md
new file mode 100644
index 00000000000000..e087d1672ba793
--- /dev/null
+++ b/i18n/es/docusaurus-plugin-content-docs/current/WebServer/http-rules.md
@@ -0,0 +1,222 @@
+---
+id: http-rules
+title: HTTP Rules
+---
+
+You can define HTTP rules to control HTTP response headers for any requests received by the 4D web server, including REST requests. You can add, modify, or remove HTTP headers, send redirections or set the HTTP status. This feature is useful to implement security policies based upon the handling of headers.
+
+To define HTTP rules, you just need to write some RegEx to declare the URL patterns you want to control, as well as how to modify response headers. You can set these rules using a `HTTPRules.json` file stored in the project folder, or using the *settings* parameter [`start()`](../API/WebServerClass.md#start) function of the web server object.
+
+## Requisitos
+
+HTTP rules are supported in the following contexts:
+
+- [scalable sessions](./sessions.md#enabling-web-sessions) or [no sessions](../settings/web.md#no-sessions) are enabled,
+- a web server run locally by 4D or 4D Server, including those [run by components](./webServerObject.md).
+
+## How to set rules
+
+You can declare HTTP response rules:
+
+- in a configuration file named **HTTPRules.json** stored in the [`Project/Sources`](../Project/architecture.md#sources) folder of the project. Rules are loaded and applied in the main Web server once it is started.
+- using a [`.rules`](../API/WebServerClass.md#rules) property set in the *settings* parameter of the [`start()`](../API/WebServerClass.md#start) function, for any web server object:
+
+```4d
+WEB Server.start($settings.rules) //set rules at web server startup
+```
+
+If both a **HTTPRules.json** file and a call to the [`WEB Server`](../commands/web-server.md) command with a valid `$settings.rules` are used, the `WEB Server` command has priority.
+
+If the URI of the request does not match any of the RegEx patterns, the web server returns a default response.
+
+## Rules Definition
+
+The **HTTPRules.json** file or the [`.rules`](../API/WebServerClass.md#rules) property must contain a collection of **rule objects**.
+
+A rule object is defined by:
+
+- a RegEx describing a URL pattern, e.g. "^(.\*\\.(jpg|jpeg|png|gif))"
+- the name of the action to execute for the HTTP response, e.g. "removeHeaders"
+- the value of the action, e.g. "X-Unwanted-Header1"
+
+Other properties are ignored.
+
+### Patrones de la URL
+
+URL patterns are given using **regular expressions**. To declare a regular expression pattern, use the "RegExPattern" property name.
+
+Ex: `"RegExPattern": "/Test/Authorized/(.*)"`
+
+When the web server receives a request, **all** URL patterns are triggered sequentially in the given order, and all matching patterns are executed. In case of several actions modifying similar resources, the last executed action is taken into account.
+
+### Acciones
+
+The following action keywords are supported:
+
+| Palabras clave | Tipo de valor | Descripción |
+| --------------- | --------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `removeHeaders` | Text or Collection of texts | Header(s) to remove from the HTTP responses. If a header to remove does not exist in the response header, it is ignored. |
+| `addHeaders` | Object | Name (text) and value (text) of header(s) to add to the HTTP responses. |
+| `setHeaders` | Object | Name (text) and value (text) of header(s) to modify in the HTTP responses. If a header to modify does not exist in the response header, it is added. |
+| `denyAccess` | Boolean | true to deny access to the resource, false to allow access. When the access to a resource is denied, the web server returns a 403 status by default |
+| `redirect` | Text | Redirection URL. When a redirection is triggered, the web server returns a 302 status by default |
+| `status` | Number | HTTP status |
+
+### Non-modifiable headers
+
+The following headers could not be modified by the `removeHeaders`, `setHeaders`, or `addHeaders` actions:
+
+- "Date",
+- "Content-Length"
+
+Modifying these headers do not generate errors, however modifications will be ignored.
+
+### Current rules
+
+You can know the current rules using the [`.rules` property of the Web Server object](../API/WebServerClass.md#rules):
+
+```
+var $rules : Collection
+$rules:=WEB Server.rules //current rules
+```
+
+## Ejemplos
+
+Rules can be set using a `HTTPRules.json` file or the *settings* parameter of the [`.start()`](../API/WebServerClass.md#start) web server function.
+
+### Using a HTTPRules.json file
+
+```json
+
+[
+ {
+ "comment": "All requests: allow GET method for, remove 'Server' header and set security headers",
+ "regexPattern": "/(.*)",
+ "setHeaders": {
+ "Allow": "GET",
+ "X-Frame-Options": "SAMEORIGIN",
+ "Content-Security-Policy": "default-src 'self'"
+ },
+ "removeHeaders": [
+ "Server"
+ ]
+ },
+ {
+ "comment": "REST requests: allow POST method",
+ "regexPattern": "/rest/(.*)",
+ "addHeaders": {
+ "Allow": "POST"
+ }
+ },
+ {
+ "comment": "HTML files in 'doc' folder: set cache control",
+ "regexPattern": "/docs/(.*).html",
+ "setHeaders": {
+ "Cache-Control": "max-age=3600"
+ },
+ "removeHeaders": [
+ "X-Powered-By"
+ ]
+ },
+ {
+ "comment": "Status 503 on 'maintenance' page",
+ "regexPattern": "^/maintenance.html",
+ "status": 503
+ },
+ {
+ "comment": "Redirect CSS and JS files",
+ "regexPattern": "^(.*\\\\.(css|js))",
+ "redirect": "https://cdn.example.com/"
+ },
+ {
+ "comment": "Redirect images with permanent status code",
+ "regexPattern": "^(.*\\\\.(jpg|jpeg|png|gif))",
+ "redirect": "https://cdn.example.com/images/",
+ "status": 301
+ },
+ {
+ "comment": "Deny access for all resources placed in the 'private' folder",
+ "regexPattern": "/private/(.*)",
+ "denyAccess": true
+ },
+ {
+ "comment": "Allow access to all resources placed in the 'private/allowed' folder",
+ "regexPattern": "/private/allowed/(.*)",
+ "denyAccess": false
+ }
+]
+
+```
+
+### Using a *settings* parameter
+
+```4d
+var $rule:={}
+
+var $settings:={}
+
+$settings.rules:=[]
+
+$rule:={}
+$rule.comment:="All requests: allow GET method for, remove 'Server' header and set security headers"
+$rule.regexPattern:="/(.*)"
+$rule.setHeaders:={Allow: "GET"}
+$rule.setHeaders["X-Frame-Options"]:="SAMEORIGIN"
+$rule.setHeaders["Content-Security-Policy"]:="default-src 'self'"
+$rule.removeHeaders:=["Server"]
+$settings.rules.push($rule)
+
+$rule:={}
+$rule.comment:="REST requests: allow POST method"
+$rule.regexPattern:="/rest/(.*)"
+$rule.addHeaders:={Allow: "POST"}
+$settings.rules.push($rule)
+
+$rule:={}
+$rule.comment:="HTML files in 'doc' folder: set cache control"
+$rule.regexPattern:="/docs/(.*).html"
+$rule.setHeaders:={}
+$rule.setHeaders["Cache-Control"]:="max-age=3600"
+$rule.removeHeaders:=["X-Powered-By"]
+$settings.rules.push($rule)
+
+$rule:={}
+$rule.comment:="Status 503 on 'maintenance' page"
+$rule.regexPattern:="^/maintenance.html"
+$rule.status:=503
+$settings.rules.push($rule)
+
+$rule:={}
+$rule.comment:="Redirect CSS and JS files"
+$rule.regexPattern:="^(.*\\\\.(css|js))"
+$rule.redirect:="https://cdn.example.com/"
+$settings.rules.push($rule)
+
+$rule:={}
+$rule.comment:="Redirect images with permanent status code"
+$rule.regexPattern:="^(.*\\\\.(jpg|jpeg|png|gif))"
+$rule.redirect:="https://cdn.example.com/images/"
+$rule.status:=301
+$settings.rules.push($rule)
+
+$rule:={}
+$rule.comment:="Deny access for all resources placed in the 'private' folder"
+$rule.regexPattern:="/private/(.*)"
+$rule.denyAccess:=True
+$settings.rules.push($rule)
+
+$rule:={}
+$rule.comment:="Allow access to all resources placed in the 'private/allowed' folder"
+$rule.regexPattern:="/private/allowed/(.*)"
+$rule.denyAccess:=False
+$settings.rules.push($rule)
+
+$return:=WEB Server.start($settings)
+
+```
+
+:::tip Entrada de blog relacionada
+
+[New Way to Control Your HTTP Responses](https://blog.4d.com/new-way-to-control-your-http-responses/)
+
+:::
diff --git a/i18n/es/docusaurus-plugin-content-docs/current/assets/en/FormEditor/winui-form.png b/i18n/es/docusaurus-plugin-content-docs/current/assets/en/FormEditor/winui-form.png
new file mode 100644
index 00000000000000..44f0b153852027
Binary files /dev/null and b/i18n/es/docusaurus-plugin-content-docs/current/assets/en/FormEditor/winui-form.png differ
diff --git a/i18n/es/docusaurus-plugin-content-docs/current/assets/en/FormEditor/winui-setting.png b/i18n/es/docusaurus-plugin-content-docs/current/assets/en/FormEditor/winui-setting.png
new file mode 100644
index 00000000000000..ad71386b9acada
Binary files /dev/null and b/i18n/es/docusaurus-plugin-content-docs/current/assets/en/FormEditor/winui-setting.png differ
diff --git a/i18n/es/docusaurus-plugin-content-docs/current/assets/en/FormObjects/fluentui-form.png b/i18n/es/docusaurus-plugin-content-docs/current/assets/en/FormObjects/fluentui-form.png
new file mode 100644
index 00000000000000..00d3b1d2d663ef
Binary files /dev/null and b/i18n/es/docusaurus-plugin-content-docs/current/assets/en/FormObjects/fluentui-form.png differ
diff --git a/i18n/es/docusaurus-plugin-content-docs/current/assets/en/FormObjects/fluentui-setting.png b/i18n/es/docusaurus-plugin-content-docs/current/assets/en/FormObjects/fluentui-setting.png
new file mode 100644
index 00000000000000..e8c5e02f62431f
Binary files /dev/null and b/i18n/es/docusaurus-plugin-content-docs/current/assets/en/FormObjects/fluentui-setting.png differ
diff --git a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Debugging/debugLogFiles.md b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Debugging/debugLogFiles.md
index 694c4bb85ced73..d6b32a4f015be7 100644
--- a/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Debugging/debugLogFiles.md
+++ b/i18n/es/docusaurus-plugin-content-docs/version-20-R10/Debugging/debugLogFiles.md
@@ -465,7 +465,7 @@ Como iniciar este historial:
- Utilice el comando `SET DATABASE PARAMETER`:
```4d
- SET DATABASE PARAMETER(TCPUDP log; 1)
+ SET DATABASE PARAMETER(TCPUDP log recording; 1)
```
- Cómo activar el archivo
diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/API/WebServerClass.md b/i18n/fr/docusaurus-plugin-content-docs/current/API/WebServerClass.md
index 7a2a80aed93f83..cc56372ee96210 100644
--- a/i18n/fr/docusaurus-plugin-content-docs/current/API/WebServerClass.md
+++ b/i18n/fr/docusaurus-plugin-content-docs/current/API/WebServerClass.md
@@ -23,6 +23,7 @@ Leurs propriétés et fonctions sont les suivantes :
| [](#corssettings)
|
| [](#debuglog)
|
| [](#defaulthomepage)
|
+| [](#handlers)
|
| [](#hstsenabled)
|
| [](#hstsmaxage)
|
| [](#httpcompressionlevel)
|
@@ -46,6 +47,7 @@ Leurs propriétés et fonctions sont les suivantes :
| [](#opensslversion)
|
| [](#perfectforwardsecrecy)
|
| [](#rootfolder)
|
+| [](#rules)
|
| [](#scalablesession)
|
| [](#sessioncookiedomain)
|
| [](#sessioncookiename)
|
@@ -169,6 +171,26 @@ Le nom de la page home par d
+
+
+## .handlers
+
+Historique
+
+| Release | Modifications |
+| ------- | ------------- |
+| 21 | Ajout |
+
+
+
+**.handlers** : Collection
+
+*Propriété en lecture seulement.*
+
+A collection of custom HTTP handler objects. An HTTP handler object contains a listened URL pattern, a handled verb, and the code to be called. HTTP handlers can be defined through a HTTPHandlers.json file or the *settings* parameter of the [`.start()`](#start) function. For more information, please refer to the [HTTP Request handler](../WebServer/http-request-handler.md) page.
+
+
+
## .HSTSEnabled
@@ -457,6 +479,26 @@ Le chemin du dossier racine du se
+
+
+## .rules
+
+Historique
+
+| Release | Modifications |
+| ------- | ------------- |
+| 21 | Ajout |
+
+
+
+**.rules** : Collection
+
+*Propriété en lecture seulement.*
+
+A collection of rule objects currently handled to customize HTTP headers. A rule object contains a "regexPattern" property, as well as an action name with a value. HTTP rules can be defined through a HTTPRules.json file or the *settings* parameter of the [`.start()`](#start) function. For more information, please refer to the [HTTP Rules](../WebServer/http-rules.md) page.
+
+
+
## .scalableSession
diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/Debugging/debugLogFiles.md b/i18n/fr/docusaurus-plugin-content-docs/current/Debugging/debugLogFiles.md
index ef229096fa650a..538e9431184418 100644
--- a/i18n/fr/docusaurus-plugin-content-docs/current/Debugging/debugLogFiles.md
+++ b/i18n/fr/docusaurus-plugin-content-docs/current/Debugging/debugLogFiles.md
@@ -466,7 +466,7 @@ Pour lancer ce journal :
- Utilisez la commande `SET DATABASE PARAMETER` :
```4d
- SET DATABASE PARAMETER(TCPUDP log; 1)
+ SET DATABASE PARAMETER(TCPUDP log recording; 1)
```
- Le fichier de configuration du journal est un fichier `.json` qui doit respecter le schéma json suivant :
diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/FormEditor/forms.md b/i18n/fr/docusaurus-plugin-content-docs/current/FormEditor/forms.md
index bc7cb2ef2796ea..aa94b2fc1eac72 100644
--- a/i18n/fr/docusaurus-plugin-content-docs/current/FormEditor/forms.md
+++ b/i18n/fr/docusaurus-plugin-content-docs/current/FormEditor/forms.md
@@ -96,6 +96,73 @@ Il n'y a aucune restriction sur le nombre de pages qu'un formulaire peut conteni
Un formulaire multi-pages contient à la fois une page d'arrière-plan et plusieurs pages d'affichage. Les objets placés sur la page d'arrière-plan peuvent être visibles sur toutes les pages d'affichage, mais il ne peuvent être sélectionnés et modifiés que sur la page d'arrière-plan. Dans les formulaires multi-pages, vous devez placer votre palette de boutons sur la page d'arrière-plan. Vous devez également inclure un ou plusieurs objets sur la page d'arrière-plan qui fournissent à l'utilisateur des outils de navigation de page.
+## Fluent UI rendering (Developer Preview)
+
+On Windows, 4D supports **Fluent UI** form rendering, Microsoft's modern graphical user interface design, based upon **WinUI 3** technology. **WinUI 3** is the foundation of the Windows App SDK and represents the upcoming Windows graphical interfaces.
+
+:::caution Developer Preview
+
+Fluent UI support is currently in the Developer Preview phase. Il ne doit pas être utilisé en production.
+
+:::
+
+:::info macOS
+
+This feature can only be used on Windows. On macOS, it is ignored.
+
+:::
+
+### Fluent UI rendering availability
+
+The Fluent UI rendering is available in the following execution environments only:
+
+- Windows with [Windows App SDK](https://learn.microsoft.com/en-us/windows/apps/windows-app-sdk/downloads) version 1.7.3 installed (you need to install this SDK on any Windows machine displaying your forms).
+- Application 4D fusionnée [autonome](../Desktop/building.md#build-stand-alone-application) ou [cliente](../Desktop/building.md#build-client-application)
+- [**Test application** feature](../Menus/bars.md#previewing-menu-bars) available from the Run menu.
+
+:::note
+
+If the Windows App SDK is not properly installed, 4D will render all your forms in classic mode with no error.
+
+:::
+
+### Enabling the Fluent UI rendering
+
+You can enable the Fluent UI rendering mode at the application level or at the form level. Form setting has priority over application setting.
+
+#### Application setting
+
+Check the **Use Fluent UI on Windows** option in the "Interface" page of the Settings dialog box.
+
+
+
+In this case, the Fluent UI rendering mode will be used by default on Windows for all forms.
+
+#### Form setting
+
+Each form can define its own rendering via the **Widget appearance** property. Les options suivantes sont disponibles :
+
+- **Inherited**: inherits the global application setting (default),
+- **Classic**: uses the classic Windows style,
+- **Fluent UI**: enables the modern rendering based on Fluent UI.
+ 
+
+The corresponding [JSON form property](./properties_JSONref.md) is `fluentUI` with value undefined (i.e. inherited, default value), "true" or "false".
+
+### Features and limitations
+
+Fluent UI rendering offers modern and attractive controls, support of dark/light system themes, smoother rendering optimized for high-resolution displays, and consistent user experience aligned with recent Microsoft applications.
+
+When using 4D forms with Fluent UI rendering, you need to pay attention to the following points:
+
+- The `FORM Window theme` command returns the actual display theme of the current form. Possible values: "Classic" or "FluentUI". If there is no current form or the command is called on macOS, and empty string is returned.
+- If [`GET STYLE SHEET INFO`](../commands-legacy/get-style-sheet-info.md) is called in the context of a form, the information returned relates to the current appearance of the form (Classic or FluentUI). If the command is called outside the context of a form, the information returned relates to the [global project settings](#application-setting).
+- [`SET MENU ITEM STYLE`](../commands-legacy/set-menu-item-style.md) with `Underline` *itemStyle* parameter is not supported (ignored) for pop up menus.
+- A focus ring can be added to picture and text [inputs](../FormObjects/input_overview.md).
+- [Stepper](../FormObjects/stepper.md) form object does not support [double-click event](../Events/onDoubleClicked.md).
+- [Circle buttons](../FormObjects/button_overview.md#circle) are supported (similar as macOS).
+- The [`WA ZOOM IN`](../commands-legacy/wa-zoom-in.md) / [`WA ZOOM OUT`](../commands-legacy/wa-zoom-out.md) commands are not supported in Web areas with system rendering engine.
+
## Formulaires hérités
Les formulaires 4D peuvent utiliser et être utilisés comme «formulaires hérités», ce qui signifie que tous les objets du *Formulaire A* peuvent être utilisés dans le *Formulaire B*. Dans ce cas, *Formulaire B* "hérite" des objets du *Formulaire A*.
diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/Notes/updates.md b/i18n/fr/docusaurus-plugin-content-docs/current/Notes/updates.md
index 08edec36cfde6b..efc6f3254a2bd7 100644
--- a/i18n/fr/docusaurus-plugin-content-docs/current/Notes/updates.md
+++ b/i18n/fr/docusaurus-plugin-content-docs/current/Notes/updates.md
@@ -9,12 +9,17 @@ Lisez [**Les nouveautés de 4D 21**](https://blog.4d.com/fe-whats-new-in-4d-v21/
#### Points forts
-- Support of **AI Vector Searches** in the [`query()`](../API/DataClassClass.md#query-by-vector-similarity) function and in the [`$filter`](../REST/$filter.md#vector-similarity) REST API.
+- Support of AI Vector Searches in the [`query()`](../API/DataClassClass.md#query-by-vector-similarity) function and in the [`$filter`](../REST/$filter.md#vector-similarity) REST API.
- Support of TLS encryption for the [4D.TCPConnection](../API/TCPConnectionClass.md#4dtcpconnectionnew) class.
+- Serveur Web:
+ - new [HTTP rules](../WebServer/http-rules.md) to customize HTTP response headers,
+ - ability to set [HTTP request handlers](../WebServer/http-request-handler.md) using a `handlers` property in the *settings* parameter of the Web server [`start()`](../API/WebServerClass.md#start) function,
+ - the Web server object contains new [`rules`](../API/WebServerClass.md#rules) and [`handlers`](../API/WebServerClass.md#handlers) properties.
+- New [ORDA events on data](../ORDA/orda-events.md): validateSave, saving, afterSave, validateDrop, dropping, afterDrop.
- New option allowing to use certificates from Windows Certificate Store instead of a local certificates folder in [`HTTPRequest`](../API/HTTPRequestClass.md#4dhttprequestnew) and [`HTTPAgent`](../API/HTTPAgentClass.md#4dhttpagentnew) classes.
- Client/server:
- - use Qodly pages in Web areas and [share the remote client session](../Desktop/clientServer.md#sharing-the-session-with-qodly-pages-in-web-areas).
- - the [QUIC network layer](../settings/client-server.md#network-layer) has been enhanced to handle network interface changes transparently, for example when you travel with your laptop. See [this blog post](https://blog.4d.com/work-and-move-with-quic-and-network-switching).
+ - You can display Qodly pages in Web areas and [share the remote client session](../Desktop/clientServer.md#sharing-the-session-with-qodly-pages-in-web-areas).
+ - The [QUIC network layer](../settings/client-server.md#network-layer) has been enhanced to handle network interface changes transparently, for example when you travel with your laptop. See [this blog post](https://blog.4d.com/work-and-move-with-quic-and-network-switching).
- You can now [create components directly from the host project](../Extensions/develop-components.md#creating-components) and [edit their code from a dedicated tab](../Extensions/develop-components.md#editing-all-component-code) in the 4D Explorer without leaving or restarting the project.
- The 4D product activation step has been simplified and automated during [sign-in](../GettingStarted/Installation.md#sign-in).
- 4D AIKit component: new features to [invoke a specific tool automatically](../aikit/Classes/OpenAIChatHelper.md#registertool) and [specify a response format](../aikit/Classes/OpenAIChatCompletionsParameters.md#response-format).
@@ -22,6 +27,10 @@ Lisez [**Les nouveautés de 4D 21**](https://blog.4d.com/fe-whats-new-in-4d-v21/
- New "trim" commands to remove leading and trailing spaces from a string: [`Trim`](../commands/trim.md), [`Trim start`](../commands/trim-start.md), and [`Trim end`](../commands/trim-end.md).
- [`Num`](../commands/num.md) and [`String`](../commands/string.md) commands have been updated to support conversions in different bases (radix).
+#### Developer Preview
+
+[**Fluent UI** rendering for 4D forms](../FormEditor/forms.md#fluent-ui-rendering-developer-preview) is proposed in Developer Preview during the beta test program.
+
#### Changements de comportement
:::caution Index rebuild
diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/ORDA/orda-events.md b/i18n/fr/docusaurus-plugin-content-docs/current/ORDA/orda-events.md
index acae867ac6ee91..6be733d4b7838d 100644
--- a/i18n/fr/docusaurus-plugin-content-docs/current/ORDA/orda-events.md
+++ b/i18n/fr/docusaurus-plugin-content-docs/current/ORDA/orda-events.md
@@ -16,6 +16,12 @@ ORDA events are functions that are automatically invoked by ORDA each time entit
You cannot directly trigger event function execution. Events are called automatically by ORDA based on user actions or operations performed through code on entities and their attributes.
+:::tip Related blog post
+
+[ORDA – Handle an event-driven logic during data persistence actions](https://blog.4d.com/orda-handle-an-event-driven-logic-during-data-persistence-actions)
+
+:::
+
:::info Compatibility note
ORDA events in the datastore are equivalent to triggers in the 4D database. However, actions triggered at the 4D database level using the 4D classic language commands or standard actions do not trigger ORDA events.
@@ -112,12 +118,6 @@ When an error occurs in an event, the other events are stopped at the first rais
## Event function description
-:::tip Related blog post
-
-[ORDA – Handle an event-driven logic during data persistence actions](https://blog.4d.com/orda-handle-an-event-driven-logic-during-data-persistence-actions)
-
-:::
-
### `Function event touched`
#### Syntaxe
diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/Project/architecture.md b/i18n/fr/docusaurus-plugin-content-docs/current/Project/architecture.md
index 8cda46ce589c99..fff7b0c81ab8c9 100644
--- a/i18n/fr/docusaurus-plugin-content-docs/current/Project/architecture.md
+++ b/i18n/fr/docusaurus-plugin-content-docs/current/Project/architecture.md
@@ -64,6 +64,7 @@ This text file can also contain configuration keys, in particular [`"tokenizedTe
| filters.json | Filtres définis | JSON |
| dependencies.json | Names of [components to load](components.md) in the project | JSON |
| HTTPHandlers.json | Custom [HTTP request handlers](../WebServer/http-request-handler.md) defined for the web server | JSON |
+| HTTPRules.json | Custom [HTTP response headers](../WebServer/http-responses.md) defined for the web server | JSON |
| styleSheets.css | Feuilles de style CSS | CSS |
| styleSheets_mac.css | Feuilles de style css sur Windows (à partir d'une base binaire convertie) | CSS |
| styleSheets_windows.css | Feuilles de style css sur Mac (à partir d'une base binaire convertie) | CSS |
diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/WebServer/http-request-handler.md b/i18n/fr/docusaurus-plugin-content-docs/current/WebServer/http-request-handler.md
index 61877412ae2d4c..a9e16ab1adf8ea 100644
--- a/i18n/fr/docusaurus-plugin-content-docs/current/WebServer/http-request-handler.md
+++ b/i18n/fr/docusaurus-plugin-content-docs/current/WebServer/http-request-handler.md
@@ -17,22 +17,33 @@ Les gestionnaires de requêtes HTTP personnalisés répondent à divers besoins,
## Conditions requises
-Les gestionnaires de requêtes HTTP personnalisés sont pris en charge :
+Custom HTTP Request handlers are supported in the following context:
-- lorsque les [sessions évolutives](./sessions.md#enabling-web-sessions) sont activées,
-- avec le serveur Web principal uniquement (les gestionnaires de requêtes HTTP éventuellement définis dans les [serveurs Web des composants](../WebServer/webServerObject.md) sont ignorés).
+- [scalable sessions](./sessions.md#enabling-web-sessions) or [no sessions](../settings/web.md#no-sessions) are enabled,
+- a web server run locally by 4D or 4D Server, including those [run by components](./webServerObject.md).
:::warning
-[Par défaut](../ORDA/privileges.md#default-file) pour des raisons de sécurité, l'accès externe au datastore n'est pas autorisé dans 4D. Vous devez configurer les [privilèges ORDA](../ORDA/privileges.md) pour autoriser les requêtes HTTP.
+For security reasons, external access to the datastore can be disallowed in 4D. Vous devez configurer les [privilèges ORDA](../ORDA/privileges.md) pour autoriser les requêtes HTTP.
:::
-## Fichier HTTPHandlers.json
+## How to set handlers
-Vous définissez vos gestionnaires de requêtes HTTP personnalisés dans un fichier de configuration nommé **HTTPHandlers.json** stocké dans le dossier [`Project/Sources`](../Project/architecture.md#sources).
+You can declare HTTP Request handlers:
-Ce fichier contient tous les motifs d'URL à intercepter, les verbes manipulés et le code à appeler. Les gestionnaires sont fournis sous la forme d'une collection au format JSON.
+- in a configuration file named **HTTPHandlers.json** stored in the [`Project/Sources`](../Project/architecture.md#sources) folder of the project. HTTP Request handlers are loaded and applied in the main Web server once it is started.
+- using a [`.handlers`](../API/WebServerClass.md#handlers) property set in the *settings* parameter of the [start()](../API/WebServerClass.md#start) function, for any web server object:
+
+```4d
+WEB Server.start($settings.handlers) //set rules at web server startup
+```
+
+If both a **HTTPHandlers.json** file and a call to the [`WEB Server`](../commands/web-server.md) command with a valid `$settings.handlers` are used, the `WEB Server` command has priority.
+
+The json file (or the object in the *settings* parameter) contains all listened URL patterns, the handled verbs, and the code to be called.
+
+Handlers are provided as a collection.
Au moment de l'exécution, le premier motif correspondant à l'URL est exécuté, les autres sont ignorés.
diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/WebServer/http-rules.md b/i18n/fr/docusaurus-plugin-content-docs/current/WebServer/http-rules.md
new file mode 100644
index 00000000000000..c5d53afb1f666c
--- /dev/null
+++ b/i18n/fr/docusaurus-plugin-content-docs/current/WebServer/http-rules.md
@@ -0,0 +1,222 @@
+---
+id: http-rules
+title: HTTP Rules
+---
+
+You can define HTTP rules to control HTTP response headers for any requests received by the 4D web server, including REST requests. You can add, modify, or remove HTTP headers, send redirections or set the HTTP status. This feature is useful to implement security policies based upon the handling of headers.
+
+To define HTTP rules, you just need to write some RegEx to declare the URL patterns you want to control, as well as how to modify response headers. You can set these rules using a `HTTPRules.json` file stored in the project folder, or using the *settings* parameter [`start()`](../API/WebServerClass.md#start) function of the web server object.
+
+## Conditions requises
+
+HTTP rules are supported in the following contexts:
+
+- [scalable sessions](./sessions.md#enabling-web-sessions) or [no sessions](../settings/web.md#no-sessions) are enabled,
+- a web server run locally by 4D or 4D Server, including those [run by components](./webServerObject.md).
+
+## How to set rules
+
+You can declare HTTP response rules:
+
+- in a configuration file named **HTTPRules.json** stored in the [`Project/Sources`](../Project/architecture.md#sources) folder of the project. Rules are loaded and applied in the main Web server once it is started.
+- using a [`.rules`](../API/WebServerClass.md#rules) property set in the *settings* parameter of the [`start()`](../API/WebServerClass.md#start) function, for any web server object:
+
+```4d
+WEB Server.start($settings.rules) //set rules at web server startup
+```
+
+If both a **HTTPRules.json** file and a call to the [`WEB Server`](../commands/web-server.md) command with a valid `$settings.rules` are used, the `WEB Server` command has priority.
+
+If the URI of the request does not match any of the RegEx patterns, the web server returns a default response.
+
+## Rules Definition
+
+The **HTTPRules.json** file or the [`.rules`](../API/WebServerClass.md#rules) property must contain a collection of **rule objects**.
+
+A rule object is defined by:
+
+- a RegEx describing a URL pattern, e.g. "^(.\*\\.(jpg|jpeg|png|gif))"
+- the name of the action to execute for the HTTP response, e.g. "removeHeaders"
+- the value of the action, e.g. "X-Unwanted-Header1"
+
+Other properties are ignored.
+
+### Motifs d'URL
+
+URL patterns are given using **regular expressions**. To declare a regular expression pattern, use the "RegExPattern" property name.
+
+Ex: `"RegExPattern": "/Test/Authorized/(.*)"`
+
+When the web server receives a request, **all** URL patterns are triggered sequentially in the given order, and all matching patterns are executed. In case of several actions modifying similar resources, the last executed action is taken into account.
+
+### Actions
+
+The following action keywords are supported:
+
+| Mot-clé | Value type | Description |
+| --------------- | --------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `removeHeaders` | Text or Collection of texts | Header(s) to remove from the HTTP responses. If a header to remove does not exist in the response header, it is ignored. |
+| `addHeaders` | Object | Name (text) and value (text) of header(s) to add to the HTTP responses. |
+| `setHeaders` | Object | Name (text) and value (text) of header(s) to modify in the HTTP responses. If a header to modify does not exist in the response header, it is added. |
+| `denyAccess` | Boolean | true to deny access to the resource, false to allow access. When the access to a resource is denied, the web server returns a 403 status by default |
+| `redirect` | Text | Redirection URL. When a redirection is triggered, the web server returns a 302 status by default |
+| `status` | Number | HTTP status |
+
+### Non-modifiable headers
+
+The following headers could not be modified by the `removeHeaders`, `setHeaders`, or `addHeaders` actions:
+
+- "Date",
+- "Content-Length"
+
+Modifying these headers do not generate errors, however modifications will be ignored.
+
+### Current rules
+
+You can know the current rules using the [`.rules` property of the Web Server object](../API/WebServerClass.md#rules):
+
+```
+var $rules : Collection
+$rules:=WEB Server.rules //current rules
+```
+
+## Exemples
+
+Rules can be set using a `HTTPRules.json` file or the *settings* parameter of the [`.start()`](../API/WebServerClass.md#start) web server function.
+
+### Using a HTTPRules.json file
+
+```json
+
+[
+ {
+ "comment": "All requests: allow GET method for, remove 'Server' header and set security headers",
+ "regexPattern": "/(.*)",
+ "setHeaders": {
+ "Allow": "GET",
+ "X-Frame-Options": "SAMEORIGIN",
+ "Content-Security-Policy": "default-src 'self'"
+ },
+ "removeHeaders": [
+ "Server"
+ ]
+ },
+ {
+ "comment": "REST requests: allow POST method",
+ "regexPattern": "/rest/(.*)",
+ "addHeaders": {
+ "Allow": "POST"
+ }
+ },
+ {
+ "comment": "HTML files in 'doc' folder: set cache control",
+ "regexPattern": "/docs/(.*).html",
+ "setHeaders": {
+ "Cache-Control": "max-age=3600"
+ },
+ "removeHeaders": [
+ "X-Powered-By"
+ ]
+ },
+ {
+ "comment": "Status 503 on 'maintenance' page",
+ "regexPattern": "^/maintenance.html",
+ "status": 503
+ },
+ {
+ "comment": "Redirect CSS and JS files",
+ "regexPattern": "^(.*\\\\.(css|js))",
+ "redirect": "https://cdn.example.com/"
+ },
+ {
+ "comment": "Redirect images with permanent status code",
+ "regexPattern": "^(.*\\\\.(jpg|jpeg|png|gif))",
+ "redirect": "https://cdn.example.com/images/",
+ "status": 301
+ },
+ {
+ "comment": "Deny access for all resources placed in the 'private' folder",
+ "regexPattern": "/private/(.*)",
+ "denyAccess": true
+ },
+ {
+ "comment": "Allow access to all resources placed in the 'private/allowed' folder",
+ "regexPattern": "/private/allowed/(.*)",
+ "denyAccess": false
+ }
+]
+
+```
+
+### Using a *settings* parameter
+
+```4d
+var $rule:={}
+
+var $settings:={}
+
+$settings.rules:=[]
+
+$rule:={}
+$rule.comment:="All requests: allow GET method for, remove 'Server' header and set security headers"
+$rule.regexPattern:="/(.*)"
+$rule.setHeaders:={Allow: "GET"}
+$rule.setHeaders["X-Frame-Options"]:="SAMEORIGIN"
+$rule.setHeaders["Content-Security-Policy"]:="default-src 'self'"
+$rule.removeHeaders:=["Server"]
+$settings.rules.push($rule)
+
+$rule:={}
+$rule.comment:="REST requests: allow POST method"
+$rule.regexPattern:="/rest/(.*)"
+$rule.addHeaders:={Allow: "POST"}
+$settings.rules.push($rule)
+
+$rule:={}
+$rule.comment:="HTML files in 'doc' folder: set cache control"
+$rule.regexPattern:="/docs/(.*).html"
+$rule.setHeaders:={}
+$rule.setHeaders["Cache-Control"]:="max-age=3600"
+$rule.removeHeaders:=["X-Powered-By"]
+$settings.rules.push($rule)
+
+$rule:={}
+$rule.comment:="Status 503 on 'maintenance' page"
+$rule.regexPattern:="^/maintenance.html"
+$rule.status:=503
+$settings.rules.push($rule)
+
+$rule:={}
+$rule.comment:="Redirect CSS and JS files"
+$rule.regexPattern:="^(.*\\\\.(css|js))"
+$rule.redirect:="https://cdn.example.com/"
+$settings.rules.push($rule)
+
+$rule:={}
+$rule.comment:="Redirect images with permanent status code"
+$rule.regexPattern:="^(.*\\\\.(jpg|jpeg|png|gif))"
+$rule.redirect:="https://cdn.example.com/images/"
+$rule.status:=301
+$settings.rules.push($rule)
+
+$rule:={}
+$rule.comment:="Deny access for all resources placed in the 'private' folder"
+$rule.regexPattern:="/private/(.*)"
+$rule.denyAccess:=True
+$settings.rules.push($rule)
+
+$rule:={}
+$rule.comment:="Allow access to all resources placed in the 'private/allowed' folder"
+$rule.regexPattern:="/private/allowed/(.*)"
+$rule.denyAccess:=False
+$settings.rules.push($rule)
+
+$return:=WEB Server.start($settings)
+
+```
+
+:::tip Related blog post
+
+[New Way to Control Your HTTP Responses](https://blog.4d.com/new-way-to-control-your-http-responses/)
+
+:::
diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/assets/en/FormEditor/winui-form.png b/i18n/fr/docusaurus-plugin-content-docs/current/assets/en/FormEditor/winui-form.png
new file mode 100644
index 00000000000000..44f0b153852027
Binary files /dev/null and b/i18n/fr/docusaurus-plugin-content-docs/current/assets/en/FormEditor/winui-form.png differ
diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/assets/en/FormEditor/winui-setting.png b/i18n/fr/docusaurus-plugin-content-docs/current/assets/en/FormEditor/winui-setting.png
new file mode 100644
index 00000000000000..ad71386b9acada
Binary files /dev/null and b/i18n/fr/docusaurus-plugin-content-docs/current/assets/en/FormEditor/winui-setting.png differ
diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/assets/en/FormObjects/fluentui-form.png b/i18n/fr/docusaurus-plugin-content-docs/current/assets/en/FormObjects/fluentui-form.png
new file mode 100644
index 00000000000000..00d3b1d2d663ef
Binary files /dev/null and b/i18n/fr/docusaurus-plugin-content-docs/current/assets/en/FormObjects/fluentui-form.png differ
diff --git a/i18n/fr/docusaurus-plugin-content-docs/current/assets/en/FormObjects/fluentui-setting.png b/i18n/fr/docusaurus-plugin-content-docs/current/assets/en/FormObjects/fluentui-setting.png
new file mode 100644
index 00000000000000..e8c5e02f62431f
Binary files /dev/null and b/i18n/fr/docusaurus-plugin-content-docs/current/assets/en/FormObjects/fluentui-setting.png differ
diff --git a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/Debugging/debugLogFiles.md b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/Debugging/debugLogFiles.md
index ad0a720c8b06f5..2fcaf9ebcab865 100644
--- a/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/Debugging/debugLogFiles.md
+++ b/i18n/fr/docusaurus-plugin-content-docs/version-20-R10/Debugging/debugLogFiles.md
@@ -466,7 +466,7 @@ Pour lancer ce journal :
- Utilisez la commande `SET DATABASE PARAMETER` :
```4d
- SET DATABASE PARAMETER(TCPUDP log; 1)
+ SET DATABASE PARAMETER(TCPUDP log recording; 1)
```
- Le fichier de configuration du journal est un fichier `.json` qui doit respecter le schéma json suivant :
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/API/WebServerClass.md b/i18n/ja/docusaurus-plugin-content-docs/current/API/WebServerClass.md
index 17424e7687aaaa..e6c5e7c17d1183 100644
--- a/i18n/ja/docusaurus-plugin-content-docs/current/API/WebServerClass.md
+++ b/i18n/ja/docusaurus-plugin-content-docs/current/API/WebServerClass.md
@@ -23,6 +23,7 @@ Webサーバーオブジェクトは [`WEB Server`](../commands/web-server.md)
| [](#corssettings)
|
| [](#debuglog)
|
| [](#defaulthomepage)
|
+| [](#handlers)
|
| [](#hstsenabled)
|
| [](#hstsmaxage)
|
| [](#httpcompressionlevel)
|
@@ -46,6 +47,7 @@ Webサーバーオブジェクトは [`WEB Server`](../commands/web-server.md)
| [](#opensslversion)
|
| [](#perfectforwardsecrecy)
|
| [](#rootfolder)
|
+| [](#rules)
|
| [](#scalablesession)
|
| [](#sessioncookiedomain)
|
| [](#sessioncookiename)
|
@@ -169,6 +171,26 @@ The HTTPリクエストログファ
+
+
+## .handlers
+
+履歴
+
+| リリース | 内容 |
+| ---- | -- |
+| 21 | 追加 |
+
+
+
+**.handlers** : Collection
+
+*内容*
+
+A collection of custom HTTP handler objects. An HTTP handler object contains a listened URL pattern, a handled verb, and the code to be called. HTTP handlers can be defined through a HTTPHandlers.json file or the *settings* parameter of the [`.start()`](#start) function. For more information, please refer to the [HTTP Request handler](../WebServer/http-request-handler.md) page.
+
+
+
## .HSTSEnabled
@@ -457,6 +479,26 @@ The HTTPリクエストログファ
+
+
+## .rules
+
+履歴
+
+| リリース | 内容 |
+| ---- | -- |
+| 21 | 追加 |
+
+
+
+**.rules** : Collection
+
+*内容*
+
+A collection of rule objects currently handled to customize HTTP headers. A rule object contains a "regexPattern" property, as well as an action name with a value. HTTP rules can be defined through a HTTPRules.json file or the *settings* parameter of the [`.start()`](#start) function. For more information, please refer to the [HTTP Rules](../WebServer/http-rules.md) page.
+
+
+
## .scalableSession
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/Debugging/debugLogFiles.md b/i18n/ja/docusaurus-plugin-content-docs/current/Debugging/debugLogFiles.md
index c05faa5006ac4e..b49042a59acf09 100644
--- a/i18n/ja/docusaurus-plugin-content-docs/current/Debugging/debugLogFiles.md
+++ b/i18n/ja/docusaurus-plugin-content-docs/current/Debugging/debugLogFiles.md
@@ -465,7 +465,7 @@ SET DATABASE PARAMETER(4D Server log recording;0)
- `SET DATABASE PARAMETER` コマンドを使用する:
```4d
- SET DATABASE PARAMETER(TCPUDP log; 1)
+ SET DATABASE PARAMETER(TCPUDP log recording; 1)
```
- [JSON 設定ファイル](#using-a-log-configuration-file) を使用してログを設定する:
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/Extensions/overview.md b/i18n/ja/docusaurus-plugin-content-docs/current/Extensions/overview.md
index 5298166c3f54c6..3086dfe59f752d 100644
--- a/i18n/ja/docusaurus-plugin-content-docs/current/Extensions/overview.md
+++ b/i18n/ja/docusaurus-plugin-content-docs/current/Extensions/overview.md
@@ -1,14 +1,14 @@
---
id: overview
-title: Extending 4D Applications
+title: 4D アプリケーションの拡張
---
## 概要
-The 4D [project architecture](../Project/architecture.md) is open and can be extended in different ways. If you need a feature that is not available natively in 4D, you can always integrate it into your application in a variety of ways, i.e.:
+4D [プロジェクトアーキテクチャー](../Project/architecture.md) はオープンであり、様々な方法で拡張することができます。 4D でネイティブに利用できない機能が必要な場合、以下のような様々な方法でアプリケーションに統合することができます:
-- [**System workers**](../API/SystemWorkerClass.md) allow the 4D code to call any external process (a shell command, PHP, any script, etc.) and monitor its execution.
-- [**SQL commands**](../commands/theme/SQL) allow you to connect and use various SQL data sources.
+- [**System workers**](../API/SystemWorkerClass.md) を使用すると、4D コードからどんな外部プロセス(シェルコマンド、PHP、任意のスクリプト、など) でも呼び出すことができます。 またその実行をモニターすることもできます。
+- [**SQL コマンド**](../commands/theme/SQL) を使用すると、様々なSQL データソースに接続して、それらを使用することができます。
- The [**built-in HTTP client**](../API/HTTPRequestClass.md) can request any HTTP server and process data.
- [**Web Areas**](../FormObjects/webArea_overview.md) can give access to web pages or various HTML contents within your forms.
- [**Components**](Concepts/components.md). Components are made of 4D code. 4D proposes a set of utility components (see below) that you can install and use depending on your needs. You can also [develop your own 4D components](develop-components.md), or use third-party components. Many developers from the 4D community have shared 4D components (browse Github to have a list of public 4D components gathered with the [`4d-component`](https://github.com/topics/4d-component) topic).
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/FormEditor/forms.md b/i18n/ja/docusaurus-plugin-content-docs/current/FormEditor/forms.md
index 5ced8fbcb3e9a5..a421e9046f83c1 100644
--- a/i18n/ja/docusaurus-plugin-content-docs/current/FormEditor/forms.md
+++ b/i18n/ja/docusaurus-plugin-content-docs/current/FormEditor/forms.md
@@ -96,6 +96,73 @@ title: Forms
マルチページフォームには、1つの背景ページと複数の表示ページが存在します。 背景ページ上に置かれたオブジェクトはすべての表示ページに現れますが、それらのオブジェクトの選択や編集は背景ページでのみ可能です。 複数ページフォームでは、ボタンパレットを背景ページに置くべきです。 また、ページ移動ツールオブジェクトを背景ページに配置し、ユーザーに提供する必要があります。
+## Fluent UI rendering (Developer Preview)
+
+On Windows, 4D supports **Fluent UI** form rendering, Microsoft's modern graphical user interface design, based upon **WinUI 3** technology. **WinUI 3** is the foundation of the Windows App SDK and represents the upcoming Windows graphical interfaces.
+
+:::caution デベロッパー・プレビュー
+
+Fluent UI support is currently in the Developer Preview phase. 本番環境で使用すべきではありません。
+
+:::
+
+:::info macOS
+
+This feature can only be used on Windows. On macOS, it is ignored.
+
+:::
+
+### Fluent UI rendering availability
+
+The Fluent UI rendering is available in the following execution environments only:
+
+- Windows with [Windows App SDK](https://learn.microsoft.com/en-us/windows/apps/windows-app-sdk/downloads) version 1.7.3 installed (you need to install this SDK on any Windows machine displaying your forms).
+- 組み込みの [スタンドアロン](../Desktop/building#スタンドアロンアプリケーションをビルド) または [クライアント](../Desktop/building#クライアントアプリケーションをビルド) 4Dアプリケーション
+- [**Test application** feature](../Menus/bars.md#previewing-menu-bars) available from the Run menu.
+
+:::note
+
+If the Windows App SDK is not properly installed, 4D will render all your forms in classic mode with no error.
+
+:::
+
+### Enabling the Fluent UI rendering
+
+You can enable the Fluent UI rendering mode at the application level or at the form level. Form setting has priority over application setting.
+
+#### Application setting
+
+Check the **Use Fluent UI on Windows** option in the "Interface" page of the Settings dialog box.
+
+
+
+In this case, the Fluent UI rendering mode will be used by default on Windows for all forms.
+
+#### Form setting
+
+Each form can define its own rendering via the **Widget appearance** property. 次のオプションから選択することができます:
+
+- **Inherited**: inherits the global application setting (default),
+- **Classic**: uses the classic Windows style,
+- **Fluent UI**: enables the modern rendering based on Fluent UI.
+ 
+
+The corresponding [JSON form property](./properties_JSONref.md) is `fluentUI` with value undefined (i.e. inherited, default value), "true" or "false".
+
+### Features and limitations
+
+Fluent UI rendering offers modern and attractive controls, support of dark/light system themes, smoother rendering optimized for high-resolution displays, and consistent user experience aligned with recent Microsoft applications.
+
+When using 4D forms with Fluent UI rendering, you need to pay attention to the following points:
+
+- The `FORM Window theme` command returns the actual display theme of the current form. Possible values: "Classic" or "FluentUI". If there is no current form or the command is called on macOS, and empty string is returned.
+- If [`GET STYLE SHEET INFO`](../commands-legacy/get-style-sheet-info.md) is called in the context of a form, the information returned relates to the current appearance of the form (Classic or FluentUI). If the command is called outside the context of a form, the information returned relates to the [global project settings](#application-setting).
+- [`SET MENU ITEM STYLE`](../commands-legacy/set-menu-item-style.md) with `Underline` *itemStyle* parameter is not supported (ignored) for pop up menus.
+- A focus ring can be added to picture and text [inputs](../FormObjects/input_overview.md).
+- [Stepper](../FormObjects/stepper.md) form object does not support [double-click event](../Events/onDoubleClicked.md).
+- [Circle buttons](../FormObjects/button_overview.md#circle) are supported (similar as macOS).
+- The [`WA ZOOM IN`](../commands-legacy/wa-zoom-in.md) / [`WA ZOOM OUT`](../commands-legacy/wa-zoom-out.md) commands are not supported in Web areas with system rendering engine.
+
## 継承フォーム
4D では "継承フォーム" を使用することができます。これはつまり、*フォームA* の全オブジェクトが *フォームB* で使用可能であるということです。 この場合、*フォームB* は *フォームA* からオブジェクトを "継承" します。
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/Notes/updates.md b/i18n/ja/docusaurus-plugin-content-docs/current/Notes/updates.md
index 59b064b8c8d983..3e3e809172d5d9 100644
--- a/i18n/ja/docusaurus-plugin-content-docs/current/Notes/updates.md
+++ b/i18n/ja/docusaurus-plugin-content-docs/current/Notes/updates.md
@@ -9,12 +9,17 @@ Read [**What’s new in 4D 21**](https://blog.4d.com/en-whats-new-in-4d-21/), th
#### ハイライト
-- Support of **AI Vector Searches** in the [`query()`](../API/DataClassClass.md#query-by-vector-similarity) function and in the [`$filter`](../REST/$filter.md#vector-similarity) REST API.
+- Support of AI Vector Searches in the [`query()`](../API/DataClassClass.md#query-by-vector-similarity) function and in the [`$filter`](../REST/$filter.md#vector-similarity) REST API.
- Support of TLS encryption for the [4D.TCPConnection](../API/TCPConnectionClass.md#4dtcpconnectionnew) class.
+- Web サーバー:
+ - new [HTTP rules](../WebServer/http-rules.md) to customize HTTP response headers,
+ - ability to set [HTTP request handlers](../WebServer/http-request-handler.md) using a `handlers` property in the *settings* parameter of the Web server [`start()`](../API/WebServerClass.md#start) function,
+ - the Web server object contains new [`rules`](../API/WebServerClass.md#rules) and [`handlers`](../API/WebServerClass.md#handlers) properties.
+- New [ORDA events on data](../ORDA/orda-events.md): validateSave, saving, afterSave, validateDrop, dropping, afterDrop.
- New option allowing to use certificates from Windows Certificate Store instead of a local certificates folder in [`HTTPRequest`](../API/HTTPRequestClass.md#4dhttprequestnew) and [`HTTPAgent`](../API/HTTPAgentClass.md#4dhttpagentnew) classes.
- Client/server:
- - use Qodly pages in Web areas and [share the remote client session](../Desktop/clientServer.md#sharing-the-session-with-qodly-pages-in-web-areas).
- - the [QUIC network layer](../settings/client-server.md#network-layer) has been enhanced to handle network interface changes transparently, for example when you travel with your laptop. See [this blog post](https://blog.4d.com/work-and-move-with-quic-and-network-switching).
+ - You can display Qodly pages in Web areas and [share the remote client session](../Desktop/clientServer.md#sharing-the-session-with-qodly-pages-in-web-areas).
+ - The [QUIC network layer](../settings/client-server.md#network-layer) has been enhanced to handle network interface changes transparently, for example when you travel with your laptop. See [this blog post](https://blog.4d.com/work-and-move-with-quic-and-network-switching).
- You can now [create components directly from the host project](../Extensions/develop-components.md#creating-components) and [edit their code from a dedicated tab](../Extensions/develop-components.md#editing-all-component-code) in the 4D Explorer without leaving or restarting the project.
- The 4D product activation step has been simplified and automated during [sign-in](../GettingStarted/Installation.md#sign-in).
- 4D AIKit component: new features to [invoke a specific tool automatically](../aikit/Classes/OpenAIChatHelper.md#registertool) and [specify a response format](../aikit/Classes/OpenAIChatCompletionsParameters.md#response-format).
@@ -22,6 +27,10 @@ Read [**What’s new in 4D 21**](https://blog.4d.com/en-whats-new-in-4d-21/), th
- New "trim" commands to remove leading and trailing spaces from a string: [`Trim`](../commands/trim.md), [`Trim start`](../commands/trim-start.md), and [`Trim end`](../commands/trim-end.md).
- [`Num`](../commands/num.md) and [`String`](../commands/string.md) commands have been updated to support conversions in different bases (radix).
+#### デベロッパー・プレビュー
+
+[**Fluent UI** rendering for 4D forms](../FormEditor/forms.md#fluent-ui-rendering-developer-preview) is proposed in Developer Preview during the beta test program.
+
#### 動作の変更
:::caution Index rebuild
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/ORDA/orda-events.md b/i18n/ja/docusaurus-plugin-content-docs/current/ORDA/orda-events.md
index 4135d68297b897..cbf92c9aad387b 100644
--- a/i18n/ja/docusaurus-plugin-content-docs/current/ORDA/orda-events.md
+++ b/i18n/ja/docusaurus-plugin-content-docs/current/ORDA/orda-events.md
@@ -16,6 +16,12 @@ ORDA events are functions that are automatically invoked by ORDA each time entit
You cannot directly trigger event function execution. Events are called automatically by ORDA based on user actions or operations performed through code on entities and their attributes.
+:::tip Related blog post
+
+[ORDA – Handle an event-driven logic during data persistence actions](https://blog.4d.com/orda-handle-an-event-driven-logic-during-data-persistence-actions)
+
+:::
+
:::info note Compatibility note
ORDA events in the datastore are equivalent to triggers in the 4D database. However, actions triggered at the 4D database level using the 4D classic language commands or standard actions do not trigger ORDA events.
@@ -112,12 +118,6 @@ When an error occurs in an event, the other events are stopped at the first rais
## Event function description
-:::tip Related blog post
-
-[ORDA – Handle an event-driven logic during data persistence actions](https://blog.4d.com/orda-handle-an-event-driven-logic-during-data-persistence-actions)
-
-:::
-
### `Function event touched`
#### シンタックス
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/Project/architecture.md b/i18n/ja/docusaurus-plugin-content-docs/current/Project/architecture.md
index 1dc15ee343d9c6..93b966555144ce 100644
--- a/i18n/ja/docusaurus-plugin-content-docs/current/Project/architecture.md
+++ b/i18n/ja/docusaurus-plugin-content-docs/current/Project/architecture.md
@@ -64,6 +64,7 @@ title: アーキテクチャー
| filters.json | 定義されたフィルター | JSON |
| dependencies.json | プロジェクトに [ロードするコンポーネント](components.md) の名前 | JSON |
| HTTPHandlers.json | Custom [HTTP request handlers](../WebServer/http-request-handler.md) defined for the web server | JSON |
+| HTTPRules.json | Custom [HTTP response headers](../WebServer/http-responses.md) defined for the web server | JSON |
| styleSheets.css | CSS スタイルシート | CSS |
| styleSheets_mac.css | Mac用 CSS スタイルシート (変換されたバイナリデータベースより) | CSS |
| styleSheets_windows.css | Windows用 CSS スタイルシート (変換されたバイナリデータベースより) | CSS |
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/WebServer/http-request-handler.md b/i18n/ja/docusaurus-plugin-content-docs/current/WebServer/http-request-handler.md
index e5e45790d725f5..883be9680d24b6 100644
--- a/i18n/ja/docusaurus-plugin-content-docs/current/WebServer/http-request-handler.md
+++ b/i18n/ja/docusaurus-plugin-content-docs/current/WebServer/http-request-handler.md
@@ -17,22 +17,33 @@ title: HTTP Request handler
## 要件
-カスタムのHTTP リクエストハンドラーは以下の条件の元にサポートされます:
+Custom HTTP Request handlers are supported in the following context:
-- [スケーラブルセッション](./sessions.md#enabling-web-sessions) が有効化されていること
-- メインのWeb サーバーでのみ利用可能です([コンポーネントのWeb サーバー](../WebServer/webServerObject.md) で定義されていたHTTP リクエストハンドラーがあったとしてもそれは無視されます)。
+- [scalable sessions](./sessions.md#enabling-web-sessions) or [no sessions](../settings/web.md#no-sessions) are enabled,
+- a web server run locally by 4D or 4D Server, including those [run by components](./webServerObject.md).
:::warning
-セキュリティ上の理由から、[デフォルトで](../ORDA/privileges.md#デフォルトファイル)、4D ではデータストアへの外部からのアクセスは許可されていません。 HTTP リクエストを許可するには、[ORDA privileges](../ORDA/privileges.md) を設定する必要があります。
+For security reasons, external access to the datastore can be disallowed in 4D. HTTP リクエストを許可するには、[ORDA privileges](../ORDA/privileges.md) を設定する必要があります。
:::
-## HTTPHandlers.json ファイル
+## How to set handlers
-カスタムHTTP リクエストハンドラーは、[`Project/Sources`](../Project/architecture.md#sources) にある**HTTPHandlers.json** という設定ファイル内で定義します。
+You can declare HTTP Request handlers:
-このファイルはサーバーが聞いている全てのURL パターン、管理される動詞(メソッド)、そして呼び出されるべきコードが格納されています。 ハンドラーはJSON フォーマットのコレクションとして提供されます。
+- in a configuration file named **HTTPHandlers.json** stored in the [`Project/Sources`](../Project/architecture.md#sources) folder of the project. HTTP Request handlers are loaded and applied in the main Web server once it is started.
+- using a [`.handlers`](../API/WebServerClass.md#handlers) property set in the *settings* parameter of the [start()](../API/WebServerClass.md#start) function, for any web server object:
+
+```4d
+WEB Server.start($settings.handlers) //set rules at web server startup
+```
+
+If both a **HTTPHandlers.json** file and a call to the [`WEB Server`](../commands/web-server.md) command with a valid `$settings.handlers` are used, the `WEB Server` command has priority.
+
+The json file (or the object in the *settings* parameter) contains all listened URL patterns, the handled verbs, and the code to be called.
+
+Handlers are provided as a collection.
ランタイムでは、URLに合致する最初のパターンのみが実行され、他のパターンは無視されます。
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/WebServer/http-rules.md b/i18n/ja/docusaurus-plugin-content-docs/current/WebServer/http-rules.md
new file mode 100644
index 00000000000000..d857bb23d70623
--- /dev/null
+++ b/i18n/ja/docusaurus-plugin-content-docs/current/WebServer/http-rules.md
@@ -0,0 +1,222 @@
+---
+id: http-rules
+title: HTTP Rules
+---
+
+You can define HTTP rules to control HTTP response headers for any requests received by the 4D web server, including REST requests. You can add, modify, or remove HTTP headers, send redirections or set the HTTP status. This feature is useful to implement security policies based upon the handling of headers.
+
+To define HTTP rules, you just need to write some RegEx to declare the URL patterns you want to control, as well as how to modify response headers. You can set these rules using a `HTTPRules.json` file stored in the project folder, or using the *settings* parameter [`start()`](../API/WebServerClass.md#start) function of the web server object.
+
+## 要件
+
+HTTP rules are supported in the following contexts:
+
+- [scalable sessions](./sessions.md#enabling-web-sessions) or [no sessions](../settings/web.md#no-sessions) are enabled,
+- a web server run locally by 4D or 4D Server, including those [run by components](./webServerObject.md).
+
+## How to set rules
+
+You can declare HTTP response rules:
+
+- in a configuration file named **HTTPRules.json** stored in the [`Project/Sources`](../Project/architecture.md#sources) folder of the project. Rules are loaded and applied in the main Web server once it is started.
+- using a [`.rules`](../API/WebServerClass.md#rules) property set in the *settings* parameter of the [`start()`](../API/WebServerClass.md#start) function, for any web server object:
+
+```4d
+WEB Server.start($settings.rules) //set rules at web server startup
+```
+
+If both a **HTTPRules.json** file and a call to the [`WEB Server`](../commands/web-server.md) command with a valid `$settings.rules` are used, the `WEB Server` command has priority.
+
+If the URI of the request does not match any of the RegEx patterns, the web server returns a default response.
+
+## Rules Definition
+
+The **HTTPRules.json** file or the [`.rules`](../API/WebServerClass.md#rules) property must contain a collection of **rule objects**.
+
+A rule object is defined by:
+
+- a RegEx describing a URL pattern, e.g. "^(.\*\\.(jpg|jpeg|png|gif))"
+- the name of the action to execute for the HTTP response, e.g. "removeHeaders"
+- the value of the action, e.g. "X-Unwanted-Header1"
+
+Other properties are ignored.
+
+### URL パターン
+
+URL patterns are given using **regular expressions**. To declare a regular expression pattern, use the "RegExPattern" property name.
+
+Ex: `"RegExPattern": "/Test/Authorized/(.*)"`
+
+When the web server receives a request, **all** URL patterns are triggered sequentially in the given order, and all matching patterns are executed. In case of several actions modifying similar resources, the last executed action is taken into account.
+
+### アクション
+
+The following action keywords are supported:
+
+| キーワード | 値の型 | 説明 |
+| --------------- | --------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `removeHeaders` | Text or Collection of texts | Header(s) to remove from the HTTP responses. If a header to remove does not exist in the response header, it is ignored. |
+| `addHeaders` | Object | Name (text) and value (text) of header(s) to add to the HTTP responses. |
+| `setHeaders` | Object | Name (text) and value (text) of header(s) to modify in the HTTP responses. If a header to modify does not exist in the response header, it is added. |
+| `denyAccess` | Boolean | true to deny access to the resource, false to allow access. When the access to a resource is denied, the web server returns a 403 status by default |
+| `redirect` | Text | Redirection URL. When a redirection is triggered, the web server returns a 302 status by default |
+| `status` | Number | HTTP status |
+
+### Non-modifiable headers
+
+The following headers could not be modified by the `removeHeaders`, `setHeaders`, or `addHeaders` actions:
+
+- "日付",
+- "Content-Length"
+
+Modifying these headers do not generate errors, however modifications will be ignored.
+
+### Current rules
+
+You can know the current rules using the [`.rules` property of the Web Server object](../API/WebServerClass.md#rules):
+
+```
+var $rules : Collection
+$rules:=WEB Server.rules //current rules
+```
+
+## 例題
+
+Rules can be set using a `HTTPRules.json` file or the *settings* parameter of the [`.start()`](../API/WebServerClass.md#start) web server function.
+
+### Using a HTTPRules.json file
+
+```json
+
+[
+ {
+ "comment": "All requests: allow GET method for, remove 'Server' header and set security headers",
+ "regexPattern": "/(.*)",
+ "setHeaders": {
+ "Allow": "GET",
+ "X-Frame-Options": "SAMEORIGIN",
+ "Content-Security-Policy": "default-src 'self'"
+ },
+ "removeHeaders": [
+ "Server"
+ ]
+ },
+ {
+ "comment": "REST requests: allow POST method",
+ "regexPattern": "/rest/(.*)",
+ "addHeaders": {
+ "Allow": "POST"
+ }
+ },
+ {
+ "comment": "HTML files in 'doc' folder: set cache control",
+ "regexPattern": "/docs/(.*).html",
+ "setHeaders": {
+ "Cache-Control": "max-age=3600"
+ },
+ "removeHeaders": [
+ "X-Powered-By"
+ ]
+ },
+ {
+ "comment": "Status 503 on 'maintenance' page",
+ "regexPattern": "^/maintenance.html",
+ "status": 503
+ },
+ {
+ "comment": "Redirect CSS and JS files",
+ "regexPattern": "^(.*\\\\.(css|js))",
+ "redirect": "https://cdn.example.com/"
+ },
+ {
+ "comment": "Redirect images with permanent status code",
+ "regexPattern": "^(.*\\\\.(jpg|jpeg|png|gif))",
+ "redirect": "https://cdn.example.com/images/",
+ "status": 301
+ },
+ {
+ "comment": "Deny access for all resources placed in the 'private' folder",
+ "regexPattern": "/private/(.*)",
+ "denyAccess": true
+ },
+ {
+ "comment": "Allow access to all resources placed in the 'private/allowed' folder",
+ "regexPattern": "/private/allowed/(.*)",
+ "denyAccess": false
+ }
+]
+
+```
+
+### Using a *settings* parameter
+
+```4d
+var $rule:={}
+
+var $settings:={}
+
+$settings.rules:=[]
+
+$rule:={}
+$rule.comment:="All requests: allow GET method for, remove 'Server' header and set security headers"
+$rule.regexPattern:="/(.*)"
+$rule.setHeaders:={Allow: "GET"}
+$rule.setHeaders["X-Frame-Options"]:="SAMEORIGIN"
+$rule.setHeaders["Content-Security-Policy"]:="default-src 'self'"
+$rule.removeHeaders:=["Server"]
+$settings.rules.push($rule)
+
+$rule:={}
+$rule.comment:="REST requests: allow POST method"
+$rule.regexPattern:="/rest/(.*)"
+$rule.addHeaders:={Allow: "POST"}
+$settings.rules.push($rule)
+
+$rule:={}
+$rule.comment:="HTML files in 'doc' folder: set cache control"
+$rule.regexPattern:="/docs/(.*).html"
+$rule.setHeaders:={}
+$rule.setHeaders["Cache-Control"]:="max-age=3600"
+$rule.removeHeaders:=["X-Powered-By"]
+$settings.rules.push($rule)
+
+$rule:={}
+$rule.comment:="Status 503 on 'maintenance' page"
+$rule.regexPattern:="^/maintenance.html"
+$rule.status:=503
+$settings.rules.push($rule)
+
+$rule:={}
+$rule.comment:="Redirect CSS and JS files"
+$rule.regexPattern:="^(.*\\\\.(css|js))"
+$rule.redirect:="https://cdn.example.com/"
+$settings.rules.push($rule)
+
+$rule:={}
+$rule.comment:="Redirect images with permanent status code"
+$rule.regexPattern:="^(.*\\\\.(jpg|jpeg|png|gif))"
+$rule.redirect:="https://cdn.example.com/images/"
+$rule.status:=301
+$settings.rules.push($rule)
+
+$rule:={}
+$rule.comment:="Deny access for all resources placed in the 'private' folder"
+$rule.regexPattern:="/private/(.*)"
+$rule.denyAccess:=True
+$settings.rules.push($rule)
+
+$rule:={}
+$rule.comment:="Allow access to all resources placed in the 'private/allowed' folder"
+$rule.regexPattern:="/private/allowed/(.*)"
+$rule.denyAccess:=False
+$settings.rules.push($rule)
+
+$return:=WEB Server.start($settings)
+
+```
+
+:::tip Related blog post
+
+[New Way to Control Your HTTP Responses](https://blog.4d.com/new-way-to-control-your-http-responses/)
+
+:::
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIChatCompletionsParameters.md b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIChatCompletionsParameters.md
index aaa8e029831877..5ec4547197b87a 100644
--- a/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIChatCompletionsParameters.md
+++ b/i18n/ja/docusaurus-plugin-content-docs/current/aikit/Classes/OpenAIChatCompletionsParameters.md
@@ -40,13 +40,13 @@ title: OpenAIChatCompletionParameters
## レスポンスフォーマット
-The `response_format` parameter allows you to specify the format that the model must output. This is particularly useful when you need structured data or want to ensure the response follows a specific format.
+`response_format` 引数を使用すると、モデルが出力するフォーマットを指定することができます。 これは、構造化されたデータが必要な場合や、レスポンスが特定のフォーマットに従うようにしたい場合には特に有用です。
-### Supported Response Format Types
+### サポートされるレスポンスフォーマットタイプ
-#### 1. Text Format (Default)
+#### 1. テキストフォーマット(デフォルト)
-The default response format returns plain text:
+デフォルトのレスポンンスフォーマットは標準テキストを開きます:
```4d
var $params := cs.OpenAIChatCompletionsParameters.new({ \
@@ -55,9 +55,9 @@ var $params := cs.OpenAIChatCompletionsParameters.new({ \
})
```
-#### 3. JSON Object Format
+#### 2. JSON オブジェクトフォーマット
-Forces the model to respond with valid JSON:
+モデルが有効なJSON を返すように指定します:
```4d
var $params := cs.OpenAIChatCompletionsParameters.new({ \
@@ -79,9 +79,9 @@ $messages.push({ \
$result := $client.chat.completions.create($messages; $params)
```
-#### 3. JSON Schema Format (Structured Outputs)
+#### 3. JSON スキーマフォーマット(構造化された出力)
-For precise control over the JSON structure, you can define a schema:
+JSON 構造を正確に管理するために、スキーマを定義することができます:
```4d
var $jsonSchema := { \
@@ -115,22 +115,22 @@ $messages.push({ role: "user"; content: "Generate information about a person nam
$result := $client.chat.completions.create($messages; $params)
```
-### JSON Schema Properties
+### JSON スキーマプロパティ
-When using `json_schema` type, you can specify:
+`json_schema` タイプを使用する場合、以下のものを指定可能です:
-- **`name`**: A name for the schema
-- **`description`**: A description of what the schema represents
-- **`schema`**: The JSON schema definition
-- **`strict`**: Whether to enforce strict adherence to the schema
+- **`name`**: スキーマの名前
+- **`description`**: そのスキーマが何を表すのかの説明
+- **`schema`**: JSON スキーマ定義
+- **`strict`**: スキーマに厳密に従うかどうか
-### Important Notes
+### 重要な注意事項
-- Not all models support structured outputs (json_object or json_schema), so check model capabilities before using them.
-- When using `json_object` format, you should include instructions in your system message to respond in JSON format
-- The `json_schema` format provides the most control and ensures the response exactly matches your specified structure
-- Invalid JSON responses will result in an error when using JSON formats
-- JSON schema validation ensures type safety and required field presence
+- 全てのモデルが構造化された出力(json_object あるいは json_schema)をサポートするわけではないので、使用する前にモデルの機能を確認してください。
+- `json_object` フォーマットを使用する場合、JSON フォーマットで応答するためにはシステムメッセージに説明を含める必要があります。
+- `json_schema` フォーマットがもっともコントロールがしやすく、レスポンスが指定した構造に完全に合致することを保証します。
+- JSON フォーマットを使用している場合、無効なJSON レスポンスはエラーを起こします。
+- JSON スキーマ検証は、型の安全性と要求されたフィールドがきちんと存在することを保証します。
## 参照
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/assets/en/FormEditor/winui-form.png b/i18n/ja/docusaurus-plugin-content-docs/current/assets/en/FormEditor/winui-form.png
new file mode 100644
index 00000000000000..44f0b153852027
Binary files /dev/null and b/i18n/ja/docusaurus-plugin-content-docs/current/assets/en/FormEditor/winui-form.png differ
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/assets/en/FormEditor/winui-setting.png b/i18n/ja/docusaurus-plugin-content-docs/current/assets/en/FormEditor/winui-setting.png
new file mode 100644
index 00000000000000..ad71386b9acada
Binary files /dev/null and b/i18n/ja/docusaurus-plugin-content-docs/current/assets/en/FormEditor/winui-setting.png differ
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/assets/en/FormObjects/fluentui-form.png b/i18n/ja/docusaurus-plugin-content-docs/current/assets/en/FormObjects/fluentui-form.png
new file mode 100644
index 00000000000000..00d3b1d2d663ef
Binary files /dev/null and b/i18n/ja/docusaurus-plugin-content-docs/current/assets/en/FormObjects/fluentui-form.png differ
diff --git a/i18n/ja/docusaurus-plugin-content-docs/current/assets/en/FormObjects/fluentui-setting.png b/i18n/ja/docusaurus-plugin-content-docs/current/assets/en/FormObjects/fluentui-setting.png
new file mode 100644
index 00000000000000..e8c5e02f62431f
Binary files /dev/null and b/i18n/ja/docusaurus-plugin-content-docs/current/assets/en/FormObjects/fluentui-setting.png differ
diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/Debugging/debugLogFiles.md b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/Debugging/debugLogFiles.md
index 20e60d70b1f62b..6853e9cae60522 100644
--- a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/Debugging/debugLogFiles.md
+++ b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/Debugging/debugLogFiles.md
@@ -465,7 +465,7 @@ SET DATABASE PARAMETER(4D Server log recording;0)
- `SET DATABASE PARAMETER` コマンドを使用する:
```4d
- SET DATABASE PARAMETER(TCPUDP log; 1)
+ SET DATABASE PARAMETER(TCPUDP log recording; 1)
```
- [JSON 設定ファイル](#using-a-log-configuration-file) を使用してログを設定する:
diff --git a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/Extensions/overview.md b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/Extensions/overview.md
index 272df4612ac813..2d335792cf5c40 100644
--- a/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/Extensions/overview.md
+++ b/i18n/ja/docusaurus-plugin-content-docs/version-20-R10/Extensions/overview.md
@@ -1,13 +1,13 @@
---
id: overview
-title: Extending 4D Applications
+title: 4D アプリケーションの拡張
---
-4D アーキテクチャーはオープンで、様々な方法で拡張可能です。 If you need a feature that is not available natively in 4D, you can always integrate it into your application in a variety of ways, i.e.:
+4D アーキテクチャーはオープンで、様々な方法で拡張可能です。 4D でネイティブに利用できない機能が必要な場合、以下のような様々な方法でアプリケーションに統合することができます:
-- [**System workers**](../API/SystemWorkerClass.md) allow the 4D code to call any external process (a shell command, PHP, any script, etc.) and monitor its execution.
-- [**SQL commands**](../commands/theme/SQL) allow you to connect and use various SQL data sources.
-- The [**built-in HTTP client**](../API/HTTPRequestClass.md) can request any HTTP server and process data.
+- [**System workers**](../API/SystemWorkerClass.md) を使用すると、4D コードからどんな外部プロセス(シェルコマンド、PHP、任意のスクリプト、など) でも呼び出すことができます。 またその実行をモニターすることもできます。
+- [**SQL コマンド**](../commands/theme/SQL) を使用すると、様々なSQL データソースに接続して、それらを使用することができます。
+- [**ビルトイン HTTP クライアント**](../API/HTTPRequestClass.md) はあらゆるHTTP サーバーへとリクエストを送り、データを処理することができます。
- [**Web Areas**](../FormObjects/webArea_overview.md) can give access to web pages or various HTML contents within your forms.
- [**Components**](Concepts/components.md). Components are made of 4D code. 4D は、デフォルトで[ビルトイン4D コンポーネントのセット](../Project/components.md#インストール済みの4dコンポーネント) が含まれています。 You can also [develop your own 4D components](develop-components.md), or use third-party components. Many developers from the 4D community have shared 4D components (browse Github to have a list of public 4D components gathered with the [`4d-component`](https://github.com/topics/4d-component) topic).
- [**Plug-ins**](../Concepts/plug-ins.md). Plug-ins can be built using any language. プラグインは、4D がネイティブにおこなっていないこと (例: 特定のプラットフォーム技術など) や、4D だけでは困難なことを実現します。 [このページ](develop-plug-ins.md) で説明しているように、独自のプラグインを開発することができます。 多くの機能は、既存の 4Dプラグインでカバーされています。 [`4d-plugin`](https://github.com/topics/4d-plugin) のトピックで公開されている 4Dプラグインの一覧を Github で閲覧することができます。
diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/API/WebServerClass.md b/i18n/pt/docusaurus-plugin-content-docs/current/API/WebServerClass.md
index 7f51d6acdb0cf8..c642094be0c25b 100644
--- a/i18n/pt/docusaurus-plugin-content-docs/current/API/WebServerClass.md
+++ b/i18n/pt/docusaurus-plugin-content-docs/current/API/WebServerClass.md
@@ -23,6 +23,7 @@ Eles oferecem as propriedades abaixo e funções:
| [](#corssettings)
|
| [](#debuglog)
|
| [](#defaulthomepage)
|
+| [](#handlers)
|
| [](#hstsenabled)
|
| [](#hstsmaxage)
|
| [](#httpcompressionlevel)
|
@@ -46,6 +47,7 @@ Eles oferecem as propriedades abaixo e funções:
| [](#opensslversion)
|
| [](#perfectforwardsecrecy)
|
| [](#rootfolder)
|
+| [](#rules)
|
| [](#scalablesession)
|
| [](#sessioncookiedomain)
|
| [](#ipaddresstolisten)
|
@@ -169,6 +171,26 @@ O nome da página inicial p
+
+
+## .handlers
+
+História
+
+| Release | Mudanças |
+| ------- | ---------- |
+| 21 | Adicionado |
+
+
+
+**.handlers** : Collection
+
+*Propriedade apenas leitura*
+
+A collection of custom HTTP handler objects. An HTTP handler object contains a listened URL pattern, a handled verb, and the code to be called. HTTP handlers can be defined through a HTTPHandlers.json file or the *settings* parameter of the [`.start()`](#start) function. For more information, please refer to the [HTTP Request handler](../WebServer/http-request-handler.md) page.
+
+
+
## .HSTSEnabled
@@ -457,6 +479,26 @@ O caminho da pasta raiz do servi
+
+
+## .rules
+
+História
+
+| Release | Mudanças |
+| ------- | ---------- |
+| 21 | Adicionado |
+
+
+
+**.rules** : Collection
+
+*Propriedade apenas leitura*
+
+A collection of rule objects currently handled to customize HTTP headers. A rule object contains a "regexPattern" property, as well as an action name with a value. HTTP rules can be defined through a HTTPRules.json file or the *settings* parameter of the [`.start()`](#start) function. For more information, please refer to the [HTTP Rules](../WebServer/http-rules.md) page.
+
+
+
## .scalableSession
diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/Debugging/debugLogFiles.md b/i18n/pt/docusaurus-plugin-content-docs/current/Debugging/debugLogFiles.md
index 3a24dcf829f632..a6740870ce8f78 100644
--- a/i18n/pt/docusaurus-plugin-content-docs/current/Debugging/debugLogFiles.md
+++ b/i18n/pt/docusaurus-plugin-content-docs/current/Debugging/debugLogFiles.md
@@ -461,7 +461,7 @@ Como iniciar esse log:
- Use the `SET DATABASE PARAMETER` command:
```4d
- SET DATABASE PARAMETER(TCPUDP log; 1)
+ SET DATABASE PARAMETER(TCPUDP log recording; 1)
```
- Configure o log através de um [arquivo de configuração JSON](#using-a-log-configuration-file):
diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/FormEditor/forms.md b/i18n/pt/docusaurus-plugin-content-docs/current/FormEditor/forms.md
index 67a39c8d81d25d..1138d8154a484c 100644
--- a/i18n/pt/docusaurus-plugin-content-docs/current/FormEditor/forms.md
+++ b/i18n/pt/docusaurus-plugin-content-docs/current/FormEditor/forms.md
@@ -96,6 +96,73 @@ Não há restrições quanto ao número de páginas que um formulário pode ter.
Um formulário de múltiplas páginas possui tanto uma página de fundo quanto várias páginas de exibição. Objetos que são colocados na página de fundo podem ser visíveis em todas as páginas de exibição, mas só podem ser selecionados e editados na página de fundo. Em formulários de várias páginas, você deve colocar sua paleta de botões na página de fundo. Você também precisa incluir um ou mais objetos na página de fundo que forneçam ferramentas de navegação de página para o usuário.
+## Fluent UI rendering (Developer Preview)
+
+On Windows, 4D supports **Fluent UI** form rendering, Microsoft's modern graphical user interface design, based upon **WinUI 3** technology. **WinUI 3** is the foundation of the Windows App SDK and represents the upcoming Windows graphical interfaces.
+
+:::caution Prévia do desenvolvedor
+
+Fluent UI support is currently in the Developer Preview phase. Não deve ser usado na produção.
+
+:::
+
+:::info macOS
+
+This feature can only be used on Windows. On macOS, it is ignored.
+
+:::
+
+### Fluent UI rendering availability
+
+The Fluent UI rendering is available in the following execution environments only:
+
+- Windows with [Windows App SDK](https://learn.microsoft.com/en-us/windows/apps/windows-app-sdk/downloads) version 1.7.3 installed (you need to install this SDK on any Windows machine displaying your forms).
+- Fusionado aplicación 4D [autónomo](../Desktop/building.md#build-stand-alone-application) o [cliente](../Desktop/building.md#build-client-application)
+- [**Test application** feature](../Menus/bars.md#previewing-menu-bars) available from the Run menu.
+
+:::note
+
+If the Windows App SDK is not properly installed, 4D will render all your forms in classic mode with no error.
+
+:::
+
+### Enabling the Fluent UI rendering
+
+You can enable the Fluent UI rendering mode at the application level or at the form level. Form setting has priority over application setting.
+
+#### Application setting
+
+Check the **Use Fluent UI on Windows** option in the "Interface" page of the Settings dialog box.
+
+
+
+In this case, the Fluent UI rendering mode will be used by default on Windows for all forms.
+
+#### Form setting
+
+Each form can define its own rendering via the **Widget appearance** property. As opções abaixo estão disponíveis:
+
+- **Inherited**: inherits the global application setting (default),
+- **Classic**: uses the classic Windows style,
+- **Fluent UI**: enables the modern rendering based on Fluent UI.
+ 
+
+The corresponding [JSON form property](./properties_JSONref.md) is `fluentUI` with value undefined (i.e. inherited, default value), "true" or "false".
+
+### Features and limitations
+
+Fluent UI rendering offers modern and attractive controls, support of dark/light system themes, smoother rendering optimized for high-resolution displays, and consistent user experience aligned with recent Microsoft applications.
+
+When using 4D forms with Fluent UI rendering, you need to pay attention to the following points:
+
+- The `FORM Window theme` command returns the actual display theme of the current form. Possible values: "Classic" or "FluentUI". If there is no current form or the command is called on macOS, and empty string is returned.
+- If [`GET STYLE SHEET INFO`](../commands-legacy/get-style-sheet-info.md) is called in the context of a form, the information returned relates to the current appearance of the form (Classic or FluentUI). If the command is called outside the context of a form, the information returned relates to the [global project settings](#application-setting).
+- [`SET MENU ITEM STYLE`](../commands-legacy/set-menu-item-style.md) with `Underline` *itemStyle* parameter is not supported (ignored) for pop up menus.
+- A focus ring can be added to picture and text [inputs](../FormObjects/input_overview.md).
+- [Stepper](../FormObjects/stepper.md) form object does not support [double-click event](../Events/onDoubleClicked.md).
+- [Circle buttons](../FormObjects/button_overview.md#circle) are supported (similar as macOS).
+- The [`WA ZOOM IN`](../commands-legacy/wa-zoom-in.md) / [`WA ZOOM OUT`](../commands-legacy/wa-zoom-out.md) commands are not supported in Web areas with system rendering engine.
+
## Formulários herdados
Formulários 4D podem usar e ser usados como "formulários herdados," o que significa que todos os objetos do *Formulário A* podem ser usados no *Formulário B*. Neste caso, *Formulário B* "herda" os objetos do *Formulário A*.
diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/Notes/updates.md b/i18n/pt/docusaurus-plugin-content-docs/current/Notes/updates.md
index 08ba1384ca42d5..2ddb2e25800354 100644
--- a/i18n/pt/docusaurus-plugin-content-docs/current/Notes/updates.md
+++ b/i18n/pt/docusaurus-plugin-content-docs/current/Notes/updates.md
@@ -9,12 +9,17 @@ Leia [**O que há de novo no 4D 21**](https://blog.4d.com/en-whats-new-in-4d-21/
#### Destaques
-- Support of **AI Vector Searches** in the [`query()`](../API/DataClassClass.md#query-by-vector-similarity) function and in the [`$filter`](../REST/$filter.md#vector-similarity) REST API.
+- Support of AI Vector Searches in the [`query()`](../API/DataClassClass.md#query-by-vector-similarity) function and in the [`$filter`](../REST/$filter.md#vector-similarity) REST API.
- Support of TLS encryption for the [4D.TCPConnection](../API/TCPConnectionClass.md#4dtcpconnectionnew) class.
+- Servidor Web:
+ - new [HTTP rules](../WebServer/http-rules.md) to customize HTTP response headers,
+ - ability to set [HTTP request handlers](../WebServer/http-request-handler.md) using a `handlers` property in the *settings* parameter of the Web server [`start()`](../API/WebServerClass.md#start) function,
+ - the Web server object contains new [`rules`](../API/WebServerClass.md#rules) and [`handlers`](../API/WebServerClass.md#handlers) properties.
+- New [ORDA events on data](../ORDA/orda-events.md): validateSave, saving, afterSave, validateDrop, dropping, afterDrop.
- New option allowing to use certificates from Windows Certificate Store instead of a local certificates folder in [`HTTPRequest`](../API/HTTPRequestClass.md#4dhttprequestnew) and [`HTTPAgent`](../API/HTTPAgentClass.md#4dhttpagentnew) classes.
- Client/server:
- - use Qodly pages in Web areas and [share the remote client session](../Desktop/clientServer.md#sharing-the-session-with-qodly-pages-in-web-areas).
- - the [QUIC network layer](../settings/client-server.md#network-layer) has been enhanced to handle network interface changes transparently, for example when you travel with your laptop. See [this blog post](https://blog.4d.com/work-and-move-with-quic-and-network-switching).
+ - You can display Qodly pages in Web areas and [share the remote client session](../Desktop/clientServer.md#sharing-the-session-with-qodly-pages-in-web-areas).
+ - The [QUIC network layer](../settings/client-server.md#network-layer) has been enhanced to handle network interface changes transparently, for example when you travel with your laptop. See [this blog post](https://blog.4d.com/work-and-move-with-quic-and-network-switching).
- You can now [create components directly from the host project](../Extensions/develop-components.md#creating-components) and [edit their code from a dedicated tab](../Extensions/develop-components.md#editing-all-component-code) in the 4D Explorer without leaving or restarting the project.
- The 4D product activation step has been simplified and automated during [sign-in](../GettingStarted/Installation.md#sign-in).
- 4D AIKit component: new features to [invoke a specific tool automatically](../aikit/Classes/OpenAIChatHelper.md#registertool) and [specify a response format](../aikit/Classes/OpenAIChatCompletionsParameters.md#response-format).
@@ -22,6 +27,10 @@ Leia [**O que há de novo no 4D 21**](https://blog.4d.com/en-whats-new-in-4d-21/
- New "trim" commands to remove leading and trailing spaces from a string: [`Trim`](../commands/trim.md), [`Trim start`](../commands/trim-start.md), and [`Trim end`](../commands/trim-end.md).
- [`Num`](../commands/num.md) and [`String`](../commands/string.md) commands have been updated to support conversions in different bases (radix).
+#### Prévia do desenvolvedor
+
+[**Fluent UI** rendering for 4D forms](../FormEditor/forms.md#fluent-ui-rendering-developer-preview) is proposed in Developer Preview during the beta test program.
+
#### Mudanças de comportamento
:::caution Index rebuild
diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/ORDA/orda-events.md b/i18n/pt/docusaurus-plugin-content-docs/current/ORDA/orda-events.md
index 247b2ffdb9c541..dcd8c2c2b70e98 100644
--- a/i18n/pt/docusaurus-plugin-content-docs/current/ORDA/orda-events.md
+++ b/i18n/pt/docusaurus-plugin-content-docs/current/ORDA/orda-events.md
@@ -16,6 +16,12 @@ ORDA events are functions that are automatically invoked by ORDA each time entit
You cannot directly trigger event function execution. Events are called automatically by ORDA based on user actions or operations performed through code on entities and their attributes.
+:::tip Related blog post
+
+[ORDA – Handle an event-driven logic during data persistence actions](https://blog.4d.com/orda-handle-an-event-driven-logic-during-data-persistence-actions)
+
+:::
+
:::info Compatibility note
ORDA events in the datastore are equivalent to triggers in the 4D database. However, actions triggered at the 4D database level using the 4D classic language commands or standard actions do not trigger ORDA events.
@@ -112,12 +118,6 @@ When an error occurs in an event, the other events are stopped at the first rais
## Event function description
-:::tip Related blog post
-
-[ORDA – Handle an event-driven logic during data persistence actions](https://blog.4d.com/orda-handle-an-event-driven-logic-during-data-persistence-actions)
-
-:::
-
### `Function event touched`
#### Sintaxe
diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/Project/architecture.md b/i18n/pt/docusaurus-plugin-content-docs/current/Project/architecture.md
index 29f41eb921bd1a..a40ebbe6059948 100644
--- a/i18n/pt/docusaurus-plugin-content-docs/current/Project/architecture.md
+++ b/i18n/pt/docusaurus-plugin-content-docs/current/Project/architecture.md
@@ -64,6 +64,7 @@ Esse arquivo de texto também pode conter chaves de configuração, em particula
| filters.json | Filtros definidos | JSON |
| dependencies.json | Nomes de [componentes a serem carregados](components.md) no projeto | JSON |
| HTTPHandlers.json | [Manipuladores de solicitação HTTP](../WebServer/http-request-handler.md) personalizados definidos para o servidor Web | JSON |
+| HTTPRules.json | Custom [HTTP response headers](../WebServer/http-responses.md) defined for the web server | JSON |
| styleSheets.css | Folhas de estilo CSS | CSS |
| styleSheets_mac.css | Folhas de estilo css para Mac (de um banco de dados binário convertido) | CSS |
| styleSheets_windows.css | Folhas de estilo css em Windows (de um banco de dados binário convertido) | CSS |
diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/WebServer/http-request-handler.md b/i18n/pt/docusaurus-plugin-content-docs/current/WebServer/http-request-handler.md
index 1de6c9b89e4d15..c7087a7d78fa5c 100644
--- a/i18n/pt/docusaurus-plugin-content-docs/current/WebServer/http-request-handler.md
+++ b/i18n/pt/docusaurus-plugin-content-docs/current/WebServer/http-request-handler.md
@@ -17,22 +17,33 @@ Custom HTTP request handlers meet various needs, including:
## Requisitos
-Custom HTTP Request handlers are supported:
+Custom HTTP Request handlers are supported in the following context:
-- quando as [sessões escalonáveis](./sessions.md#enabling-web-sessions) estão ativadas,
-- with the main Web Server only (HTTP Request handlers that may have been defined in [Web Servers of components](../WebServer/webServerObject.md) are ignored).
+- [scalable sessions](./sessions.md#enabling-web-sessions) or [no sessions](../settings/web.md#no-sessions) are enabled,
+- a web server run locally by 4D or 4D Server, including those [run by components](./webServerObject.md).
:::warning
-[Por padrão](../ORDA/privileges.md#default-file) por razões de segurança, o acesso externo ao datastore não é permitido em 4D. Você precisa configurar os [privilégios ORDA](../ORDA/privileges.md) para permitir solicitações HTTP.
+For security reasons, external access to the datastore can be disallowed in 4D. Você precisa configurar os [privilégios ORDA](../ORDA/privileges.md) para permitir solicitações HTTP.
:::
-## Arquivo HTTPHandlers.json
+## How to set handlers
-You define your custom HTTP Request handlers in a configuration file named **HTTPHandlers.json** stored in the [`Project/Sources`](../Project/architecture.md#sources) folder.
+You can declare HTTP Request handlers:
-This file contains all listened URL patterns, the handled verbs, and the code to be called. Handlers are provided as a collection in JSON format.
+- in a configuration file named **HTTPHandlers.json** stored in the [`Project/Sources`](../Project/architecture.md#sources) folder of the project. HTTP Request handlers are loaded and applied in the main Web server once it is started.
+- using a [`.handlers`](../API/WebServerClass.md#handlers) property set in the *settings* parameter of the [start()](../API/WebServerClass.md#start) function, for any web server object:
+
+```4d
+WEB Server.start($settings.handlers) //set rules at web server startup
+```
+
+If both a **HTTPHandlers.json** file and a call to the [`WEB Server`](../commands/web-server.md) command with a valid `$settings.handlers` are used, the `WEB Server` command has priority.
+
+The json file (or the object in the *settings* parameter) contains all listened URL patterns, the handled verbs, and the code to be called.
+
+Handlers are provided as a collection.
At runtime, the first pattern matching the URL is executed, the others are ignored.
diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/WebServer/http-rules.md b/i18n/pt/docusaurus-plugin-content-docs/current/WebServer/http-rules.md
new file mode 100644
index 00000000000000..a8c220ccb23587
--- /dev/null
+++ b/i18n/pt/docusaurus-plugin-content-docs/current/WebServer/http-rules.md
@@ -0,0 +1,222 @@
+---
+id: http-rules
+title: HTTP Rules
+---
+
+You can define HTTP rules to control HTTP response headers for any requests received by the 4D web server, including REST requests. You can add, modify, or remove HTTP headers, send redirections or set the HTTP status. This feature is useful to implement security policies based upon the handling of headers.
+
+To define HTTP rules, you just need to write some RegEx to declare the URL patterns you want to control, as well as how to modify response headers. You can set these rules using a `HTTPRules.json` file stored in the project folder, or using the *settings* parameter [`start()`](../API/WebServerClass.md#start) function of the web server object.
+
+## Requisitos
+
+HTTP rules are supported in the following contexts:
+
+- [scalable sessions](./sessions.md#enabling-web-sessions) or [no sessions](../settings/web.md#no-sessions) are enabled,
+- a web server run locally by 4D or 4D Server, including those [run by components](./webServerObject.md).
+
+## How to set rules
+
+You can declare HTTP response rules:
+
+- in a configuration file named **HTTPRules.json** stored in the [`Project/Sources`](../Project/architecture.md#sources) folder of the project. Rules are loaded and applied in the main Web server once it is started.
+- using a [`.rules`](../API/WebServerClass.md#rules) property set in the *settings* parameter of the [`start()`](../API/WebServerClass.md#start) function, for any web server object:
+
+```4d
+WEB Server.start($settings.rules) //set rules at web server startup
+```
+
+If both a **HTTPRules.json** file and a call to the [`WEB Server`](../commands/web-server.md) command with a valid `$settings.rules` are used, the `WEB Server` command has priority.
+
+If the URI of the request does not match any of the RegEx patterns, the web server returns a default response.
+
+## Rules Definition
+
+The **HTTPRules.json** file or the [`.rules`](../API/WebServerClass.md#rules) property must contain a collection of **rule objects**.
+
+A rule object is defined by:
+
+- a RegEx describing a URL pattern, e.g. "^(.\*\\.(jpg|jpeg|png|gif))"
+- the name of the action to execute for the HTTP response, e.g. "removeHeaders"
+- the value of the action, e.g. "X-Unwanted-Header1"
+
+Other properties are ignored.
+
+### URL patterns
+
+URL patterns are given using **regular expressions**. To declare a regular expression pattern, use the "RegExPattern" property name.
+
+Ex: `"RegExPattern": "/Test/Authorized/(.*)"`
+
+When the web server receives a request, **all** URL patterns are triggered sequentially in the given order, and all matching patterns are executed. In case of several actions modifying similar resources, the last executed action is taken into account.
+
+### Acções
+
+The following action keywords are supported:
+
+| Palavra-chave | Tipo de valor | Descrição |
+| --------------- | --------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| `removeHeaders` | Text or Collection of texts | Header(s) to remove from the HTTP responses. If a header to remove does not exist in the response header, it is ignored. |
+| `addHeaders` | Object | Name (text) and value (text) of header(s) to add to the HTTP responses. |
+| `setHeaders` | Object | Name (text) and value (text) of header(s) to modify in the HTTP responses. If a header to modify does not exist in the response header, it is added. |
+| `denyAccess` | Parâmetros | true to deny access to the resource, false to allow access. When the access to a resource is denied, the web server returns a 403 status by default |
+| `redirect` | Text | Redirection URL. When a redirection is triggered, the web server returns a 302 status by default |
+| `status` | Number | HTTP status |
+
+### Non-modifiable headers
+
+The following headers could not be modified by the `removeHeaders`, `setHeaders`, or `addHeaders` actions:
+
+- "Date",
+- "Content-Length"
+
+Modifying these headers do not generate errors, however modifications will be ignored.
+
+### Current rules
+
+You can know the current rules using the [`.rules` property of the Web Server object](../API/WebServerClass.md#rules):
+
+```
+var $rules : Collection
+$rules:=WEB Server.rules //current rules
+```
+
+## Exemplos
+
+Rules can be set using a `HTTPRules.json` file or the *settings* parameter of the [`.start()`](../API/WebServerClass.md#start) web server function.
+
+### Using a HTTPRules.json file
+
+```json
+
+[
+ {
+ "comment": "All requests: allow GET method for, remove 'Server' header and set security headers",
+ "regexPattern": "/(.*)",
+ "setHeaders": {
+ "Allow": "GET",
+ "X-Frame-Options": "SAMEORIGIN",
+ "Content-Security-Policy": "default-src 'self'"
+ },
+ "removeHeaders": [
+ "Server"
+ ]
+ },
+ {
+ "comment": "REST requests: allow POST method",
+ "regexPattern": "/rest/(.*)",
+ "addHeaders": {
+ "Allow": "POST"
+ }
+ },
+ {
+ "comment": "HTML files in 'doc' folder: set cache control",
+ "regexPattern": "/docs/(.*).html",
+ "setHeaders": {
+ "Cache-Control": "max-age=3600"
+ },
+ "removeHeaders": [
+ "X-Powered-By"
+ ]
+ },
+ {
+ "comment": "Status 503 on 'maintenance' page",
+ "regexPattern": "^/maintenance.html",
+ "status": 503
+ },
+ {
+ "comment": "Redirect CSS and JS files",
+ "regexPattern": "^(.*\\\\.(css|js))",
+ "redirect": "https://cdn.example.com/"
+ },
+ {
+ "comment": "Redirect images with permanent status code",
+ "regexPattern": "^(.*\\\\.(jpg|jpeg|png|gif))",
+ "redirect": "https://cdn.example.com/images/",
+ "status": 301
+ },
+ {
+ "comment": "Deny access for all resources placed in the 'private' folder",
+ "regexPattern": "/private/(.*)",
+ "denyAccess": true
+ },
+ {
+ "comment": "Allow access to all resources placed in the 'private/allowed' folder",
+ "regexPattern": "/private/allowed/(.*)",
+ "denyAccess": false
+ }
+]
+
+```
+
+### Using a *settings* parameter
+
+```4d
+var $rule:={}
+
+var $settings:={}
+
+$settings.rules:=[]
+
+$rule:={}
+$rule.comment:="All requests: allow GET method for, remove 'Server' header and set security headers"
+$rule.regexPattern:="/(.*)"
+$rule.setHeaders:={Allow: "GET"}
+$rule.setHeaders["X-Frame-Options"]:="SAMEORIGIN"
+$rule.setHeaders["Content-Security-Policy"]:="default-src 'self'"
+$rule.removeHeaders:=["Server"]
+$settings.rules.push($rule)
+
+$rule:={}
+$rule.comment:="REST requests: allow POST method"
+$rule.regexPattern:="/rest/(.*)"
+$rule.addHeaders:={Allow: "POST"}
+$settings.rules.push($rule)
+
+$rule:={}
+$rule.comment:="HTML files in 'doc' folder: set cache control"
+$rule.regexPattern:="/docs/(.*).html"
+$rule.setHeaders:={}
+$rule.setHeaders["Cache-Control"]:="max-age=3600"
+$rule.removeHeaders:=["X-Powered-By"]
+$settings.rules.push($rule)
+
+$rule:={}
+$rule.comment:="Status 503 on 'maintenance' page"
+$rule.regexPattern:="^/maintenance.html"
+$rule.status:=503
+$settings.rules.push($rule)
+
+$rule:={}
+$rule.comment:="Redirect CSS and JS files"
+$rule.regexPattern:="^(.*\\\\.(css|js))"
+$rule.redirect:="https://cdn.example.com/"
+$settings.rules.push($rule)
+
+$rule:={}
+$rule.comment:="Redirect images with permanent status code"
+$rule.regexPattern:="^(.*\\\\.(jpg|jpeg|png|gif))"
+$rule.redirect:="https://cdn.example.com/images/"
+$rule.status:=301
+$settings.rules.push($rule)
+
+$rule:={}
+$rule.comment:="Deny access for all resources placed in the 'private' folder"
+$rule.regexPattern:="/private/(.*)"
+$rule.denyAccess:=True
+$settings.rules.push($rule)
+
+$rule:={}
+$rule.comment:="Allow access to all resources placed in the 'private/allowed' folder"
+$rule.regexPattern:="/private/allowed/(.*)"
+$rule.denyAccess:=False
+$settings.rules.push($rule)
+
+$return:=WEB Server.start($settings)
+
+```
+
+:::tip Related blog post
+
+[New Way to Control Your HTTP Responses](https://blog.4d.com/new-way-to-control-your-http-responses/)
+
+:::
diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/assets/en/FormEditor/winui-form.png b/i18n/pt/docusaurus-plugin-content-docs/current/assets/en/FormEditor/winui-form.png
new file mode 100644
index 00000000000000..44f0b153852027
Binary files /dev/null and b/i18n/pt/docusaurus-plugin-content-docs/current/assets/en/FormEditor/winui-form.png differ
diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/assets/en/FormEditor/winui-setting.png b/i18n/pt/docusaurus-plugin-content-docs/current/assets/en/FormEditor/winui-setting.png
new file mode 100644
index 00000000000000..ad71386b9acada
Binary files /dev/null and b/i18n/pt/docusaurus-plugin-content-docs/current/assets/en/FormEditor/winui-setting.png differ
diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/assets/en/FormObjects/fluentui-form.png b/i18n/pt/docusaurus-plugin-content-docs/current/assets/en/FormObjects/fluentui-form.png
new file mode 100644
index 00000000000000..00d3b1d2d663ef
Binary files /dev/null and b/i18n/pt/docusaurus-plugin-content-docs/current/assets/en/FormObjects/fluentui-form.png differ
diff --git a/i18n/pt/docusaurus-plugin-content-docs/current/assets/en/FormObjects/fluentui-setting.png b/i18n/pt/docusaurus-plugin-content-docs/current/assets/en/FormObjects/fluentui-setting.png
new file mode 100644
index 00000000000000..e8c5e02f62431f
Binary files /dev/null and b/i18n/pt/docusaurus-plugin-content-docs/current/assets/en/FormObjects/fluentui-setting.png differ
diff --git a/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/Debugging/debugLogFiles.md b/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/Debugging/debugLogFiles.md
index efe08c7a4060e2..4bb72185eeaee0 100644
--- a/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/Debugging/debugLogFiles.md
+++ b/i18n/pt/docusaurus-plugin-content-docs/version-20-R10/Debugging/debugLogFiles.md
@@ -461,7 +461,7 @@ Como iniciar esse log:
- Use the `SET DATABASE PARAMETER` command:
```4d
- SET DATABASE PARAMETER(TCPUDP log; 1)
+ SET DATABASE PARAMETER(TCPUDP log recording; 1)
```
- Configure o log através de um [arquivo de configuração JSON](#using-a-log-configuration-file):