Anda dapat menggunakan ML Kit untuk menerjemahkan teks antarbahasa. Paket ML dapat menerjemahkan lebih dari 50 bahasa.
Cobalah
- Cobalah aplikasi contoh untuk melihat contoh penggunaan API ini.
Sebelum memulai
- Sertakan pod ML Kit berikut di Podfile Anda:
pod 'GoogleMLKit/Translate', '15.5.0'
- Setelah Anda menginstal atau mengupdate Pod project, buka project Xcode menggunakan
.xcworkspace
. ML Kit didukung di Xcode versi 12.4 atau yang lebih baru.
Menerjemahkan string teks
Untuk menerjemahkan string antara dua bahasa:
Buat objek
Translator
, dengan mengonfigurasinya dengan sumber dan target bahasa: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 Anda tidak tahu bahasa teks input, Anda dapat menggunakan Bahasa Identification API yang memberi Anda tag bahasa. Kemudian konversi tag bahasa menjadi enum ML Kit. Kode 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:)
sampai Anda mengetahui bahwa model tersebut tersedia.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 download hanya melalui Wi-Fi kecuali jika pengguna telah menentukan sebaliknya. Anda seharusnya menghapus model saat tidak diperlukan lagi. Lihat Mengelola model terjemahan secara eksplisit.
Setelah Anda mengonfirmasi bahwa model telah diunduh, 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 terjemahan ke pengendali penyelesaian.
Siklus proses penerjemah dikontrol oleh ARC (penghitungan referensi otomatis), yang merupakan konvensi yang direkomendasikan untuk pengembangan iOS. Developer dapat mengharapkan Penerjemah akan dibatalkan alokasinya setelah semua referensi penting dihapus.
Penerjemah dapat menempati 30 MB-150 MB saat dimuat di memori. Developer seharusnya pertimbangkan anggaran memori perangkat/aplikasi saat membuat instance penerjemah dan menghindari menyimpan terlalu banyak model bahasa di perangkat sekaligus.
Mengelola model terjemahan secara eksplisit
Saat Anda menggunakan Translation API seperti dijelaskan di atas, ML Kit secara otomatis mengunduh model terjemahan khusus bahasa ke perangkat sesuai kebutuhan. Anda dapat secara eksplisit mengelola model terjemahan yang Anda inginkan tersedia di perangkat ini dengan menggunakan API manajemen model terjemahan ML Kit. Dapat berupa 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
, daftar
observer untuk mlkitModelDownloadDidSucceed
dan
mlkitModelDownloadDidFail
. Pastikan untuk menggunakan referensi lemah ke self
di blok observer, karena proses download
memerlukan waktu beberapa saat, dan
yang bisa dibebaskan pada saat unduhan 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
, daftar
observer untuk MLKModelDownloadDidSucceedNotification
dan
MLKModelDownloadDidFailNotification
. Pastikan untuk menggunakan referensi lemah untuk
self
di blok observer, karena download memerlukan waktu beberapa saat, dan
dapat dibebaskan pada saat unduhan 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]; }];