# General Translation Platform: uploadTranslations
URL: https://generaltranslation.com/es/docs/platform/core/reference/gt-class-methods/translation/upload-translations.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: Sube archivos traducidos existentes que corresponden a archivos fuente. Referencia de la API para uploadTranslations.

Sube traducciones existentes para archivos fuente que ya están en el proyecto. Úsalo al migrar traducciones o subir traducciones revisadas por personas, en lugar de generarlas mediante el servicio de traducción.

## Resumen general [#overview]

Llama a `uploadTranslations` con una lista de cargas de traducción y un objeto de opciones. Cada carga incluye el contenido de origen completo que se usa para identificar un archivo fuente ya subido, además de uno o más archivos traducidos.

```typescript
const gt = new GT({ apiKey: 'your-api-key', projectId: 'your-project-id' });

const result = await gt.uploadTranslations(files, {
  sourceLocale: 'en',
});
```

Firma:

```typescript
uploadTranslations(
  files: { source: FileUpload; translations: FileUpload[] }[],
  options: UploadFilesOptions
): Promise<UploadFilesResponse>
```

*Nota: `uploadTranslations` requiere una `apiKey` (o `devApiKey`) y `projectId` en la instancia de GT.*

## Cómo funciona [#how-it-works]

* **Origen existente.** Sube primero el archivo fuente. El objeto `source` sigue siendo un `FileUpload` completo, con contenido y configuración regional incluidos; la API deriva los IDs faltantes a partir de esos datos y usa los IDs resultantes para encontrar la versión de origen existente.
* **Traducciones.** Cada elemento de la lista `translations` debe incluir contenido y una configuración regional de destino.

- **Codificación de archivos.** El contenido de texto se codifica automáticamente en base64. Las traducciones binarias `LOTTIE` ya deben contener datos ZIP `.lottie` codificados en base64.

* **Control de versiones.** Las referencias de archivo devueltas incluyen `branchId` para el control de versiones con compatibilidad con ramas.

## Parámetros [#parameters]

