Firebase Summit에서 발표된 모든 내용을 살펴보고 Firebase로 앱을 빠르게 개발하고 안심하고 앱을 실행하는 방법을 알아보세요. 자세히 알아보기

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

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

ML Kit를 사용하여 언어 간에 텍스트를 번역할 수 있습니다. ML Kit는 현재 59개 언어 간의 번역을 지원합니다.

시작하기 전에

  1. 아직 추가하지 않았다면 Android 프로젝트에 Firebase를 추가합니다 .
  2. ML Kit Android 라이브러리에 대한 종속성을 모듈(앱 수준) Gradle 파일(일반적으로 app/build.gradle )에 추가합니다.
    apply plugin: 'com.android.application'
    apply plugin: 'com.google.gms.google-services'
    
    dependencies {
      // ...
    
      implementation 'com.google.firebase:firebase-ml-natural-language:22.0.0'
      implementation 'com.google.firebase:firebase-ml-natural-language-translate-model:20.0.8'
    }
    

텍스트 문자열 번역

두 언어 간에 문자열을 번역하려면:

  1. FirebaseTranslator 객체를 생성하여 소스 및 타겟 언어로 구성합니다.

    Java

    // Create an English-German translator:
    FirebaseTranslatorOptions options =
            new FirebaseTranslatorOptions.Builder()
                    .setSourceLanguage(FirebaseTranslateLanguage.EN)
                    .setTargetLanguage(FirebaseTranslateLanguage.DE)
                    .build();
    final FirebaseTranslator englishGermanTranslator =
            FirebaseNaturalLanguage.getInstance().getTranslator(options);
    

    Kotlin+KTX

    // Create an English-German translator:
    val options = FirebaseTranslatorOptions.Builder()
            .setSourceLanguage(FirebaseTranslateLanguage.EN)
            .setTargetLanguage(FirebaseTranslateLanguage.DE)
            .build()
    val englishGermanTranslator = FirebaseNaturalLanguage.getInstance().getTranslator(options)
    

    입력 텍스트의 언어를 모를 경우 먼저 언어 식별 API 를 사용할 수 있습니다. (하지만 장치에 한 번에 너무 많은 언어 모델을 유지하지 않도록 하십시오.)

  2. 필요한 번역 모델이 장치에 다운로드되었는지 확인하십시오. 모델을 사용할 수 있다는 것을 알기 전까지 translate() 를 호출하지 마십시오.

    Java

    FirebaseModelDownloadConditions conditions = new FirebaseModelDownloadConditions.Builder()
        .requireWifi()
        .build();
    englishGermanTranslator.downloadModelIfNeeded(conditions)
          .addOnSuccessListener(
              new OnSuccessListener<Void>() {
                @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.
                  // ...
                }
              });
    

    Kotlin+KTX

    englishGermanTranslator.downloadModelIfNeeded()
            .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.
                // ...
            }
    

    언어 모델은 약 30MB 정도이므로 불필요하게 다운로드하지 말고 사용자가 별도로 지정하지 않는 한 WiFi를 사용하여 다운로드하십시오. 불필요한 모델도 삭제해야 합니다. 명시적으로 번역 모델 관리 를 참조하십시오.

  3. 모델이 다운로드되었는지 확인한 후 원본 언어로 된 텍스트 문자열을 translate() 에 전달합니다.

    Java

    englishGermanTranslator.translate(text)
          .addOnSuccessListener(
              new OnSuccessListener<String>() {
                @Override
                public void onSuccess(@NonNull String translatedText) {
                  // Translation successful.
                }
              })
          .addOnFailureListener(
              new OnFailureListener() {
                @Override
                public void onFailure(@NonNull Exception e) {
                  // Error.
                  // ...
                }
              });
    

    Kotlin+KTX

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

    구성한 대상 언어로 번역된 텍스트가 성공 리스너로 전달됩니다.

번역 모델을 명시적으로 관리

위에서 설명한 대로 번역 API를 사용하면 ML Kit에서 필요에 따라 언어별 번역 모델을 기기에 자동으로 다운로드합니다. ML Kit의 번역 모델 관리 API를 사용하여 기기에서 사용하려는 번역 모델을 명시적으로 관리할 수도 있습니다. 미리 모델을 다운로드하거나 장치에서 불필요한 모델을 삭제하려는 경우에 유용할 수 있습니다.

Java

FirebaseModelManager modelManager = FirebaseModelManager.getInstance();

// Get translation models stored on the device.
modelManager.getDownloadedModels(FirebaseTranslateRemoteModel.class)
        .addOnSuccessListener(new OnSuccessListener<Set<FirebaseTranslateRemoteModel>>() {
            @Override
            public void onSuccess(Set<FirebaseTranslateRemoteModel> models) {
                // ...
            }
        })
        .addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                // Error.
            }
        });

// Delete the German model if it's on the device.
FirebaseTranslateRemoteModel deModel =
        new FirebaseTranslateRemoteModel.Builder(FirebaseTranslateLanguage.DE).build();
modelManager.deleteDownloadedModel(deModel)
        .addOnSuccessListener(new OnSuccessListener<Void>() {
            @Override
            public void onSuccess(Void v) {
                // Model deleted.
            }
        })
        .addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                // Error.
            }
        });

// Download the French model.
FirebaseTranslateRemoteModel frModel =
        new FirebaseTranslateRemoteModel.Builder(FirebaseTranslateLanguage.FR).build();
FirebaseModelDownloadConditions conditions = new FirebaseModelDownloadConditions.Builder()
        .requireWifi()
        .build();
modelManager.download(frModel, conditions)
        .addOnSuccessListener(new OnSuccessListener<Void>() {
            @Override
            public void onSuccess(Void v) {
                // Model downloaded.
            }
        })
        .addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                // Error.
            }
        });

Kotlin+KTX

val modelManager = FirebaseModelManager.getInstance()

// Get translation models stored on the device.
modelManager.getDownloadedModels(FirebaseTranslateRemoteModel::class.java)
    .addOnSuccessListener { models ->
        // ...
    }
    .addOnFailureListener {
        // Error.
    }

// Delete the German model if it's on the device.
val deModel = FirebaseTranslateRemoteModel.Builder(FirebaseTranslateLanguage.DE).build()
modelManager.deleteDownloadedModel(deModel)
    .addOnSuccessListener {
        // Model deleted.
    }
    .addOnFailureListener {
        // Error.
    }

// Download the French model.
val frModel = FirebaseTranslateRemoteModel.Builder(FirebaseTranslateLanguage.FR).build()
val conditions = FirebaseModelDownloadConditions.Builder()
    .requireWifi()
    .build()
modelManager.download(frModel, conditions)
    .addOnSuccessListener {
        // Model downloaded.
    }
    .addOnFailureListener {
        // Error.
    }