Anda dapat menggunakan ML Kit untuk menerjemahkan teks antarbahasa. Saat ini, ML Kit mendukung terjemahan antara 59 bahasa.
Sebelum memulai
- Jika Anda belum menambahkan Firebase ke aplikasi, lakukan dengan mengikuti langkah-langkahnya di panduan memulai.
- Sertakan library ML Kit di Podfile Anda:
pod 'Firebase/MLNLTranslate', '6.25.0'
Setelah menginstal atau mengupdate Pod project, pastikan untuk membuka project Xcode menggunakan.xcworkspace
-nya. - Di aplikasi Anda, impor Firebase:
Swift
import Firebase
Objective-C
@import Firebase;
Menerjemahkan string teks
Cara 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: .en, targetLanguage: .de) let englishGermanTranslator = NaturalLanguage.naturalLanguage().translator(options: options)
Objective-C
// Create an English-German translator: FIRTranslatorOptions *options = [[FIRTranslatorOptions alloc] initWithSourceLanguage:FIRTranslateLanguageEN targetLanguage:FIRTranslateLanguageDE]; FIRTranslator *englishGermanTranslator = [[FIRNaturalLanguage naturalLanguage] translatorWithOptions:options];
Jika tidak tahu bahasa teks input, Anda dapat terlebih dahulu menggunakan API identifikasi bahasa. (Tetapi pastikan Anda tidak menyimpan terlalu banyak model bahasa pada perangkat sekaligus.)
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
FIRModelDownloadConditions *conditions = [[FIRModelDownloadConditions 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 sehingga jangan mendownloadnya jika tidak perlu dan hanya download menggunakan WiFi, kecuali jika pengguna telah menentukan sebaliknya. Anda juga harus menghapus model yang tidak dibutuhkan. Baca artikel 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 sudah diterjemahkan ke pengendali penyelesaian.
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 diinginkan agar tersedia di perangkat menggunakan API manajemen model terjemahan dari ML Kit. Hal ini berguna jika Anda ingin mendownload model lebih awal, atau menghapus model yang tidak diperlukan dari perangkat.
Cara menyimpan model terjemahan yang disimpan di perangkat:
Swift
let localModels = ModelManager.modelManager().downloadedTranslateModels
Objective-C
NSSet<FIRTranslateRemoteModel *> *localModels =
[FIRModelManager modelManager].downloadedTranslateModels;
Cara menghapus model:
Swift
// Delete the German model if it's on the device.
let deModel = TranslateRemoteModel.translateRemoteModel(language: .de)
ModelManager.modelManager().deleteDownloadedModel(deModel) { error in
guard error == nil else { return }
// Model deleted.
}
Objective-C
// Delete the German model if it's on the device.
FIRTranslateRemoteModel *deModel =
[FIRTranslateRemoteModel translateRemoteModelWithLanguage:FIRTranslateLanguageDE];
[[FIRModelManager modelManager] deleteDownloadedModel:deModel
completion:^(NSError * _Nullable error) {
if (error != nil) {
return;
}
// Model deleted.
}];
Cara mendownload model:
Swift
// Download the French model.
let frModel = TranslateRemoteModel.translateRemoteModel(language: .fr)
// Keep a reference to the download progress so you can check that the model
// is available before you use it.
progress = ModelManager.modelManager().download(
frModel,
conditions: ModelDownloadConditions(
allowsCellularAccess: false,
allowsBackgroundDownloading: true
)
)
Jika Anda ingin mendapatkan status download dengan NotificationCenter
, daftarkan
observer untuk firebaseMLModelDownloadDidSucceed
dan
firebaseMLModelDownloadDidFail
. Pastikan untuk menggunakan referensi lemah ke self
di blok observer, karena proses download memerlukan waktu beberapa saat, dan objek asalnya dapat dibebaskan pada saat download selesai. Contoh:
NotificationCenter.default.addObserver(
forName: .firebaseMLModelDownloadDidSucceed,
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 == frModel
else { return }
// The model was downloaded and is available on the device
}
NotificationCenter.default.addObserver(
forName: .firebaseMLModelDownloadDidFail,
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.
FIRModelDownloadConditions *conditions =
[[FIRModelDownloadConditions alloc] initWithAllowsCellularAccess:NO
allowsBackgroundDownloading:YES];
FIRTranslateRemoteModel *frModel =
[FIRTranslateRemoteModel translateRemoteModelWithLanguage:FIRTranslateLanguageFR];
// Keep a reference to the download progress so you can check that the model
// is available before you use it.
self.downloadProgress = [[FIRModelManager modelManager] downloadModel:frModel
conditions:conditions];
Jika Anda ingin mendapatkan status download dengan NSNotificationCenter
, daftarkan
observer untuk FIRModelDownloadDidSucceedNotification
dan
FIRModelDownloadDidFailNotification
. Pastikan untuk menggunakan referensi lemah ke self
di blok observer, karena proses download memerlukan waktu beberapa saat, dan objek asalnya dapat dibebaskan pada saat download selesai.
__block MyViewController *weakSelf = self;
[NSNotificationCenter.defaultCenter
addObserverForName:FIRModelDownloadDidSucceedNotification
object:nil
queue:nil
usingBlock:^(NSNotification * _Nonnull note) {
if (weakSelf == nil | note.userInfo == nil) {
return;
}
FIRTranslateRemoteModel *model = note.userInfo[FIRModelDownloadUserInfoKeyRemoteModel];
if ([model isKindOfClass:[FIRTranslateRemoteModel class]]
&& model == frModel) {
// The model was downloaded and is available on the device
}
}];
[NSNotificationCenter.defaultCenter
addObserverForName:FIRModelDownloadDidFailNotification
object:nil
queue:nil
usingBlock:^(NSNotification * _Nonnull note) {
if (weakSelf == nil | note.userInfo == nil) {
return;
}
NSError *error = note.userInfo[FIRModelDownloadUserInfoKeyError];
}];