해상물류 프로젝트 실시간 번역 코드

ML Kit을 활용한 번역

1) 의존성 프로젝트 추가

1-1. 프로젝트 레벨의 build.gradle 파일에 Google`s Maven 저장소를 추가한다.

1-2. 앱 레벨의 app/build.gradle 파일에 아래 종속성 프로젝트를 추가한다.

dependencies {
  // ...

  implementation 'com.google.mlkit:translate:17.0.0'
}



2) 번역 객체 생성

2-1. Translator 객체를 생성하고 빌더패턴을 이용해 소스언어와 타켓언어를 지정해준다.

언어 직접 지정 방식과 Language Identification API를 활용한 언어 감지 방식 2가지 모두 사용.

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


2-2. 해당 번역 모델을 주입받고 사용이 CallBack 패턴활용해 주입 성공 처리를 한다.

모델 주입이 완료되면 번역을 시작하도록 한다.

var conditions = DownloadConditions.Builder()
    .requireWifi()
    .build()
englishGermanTranslator.downloadModelIfNeeded(conditions)
    .addOnSuccessListener {
        // Model downloaded successfully. Okay to start translating.
    }
    .addOnFailureListener { exception ->
        // Model couldn’t be downloaded or other internal error.
    }


2-3. 번역기 객체 주입 이후 translation() 함수를 사용

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


3. 메모리 관리 및 누수 방지

3-1. 번역기 객체 사용 이후에는 close()함수를 호출해 메모리를 풀어준다.

또는 현재 객체를 가지고 있는 Activity 또는 Fragment의 Lifecycle의 옵저버에 객체를 추가해 Lifecycle-Aware 객체를 만들어 메모리 누수를 방지해준다.

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