1+
12import androidx.compose.desktop.ui.tooling.preview.Preview
2- import androidx.compose.foundation.layout.*
3+ import androidx.compose.foundation.layout.Column
4+ import androidx.compose.foundation.layout.Row
5+ import androidx.compose.foundation.layout.fillMaxHeight
6+ import androidx.compose.foundation.layout.fillMaxSize
7+ import androidx.compose.foundation.layout.padding
38import androidx.compose.material.MaterialTheme
4- import androidx.compose.runtime.*
9+ import androidx.compose.runtime.Composable
10+ import androidx.compose.runtime.getValue
11+ import androidx.compose.runtime.mutableStateOf
12+ import androidx.compose.runtime.remember
13+ import androidx.compose.runtime.setValue
514import androidx.compose.ui.Modifier
6- import androidx.compose.ui.unit.*
7- import components.*
15+ import androidx.compose.ui.unit.dp
16+ import components.CustomButton
17+ import components.CustomTextField
18+ import components.SelectCountries
19+ import components.Toast
20+ import kotlinx.coroutines.CoroutineScope
21+ import kotlinx.coroutines.Dispatchers
22+ import kotlinx.coroutines.delay
23+ import kotlinx.coroutines.launch
24+ import translate.translateHttpURLConnection
25+ import utils.createOutputMainFolder
26+ import utils.createStringFolder
27+ import utils.defaultLanguageCode
28+ import utils.endResourcesWrite
829import utils.languageList
30+ import utils.readAllStrings
31+ import utils.startResourcesWrite
32+ import utils.stringWrite
33+ import java.net.URLEncoder
934
1035@Composable
1136@Preview
1237fun App () {
1338
1439 var isShowWindowState by remember { mutableStateOf(false ) }
15- var stringState by remember { mutableStateOf(" " ) }
40+ var stringState by remember {
41+ mutableStateOf(
42+ """
43+ <resources>
44+ <string name="video_directory" translatable="false">Video folder</string>
45+ <string name="extract_audio">Hello Meet</string>
46+ <string name="extract">How are You?</string>
47+ </resources>
48+ """ .trimIndent()
49+ )
50+ }
51+ // <string name="create_thumbnail">Save thumbnail</string>
52+ // <string name="settings">Settings</string>
53+ // <string name="download_settings_desc" translatable="false">General, format, custom command</string>
54+ // <string name="download">Download</string>
55+ // <string name="url_empty">The link cannot be empty</string>
56+ // <string name="extract_audio_summary">Download and save audio, instead of video</string>
57+ // <string name="create_thumbnail_summary" translatable="false">Save video thumbnail as a file</string>
58+ // <string name="yt_dlp_up_to_date">Using the latest version of yt-dlp</string>
59+
1660 var countryListState by remember { mutableStateOf(languageList) }
1761 var isShowToast by remember { mutableStateOf(false ) }
1862 var toastMessage by remember { mutableStateOf(" " ) }
19-
2063 MaterialTheme {
2164 Row (
2265 Modifier .fillMaxSize().padding(10 .dp)
@@ -36,7 +79,43 @@ fun App() {
3679 CustomButton (" Convert" ,
3780 isEnable = stringState.isNotEmpty() && countryListState.any { it.isChecked },
3881 onClick = {
39- println (countryListState.filter { it.isChecked })
82+ createOutputMainFolder()
83+ try {
84+ val allStrings = readAllStrings(stringState)
85+
86+ println (countryListState.filter { it.isChecked })
87+ countryListState.filter { it.isChecked }
88+ .forEachIndexed { index, language ->
89+ val stringFile =
90+ createStringFolder(language.code)
91+ stringFile.startResourcesWrite()
92+ for ((name, isTranslatable, textContent) in allStrings) {
93+ println (" Name: $name , isTranslatable: $isTranslatable , Text Content: $textContent " )
94+ if (isTranslatable) {
95+
96+ // stringFile.stringWrite(name, someConvertText.random())
97+ val convertedString = translateHttpURLConnection(
98+ URLEncoder .encode(textContent, " UTF-8" ),
99+ URLEncoder .encode(defaultLanguageCode, " UTF-8" ),
100+ URLEncoder .encode(language.code, " UTF-8" ),
101+ ) {
102+ isShowToast = true
103+ toastMessage = it
104+ CoroutineScope (Dispatchers .IO ).launch {
105+ delay(3000 )
106+ isShowToast = false
107+ }
108+ }
109+ stringFile.stringWrite(name, convertedString)
110+ } else {
111+ stringFile.stringWrite(name, textContent, false )
112+ }
113+ }
114+ stringFile.endResourcesWrite()
115+ }
116+ } catch (e: Exception ) {
117+ e.printStackTrace()
118+ }
40119 })
41120 }
42121 }
@@ -53,12 +132,12 @@ fun App() {
53132 }
54133}
55134
56- fun showToast () {
135+ // fun showToast() {
57136// isShowToast = true
58137// toastMessage = "This is a toast message!"
59138// // Delay to simulate a real-world scenario
60139// CoroutineScope(Dispatchers.IO).launch {
61140// delay(3000)
62141// isShowToast = false
63142// }
64- }
143+ // }
0 commit comments