ML Kit を使用してテキストを翻訳する(Android)

ML Kit を使用すると、言語間でテキストを翻訳できます。ML Kit 1 つ以上の言語の間で翻訳できます。 50 言語

<ph type="x-smartling-placeholder">

試してみる

始める前に

<ph type="x-smartling-placeholder">
  1. プロジェクト レベルの build.gradle ファイルに、次の内容を含めます。 Google の Maven リポジトリを buildscriptallprojects セクション。
  2. ML Kit Android ライブラリの依存関係をモジュールの アプリレベルの Gradle ファイル(通常は app/build.gradle
    dependencies {
      // ...
    
      implementation 'com.google.mlkit:translate:17.0.3'
    }
    

テキスト文字列を翻訳する

2 つの言語間で文字列を翻訳するには:

  1. 作成: 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 に変換します。 TranslateLanguage.fromLanguageTag() を使用します。

    一度に多数の言語モデルをデバイスに保持することは避けてください。

  2. 必要な翻訳モデルがデバイスにダウンロードされていることを確認します。 モデルが利用可能になるまで 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 経由でのみダウンロードする。マイページ 不要なモデルの削除も行います 翻訳モデルを明示的に管理するをご覧ください。

  3. モデルがダウンロードされたことを確認したら、テキスト文字列を ソース言語を 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.
                // ...
              }
            });

    設定したターゲット言語の翻訳済みテキストは、 成功リスナー。

  4. close() メソッドが呼び出されると、 Translator オブジェクトは使用されなくなります。

    Fragment または AppCompatActivity で Translator を使用する場合は、 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 など)。

翻訳モデルを明示的に管理する

上記のように Translation API を使用すると、ML Kit は自動的に 必要に応じて言語固有の翻訳モデルをデバイスにダウンロードします。マイページ Google Cloud 上で使用可能な翻訳モデルを明示的に管理することも 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.
        }
    });