From 41a58f96a4fa75ba1d22e8ebc05c47d752d63743 Mon Sep 17 00:00:00 2001 From: A <> Date: Mon, 21 Nov 2022 00:33:35 +0000 Subject: [PATCH 1/3] add translate text support for ios --- translate-text/ios/TranslateText.m | 67 ++++++++++++++++++++++++++++-- 1 file changed, 64 insertions(+), 3 deletions(-) diff --git a/translate-text/ios/TranslateText.m b/translate-text/ios/TranslateText.m index 9acdd8a..6657cc2 100644 --- a/translate-text/ios/TranslateText.m +++ b/translate-text/ios/TranslateText.m @@ -2,15 +2,76 @@ #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"]; + + NSLog(@" text = %@",text); + + if (text == nil) { + reject(@"TEXT_TRANSLATE_FAILED", @"Text cannot be null", nil); + return; + } + + NSString *sourceLanguage = [optionsMap objectForKey:@"sourceLanguage"]; + NSString *targetLanguage = [optionsMap objectForKey:@"targetLanguage"]; + + NSLog(@" sourceLanguage = %@",sourceLanguage); + NSLog(@" targetLanguage = %@",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 From b54a906bcfb3b1784558c47436da48ae5bb560c6 Mon Sep 17 00:00:00 2001 From: A <> Date: Mon, 21 Nov 2022 00:46:57 +0000 Subject: [PATCH 2/3] update readme to include text translate ios checkmark --- 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 1539f8ac8d9cd85cc3fbe5244a82db1e17d51d79 Mon Sep 17 00:00:00 2001 From: andrewjb123 Date: Fri, 17 Oct 2025 02:55:18 +0100 Subject: [PATCH 3/3] Create package.json --- package.json | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 package.json diff --git a/package.json b/package.json new file mode 100644 index 0000000..449442f --- /dev/null +++ b/package.json @@ -0,0 +1,6 @@ +{ + "name": "text-translate-mlkit", + "version": "1.0.0", + "main": "index.js", + "license": "MIT" +}