Anda dapat menggunakan ML Kit untuk menerjemahkan teks antarbahasa. ML Kit dapat menerjemahkan antara lebih dari 50 bahasa.
Cobalah
- Silakan coba aplikasi contoh ini untuk melihat contoh penggunaan API ini.
Sebelum memulai
- Sertakan pod ML Kit berikut di Podfile Anda:
pod 'GoogleMLKit/Translate', '3.2.0'
- Setelah menginstal atau mengupdate Pod project, buka project Xcode menggunakan
.xcworkspace
-nya. ML Kit didukung di Xcode versi 12.4 atau yang lebih baru.
Menerjemahkan string teks
Untuk menerjemahkan string antara dua bahasa:
Buat objek
Translator
, lalu konfigurasikan dengan bahasa sumber dan target:Swift
// Create an English-German translator: let options = TranslatorOptions(sourceLanguage: .english, targetLanguage: .german) let englishGermanTranslator = Translator.translator(options: options)
Objective-C
// Create an English-German translator: MLKTranslatorOptions *options = [[MLKTranslatorOptions alloc] initWithSourceLanguage:MLKTranslateLanguageEnglish targetLanguage:MLKTranslateLanguageGerman]; MLKTranslator *englishGermanTranslator = [MLKTranslator translatorwithOptions:options];
Jika tidak tahu bahasa teks input, Anda dapat menggunakan Language Identification API yang memberi tag bahasa. Kemudian, konversikan tag bahasa ke enum ML Kit. Kode ini bergantung pada bahasa yang Anda gunakan:
- Swift: Panggil
TranslateLanguage.fromLanguageTag()
untuk mendapatkanTranslateLanguage
- Objective-C: Memanggil
MLKTranslateLanguageForLanguageTag()
untuk mendapatkanMLKTranslateLanguage
Hindari menyimpan terlalu banyak model bahasa di perangkat sekaligus.
- Swift: Panggil
Pastikan model terjemahan yang diperlukan telah didownload ke perangkat. Jangan panggil
translate(_:completion:)
sebelum Anda mengetahui ketersediaan model tersebut.Swift
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. }
Objective-C
MLKModelDownloadConditions *conditions = [[MLKModelDownloadConditions alloc] initWithAllowsCellularAccess:NO allowsBackgroundDownloading:YES]; [englishGermanTranslator downloadModelIfNeededWithConditions:conditions completion:^(NSError *_Nullable error) { if (error != nil) { return; } // Model downloaded successfully. Okay to start translating. }];
Ukuran model bahasa sekitar 30 MB, jadi jangan mendownloadnya jika tidak perlu dan hanya download menggunakan Wi-Fi kecuali jika pengguna telah menentukan sebaliknya. Anda harus menghapus model jika tidak diperlukan lagi. Baca Mengelola model terjemahan secara eksplisit.
Setelah Anda mengonfirmasi bahwa model telah didownload, teruskan string teks dalam bahasa sumber ke
translate(_:completion:)
:Swift
englishGermanTranslator.translate(text) { translatedText, error in guard error == nil, let translatedText = translatedText else { return } // Translation succeeded. }
Objective-C
[englishGermanTranslator translateText:text completion:^(NSString *_Nullable translatedText, NSError *_Nullable error) { if (error != nil || translatedText == nil) { return; } // Translation succeeded. }];
ML Kit menerjemahkan teks ke bahasa target yang Anda konfigurasikan dan meneruskan teks yang diterjemahkan ke pengendali penyelesaian.
Siklus proses penerjemah dikontrol oleh ARC (penghitungan referensi otomatis), yang merupakan konvensi yang direkomendasikan untuk pengembangan iOS. Developer dapat memperkirakan bahwa Penerjemah akan dibatalkan alokasinya setelah semua referensi yang kuat dihapus.
Penerjemah dapat menempati 30 MB-150 MB saat dimuat di memori. Developer harus mempertimbangkan anggaran memori perangkat/aplikasi saat membuat instance penerjemah serentak dan menghindari terlalu banyak model bahasa di perangkat sekaligus.
Mengelola model terjemahan secara eksplisit
Saat Anda menggunakan Translation API seperti yang dijelaskan di atas, ML Kit akan otomatis mendownload model terjemahan bahasa tertentu ke perangkat sesuai kebutuhan. Anda juga dapat secara eksplisit mengelola model terjemahan yang ingin tersedia di perangkat menggunakan API pengelolaan model terjemahan dari ML Kit. Hal ini dapat berguna jika Anda ingin mendownload model terlebih dahulu, atau menghapus model yang tidak diperlukan dari perangkat.
Untuk mendapatkan model terjemahan yang disimpan di perangkat:
Swift
let localModels = ModelManager.modelManager().downloadedTranslateModels
Objective-C
NSSet*localModels = [MLKModelManager modelManager].downloadedTranslateModels;
Untuk menghapus model:
Swift
// Delete the German model if it's on the device. let germanModel = TranslateRemoteModel.translateRemoteModel(language: .german) ModelManager.modelManager().deleteDownloadedModel(germanModel) { error in guard error == nil else { return } // Model deleted. }
Objective-C
// Delete the German model if it's on the device. MLKTranslateRemoteModel *germanModel = [MLKTranslateRemoteModel translateRemoteModelWithLanguage:MLKTranslateLanguageGerman]; [[MLKModelManager modelManager] deleteDownloadedModel:germanModel completion:^(NSError * _Nullable error) { if (error != nil) { return; } // Model deleted.
Untuk mendownload model:
Swift
// Download the French model. let frenchModel = TranslateRemoteModel.translateRemoteModel(language: .french) // Keep a reference to the download progress so you can check that the model // is available before you use it. progress = ModelManager.modelManager().download( frenchModel, conditions: ModelDownloadConditions( allowsCellularAccess: false, allowsBackgroundDownloading: true ) )
Jika Anda ingin mendapatkan status download dengan NotificationCenter
, daftarkan
pengamat untuk mlkitModelDownloadDidSucceed
dan
mlkitModelDownloadDidFail
. Pastikan untuk menggunakan referensi lemah ke self
di blok observer karena proses download mungkin memerlukan waktu beberapa saat, dan objek asalnya dapat dibebaskan pada saat download selesai. Contoh:
NotificationCenter.default.addObserver( forName: .mlkitModelDownloadDidSucceed, object: nil, queue: nil ) { [weak self] notification in guard let strongSelf = self, let userInfo = notification.userInfo, let model = userInfo[ModelDownloadUserInfoKey.remoteModel.rawValue] as? TranslateRemoteModel, model == frenchModel else { return } // The model was downloaded and is available on the device } NotificationCenter.default.addObserver( forName: .mlkitModelDownloadDidFail, object: nil, queue: nil ) { [weak self] notification in guard let strongSelf = self, let userInfo = notification.userInfo, let model = userInfo[ModelDownloadUserInfoKey.remoteModel.rawValue] as? TranslateRemoteModel else { return } let error = userInfo[ModelDownloadUserInfoKey.error.rawValue] // ... }
Objective-C
// Download the French model. MLKModelDownloadConditions *conditions = [[MLKModelDownloadConditions alloc] initWithAllowsCellularAccess:NO allowsBackgroundDownloading:YES]; MLKTranslateRemoteModel *frenchModel = [MLKTranslateRemoteModel translateRemoteModelWithLanguage:MLKTranslateLanguageFrench]; // Keep a reference to the download progress so you can check that the model // is available before you use it. self.downloadProgress = [[MLKModelManager modelManager] downloadModel:frenchModel conditions:conditions];
Jika Anda ingin mendapatkan status download dengan NSNotificationCenter
, daftarkan
pengamat untuk MLKModelDownloadDidSucceedNotification
dan
MLKModelDownloadDidFailNotification
. Pastikan untuk menggunakan referensi lemah ke self
di blok observer karena proses download mungkin memerlukan waktu beberapa saat, dan objek awal dapat dibebaskan pada saat download selesai.
__block MyViewController *weakSelf = self; [NSNotificationCenter.defaultCenter addObserverForName:MLKModelDownloadDidSucceedNotification object:nil queue:nil usingBlock:^(NSNotification * _Nonnull note) { if (weakSelf == nil | note.userInfo == nil) { return; } MLKTranslateRemoteModel *model = note.userInfo[MLKModelDownloadUserInfoKeyRemoteModel]; if ([model isKindOfClass:[MLKTranslateRemoteModel class]] && model == frenchModel) { // The model was downloaded and is available on the device } }]; [NSNotificationCenter.defaultCenter addObserverForName:MLKModelDownloadDidFailNotification object:nil queue:nil usingBlock:^(NSNotification * _Nonnull note) { if (weakSelf == nil | note.userInfo == nil) { return; } NSError *error = note.userInfo[MLKModelDownloadUserInfoKeyError]; }];