# generaltranslation: General Translation Core SDK: uploadSourceFiles
URL: https://generaltranslation.com/ru/docs/core/class/methods/translation/upload-source-files.mdx
---
title: uploadSourceFiles
description: Справка по API для метода uploadSourceFiles, который загружает исходные файлы для перевода
---
## Обзор
Метод `uploadSourceFiles` загружает исходные файлы на платформу General Translation для дальнейшей обработки перевода.
Обычно это первый шаг в процессе перевода — перед настройкой проектов и постановкой заданий на перевод в очередь.
```typescript
const gt = new GT({ apiKey: 'your-api-key', projectId: 'your-project-id' });
const result = await gt.uploadSourceFiles(files, {
sourceLocale: 'en'
});
```
## Справка
### Параметры
| Имя | Тип | Описание |
| --------- | -------------------------- | ----------------------------------- |
| `files` | `{ source: FileUpload }[]` | Массив исходных файлов для загрузки |
| `options` | `UploadFilesOptions` | Параметры загрузки |
#### Структура FileUpload
| Имя | Тип | Описание |
| ------------- | ------------ | --------------------------------------------------------------------------- |
| `content` | `string` | Исходное содержимое файла в виде строки |
| `fileName` | `string` | Уникальный идентификатор файла (обычно путь к файлу и имя) |
| `fileFormat` | `FileFormat` | Формат файла (JSON, MDX, MD, XML и т. д.) |
| `dataFormat?` | `DataFormat` | Необязательный формат данных внутри файла (ICU, I18NEXT, JSX) |
| `locale` | `string` | Локаль содержимого исходного файла |
| `versionId?` | `string` | Необязательный идентификатор версии для продвинутых сценариев использования |
| `fileId?` | `string` | Необязательный идентификатор файла для продвинутых сценариев использования |
#### UploadFilesOptions
| Имя | Тип | Описание |
| ---------------- | -------- | -------------------------------------------------------------- |
| `sourceLocale` | `string` | Исходная локаль для всех загружаемых файлов |
| `branchId?` | `string` | Необязательный идентификатор ветки для загрузки |
| `modelProvider?` | `string` | Необязательное указание предпочтительного провайдера модели ИИ |
| `timeout?` | `number` | Тайм-аут запроса в миллисекундах |
### Возвращает
`Promise` — содержит результаты загрузки и ссылки на файлы.
```typescript
type UploadFilesResponse = {
uploadedFiles: FileReference[];
count: number;
message: string;
}
```
| Свойство | Тип | Описание |
| --------------- | ----------------- | ----------------------------------------------------------- |
| `uploadedFiles` | `FileReference[]` | Массив ссылок на загруженные файлы для последующих операций |
| `count` | `number` | Количество успешно загруженных файлов |
| `message` | `string` | Сообщение о состоянии от API |
#### Структура FileReference
```typescript
type FileReference = {
fileId: string;
versionId: string;
branchId: string;
fileName: string;
fileFormat: FileFormat;
dataFormat?: DataFormat;
locale?: string;
}
```
***
## Примеры
### Базовое использование
Загрузите JSON-файлы перевода:
```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: {
content: fs.readFileSync('./locales/en/common.json', 'utf8'),
fileName: 'common.json',
fileFormat: 'JSON' as const,
locale: 'en'
}
},
{
source: {
content: fs.readFileSync('./locales/en/navigation.json', 'utf8'),
fileName: 'navigation.json',
fileFormat: 'JSON' as const,
locale: 'en'
}
}
];
const result = await gt.uploadSourceFiles(files, {
sourceLocale: 'en'
});
console.log(`Uploaded ${result.count} files`);
result.uploadedFiles.forEach(file => {
console.log(` ${file.fileName}: ${file.fileId} (branch: ${file.branchId})`);
});
```
### С указанием формата данных
Загрузите файлы, явно указав формат данных:
```typescript copy
const files = [
{
source: {
content: '{"welcome": "Welcome, {name}!"}',
fileName: 'messages.json',
fileFormat: 'JSON' as const,
dataFormat: 'ICU' as const, // формат ICU message format
locale: 'en'
}
},
{
source: {
content: '{"greeting": "Hello {{name}}"}',
fileName: 'i18next.json',
fileFormat: 'JSON' as const,
dataFormat: 'I18NEXT' as const,
locale: 'en'
}
}
];
const result = await gt.uploadSourceFiles(files, {
sourceLocale: 'en',
modelProvider: 'gpt-4',
timeout: 30000
});
```
### Пакетная загрузка с обработкой ошибок
Загрузите несколько файлов с полной обработкой ошибок:
```typescript copy
import { glob } from 'glob';
import path from 'path';
async function uploadAllJsonFiles() {
try {
// Найти все JSON-файлы
const jsonPaths = await glob('./locales/en/**/*.json');
const files = jsonPaths.map(filePath => ({
source: {
content: fs.readFileSync(filePath, 'utf8'),
fileName: path.relative('./locales/en', filePath),
fileFormat: 'JSON' as const,
locale: 'en'
}
}));
console.log(`Uploading ${files.length} files...`);
const result = await gt.uploadSourceFiles(files, {
sourceLocale: 'en',
timeout: 60000 // тайм-аут 60 секунд для больших загрузок
});
if (result.count !== files.length) {
console.warn(`Expected ${files.length} files, but only ${result.count} uploaded`);
}
return result.uploadedFiles;
} catch (error) {
console.error('Upload failed:', error);
throw error;
}
}
const uploadedFiles = await uploadAllJsonFiles();
```
***
## Примечания
* Содержимое файлов автоматически кодируется в Base64 для безопасной передачи
* Имена файлов должны быть уникальными идентификаторами и обычно включать путь к файлу
* Поле `locale` в каждом файле должно соответствовать параметру `sourceLocale`
* Для больших файлов или большого количества файлов может потребоваться увеличить тайм-аут
* Ссылки на файлы, возвращаемые этим методом, нужны для последующих операций
* Ссылки на файлы включают `branchId` для корректного управления версиями при использовании ветвления
* Поддерживаемые форматы файлов включают JSON, MD, MDX, XML и другие — полный список см. в типе `FileFormat`
## Следующие шаги
* См. [`setupProject`](/docs/core/class/methods/translation/setup-project), чтобы подготовить загруженные файлы к переводу
* См. [`enqueueFiles`](/docs/core/class/methods/translation/enqueue-files), чтобы запустить задачи перевода
* См. [`uploadTranslations`](/docs/core/class/methods/translation/upload-translations), чтобы загрузить существующие переводы
* См. `FileUpload` для подробной информации о структуре файла