Android에서 ML Kit를 사용하여 텍스트 번역

ML Kit를 사용하여 언어 간에 텍스트를 번역할 수 있습니다. ML 키트 여러 단어 간에 번역이 가능합니다 50개 언어

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

사용해 보기

  • 샘플 앱을 사용하여 이 API의 사용 예를 참조하세요.

시작하기 전에

<ph type="x-smartling-placeholder">
  1. 프로젝트 수준 build.gradle 파일에 다음 코드를 포함해야 합니다. buildscriptallprojects 섹션
  2. ML Kit Android 라이브러리의 종속 항목을 모듈의 앱 수준 gradle 파일(일반적으로 app/build.gradle임)을 빌드합니다.
    dependencies {
      // ...
    
      implementation 'com.google.mlkit:translate:17.0.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)

    자바

    // Create an English-German translator:
    TranslatorOptions options =
        new TranslatorOptions.Builder()
            .setSourceLanguage(TranslateLanguage.ENGLISH)
            .setTargetLanguage(TranslateLanguage.GERMAN)
            .build();
    final Translator englishGermanTranslator =
        Translation.getClient(options);

    입력 텍스트의 언어를 모를 경우 언어 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.
            // ...
        }

    자바

    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.
                // ...
              }
            });

    언어 모델은 약 30MB이므로 불필요하게 다운로드하지 마세요. 사용자가 달리 지정하지 않는 한 Wi-Fi를 사용해서만 다운로드해야 합니다. 나 불필요한 모델도 삭제해야 합니다 명시적으로 번역 모델 관리하기를 참고하세요.

  3. 모델이 다운로드되었음을 확인한 후, 모델에서 텍스트 문자열을 출발어와 도착어를 translate():

    Kotlin

    englishGermanTranslator.translate(text)
        .addOnSuccessListener { translatedText ->
            // Translation successful.
        }
        .addOnFailureListener { exception ->
             // Error.
             // ...
        }

    자바

    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에서 번역기를 사용하는 경우 LifecycleOwner.getLifecycle()을 호출하세요. 을 호출한 다음 Lifecycle.addObserver를 호출합니다. 예를 들면 다음과 같습니다.

    Kotlin

    val options = ...
    val translator = Translation.getClient(options)
    getLifecycle().addObserver(translator)

    자바

    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.
        }
    });