میتوانید از ML Kit برای ترجمه متن بین زبانها استفاده کنید. کیت ML می تواند بین بیش از 50 زبان ترجمه کند.
آن را امتحان کنید
- با برنامه نمونه بازی کنید تا نمونه استفاده از این API را ببینید.
قبل از شروع
- پادهای کیت ML زیر را در فایل پادفایل خود قرار دهید:
pod 'GoogleMLKit/Translate', '3.2.0'
- پس از نصب یا به روز رسانی Pods پروژه خود، پروژه Xcode خود را با استفاده از
.xcworkspace
. آن باز کنید. کیت ML در Xcode نسخه 12.4 یا بالاتر پشتیبانی می شود.
یک رشته متن را ترجمه کنید
برای ترجمه یک رشته بین دو زبان:
یک شی
Translator
ایجاد کنید، آن را با زبان مبدأ و مقصد پیکربندی کنید:سویفت
// Create an English-German translator: let options = TranslatorOptions(sourceLanguage: .english, targetLanguage: .german) let englishGermanTranslator = Translator.translator(options: options)
هدف-C
// Create an English-German translator: MLKTranslatorOptions *options = [[MLKTranslatorOptions alloc] initWithSourceLanguage:MLKTranslateLanguageEnglish targetLanguage:MLKTranslateLanguageGerman]; MLKTranslator *englishGermanTranslator = [MLKTranslator translatorwithOptions:options];
اگر زبان متن ورودی را نمی دانید، می توانید از API شناسایی زبان استفاده کنید که به شما یک برچسب زبان می دهد. سپس تگ زبان را به یک ML Kit enum تبدیل کنید. کد به زبانی که استفاده می کنید بستگی دارد:
- Swift: برای دریافت
TranslateLanguage
TranslateLanguage.fromLanguageTag()
تماس بگیرید - Objective-C: برای دریافت
MLKTranslateLanguage
MLKTranslateLanguageForLanguageTag()
فراخوانی کنید.
از نگهداشتن چندین مدل زبان بهطور همزمان روی دستگاه خودداری کنید.
- Swift: برای دریافت
مطمئن شوید که مدل ترجمه مورد نیاز در دستگاه دانلود شده است. تا زمانی که مدل در دسترس است،
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
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. }];
مدل های زبان حدود 30 مگابایت هستند، بنابراین آنها را بیهوده دانلود نکنید و فقط با استفاده از Wi-Fi آنها را دانلود کنید، مگر اینکه کاربر چیز دیگری را مشخص کرده باشد. شما باید مدل ها را زمانی که دیگر مورد نیاز نیستند حذف کنید. به مدیریت صریح مدلهای ترجمه مراجعه کنید.
پس از اینکه تأیید کردید مدل دانلود شده است، یک رشته از متن را به زبان مبدأ برای
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 متن را به زبان مقصدی که پیکربندی کردهاید ترجمه میکند و متن ترجمهشده را به کنترلکننده تکمیل ارسال میکند.
چرخه عمر مترجم توسط ARC (شمارش خودکار مراجع) کنترل می شود، که کنوانسیون توصیه شده برای توسعه iOS است. توسعهدهندگان میتوانند انتظار داشته باشند که مترجم پس از حذف همه مراجع قوی، اختصاص داده شود.
مترجم ها می توانند 30 مگابایت تا 150 مگابایت را در هنگام بارگیری در حافظه اشغال کنند. برنامهنویسان باید هنگام ایجاد نمونههای مترجم همزمان، بودجه حافظه دستگاه/برنامه را در نظر داشته باشند و از نگهداشتن مدلهای زبانی بیش از حد به طور همزمان در دستگاه خودداری کنند.
مدل های ترجمه را به صراحت مدیریت کنید
هنگامی که از API ترجمه همانطور که در بالا توضیح داده شد استفاده می کنید، ML Kit به طور خودکار مدل های ترجمه خاص زبان را در صورت لزوم در دستگاه دانلود می کند. همچنین میتوانید با استفاده از API مدیریت مدل ترجمه کیت ML، مدلهای ترجمهای را که میخواهید در دستگاه موجود باشد، مدیریت کنید. اگر میخواهید مدلها را زودتر از موعد دانلود کنید یا مدلهای غیر ضروری را از دستگاه حذف کنید، میتواند مفید باشد.
برای دریافت مدل های ترجمه ذخیره شده در دستگاه:
سویفت
let localModels = ModelManager.modelManager().downloadedTranslateModels
هدف-C
NSSet*localModels = [MLKModelManager modelManager].downloadedTranslateModels;
برای حذف یک مدل:
سویفت
// 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. }
هدف-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.
برای دانلود مدل:
سویفت
// 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 ) )
اگر می خواهید وضعیت دانلود را با NotificationCenter
دریافت کنید، ناظران را برای mlkitModelDownloadDidSucceed
و mlkitModelDownloadDidFail
ثبت کنید. مطمئن شوید که از یک مرجع ضعیف به self
در بلوک ناظر استفاده کنید، زیرا دانلودها ممکن است مدتی طول بکشد، و شی مبدا میتواند تا پایان دانلود آزاد شود. به عنوان مثال:
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] // ... }
هدف-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];
اگر می خواهید وضعیت دانلود را با NSNotificationCenter
دریافت کنید، ناظران را برای MLKModelDownloadDidSucceedNotification
و MLKModelDownloadDidFailNotification
ثبت کنید. مطمئن شوید که از یک مرجع ضعیف به self
در بلوک ناظر استفاده کنید، زیرا دانلودها ممکن است مدتی طول بکشد، و شی مبدا میتواند تا پایان دانلود آزاد شود.
__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]; }];