@@ -6,10 +6,12 @@ import 'package:flutter_secure_storage/flutter_secure_storage.dart';
66import 'package:get_it/get_it.dart' ;
77import 'package:http_client/http_client.dart' ;
88import 'package:qack/constants/constants.dart' ;
9+ import 'package:qack/presentation/home/bloc/home_bloc.dart' ;
910import 'package:qack/presentation/home/models/baidu_translation.dart' ;
1011import 'package:qack/presentation/home/models/base_translation_details.dart' ;
1112import 'package:qack/presentation/home/models/deepseek_chat_completion.dart' ;
1213import 'package:qack/presentation/home/models/deepseek_message.dart' ;
14+ import 'package:qack/presentation/home/models/models.dart' ;
1315import 'package:qack/presentation/settings/models/models.dart' ;
1416
1517final class HomeRepository {
@@ -20,8 +22,6 @@ final class HomeRepository {
2022
2123 Stream <BaseTranslationDetails > translateText (
2224 String text, {
23- required String srcLanguage,
24- required String targetLanguage,
2525 required TranslatorSettings translatorSettings,
2626 }) async * {
2727 final enabledTranslators = translatorSettings.enabledTranslators;
@@ -34,6 +34,21 @@ final class HomeRepository {
3434
3535 final futures = < Future <BaseTranslationDetails >> [];
3636
37+ // Detect the source and target language
38+ final srcLanguage = _detectLanguage (text);
39+
40+ late final Language targetLanguage;
41+
42+ switch (srcLanguage) {
43+ case Language .chinese:
44+ targetLanguage = Language .english;
45+ case Language .english:
46+ targetLanguage = Language .chinese;
47+ case Language .auto:
48+ case Language .unknown:
49+ targetLanguage = Language .english;
50+ }
51+
3752 for (final translator in enabledTranslators) {
3853 switch (translator) {
3954 case Translator .google:
@@ -49,8 +64,8 @@ final class HomeRepository {
4964 text,
5065 httpClient,
5166 rootIsolateToken,
52- srcLanguage: srcLanguage,
53- targetLanguage: targetLanguage,
67+ srcLanguage: srcLanguage.code ?? Language .auto.code ! ,
68+ targetLanguage: targetLanguage.code ! ,
5469 translatorSettings: translatorSettings,
5570 ),
5671 ),
@@ -66,8 +81,8 @@ final class HomeRepository {
6681 rootIsolateToken,
6782 // src and target lang are manually set to auto
6883 // in [DeepseekChatCompletion]
69- srcLanguage: srcLanguage,
70- targetLanguage: targetLanguage,
84+ srcLanguage: srcLanguage.code ?? Language .auto.code ! ,
85+ targetLanguage: targetLanguage.code ! ,
7186 translatorSettings: translatorSettings,
7287 ),
7388 ),
@@ -179,8 +194,7 @@ final class HomeRepository {
179194 model: DeepSeekModel .chat,
180195 messages: [
181196 DeepSeekUserMessage (
182- uContent: 'Translate to English or Chinese. '
183- 'Only translate and do nothing else.'
197+ uContent: 'Translate to ${targetLanguage .toUpperCase ()}:'
184198 ' $inputText ' ,
185199 ),
186200 ],
@@ -204,4 +218,21 @@ final class HomeRepository {
204218 return DeepseekChatCompletion .error (e);
205219 }
206220 }
221+
222+ Language _detectLanguage (String text) {
223+ // detect chinese characters using regex
224+ final chineseRegex = RegExp (r'[\u4e00-\u9fff]' );
225+ final englishRegex = RegExp ('[a-zA-Z]' );
226+
227+ final totalChineseMatches = chineseRegex.allMatches (text);
228+ final totalEnglishMatches = englishRegex.allMatches (text);
229+
230+ if (totalChineseMatches.length > totalEnglishMatches.length) {
231+ return Language .chinese;
232+ } else if (totalEnglishMatches.length > totalChineseMatches.length) {
233+ return Language .english;
234+ } else {
235+ return Language .unknown;
236+ }
237+ }
207238}
0 commit comments