# 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), чтобы проверить статус перевода