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
- Fügen Sie die folgenden ML Kit-Pods in Ihre Podfile ein:
pod 'GoogleMLKit/Translate', '3.2.0'
- 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:
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:
- Swift: Rufen Sie
TranslateLanguage.fromLanguageTag()
an, um eineTranslateLanguage
zu erhalten - Objective-C: Rufen Sie
MLKTranslateLanguageForLanguageTag()
auf, um einMLKTranslateLanguage
zu erhalten
Vermeiden Sie es, zu viele Sprachmodelle auf dem Gerät gleichzeitig zu speichern.
- Swift: Rufen Sie
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.
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]; }];