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