میتوانید از ML Kit برای ترجمه متن بین زبانها استفاده کنید. ML Kit در حال حاضر از ترجمه بین 59 زبان پشتیبانی می کند.
قبل از شروع
- اگر قبلاً Firebase را به برنامه خود اضافه نکرده اید، این کار را با دنبال کردن مراحل راهنمای شروع کار انجام دهید.
- کتابخانه های ML Kit را در پادفایل خود قرار دهید:
pod 'Firebase/MLNLTranslate', '6.25.0'
پس از نصب یا بهروزرسانی Pods پروژه، حتماً پروژه Xcode خود را با استفاده از.xcworkspace
آن باز کنید. - در برنامه خود، Firebase را وارد کنید:
سویفت
import Firebase
هدف-C
@import Firebase;
یک رشته متن را ترجمه کنید
برای ترجمه یک رشته بین دو زبان:
یک شی
Translator
ایجاد کنید، آن را با زبان مبدأ و مقصد پیکربندی کنید:سویفت
// Create an English-German translator: let options = TranslatorOptions(sourceLanguage: .en, targetLanguage: .de) let englishGermanTranslator = NaturalLanguage.naturalLanguage().translator(options: options)
هدف-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. }
هدف-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. }];
مدل های زبان حدود 30 مگابایت هستند، بنابراین آنها را بیهوده دانلود نکنید و فقط با استفاده از وای فای آنها را دانلود کنید، مگر اینکه کاربر چیز دیگری را مشخص کرده باشد. همچنین باید مدل های غیر ضروری را حذف کنید. به مدیریت صریح مدلهای ترجمه مراجعه کنید.
پس از اینکه تأیید کردید مدل دانلود شده است، یک رشته از متن را به زبان مبدأ برای
translate(_:completion:)
:سویفت
englishGermanTranslator.translate(text) { translatedText, error in guard error == nil, let translatedText = translatedText else { return } // Translation succeeded. }
هدف-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، مدلهای ترجمهای را که میخواهید در دستگاه موجود باشد، مدیریت کنید. اگر میخواهید مدلها را زودتر از موعد دانلود کنید یا مدلهای غیر ضروری را از دستگاه حذف کنید، میتواند مفید باشد.
برای دریافت مدل های ترجمه ذخیره شده در دستگاه:
سویفت
let localModels = ModelManager.modelManager().downloadedTranslateModels
هدف-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.
}
هدف-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]
// ...
}
هدف-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];
}];
میتوانید از ML Kit برای ترجمه متن بین زبانها استفاده کنید. ML Kit در حال حاضر از ترجمه بین 59 زبان پشتیبانی می کند.
قبل از شروع
- اگر قبلاً Firebase را به برنامه خود اضافه نکرده اید، این کار را با دنبال کردن مراحل راهنمای شروع کار انجام دهید.
- کتابخانه های ML Kit را در پادفایل خود قرار دهید:
pod 'Firebase/MLNLTranslate', '6.25.0'
پس از نصب یا بهروزرسانی Pods پروژه، حتماً پروژه Xcode خود را با استفاده از.xcworkspace
آن باز کنید. - در برنامه خود، Firebase را وارد کنید:
سویفت
import Firebase
هدف-C
@import Firebase;
یک رشته متن را ترجمه کنید
برای ترجمه یک رشته بین دو زبان:
یک شی
Translator
ایجاد کنید، آن را با زبان مبدأ و مقصد پیکربندی کنید:سویفت
// Create an English-German translator: let options = TranslatorOptions(sourceLanguage: .en, targetLanguage: .de) let englishGermanTranslator = NaturalLanguage.naturalLanguage().translator(options: options)
هدف-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. }
هدف-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. }];
مدل های زبان حدود 30 مگابایت هستند، بنابراین آنها را بیهوده دانلود نکنید و فقط با استفاده از وای فای آنها را دانلود کنید، مگر اینکه کاربر چیز دیگری را مشخص کرده باشد. همچنین باید مدل های غیر ضروری را حذف کنید. به مدیریت صریح مدلهای ترجمه مراجعه کنید.
پس از اینکه تأیید کردید مدل دانلود شده است، یک رشته از متن را به زبان مبدأ برای
translate(_:completion:)
:سویفت
englishGermanTranslator.translate(text) { translatedText, error in guard error == nil, let translatedText = translatedText else { return } // Translation succeeded. }
هدف-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، مدلهای ترجمهای را که میخواهید در دستگاه موجود باشد، مدیریت کنید. اگر میخواهید مدلها را زودتر از موعد دانلود کنید یا مدلهای غیر ضروری را از دستگاه حذف کنید، میتواند مفید باشد.
برای دریافت مدل های ترجمه ذخیره شده در دستگاه:
سویفت
let localModels = ModelManager.modelManager().downloadedTranslateModels
هدف-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.
}
هدف-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]
// ...
}
هدف-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];
}];
میتوانید از ML Kit برای ترجمه متن بین زبانها استفاده کنید. ML Kit در حال حاضر از ترجمه بین 59 زبان پشتیبانی می کند.
قبل از شروع
- اگر قبلاً Firebase را به برنامه خود اضافه نکرده اید، این کار را با دنبال کردن مراحل راهنمای شروع کار انجام دهید.
- کتابخانه های ML Kit را در پادفایل خود قرار دهید:
pod 'Firebase/MLNLTranslate', '6.25.0'
پس از نصب یا بهروزرسانی Pods پروژه، حتماً پروژه Xcode خود را با استفاده از.xcworkspace
آن باز کنید. - در برنامه خود، Firebase را وارد کنید:
سویفت
import Firebase
هدف-C
@import Firebase;
یک رشته متن را ترجمه کنید
برای ترجمه یک رشته بین دو زبان:
یک شی
Translator
ایجاد کنید، آن را با زبان مبدأ و مقصد پیکربندی کنید:سویفت
// Create an English-German translator: let options = TranslatorOptions(sourceLanguage: .en, targetLanguage: .de) let englishGermanTranslator = NaturalLanguage.naturalLanguage().translator(options: options)
هدف-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. }
هدف-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. }];
مدل های زبان حدود 30 مگابایت هستند، بنابراین آنها را بیهوده دانلود نکنید و فقط با استفاده از وای فای آنها را دانلود کنید، مگر اینکه کاربر چیز دیگری را مشخص کرده باشد. همچنین باید مدل های غیر ضروری را حذف کنید. به مدیریت صریح مدلهای ترجمه مراجعه کنید.
پس از اینکه تأیید کردید مدل دانلود شده است، یک رشته از متن را به زبان مبدأ برای
translate(_:completion:)
:سویفت
englishGermanTranslator.translate(text) { translatedText, error in guard error == nil, let translatedText = translatedText else { return } // Translation succeeded. }
هدف-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، مدلهای ترجمهای را که میخواهید در دستگاه موجود باشد، مدیریت کنید. اگر میخواهید مدلها را زودتر از موعد دانلود کنید یا مدلهای غیر ضروری را از دستگاه حذف کنید، میتواند مفید باشد.
برای دریافت مدل های ترجمه ذخیره شده در دستگاه:
سویفت
let localModels = ModelManager.modelManager().downloadedTranslateModels
هدف-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.
}
هدف-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]
// ...
}
هدف-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];
}];
میتوانید از ML Kit برای ترجمه متن بین زبانها استفاده کنید. ML Kit در حال حاضر از ترجمه بین 59 زبان پشتیبانی می کند.
قبل از شروع
- اگر قبلاً Firebase را به برنامه خود اضافه نکرده اید، این کار را با دنبال کردن مراحل راهنمای شروع کار انجام دهید.
- کتابخانه های ML Kit را در پادفایل خود قرار دهید:
pod 'Firebase/MLNLTranslate', '6.25.0'
پس از نصب یا بهروزرسانی Pods پروژه، حتماً پروژه Xcode خود را با استفاده از.xcworkspace
آن باز کنید. - در برنامه خود، Firebase را وارد کنید:
سویفت
import Firebase
هدف-C
@import Firebase;
یک رشته متن را ترجمه کنید
برای ترجمه یک رشته بین دو زبان:
یک شی
Translator
ایجاد کنید، آن را با زبان مبدأ و مقصد پیکربندی کنید:سویفت
// Create an English-German translator: let options = TranslatorOptions(sourceLanguage: .en, targetLanguage: .de) let englishGermanTranslator = NaturalLanguage.naturalLanguage().translator(options: options)
هدف-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. }
هدف-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. }];
مدل های زبان حدود 30 مگابایت هستند، بنابراین آنها را بیهوده دانلود نکنید و فقط با استفاده از وای فای آنها را دانلود کنید، مگر اینکه کاربر چیز دیگری را مشخص کرده باشد. همچنین باید مدل های غیر ضروری را حذف کنید. به مدیریت صریح مدلهای ترجمه مراجعه کنید.
پس از اینکه تأیید کردید مدل دانلود شده است، یک رشته از متن را به زبان مبدأ برای
translate(_:completion:)
:سویفت
englishGermanTranslator.translate(text) { translatedText, error in guard error == nil, let translatedText = translatedText else { return } // Translation succeeded. }
هدف-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، مدلهای ترجمهای را که میخواهید در دستگاه موجود باشد، مدیریت کنید. اگر میخواهید مدلها را زودتر از موعد دانلود کنید یا مدلهای غیر ضروری را از دستگاه حذف کنید، میتواند مفید باشد.
برای دریافت مدل های ترجمه ذخیره شده در دستگاه:
سویفت
let localModels = ModelManager.modelManager().downloadedTranslateModels
هدف-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.
}
هدف-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]
// ...
}
هدف-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];
}];