Skip to content

Commit 8a9cc4d

Browse files
committed
Refactor: Externalize strings for UI components
This commit externalizes user-facing strings in various UI components across the app, including Workspace Manager, Explorer, Searcher, Editor, and Settings screens. It replaces hardcoded strings with string resources for better localization and maintainability.
1 parent 63a178a commit 8a9cc4d

21 files changed

Lines changed: 170 additions & 62 deletions

File tree

app-workspace-editor/src/main/java/eu/darken/butler/editor/ui/editor/EditorWorkspacePage.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ fun EditorWorkspacePage(
163163
// Header that draws under status bar
164164
EditorHeader(
165165
design = design,
166-
fileName = state.fileName,
166+
fileName = if (state.hasFile) state.fileName else stringResource(R.string.editor_file_untitled),
167167
isModified = state.isModified,
168168
hasFile = state.hasFile || state.currentContent.isNotEmpty(),
169169
isLoading = state.isLoading,

app-workspace-editor/src/main/res/values/strings.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,4 +47,7 @@
4747
<string name="editor_dialog_search_label">Search text</string>
4848
<string name="editor_dialog_action_go">Go</string>
4949
<string name="editor_dialog_action_cancel">Cancel</string>
50+
51+
<!-- Editor File Names -->
52+
<string name="editor_file_untitled">Untitled</string>
5053
</resources>

app-workspace-explorer/src/main/java/eu/darken/butler/explorer/ui/explorer/rows/ApkFileRow.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,12 @@ import androidx.compose.material3.Icon
77
import androidx.compose.material3.MaterialTheme
88
import androidx.compose.runtime.Composable
99
import androidx.compose.ui.Modifier
10+
import androidx.compose.ui.res.stringResource
1011
import androidx.compose.ui.unit.dp
1112
import eu.darken.butler.common.compose.Preview2
13+
import eu.darken.butler.explorer.R
1214
import eu.darken.butler.explorer.core.engine.ExplorerPathItem
1315
import eu.darken.butler.explorer.ui.explorer.preview.MockDataProvider
14-
import eu.darken.butler.explorer.ui.explorer.rows.FileRowBase
1516

1617
@Composable
1718
internal fun ApkFileRow(
@@ -33,7 +34,7 @@ internal fun ApkFileRow(
3334
// TODO: Replace with AsyncImage when Coil integration is complete
3435
Icon(
3536
imageVector = Icons.Default.Android,
36-
contentDescription = "APK file",
37+
contentDescription = stringResource(R.string.explorer_file_apk_content_desc),
3738
tint = MaterialTheme.colorScheme.tertiary,
3839
modifier = Modifier.size(32.dp)
3940
)

app-workspace-explorer/src/main/java/eu/darken/butler/explorer/ui/explorer/rows/ArchiveFileRow.kt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@ import androidx.compose.material3.Icon
77
import androidx.compose.material3.MaterialTheme
88
import androidx.compose.runtime.Composable
99
import androidx.compose.ui.Modifier
10+
import androidx.compose.ui.res.stringResource
1011
import androidx.compose.ui.unit.dp
1112
import eu.darken.butler.common.compose.Preview2
13+
import eu.darken.butler.explorer.R
1214
import eu.darken.butler.explorer.core.engine.ExplorerPathItem
1315
import eu.darken.butler.explorer.ui.explorer.preview.MockDataProvider
1416

@@ -31,15 +33,15 @@ internal fun ArchiveFileRow(
3133
leadingContent = {
3234
Icon(
3335
imageVector = Icons.Default.Archive,
34-
contentDescription = "Archive",
36+
contentDescription = stringResource(R.string.explorer_file_archive_content_desc),
3537
tint = MaterialTheme.colorScheme.tertiary,
3638
modifier = Modifier.size(32.dp)
3739
)
3840
},
3941
primaryText = item.displayName,
4042
secondaryText = buildString {
41-
item.entryCount?.let {
42-
append("$it items")
43+
item.entryCount?.let {
44+
append(stringResource(R.string.explorer_file_items_count, it))
4345
append("")
4446
}
4547
append(item.displaySize)

app-workspace-explorer/src/main/java/eu/darken/butler/explorer/ui/explorer/rows/DirectoryRow.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@ import androidx.compose.material3.Icon
77
import androidx.compose.material3.MaterialTheme
88
import androidx.compose.runtime.Composable
99
import androidx.compose.ui.Modifier
10+
import androidx.compose.ui.res.stringResource
1011
import androidx.compose.ui.unit.dp
1112
import eu.darken.butler.common.compose.Preview2
13+
import eu.darken.butler.explorer.R
1214
import eu.darken.butler.explorer.core.engine.ExplorerPathItem
1315
import eu.darken.butler.explorer.ui.explorer.preview.MockDataProvider
1416

@@ -31,15 +33,15 @@ internal fun DirectoryRow(
3133
leadingContent = {
3234
Icon(
3335
imageVector = Icons.Default.Folder,
34-
contentDescription = "Folder",
36+
contentDescription = stringResource(R.string.explorer_file_folder_content_desc),
3537
tint = MaterialTheme.colorScheme.primary,
3638
modifier = Modifier.size(32.dp)
3739
)
3840
},
3941
primaryText = item.displayName,
4042
secondaryText = buildString {
4143
item.childCount?.let { count ->
42-
append("$count items")
44+
append(stringResource(R.string.explorer_file_items_count, count))
4345
append("")
4446
}
4547
append(item.displayDate)

app-workspace-explorer/src/main/java/eu/darken/butler/explorer/ui/explorer/rows/DocumentFileRow.kt

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@ import androidx.compose.material3.Icon
77
import androidx.compose.material3.MaterialTheme
88
import androidx.compose.runtime.Composable
99
import androidx.compose.ui.Modifier
10+
import androidx.compose.ui.res.stringResource
1011
import androidx.compose.ui.unit.dp
1112
import eu.darken.butler.common.compose.Preview2
13+
import eu.darken.butler.explorer.R
1214
import eu.darken.butler.explorer.core.engine.ExplorerPathItem
1315
import eu.darken.butler.explorer.ui.explorer.preview.MockDataProvider
1416

@@ -31,15 +33,15 @@ internal fun DocumentFileRow(
3133
leadingContent = {
3234
Icon(
3335
imageVector = Icons.Default.Description,
34-
contentDescription = "Document",
36+
contentDescription = stringResource(R.string.explorer_file_document_content_desc),
3537
tint = MaterialTheme.colorScheme.outline,
3638
modifier = Modifier.size(32.dp)
3739
)
3840
},
3941
primaryText = item.displayName,
4042
secondaryText = buildString {
41-
item.pageCount?.let {
42-
append("$it pages")
43+
item.pageCount?.let {
44+
append(stringResource(R.string.explorer_file_pages_count, it))
4345
append("")
4446
}
4547
append(item.displaySize)

app-workspace-explorer/src/main/java/eu/darken/butler/explorer/ui/explorer/rows/ImageFileRow.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@ import androidx.compose.material3.Icon
77
import androidx.compose.material3.MaterialTheme
88
import androidx.compose.runtime.Composable
99
import androidx.compose.ui.Modifier
10+
import androidx.compose.ui.res.stringResource
1011
import androidx.compose.ui.unit.dp
1112
import eu.darken.butler.common.compose.Preview2
13+
import eu.darken.butler.explorer.R
1214
import eu.darken.butler.explorer.core.engine.ExplorerPathItem
1315
import eu.darken.butler.explorer.ui.explorer.preview.MockDataProvider
1416

@@ -32,7 +34,7 @@ internal fun ImageFileRow(
3234
// TODO: Replace with AsyncImage when Coil integration is complete
3335
Icon(
3436
imageVector = Icons.Default.Image,
35-
contentDescription = "Image",
37+
contentDescription = stringResource(R.string.explorer_file_image_content_desc),
3638
tint = MaterialTheme.colorScheme.secondary,
3739
modifier = Modifier.size(32.dp)
3840
)

app-workspace-explorer/src/main/java/eu/darken/butler/explorer/ui/explorer/rows/MediaFileRow.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,10 @@ import androidx.compose.material3.Icon
88
import androidx.compose.material3.MaterialTheme
99
import androidx.compose.runtime.Composable
1010
import androidx.compose.ui.Modifier
11+
import androidx.compose.ui.res.stringResource
1112
import androidx.compose.ui.unit.dp
1213
import eu.darken.butler.common.compose.Preview2
14+
import eu.darken.butler.explorer.R
1315
import eu.darken.butler.explorer.core.engine.ExplorerPathItem
1416
import eu.darken.butler.explorer.ui.explorer.preview.MockDataProvider
1517

@@ -34,14 +36,14 @@ internal fun MediaFileRow(
3436
// TODO: Replace with AsyncImage when Coil integration is complete
3537
Icon(
3638
imageVector = Icons.Default.Movie,
37-
contentDescription = "Video file",
39+
contentDescription = stringResource(R.string.explorer_file_video_content_desc),
3840
tint = MaterialTheme.colorScheme.secondary,
3941
modifier = Modifier.size(32.dp)
4042
)
4143
} else {
4244
Icon(
4345
imageVector = Icons.Default.MusicNote,
44-
contentDescription = "Audio file",
46+
contentDescription = stringResource(R.string.explorer_file_audio_content_desc),
4547
tint = MaterialTheme.colorScheme.secondary,
4648
modifier = Modifier.size(32.dp)
4749
)

app-workspace-explorer/src/main/java/eu/darken/butler/explorer/ui/explorer/rows/RegularFileRow.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@ import androidx.compose.material3.Icon
77
import androidx.compose.material3.MaterialTheme
88
import androidx.compose.runtime.Composable
99
import androidx.compose.ui.Modifier
10+
import androidx.compose.ui.res.stringResource
1011
import androidx.compose.ui.unit.dp
1112
import eu.darken.butler.common.compose.Preview2
13+
import eu.darken.butler.explorer.R
1214
import eu.darken.butler.explorer.core.engine.ExplorerPathItem
1315
import eu.darken.butler.explorer.ui.explorer.preview.MockDataProvider
1416

@@ -31,7 +33,7 @@ internal fun RegularFileRow(
3133
leadingContent = {
3234
Icon(
3335
imageVector = Icons.AutoMirrored.Filled.InsertDriveFile,
34-
contentDescription = "File",
36+
contentDescription = stringResource(R.string.explorer_file_regular_content_desc),
3537
tint = MaterialTheme.colorScheme.onSurfaceVariant,
3638
modifier = Modifier.size(32.dp)
3739
)

app-workspace-explorer/src/main/java/eu/darken/butler/explorer/ui/explorer/rows/ShortcutRow.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@ import androidx.compose.ui.Alignment
2121
import androidx.compose.ui.Modifier
2222
import androidx.compose.ui.draw.clip
2323
import androidx.compose.ui.platform.LocalContext
24+
import androidx.compose.ui.res.stringResource
2425
import androidx.compose.ui.unit.dp
26+
import eu.darken.butler.explorer.R
2527
import eu.darken.butler.explorer.core.engine.ExplorerPathItem
2628

2729
@Composable
@@ -79,7 +81,7 @@ fun ShortcutRow(
7981
color = MaterialTheme.colorScheme.onSurface
8082
)
8183
Text(
82-
text = "Shortcut",
84+
text = stringResource(R.string.explorer_file_shortcut_label),
8385
style = MaterialTheme.typography.bodySmall,
8486
color = MaterialTheme.colorScheme.onSurfaceVariant
8587
)

0 commit comments

Comments
 (0)