# General Translation Platform: translateMany
URL: https://generaltranslation.com/ru/docs/platform/core/reference/gt-class-methods/translation/translate-many.mdx
Docs index: https://generaltranslation.com/llms.txt
Description: Переводит несколько строк или записей структурированного контента в одном запросе. Справочник API для translateMany.

Переводит несколько записей контента в рамках одного запроса к API General Translation. Используйте этот метод для пакетного перевода — это эффективнее, чем выполнять множество отдельных вызовов [`translate`](/docs/platform/core/reference/gt-class-methods/translation/translate).

## Обзор [#overview]

Вызовите `translateMany` у настроенного экземпляра [`GT`](/docs/platform/core/reference/gt-class/constructor), передав набор записей и либо строку целевой локали (сокращённая запись), либо объект параметров. Метод принимает записи в виде массива или `объект `Record`` с ключами-хешами и возвращает результат в той же структуре.

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

const results = await gt.translateMany(
  ['Hello, world!', 'Welcome to our app', 'Click here to continue'],
  'es'
);
```

Сигнатура:

```typescript
// Перегрузка 1: массив записей
translateMany(
  sources: TranslateManyEntry[],
  options: string | TranslateOptions,
  timeout?: number
): Promise<TranslateManyResult>

// Перегрузка 2: запись записей с ключом по хешу
translateMany(
  sources: Record<string, TranslateManyEntry>,
  options: string | TranslateOptions,
  timeout?: number
): Promise<Record<string, TranslationResult>>
```

*Примечание: для `translateMany` в экземпляре GT требуются `apiKey` (или `devApiKey`) и `projectId`.*

## Как это работает [#how-it-works]

* **Массив и объект `Record`.** Если передан массив, его элементы хешируются внутри, а результаты возвращаются в порядке входных данных. Если передан объект `Record`, его ключи трактуются как хеши, и в ответе возвращается объект `Record` с теми же ключами.
* **Независимые результаты.** Ошибка перевода отдельного элемента не останавливает пакетную операцию — каждый результат отдельно сообщает об успехе или ошибке, поэтому частичный успех полностью поддерживается.
* **Сокращённая форма options.** Передача строки в `options` — это сокращённая форма для `{ targetLocale: string }`, поэтому `gt.translateMany(['Hello'], 'es')` и `gt.translateMany(['Hello'], { targetLocale: 'es' })` эквивалентны.
* **Целые документы.** Установите [`metadata.fileFormat`](/docs/platform/core/reference/types/entry-metadata#file-format) в `'MD'` или `'MDX'`, чтобы разобрать и перевести документ целиком с сохранением его структуры. Документ должен быть строкой с `dataFormat: 'STRING'` (значение по умолчанию) и не может использовать `maxChars`. Если фрагмент не удалось перевести или переведённый документ оказался некорректным, элемент-документ завершается с ошибкой, а не возвращает частичный результат.

## Параметры [#parameters]

| Параметр              | Описание                                                           | Тип                                                                                                                      | Необязательный | По умолчанию |
| --------------------- | ------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------ | -------------- | ------------ |
| [`sources`](#sources) | Массив записей для перевода или объект `Record` с такими записями. | [`TranslateManyEntry[] \| Record<string, TranslateManyEntry>`](/docs/platform/core/reference/types/translate-many-entry) | Нет            | —            |
| [`options`](#options) | Строка целевой локали или объект параметров.                       | `string \| TranslateOptions`                                                                                             | Нет            | —            |
| [`timeout`](#timeout) | Тайм-аут запроса в миллисекундах.                                  | `number`                                                                                                                 | Да             | —            |

### `sources` [#sources]

**Тип** [`TranslateManyEntry[] \| Record<string, TranslateManyEntry>`](/docs/platform/core/reference/types/translate-many-entry) · **Обязательно**

Записи для перевода. Каждый [`TranslateManyEntry`](/docs/platform/core/reference/types/translate-many-entry) — это простая строка или объект с `source` ([`Content`](/docs/platform/core/reference/types/content)) и необязательным `metadata` ([`EntryMetadata`](/docs/platform/core/reference/types/entry-metadata)):

```typescript
type TranslateManyEntry = string | { source: Content; metadata?: EntryMetadata };
```

Передайте массив, чтобы получить результаты в том же порядке, что и входные данные, или объект `Record` с хешами в качестве ключей, чтобы получить результаты с теми же ключами.

### `options` [#options]

**Тип** `string | TranslateOptions` · **Обязательно**

Строка целевой локали, например `'es'`, или объект параметров:

```typescript
type TranslateOptions = {
  targetLocale: string; // локаль для перевода
  sourceLocale?: string; // переопределяет sourceLocale экземпляра
  modelProvider?: string; // необязательная подсказка провайдеру модели
};
```

### `timeout` [#timeout]

**Тип** `number` · **Необязательно**

Тайм-аут запроса в миллисекундах. Если параметр не указан, используется значение экземпляра по умолчанию.

## Возвращает [#returns]

**Тип** `Promise<TranslateManyResult> | Promise<Record<string, TranslationResult>>`

* Для **входного массива** возвращается [`TranslateManyResult`](/docs/platform/core/reference/types/translate-many-result) (массив объектов [`TranslationResult`](/docs/platform/core/reference/types/translation-result)) в том же порядке, что и во входных данных.
* Для **входного объекта `Record`** возвращается `Record<string, TranslationResult>` с ключами, соответствующими тем же хэшам, что и во входных данных.

Перед чтением перевода проверяйте `success` у каждого результата.

## Примеры [#examples]

```typescript
// Массив строк
const results = await gt.translateMany(['Home', 'About', 'Products', 'Contact'], 'fr');

results.forEach((result, index) => {
  if (result.success) {
    console.log(`Item ${index}: ${result.translation}`);
  } else {
    console.error(`Item ${index} failed: ${result.error}`);
  }
});
```

```typescript
// Массив с метаданными для каждой записи
const results = await gt.translateMany(
  [
    { source: 'Hello, world!', metadata: { dataFormat: 'ICU' } },
    { source: 'Goodbye, world!' },
  ],
  { targetLocale: 'es' }
);
```

```typescript
// Перевод целого MDX-документа.
const [result] = await gt.translateMany(
  [
    {
      source: '# Welcome\n\n<Callout>Read the guide.</Callout>',
      metadata: { fileFormat: 'MDX' },
    },
  ],
  { sourceLocale: 'en', targetLocale: 'es' }
);
```

```typescript
// Объект `Record` с ключами-хешами — результаты возвращаются под теми же ключами
const results = await gt.translateMany(
  {
    'greeting-hash': 'Hello, world!',
    'farewell-hash': 'Goodbye, world!',
  },
  'es'
);

console.log(results['greeting-hash'].translation);
```

## Заметки [#notes]

* Переводит несколько записей за один API-запрос.
* Ошибка в одной записи не влияет на остальные.
* Результаты сохраняют тот же порядок, что и во входном массиве, или те же ключи, что и во входной структуре объекта `Record`.

## Sitemap

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