diff --git a/README.md b/README.md
index d600d2b..26beda6 100644
--- a/README.md
+++ b/README.md
@@ -1,28 +1,28 @@
-# AppGini Documentation
+# Documentación de AppGini
-This repository contains the source files (in Markdown format) used for the [AppGini documentation](https://bigprof.com/appgini/help).
+Este repositorio contiene los archivos fuente (en formato Markdown) utilizados para la [documentación de AppGini](https://bigprof.com/appgini/help).
-[AppGini](https://bigprof.com/appgini/) is a web application development environment that dramatically reduces the time and effort required to create data-driven web applications.
-It enables you to create data-driven web applications without having to write any code. You can use it to create custom web applications for
-managing your data, your processes, and your customers.
+[AppGini](https://bigprof.com/appgini/) es un entorno de desarrollo de aplicaciones web que reduce drásticamente el tiempo y el esfuerzo necesarios para crear aplicaciones web basadas en datos.
+Permite crear aplicaciones web basadas en datos sin tener que escribir ningún código. Puede utilizarlo para crear aplicaciones web personalizadas para
+gestionar sus datos, sus procesos y sus clientes.
-## Document format
+## Formato del documento
-The documentation is written in extended Markdown format. Each page is a separate Markdown file in the `pages` directory.
-This directory contains subdirectories for each section of the documentation, such as `working-with-projects`, `advanced-topics`, etc.
-The `index.md` file in each subdirectory is the main page for that section.
+La documentación está escrita en formato Markdown extendido. Cada página es un archivo Markdown independiente en el directorio `pages`.
+Este directorio contiene subdirectorios para cada sección de la documentación, como `working-with-projects`, `advanced-topics`, etc.
+El archivo `index.md` de cada subdirectorio es la página principal de esa sección.
-*Front matter* is used to specify various information about each page. Currently supported front matter fields are:
+La *información preliminar* (front matter) se utiliza para especificar diversa información sobre cada página. Actualmente, los campos de información preliminar admitidos son:
-* `title`: The title of the page (applied to the `
` tag in the generated HTML, as well as the page heading).
-* `description`: A brief description of the page's content, applied to the `` tag in the generated HTML.
-* `keywords`: A comma-separated list of keywords for the page, applied to the `` tag in the generated HTML.
-* `linkTitle`: The title of the page as it *should* appear in the TOC men. Typically, this is a shorter version of the `title` field.
-* `slug`: The URL of the page, relative to the root of the documentation. For example, `help/working-with-projects`.
+* `title`: El título de la página (aplicado a la etiqueta `` en el HTML generado, así como al encabezado de la página).
+* `description`: Una breve descripción del contenido de la página, aplicada a la etiqueta `` en el HTML generado.
+* `keywords`: Una lista de palabras clave separadas por comas para la página, aplicada a la etiqueta `` en el HTML generado.
+* `linkTitle`: El título de la página tal como *debería* aparecer en el menú TDC (Tabla de Contenidos). Normalmente, esta es una versión más corta del campo `title`.
+* `slug`: La URL de la página, relativa a la raíz de la documentación. Por ejemplo, `help/working-with-projects`.
-In general, the front matter follows the same rules of [Hugo static site generator](https://gohugo.io/content-management/front-matter/),
-though Hugo is not used to generate this documentation. Only the yaml dialect of front matter is supported.
+En general, la información preliminar sigue las mismas reglas del [generador de sitios estáticos Hugo](https://gohugo.io/content-management/front-matter/),
+aunque Hugo no se utiliza para generar esta documentación. Solo se admite el dialecto yaml de la información preliminar.
-## Contributing
+## Contribuir
-If you'd like to contribute to the documentation, please fork this repository, make your changes, and submit a pull request.
+Si desea contribuir a la documentación, por favor, haga un fork de este repositorio, realice sus cambios y envíe una pull request.
diff --git a/pages/advanced-topics/command-line-parameters.md b/pages/advanced-topics/command-line-parameters.md
index e60de5d..a22f0f0 100644
--- a/pages/advanced-topics/command-line-parameters.md
+++ b/pages/advanced-topics/command-line-parameters.md
@@ -1,72 +1,72 @@
---
-title: Command-line parameters
-linkTitle: Command-line parameters
+title: Parámetros de línea de comandos
+linkTitle: Parámetros de línea de comandos
slug: help/advanced-topics/command-line-parameters
-description: Command-line parameters to automate AppGini, including generating apps from project files, specifying output paths, and uploading apps to servers.
-keywords: command-line parameters, generate, output, upload, log, CI/CD, deployment
+description: Parámetros de línea de comandos para automatizar AppGini, incluyendo la generación de aplicaciones a partir de archivos de proyecto, la especificación de rutas de salida y la carga de aplicaciones a servidores.
+keywords: parámetros de línea de comandos, generar, salida, cargar, log, CI/CD, despliegue
---
-# Command-line parameters
+# Parámetros de línea de comandos
-> **Command-line parameters work only with [AppGini Pro](https://bigprof.com/appgini/order).**
+> **Los parámetros de línea de comandos solo funcionan con [AppGini Pro](https://bigprof.com/appgini/order).**
-You can use command-line parameters to automate AppGini. For example, you can add a command to generate an AppGini application as part of your deployment workflow in a batch/script file. Currently, the following parameters are supported:
+Puede utilizar parámetros de línea de comandos para automatizar AppGini. Por ejemplo, puede agregar un comando para generar una aplicación AppGini como parte de su flujo de trabajo de despliegue en un archivo de procesamiento por lotes/script. Actualmente, se admiten los siguientes parámetros:
## `--generate`
-**Usage:** `--generate "path\to\project\file"`
+**Uso:** `--generate "ruta\al\archivo\de\proyecto"`
-(Added in AppGini 5.11). Generates application from provided AXP project file, using the output path and file overwriting settings stored in the project file, then quits. If the path to the project file contains spaces, use double-quotes around the project path.
+(Añadido en AppGini 5.11). Genera la aplicación a partir del archivo de proyecto AXP proporcionado, utilizando la ruta de salida y la configuración de sobrescritura de archivos almacenada en el archivo de proyecto, y luego sale. Si la ruta al archivo de proyecto contiene espacios, utilice comillas dobles alrededor de la ruta del proyecto.
## `--log`
-**Usage:** `--log "path\to\log\file"`
+**Uso:** `--log "ruta\al\archivo\de\registro"`
-(Added in AppGini 5.81). Specifies a path to a log file to save the output log to when generating an app. If the log file path contains spaces, use double-quotes around it.
+(Añadido en AppGini 5.81). Especifica una ruta a un archivo de registro para guardar el registro de salida al generar una aplicación. Si la ruta del archivo de registro contiene espacios, utilice comillas dobles alrededor de ella.
## `--open`
-**Usage:** `--open "path\to\project\file"`
+**Uso:** `--open "ruta\al\archivo\de\proyecto"`
-(Added in AppGini 5.73). Opens the specified project file in AppGini. If the path to the project file contains spaces, use double-quotes around the project path.
+(Añadido en AppGini 5.73). Abre el archivo de proyecto especificado en AppGini. Si la ruta al archivo de proyecto contiene espacios, utilice comillas dobles alrededor de la ruta del proyecto.
## `--output`
-**Usage:** `--output "path\to\ouput\folder"`
+**Uso:** `--output "ruta\a\la\carpeta\de\salida"`
-(Added in AppGini 5.73). Specifies output path to use when generating an application, overriding the path stored in the project file. A project file must be specified using `--generate`. If the output path contains spaces, use double-quotes around the output path.
+(Añadido en AppGini 5.73). Especifica la ruta de salida a utilizar al generar una aplicación, sobrescribiendo la ruta almacenada في el archivo de proyecto. Se debe especificar un archivo de proyecto utilizando `--generate`. Si la ruta de salida contiene espacios, utilice comillas dobles alrededor de la ruta de salida.
## `--upload`
-**Usage:** `--upload "URL"`
+**Uso:** `--upload "URL"`
-(Added in AppGini 24.19). Uploads the generated app to the specified URL. The URL should point to the root of the AppGini app on the server. If the URL is not provided, the app will be uploaded to application URL specified in the project file. This option must be combined with `--generate` or `--open` to specify the project file. If combined with `--generate`, the app will be generated first then uploaded. If combined with `--open`, the app will be uploaded without generating it. For more information on uploading apps, see [Uploading AppGini apps](../application-uploader.md).
+(Añadido en AppGini 24.19). Sube la aplicación generada a la URL especificada. La URL debe apuntar a la raíz de la aplicación AppGini en el servidor. Si no se proporciona la URL, la aplicación se subirá a la URL de la aplicación especificada en el archivo de proyecto. Esta opción debe combinarse con `--generate` o `--open` para especificar el archivo de proyecto. Si se combina con `--generate`, la aplicación se generará primero y luego se subirá. Si se combina con `--open`, la aplicación se subirá sin generarla. Para obtener más información sobre la carga de aplicaciones, consulte [Carga de aplicaciones AppGini](../application-uploader.md).
-This feature is great for automating deployment of AppGini apps, and can be used as part of a CI/CD (Continuous Integration/Continuous Deployment) pipeline. See the example in [Deploying one app to multiple servers](#deploying-one-app-to-multiple-servers) below.
+Esta característica es ideal para automatizar el despliegue de aplicaciones AppGini y se puede utilizar como parte de un pipeline de CI/CD (Integración Continua/Despliegue Continuo). Consulte el ejemplo en [Despliegue de una aplicación en múltiples servidores](#despliegue-de-una-aplicación-en-múltiples-servidores) a continuación.
-## Examples
+## Ejemplos
-This following command would launch AppGini and generate an application from myapp.axp to the folder stored in the project file.
+El siguiente comando iniciaría AppGini y generaría una aplicación a partir de `myapp.axp` en la carpeta almacenada en el archivo de proyecto.
```batch
"C:\Program Files\AppGini\AppGini" --generate C:\projects\myapp.axp
```
-This following command would launch AppGini and generate an application from myapp.axp to the folder `C:\xampp\htdocs\myapp2` -- overriding the folder stored in the project file if different. If the specified folder doesn't exist, AppGini will attempt to create it.
+El siguiente comando iniciaría AppGini y generaría una aplicación a partir de `myapp.axp` en la carpeta `C:\xampp\htdocs\myapp2`, sobrescribiendo la carpeta almacenada en el archivo de proyecto si es diferente. Si la carpeta especificada no existe, AppGini intentará crearla.
```batch
"C:\Program Files\AppGini\AppGini" --generate C:\projects\myapp.axp --output C:\xampp\htdocs\myapp2
```
-This following command would launch AppGini, generate an application from myapp.axp, and save output log to `C:\logs\myapp.log`.
+El siguiente comando iniciaría AppGini, generaría una aplicación a partir de `myapp.axp` y guardaría el registro de salida en `C:\logs\myapp.log`.
```batch
"C:\Program Files\AppGini\AppGini" --generate C:\projects\myapp.axp --log C:\logs\myapp.log
```
-## Deploying one app to multiple servers
+## Despliegue de una aplicación en múltiples servidores
-You can use the `--generate` and `--upload` parameters to deploy the same app to multiple servers. For example, the following batch file would generate an app from `myapp.axp` and upload it to three different servers:
+Puede utilizar los parámetros `--generate` y `--upload` para desplegar la misma aplicación en múltiples servidores. Por ejemplo, el siguiente archivo de procesamiento por lotes generaría una aplicación a partir de `myapp.axp` y la subiría a tres servidores diferentes:
```batch
"C:\Program Files\AppGini\AppGini" --generate C:\projects\myapp.axp --upload https://server1.com/myapp
@@ -74,5 +74,4 @@ You can use the `--generate` and `--upload` parameters to deploy the same app to
"C:\Program Files\AppGini\AppGini" --open C:\projects\myapp.axp --upload https://server3.com/myapp
```
-We only need to generate the app once, then open the project file and upload it to each server.
-
+Solo necesitamos generar la aplicación una vez, luego abrir el archivo de proyecto y subirlo a cada servidor.
diff --git a/pages/advanced-topics/custom-limited-access-pages.md b/pages/advanced-topics/custom-limited-access-pages.md
index 4216496..7e3c4cc 100644
--- a/pages/advanced-topics/custom-limited-access-pages.md
+++ b/pages/advanced-topics/custom-limited-access-pages.md
@@ -1,34 +1,34 @@
---
-title: Adding custom limited-access pages and reports
-linkTitle: Custom pages
+title: Añadir páginas e informes personalizados de acceso limitado
+linkTitle: Páginas personalizadas
slug: help/advanced-topics/custom-limited-access-pages
-description: Learn how to create custom pages and reports in your AppGini application and limit access to them to authenticated users.
-keywords: custom pages, custom reports, limited access, user groups, permissions, hooks, getMemberInfo
+description: Aprenda a crear páginas e informes personalizados en su aplicación AppGini y a limitar su acceso a usuarios autenticados.
+keywords: páginas personalizadas, informes personalizados, acceso limitado, grupos de usuarios, permisos, hooks, getMemberInfo
---
-# Adding custom limited-access pages and reports
+# Añadir páginas e informes personalizados de acceso limitado
-In most applications, you might need to create additional customized pages besides the ones generated by AppGini. For example, you might want to add some reports, charts, switch boards, special forms, .. etc. In this article, we'll explain how you can create an additional page and limit access to it to authenticated users. We'll also explain how to integrate it as part of your AppGini application.
+En la mayoría de las aplicaciones, es posible que necesite crear páginas personalizadas adicionales además de las generadas por AppGini. Por ejemplo, puede que desee añadir algunos informes, gráficos, paneles de control, formularios especiales, etc. En este artículo, explicaremos cómo puede crear una página adicional y limitar el acceso a ella a los usuarios autenticados. También explicaremos cómo integrarla como parte de su aplicación AppGini.
-You probably want to achieve 3 goals while integrating new custom pages into your AppGini application:
+Probablemente desee alcanzar 3 objetivos al integrar nuevas páginas personalizadas en su aplicación AppGini:
-1. **Control access to the page.** You want only authenticated users (or maybe only _some_ authenticated users) to be able to access the page, while others are redirected to the homepage or the login form.
-2. **Integrate the page appearance into your application.** That is, you want that custom page to display the same top navigation menu shown in the other pages of your application, and to have the same theme.
-3. **Link to the page from other pages** so that your application users can easily find it. You might want to link to it from the homepage and/or form the "Jump to" drop-down menu in the top navigation bar.
+1. **Controlar el acceso a la página.** Desea que solo los usuarios autenticados (o quizás solo *algunos* usuarios autenticados) puedan acceder a la página, mientras que otros son redirigidos a la página de inicio o al formulario de inicio de sesión.
+2. **Integrar la apariencia de la página en su aplicación.** Es decir, desea que esa página personalizada muestre el mismo menú de navegación superior que se muestra en las otras páginas de su aplicación y que tenga el mismo tema.
+3. **Enlazar a la página desde otras páginas** para que los usuarios de su aplicación puedan encontrarla fácilmente. Es posible que desee enlazarla desde la página de inicio y/o desde el menú desplegable "Saltar a" en la barra de navegación superior.
-We'll cover all the above points in this article.
+Cubriremos todos los puntos anteriores en este artículo.
-### Control access to your custom page
+### Controlar el acceso a su página personalizada
-AppGini supports a membership system that is based on user groups.
+AppGini admite un sistema de membresía basado en grupos de usuarios.
-1. You can grant some permissions to a group (or some groups), and all users under that group would automatically be granted those permissions.
-2. Alternatively, you can grant some permissions only to a specific user rather than an entire group.
-3. Another approach is to grant some permissions to any authenticated user regardless of which group they belong to.
+1. Puede conceder algunos permisos a un grupo (o algunos grupos), y todos los usuarios de ese grupo obtendrán automáticamente esos permisos.
+2. Alternativamente, puede conceder algunos permisos solo a un usuario específico en lugar de a todo un grupo.
+3. Otro enfoque es conceder algunos permisos a cualquier usuario autenticado, independientemente del grupo al que pertenezca.
-Let's see how to apply any of these approaches to your custom page.
+Veamos cómo aplicar cualquiera de estos enfoques a su página personalizada.
-First of all, let's create a new file in the `hooks` folder inside your AppGini-generated application folder. Let's call it `example.php`. Now, open that file in your text editor and paste the code below then save it.
+En primer lugar, creemos un nuevo archivo en la carpeta `hooks` dentro de la carpeta de su aplicación generada por AppGini. Llamémoslo `example.php`. Ahora, abra ese archivo en su editor de texto y pegue el siguiente código, luego guárdelo.
```php
**Tip!** If you plan to add many custom pages to your application, it might not be very practical to place links to all of them directly into the navigation menu or the homepage. A more organized approach in this case is to create a page listing the custom links and add a link to that page rather than to each custom page.
+> **¡Consejo!** Si planea añadir muchas páginas personalizadas a su aplicación, puede que no sea muy práctico colocar enlaces a todas ellas directamente en el menú de navegación o en la página de inicio. Un enfoque más organizado en este caso es crear una página que liste los enlaces personalizados y añadir un enlace a esa página en lugar de a cada página personalizada.
-#### If you are using AppGini versions before 5.90
+#### Si está utilizando versiones de AppGini anteriores a la 5.90
-If you're using AppGini versions earlier than 5.90, you need to `include` language files when creating a custom page. In all of the above code snippets, change this part of the code:
+Si está utilizando versiones de AppGini anteriores a la 5.90, necesita `incluir` archivos de idioma al crear una página personalizada. En todos los fragmentos de código anteriores, cambie esta parte del código:
```php
include("$hooks_dir/../lib.php");
```
-to:
+a:
```php
include("$hooks_dir/../defaultLang.php");
include("$hooks_dir/../language.php");
include("$hooks_dir/../lib.php");
```
-
diff --git a/pages/advanced-topics/customization-cookbook.md b/pages/advanced-topics/customization-cookbook.md
index de7e6b3..1b47b01 100644
--- a/pages/advanced-topics/customization-cookbook.md
+++ b/pages/advanced-topics/customization-cookbook.md
@@ -1,34 +1,34 @@
---
-title: Customization Cookbook
-linkTitle: Customization Cookbook
+title: Libro de recetas de personalización
+linkTitle: Libro de recetas de personalización
slug: help/advanced-topics/customization-cookbook
-keywords: customization, cookbook, recipes, hooks, footer-extras.php, tablename-dv.js
-description: Quick recipes for common customizations.
+keywords: personalización, libro de recetas, recetas, hooks, footer-extras.php, tablename-dv.js
+description: Recetas rápidas para personalizaciones comunes.
---
-# Customization Cookbook
+# Libro de recetas de personalización
-This page contains quick recipes for common customizations that you can apply to your AppGini applications. This is a dynamic page that will be updated with new recipes over time.
-So, bookmark this page and check back often!
+Esta página contiene recetas rápidas para personalizaciones comunes que puede aplicar a sus aplicaciones AppGini. Esta es una página dinámica que se actualizará con nuevas recetas con el tiempo.
+¡Así que marque esta página como favorita y vuelva a consultarla a menudo!
-## Disable the detail view layout buttons
+## Desactivar los botones de diseño de la vista detallada
-Add the following code to `hooks/footer-extras.php` to disable the detail view layout buttons (the buttons that allow users to switch single, double, and triple column layouts in the detail view) in all tables:
+Añada el siguiente código a `hooks/footer-extras.php` para desactivar los botones de diseño de la vista detallada (los botones que permiten a los usuarios cambiar los diseños de una, dos y tres columnas en la vista detallada) en todas las tablas:
```html
```
-If you'd like to disable the layout buttons only in certain tables, you can instead create the file `hooks/tablename-dv.js` if it doesn't already exist (replace `tablename` with the actual name of the table), and add the following code to it:
+Si desea desactivar los botones de diseño solo en ciertas tablas, puede crear el archivo `hooks/tablename-dv.js` si aún no existe (reemplace `tablename` con el nombre real de la tabla) y añadirle el siguiente código:
```js
AppGini.renderDVLayoutToolbar = () => {};
```
-## Change the clickable icon for links in a table
+## Cambiar el icono en el que se puede hacer clic para los enlaces de una tabla
-If you want to change the clickable icon for links in a specific table and avoid having to manually update the icon after every project build, you can use the following solution. Create a file named `tablename-tv.js` in the `hooks` folder (replace `tablename` with the actual name of the table containing the link field), and add the following JavaScript code to it:
+Si desea cambiar el icono en el que se puede hacer clic para los enlaces de una tabla específica y evitar tener que actualizar manualmente el icono después de cada compilación del proyecto, puede utilizar la siguiente solución. Cree un archivo llamado `tablename-tv.js` en la carpeta `hooks` (reemplace `tablename` con el nombre real de la tabla que contiene el campo de enlace) y añádale el siguiente código JavaScript:
```js
$j(() => {
@@ -36,90 +36,89 @@ $j(() => {
});
```
-Replace `tablename` with the name of your table and `fieldname` with the name of your link field. This code changes the default globe icon (`glyphicon-globe`) to a shopping cart icon (`glyphicon-shopping-cart`).
+Reemplace `tablename` por el nombre de su tabla y `fieldname` por el nombre de su campo de enlace. Este código cambia el icono de globo terráqueo predeterminado (`glyphicon-globe`) por un icono de carrito de la compra (`glyphicon-shopping-cart`).
-By placing this code in the `hooks` folder, your changes will persist even if you regenerate the app later.
+Al colocar este código en la carpeta `hooks`, sus cambios persistirán incluso si regenera la aplicación más tarde.
-## Prepend a currency symbol to amount fields in the table view
+## Anteponer un símbolo de moneda a los campos de importe en la vista de tabla
-If you'd like to prepend a currency symbol (e.g., ₹ for Indian Rupee) to amount fields in the table view of your AppGini application, you can use CSS for a simple solution. This method is more user-friendly than using **Data format** tab in AppGini and editing the `dataFormats.cfg` file and allows you to customize the display without affecting your database queries.
+Si desea anteponer un símbolo de moneda (por ejemplo, ₹ para la rupia india) a los campos de importe en la vista de tabla de su aplicación AppGini, puede utilizar CSS para una solución sencilla. Este método es más fácil de usar que utilizar la pestaña **Formato de datos** en AppGini y editar el archivo `dataFormats.cfg` y le permite personalizar la visualización sin afectar a sus consultas de base de datos.
-Open the generated `hooks/footer-extras.php` file in your project and add the following code at the end of the file:
+Abra el archivo generado `hooks/footer-extras.php` en su proyecto y añada el siguiente código al final del archivo:
```php
```
-**Explanation of the Code**
+**Explicación del código**
-- The **first block** (lines 2-8) specifies the currency symbol (`₹`) for the amount fields in the **print view**.
-- The **second block** (lines 10-15) specifies the currency symbol (`₹`) for the amount fields in the **table view**.
+- El **primer bloque** (líneas 2-8) especifica el símbolo de moneda (`₹`) para los campos de importe en la **vista de impresión**.
+- El **segundo bloque** (líneas 10-15) especifica el símbolo de moneda (`₹`) para los campos de importe en la **vista de tabla**.
-You can replace `₹` with any currency symbol of your choice. For instance, `$` for USD or `€` for EUR.
+Puede reemplazar `₹` por cualquier símbolo de moneda de su elección. Por ejemplo, `$` para USD o `€` para EUR.
-To specify a currency symbol for a particular field, use the format `td.{tablename}-{fieldname}`. For example:
+Para especificar un símbolo de moneda para un campo en particular, utilice el formato `td.{tablename}-{fieldname}`. Por ejemplo:
-- For a table named `invoices` with an amount field named `total`, use the selector `td.invoices-total`.
+- Para una tabla llamada `invoices` con un campo de importe llamado `total`, utilice el selector `td.invoices-total`.
-Here’s an example of how the table view will look after applying the above code:
+A continuación, se muestra un ejemplo de cómo se verá la vista de tabla después de aplicar el código anterior:
-
+
-## Split radio button lookups into two columns
+## Dividir las búsquedas de botones de opción en dos columnas
-[Lookup fields](../working-with-projects/understanding-lookup-fields.md) in AppGini can be displayed either as a dropdown list or as radio buttons. If you have a lookup field with many options, displaying them as radio buttons can make the form too long and difficult to navigate.
+Los [campos de búsqueda](../working-with-projects/understanding-lookup-fields.md) en AppGini se pueden mostrar como una lista desplegable o como botones de opción. Si tiene un campo de búsqueda con muchas opciones, mostrarlas como botones de opción puede hacer que el formulario sea demasiado largo y difícil de navegar.
-
+
-To improve the user experience, you can split the radio button options into two columns. This can be done by adding a simple CSS rule to your `hooks/footer-extras.php` file. First, we need to identify the exact name of the lookup field(s) we want to modify, which we can find in the AppGini project.
+Para mejorar la experiencia del usuario, puede dividir las opciones de los botones de opción en dos columnas. Esto se puede hacer añadiendo una regla CSS sencilla a su archivo `hooks/footer-extras.php`. Primero, debemos identificar el nombre exacto del campo o campos de búsqueda que queremos modificar, lo cual podemos encontrar en el proyecto AppGini.
-In the above screenshot, for example, the lookup field is named `ReportsTo`. To split the radio buttons into two columns, we can add the following CSS rule to the `hooks/footer-extras.php` file:
+En la captura de pantalla anterior, por ejemplo, el campo de búsqueda se llama `ReportsTo`. Para dividir los botones de opción en dos columnas, podemos añadir la siguiente regla CSS al archivo `hooks/footer-extras.php`:
```html
```
-Here is the same field after applying the above CSS rule:
+Este es el mismo campo después de aplicar la regla CSS anterior:
-
+
-If you have multiple lookup fields that you want to modify, you can combine them into a single CSS rule. For example, if you have two lookup fields named `ReportsTo` and `Status`, you can use the following CSS rule:
+Si tiene varios campos de búsqueda que desea modificar, puede combinarlos en una sola regla CSS. Por ejemplo, si tiene dos campos de búsqueda llamados `ReportsTo` y `Status`, puede utilizar la siguiente regla CSS:
```html
```
-This will apply the same two-column layout to both lookup fields. You can adjust the width of the labels as needed to fit your design.
-
+Esto aplicará el mismo diseño de dos columnas a ambos campos de búsqueda. Puede ajustar el ancho de las etiquetas según sea necesario para que se ajusten a su diseño.
diff --git a/pages/advanced-topics/gitignore.md b/pages/advanced-topics/gitignore.md
index 9563748..4313a3a 100644
--- a/pages/advanced-topics/gitignore.md
+++ b/pages/advanced-topics/gitignore.md
@@ -1,57 +1,57 @@
---
-title: AppGini files to ignore in git repositories
+title: Archivos de AppGini a ignorar en repositorios git
linkTitle: gitignore
slug: help/advanced-topics/gitignore
-description: AppGini files to ignore in git repositories to avoid committing unnecessary/unsafe files to your repository.
-keywords: gitignore, git, repository, AppGini, files, folders, ignore
+description: Archivos de AppGini a ignorar en repositorios git para evitar confirmar archivos innecesarios/inseguros en su repositorio.
+keywords: gitignore, git, repositorio, AppGini, archivos, carpetas, ignorar
---
-# AppGini files to ignore in git repositories
+# Archivos de AppGini a ignorar en repositorios git
-If you plan to [use a version control system like git to manage your AppGini application](/appgini/screencasts/how-to-use-git-with-appgini-to-manage-code-changes),
-you should ignore certain files and folders to avoid committing unnecessary/unsafe files
-to your repository.
+Si planea [usar un sistema de control de versiones como git para administrar su aplicación AppGini](/appgini/screencasts/how-to-use-git-with-appgini-to-manage-code-changes),
+debe ignorar ciertos archivos y carpetas para evitar confirmar archivos innecesarios/inseguros
+en su repositorio.
-But first, let's discuss the recommended way to set up your repository for an AppGini application.
-The instructions below assume you are using [git](https://git-scm.com/) as your version control system.
-Git is the most popular version control system and is widely used by developers around the world.
+Pero primero, analicemos la forma recomendada de configurar su repositorio para una aplicación AppGini.
+Las siguientes instrucciones asumen que está utilizando [git](https://git-scm.com/) como su sistema de control de versiones.
+Git es el sistema de control de versiones más popular y es ampliamente utilizado por desarrolladores de todo el mundo.
-## Recommended repository structure for AppGini applications
+## Estructura de repositorio recomendada para aplicaciones AppGini
-When you generate an AppGini application, you are asked to select the output folder for the generated files.
-When the application is generated inside that folder, it will create the following structure:
+Cuando genera una aplicación AppGini, se le pide que seleccione la carpeta de salida para los archivos generados.
+Cuando la aplicación se genera dentro de esa carpeta, creará la siguiente estructura:
```
-your-app-folder/
+su-carpeta-de-aplicacion/
admin/
hooks/
images/
resources/
templates/
index.php
- .. # other files
+ .. # otros archivos
```
-Where `your-app-folder` is the folder you selected when generating the application.
-**We don't recommend creating (initializing) the git repository inside this folder.**
+Donde `su-carpeta-de-aplicacion` es la carpeta que seleccionó al generar la aplicación.
+**No recomendamos crear (inicializar) el repositorio git dentro de esta carpeta.**
-The reason is that the repository data is stored in a `.git` folder inside the repository root folder.
-This folder might get uploaded to your server when you deploy your application, leading to exposing
-your repository data to the public. This is a security risk.
+La razón es que los datos del repositorio se almacenan en una carpeta `.git` dentro de la carpeta raíz del repositorio.
+Esta carpeta podría cargarse en su servidor cuando implemente su aplicación, lo que provocaría la exposición
+de los datos de su repositorio al público. Esto es un riesgo de seguridad.
-Instead, we recommend setting the folder structure as follows before generating the application:
+En su lugar, recomendamos configurar la estructura de carpetas de la siguiente manera antes de generar la aplicación:
```
-your-app-folder/
+su-carpeta-de-aplicacion/
app/
```
-Then, generate the application inside the `app` folder. This way, the repository root folder will be
-`your-app-folder`, and the `.git` folder will be at the root level, not inside the application folder.
-Your folder structure after generating the application will look like this:
+Luego, genere la aplicación dentro de la carpeta `app`. De esta manera, la carpeta raíz del repositorio será
+`su-carpeta-de-aplicacion`, y la carpeta `.git` estará en el nivel raíz, no dentro de la carpeta de la aplicación.
+Su estructura de carpetas después de generar la aplicación se verá así:
```
-your-app-folder/
+su-carpeta-de-aplicacion/
app/
admin/
hooks/
@@ -59,14 +59,14 @@ your-app-folder/
resources/
templates/
index.php
- .. # other files
+ .. # otros archivos
```
-After initializing the git repository in `your-app-folder` using the command `git init`, your
-folder structure will look like this:
+Después de inicializar el repositorio git en `su-carpeta-de-aplicacion` usando el comando `git init`, su
+estructura de carpetas se verá así:
```
-your-app-folder/
+su-carpeta-de-aplicacion/
.git/
app/
admin/
@@ -75,29 +75,29 @@ your-app-folder/
resources/
templates/
index.php
- .. # other files
+ .. # otros archivos
```
-You can then safely upload the contents of the `app` folder to your server, without exposing your
-repository data.
+Luego puede cargar de forma segura el contenido de la carpeta `app` en su servidor, sin exponer los
+datos de su repositorio.
-## Files and folders to ignore in your git repository
+## Archivos y carpetas a ignorar en su repositorio git
-Some files and folders generated by AppGini are not meant to be committed to your repository.
-This is either because they are generated dynamically by your AppGini application, or because they contain sensitive
-information like database connection details.
+Algunos archivos y carpetas generados por AppGini no están destinados a ser confirmados en su repositorio.
+Esto se debe a que son generados dinámicamente por su aplicación AppGini, o porque contienen información confidencial
+como los detalles de conexión a la base de datos.
-To ignore these files and folders, you should create a `.gitignore` file in the root of your repository
-and add the following lines to it:
+Para ignorar estos archivos y carpetas, debe crear un archivo `.gitignore` en la raíz de su repositorio
+y agregarle las siguientes líneas:
```
-# ignore files containing sensitive information
+# ignorar archivos que contienen información confidencial
app/config.php
app/config.bak.php
app/file-uploader.php
app/admin/backups
-# ignore files generated dynamically by AppGini application
+# ignorar archivos generados dinámicamente por la aplicación AppGini
app/setup.md5
app/tmp
app/admin/tmp
@@ -106,30 +106,30 @@ app/import-csv
!app/import-csv/index.html
!app/import-csv/.htaccess
-# ignore user-uploaded files
+# ignorar archivos cargados por el usuario
app/images
!app/images/index.html
!app/images/blank.gif
-# ignore other common artifacts
+# ignorar otros artefactos comunes
*.log
*.cache
*.zip
```
-This will tell git to ignore the listed files and folders when committing changes to your repository.
+Esto le dirá a git que ignore los archivos y carpetas enumerados al confirmar cambios en su repositorio.
-## TIP: Store your project file inside your repository
+## CONSEJO: Almacene su archivo de proyecto dentro de su repositorio
-Another advantage of setting up your repository as described above is that you can store your AppGini
-project file (the `.axp` file) inside your repository. This way, you can easily keep track of changes
-to your project file and revert to previous versions if needed.
+Otra ventaja de configurar su repositorio como se describe anteriormente es que puede almacenar su archivo de proyecto AppGini
+(el archivo `.axp`) dentro de su repositorio. De esta manera, puede realizar un seguimiento fácil de los cambios
+en su archivo de proyecto y revertir a versiones anteriores si es necesario.
-To do this, simply copy your `.axp` file to the root of your repository and commit it to your repository.
-The folder structure of your repository will look like this:
+Para hacer esto, simplemente copie su archivo `.axp` a la raíz de su repositorio y confírmelo en su repositorio.
+La estructura de carpetas de su repositorio se verá así:
```
-your-app-folder/
+su-carpeta-de-aplicacion/
.git/
app/
admin/
@@ -138,16 +138,15 @@ your-app-folder/
resources/
templates/
index.php
- .. # other files
- your-app.axp
+ .. # otros archivos
+ su-aplicacion.axp
```
-Where `your-app.axp` is your AppGini project file. Please note that in the above example, the project file
-is stored in the root of the repository, outside the `app` folder. This is recommended to avoid exposing
-your project file to the public. The project file contains your entire database structure and settings,
-so it's important to keep it secure.
+Donde `su-aplicacion.axp` es su archivo de proyecto AppGini. Tenga en cuenta que en el ejemplo anterior, el archivo de proyecto
+se almacena en la raíz del repositorio, fuera de la carpeta `app`. Esto se recomienda para evitar exponer
+su archivo de proyecto al público. El archivo de proyecto contiene toda la estructura y configuración de su base de datos,
+por lo que es importante mantenerlo seguro.
-## Related topics
-
-* [Using git with AppGini to manage code changes](/appgini/screencasts/how-to-use-git-with-appgini-to-manage-code-changes)
+## Temas relacionados
+* [Uso de git con AppGini para administrar cambios de código](/appgini/screencasts/how-to-use-git-with-appgini-to-manage-code-changes)
diff --git a/pages/advanced-topics/hooks/DataList-object.md b/pages/advanced-topics/hooks/DataList-object.md
index 6e259d2..725085b 100644
--- a/pages/advanced-topics/hooks/DataList-object.md
+++ b/pages/advanced-topics/hooks/DataList-object.md
@@ -1,153 +1,153 @@
---
-title: DataList object
-linkTitle: DataList object
+title: Objeto DataList
+linkTitle: Objeto DataList
slug: help/advanced-topics/hooks/DataList-object
-description: The DataList object is passed to the tablename_init hook function and exposes many options that you can control to affect the behavior and appearance of each of the AppGini-generated table pages that users see.
-keywords: DataList object, tablename_init, hook function, table, appearance, behavior, DataList properties
+description: El objeto DataList se pasa a la función hook tablename_init y expone muchas opciones que puede controlar para afectar el comportamiento y la apariencia de cada una de las páginas de tabla generadas por AppGini que ven los usuarios.
+keywords: Objeto DataList, tablename_init, función hook, tabla, apariencia, comportamiento, propiedades de DataList
---
-# DataList object
+# Objeto DataList
-The `DataList` object exposes many options that you can control to affect the behavior and appearance of each of the AppGini-generated table pages that users see.
-
-`DataList` object is passed to the [`tablename_init`](/appgini/help/advanced-topics/hooks/table-specific-hooks/#tablename_init) hook function. This hook function is called before displaying data to users. So, you can control the various appearance and behavior options by modifying this object inside that hook function.
-
-## Here is a list of the editable properties of the `DataList` object
+El objeto `DataList` expone muchas opciones que puede controlar para afectar el comportamiento y la apariencia de cada una de las páginas de tabla generadas por AppGini que ven los usuarios.
+
+El objeto `DataList` se pasa a la función hook [`tablename_init`](/appgini/help/advanced-topics/hooks/table-specific-hooks/#tablename_init). Esta función hook se llama antes de mostrar los datos a los usuarios. Por lo tanto, puede controlar las diversas opciones de apariencia y comportamiento modificando este objeto dentro de esa función hook.
+
+## Aquí hay una lista de las propiedades editables del objeto `DataList`
### `AllowCSV`
-Setting this property to `1` allows users to download table records as a CSV file. Setting it to `0` disables this.
+Establecer esta propiedad en `1` permite a los usuarios descargar registros de tabla como un archivo CSV. Establecerlo en `0` deshabilita esto.
### `AllowDeleteOfParents`
-Setting this property to `1` allows users who have delete permissions to delete a record even if it has child records in other tables. Setting it to `0` disables this.
+Establecer esta propiedad en `1` permite a los usuarios que tienen permisos de eliminación eliminar un registro incluso si tiene registros secundarios en otras tablas. Establecerlo en `0` deshabilita esto.
### `AllowFilters`
-Setting this property to `1` allows users to access the filters page to view and modify filters. Setting it to `0` disables this.
+Establecer esta propiedad en `1` permite a los usuarios acceder a la página de filtros para ver y modificar filtros. Establecerlo en `0` deshabilita esto.
### `AllowPrinting`
-Setting this property to `1` allows users to access the 'Print preview' page. Setting it to `0` disables this.
+Establecer esta propiedad en `1` permite a los usuarios acceder a la página 'Vista previa de impresión'. Establecerlo en `0` deshabilita esto.
### `AllowSavingFilters`
-Setting this property to `1` allows users to save filters as HTML code to access them quickly later. Setting it to `0` disables this.
+Establecer esta propiedad en `1` permite a los usuarios guardar filtros como código HTML para acceder a ellos rápidamente más tarde. Establecerlo en `0` deshabilita esto.
### `AllowSorting`
-Setting this property to `1` allows users to sort table records. Setting it to `0` disables this.
+Establecer esta propiedad en `1` permite a los usuarios ordenar los registros de la tabla. Establecerlo en `0` deshabilita esto.
### `CSVSeparator`
-Specifies the field separator to use when downloading data as a CSV file. The default is comma (,).
+Especifica el separador de campos a utilizar al descargar datos como un archivo CSV. El valor predeterminado es coma (,).
### `ColCaption`
-An array that specifies the titles of columns displayed in the table view.
+Una matriz que especifica los títulos de las columnas que se muestran en la vista de tabla.
### `ColNumber`
-An array that specifies which fields to use in the table view. It works by selecting some (or all) of the fields listed in the `QueryFieldsTV` property explained below.
+Una matriz que especifica qué campos usar en la vista de tabla. Funciona seleccionando algunos (o todos) los campos enumerados en la propiedad `QueryFieldsTV` que se explica a continuación.
### `ColWidth`
-An array that specifies the width of each column in the table view. If the `ShowTableHeader` property (explained below) is set to `1`, the `ColWidth` property is overridden by the width values specified in the table view template file (`templates/tablename_templateTV.html`).
+Una matriz que especifica el ancho de cada columna en la vista de tabla. Si la propiedad `ShowTableHeader` (explicada a continuación) se establece en `1`, la propiedad `ColWidth` se anula con los valores de ancho especificados en el archivo de plantilla de la vista de tabla (`templates/tablename_templateTV.html`).
### `DefaultSortDirection`
-A string that can be set to `'asc'` or `'desc'`. Please see the `DefaultSortField` property below.
+Una cadena que se puede establecer en `'asc'` o `'desc'`. Consulte la propiedad `DefaultSortField` a continuación.
### `DefaultSortField`
-Specifies the field to use for default sorting of the table view records. This property can be set to a number to specify which field to sort by from the `QueryFieldsTV` property explained below. Alternatively, it can be set to a string specifying an explicit field name or MySQL expression to use for default sorting.
+Especifica el campo que se utilizará para la ordenación predeterminada de los registros de la vista de tabla. Esta propiedad se puede establecer en un número para especificar qué campo ordenar de la propiedad `QueryFieldsTV` que se explica a continuación. Alternativamente, se puede establecer en una cadena que especifique un nombre de campo explícito o una expresión MySQL para usar en la ordenación predeterminada.
### `DVClasses`
-Was added in AppGini 5.60. Additional CSS classes to apply to the detail view container (space-separated)
+Se agregó en AppGini 5.60. Clases CSS adicionales para aplicar al contenedor de la vista detallada (separadas por espacios).
### `FilterPage`
-Specifies a custom search page to use when users click on the FILTERS button. If no value is provided, the default filters page is used. You can use this feature to create advanced search forms for your tables. Please see [Creating customized search forms](/appgini/tips-and-tutorials/customized-search-forms) for a detailed example.
+Especifica una página de búsqueda personalizada para usar cuando los usuarios hacen clic en el botón FILTROS. Si no se proporciona ningún valor, se utiliza la página de filtros predeterminada. Puede utilizar esta función para crear formularios de búsqueda avanzada para sus tablas. Consulte [Creación de formularios de búsqueda personalizados](/appgini/tips-and-tutorials/customized-search-forms) para obtener un ejemplo detallado.
### `PrimaryKey`
-A string that specifies the name of the primary key field for the table. You shouldn't change this value.
+Una cadena que especifica el nombre del campo de clave principal de la tabla. No debe cambiar este valor.
### `QueryFieldsCSV`
-An associative array specifying the fields used in the query that fetches data when users request to download a CSV file. The array keys represent the field names or MySQL expressions used in the query. The array values represent the column titles to display in the CSV file.
+Una matriz asociativa que especifica los campos utilizados en la consulta que recupera datos cuando los usuarios solicitan descargar un archivo CSV. Las claves de la matriz representan los nombres de los campos o las expresiones MySQL utilizadas en la consulta. Los valores de la matriz representan los títulos de las columnas que se mostrarán en el archivo CSV.
### `QueryFieldsFilters`
-An associative array specifying the fields used in the filters page. The array keys represent the field names. The array values represent the field titles to display in the filters page.
+Una matriz asociativa que especifica los campos utilizados en la página de filtros. Las claves de la matriz representan los nombres de los campos. Los valores de la matriz representan los títulos de los campos que se mostrarán en la página de filtros.
### `QueryFieldsTV`
-An associative array specifying the fields that can be displayed in the table view. The array keys represent the field names or MySQL expressions used in the query. The array values represent the column titles. The fields actually displayed in the table view are specified in the `ColNumber` array explained above.
+Una matriz asociativa que especifica los campos que se pueden mostrar en la vista de tabla. Las claves de la matriz representan los nombres de los campos o las expresiones MySQL utilizadas en la consulta. Los valores de la matriz representan los títulos de las columnas. Los campos que realmente se muestran en la vista de tabla se especifican en la matriz `ColNumber` explicada anteriormente.
### `QueryFrom`
-A string that specifies the contents of the FROM part of the query used in the table view and the CSV file.
+Una cadena que especifica el contenido de la parte FROM de la consulta utilizada en la vista de tabla y el archivo CSV.
### `QuickSearch`
-A number that specifies how to display the quick search box. It can take any of the following values:
+Un número que especifica cómo mostrar el cuadro de búsqueda rápida. Puede tomar cualquiera de los siguientes valores:
-* `0`: no quick search box shown.
-* `1`: quick box shown on the top left of the table view.
-* `2`: quick box shown on the top center of the table view.
-* `3`: quick box shown on the top right of the table view.
+* `0`: no se muestra ningún cuadro de búsqueda rápida.
+* `1`: cuadro rápido que se muestra en la parte superior izquierda de la vista de tabla.
+* `2`: cuadro rápido que se muestra en la parte superior central de la vista de tabla.
+* `3`: cuadro rápido que se muestra en la parte superior derecha de la vista de tabla.
-**Update:** As of AppGini 5.20 and above, setting this property to `0` hides the quick search box, and setting it to any non-zero value displays the quick search box. The position of the box is determined by the screen size.
+**Actualización:** A partir de AppGini 5.20 y versiones posteriores, establecer esta propiedad en `0` oculta el cuadro de búsqueda rápida, y establecerla en cualquier valor distinto de cero muestra el cuadro de búsqueda rápida. La posición del cuadro está determinada por el tamaño de la pantalla.
### `QuickSearchText`
-A string that specifies the title to display besides the quick search box.
+Una cadena que especifica el título que se mostrará junto al cuadro de búsqueda rápida.
### `RecordsPerPage`
-A number that specifies how many records to show per page in the table view.
+Un número que especifica cuántos registros mostrar por página en la vista de tabla.
### `RedirectAfterInsert`
-If users are allowed to add new records to the table, this property specifies the URL to which users will be redirected after adding the new record.
+Si los usuarios pueden agregar nuevos registros a la tabla, esta propiedad especifica la URL a la que se redirigirá a los usuarios después de agregar el nuevo registro.
### `SelectedTemplate`
-A string that specifies the path to the HTML template file to use for formatting a currently-selected record in the table view.
+Una cadena que especifica la ruta al archivo de plantilla HTML que se utilizará para formatear un registro actualmente seleccionado en la vista de tabla.
### `SeparateDV`
-A number that is set to `1` to display the detail view in a separate page, or `0` to display it below the table view.
+Un número que se establece en `1` para mostrar la vista detallada en una página separada, o `0` para mostrarla debajo de la vista de tabla.
### `ShowTableHeader`
-A number that is set to `1` (the default) to display column titles above the table view. Table titles are specified in the `ColCaption` property explained above. If set to `0`, column titles are not displayed (this is useful if you need to change the horizontal layout of fields in the template file `templates/tablename_templateTV.html` to a different non-horizontal layout).
+Un número que se establece en `1` (el valor predeterminado) para mostrar los títulos de las columnas sobre la vista de tabla. Los títulos de las tablas se especifican en la propiedad `ColCaption` explicada anteriormente. Si se establece en `0`, no se muestran los títulos de las columnas (esto es útil si necesita cambiar el diseño horizontal de los campos en el archivo de plantilla `templates/tablename_templateTV.html` a un diseño no horizontal diferente).
### `TableTitle`
-The title that will be displayed above the table view.
+El título que se mostrará sobre la vista de tabla.
### `Template`
-A string that specifies the path to the HTML template file to use for formatting all records in the table view except the currently-selected one.
+Una cadena que especifica la ruta al archivo de plantilla HTML que se utilizará para formatear todos los registros en la vista de tabla, excepto el actualmente seleccionado.
### `TemplateDV`
-Was added in AppGini 5.61. A string that specifies the path (relative to the main directory of the application) to the HTML template file to use for displaying the detail view.
+Se agregó en AppGini 5.61. Una cadena que especifica la ruta (relativa al directorio principal de la aplicación) al archivo de plantilla HTML que se utilizará para mostrar la vista detallada.
### `TemplateDVP`
-Was added in AppGini 5.61. A string that specifies the path (relative to the main directory of the application) to the HTML template file to use for displaying the print preview of the detail view.
+Se agregó en AppGini 5.61. Una cadena que especifica la ruta (relativa al directorio principal de la aplicación) al archivo de plantilla HTML que se utilizará para mostrar la vista previa de impresión de la vista detallada.
### `TVClasses`
-Was added in AppGini 5.60. Additional CSS classes to apply to the table view container (space-separated)
+Se agregó en AppGini 5.60. Clases CSS adicionales para aplicar al contenedor de la vista de tabla (separadas por espacios).
-## Inspecting the `DataList` object
+## Inspeccionar el objeto `DataList`
-For debugging purposes, you can inspect the contents of the `DataList` object by adding the following code into the `tablename_init` hook function in the generated `hooks/tablename.php` file (replace `tablename` by the actual name of the concerned table):
+Para fines de depuración, puede inspeccionar el contenido del objeto `DataList` agregando el siguiente código en la función hook `tablename_init` en el archivo generado `hooks/tablename.php` (reemplace `tablename` por el nombre real de la tabla en cuestión):
```php
function tablename_init(&$options, $memberInfo, &$args) {
@@ -162,5 +162,4 @@ function tablename_init(&$options, $memberInfo, &$args) {
}
```
-The above code will output the contents of the `DataList` object to the browser above the table view. You can use this to inspect, debug and change the various properties. But you should use this carefully in a protected environment for testing purposes only.
-
+El código anterior mostrará el contenido del objeto `DataList` en el navegador sobre la vista de tabla. Puede usar esto para inspeccionar, depurar y cambiar las diversas propiedades. Pero debe usar esto con cuidado en un entorno protegido solo para fines de prueba.
diff --git a/pages/advanced-topics/hooks/WindowMessages-class.md b/pages/advanced-topics/hooks/WindowMessages-class.md
index 3daa2bc..4e5f70b 100644
--- a/pages/advanced-topics/hooks/WindowMessages-class.md
+++ b/pages/advanced-topics/hooks/WindowMessages-class.md
@@ -1,102 +1,98 @@
---
-title: WindowMessages class
-linkTitle: WindowMessages class
+title: Clase WindowMessages
+linkTitle: Clase WindowMessages
slug: help/advanced-topics/hooks/WindowMessages-class
---
-# WindowMessages class
+# Clase WindowMessages
+Una clase para mostrar mensajes al usuario en la próxima carga de página.
-A class for displaying messages to the user on the next page load.
-
-To add a message, use the `WindowMessages::add()` method:
+Para agregar un mensaje, use el método `WindowMessages::add()`:
```php
-WindowMessages::add('Hello world!', 'alert alert-success');
+WindowMessages::add('¡Hola mundo!', 'alert alert-success');
```
-The first parameter is the message to display, and the second parameter
-is the CSS classes to apply to the message `
` container. The
-second parameter is optional, and defaults to `alert alert-info`
-if not specified.
+El primer parámetro es el mensaje a mostrar, y el segundo parámetro
+son las clases CSS para aplicar al contenedor `
` del mensaje. El
+segundo parámetro es opcional, y por defecto es `alert alert-info`
+si no se especifica.
-The message(s) would be displayed on the next page load, and are
-specific to the current browser window. That is, if you have multiple
-browser windows open, each window will have its own set of messages.
+El/los mensaje(s) se mostrarían en la próxima carga de página, y son
+específicos de la ventana actual del navegador. Es decir, si tiene múltiples
+ventanas del navegador abiertas, cada ventana tendrá su propio conjunto de mensajes.
-To add a dismissable message, use the
-`WindowMessages::addDismissable()` method:
+Para agregar un mensaje descartable, use el
+método `WindowMessages::addDismissable()`:
```php
-WindowMessages::addDismissable('Hello world!', 'alert alert-success');
+WindowMessages::addDismissable('¡Hola mundo!', 'alert alert-success');
```
-Parameters are the same as the `WindowMessages::add()` method.
+Los parámetros son los mismos que el método `WindowMessages::add()`.
-### How does it work?
+### ¿Cómo funciona?
-The `WindowMessages` class works by assigning a unique ID to each
-browser window. The ID is submitted with each request, and the messages
-are stored in the session under that ID. When the page is loaded, the
-messages are retrieved from the session and displayed.
+La clase `WindowMessages` funciona asignando un ID único a cada
+ventana del navegador. El ID se envía con cada solicitud, y los mensajes
+se almacenan en la sesión bajo ese ID. Cuando se carga la página, los
+mensajes se recuperan de la sesión y se muestran.
-The most significant part of this is that the messages are assigned to
-the current browser window, and not the current session. This means that
-if you have multiple browser windows open, each window will have its own
-set of messages.
+La parte más significativa de esto es que los mensajes se asignan a
+la ventana actual del navegador, y no a la sesión actual. Esto significa que
+si tiene múltiples ventanas del navegador abiertas, cada ventana tendrá su propio
+conjunto de mensajes.
-This is particularly useful after inserting a new record, where the user
-is redirected to another page. In that case, if you'd like to display
-some message to the user, you can use the `WindowMessages` class
-to do so, and the message will be displayed on the redirected page. See
-the example in [`tablename_after_insert()` hook
-documentation](/appgini/help/advanced-topics/hooks/table-specific-hooks/#tablename_after_insert).
+Esto es particularmente útil después de insertar un nuevo registro, donde el usuario
+es redirigido a otra página. En ese caso, si desea mostrar
+algún mensaje al usuario, puede usar la clase `WindowMessages`
+para hacerlo, y el mensaje se mostrará en la página redirigida. Vea
+el ejemplo en la documentación del hook [`tablename_after_insert()`
+](/appgini/help/advanced-topics/hooks/table-specific-hooks/#tablename_after_insert).
-This is also useful for use in `tablename_after_update()` and
-`tablename_after_delete()` hooks, where you can display a message
-to the user after updating or deleting a record.
+Esto también es útil para usar en los hooks `tablename_after_update()` y
+`tablename_after_delete()`, donde puede mostrar un mensaje
+al usuario después de actualizar o eliminar un registro.
-### Including the window ID when redirecting to another page
+### Incluir el ID de la ventana al redirigir a otra página
-Your AppGini application already includes the window ID when redirecting
-to another page, so you don't need to do anything special. But in case
-you're using your own code to redirect to another page, you need to
-include the window ID in the URL. You can do so by using the
-`WindowMessages::windowIdQuery()` method, like this:
+Su aplicación AppGini ya incluye el ID de la ventana al redirigir
+a otra página, por lo que no necesita hacer nada especial. Pero en caso de
+que esté usando su propio código para redirigir a otra página, necesita
+incluir el ID de la ventana en la URL. Puede hacerlo usando el
+método `WindowMessages::windowIdQuery()`, así:
```php
$url = 'http://example.com/another-page.php?' . WindowMessages::windowIdQuery();
redirect($url);
```
-### Including the window ID in a form in custom pages
+### Incluir el ID de la ventana en un formulario en páginas personalizadas
-Built-in AppGini pages already include the window ID in forms, so you
-don't need to do anything special. But in case you're using your own
-code to create a form in a custom page, you need to include the window
-ID as a hidden field in the form. You can do so using this code where
-you want the hidden field in the form:
+Las páginas integradas de AppGini ya incluyen el ID de la ventana en los formularios, por lo que
+no necesita hacer nada especial. Pero en caso de que esté usando su propio
+código para crear un formulario en una página personalizada, necesita incluir el ID de la ventana
+como un campo oculto en el formulario. Puede hacerlo usando este código donde
+desea el campo oculto en el formulario:
```php
echo WindowMessages::includeWindowId();
```
-### How to display the messages?
+### ¿Cómo mostrar los mensajes?
-Your AppGini application already includes the code to display the
-messages, so you don't need to do anything special. In case of [custom
-pages](/appgini/help/advanced-topics/custom-limited-access-pages/)
-however, you need to include the following code in your page where you
-want the messages to be displayed:
+Su aplicación AppGini ya incluye el código para mostrar los
+mensajes, por lo que no necesita hacer nada especial. En caso de [páginas
+personalizadas](/appgini/help/advanced-topics/custom-limited-access-pages/)
+sin embargo, necesita incluir el siguiente código en su página donde desea
+que se muestren los mensajes:
```php
WindowMessages::getHtml();
```
-
-
-
diff --git a/pages/advanced-topics/hooks/client-side-validation.md b/pages/advanced-topics/hooks/client-side-validation.md
index 9be3401..b4a7252 100644
--- a/pages/advanced-topics/hooks/client-side-validation.md
+++ b/pages/advanced-topics/hooks/client-side-validation.md
@@ -1,64 +1,63 @@
---
-title: Client-side Custom JavaScript Validation Functions
-linkTitle: Client-side validation
+title: Funciones de validación JavaScript personalizadas del lado del cliente
+linkTitle: Validación del lado del cliente
slug: help/advanced-topics/hooks/client-side-validation
-description: Learn how to add custom JavaScript validation functions to your AppGini app to validate data on the client side before submission.
-keywords: client-side validation, custom validation, JavaScript validation, AppGini validation, customValidateData
+description: Aprenda a agregar funciones de validación JavaScript personalizadas a su aplicación AppGini para validar datos en el lado del cliente antes de enviarlos.
+keywords: validación del lado del cliente, validación personalizada, validación JavaScript, validación AppGini, customValidateData
---
-# Client-side Custom JavaScript Validation Functions
+# Funciones de validación JavaScript personalizadas del lado del cliente
-> This feature is available in AppGini 24.18 and above.
+> Esta función está disponible en AppGini 24.18 y versiones posteriores.
-If you define a JavaScript function with the special name `{tablename}_customValidateData`
-(where `{tablename}` is the name of a table in your app), it will automatically be called during detail view form submission.
-And if it returns `false`, the form will not be submitted. You can define custom validation functions in any of
-the following locations:
+Si define una función JavaScript con el nombre especial `{tablename}_customValidateData`
+(donde `{tablename}` es el nombre de una tabla en su aplicación), se llamará automáticamente durante el envío del formulario de la vista detallada.
+Y si devuelve `false`, el formulario no se enviará. Puede definir funciones de validación personalizadas en cualquiera de las
+siguientes ubicaciones:
* `hooks/header-extras.php`
* `hooks/footer-extras.php`
* `{tablename}-dv.js`
-* [`{tablename}_dv()` hook function](table-specific-hooks.md#tablename_dv) in `hooks/{tablename}.php`
+* Función hook [`{tablename}_dv()`](table-specific-hooks.md#tablename_dv) en `hooks/{tablename}.php`
-A boolean `insertMode` argument is passed to the function, which indicates the submission purpose as follows:
+Se pasa un argumento booleano `insertMode` a la función, que indica el propósito del envío de la siguiente manera:
-* `true`: submission purpose is to insert a new record.
-* `false`: submission purpose is to update an existing record.
+* `true`: el propósito del envío es insertar un nuevo registro.
+* `false`: el propósito del envío es actualizar un registro existente.
-The function should return a boolean (`true` or `false`), which determines whether the form would be submitted or not.
+La función debe devolver un booleano (`true` o `false`), que determina si el formulario se enviará o no.
-### Usage notes
+### Notas de uso
-* Built-in validation functios are *still* called and processed. So, if your custom validation function returns `true` while the
-built-in validation doesn't pass, the form *will not* be submitted.
+* Las funciones de validación integradas *aún* se llaman y procesan. Por lo tanto, si su función de validación personalizada devuelve `true` mientras que la
+validación integrada no pasa, el formulario *no* se enviará.
-* Before returning `false`, you should indicate to the user the reason for the failed check. We recommend using
-the `AppGini.modalError()` function for that.
+* Antes de devolver `false`, debe indicar al usuario el motivo de la comprobación fallida. Recomendamos usar
+la función `AppGini.modalError()` para eso.
-* This function is run in *synchronous* mode. So if you need to issue an ajax/fetch request during validation, make sure
-to run it in synchronous mode as well (for example, set `async` parameter to `false` if using `jQuery.ajax`) otherwise
-it won't be evaluated before form submission.
+* Esta función se ejecuta en modo *sincrónico*. Por lo tanto, si necesita emitir una solicitud ajax/fetch durante la validación, asegúrese
+de ejecutarla también en modo sincrónico (por ejemplo, establezca el parámetro `async` en `false` si usa `jQuery.ajax`); de lo contrario
+, no se evaluará antes del envío del formulario.
-* This function runs in the client-side to provide a better user experience during submission, but it can be easily
-circumvented by the user. You should implement server-side validation as well to enforce data integrity by adding
-validation checks in `hooks/{tablename}.php` in the [`{tablename}_before_insert()`](table-specific-hooks.md#tablename_before_insert)
-and [`{tablename}_before_update()`](table-specific-hooks.md#tablename_before_update) hook functions.
+* Esta función se ejecuta en el lado del cliente para proporcionar una mejor experiencia de usuario durante el envío, pero puede ser fácilmente
+eludida por el usuario. También debe implementar la validación del lado del servidor para hacer cumplir la integridad de los datos agregando
+comprobaciones de validación en `hooks/{tablename}.php` en las funciones hook [`{tablename}_before_insert()`](table-specific-hooks.md#tablename_before_insert)
+y [`{tablename}_before_update()`](table-specific-hooks.md#tablename_before_update).
-### Example
+### Ejemplo
-Let's say we have a table named `customers` with a phone number field named `phone`. We want to make sure that the phone number
-is in the format `+1234567890` where `+` is a required prefix followed by 10 digits. To implement this, add the following code
-to `hooks/orders-dv.js` (create it if it doesn't exist):
+Supongamos que tenemos una tabla llamada `customers` con un campo de número de teléfono llamado `phone`. Queremos asegurarnos de que el número de teléfono
+tenga el formato `+1234567890` donde `+` es un prefijo obligatorio seguido de 10 dígitos. Para implementar esto, agregue el siguiente código
+a `hooks/orders-dv.js` (créelo si no existe):
```javascript
function customers_customValidateData(insertMode) {
var phone = $j('#phone').val();
if(!phone.match(/^\+\d{10}$/)) {
- AppGini.modalError('Phone number must be in the format +1234567890');
+ AppGini.modalError('El número de teléfono debe tener el formato +1234567890');
return false;
}
return true;
}
```
-
diff --git a/pages/advanced-topics/hooks/folder-contents.md b/pages/advanced-topics/hooks/folder-contents.md
index a2bd743..44be445 100644
--- a/pages/advanced-topics/hooks/folder-contents.md
+++ b/pages/advanced-topics/hooks/folder-contents.md
@@ -1,129 +1,127 @@
---
-title: Contents of the generated `hooks` folder
-linkTitle: The `hooks` folder
+title: Contenido de la carpeta `hooks` generada
+linkTitle: La carpeta `hooks`
slug: help/advanced-topics/hooks/folder-contents
-description: The hooks folder is where all your custom-defined code should be placed. AppGini generates the hook files into this folder only if they don't exist. AppGini doesn't overwrite these files later. So, your customized code is retained safely no matter how many times you regenerate your project code.
-keywords: hooks, folder, contents, customizing, code, global hooks, table-specific hooks, links-home, links-navmenu, footer-extras, header-extras
+description: La carpeta hooks es donde debe colocarse todo su código definido por el usuario. AppGini genera los archivos hook en esta carpeta solo si no existen. AppGini no sobrescribe estos archivos más tarde. Por lo tanto, su código personalizado se conserva de forma segura sin importar cuántas veces regenere el código de su proyecto.
+keywords: hooks, carpeta, contenido, personalización, código, hooks globales, hooks específicos de tabla, links-home, links-navmenu, footer-extras, header-extras
---
-# Contents of the generated `hooks` folder
+# Contenido de la carpeta `hooks` generada
-
+
-The hooks folder is where all your custom-defined code should be placed. AppGini generates the hook files into this folder only if they don't exist. AppGini doesn't overwrite these files later. So, your customized code is retained safely no matter how many times you regenerate your project code.
+La carpeta `hooks` es donde debe colocarse todo su código definido por el usuario. AppGini genera los archivos hook en esta carpeta solo si no existen. AppGini no sobrescribe estos archivos más tarde. Por lo tanto, su código personalizado se conserva de forma segura sin importar cuántas veces regenere el código de su proyecto.
-## Contents of the `hooks` folder
+## Contenido de la carpeta `hooks`
### `__global.php`
-This file contains hook functions that get called when a new member signs up, when a member signs in successfully and when a member fails to sign in. [_Read more_](/appgini/help/advanced-topics/hooks/global-hooks/).
+Este archivo contiene funciones hook que se llaman cuando un nuevo miembro se registra, cuando un miembro inicia sesión correctamente y cuando un miembro no puede iniciar sesión. [_Leer más_](/appgini/help/advanced-topics/hooks/global-hooks/).
### `__bootstrap.php`
-This file, if present, is included at the very beginning of each page of your application (including the setup page, the admin area and of course the users area). You can use it to define global functions, classes, or constants that you want to be available in all pages of your application.You could also override any of the constants defined in the generated `definitions.php` file here. For example, you can display the navigation menus in the homepage by adding this code to `__bootstrap.php`:
+Este archivo, si está presente, se incluye al principio de cada página de su aplicación (incluida la página de configuración, el área de administración y, por supuesto, el área de usuarios). Puede usarlo para definir funciones, clases o constantes globales que desee que estén disponibles en todas las páginas de su aplicación. También podría anular cualquiera de las constantes definidas en el archivo `definitions.php` generado aquí. Por ejemplo, puede mostrar los menús de navegación en la página de inicio agregando este código a `__bootstrap.php`:
```php
define('HOMEPAGE_NAVMENUS', true);
```
-#### Modifying session behavior via `session_options` function in `__bootstrap.php`
+#### Modificar el comportamiento de la sesión mediante la función `session_options` en `__bootstrap.php`
-Another common use case for the `__bootstrap.php` file is to modify the session behavior. To do so, define a function `session_options` in this file like so:
+Otro caso de uso común para el archivo `__bootstrap.php` es modificar el comportamiento de la sesión. Para ello, defina una función `session_options` en este archivo de la siguiente manera:
```php
function session_options(&$options) {
- // change session behavior here
- // example: set session lifetime to 1 week
- $options['cookie_lifetime'] = 60 * 60 * 24 * 7; // 1 week
+ // cambiar el comportamiento de la sesión aquí
+ // ejemplo: establecer la vida útil de la sesión en 1 semana
+ $options['cookie_lifetime'] = 60 * 60 * 24 * 7; // 1 semana
}
```
-In the above example, we set the session lifetime to 1 week. Other session options you can set are listed and explained at [php.net/manual/en/session.configuration.php](https://www.php.net/manual/en/session.configuration.php). Remove the initial `session.` prefix from the option name when setting it in the `session_options` function. For example, to set the `session.gc_maxlifetime` option, you should set `$options['gc_maxlifetime'] = ...`.
+En el ejemplo anterior, establecemos la vida útil de la sesión en 1 semana. Otras opciones de sesión que puede establecer se enumeran y explican en [php.net/manual/en/session.configuration.php](https://www.php.net/manual/en/session.configuration.php). Elimine el prefijo inicial `session.` del nombre de la opción al configurarla en la función `session_options`. Por ejemplo, para establecer la opción `session.gc_maxlifetime`, debe establecer `$options['gc_maxlifetime'] = ...`.
### `{tablename}.php`
-For each table in your project, a hook file named the same as the table name is created. This file contains hook functions that get called when a new record is added, when a record is edited, when a record is deleted, … etc. These hooks are table-specific. That's why each table in your project has its own hook file. [_Read more_](/appgini/help/advanced-topics/hooks/table-specific-hooks/)
+Para cada tabla de su proyecto, se crea un archivo hook con el mismo nombre que el nombre de la tabla. Este archivo contiene funciones hook que se llaman cuando se agrega un nuevo registro, cuando se edita un registro, cuando se elimina un registro, etc. Estos hooks son específicos de la tabla. Es por eso que cada tabla en su proyecto tiene su propio archivo hook. [_Leer más_](/appgini/help/advanced-topics/hooks/table-specific-hooks/)
### `links-home.php`
-You can add custom links in the home page of your application by appending them to this file. The format for each link is:
+Puede agregar enlaces personalizados en la página de inicio de su aplicación agregándolos a este archivo. El formato para cada enlace es:
```php
$homeLinks[] = [
- 'url' => 'path/to/link',
- 'title' => 'Link title',
- 'description' => 'Link text',
- 'groups' => ['group1', 'group2'],
+ 'url' => 'ruta/al/enlace',
+ 'title' => 'Título del enlace',
+ 'description' => 'Texto del enlace',
+ 'groups' => ['grupo1', 'grupo2'],
'grid_column_classes' => '',
'panel_classes' => '',
'link_classes' => '',
- 'icon' => 'path/to/icon',
+ 'icon' => 'ruta/al/icono',
'table_group' => ''
];
```
-*Where:*
+*Donde:*
-* `url` is the path to the link. This can be a relative path within your application or an external URL.
-* `title` is the title of the link as it appears in the home page.
-* `description` is the text that appears below the title. HTML is allowed.
-* `groups` defines the groups allowed to see this link. Set to `['*']` if you want to show the link to all groups.
-* `grid_column_classes` (optional) lists CSS classes to apply to the link block to control its width in different screen sizes. Example valid classes: `col-lg-4`, `col-sm-6`, ... etc. See: [getbootstrap.com/css/#grid](https://getbootstrap.com/css/#grid).
-* `panel_classes` (optional) lists CSS classes to apply to the panel. Example valid classes: `panel-warning`, `panel-success`, ... etc. See: [getbootstrap.com/components/#panels](https://getbootstrap.com/components/#panels).
-* `link_classes` (optional) lists CSS classes to apply to link. Example valid classes: `btn-danger`, `btn-primary`, ... etc. See: [getbootstrap.com/css/#buttons](https://getbootstrap.com/css/#buttons).
-* `icon` is the path to an optional icon to use with the link.
-* `table_group` is the ***name*** of the table group you wish to add the link to (if you are using table groups). The value should be set to the exact name of the group. If the table group name contains non-Latin characters, you should convert them to html entities. For example, the character ૫ should be written as `૫`
+* `url` es la ruta al enlace. Puede ser una ruta relativa dentro de su aplicación o una URL externa.
+* `title` es el título del enlace tal como aparece en la página de inicio.
+* `description` es el texto que aparece debajo del título. Se permite HTML.
+* `groups` define los grupos autorizados a ver este enlace. Establezca en `['*']` si desea mostrar el enlace a todos los grupos.
+* `grid_column_classes` (opcional) enumera las clases CSS que se aplicarán al bloque de enlaces para controlar su ancho en diferentes tamaños de pantalla. Clases válidas de ejemplo: `col-lg-4`, `col-sm-6`, ... etc. Ver: [getbootstrap.com/css/#grid](https://getbootstrap.com/css/#grid).
+* `panel_classes` (opcional) enumera las clases CSS que se aplicarán al panel. Clases válidas de ejemplo: `panel-warning`, `panel-success`, ... etc. Ver: [getbootstrap.com/components/#panels](https://getbootstrap.com/components/#panels).
+* `link_classes` (opcional) enumera las clases CSS que se aplicarán al enlace. Clases válidas de ejemplo: `btn-danger`, `btn-primary`, ... etc. Ver: [getbootstrap.com/css/#buttons](https://getbootstrap.com/css/#buttons).
+* `icon` es la ruta a un icono opcional para usar con el enlace.
+* `table_group` es el ***nombre*** del grupo de tablas al que desea agregar el enlace (si está utilizando grupos de tablas). El valor debe establecerse en el nombre exacto del grupo. Si el nombre del grupo de tablas contiene caracteres no latinos, debe convertirlos a entidades html. Por ejemplo, el carácter ૫ debe escribirse como `૫`
### `links-navmenu.php`
-You can add custom links to the navigation menu ("Jump to" menu) of your application by appending them to this file. The format for each link is:
+Puede agregar enlaces personalizados al menú de navegación (menú "Saltar a") de su aplicación agregándolos a este archivo. El formato para cada enlace es:
```php
$navLinks[] = [
- 'url' => 'path/to/link',
- 'title' => 'Link title',
- 'groups' => ['group1', 'group2'],
- 'icon' => 'path/to/icon',
+ 'url' => 'ruta/al/enlace',
+ 'title' => 'Título del enlace',
+ 'groups' => ['grupo1', 'grupo2'],
+ 'icon' => 'ruta/al/icono',
'table_group' => 0
];
```
-*Where:*
+*Donde:*
-* `groups` defines the groups allowed to see this link. Set to `['*']` if you want to show the link to all groups.
-* `icon` is the path to an optional icon to use with the link.
-* `table_group` is the ***index*** of table group, default is `0` (first table group).
+* `groups` define los grupos autorizados a ver este enlace. Establezca en `['*']` si desea mostrar el enlace a todos los grupos.
+* `icon` es la ruta a un icono opcional para usar con el enlace.
+* `table_group` es el ***índice*** del grupo de tablas, el valor predeterminado es `0` (primer grupo de tablas).
-### `footer-extras.php` and `header-extras.php`
+### `footer-extras.php` y `header-extras.php`
-Both files allow you to insert additional content to the footer and header (respectively) of all user area pages.
-You can add HTML, CSS, JavaScript and/or PHP code into those two files, provided you wrap each type of code in the appropriate tags.
+Ambos archivos le permiten insertar contenido adicional en el pie de página y el encabezado (respectivamente) de todas las páginas del área de usuario.
+Puede agregar código HTML, CSS, JavaScript y/o PHP en esos dos archivos, siempre que ajuste cada tipo de código en las etiquetas apropiadas.
-That is, to add custom CSS, insert it inside `