1. 引言
本文将带你一步步在Java应用中集成Google Translate API。Google翻译服务支持100+种语言,通过API我们可以轻松构建实时翻译功能的应用程序。
2. 搭建Java应用环境
要在Java中使用Google Translate API,需要先添加必要的依赖库。我们使用Google Cloud Translate客户端库,它提供了与API交互的便捷接口,负责处理应用与Google翻译服务之间的所有通信。
在pom.xml
中添加以下依赖:
<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-translate</artifactId>
</dependency>
这个依赖确保我们能访问Google Cloud Translate API客户端库,提供发送翻译请求、语言检测和管理API交互的所有工具。
3. 初始化翻译客户端
添加依赖后,需要在Java应用中初始化Translate
客户端。我们使用从Google Cloud Console获取的服务账号JSON文件进行身份验证,这是服务器端应用推荐的安全方式。
⚠️ 确保服务账号已启用Cloud Translation API并分配Cloud Translation API User角色。
使用TranslateOptions
类配置客户端:
class Translator {
static {
initializeTranslateClient();
}
public static void initializeTranslateClient() {
if (translate == null) {
try {
GoogleCredentials credentials = GoogleCredentials.fromStream(
new FileInputStream("src/main/resources/YOUR_SERVICEACCOUNT_JSON.json")
);
translate = TranslateOptions.newBuilder()
.setCredentials(credentials)
.build()
.getService();
logger.info("Google Translate client initialized.");
} catch (Exception e) {
logger.error("Failed to initialize Google Translate client.", e);
}
}
}
// 其他方法将在此处添加
}
上述代码通过TranslateOptions.newBuilder()
配置客户端,使用GoogleCredentials.fromStream()
加载服务账号凭证。构建对象后调用getService()
获取Translate
实例,用于与API交互。
4. 获取支持的语言列表
Google Cloud Translation API允许获取支持的语言列表。这在用户界面显示语言选项或翻译前验证可用语言时特别有用。
使用listSupportedLanguages()
方法获取语言列表:
static void listSupportedLanguages() {
try {
List<Language> languages = translate.listSupportedLanguages();
for (Language language : languages) {
logger.info(String.format("Name: %s, Code: %s", language.getName(), language.getCode()));
}
} catch (Exception e) {
// 处理异常
}
}
若需按特定目标语言显示语言名称(例如西班牙语"es"):
List<Language> languages = translate.listSupportedLanguages(
Translate.LanguageListOption.targetLanguage("es")
);
for (Language language : languages) {
logger.info(String.format("Name: %s, Code: %s", language.getName(), language.getCode()));
}
这对按用户偏好语言显示选项很有用。运行程序将输出:
Name: Inglés, Code: en
Name: Español, Code: es
Name: Francés, Code: fr
Name: Chino (Simplificado), Code: zh
...
5. 翻译文本
Google Translate API提供translate()
方法,可指定待翻译文本和目标语言。API还支持HTML输入——翻译HTML时,API不会修改标签,只翻译标签间的文本内容。
翻译文本的示例方法:
static String translateText(String text, String targetLanguage) {
String s = "";
try {
Translation translation = translate.translate(
text,
Translate.TranslateOption.targetLanguage(targetLanguage)
);
s = translation.getTranslatedText();
} catch (Exception e) {
// 处理异常
}
return s;
}
text
是待翻译内容,targetLanguage
是目标语言代码(如"es"代表西班牙语)。通过translate.translate()
发送请求,返回的Translation
对象用getTranslatedText()
获取译文。
例如调用translateText("Hello, world!", "es")
将返回"¡Hola, mundo!"。通过单元测试验证功能:
@Test
void whenTranslateTextIsCalledWithEnglishTextAndFrenchTargetLanguage_thenReturnTranslatedText() {
String originalText = "Hello, world!";
String targetLanguage = "es";
String expectedTranslatedText = "¡Hola Mundo!";
String translatedText = Translator.translateText(originalText, targetLanguage);
assertEquals(expectedTranslatedText, translatedText);
}
@Test
void whenTranslateTextIsCalledWithEnglishHTMLAndFrenchTargetLanguage_thenReturnTranslatedHTML() {
String originalHtml = "<p>Hello, world!</p>";
String targetLanguage = "es";
String expectedTranslatedHtml = "<p>¡Hola Mundo!</p>";
String translatedHtml = Translator.translateText(originalHtml, targetLanguage);
assertEquals(expectedTranslatedHtml, translatedHtml);
}
6. 检测文本语言
Google Translate API支持语言检测功能,当不知道输入文本语言时特别有用。
使用detect()
方法检测语言:
static String detectLanguage(String text) {
return translate.detect(text).getLanguage();
}
通过translate.detect(text)
检测语言,返回的Detection
对象用getLanguage()
提取语言代码。
例如调用detectLanguage("Hola, mundo!")
将返回"es"(西班牙语):
@Test
void whenDetectLanguageIsCalledWithSpanishText_thenReturnSpanishLanguageCode() {
String text = "Hola, mundo!";
String expectedLanguageCode = "es";
String detectedLanguage = Translator.detectLanguage(text);
assertEquals(expectedLanguageCode, detectedLanguage);
}
7. 批量翻译文本
需要翻译多个文本时,批量翻译比单独调用API更高效:
static List<String> translateBatch(List<String> texts, String targetLanguage) {
List<String> translationList = null;
try {
List<Translation> translations = translate.translate(
texts,
Translate.TranslateOption.targetLanguage(targetLanguage)
);
translationList = translations.stream()
.map(Translation::getTranslatedText)
.collect(Collectors.toList());
} catch (Exception e) {
// 处理异常
}
return translationList;
}
该方法接收文本列表和目标语言,单次API调用完成所有翻译,返回译文列表。
例如调用translateBatch(List.of("Apple", "Banana", "Orange"), "fr")
将返回List.of("Pomme", "Banane", "Orange")
:
@Test
void whenTranslateBatchIsCalledWithMultipleTexts_thenReturnTranslatedTexts() {
List<String> originalTexts = List.of("Apple", "Banana", "Orange");
List<String> expectedTranslatedTexts = List.of("Pomme", "Banane", "Orange");
List<String> translatedTexts = Translator.translateBatch(originalTexts, "fr");
assertEquals(expectedTranslatedTexts, translatedTexts);
}
8. 使用自定义术语表
专业翻译场景下,Google Cloud Translation v3 API支持术语表功能,但需切换到TranslationServiceClient
。
术语表确保特定术语按偏好一致翻译。例如翻译技术文档时,可强制某些术语使用特定译法。
使用前需在Google Cloud Console创建术语表,获取术语表ID:
static String translateWithGlossary(String projectId, String location, String text, String targetLanguage, String glossaryId) {
String translatedText = "";
try (TranslationServiceClient client = TranslationServiceClient.create()) {
LocationName parent = LocationName.of(projectId, location);
GlossaryName glossaryName = GlossaryName.of(projectId, location, glossaryId);
TranslateTextRequest request = TranslateTextRequest.newBuilder()
.setParent(parent.toString())
.setTargetLanguageCode(targetLanguage)
.addContents(text)
.setGlossaryConfig(TranslateTextGlossaryConfig.newBuilder()
.setGlossary(glossaryName.toString()).build()) // 附加术语表
.build();
TranslateTextResponse response = client.translateText(request);
translatedText = response.getTranslations(0).getTranslatedText();
} catch (IOException e) {
// 处理异常
}
return translatedText;
}
该方法将术语表ID作为额外参数传递,API会根据术语表中的自定义定义翻译特定术语。
例如若术语表规定"Hello"在法语中译为"Salutations",调用translateWithGlossary("Hello", "fr", "glossary-id")
将返回"Salutations"。
9. 总结
本文详细介绍了在Java应用中集成Google Translate API的完整流程:
- ✅ 初始化翻译客户端
- ✅ 实现文本翻译功能
- ✅ 添加语言检测能力
- ✅ 支持批量文本翻译
- ✅ 使用自定义术语表
通过这些步骤,你可以轻松构建强大的多语言翻译功能。实际开发中记得处理好异常和API配额限制,避免踩坑。