ترجمة النصوص باستخدام حزمة تعلُّم الآلة على نظام التشغيل iOS

يمكنك استخدام حزمة تعلّم الآلة لترجمة النص بين اللغات. حزمة تعلُّم الآلة يمكنها الترجمة بين أكثر من 50 لغة.

جرّبه الآن

  • يمكنك تجربة نموذج التطبيق من أجل يمكنك الاطّلاع على مثال حول استخدام واجهة برمجة التطبيقات هذه.

قبل البدء

  1. تضمين مجموعات ML Kit التالية في Podfile:
    pod 'GoogleMLKit/Translate', '3.2.0'
    
  2. بعد تثبيت لوحات مشروعك أو تحديثها، افتح مشروع Xcode باستخدام .xcworkspace تتوفّر حزمة تعلّم الآلة في الإصدار 12.4 من Xcode أو الإصدارات الأحدث.

ترجمة سلسلة من النص

لترجمة سلسلة بين لغتين:

  1. إنشاء عنصر Translator، وضبطه باستخدام المصدر والهدف اللغات:

    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];

    إذا كنت لا تعرف لغة النص المُدخَل، يمكنك استخدام قائمة اللغة واجهة برمجة تطبيقات التعريف التي علامة لغة. ثم حوّل علامة اللغة إلى تعداد حزمة تعلّم الآلة. تعتمد الرموز على اللغة التي تستخدمها:

    تجنَّب الاحتفاظ بعدد كبير جدًا من النماذج اللغوية على الجهاز في آنٍ واحد.

  2. تأكَّد من تنزيل نموذج الترجمة المطلوب على الجهاز. يُرجى عدم الاتصال بـ "translate(_:completion:)" حتى تعرف أنّ النموذج متوفّر.

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

    يبلغ حجم النماذج اللغوية حوالي 30 ميغابايت، لذا لا تنزّلها بدون داعٍ تنزيل تلك الملفات باستخدام شبكة Wi-Fi فقط ما لم يحدد المستخدم خلاف ذلك. إِنْتَ أن تحذف النماذج عندما لا تكون هناك حاجة إليها. يُرجى الاطّلاع على إدارة نماذج الترجمة بوضوح.

  3. بعد التأكد من تنزيل النموذج، مرر سلسلة من النصوص في اللغة المصدر إلى 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.
          }];

    تعمل مجموعة أدوات تعلُّم الآلة على ترجمة النص إلى اللغة الهدف التي ضبطتها يمرر النص المترجم إلى معالِج الإكمال.

يتم التحكم في دورات حياة المترجم عن طريق نظام ARC (الاحتساب التلقائي للمراجع)، وهو الطريقة الموصى بها لتطوير iOS. يتوقّع المطوّرون بعد إزالة جميع المراجع القوية.

يمكن أن تشغَل أدوات الترجمة ما بين 30 و150 ميغابايت عند تحميلها في الذاكرة. على المطوّرين ضع في اعتبارك ميزانية ذاكرة الجهاز/التطبيق عند إنشاء النُسخ الافتراضية من المترجم وتجنب الاحتفاظ بعدد كبير جدًا من النماذج اللغوية على الجهاز دفعة واحدة.

إدارة نماذج الترجمة بوضوح

عند استخدام واجهة برمجة التطبيقات للترجمة كما هو موضّح أعلاه، يتم تلقائيًا استخدام حزمة تعلُّم الآلة يتم تنزيل نماذج الترجمة الخاصة بكل لغة على الجهاز حسب الحاجة. إِنْتَ أيضًا إدارة نماذج الترجمة التي تريدها أن تكون متاحة على باستخدام واجهة برمجة التطبيقات لإدارة نموذج الترجمة في ML Kit. يمكن أن تظهر فائدة هذا بوضوح أكبر مفيدة إذا كنت ترغب في تنزيل النماذج مسبقًا، أو حذف النماذج غير اللازمة من الجهاز.

لتخزين نماذج الترجمة على الجهاز:

Swift

let localModels = ModelManager.modelManager().downloadedTranslateModels

Objective-C

NSSet *localModels =
    [MLKModelManager modelManager].downloadedTranslateModels;

لحذف نموذج:

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.

لتنزيل نموذج:

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
    )
)

إذا أردت الاطّلاع على حالة التنزيل من خلال NotificationCenter، يُرجى التسجيل مراقبين عن mlkitModelDownloadDidSucceed mlkitModelDownloadDidFail احرص على استخدام إشارة ضعيفة إلى self. في قالب المراقبة، نظرًا لأن التنزيلات قد تستغرق بعض الوقت، قد تستغرق عملية عند انتهاء التنزيل. على سبيل المثال:

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];

إذا أردت الاطّلاع على حالة التنزيل من خلال NSNotificationCenter، يُرجى التسجيل مراقبين عن MLKModelDownloadDidSucceedNotification MLKModelDownloadDidFailNotification تأكد من استخدام مرجع ضعيف self في مجموعة المراقب، نظرًا لأن عمليات التنزيل قد تستغرق بعض الوقت، يمكن تحرير الكائن الأصلي بحلول وقت انتهاء التنزيل.

__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];
 }];