Text mit ML Kit unter iOS übersetzen

Sie können ML Kit zum Übersetzen von Text zwischen Sprachen verwenden. ML-Kit zwischen mehr als 50 Sprachen.

Jetzt ausprobieren

  • Probieren Sie die Beispiel-App aus, um sehen Sie sich ein Anwendungsbeispiel für diese API an.

Hinweis

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

Einen Textstring übersetzen

So übersetzen Sie einen String zwischen zwei Sprachen:

  1. Erstellen Sie ein Translator-Objekt und konfigurieren Sie es mit der Quelle und dem Ziel. Sprachen:

    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 Eingabetexts nicht kennen, können Sie die Option Sprache Identification API, die ein Sprach-Tag. Konvertieren Sie dann das Sprach-Tag in ML Kit-Enum verwendet wird. Der Code hängt von der verwendeten Sprache ab:

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

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

    Language Models sind etwa 30 MB groß, laden Sie sie also nicht unnötig herunter. sie nur über WLAN herunterladen, sofern der Nutzer nichts anderes festgelegt hat. Ich 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 Ausgangssprache in 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.

Die Lebenszyklen von Übersetzern werden durch ARC (automatische Referenzzählung) gesteuert. das die empfohlene Konvention für die iOS-Entwicklung ist. Entwickler können der Übersetzer wird wieder freigegeben, sobald alle aussagekräftigen Referenzen entfernt wurden.

Übersetzer können zwischen 30 und 150 MB belegen, wenn sie im Arbeitsspeicher geladen werden. Entwickler sollten Behalten Sie das Arbeitsspeicher-Budget des Geräts/der App im Hinterkopf, wenn Sie gleichzeitige Übersetzerinstanzen und vermeiden Sie, zu viele Language Models auf dem Gerät zu speichern. auf einmal.

Übersetzungsmodelle explizit verwalten

Wenn Sie die Translation API wie oben beschrieben verwenden, Lädt bei Bedarf sprachspezifische Übersetzungsmodelle auf das Gerät herunter. Ich die Übersetzungsmodelle, die auf der Seite mit der Translation Model Management API von ML Kit. Dabei kann es sich um nützlich, wenn Sie Modelle im Voraus herunterladen oder nicht benötigte Modelle löschen möchten. vom Gerät aus.

So rufen Sie die auf dem Gerät gespeicherten Übersetzungsmodelle ab:

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

Registrieren Sie sich, um den Downloadstatus bei NotificationCenter abzurufen. Beobachter für mlkitModelDownloadDidSucceed und mlkitModelDownloadDidFail Achte darauf, eine schwache Referenz zu self zu verwenden. im Beobachterblock befinden, da Downloads einige Zeit dauern können Objekt kann bis zum Abschluss des Downloads freigegeben werden. 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];

Registrieren Sie sich, um den Downloadstatus bei NSNotificationCenter abzurufen. Beobachter für MLKModelDownloadDidSucceedNotification und MLKModelDownloadDidFailNotification Achten Sie darauf, eine schwache Referenz self im Beobachter-Block, da Downloads einige Zeit dauern können und der ursprüngliches Objekt kann freigegeben werden, wenn der Download abgeschlossen ist.

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