# generaltranslation: General Translation Core SDK: uploadTranslations
URL: https://generaltranslation.com/ru/docs/core/class/methods/translation/upload-translations.mdx
---
title: uploadTranslations
description: Справка по API для метода uploadTranslations, который загружает существующие файлы перевода
---
## Обзор
Метод `uploadTranslations` загружает файлы переводов, соответствующие ранее загруженным исходным файлам.
Это полезно, если у вас уже есть готовые переводы и вы хотите загрузить их напрямую, а не создавать через сервис перевода.
```typescript
const gt = new GT({ apiKey: 'your-api-key', projectId: 'your-project-id' });
const result = await gt.uploadTranslations(files, {
sourceLocale: 'en'
});
```
Перед загрузкой переводов необходимо предварительно загрузить исходные файлы с помощью [`uploadSourceFiles`](/docs/core/class/methods/translation/upload-source-files).
## Справка
### Параметры
| Имя | Тип | Описание |
| --------- | --------------------- | --------------------------------------------- |
| `files` | `TranslationUpload[]` | Массив ссылок на исходные файлы и их переводы |
| `options` | `UploadFilesOptions` | Параметры загрузки |
#### Структура TranslationUpload
```typescript
type TranslationUpload = {
source: FileUpload; // Ссылка на существующий исходный файл (содержимое не требуется)
translations: FileUpload[]; // Массив переведённых файлов с содержимым
}
```
#### Структура FileUpload (для справки по исходному файлу)
| Название | Тип | Описание |
| ------------ | ------------ | ------------------------------------------------------------- |
| `fileName` | `string` | Имя файла, соответствующее ранее загруженному исходному файлу |
| `fileFormat` | `FileFormat` | Формат файла (JSON, MDX, MD, XML и т. д.) |
| `fileId?` | `string` | Необязательный идентификатор исходного файла |
| `versionId?` | `string` | Необязательный идентификатор версии исходного файла |
#### Структура FileUpload (для переводов)
| Имя | Тип | Описание |
| ------------ | ------------ | ----------------------------------------------------- |
| `content` | `string` | Исходное содержимое переведённого файла в виде строки |
| `fileName` | `string` | Имя файла перевода |
| `fileFormat` | `FileFormat` | Формат файла (JSON, MDX, MD, XML и т. д.) |
| `locale` | `string` | Целевая локаль перевода |
| `fileId?` | `string` | Необязательный идентификатор файла |
| `versionId?` | `string` | Необязательный идентификатор версии |
#### UploadFilesOptions
| Имя | Тип | Описание |
| -------------- | -------- | ------------------------------------ |
| `sourceLocale` | `string` | Исходная локаль файлов |
| `branchId?` | `string` | Необязательный ID ветки для загрузки |
| `timeout?` | `number` | Тайм-аут запроса в миллисекундах |
### Возвращаемое значение
`Promise` — содержит результаты загрузки и ссылки на файлы.
```typescript
type UploadFilesResponse = {
uploadedFiles: FileReference[];
count: number;
message: string;
}
```
| Свойство | Тип | Описание |
| --------------- | ----------------- | ------------------------------------- |
| `uploadedFiles` | `FileReference[]` | Массив ссылок на загруженные файлы |
| `count` | `number` | Количество успешно загруженных файлов |
| `message` | `string` | Сообщение о статусе от API |
***
## Примеры
### Базовое использование
Загрузите переводы для ранее загруженных исходных файлов:
```typescript copy
import { GT } from 'generaltranslation';
import fs from 'fs';
const gt = new GT({
apiKey: 'your-api-key',
projectId: 'your-project-id'
});
// Предполагается, что исходный файл уже был загружен ранее
const files = [
{
source: {
fileName: 'common.json',
fileFormat: 'JSON' as const,
fileId: 'source-file-id',
versionId: 'source-version-id'
},
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 copy
import { GT } from 'generaltranslation';
import fs from 'fs';
const gt = new GT({
apiKey: 'your-api-key',
projectId: 'your-project-id'
});
// Шаг 1: Загрузка исходных файлов
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'
});
// Шаг 2: Загрузка существующих переводов
const translationFiles = [
{
source: {
fileName: uploadedFiles[0].fileName,
fileFormat: uploadedFiles[0].fileFormat,
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(`Загружено переводов: ${translationResult.count}`);
```
### Пакетная загрузка нескольких файлов
Загрузите переводы для нескольких исходных файлов:
```typescript copy
import { glob } from 'glob';
import path from 'path';
async function uploadAllTranslations(
sourceRefs: FileReference[],
targetLocales: string[]
) {
const files = sourceRefs.map(sourceRef => ({
source: {
fileName: sourceRef.fileName,
fileFormat: sourceRef.fileFormat,
fileId: sourceRef.fileId,
versionId: sourceRef.versionId
},
translations: targetLocales
.map(locale => {
const translationPath = `./locales/${locale}/${sourceRef.fileName}`;
try {
return {
content: fs.readFileSync(translationPath, 'utf8'),
fileName: sourceRef.fileName,
fileFormat: sourceRef.fileFormat,
locale
};
} catch {
// Файл перевода для данной локали отсутствует
return null;
}
})
.filter(Boolean)
}));
const result = await gt.uploadTranslations(files, {
sourceLocale: 'en',
timeout: 60000
});
return result;
}
```
***
## Примечания
* Сначала нужно загрузить исходные файлы с помощью [`uploadSourceFiles`](/docs/core/class/methods/translation/upload-source-files)
* Объект `source` в каждой записи файла — это ссылка на существующий исходный файл (содержимое не требуется)
* Каждый перевод в массиве `translations` должен содержать содержимое и целевую локаль
* Этот метод полезен для переноса существующих переводов или загрузки переводов, проверенных вручную
* Ссылки на файлы включают `branchId` для корректного управления версиями при использовании ветвления
## Что дальше
* См. [`uploadSourceFiles`](/docs/core/class/methods/translation/upload-source-files), чтобы сначала загрузить исходные файлы
* См. [`enqueueFiles`](/docs/core/class/methods/translation/enqueue-files), чтобы автоматически создать переводы
* См. [`downloadFile`](/docs/core/class/methods/translation/download-file), чтобы скачать переводы
* См. [`queryFileData`](/docs/core/class/methods/translation/query-file-data), чтобы проверить статус перевода