Text mit ML Kit für iOS übersetzen

Mit ML Kit können Sie Text in verschiedene Sprachen übersetzen. Mit dem ML Kit können Sie Übersetzungen in mehr als 50 Sprachen erstellen.

Testen

  • Probieren Sie die Beispiel-App aus, um sich ein Anwendungsbeispiel dieser API anzusehen.

Hinweis

  1. Fügen Sie die folgenden ML Kit-Pods in Ihre Podfile ein:
    pod 'GoogleMLKit/Translate', '3.2.0'
    
  2. Nachdem Sie die Pods Ihres Projekts installiert oder aktualisiert haben, öffnen Sie das Xcode-Projekt mit dessen .xcworkspace. ML Kit wird ab Xcode Version 12.4 unterstützt.

Textstring übersetzen

So übersetzen Sie einen String zwischen zwei Sprachen:

  1. Erstellen Sie ein Translator-Objekt und konfigurieren Sie es mit den Quell- und Zielsprachen:

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

    Wenn Sie die Sprache des Eingabetextes nicht kennen, können Sie die Language Identification API verwenden, die Ihnen ein Sprach-Tag liefert. Konvertieren Sie dann das Language-Tag in ein ML Kit-Enum. Der Code hängt davon ab, welche Sprache Sie verwenden:

    Vermeiden Sie es, zu viele Sprachmodelle auf dem Gerät gleichzeitig zu speichern.

  2. Prüfen Sie, ob das erforderliche Übersetzungsmodell auf das Gerät heruntergeladen wurde. Rufen Sie translate(_:completion:) erst auf, wenn Sie wissen, dass das Modell verfügbar ist.

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

    Sprachmodelle sind ca. 30 MB groß. Laden Sie sie also nicht unnötigerweise herunter. Laden Sie sie nur über WLAN herunter, sofern der Nutzer nichts anderes angegeben hat. Sie sollten Modelle löschen, wenn sie nicht mehr benötigt werden. Weitere Informationen finden Sie unter Übersetzungsmodelle explizit verwalten.

  3. Nachdem Sie bestätigt haben, dass das Modell heruntergeladen wurde, übergeben Sie einen Textstring in der Quellsprache an 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 übersetzt den Text in die von Ihnen konfigurierte Zielsprache und übergibt den übersetzten Text an den Abschluss-Handler.

Lebenszyklus von Übersetzern werden durch ARC (automatische Referenzzählung) gesteuert. Dies ist die empfohlene Konvention für die iOS-Entwicklung. Entwickler können davon ausgehen, dass der Translator freigegeben wird, sobald alle starken Referenzen entfernt wurden.

Übersetzer können im Arbeitsspeicher 30 bis 150 MB belegen. Entwickler sollten das Speicherbudget des Geräts bzw. der App beim gleichzeitigen Erstellen von Übersetzerinstanzen im Hinterkopf behalten und nicht zu viele Sprachmodelle auf dem Gerät verwenden.

Übersetzungsmodelle explizit verwalten

Wenn Sie die Translation API wie oben beschrieben verwenden, lädt ML Kit bei Bedarf automatisch sprachspezifische Übersetzungsmodelle auf das Gerät herunter. Sie können die Übersetzungsmodelle, die auf dem Gerät verfügbar sein sollen, auch explizit mit der Translation Model Management API von ML Kit verwalten. Dies kann nützlich sein, wenn Sie Modelle im Voraus herunterladen oder nicht benötigte Modelle vom Gerät löschen möchten.

So lassen Sie die Übersetzungsmodelle auf dem Gerät speichern:

Swift

let localModels = ModelManager.modelManager().downloadedTranslateModels

Objective-C

NSSet *localModels =
    [MLKModelManager modelManager].downloadedTranslateModels;

So löschen Sie ein Modell:

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.

So laden Sie ein Modell herunter:

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

Wenn Sie den Downloadstatus mit NotificationCenter abrufen möchten, registrieren Sie Beobachter für mlkitModelDownloadDidSucceed und mlkitModelDownloadDidFail. Achten Sie darauf, einen schwachen Verweis auf self im Beobachterblock zu verwenden, da Downloads einige Zeit dauern können und das ursprüngliche Objekt bis zum Abschluss des Downloads freigegeben werden kann. Beispiel:

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

Wenn Sie den Downloadstatus mit NSNotificationCenter abrufen möchten, registrieren Sie Beobachter für MLKModelDownloadDidSucceedNotification und MLKModelDownloadDidFailNotification. Achten Sie darauf, einen schwachen Verweis auf self im Beobachterblock zu verwenden, da Downloads einige Zeit dauern können und das Ursprungsobjekt nach Abschluss des Downloads freigegeben werden kann.

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