在 Java 應用程式中使用 Google 翻譯 API
1. 簡介
在本教程中,我們將介紹將 Google Translate API 整合到 Java 應用程式的步驟。 Google的翻譯服務支援超過100種語言,透過利用API,我們可以輕鬆建立執行即時語言翻譯的應用程式。
2.設定 Java 應用程式
要在我們的 Java 應用程式中使用 Google Translate API,我們需要包含必要的程式庫。
我們將使用Google Cloud Translate客戶端程式庫,它提供了一個可與 API 互動的簡單介面。該庫將處理我們的應用程式和 Google 翻譯服務之間的所有通訊。
首先,我們需要在pom.xml
檔案中加入以下相依性。這包括我們專案中的 Google 翻譯客戶端庫:
<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,並將其指派給 Google Cloud 中的 Cloud Translation API 使用者角色。
TranslateOptions
類別幫助我們使用 API 金鑰設定客戶端,然後允許我們與 API 服務進行互動。以下是我們如何初始化Translate
客戶端:
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);
}
}
}
// Additional methods will go here
}
在上面的程式碼中,我們使用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) {
// handle exception
}
}
如果我們希望以特定的目標語言顯示語言名稱,我們可以使用LanguageListOption.targetLanguage()
方法。例如,如果我們希望以西班牙語(“ 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 將傳回翻譯後的文字。
此外,該API也支援HTML輸入。在翻譯 HTML 時,該 API 不會修改任何 HTML 標籤,它只會翻譯標籤之間的文字內容。
以下我們來介紹如何使用翻譯方法來翻譯一段文字:
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) {
// handle exception
}
return s;
}
在這個方法中, text
是需要翻譯的輸入, targetLanguage
是我們希望將文本翻譯成的語言的代碼(例如,“ es
” 表示西班牙語,“ fr
” 表示法語)。然後我們使用translate.translate()
發送翻譯請求,傳遞要翻譯的文字和目標語言。
從 API 接收到翻譯回應後,此方法傳回一個Translation
對象,我們可以使用getTranslatedText()
從中檢索翻譯的文字。
例如,如果我們呼叫translateText(“Hello, world!”, “es”)
,則該方法傳回“ ¡Hola, mundo!
「。 為了確保translateText()
方法能如預期運作,我們將編寫一個單元測試:
@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 expectedT ranslatedHtml = "<p>¡Hola Mundo!</p>";
String translatedHtml = Translator.translateText(originalHtml, targetLanguage);
assertEquals(expectedT ranslatedHtml, translatedHtml);
}
此測試驗證translateText()
方法是否正確地將輸入文字翻譯成目標語言。
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) {
// handle exception
}
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()) // Attach glossary
.build();
TranslateTextResponse response = client.translateText(request);
translatedText = response.getTranslations(0).getTranslatedText();
} catch (IOException e) {
// handle exception
}
return translatedText;
}
在這個方法中,我們將詞彙表 ID 作為附加參數傳遞給translate()
方法。然後,API 使用詞彙表來確保根據我們的自訂定義翻譯特定術語。
例如,如果我們有一個詞彙表,其中指定“ Hello
”應翻譯為法語“ Salutations
”,則調用translateWithGlossary(“Hello”, “fr”, “glossary-id”)
將返回“ Salutations
”。
9. 結論
在本文中,我們介紹了將 Google Translate API 整合到 Java 應用程式的步驟。我們首先初始化Translate
客戶端,並實作了翻譯文字、偵測語言、翻譯多種文字和使用自訂詞彙表的方法。
與往常一樣,原始碼可在 GitHub 上取得。