@@ -52,6 +52,7 @@ import com.airsaid.localization.utils.LanguageUtil
5252import com.intellij.ide.util.PropertiesComponent
5353import com.intellij.openapi.options.ShowSettingsUtil
5454import com.intellij.openapi.project.Project
55+ import com.intellij.openapi.vfs.VirtualFile
5556import java.awt.Dimension
5657import java.awt.Toolkit
5758import kotlin.math.roundToInt
@@ -84,8 +85,10 @@ class SelectLanguagesDialog(private val project: Project) : ComposeDialog(projec
8485 private val selectedLanguages = mutableStateListOf<Lang >()
8586 private val overwriteExistingState = mutableStateOf(false )
8687 private val openTranslatedFileState = mutableStateOf(false )
88+ private val autoSelectExistingState = mutableStateOf(false )
8789
8890 private var stateInitialized by mutableStateOf(false )
91+ private var resourceDir: VirtualFile ? = null
8992
9093 private var onClickListener: OnClickListener ? = null
9194
@@ -102,6 +105,15 @@ class SelectLanguagesDialog(private val project: Project) : ComposeDialog(projec
102105 onClickListener = listener
103106 }
104107
108+ /* *
109+ * Sets the resource directory to enable auto-selecting existing languages.
110+ *
111+ * @param resourceDir The resource directory containing values folders.
112+ */
113+ fun setResourceDir (resourceDir : VirtualFile ) {
114+ this .resourceDir = resourceDir
115+ }
116+
105117 @Composable
106118 override fun Content () {
107119 LaunchedEffect (Unit ) {
@@ -110,6 +122,13 @@ class SelectLanguagesDialog(private val project: Project) : ComposeDialog(projec
110122 }
111123 }
112124
125+ // Monitor changes to auto-select setting
126+ LaunchedEffect (autoSelectExistingState.value) {
127+ if (stateInitialized && autoSelectExistingState.value) {
128+ selectExistingLanguages()
129+ }
130+ }
131+
113132 if (! stateInitialized) {
114133 Box (modifier = Modifier .fillMaxSize(), contentAlignment = Alignment .Center ) {
115134 CircularProgressIndicator ()
@@ -132,10 +151,13 @@ class SelectLanguagesDialog(private val project: Project) : ComposeDialog(projec
132151 selectedLanguages = selectedLanguages,
133152 overwriteExistingChecked = overwriteExistingState.value,
134153 openTranslatedFileChecked = openTranslatedFileState.value,
154+ autoSelectExistingChecked = autoSelectExistingState.value,
155+ hasResourceDir = resourceDir != null ,
135156 onSelectAllChanged = { selectAll(languages, it) },
136157 onFavoriteSelectAllChanged = { selectAll(favoriteLanguages, it) },
137158 onOverwriteChanged = { checked -> overwriteExistingState.value = checked },
138159 onOpenTranslatedFileChanged = { checked -> openTranslatedFileState.value = checked },
160+ onAutoSelectExistingChanged = { checked -> autoSelectExistingState.value = checked },
139161 onLanguageToggled = { lang, checked -> selectLanguage(lang, checked) },
140162 onFavoriteToggle = { lang, isFavorite -> setFavoriteLanguage(lang, isFavorite) },
141163 onOpenSettings = { openPluginSettings() },
@@ -146,6 +168,7 @@ class SelectLanguagesDialog(private val project: Project) : ComposeDialog(projec
146168 LanguageUtil .saveSelectedLanguages(project, selectedLanguages)
147169 properties().setValue(Constants .KEY_IS_OVERWRITE_EXISTING_STRING , overwriteExistingState.value)
148170 properties().setValue(Constants .KEY_IS_OPEN_TRANSLATED_FILE , openTranslatedFileState.value)
171+ properties().setValue(Constants .KEY_IS_AUTO_SELECT_EXISTING , autoSelectExistingState.value)
149172 onClickListener?.onClickListener(selectedLanguages.toList())
150173 }
151174
@@ -183,6 +206,12 @@ class SelectLanguagesDialog(private val project: Project) : ComposeDialog(projec
183206
184207 overwriteExistingState.value = properties.getBoolean(Constants .KEY_IS_OVERWRITE_EXISTING_STRING )
185208 openTranslatedFileState.value = properties.getBoolean(Constants .KEY_IS_OPEN_TRANSLATED_FILE )
209+ autoSelectExistingState.value = properties.getBoolean(Constants .KEY_IS_AUTO_SELECT_EXISTING )
210+
211+ // If auto-select existing languages is enabled and resource directory is available, auto-select existing languages
212+ if (autoSelectExistingState.value) {
213+ selectExistingLanguages()
214+ }
186215
187216 stateInitialized = true
188217 }
@@ -216,6 +245,15 @@ class SelectLanguagesDialog(private val project: Project) : ComposeDialog(projec
216245 LanguageUtil .saveFavoriteLanguages(project, favoriteLanguages)
217246 }
218247
248+ private fun selectExistingLanguages () {
249+ resourceDir?.let { resDir ->
250+ val existingLanguages = LanguageUtil .getExistingProjectLanguages(resDir, supportedLanguages)
251+ existingLanguages.forEach { lang ->
252+ selectLanguage(lang, true )
253+ }
254+ }
255+ }
256+
219257 private fun properties (): PropertiesComponent {
220258 return PropertiesComponent .getInstance(project)
221259 }
@@ -254,10 +292,13 @@ private fun SelectLanguagesContent(
254292 selectedLanguages : SnapshotStateList <Lang >,
255293 overwriteExistingChecked : Boolean ,
256294 openTranslatedFileChecked : Boolean ,
295+ autoSelectExistingChecked : Boolean ,
296+ hasResourceDir : Boolean ,
257297 onSelectAllChanged : (Boolean ) -> Unit ,
258298 onFavoriteSelectAllChanged : (Boolean ) -> Unit ,
259299 onOverwriteChanged : (Boolean ) -> Unit ,
260300 onOpenTranslatedFileChanged : (Boolean ) -> Unit ,
301+ onAutoSelectExistingChanged : (Boolean ) -> Unit ,
261302 onLanguageToggled : (Lang , Boolean ) -> Unit ,
262303 onFavoriteToggle : (Lang , Boolean ) -> Unit ,
263304 onOpenSettings : () -> Unit ,
@@ -282,10 +323,13 @@ private fun SelectLanguagesContent(
282323 favoriteSelectAll = favoriteSelectAllChecked,
283324 overwriteExisting = overwriteExistingChecked,
284325 openTranslatedFile = openTranslatedFileChecked,
326+ autoSelectExisting = autoSelectExistingChecked,
327+ hasResourceDir = hasResourceDir,
285328 onSelectAllChanged = onSelectAllChanged,
286329 onFavoriteSelectAllChanged = onFavoriteSelectAllChanged,
287330 onOverwriteChanged = onOverwriteChanged,
288331 onOpenTranslatedFileChanged = onOpenTranslatedFileChanged,
332+ onAutoSelectExistingChanged = onAutoSelectExistingChanged,
289333 onLanguageToggled = onLanguageToggled,
290334 onFavoriteToggle = onFavoriteToggle,
291335 modifier = Modifier .weight(1f , fill = true ),
@@ -307,10 +351,13 @@ private fun LanguagesCard(
307351 favoriteSelectAll : Boolean ,
308352 overwriteExisting : Boolean ,
309353 openTranslatedFile : Boolean ,
354+ autoSelectExisting : Boolean ,
355+ hasResourceDir : Boolean ,
310356 onSelectAllChanged : (Boolean ) -> Unit ,
311357 onFavoriteSelectAllChanged : (Boolean ) -> Unit ,
312358 onOverwriteChanged : (Boolean ) -> Unit ,
313359 onOpenTranslatedFileChanged : (Boolean ) -> Unit ,
360+ onAutoSelectExistingChanged : (Boolean ) -> Unit ,
314361 onLanguageToggled : (Lang , Boolean ) -> Unit ,
315362 onFavoriteToggle : (Lang , Boolean ) -> Unit ,
316363 modifier : Modifier = Modifier ,
@@ -361,6 +408,9 @@ private fun LanguagesCard(
361408 onOverwriteChanged = onOverwriteChanged,
362409 openTranslatedFile = openTranslatedFile,
363410 onOpenTranslatedFileChanged = onOpenTranslatedFileChanged,
411+ autoSelectExisting = autoSelectExisting,
412+ hasResourceDir = hasResourceDir,
413+ onAutoSelectExistingChanged = onAutoSelectExistingChanged,
364414 )
365415
366416 OutlinedTextField (
@@ -530,6 +580,9 @@ private fun OptionsSection(
530580 onOverwriteChanged : (Boolean ) -> Unit ,
531581 openTranslatedFile : Boolean ,
532582 onOpenTranslatedFileChanged : (Boolean ) -> Unit ,
583+ autoSelectExisting : Boolean ,
584+ hasResourceDir : Boolean ,
585+ onAutoSelectExistingChanged : (Boolean ) -> Unit ,
533586) {
534587 FlowRow (
535588 horizontalArrangement = Arrangement .spacedBy(16 .dp),
@@ -547,6 +600,14 @@ private fun OptionsSection(
547600 checked = openTranslatedFile,
548601 onCheckedChange = onOpenTranslatedFileChanged,
549602 )
603+ if (hasResourceDir) {
604+ OptionItem (
605+ text = " Auto-select existing languages" ,
606+ tooltip = " Automatically select languages that already exist in your project when opening this dialog." ,
607+ checked = autoSelectExisting,
608+ onCheckedChange = onAutoSelectExistingChanged,
609+ )
610+ }
550611 }
551612}
552613
0 commit comments