Puoi utilizzare ML Kit per tradurre il testo da una lingua all'altra. Kit ML può tradurre tra più di 50 lingue.
Prova
- Prova l'app di esempio per per vedere un esempio di utilizzo di questa API.
Prima di iniziare
- Includi i seguenti pod ML Kit nel podfile:
pod 'GoogleMLKit/Translate', '3.2.0'
- Dopo aver installato o aggiornato i pod del progetto, apri il progetto Xcode utilizzando la relativa
.xcworkspace
. ML Kit è supportato in Xcode versione 12.4 o successiva.
Traduci una stringa di testo
Per tradurre una stringa tra due lingue:
Crea un oggetto
Translator
, configurandolo con l'origine e la destinazione lingue: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];
Se non conosci la lingua del testo di input, puoi utilizzare lo strumento Lingua API di identificazione, fornisce un tag lingua. Quindi converti il tag della lingua in un'enumerazione del kit ML. Il codice dipende dal linguaggio utilizzato:
- Swift: chiama il numero
TranslateLanguage.fromLanguageTag()
per ricevere unTranslateLanguage
- Objective-C: chiama il numero
MLKTranslateLanguageForLanguageTag()
per ricevere unMLKTranslateLanguage
Evita di conservare sul dispositivo troppi modelli linguistici contemporaneamente.
- Swift: chiama il numero
Assicurati che il modello di traduzione richiesto sia stato scaricato sul dispositivo. Non chiamare
translate(_:completion:)
finché non hai la certezza che il modello è disponibile.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. }];
I modelli linguistici hanno una dimensione di circa 30 MB, quindi cerca di non scaricarli inutilmente e scaricarle solo tramite Wi-Fi, a meno che l'utente non abbia specificato diversamente. Tu ed eliminare i modelli quando non sono più necessari. Consulta Gestire in modo esplicito i modelli di traduzione.
Dopo aver confermato che il modello è stato scaricato, passa una stringa di testo lingua di origine 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 traduce il testo nella lingua di destinazione che hai configurato passa il testo tradotto al gestore del completamento.
I cicli di vita del traduttore sono controllati dall'ARC (conteggio automatico dei riferimenti), che è la convenzione consigliata per lo sviluppo in iOS. Gli sviluppatori possono aspettarsi il traduttore da gestire una volta rimossi tutti i riferimenti forti.
I traduttori possono occupare 30-150 MB se caricati in memoria. Gli sviluppatori dovrebbero tieni a mente il budget della memoria del dispositivo o dell'app quando crei contenuti traduttore ed evitare di conservare sul dispositivo troppi modelli linguistici contemporaneamente.
Gestisci in modo esplicito i modelli di traduzione
Quando utilizzi l'API di traduzione come descritto in precedenza, ML Kit esegue automaticamente scarica sul dispositivo modelli di traduzione specifici per lingua, se necessario. Tu gestire in modo esplicito i modelli di traduzione che vuoi rendere disponibili tramite l'API di gestione del modello di traduzione di ML Kit. Può essere È utile se vuoi scaricare i modelli in anticipo o eliminare quelli non necessari dal dispositivo.
Per scaricare i modelli di traduzione memorizzati sul dispositivo:
Swift
let localModels = ModelManager.modelManager().downloadedTranslateModels
Objective-C
NSSet*localModels = [MLKModelManager modelManager].downloadedTranslateModels;
Per eliminare un modello:
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.
Per scaricare un modello:
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 ) )
Se vuoi ottenere lo stato del download con NotificationCenter
, registrati
osservatori per mlkitModelDownloadDidSucceed
e
mlkitModelDownloadDidFail
. Assicurati di utilizzare un riferimento inefficace a self
nel blocco di osservazione, dato che i download possono richiedere del tempo e i contenuti
può essere liberato al termine del download. Ad esempio:
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];
Se vuoi ottenere lo stato del download con NSNotificationCenter
, registrati
osservatori per MLKModelDownloadDidSucceedNotification
e
MLKModelDownloadDidFailNotification
. Assicurati di utilizzare un riferimento inefficace
self
nel blocco osservatore, poiché i download possono richiedere del tempo e
può essere liberato al termine del download.
__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]; }];