你可以使用 ML Kit 翻譯不同語言的文字。ML Kit 可在超過 50 種語言之間翻譯。
立即試用
- 請試用範例應用程式,瞭解這個 API 的使用範例。
事前準備
- 在專案層級的 build.gradle檔案中,請務必在buildscript和allprojects區段中加入 Google 的 Maven 存放區。
- 將 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); - 如果您不知道輸入文字的語言,可以使用 Language Identification API 取得語言代碼。然後使用 - TranslateLanguage.fromLanguageTag()將標記轉換為- TranslateLanguage。- 避免在裝置上同時保留過多語言模型。 
- 確認裝置已下載必要的翻譯模型。 請先確認模型是否可用,再呼叫 - 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. // ... } }); - 系統會將譯文 (以您設定的目標語言呈現) 傳遞至成功事件監聽器。 
- 請確保在不再使用 - Translator物件時,系統會呼叫- close()方法。- 如果您在 Fragment 或 AppCompatActivity 中使用 Translator,其中一個簡單的方法是在 Fragment 或 AppCompatActivity 上呼叫 LifecycleOwner.getLifecycle(),然後呼叫 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)。 
明確管理翻譯模型
如上所述使用 Translation 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<Set>() { @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. } }); 
