Google Cloud Translation API 有几个不同的使用方式,其中之一是使用最新的 Google Cloud Client
Library。这些库提供了简化的 API,使得与 Google Cloud 服务的交互变得更加容易。
对于gcp平台的创建方式,我记得得绑定真信用卡了,虚拟信用卡好像不行了。
背景和环境
谷歌翻译的api,就是谷歌云gcp上的一个翻译api,即cloud translation api,分v2和v3,v3更多高级功能,v2可能会被淘汰,所以后续我们都会优先使用v3,v2能用api key,也能用服务账户,v3只能用服务账户,而v3我选择了服务账户的方式去创建凭证并用客户端的方式使用凭证。
下面是文档https://cloud.google.com/docs/authentication/use-service-account-impersonation?hl=zh-cn
下面是客户端的选择界面,我们是java,所以能看到是google-cloud-java,https://github.com/googleapis/google-cloud-java。后面项目会引入这个包,进入GitHub里面也会给出如何用客户端链接到云服务,我在后续的代码示例中就是取自“Other environments”的代码
点击这里,我们就能拿到相关包的版本。
GCP平台操作获取服务账户JSON凭证流程
步骤 1:设置 Google Cloud 项目
访问 Google Cloud 控制台: Google Cloud 控制台
创建新项目: 如果你还没有项目,可以创建一个新项目。
启用 API: 在 API 和服务页面中,启用 “Cloud Translation API”。
步骤 2:设置服务账号
访问服务账号页面: 在 Google Cloud 控制台中,导航到“IAM 和管理” > “服务账号”。
创建服务账号:
服务账号名称: 输入服务账号的名称。
服务账号 ID: Google Cloud 将自动生成一个服务账号 ID。
角色: 分配合适的角色,例如“项目” > “所有者”或“项目” > “编辑”。
创建密钥: 在创建服务账号的过程中,选择“JSON”类型的密钥。系统会自动下载一个 JSON 文件,这就是你的服务账号凭证文件。
步骤 3:在 SBT 项目中添加依赖(如果是maven,就用maven的一样的)
在你的 build.sbt 文件中添加以下内容:
libraryDependencies += "com.google.cloud" % "google-cloud-translate" % "2.47.0"
步骤 4:配置凭据和目标语言
创建 app.properties 文件,并添加以下内容:
google.cloud.credentials.path=/path/to/your-service-account-credentials.json
google.cloud.translate.target.language=en
确保替换 /path/to/your-service-account-credentials.json 为你的服务账号 JSON 密钥文件的实际路径,将 es 替换为你想要翻译的目标语言。
步骤 5:编写 Java 代码
以下是更新的 GoogleTranslateUtil 类,展示如何使用最新的 Google Cloud Client Library:
import com.google.auth.oauth2.GoogleCredentials;
import com.google.cloud.translate.Translate;
import com.google.cloud.translate.TranslateOptions;
import com.google.cloud.translate.Translation;
import com.google.auth.oauth2.ServiceAccountCredentials;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.Properties;
public class GoogleTranslateUtil {
private static final Logger log = LoggerFactory.getLogger(GoogleTranslateUtil.class);
private final static String PROPERTIES_PATH = "/com/app.properties";
public static Properties properties = new Properties();
private static Translate translate;
private static String targetLanguage;
static {
try {
// 1.Load app.properties
properties.load(
new InputStreamReader(
GoogleTranslateUtil.class.getResourceAsStream(PROPERTIES_PATH),
StandardCharsets.UTF_8));
// 2.Obtain the credential path and target language
String credentialsPath = properties.getProperty("google.cloud.credentials.path");
targetLanguage = properties.getProperty("google.cloud.translate.target.language");
// 3.Set Google Cloud credentials
InputStream credentialsStream = GoogleTranslateUtil.class.getClassLoader().getResourceAsStream(credentialsPath);
if (credentialsStream == null) {
throw new FileNotFoundException("Credentials file not found at: " + credentialsPath);
}
GoogleCredentials credentials = GoogleCredentials.fromStream(credentialsStream);
translate = TranslateOptions.newBuilder()
.setCredentials(credentials)
.build()
.getService();
log.info("Google Translate client initialized successfully.");
} catch (IOException e) {
log.error("Error loading configuration file or setting credentials: ",e);
e.printStackTrace();
} catch (Exception e) {
log.error("Unexpected error: ",e);
e.printStackTrace();
}
}
public static String translateText(String text) {
try {
Translation translation = translate.translate(
text,
Translate.TranslateOption.targetLanguage(targetLanguage)
);
return translation.getTranslatedText();
} catch (Exception e) {
log.error("Error during translation: ",e);
e.printStackTrace();
return text;
}
}
public static void main(String[] args) {
String text = "您好!";
String translatedText = GoogleTranslateUtil.translateText(text);
log.info("Original Text: {}" , text);
log.info("Translated Text: {}" , translatedText);
}
}