Angular 12调用Google Translate API批量翻译报Too many text segments错误如何解决
Google Translate API 400 "Too many text segments" 错误解决方案
该错误是因为Google Translation V2 API 明确限制单次请求的
q参数数组最多可传入128个文本段,提交的数组长度超出阈值就会返回对应400错误。
- 方案1:拆分待翻译数组分批请求
把所有待翻译的字符串按每128个为一组拆分,每组单独发起翻译请求,最后合并返回结果即可。Angular项目中可参考如下TypeScript实现:
// 数组拆分工具函数 function chunkArray<T>(originArr: T[], chunkSize: number): T[][] { const result = []; for (let i = 0; i < originArr.length; i += chunkSize) { result.push(originArr.slice(i, i + chunkSize)); } return result; } // 业务调用示例 const allNeedTranslate: string[] = ["string1", "string2", /* 你的所有待翻译字符串 */]; // 按API最大限制拆分数组 const requestChunks = chunkArray(allNeedTranslate, 128); // 批量发起请求,可根据配额调整并发数避免触发限流 const batchResponse = await Promise.all( requestChunks.map(chunk => this.http.post('https://translation.googleapis.com/language/translate/v2?key=你的API密钥', { source: 'en', target: 'es', q: chunk }).toPromise() ) ); // 合并所有批次的翻译结果 const finalTranslateResult = batchResponse.flatMap(item => item.data.translations);
- 方案2:先去重再翻译降低请求量
如果待翻译数组中存在重复内容(如你示例中的重复string1),可先对内容做去重处理,翻译完成后再通过映射关系还原到原数组,可有效减少请求次数、降低API调用成本:
// 待翻译数组去重 const uniqueTextList = Array.from(new Set(allNeedTranslate)); // 对去重后的数组做拆分请求翻译,得到翻译结果translatedUniqueList // 构建原文-译文映射表 const translateMap = new Map(uniqueTextList.map((text, idx) => [text, translatedUniqueList[idx]])); // 映射回原数组得到完整翻译结果 const finalResult = allNeedTranslate.map(text => translateMap.get(text));
- 额外注意事项
除了单次请求128个文本段的限制外,Translation V2 API还有如下配额限制需要注意避免触发其他错误:- 单条待翻译文本长度不能超过102400字符
- 存在每分钟请求次数、每月总翻译字符数的配额限制,拆分请求后如果并发过高可能触发429限流错误,可通过调整并发数、添加请求间隔的方式规避
内容的提问来源于stack exchange,提问作者Lakhvir Singh
相关产品推荐
相关产品推荐

