ترجمه متن با ML Kit در iOS

می‌توانید از ML Kit برای ترجمه متن بین زبان‌ها استفاده کنید. ML Kit در حال حاضر از ترجمه بین 59 زبان پشتیبانی می کند.

قبل از شروع

  1. اگر قبلاً Firebase را به برنامه خود اضافه نکرده اید، این کار را با دنبال کردن مراحل راهنمای شروع کار انجام دهید.
  2. کتابخانه های ML Kit را در پادفایل خود قرار دهید:
    pod 'Firebase/MLNLTranslate', '6.25.0'
    
    پس از نصب یا به‌روزرسانی Pods پروژه، حتماً پروژه Xcode خود را با استفاده از .xcworkspace آن باز کنید.
  3. در برنامه خود، Firebase را وارد کنید:

    سویفت

    import Firebase

    هدف-C

    @import Firebase;

یک رشته متن را ترجمه کنید

برای ترجمه یک رشته بین دو زبان:

  1. یک شی Translator ایجاد کنید، آن را با زبان مبدأ و مقصد پیکربندی کنید:

    سویفت

    // Create an English-German translator:
    let options = TranslatorOptions(sourceLanguage: .en, targetLanguage: .de)
    let englishGermanTranslator = NaturalLanguage.naturalLanguage().translator(options: options)
    

    هدف-C

    // Create an English-German translator:
    FIRTranslatorOptions *options =
        [[FIRTranslatorOptions alloc] initWithSourceLanguage:FIRTranslateLanguageEN
                                              targetLanguage:FIRTranslateLanguageDE];
    FIRTranslator *englishGermanTranslator =
        [[FIRNaturalLanguage naturalLanguage] translatorWithOptions:options];
    

    اگر زبان متن ورودی را نمی دانید، می توانید ابتدا از API شناسایی زبان استفاده کنید. (اما مطمئن شوید که چندین مدل زبان را به طور همزمان در دستگاه نگه ندارید.)

  2. مطمئن شوید که مدل ترجمه مورد نیاز در دستگاه دانلود شده است. تا زمانی که مدل در دسترس است translate(_:completion:) تماس نگیرید.

    سویفت

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

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

    مدل های زبان حدود 30 مگابایت هستند، بنابراین آنها را بیهوده دانلود نکنید و فقط با استفاده از وای فای آنها را دانلود کنید، مگر اینکه کاربر چیز دیگری را مشخص کرده باشد. همچنین باید مدل های غیر ضروری را حذف کنید. به مدیریت صریح مدل‌های ترجمه مراجعه کنید.

  3. پس از اینکه تأیید کردید مدل دانلود شده است، یک رشته از متن را به زبان مبدأ برای translate(_:completion:) :

    سویفت

    englishGermanTranslator.translate(text) { translatedText, error in
        guard error == nil, let translatedText = translatedText else { return }
    
        // Translation succeeded.
    }
    

    هدف-C

    [englishGermanTranslator translateText:text
                                completion:^(NSString *_Nullable translatedText,
                                             NSError *_Nullable error) {
      if (error != nil || translatedText == nil) {
        return;
      }
    
      // Translation succeeded.
    }];
    

    ML Kit متن را به زبان مقصدی که پیکربندی کرده‌اید ترجمه می‌کند و متن ترجمه‌شده را به کنترل‌کننده تکمیل ارسال می‌کند.

مدل های ترجمه را به صراحت مدیریت کنید

هنگامی که از API ترجمه همانطور که در بالا توضیح داده شد استفاده می کنید، ML Kit به طور خودکار مدل های ترجمه خاص زبان را در صورت لزوم در دستگاه دانلود می کند. همچنین می‌توانید با استفاده از API مدیریت مدل ترجمه کیت ML، مدل‌های ترجمه‌ای را که می‌خواهید در دستگاه موجود باشد، مدیریت کنید. اگر می‌خواهید مدل‌ها را زودتر از موعد دانلود کنید یا مدل‌های غیر ضروری را از دستگاه حذف کنید، می‌تواند مفید باشد.

برای دریافت مدل های ترجمه ذخیره شده در دستگاه:

سویفت

let localModels = ModelManager.modelManager().downloadedTranslateModels

هدف-C

NSSet<FIRTranslateRemoteModel *> *localModels =
    [FIRModelManager modelManager].downloadedTranslateModels;

