feat(mcp): tools de idiomas y traducciones
- Nueva categoria tools/languages: list_web_languages, get_record_translations y set_record_translations (registros, config, textos_generales y vars de modulo via builder_custom). - Param lang opcional en list_table_records y get_record (options.translates de CocoDB). - Docs actualizados (03/04/06/09/11b + ACAI_ENDPOINTS) con el modelo de cms_traducciones y los workflows de traduccion.
This commit is contained in:
@@ -323,6 +323,75 @@ action=uploadModify
|
||||
**Usado por**: `delete_record_upload`
|
||||
**Headers**: `X-Acai-Token`, `X-Requested-With: XMLHttpRequest`
|
||||
|
||||
## Categoría: Idiomas y traducciones (multiidioma)
|
||||
|
||||
Las traducciones viven en la tabla central `cms_traducciones`, indexada por `(prefix, tableName sin cms_, fieldName, recordNum)`. `fieldValue` se guarda en Base64, pero la codificación/decodificación la hace el PHP: el cliente siempre trabaja con texto plano.
|
||||
|
||||
### 1. Listar idiomas activos
|
||||
**Endpoint**: `/cms/lib/viewer_functions.php?action_ws=getLanguages`
|
||||
**Método**: POST via `AcaiHttpClient.postViewerAction`
|
||||
**Usado por**: `list_web_languages`
|
||||
**Body**: `{}`
|
||||
**Respuesta**:
|
||||
```javascript
|
||||
{
|
||||
success: true,
|
||||
languages: [
|
||||
{ name: string, label: string, prefix: string, urlPrefix: string, isDefault: boolean }
|
||||
],
|
||||
defaultLanguage: string
|
||||
}
|
||||
```
|
||||
Notas: `prefix === "www"` es el idioma base (URLs sin prefijo, `urlPrefix === ""`, `isDefault === true`). Otros prefixes (p.ej. `"en"`) sirven bajo `/<urlPrefix>/...`.
|
||||
|
||||
### 2. Leer traducciones de registros
|
||||
**Endpoint**: `/cms/lib/viewer_functions.php?action_ws=getTranslations`
|
||||
**Método**: POST via `AcaiHttpClient.postViewerAction`
|
||||
**Usado por**: `get_record_translations`
|
||||
**Body**:
|
||||
```javascript
|
||||
{
|
||||
tableName: string, // sin prefijo cms_
|
||||
recordNums: number[], // PKs a leer
|
||||
fields?: string[], // opcional: solo estos campos
|
||||
prefix?: string // opcional: solo este idioma
|
||||
}
|
||||
```
|
||||
**Respuesta** (valores ya decodificados de Base64):
|
||||
```javascript
|
||||
{
|
||||
success: true,
|
||||
tableName: string,
|
||||
translations: {
|
||||
"<recordNum>": {
|
||||
"<prefix>": { "<fieldName>": "<valor>" }
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 3. Escribir traducciones de un registro
|
||||
**Endpoint**: `/cms/lib/viewer_functions.php?action_ws=setTranslations`
|
||||
**Método**: POST via `AcaiHttpClient.postViewerAction`
|
||||
**Usado por**: `set_record_translations`
|
||||
**Body**:
|
||||
```javascript
|
||||
{
|
||||
tableName: string, // sin prefijo cms_
|
||||
recordNum: number, // PK a traducir
|
||||
prefix: string, // idioma destino (nunca 'www')
|
||||
fields: { "<fieldName>": "<valor>" } // '' borra la traducción
|
||||
}
|
||||
```
|
||||
**Respuesta**: `{ success: true, updated: number, deleted: number }`
|
||||
**Errores**: `{ error: { message: string, code: string } }` — p.ej. si se intenta traducir `enlace` (prohibido: lo mantiene CocoEnlace).
|
||||
|
||||
Notas:
|
||||
- Solo campos traducibles: `textfield`, `textbox`, `wysiwyg`, `codigo`, `multitext` (el multitext se traduce como el JSON serializado completo en una fila).
|
||||
- Un `fieldValue` vacío (`''`) borra la traducción y el runtime cae al idioma base.
|
||||
- Vars de módulo: usar `tableName: 'builder_custom'` + el `recordNum`/`fieldName` que da `varsMeta` de `get_module_config_vars`.
|
||||
- Lectura traducida en línea: las tools `list_table_records`/`get_record` pasan `options.translates = <prefix>` al `cmsApi` get (equivalente al header `X-ACAI-ACCEPT-LANGUAGE` en cms_api v3).
|
||||
|
||||
## Patrones Comunes
|
||||
|
||||
### getApiClient Calls
|
||||
|
||||
Reference in New Issue
Block a user