diff --git a/lib/components/google_translate.dart b/lib/components/google_translate.dart index 71f099a..1e26115 100644 --- a/lib/components/google_translate.dart +++ b/lib/components/google_translate.dart @@ -10,8 +10,10 @@ class GoogleTranslate { // apiKey: google cloud console api key @protected final String apiKey; + // sourceLanguage: language of you text to translate String? sourceLanguage; + // targetLanguage: language of your translated text String targetLanguage; @@ -57,4 +59,26 @@ class GoogleTranslate { apiKey: apiKey, ); } + + Future> translateAndDetect( + String text, { + String? sourceLanguage, + String? targetLanguage, + }) { + final source = sourceLanguage ?? this.sourceLanguage; + final target = targetLanguage ?? this.targetLanguage; + return _reopsitory.translateAndDetect( + text: text, + source: source, + target: target, + apiKey: apiKey, + ); + } + + Future detect(String text) { + return _reopsitory.detect( + text: text, + apiKey: apiKey, + ); + } } diff --git a/lib/extensions/string_extension.dart b/lib/extensions/string_extension.dart index 4834d2c..dd75a4c 100644 --- a/lib/extensions/string_extension.dart +++ b/lib/extensions/string_extension.dart @@ -12,4 +12,25 @@ extension Translate on String { targetLanguage: targetLanguage, ); } + + /// JSON representation + /// { + /// "detectedSourceLanguage": string, + /// "model": string, + /// "translatedText": string, + /// } + Future> translateAndDetect({ + String? sourceLanguage, + String? targetLanguage, + }) { + return GoogleTranslate().translateAndDetect( + this, + sourceLanguage: sourceLanguage, + targetLanguage: targetLanguage, + ); + } + + Future detect() { + return GoogleTranslate().detect(this); + } } diff --git a/lib/repositories/google_translate_repository.dart b/lib/repositories/google_translate_repository.dart index a590929..176d054 100644 --- a/lib/repositories/google_translate_repository.dart +++ b/lib/repositories/google_translate_repository.dart @@ -65,4 +65,65 @@ class GoogleTranslateReopsitory { } return text; } + + Future> translateAndDetect({ + required String text, + String? source, + required String target, + required String apiKey, + }) async { + await completer.future; + + try { + Response response = await _dio.get( + "language/translate/v2", + queryParameters: { + "key": apiKey, + "q": text, + "source": source, + "target": target, + "format": "text", + }, + ); + + if ((response.statusCode == 200 || response.statusCode == 304) && + response.data?["data"]?["translations"] != null && + response.data["data"]?["translations"]?.isNotEmpty) { + return response.data["data"]?["translations"].first; + } + } catch (e) { + debugPrint(e.toString()); + } + return { + "detectedSourceLanguage": "", + "model": "", + "translatedText": "", + }; + } + + Future detect({ + required String text, + required String apiKey, + }) async { + await completer.future; + + try { + Response response = await _dio.get( + "language/translate/v2/detect", + queryParameters: { + "key": apiKey, + "q": text, + }, + ); + + if ((response.statusCode == 200 || response.statusCode == 304) && + response.data["data"]?["detections"] != null && + response.data["data"]?["detections"]?.isNotEmpty) { + text = response.data["data"]?["detections"].first.first["language"]; + } + } catch (e) { + debugPrint(e.toString()); + } + return text; + } }