| Parámetro             | Descripción                                          | Tipo                                                   | Opcional | Predeterminado |
| --------------------- | ---------------------------------------------------- | ------------------------------------------------------ | -------- | -------------- |
| [`files`](#files)     | Array de archivos fuente junto con sus traducciones. | `{ source: FileUpload; translations: FileUpload[] }[]` | No       | —              |
| [`options`](#options) | Opciones de configuración de la carga.               | `UploadFilesOptions`                                   | No       | —              |

### `files`

**Type** `{ source: FileUpload; translations: FileUpload[] }[]` · **Obligatorio**

Cada entrada asocia un archivo fuente completo con sus archivos traducidos:

```typescript
{
  source: FileUpload; // contenido de origen y metadatos
  translations: FileUpload[]; // archivos traducidos con contenido
}
```

El valor de `source` usa estos campos de `FileUpload`:

| Campo                | Descripción                                                                                                                       | Tipo                                                            | Opcional |
| -------------------- | --------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | -------- |
| `content`            | Texto de origen sin procesar, o contenido binario codificado en base64 para `LOTTIE`.                                             | `string`                                                        | No       |
| `fileName`           | Nombre de archivo que coincide con el archivo fuente subido previamente.                                                       | `string`                                                        | No       |
| `fileFormat`         | Formato del archivo.                                                                                                              | [`FileFormat`](/docs/platform/core/reference/types/file-format) | No       |
| `locale`             | Configuración regional del contenido de origen.                                                                                   | `string`                                                        | No       |
| `dataFormat`         | Formato de los datos dentro del archivo de origen (`ICU`, `I18NEXT`, `JSX` o `STRING`).                                           | [`DataFormat`](/docs/platform/core/reference/types/data-format) | Sí       |
| `formatMetadata`     | Metadatos específicos del formato que se aceptan junto con el descriptor de origen; no modifican el registro de origen existente. | `GTJsonFormatMetadata \| FormatMetadata`                        | Sí       |
| `branchId`           | Rama que contiene el origen subido previamente. Si se omite, se usa la rama predeterminada.                                       | `string`                                                        | Sí       |
| `fileId`             | ID de archivo del archivo fuente.                                                                                              | `string`                                                        | Sí       |
| `versionId`          | ID de versión del archivo fuente.                                                                                              | `string`                                                        | Sí       |
| `transformFormat`    | `FileUpload` lo acepta y se valida localmente, pero este endpoint de subida no lo utiliza.                                        | [`FileFormat`](/docs/platform/core/reference/types/file-format) | Sí       |
| `incomingBranchId`   | `FileUpload` lo acepta, pero este método no lo envía.                                                                             | `string`                                                        | Sí       |
| `checkedOutBranchId` | `FileUpload` lo acepta, pero este método no lo envía.                                                                             | `string`                                                        | Sí       |

Cada traducción (un `FileUpload`) usa estos campos:

| Campo                | Descripción                                                                                                      | Tipo                                                            | Opcional |
| -------------------- | ---------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------- | -------- |
| `content`            | Texto traducido sin procesar, o contenido binario codificado en base64 para `LOTTIE`.                            | `string`                                                        | No       |
| `fileName`           | Obligatorio para `FileUpload`; la traducción almacenada usa el nombre del archivo fuente.                     | `string`                                                        | No       |
| `fileFormat`         | Formato del archivo.                                                                                             | [`FileFormat`](/docs/platform/core/reference/types/file-format) | No       |
| `locale`             | Configuración regional de destino de la traducción.                                                              | `string`                                                        | No       |
| `dataFormat`         | Formato de los datos traducidos (`ICU`, `I18NEXT`, `JSX` o `STRING`).                                            | [`DataFormat`](/docs/platform/core/reference/types/data-format) | Sí       |
| `fileId`             | El cliente lo acepta y lo envía, pero el endpoint lo ignora; la traducción hereda el ID del archivo fuente.   | `string`                                                        | Sí       |
| `versionId`          | El cliente lo acepta y lo envía, pero el endpoint lo ignora; la traducción hereda el ID de la versión de origen. | `string`                                                        | Sí       |
| `branchId`           | El cliente lo acepta y lo envía, pero el endpoint lo ignora; la traducción hereda la rama de origen.             | `string`                                                        | Sí       |
| `transformFormat`    | `FileUpload` lo acepta, pero este método no lo envía.                                                            | [`FileFormat`](/docs/platform/core/reference/types/file-format) | Sí       |
| `formatMetadata`     | `FileUpload` lo acepta, pero este método no lo envía.                                                            | `GTJsonFormatMetadata \| FormatMetadata`                        | Sí       |
| `incomingBranchId`   | `FileUpload` lo acepta, pero este método no lo envía.                                                            | `string`                                                        | Sí       |
| `checkedOutBranchId` | `FileUpload` lo acepta, pero este método no lo envía.                                                            | `string`                                                        | Sí       |

### `options`

**Tipo** `UploadFilesOptions` · **obligatorio**

Configuración para la subida:

| Campo           | Descripción                                                                                                                                                                                                                  | Tipo     | Opcional |
| --------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | -------- |
| `sourceLocale`  | Configuración regional de origen de la solicitud. También actualiza la configuración regional predeterminada del proyecto cuando difiere.                                                                                    | `string` | No       |
| `modelProvider` | Aceptado por el tipo de opciones compartidas, pero no se envía con este método de subida. En su lugar, establece el proveedor en [`enqueueFiles`](/docs/platform/core/reference/gt-class-methods/translation/enqueue-files). | `string` | Sí       |
| `timeout`       | Tiempo de espera de la solicitud en milisegundos.                                                                                                                                                                            | `number` | Sí       |

*Nota: `branchId` no es una opción de subida. Es un campo por archivo dentro de cada objeto de archivo, no forma parte de `UploadFilesOptions`.*

## Devuelve [#returns]

**Tipo** `Promise<UploadFilesResponse>`

Se resuelve con un `UploadFilesResponse` que contiene las referencias de los archivos cargados y un resumen:

```typescript
type UploadFilesResponse = {
  uploadedFiles: FileReference[]; // referencias de archivos subidos
  count: number; // número de archivos subidos correctamente
  message: string; // mensaje de estado de la API
};
```

## Ejemplos [#examples]

```typescript
// Uso básico: subir traducciones para archivos fuente previamente subidos
import { GT } from 'generaltranslation';
import fs from 'fs';

const gt = new GT({
  apiKey: 'your-api-key',
  projectId: 'your-project-id',
});

const files = [
  {
    // Este mismo archivo fuente ya debe haber sido subido.
    source: {
      content: fs.readFileSync('./locales/en/common.json', 'utf8'),
      fileName: 'common.json',
      fileFormat: 'JSON' as const,
      locale: 'en',
    },
    translations: [
      {
        content: fs.readFileSync('./locales/es/common.json', 'utf8'),
        fileName: 'common.json',
        fileFormat: 'JSON' as const,
        locale: 'es',
      },
      {
        content: fs.readFileSync('./locales/fr/common.json', 'utf8'),
        fileName: 'common.json',
        fileFormat: 'JSON' as const,
        locale: 'fr',
      },
    ],
  },
];

const result = await gt.uploadTranslations(files, {
  sourceLocale: 'en',
});

console.log(`Uploaded ${result.count} translation files`);
```

```typescript
// Flujo completo: subir archivos fuente y luego sus traducciones
import { GT } from 'generaltranslation';
import fs from 'fs';

const gt = new GT({
  apiKey: 'your-api-key',
  projectId: 'your-project-id',
});

// Paso 1: Subir archivos fuente
const sourceFiles = [
  {
    source: {
      content: fs.readFileSync('./locales/en/messages.json', 'utf8'),
      fileName: 'messages.json',
      fileFormat: 'JSON' as const,
      locale: 'en',
    },
  },
];

const { uploadedFiles } = await gt.uploadSourceFiles(sourceFiles, {
  sourceLocale: 'en',
});

// Paso 2: Subir traducciones existentes
const translationFiles = [
  {
    source: {
      content: sourceFiles[0].source.content,
      fileName: uploadedFiles[0].fileName,
      fileFormat: uploadedFiles[0].fileFormat,
      locale: sourceFiles[0].source.locale,
      fileId: uploadedFiles[0].fileId,
      versionId: uploadedFiles[0].versionId,
    },
    translations: [
      {
        content: fs.readFileSync('./locales/es/messages.json', 'utf8'),
        fileName: 'messages.json',
        fileFormat: 'JSON' as const,
        locale: 'es',
      },
      {
        content: fs.readFileSync('./locales/de/messages.json', 'utf8'),
        fileName: 'messages.json',
        fileFormat: 'JSON' as const,
        locale: 'de',
      },
    ],
  },
];

const translationResult = await gt.uploadTranslations(translationFiles, {
  sourceLocale: 'en',
});

console.log(`Uploaded ${translationResult.count} translations`);
```

```typescript
// Subir traducciones en lote para múltiples archivos fuente
import fs from 'node:fs';
import { GT } from 'generaltranslation';
import type { FileUpload } from 'generaltranslation/types';

const gt = new GT({
  apiKey: 'your-api-key',
  projectId: 'your-project-id',
});

async function uploadAllTranslations(
  sourceFiles: FileUpload[],
  targetLocales: string[]
) {
  const files = sourceFiles.map((source) => ({
    source,
    translations: targetLocales
      .map((locale) => {
        const translationPath = `./locales/${locale}/${source.fileName}`;
        try {
          return {
            content: fs.readFileSync(translationPath, 'utf8'),
            fileName: source.fileName,
            fileFormat: source.fileFormat,
            locale,
          };
        } catch {
          // El archivo de traducción no existe para esta configuración regional
          return null;
        }
      })
      .filter((file): file is FileUpload => file !== null),
  }));

  const result = await gt.uploadTranslations(files, {
    sourceLocale: 'en',
    timeout: 60000,
  });

  return result;
}
```

## Notas [#notes]

* El objeto `source` de cada entrada debe incluir contenido, nombre de archivo, formato de archivo y configuración regional.
* La versión de origen identificada por ese objeto ya debe existir en el proyecto.
* Cada traducción de la lista `translations` debe incluir contenido y una configuración regional de destino.
* Este método es útil para migrar traducciones existentes o cargar traducciones revisadas por personas.
* Las referencias de archivo incluyen `branchId` para el control de versiones con compatibilidad con ramas.

## Sitemap

See the full [sitemap](https://generaltranslation.com/sitemap.md) for all pages.
