# generaltranslation: General Translation Core SDK: uploadSourceFiles
URL: https://generaltranslation.com/zh/docs/core/class/methods/translation/upload-source-files.mdx
---
title: uploadSourceFiles
description: uploadSourceFiles 方法的 API 参考,用于上传待翻译的源文件
---
## 概述
`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 }[]` | 要 upload 的源文件数组 |
| `options` | `UploadFilesOptions` | upload 的配置选项 |
#### FileUpload 结构
| 名称 | 类型 | 说明 |
| ------------- | ------------ | ----------------------------- |
| `content` | `string` | 原始文件内容 (字符串) |
| `fileName` | `string` | 唯一文件标识符 (通常为文件路径 + 文件名) |
| `fileFormat` | `FileFormat` | 文件格式 (JSON、MDX、MD、XML 等) |
| `dataFormat?` | `DataFormat` | 文件内数据的可选格式 (ICU、I18NEXT、JSX) |
| `locale` | `string` | 源文件内容的区域设置 |
| `versionId?` | `string` | 高级用法中可选的版本 ID |
| `fileId?` | `string` | 高级用法中可选的文件 ID |
#### UploadFilesOptions
| 名称 | 类型 | 说明 |
| ---------------- | -------- | --------------- |
| `sourceLocale` | `string` | 所有上传文件的源区域设置 |
| `branchId?` | `string` | 可选,指定要上传到的分支 ID |
| `modelProvider?` | `string` | 可选的 AI 模型提供方偏好 |
| `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 消息格式
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(`正在上传 ${files.length} 个文件...`);
const result = await gt.uploadSourceFiles(files, {
sourceLocale: 'en',
timeout: 60000 // 大批量上传的 60 秒超时
});
if (result.count !== files.length) {
console.warn(`预期上传 ${files.length} 个文件,但实际只上传了 ${result.count} 个`);
}
return result.uploadedFiles;
} catch (error) {
console.error('上传失败:', 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`