برای حذف یک مدل:

سویفت

// 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.
}

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

برای دانلود مدل:

سویفت

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

اگر می خواهید وضعیت دانلود را با NotificationCenter دریافت کنید، ناظران را برای firebaseMLModelDownloadDidSucceed و firebaseMLModelDownloadDidFail ثبت کنید. مطمئن شوید که از یک مرجع ضعیف به self در بلوک ناظر استفاده کنید، زیرا دانلودها ممکن است مدتی طول بکشد، و شی مبدا می‌تواند تا پایان دانلود آزاد شود. به عنوان مثال:

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

هدف-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];

اگر می خواهید وضعیت دانلود را با NSNotificationCenter دریافت کنید، ناظران را برای FIRModelDownloadDidSucceedNotification و FIRModelDownloadDidFailNotification ثبت کنید. مطمئن شوید که از یک مرجع ضعیف به self در بلوک ناظر استفاده کنید، زیرا دانلودها ممکن است مدتی طول بکشد، و شی مبدا می‌تواند تا پایان دانلود آزاد شود.

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

می‌توانید از ML Kit برای ترجمه متن بین زبان‌ها استفاده کنید. ML Kit در حال حاضر از ترجمه بین 59 زبان پشتیبانی می کند.

قبل از شروع

  1. اگر قبلاً Firebase را به برنامه خود اضافه نکرده اید، این کار را با دنبال کردن مراحل راهنمای شروع کار انجام دهید.
  2. کتابخانه های ML Kit را در پادفایل خود قرار دهید:
    pod 'Firebase/MLNLTranslate', '6.25.0'
    
    پس از نصب یا به‌روزرسانی Pods پروژه، حتماً پروژه Xcode خود را با استفاده از .xcworkspace آن باز کنید.
  3. در برنامه خود، Firebase را وارد کنید:

    سویفت

    import Firebase

    هدف-C

    @import Firebase;

یک رشته متن را ترجمه کنید

برای ترجمه یک رشته بین دو زبان:

  1. یک شی Translator ایجاد کنید، آن را با زبان مبدأ و مقصد پیکربندی کنید:

    سویفت

    // Create an English-German translator:
    let options = TranslatorOptions(sourceLanguage: .en, targetLanguage: .de)
    let englishGermanTranslator = NaturalLanguage.naturalLanguage().translator(options: options)
    

    هدف-C

    // Create an English-German translator:
    FIRTranslatorOptions *options =
        [[FIRTranslatorOptions alloc] initWithSourceLanguage:FIRTranslateLanguageEN
                                              targetLanguage:FIRTranslateLanguageDE];
    FIRTranslator *englishGermanTranslator =
        [[FIRNaturalLanguage naturalLanguage] translatorWithOptions:options];
    

    اگر زبان متن ورودی را نمی دانید، می توانید ابتدا از API شناسایی زبان استفاده کنید. (اما مطمئن شوید که چندین مدل زبان را به طور همزمان در دستگاه نگه ندارید.)

  2. مطمئن شوید که مدل ترجمه مورد نیاز در دستگاه دانلود شده است. تا زمانی که مدل در دسترس است translate(_:completion:) تماس نگیرید.

    سویفت

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

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

    مدل های زبان حدود 30 مگابایت هستند، بنابراین آنها را بیهوده دانلود نکنید و فقط با استفاده از وای فای آنها را دانلود کنید، مگر اینکه کاربر چیز دیگری را مشخص کرده باشد. همچنین باید مدل های غیر ضروری را حذف کنید. به مدیریت صریح مدل‌های ترجمه مراجعه کنید.

  3. پس از اینکه تأیید کردید مدل دانلود شده است، یک رشته از متن را به زبان مبدأ برای translate(_:completion:) :

    سویفت

    englishGermanTranslator.translate(text) { translatedText, error in
        guard error == nil, let translatedText = translatedText else { return }
    
        // Translation succeeded.
    }
    

    هدف-C

    [englishGermanTranslator translateText:text
                                completion:^(NSString *_Nullable translatedText,
                                             NSError *_Nullable error) {
      if (error != nil || translatedText == nil) {
        return;
      }
    
      // Translation succeeded.
    }];
    

    ML Kit متن را به زبان مقصدی که پیکربندی کرده‌اید ترجمه می‌کند و متن ترجمه‌شده را به کنترل‌کننده تکمیل ارسال می‌کند.

