You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Windows本地使用Google Translate API遇默认凭证缺失错误:translate.NewClient: dialing: google: could not find default credentials

解决Google Translate API Go客户端默认凭证找不到的问题

你的问题核心在于Translate客户端没有使用你指定的服务账户凭证:你的explicit函数能正常访问Storage服务,是因为它显式传入了option.WithCredentialsFile凭证选项;但translate.NewClient调用时仅依赖默认凭证查找逻辑——哪怕你设置了环境变量,也可能存在加载失效或者代码未显式指定的问题。下面是具体排查和解决步骤:

1. 验证环境变量是否正确加载

Windows下设置环境变量后,需要重启终端才能生效。你可以在代码中添加一行打印来确认:

import "os"

func main() {
    fmt.Println("GOOGLE_APPLICATION_CREDENTIALS:", os.Getenv("GOOGLE_APPLICATION_CREDENTIALS"))
    // ... 其他原有代码
}

如果输出路径不正确,重新检查环境变量设置:

  • 确保路径是绝对路径,且JSON凭证文件确实存在
  • 若路径包含空格,需用引号包裹(例如"C:/Users/Mels/Documents/My Folder/cred.json"

2. 显式为Translate Client传入凭证

最可靠的方式是直接在translate.NewClient调用时传入凭证选项,和你操作Storage客户端的逻辑一致。修改translateTextWithModel函数,让它支持接收凭证参数:

func translateTextWithModel(ctx context.Context, targetLanguage, text, model string, opts ...option.ClientOption) (string, error) {
    lang, err := language.Parse(targetLanguage)
    if err != nil {
        return "", fmt.Errorf("language.Parse: %v", err)
    }
    // 传入凭证选项初始化Translate客户端
    client, err := translate.NewClient(ctx, opts...)
    if err != nil {
        return "", fmt.Errorf("translate.NewClient: %v", err)
    }
    defer client.Close()

    resp, err := client.Translate(ctx, []string{text}, lang, &translate.Options{
        Model: model, // Either "nmt" or "base".
    })
    if err != nil {
        return "", fmt.Errorf("Translate: %v", err)
    }
    if len(resp) == 0 {
        return "", nil
    }
    return resp[0].Text, nil
}

然后在main函数调用时传入你的凭证文件路径:

func main() {
    Json_path := "C:/Users/Mels/Documents/GoogleTools/cred-9dfos6bb49f.json"
    ProjectID := "cred"
    fmt.Println("RUNNING...")
    explicit(Json_path, ProjectID)
    
    ctx := context.Background()
    // 传入凭证选项调用翻译函数
    result, err := translateTextWithModel(ctx, "ja", "Hello World", "nmt", option.WithCredentialsFile(Json_path))
    fmt.Println(result, err)
}

3. 额外检查:服务账户权限

确保你的服务账户拥有Cloud Translate API User角色:

  1. 登录Google Cloud控制台,进入你的项目
  2. 打开「IAM与管理员」→「IAM」页面
  3. 找到对应的服务账户,点击编辑按钮,添加Cloud Translate API User角色并保存

这样修改后,Translate客户端会直接使用你指定的服务账户凭证,不再依赖默认凭证查找逻辑,应该能解决你遇到的could not find default credentials报错。

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

火山引擎 最新活动