אתה יכול להשתמש ב-ML Kit כדי לתרגם טקסט בין שפות. ערכת ML תומכת כעת בתרגום בין 59 שפות .
לפני שאתה מתחיל
- אם עדיין לא הוספת את Firebase לאפליקציה שלך, עשה זאת על ידי ביצוע השלבים במדריך לתחילת העבודה .
- כלול את ספריות ML Kit ב-Podfile שלך:
pod 'Firebase/MLNLTranslate', '6.25.0'
לאחר שתתקין או תעדכן את ה-Pods של הפרויקט שלך, הקפד לפתוח את פרויקט Xcode שלך באמצעות.xcworkspace
שלו. - באפליקציה שלך, ייבא את Firebase:
מָהִיר
import Firebase
Objective-C
@import Firebase;
תרגם מחרוזת טקסט
כדי לתרגם מחרוזת בין שתי שפות:
צור אובייקט
Translator
, הגדר אותו עם שפות המקור והיעד:מָהִיר
// Create an English-German translator: let options = TranslatorOptions(sourceLanguage: .en, targetLanguage: .de) let englishGermanTranslator = NaturalLanguage.naturalLanguage().translator(options: options)
Objective-C
// Create an English-German translator: FIRTranslatorOptions *options = [[FIRTranslatorOptions alloc] initWithSourceLanguage:FIRTranslateLanguageEN targetLanguage:FIRTranslateLanguageDE]; FIRTranslator *englishGermanTranslator = [[FIRNaturalLanguage naturalLanguage] translatorWithOptions:options];
אם אינך יודע את השפה של טקסט הקלט, תוכל להשתמש תחילה ב-API לזיהוי השפה . (אבל הקפד לא לשמור יותר מדי דגמי שפה במכשיר בבת אחת.)
ודא שדגם התרגום הנדרש הורד למכשיר. אל תתקשר ל-
translate(_:completion:)
עד שתדע שהדגם זמין.מָהִיר
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
FIRModelDownloadConditions *conditions = [[FIRModelDownloadConditions alloc] initWithAllowsCellularAccess:NO allowsBackgroundDownloading:YES]; [englishGermanTranslator downloadModelIfNeededWithConditions:conditions completion:^(NSError *_Nullable error) { if (error != nil) { return; } // Model downloaded successfully. Okay to start translating. }];
דגמי השפה הם סביב 30MB, אז אל תוריד אותם שלא לצורך, והורד אותם רק באמצעות WiFi, אלא אם כן המשתמש ציין אחרת. כדאי גם למחוק דגמים מיותרים. ראה ניהול מפורש של מודלים של תרגום .
לאחר שתאשר שהדגם הורד, העבר מחרוזת טקסט בשפת המקור
translate(_:completion:)
:מָהִיר
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 מתרגם את הטקסט לשפת היעד שהגדרתם ומעביר את הטקסט המתורגם למטפל בהשלמה.
נהל באופן מפורש מודלים של תרגום
כאשר אתה משתמש ב-API לתרגום כמתואר לעיל, ML Kit מוריד אוטומטית למכשיר דגמי תרגום ספציפיים לשפה לפי הצורך. אתה יכול גם לנהל באופן מפורש את דגמי התרגום שאתה רוצה שזמינים במכשיר על ידי שימוש ב-API לניהול מודל התרגום של ML Kit. זה יכול להיות שימושי אם אתה רוצה להוריד דגמים מבעוד מועד, או למחוק דגמים לא נחוצים מהמכשיר.
כדי לקבל את דגמי התרגום המאוחסנים במכשיר:
מָהִיר
let localModels = ModelManager.modelManager().downloadedTranslateModels
Objective-C
NSSet<FIRTranslateRemoteModel *> *localModels =
[FIRModelManager modelManager].downloadedTranslateModels;
כדי למחוק דגם:
מָהִיר
// Delete the German model if it's on the device.
let deModel = TranslateRemoteModel.translateRemoteModel(language: .de)
ModelManager.modelManager().deleteDownloadedModel(deModel) { error in
guard error == nil else { return }
// Model deleted.
}
Objective-C
// Delete the German model if it's on the device.
FIRTranslateRemoteModel *deModel =
[FIRTranslateRemoteModel translateRemoteModelWithLanguage:FIRTranslateLanguageDE];
[[FIRModelManager modelManager] deleteDownloadedModel:deModel
completion:^(NSError * _Nullable error) {
if (error != nil) {
return;
}
// Model deleted.
}];
להורדת דגם:
מָהִיר
// Download the French model.
let frModel = TranslateRemoteModel.translateRemoteModel(language: .fr)
// Keep a reference to the download progress so you can check that the model
// is available before you use it.
progress = ModelManager.modelManager().download(
frModel,
conditions: ModelDownloadConditions(
allowsCellularAccess: false,
allowsBackgroundDownloading: true
)
)
אם אתה רוצה לקבל את סטטוס ההורדה עם NotificationCenter
, רשום צופים עבור firebaseMLModelDownloadDidSucceed
ו- firebaseMLModelDownloadDidFail
. הקפד להשתמש בהתייחסות חלשה self
בבלוק הצופה, מכיוון שההורדות יכולות להימשך זמן מה, והאובייקט המקור יכול להשתחרר עד לסיום ההורדה. לדוגמה:
NotificationCenter.default.addObserver(
forName: .firebaseMLModelDownloadDidSucceed,
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 == frModel
else { return }
// The model was downloaded and is available on the device
}
NotificationCenter.default.addObserver(
forName: .firebaseMLModelDownloadDidFail,
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.
FIRModelDownloadConditions *conditions =
[[FIRModelDownloadConditions alloc] initWithAllowsCellularAccess:NO
allowsBackgroundDownloading:YES];
FIRTranslateRemoteModel *frModel =
[FIRTranslateRemoteModel translateRemoteModelWithLanguage:FIRTranslateLanguageFR];
// Keep a reference to the download progress so you can check that the model
// is available before you use it.
self.downloadProgress = [[FIRModelManager modelManager] downloadModel:frModel
conditions:conditions];
אם ברצונך לקבל את סטטוס ההורדה עם NSNotificationCenter
, רשום משקיפים עבור FIRModelDownloadDidSucceedNotification
ו- FIRModelDownloadDidFailNotification
. הקפד להשתמש בהתייחסות חלשה self
בבלוק הצופה, מכיוון שההורדות יכולות להימשך זמן מה, והאובייקט המקור יכול להשתחרר עד לסיום ההורדה.
__block MyViewController *weakSelf = self;
[NSNotificationCenter.defaultCenter
addObserverForName:FIRModelDownloadDidSucceedNotification
object:nil
queue:nil
usingBlock:^(NSNotification * _Nonnull note) {
if (weakSelf == nil | note.userInfo == nil) {
return;
}
FIRTranslateRemoteModel *model = note.userInfo[FIRModelDownloadUserInfoKeyRemoteModel];
if ([model isKindOfClass:[FIRTranslateRemoteModel class]]
&& model == frModel) {
// The model was downloaded and is available on the device
}
}];
[NSNotificationCenter.defaultCenter
addObserverForName:FIRModelDownloadDidFailNotification
object:nil
queue:nil
usingBlock:^(NSNotification * _Nonnull note) {
if (weakSelf == nil | note.userInfo == nil) {
return;
}
NSError *error = note.userInfo[FIRModelDownloadUserInfoKeyError];
}];