iOS पर एमएल किट की मदद से टेक्स्ट का अनुवाद करना

एक भाषा से दूसरी भाषा में टेक्स्ट का अनुवाद करने के लिए, एमएल किट का इस्तेमाल किया जा सकता है. एमएल किट का अनुवाद 50 से ज़्यादा भाषाओं में किया जा सकता है.

इसे आज़माएं

शुरू करने से पहले

  1. अपनी Podfile में, इन एमएल किट के पॉड शामिल करें:
    pod 'GoogleMLKit/Translate', '3.2.0'
    
  2. अपने प्रोजेक्ट के पॉड इंस्टॉल या अपडेट करने के बाद, .xcworkspace का इस्तेमाल करके Xcode प्रोजेक्ट खोलें. ML Kit, Xcode के 12.4 या इसके बाद वाले वर्शन पर काम करती है.

टेक्स्ट की स्ट्रिंग का अनुवाद करना

किसी स्ट्रिंग का दो भाषाओं के बीच अनुवाद करने के लिए:

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

    अगर आपको इनपुट टेक्स्ट की भाषा नहीं पता है, तो Language पहचान API का इस्तेमाल करें, जो आपको भाषा का टैग देता है. इसके बाद, भाषा के टैग को एमएल किट एनम में बदलें. कोड इस बात पर निर्भर करता है कि किस भाषा का इस्तेमाल किया जा रहा है:

    डिवाइस पर एक साथ कई भाषा के मॉडल रखने से बचें.

  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 एमबी के होते हैं, इसलिए उन्हें बेवजह डाउनलोड न करें और उन्हें सिर्फ़ वाई-फ़ाई का इस्तेमाल करके डाउनलोड करें, जब तक उपयोगकर्ता ने उनके बारे में कुछ और न बताया हो. अगर मॉडल की ज़रूरत न हो, तो आपको उन्हें मिटा देना चाहिए. अनुवाद के मॉडल साफ़ तौर पर मैनेज करें देखें.

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

    ML Kit, टेक्स्ट का उस टारगेट भाषा में अनुवाद करता है जिसे आपने कॉन्फ़िगर किया है. साथ ही, अनुवाद किए गए टेक्स्ट को पूरा होने वाले हैंडलर में पास करता है.

अनुवादक लाइफ़साइकल को ARC (अपने-आप पहचान फ़ाइलों की गिनती) से कंट्रोल किया जाता है. iOS को डेवलप करने के लिए, यह एक सुझाया गया तरीका है. सभी मज़बूत पहचान फ़ाइलों को हटाए जाने के बाद, डेवलपर अनुवादक को काम से हटाने की उम्मीद कर सकते हैं.

मेमोरी में लोड होने पर अनुवादक 30 एमबी से 150 एमबी का साइज़ ले सकते हैं. एक साथ कई अनुवादक इंस्टेंस बनाते समय डेवलपर को डिवाइस/ऐप्लिकेशन के मेमोरी बजट को ध्यान में रखना चाहिए. साथ ही, डिवाइस पर एक साथ कई भाषा मॉडल रखने से बचना चाहिए.

अनुवाद के मॉडल को साफ़ तौर पर मैनेज करना

ऊपर बताए गए तरीके से अनुवाद एपीआई का इस्तेमाल करने पर, एमएल किट ज़रूरत के हिसाब से डिवाइस पर अपने-आप भाषा के हिसाब से अनुवाद के मॉडल डाउनलोड कर देती है. एमएल किट के अनुवाद के मॉडल मैनेजमेंट एपीआई का इस्तेमाल करके, डिवाइस पर उपलब्ध अनुवाद के मॉडल को साफ़ तौर पर मैनेज किया जा सकता है. अगर आपको मॉडल पहले से डाउनलोड करने हैं या डिवाइस से ग़ैर-ज़रूरी मॉडल मिटाने हैं, तो यह काम का हो सकता है.

डिवाइस पर अनुवाद के मॉडल सेव करने के लिए:

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