GT ClassMethodsTranslation

uploadSourceFiles

uploadSourceFiles 方法的 API 参考:用于上传待翻译的源文件

概览

uploadSourceFiles 方法会将源文件上传到 General Translation 平台以进行翻译处理。 这通常是翻译工作流的第一步,先于设置项目或将翻译任务加入队列。

const gt = new GT({ apiKey: 'your-api-key', projectId: 'your-project-id' });

const result = await gt.uploadSourceFiles(files, {
  sourceLocale: 'en'
});

参考资料

参数

名称类型说明
filesFileUpload[]待上传的源文件数组
optionsUploadFilesOptions上传的配置项

FileUpload 结构

名称类型描述
contentstring原始文件内容(字符串)
fileNamestring唯一文件标识符(通常为文件路径 + 名称)
fileFormatFileFormat文件格式(JSON、MDX、MD、XML 等)
dataFormat?DataFormat文件内数据的可选格式(ICU、i18next、JSX)
localestring源文件内容的 locale
versionId?string高级用例的可选版本 ID
fileId?string高级用例的可选文件 ID

UploadFilesOptions

名称类型描述
sourceLocalestring所有上传文件的源语言(sourceLocale)
modelProvider?string可选的 AI 模型提供商偏好设置
timeout?number请求超时时间(毫秒)

返回

Promise<UploadFilesResponse> - 包含上传结果和文件引用。

type UploadFilesResponse = {
  uploadedFiles: FileUploadRef[];
  count: number;
  message: string;
}
属性类型说明
uploadedFilesFileUploadRef[]已上传文件引用的数组,用于后续操作
countnumber成功上传的文件数
messagestring来自 API 的状态信息

FileUploadRef 结构体

type FileUploadRef = {
  fileId: string;
  versionId: string;
  fileName: string;
  fileFormat: FileFormat;
  dataFormat?: DataFormat;
  locale?: string;
}

示例

基本用法

上传 JSON 译文文件:

import { GT } from 'generaltranslation';
import fs from 'fs';

const gt = new GT({
  apiKey: 'your-api-key'
});

const files = [
  {
    content: fs.readFileSync('./locales/en/common.json', 'utf8'),
    fileName: 'common.json',
    fileFormat: 'JSON' as const,
    locale: 'en'
  },
  {
    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(`已上传 ${result.count} 个文件`);
result.uploadedFiles.forEach(file => {
  console.log(`  ${file.fileName}:${file.fileId}`);
});

指定数据格式

上传 files,并显式指定数据格式:

const files = [
  {
    content: '{"welcome": "Welcome, {name}!"}',
    fileName: 'messages.json',
    fileFormat: 'JSON' as const,
    dataFormat: 'ICU' as const, // ICU 消息格式
    locale: 'en'
  },
  {
    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
});

带有错误处理的批量上传

上传多个文件,并提供完善的错误处理:

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 => ({
      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 选项一致
  • 处理大文件或数量较多的文件时,可能需要提高 timeout 值
  • 此方法返回的文件引用将在后续操作中使用
  • 支持的文件格式包括 JSON、MD、MDX、XML 等——完整列表请参见 FileFormat 类型

下一步

本指南如何?