You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Cloud Translation API传不同语言码却报源目标语言相同错误

问题根因

这是google/cloud-translate v1.10.1版本的已知回归bug,问题出在其依赖的底层google/gax API核心库的Protobuf序列化逻辑:

  • 当传入长度为2的ISO 639-1标准语言码(比如示例中的pl、en)时,序列化逻辑没有做字符串长度校验,会越界读取内存相邻位置的字节,把短字符串拼接为3字符的错误值,比如pl被拼接为pol、en被拼接为por
  • 服务端收到非法的未识别语言码后,错误提示逻辑存在缺陷,哪怕两个错误码实际内容不同,也会误抛出「Target language can't be equal to source language」的报错,这也是所有语言对组合都会复现问题的原因。

修复方案

二选一即可:

  • 推荐方案:升级依赖版本
    官方在v1.10.2版本已经修复了该序列化bug,不需要调整业务代码,直接升级包版本即可恢复:
    composer require google/cloud-translate:^1.10.2
    
  • 临时规避方案(暂无法升级时使用)
    传入语言码时不要使用2位短码,替换为谷歌翻译支持的完整BCP-47语言标签即可绕过短字符串越界读取的问题,修改后的代码示例:
    $client = new TranslationServiceClient();
    $projectId = self::key(true)->project_id;
    $formattedParent = $client::locationName($projectId, 'us-central1');
    
    $client->translateText(
        ['Test'],
        'en-US', // 目标语言替换为完整标签
        $formattedParent,
        ['sourceLanguageCode' => 'pl-PL'] // 源语言替换为完整标签
    )->getTranslations();
    

内容的提问来源于stack exchange,提问作者tapseoff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 18:51:19