مدل های ترجمه را به صراحت مدیریت کنید

هنگامی که از API ترجمه همانطور که در بالا توضیح داده شد استفاده می کنید، ML Kit به طور خودکار مدل های ترجمه خاص زبان را در صورت لزوم در دستگاه دانلود می کند. همچنین می‌توانید با استفاده از API مدیریت مدل ترجمه کیت ML، مدل‌های ترجمه‌ای را که می‌خواهید در دستگاه موجود باشد، مدیریت کنید. اگر می‌خواهید مدل‌ها را زودتر از موعد دانلود کنید یا مدل‌های غیر ضروری را از دستگاه حذف کنید، می‌تواند مفید باشد.

برای دریافت مدل های ترجمه ذخیره شده در دستگاه:

سویفت

let localModels = ModelManager.modelManager().downloadedTranslateModels

هدف-C

NSSet<FIRTranslateRemoteModel *> *localModels =
    [FIRModelManager modelManager].downloadedTranslateModels;

برای حذف یک مدل:

سویفت

// 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.
}

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

برای دانلود مدل:

سویفت

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

اگر می خواهید وضعیت دانلود را با NotificationCenter دریافت کنید، ناظران را برای firebaseMLModelDownloadDidSucceed و firebaseMLModelDownloadDidFail ثبت کنید. مطمئن شوید که از یک مرجع ضعیف به self در بلوک ناظر استفاده کنید، زیرا دانلودها ممکن است مدتی طول بکشد، و شی مبدا می‌تواند تا پایان دانلود آزاد شود. به عنوان مثال:

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

هدف-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];

اگر می خواهید وضعیت دانلود را با NSNotificationCenter دریافت کنید، ناظران را برای FIRModelDownloadDidSucceedNotification و FIRModelDownloadDidFailNotification ثبت کنید. مطمئن شوید که از یک مرجع ضعیف به self در بلوک ناظر استفاده کنید، زیرا دانلودها ممکن است مدتی طول بکشد، و شی مبدا می‌تواند تا پایان دانلود آزاد شود.

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

می‌توانید از ML Kit برای ترجمه متن بین زبان‌ها استفاده کنید. ML Kit در حال حاضر از ترجمه بین 59 زبان پشتیبانی می کند.

قبل از شروع

  1. اگر قبلاً Firebase را به برنامه خود اضافه نکرده اید، این کار را با دنبال کردن مراحل راهنمای شروع کار انجام دهید.
  2. کتابخانه های ML Kit را در پادفایل خود قرار دهید:
    pod 'Firebase/MLNLTranslate', '6.25.0'
    
    پس از نصب یا به‌روزرسانی Pods پروژه، حتماً پروژه Xcode خود را با استفاده از .xcworkspace آن باز کنید.
  3. در برنامه خود، Firebase را وارد کنید:

    سویفت

    import Firebase

    هدف-C

    @import Firebase;

یک رشته متن را ترجمه کنید

برای ترجمه یک رشته بین دو زبان:

  1. یک شی Translator ایجاد کنید، آن را با زبان مبدأ و مقصد پیکربندی کنید:

    سویفت

    // Create an English-German translator:
    let options = TranslatorOptions(sourceLanguage: .en, targetLanguage: .de)
    let englishGermanTranslator = NaturalLanguage.naturalLanguage().translator(options: options)
    

    هدف-C

    // Create an English-German translator:
    FIRTranslatorOptions *options =
        [[FIRTranslatorOptions alloc] initWithSourceLanguage:FIRTranslateLanguageEN
                                              targetLanguage:FIRTranslateLanguageDE];
    FIRTranslator *englishGermanTranslator =
        [[FIRNaturalLanguage naturalLanguage] translatorWithOptions:options];
    

    اگر زبان متن ورودی را نمی دانید، می توانید ابتدا از API شناسایی زبان استفاده کنید. (اما مطمئن شوید که چندین مدل زبان را به طور همزمان در دستگاه نگه ندارید.)

  2. مطمئن شوید که مدل ترجمه مورد نیاز در دستگاه دانلود شده است. تا زمانی که مدل در دسترس است translate(_:completion:) تماس نگیرید.

    سویفت

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

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

    مدل های زبان حدود 30 مگابایت هستند، بنابراین آنها را بیهوده دانلود نکنید و فقط با استفاده از وای فای آنها را دانلود کنید، مگر اینکه کاربر چیز دیگری را مشخص کرده باشد. همچنین باید مدل های غیر ضروری را حذف کنید. به مدیریت صریح مدل‌های ترجمه مراجعه کنید.

  3. پس از اینکه تأیید کردید مدل دانلود شده است، یک رشته از متن را به زبان مبدأ برای translate(_:completion:) :

    سویفت

    englishGermanTranslator.translate(text) { translatedText, error in
        guard error == nil, let translatedText = translatedText else { return }
    
        // Translation succeeded.
    }
    

    هدف-C

    [englishGermanTranslator translateText:text
                                completion:^(NSString *_Nullable translatedText,
                                             NSError *_Nullable error) {
      if (error != nil || translatedText == nil) {
        return;
      }
    
      // Translation succeeded.
    }];
    

    ML Kit متن را به زبان مقصدی که پیکربندی کرده‌اید ترجمه می‌کند و متن ترجمه‌شده را به کنترل‌کننده تکمیل ارسال می‌کند.

