你可以使用 ML Kit 翻譯不同語言的文字。機器學習套件 可以在超過 90 個 50 種語言。
立即試用
- 使用範例應用程式試試 請查看此 API 的使用範例。
事前準備
- 請務必在專案層級的
build.gradle
檔案中納入 位於buildscript
和 的 Google Maven 存放區allprojects
個版面。 - 將 ML Kit Android 程式庫的依附元件新增至模組的
應用程式層級的 Gradle 檔案,通常為
app/build.gradle
:dependencies { // ... implementation 'com.google.mlkit:translate:17.0.3' }
翻譯一段文字
如何在兩種語言之間翻譯字串:
撰寫
Translator
敬上 物件中,請使用原文與譯文語言設定此物件:Kotlin
// Create an English-German translator: val options = TranslatorOptions.Builder() .setSourceLanguage(TranslateLanguage.ENGLISH) .setTargetLanguage(TranslateLanguage.GERMAN) .build() val englishGermanTranslator = Translation.getClient(options)
Java
// Create an English-German translator: TranslatorOptions options = new TranslatorOptions.Builder() .setSourceLanguage(TranslateLanguage.ENGLISH) .setTargetLanguage(TranslateLanguage.GERMAN) .build(); final Translator englishGermanTranslator = Translation.getClient(options);
如果您不知道輸入文字的語言,可以使用語言 識別 API 會提供語言標記然後將標記轉換為
TranslateLanguage
使用TranslateLanguage.fromLanguageTag()
。請避免同時在裝置上保留過多語言模型,
確認所需翻譯模型已下載到裝置。 確認模型可用前,請勿呼叫
translate()
。Kotlin
var conditions = DownloadConditions.Builder() .requireWifi() .build() englishGermanTranslator.downloadModelIfNeeded(conditions) .addOnSuccessListener { // Model downloaded successfully. Okay to start translating. // (Set a flag, unhide the translation UI, etc.) } .addOnFailureListener { exception -> // Model couldn’t be downloaded or other internal error. // ... }
Java
DownloadConditions conditions = new DownloadConditions.Builder() .requireWifi() .build(); englishGermanTranslator.downloadModelIfNeeded(conditions) .addOnSuccessListener( new OnSuccessListener
() { @Override public void onSuccess(Void v) { // Model downloaded successfully. Okay to start translating. // (Set a flag, unhide the translation UI, etc.) } }) .addOnFailureListener( new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Model couldn’t be downloaded or other internal error. // ... } }); 語言模型大約有 30 MB 的空間,因此不需要下載 除非使用者另有指定,否則只能透過 Wi-Fi 下載下載。個人中心 並刪除不需要的模型 請參閱「明確管理翻譯模型」。
確認下載模型後,請在 將原文語言
translate()
:Kotlin
englishGermanTranslator.translate(text) .addOnSuccessListener { translatedText -> // Translation successful. } .addOnFailureListener { exception -> // Error. // ... }
Java
englishGermanTranslator.translate(text) .addOnSuccessListener( new OnSuccessListener
() { @Override public void onSuccess(@NonNull String translatedText) { // Translation successful. } }) .addOnFailureListener( new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Error. // ... } }); 系統會以您設定的目標語言將譯文傳遞到 成功事件監聽器
請確認
close()
方法則是呼叫Translator
系統就不會再使用物件如果您是在 Fragment 或 AppCompatActivity 中使用翻譯工具, 方法是呼叫 LifecycleOwner.getLifecycle() 在 Fragment 或 AppCompatActivity 上,然後呼叫 Lifecycle.addObserver。 例如:
Kotlin
val options = ... val translator = Translation.getClient(options) getLifecycle().addObserver(translator)
Java
TranslatorOptions options = ... Translator translator = Translation.getClient(options); getLifecycle().addObserver(translator); ... use translator ...
請注意,這裡的假設是程式碼位於實作 LifecycleOwner (例如 Fragment 或 AppCompatActivity)。
明確管理翻譯模型
按照上述說明使用翻譯 API 時,ML Kit 會自動使用 視需要下載特定語言專屬的翻譯模型至裝置。個人中心 也可以明確管理 整合了 ML Kit 的翻譯模型管理 API可用的值包括 舉例來說,如果您想事先下載模型,或是刪除不需要的模型 登入裝置。
Kotlin
val modelManager = RemoteModelManager.getInstance() // Get translation models stored on the device. modelManager.getDownloadedModels(TranslateRemoteModel::class.java) .addOnSuccessListener { models -> // ... } .addOnFailureListener { // Error. } // Delete the German model if it's on the device. val germanModel = TranslateRemoteModel.Builder(TranslateLanguage.GERMAN).build() modelManager.deleteDownloadedModel(germanModel) .addOnSuccessListener { // Model deleted. } .addOnFailureListener { // Error. } // Download the French model. val frenchModel = TranslateRemoteModel.Builder(TranslateLanguage.FRENCH).build() val conditions = DownloadConditions.Builder() .requireWifi() .build() modelManager.download(frenchModel, conditions) .addOnSuccessListener { // Model downloaded. } .addOnFailureListener { // Error. }
Java
RemoteModelManager modelManager = RemoteModelManager.getInstance(); // Get translation models stored on the device. modelManager.getDownloadedModels(TranslateRemoteModel.class) .addOnSuccessListener(new OnSuccessListener>() { @Override public void onSuccess(Set models) { // ... } }) .addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Error. } }); // Delete the German model if it's on the device. TranslateRemoteModel germanModel = new TranslateRemoteModel.Builder(TranslateLanguage.GERMAN).build(); modelManager.deleteDownloadedModel(germanModel) .addOnSuccessListener(new OnSuccessListener () { @Override public void onSuccess(Void v) { // Model deleted. } }) .addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Error. } }); // Download the French model. TranslateRemoteModel frenchModel = new TranslateRemoteModel.Builder(TranslateLanguage.FRENCH).build(); DownloadConditions conditions = new DownloadConditions.Builder() .requireWifi() .build(); modelManager.download(frenchModel, conditions) .addOnSuccessListener(new OnSuccessListener () { @Override public void onSuccess(Void v) { // Model downloaded. } }) .addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception e) { // Error. } });