Menerjemahkan teks dengan ML Kit di iOS

Anda dapat menggunakan ML Kit untuk menerjemahkan teks antarbahasa. Paket ML dapat menerjemahkan lebih dari 50 bahasa.

Cobalah

Sebelum memulai

  1. Sertakan pod ML Kit berikut di Podfile Anda:
    pod 'GoogleMLKit/Translate', '15.5.0'
    
  2. 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:

  1. 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:

    Hindari menyimpan terlalu banyak model bahasa di perangkat sekaligus.

  2. 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.

  3. 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];
 }];