يمكنك استخدام أدوات تعلّم الآلة لترجمة النصوص بين اللغات. يمكن الترجمة إلى أكثر من 50 لغة من خلال "حزمة تعلّم الآلة".
تجربة السمات والبيانات
- جرِّب نموذج التطبيق للاطّلاع على مثال حول استخدام واجهة برمجة التطبيقات هذه.
قبل البدء
- أدرِج مجموعات تعلّم الآلة التالية في Podfile:
pod 'GoogleMLKit/Translate', '3.2.0'
- بعد تثبيت أو تحديث مجموعات Pods لمشروعك، افتح مشروع Xcode باستخدام
.xcworkspace
. تتوفّر هذه الأداة في الإصدار 12.4 من Xcode أو إصدار أحدث.
ترجمة سلسلة من النص
لترجمة سلسلة بين لغتَين:
أنشِئ كائن
Translator
، واضبطه باستخدام اللغتَين المصدر والهدف: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];
إذا لم تكن تعرف لغة نص الإدخال، يمكنك استخدام Language Identification API لمنحك علامة لغة. بعد ذلك، عليك تحويل علامة اللغة إلى تعداد ML Kit. يعتمد الرمز على اللغة التي تستخدمها:
- Swift: اتصِل بالرقم
TranslateLanguage.fromLanguageTag()
للحصول علىTranslateLanguage
. - الهدف ج: الاتصال بـ
MLKTranslateLanguageForLanguageTag()
للحصول علىMLKTranslateLanguage
تجنَّب الاحتفاظ بعدد كبير جدًا من النماذج اللغوية على الجهاز في وقت واحد.
- Swift: اتصِل بالرقم
تأكَّد من تنزيل نموذج الترجمة المطلوب على الجهاز. لا تتصل
translate(_:completion:)
حتى تعرف أن النموذج متاح.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. }];
يبلغ حجم النماذج اللغوية حوالي 30 ميغابايت، لذا لا تنزّلها بدون داعٍ، واحرص على تنزيلها باستخدام شبكة Wi-Fi فقط ما لم يذكر المستخدم خلاف ذلك. وينبغي عليك حذف النماذج عندما لا تعود بحاجة إليها. يُرجى الاطّلاع على إدارة نماذج الترجمة بوضوح.
بعد التأكّد من تنزيل النموذج، مرِّر سلسلة من النص باللغة المصدر إلى
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. }];
تحوِّل أدوات تعلّم الآلة النص إلى اللغة الهدف التي تم ضبطها وتمرِّر النص المُترجَم إلى معالِج الإكمال.
يتم التحكم في دورات حياة المترجم من خلال تقنية ARC (الاحتساب التلقائي للمراجع)، وهو الاصطلاح الموصى به لتطوير نظام التشغيل iOS. من المتوقّع أن يتم نقل "المترجم" بعد إزالة جميع المراجع القوية.
يمكن أن تشغل أجهزة الترجمة مساحة من 30 إلى 150 ميغابايت عند تحميلها في الذاكرة. وعلى مطوّري البرامج مراعاة ميزانية الذاكرة للجهاز/التطبيق عند إنشاء مثيلات للترجمة المتزامنة وتجنُّب الاحتفاظ بعدد كبير جدًا من النماذج اللغوية على الجهاز في الوقت نفسه.
إدارة نماذج الترجمة بوضوح
عند استخدام واجهة برمجة تطبيقات الترجمة كما هو موضّح أعلاه، تعمل أدوات تعلّم الآلة تلقائيًا على تنزيل نماذج الترجمة الخاصة باللغات على الجهاز حسب الحاجة. يمكنك أيضًا إدارة نماذج الترجمة التي تريد توفيرها على الجهاز بشكل واضح، وذلك باستخدام واجهة برمجة التطبيقات لإدارة نماذج الترجمة في أدوات تعلّم الآلة. وقد يكون هذا الإجراء مفيدًا إذا كنت تريد تنزيل النماذج مسبقًا أو حذف النماذج غير الضرورية من الجهاز.
للحصول على نماذج الترجمة المخزَّنة على الجهاز:
Swift
let localModels = ModelManager.modelManager().downloadedTranslateModels
Objective-C
NSSet*localModels = [MLKModelManager modelManager].downloadedTranslateModels;
لحذف نموذج:
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.
لتنزيل نموذج:
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 ) )
إذا أردت معرفة حالة التنزيل من خلال 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] // ... }
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];
إذا أردت معرفة حالة التنزيل من خلال 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]; }];