مدل های ترجمه را به صراحت مدیریت کنید

هنگامی که از API ترجمه همانطور که در بالا توضیح داده شد استفاده می کنید، ML Kit به طور خودکار مدل های ترجمه خاص زبان را در صورت لزوم در دستگاه دانلود می کند. همچنین می‌توانید با استفاده از API مدیریت مدل ترجمه کیت ML، مدل‌های ترجمه‌ای را که می‌خواهید در دستگاه موجود باشد، مدیریت کنید. اگر می‌خواهید مدل‌ها را زودتر از موعد دانلود کنید یا مدل‌های غیر ضروری را از دستگاه حذف کنید، می‌تواند مفید باشد.

برای دریافت مدل های ترجمه ذخیره شده در دستگاه:

سویفت

let localModels = ModelManager.modelManager().downloadedTranslateModels

هدف-C

NSSet<FIRTranslateRemoteModel *> *localModels =
    [FIRModelManager modelManager].downloadedTranslateModels;

برای حذف یک مدل:

سویفت

// 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.
}

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

برای دانلود مدل:

سویفت

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

اگر می خواهید وضعیت دانلود را با NotificationCenter دریافت کنید، ناظران را برای firebaseMLModelDownloadDidSucceed و firebaseMLModelDownloadDidFail ثبت کنید. مطمئن شوید که از یک مرجع ضعیف به self در بلوک ناظر استفاده کنید، زیرا دانلودها ممکن است مدتی طول بکشد، و شی مبدا می‌تواند تا پایان دانلود آزاد شود. به عنوان مثال:

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

هدف-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];

اگر می خواهید وضعیت دانلود را با NSNotificationCenter دریافت کنید، ناظران را برای FIRModelDownloadDidSucceedNotification و FIRModelDownloadDidFailNotification ثبت کنید. مطمئن شوید که از یک مرجع ضعیف به self در بلوک ناظر استفاده کنید، زیرا دانلودها ممکن است مدتی طول بکشد، و شی مبدا می‌تواند تا پایان دانلود آزاد شود.

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

می‌توانید از ML Kit برای ترجمه متن بین زبان‌ها استفاده کنید. ML Kit در حال حاضر از ترجمه بین 59 زبان پشتیبانی می کند.

قبل از شروع

  1. اگر قبلاً Firebase را به برنامه خود اضافه نکرده اید، این کار را با دنبال کردن مراحل راهنمای شروع کار انجام دهید.
  2. کتابخانه های ML Kit را در پادفایل خود قرار دهید:
    pod 'Firebase/MLNLTranslate', '6.25.0'
    
    پس از نصب یا به‌روزرسانی Pods پروژه، حتماً پروژه Xcode خود را با استفاده از .xcworkspace آن باز کنید.
  3. در برنامه خود، Firebase را وارد کنید:

    سویفت

    import Firebase

    هدف-C

    @import Firebase;

یک رشته متن را ترجمه کنید

