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.2' }
テキスト文字列を翻訳する
2 つの言語間で文字列を翻訳するには:
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>() { @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. } });