# generaltranslation: General Translation Core SDK: uploadTranslations URL: https://generaltranslation.com/zh/docs/core/class/methods/translation/upload-translations.mdx --- title: uploadTranslations description: 用于上传现有翻译文件的 uploadTranslations 方法 API 参考 --- ## 概述 `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` | upload 的配置选项 | #### TranslationUpload 结构 ```typescript type TranslationUpload = { source: FileUpload; // 引用现有源文件(无需提供内容) translations: FileUpload[]; // 包含内容的已翻译文件数组 } ``` #### FileUpload 结构 (用于引用源文件) | 名称 | 类型 | 说明 | | ------------ | ------------ | ------------------------- | | `fileName` | `string` | 与先前上传的源文件对应的文件名 | | `fileFormat` | `FileFormat` | 文件格式 (JSON、MDX、MD、XML 等) | | `fileId?` | `string` | 源文件的可选文件 ID | | `versionId?` | `string` | 源文件的可选版本 ID | #### FileUpload 结构 (用于翻译) | 名称 | 类型 | 说明 | | ------------ | ------------ | ------------------------- | | `content` | `string` | 翻译后文件的原始内容,以字符串形式表示 | | `fileName` | `string` | 译文文件的文件名 | | `fileFormat` | `FileFormat` | 文件格式 (JSON、MDX、MD、XML 等) | | `locale` | `string` | 翻译的目标区域设置 | | `fileId?` | `string` | 可选的文件 ID | | `versionId?` | `string` | 可选的版本 ID | #### UploadFilesOptions | 名称 | 类型 | 描述 | | -------------- | -------- | ------------------ | | `sourceLocale` | `string` | 这些文件的源区域设置 | | `branchId?` | `string` | 要 upload 到的可选分支 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' }); // 第一步:上传源文件 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' }); // 第二步:上传现有译文 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) 以查看译文状态