From d5c256a1bad7cf90c811e607a3b72b19017f2d86 Mon Sep 17 00:00:00 2001 From: Rutvik Nabhoya <67455469+rutvik24@users.noreply.github.com> Date: Mon, 9 Oct 2023 09:36:08 +0530 Subject: [PATCH 1/2] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 05fffec..7ffb926 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ React Native On-Device Machine Learning w/ Google ML Kit | [Face Detection](./face-detection) | ✅ | ✅ | | [Text Recognition](./text-recognition) | ✅ | ✅ | | [Barcode Scanning](./barcode-scanning) | ✅ | ✅ | -| [Translate Text](./translate-text) | ✅ | ❌ | +| [Translate Text](./translate-text) | ✅ | ✅ | | Object Detection and Tracking | ❌ | ❌ | | Digital Ink Recognition | ❌ | ❌ | | Smart Replies | ❌ | ❌ | From 1c9ee5ab8448a0b9b2143e27096d36a76fb2bc40 Mon Sep 17 00:00:00 2001 From: Rutvik Nabhoya <67455469+rutvik24@users.noreply.github.com> Date: Mon, 9 Oct 2023 09:39:24 +0530 Subject: [PATCH 2/2] Update TranslateText.m Added translation support for the iOS --- translate-text/ios/TranslateText.m | 63 ++++++++++++++++++++++++++++-- 1 file changed, 60 insertions(+), 3 deletions(-) diff --git a/translate-text/ios/TranslateText.m b/translate-text/ios/TranslateText.m index 9acdd8a..adcf00b 100644 --- a/translate-text/ios/TranslateText.m +++ b/translate-text/ios/TranslateText.m @@ -2,15 +2,72 @@ #import "TranslateText.h" +@import MLKitTranslate; +@import MLKitCommon; + @implementation TranslateText RCT_EXPORT_MODULE() -RCT_EXPORT_METHOD(sampleMethod:(NSString *)stringArgument numberParameter:(nonnull NSNumber *)numberArgument callback:(RCTResponseSenderBlock)callback) +RCT_EXPORT_METHOD(translate:(NSDictionary *)optionsMap + resolver:(RCTPromiseResolveBlock)resolve + rejecter:(RCTPromiseRejectBlock)reject) { - // TODO: Implement some actually useful functionality - callback(@[[NSString stringWithFormat: @"numberArgument: %@ stringArgument: %@", numberArgument, stringArgument]]); + NSString *text = [optionsMap objectForKey:@"text"]; + + if (text == nil) { + reject(@"TEXT_TRANSLATE_FAILED", @"Text cannot be null", nil); + return; + } + + NSString *sourceLanguage = [optionsMap objectForKey:@"sourceLanguage"]; + NSString *targetLanguage = [optionsMap objectForKey:@"targetLanguage"]; + + if (sourceLanguage == nil) { + reject(@"TEXT_TRANSLATE_FAILED", @"Source language cannot be null", nil); + return; + } + + if (targetLanguage == nil) { + reject(@"TEXT_TRANSLATE_FAILED", @"Target language cannot be null", nil); + return; + } + + MLKTranslatorOptions *options = [[MLKTranslatorOptions alloc] + initWithSourceLanguage:sourceLanguage + targetLanguage:targetLanguage]; + + MLKTranslator *translator = [MLKTranslator + translatorWithOptions:options]; + + bool hasRequireWifi = [optionsMap objectForKey:@"requireWifi"]; + + MLKModelDownloadConditions *conditions = [[MLKModelDownloadConditions alloc] + initWithAllowsCellularAccess:!hasRequireWifi + allowsBackgroundDownloading:YES]; + + [translator + downloadModelIfNeededWithConditions:conditions + completion:^(NSError *_Nullable error) { + + if (error != nil) { + reject(@"TEXT_TRANSLATE_FAILED", @"Error was found", error); + return; + } + + [translator + translateText:text + completion:^(NSString *_Nullable translatedText, NSError *_Nullable error) + { + if (error != nil || translatedText == nil) { + reject(@"TEXT_TRANSLATE_FAILED", @"Error was found", error); + return; + } + + resolve(translatedText); + }]; + }]; } @end