برای ترجمه یک رشته بین دو زبان:

  1. یک شی Translator ایجاد کنید، آن را با زبان مبدأ و مقصد پیکربندی کنید:

    سویفت

    // Create an English-German translator:
    let options = TranslatorOptions(sourceLanguage: .en, targetLanguage: .de)
    let englishGermanTranslator = NaturalLanguage.naturalLanguage().translator(options: options)
    

    هدف-C

    // Create an English-German translator:
    FIRTranslatorOptions *options =
        [[FIRTranslatorOptions alloc] initWithSourceLanguage:FIRTranslateLanguageEN
                                              targetLanguage:FIRTranslateLanguageDE];
    FIRTranslator *englishGermanTranslator =
        [[FIRNaturalLanguage naturalLanguage] translatorWithOptions:options];
    

    اگر زبان متن ورودی را نمی دانید، می توانید ابتدا از API شناسایی زبان استفاده کنید. (اما مطمئن شوید که چندین مدل زبان را به طور همزمان در دستگاه نگه ندارید.)

  2. مطمئن شوید که مدل ترجمه مورد نیاز در دستگاه دانلود شده است. تا زمانی که مدل در دسترس است translate(_:completion:) تماس نگیرید.

    سویفت

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

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

    مدل های زبان حدود 30 مگابایت هستند، بنابراین آنها را بیهوده دانلود نکنید و فقط با استفاده از وای فای آنها را دانلود کنید، مگر اینکه کاربر چیز دیگری را مشخص کرده باشد. همچنین باید مدل های غیر ضروری را حذف کنید. به مدیریت صریح مدل‌های ترجمه مراجعه کنید.

  3. پس از اینکه تأیید کردید مدل دانلود شده است، یک رشته از متن را به زبان مبدأ برای translate(_:completion:) :

    سویفت

    englishGermanTranslator.translate(text) { translatedText, error in
        guard error == nil, let translatedText = translatedText else { return }
    
        // Translation succeeded.
    }
    

    هدف-C

    [englishGermanTranslator translateText:text
                                completion:^(NSString *_Nullable translatedText,
                                             NSError *_Nullable error) {
      if (error != nil || translatedText == nil) {
        return;
      }
    
      // Translation succeeded.
    }];
    

    ML Kit متن را به زبان مقصدی که پیکربندی کرده‌اید ترجمه می‌کند و متن ترجمه‌شده را به کنترل‌کننده تکمیل ارسال می‌کند.

مدل های ترجمه را به صراحت مدیریت کنید

هنگامی که از API ترجمه همانطور که در بالا توضیح داده شد استفاده می کنید، ML Kit به طور خودکار مدل های ترجمه خاص زبان را در صورت لزوم در دستگاه دانلود می کند. همچنین می‌توانید با استفاده از API مدیریت مدل ترجمه کیت ML، مدل‌های ترجمه‌ای را که می‌خواهید در دستگاه موجود باشد، مدیریت کنید. اگر می‌خواهید مدل‌ها را زودتر از موعد دانلود کنید یا مدل‌های غیر ضروری را از دستگاه حذف کنید، می‌تواند مفید باشد.

برای دریافت مدل های ترجمه ذخیره شده در دستگاه:

سویفت

let localModels = ModelManager.modelManager().downloadedTranslateModels

هدف-C

NSSet<FIRTranslateRemoteModel *> *localModels =
    [FIRModelManager modelManager].downloadedTranslateModels;

برای حذف یک مدل:

سویفت

// 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.
}

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

برای دانلود مدل:

سویفت

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

اگر می خواهید وضعیت دانلود را با NotificationCenter دریافت کنید، ناظران را برای firebaseMLModelDownloadDidSucceed و firebaseMLModelDownloadDidFail ثبت کنید. مطمئن شوید که از یک مرجع ضعیف به self در بلوک ناظر استفاده کنید، زیرا دانلودها ممکن است مدتی طول بکشد، و شی مبدا می‌تواند تا پایان دانلود آزاد شود. به عنوان مثال:

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

هدف-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];

اگر می خواهید وضعیت دانلود را با NSNotificationCenter دریافت کنید، ناظران را برای FIRModelDownloadDidSucceedNotification و FIRModelDownloadDidFailNotification ثبت کنید. مطمئن شوید که از یک مرجع ضعیف به self در بلوک ناظر استفاده کنید، زیرا دانلودها ممکن است مدتی طول بکشد، و شی مبدا می‌تواند تا پایان دانلود آزاد شود.

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