يمكنك استخدام حزمة تعلّم الآلة لترجمة النص بين اللغات. حزمة تعلُّم الآلة يمكنها الترجمة بين أكثر من 50 لغة.
جرّبه الآن
- يمكنك تجربة نموذج التطبيق من أجل يمكنك الاطّلاع على مثال حول استخدام واجهة برمجة التطبيقات هذه.
قبل البدء
- تضمين مجموعات ML Kit التالية في Podfile:
pod 'GoogleMLKit/Translate', '3.2.0'
- بعد تثبيت لوحات مشروعك أو تحديثها، افتح مشروع 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];
إذا كنت لا تعرف لغة النص المُدخَل، يمكنك استخدام قائمة اللغة واجهة برمجة تطبيقات التعريف التي علامة لغة. ثم حوّل علامة اللغة إلى تعداد حزمة تعلّم الآلة. تعتمد الرموز على اللغة التي تستخدمها:
- 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 ميغابايت عند تحميلها في الذاكرة. على المطوّرين ضع في اعتبارك ميزانية ذاكرة الجهاز/التطبيق عند إنشاء النُسخ الافتراضية من المترجم وتجنب الاحتفاظ بعدد كبير جدًا من النماذج اللغوية على الجهاز دفعة واحدة.
إدارة نماذج الترجمة بوضوح
عند استخدام واجهة برمجة التطبيقات للترجمة كما هو موضّح أعلاه، يتم تلقائيًا استخدام حزمة تعلُّم الآلة يتم تنزيل نماذج الترجمة الخاصة بكل لغة على الجهاز حسب الحاجة. إِنْتَ أيضًا إدارة نماذج الترجمة التي تريدها أن تكون متاحة على باستخدام واجهة برمجة التطبيقات لإدارة نموذج الترجمة في ML Kit. يمكن أن تظهر فائدة هذا بوضوح أكبر مفيدة إذا كنت ترغب في تنزيل النماذج مسبقًا، أو حذف النماذج غير اللازمة من الجهاز.
لتخزين نماذج الترجمة على الجهاز:
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]; }];