Translate text using “MLKitTranslate” model

Translate Text One Language to Another Language

Here i used google MLKitTranslate model. I used  pod 'GoogleMLKit/Translate', '3.2.0' .Create enum which language would be translate.

//
//  CountryLanguageEnum.swift
//  TranslateTextMLDemo
//
//  Created by Joynal Abedin on 22/2/23.
//

import SwiftUI
import MLKitTranslate

enum CountryLanguage: String, CaseIterable {
    case German
    case French
    case Bengali
    case English
    case Urdu
    case Afrikaans
    case Albanian
    case Arabic
    case Belarusian
    case Bulgarian
    case Catalan
    case Chinese
    case Croatian
    case Czech
    case Dansih
    case Dutch
    case Eperanto
    case Estonian
    case Finnish
    case Galician
    case Georgian
    case Greek
    case Gujarati
    case HaitianCreole
    case Hebrew
    case Hindi
    case Hungarian
    case Icelandic
    case Indonesian
    case Irish
    case Italian
    case Japanese
    case Kannada
    case korean
    case Latvian
    case Lithuanian
    case Macedonian
    case Malay
    case Maltese
    case Marathi
    case Norwegian
    case Persian
    case Polish
    case Portuguage
    case Romanian
    case Russian
    case Slovak
    case Slovenian
    case Spanish
    case Swahili
    case Swedish
    case Tagalog
    case Tamil
    case Telugu
    case Thai
    case Turkish
    case Ukranian
    case Vietnamese
    case Welsh
    
    var language: TranslateLanguage {
        switch self {
        case .German:
            return .german
        case .French:
            return .french
        case .Bengali:
            return .bengali
        case .English:
            return .english
        case .Urdu:
            return .urdu
        case .Afrikaans:
            return .afrikaans
        case .Albanian:
            return .albanian
        case .Arabic:
            return .arabic
        case .Belarusian:
            return .belarusian
        case .Bulgarian:
            return .bulgarian
        case .Catalan:
            return .catalan
        case .Chinese:
            return .chinese
        case .Croatian:
            return .croatian
        case .Czech:
            return .czech
        case .Dansih:
            return .danish
        case .Dutch:
            return .dutch
        case .Eperanto:
            return .eperanto
        case .Estonian:
            return .estonian
        case .Finnish:
            return .finnish
        case .Galician:
            return .galician
        case .Georgian:
            return .georgian
        case .Greek:
            return .greek
        case .Gujarati:
            return .gujarati
        case .HaitianCreole:
            return .haitianCreole
        case .Hebrew:
            return .hebrew
        case .Hindi:
            return .hindi
        case .Hungarian:
            return .hungarian
        case .Icelandic:
            return .icelandic
        case .Indonesian:
            return .indonesian
        case .Irish:
            return .irish
        case .Italian:
            return .italian
        case .Japanese:
            return .japanese
        case .Kannada:
            return .kannada
        case .korean:
            return .korean
        case .Latvian:
            return .latvian
        case .Lithuanian:
            return .lithuanian
        case .Macedonian:
            return .macedonian
        case .Malay:
            return .malay
        case .Maltese:
            return .maltese
        case .Marathi:
            return .marathi
        case .Norwegian:
            return .norwegian
        case .Persian:
            return .persian
        case .Polish:
            return .polish
        case .Portuguage:
            return .portuguese
        case .Romanian:
            return .romanian
        case .Russian:
            return .russian
        case .Slovak:
            return .slovak
        case .Slovenian:
            return .slovenian
        case .Spanish:
            return .spanish
        case .Swahili:
            return .swahili
        case .Swedish:
            return .swedish
        case .Tagalog:
            return .tagalog
        case .Tamil:
            return .tamil
        case .Telugu:
            return .telugu
        case .Thai:
            return .thai
        case .Turkish:
            return .turkish
        case .Ukranian:
            return .ukrainian
        case .Vietnamese:
            return .vietnamese
        case .Welsh:
            return .welsh
        }
    }
    
}
//
//  ContentView.swift
//  TranslateTextMLDemo
//
//  Created by Joynal Abedin on 18/2/23.
//

import SwiftUI
import MLKitTranslate
import UIKit

struct ContentView: View {
    @State var selection: CountryLanguage?
    @State var sourceLanguage: TranslateLanguage = .english
    @State var targetLanguage: TranslateLanguage = .bengali
    var body: some View {
        VStack {
            List (CountryLanguage.allCases, id: \.self, selection: $selection) { item in
                Text(item.rawValue)
                    .tag(item)
            }
            Image(systemName: "globe")
                .imageScale(.large)
                .foregroundColor(.accentColor)
            Text(selection!.language.rawValue)
                .onTapGesture {
                    translateText(text: "How are you? what's your name?, i am fine, what do you do?",source: .english, target: TranslateLanguage(rawValue: (selection?.language)!.rawValue) )
                }
        }
        .padding()
    }
    
    func translateText(text: String, source: TranslateLanguage, target: TranslateLanguage) {
        //Create an English German translator
        let options = TranslatorOptions(sourceLanguage: source, targetLanguage: target)
        let englishGermanTranslator = Translator.translator(options: options)
        
        let conditions = ModelDownloadConditions(allowsCellularAccess: false, allowsBackgroundDownloading: true)
        englishGermanTranslator.downloadModelIfNeeded(with: conditions) { error in
            guard error == nil else {return}
            //Model downloaded successfully. Okay to start translating.
            englishGermanTranslator.translate(text) { translatedText, error in
                guard error == nil, let translatedText = translatedText else {return}
                //Translation succeeded.
                print("✅",translatedText)
                downloadModel()
            }
            
        }
    }
    
    func downloadModel() {
        //Download the French model
        let frenchModel = TranslateRemoteModel.translateRemoteModel(language: .urdu)
        //keep a reference to the download progress so yu can check that the model
        // is availabe before you use it
        let progress = ModelManager.modelManager().download(frenchModel, conditions: ModelDownloadConditions(allowsCellularAccess: false, allowsBackgroundDownloading: true))
        print("😃", progress)
    }
    
    func deleteModel(){
        let localModels = ModelManager.modelManager().downloadedTranslateModels
        //delete the German model if it's on the device
        let germanModel = TranslateRemoteModel.translateRemoteModel(language: .french)
        ModelManager.modelManager().deleteDownloadedModel(germanModel) { error in
            guard error == nil else {return}
            //Model deleted
        }
    }
    
}

//struct ContentView_Previews: PreviewProvider {
//    static var previews: some View {
//        ContentView(selection: .constant(""))
//    }
//}

209 thoughts on “Translate text using “MLKitTranslate” model

Leave a Reply

Your email address will not be published. Required fields are marked *