diff --git a/androidVariant/src/main/java/org/comixedproject/variant/android/view/VariantAppTopBar.kt b/androidVariant/src/main/java/org/comixedproject/variant/android/view/VariantAppTopBar.kt index eeb8267..cc835a9 100644 --- a/androidVariant/src/main/java/org/comixedproject/variant/android/view/VariantAppTopBar.kt +++ b/androidVariant/src/main/java/org/comixedproject/variant/android/view/VariantAppTopBar.kt @@ -18,10 +18,6 @@ package org.comixedproject.variant.android.view -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.rounded.AccountCircle -import androidx.compose.material.icons.rounded.Home -import androidx.compose.material.icons.rounded.Settings import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon import androidx.compose.material3.IconButton @@ -29,6 +25,7 @@ import androidx.compose.material3.Text import androidx.compose.material3.TopAppBar import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import org.comixedproject.variant.android.R @@ -49,21 +46,21 @@ fun VariantTopAppBar( actions = { IconButton(onClick = { onBrowseComics() }) { Icon( - imageVector = Icons.Rounded.Home, + painterResource(R.drawable.ic_comic_library), contentDescription = stringResource(R.string.browseServerDestinationLabel) ) } IconButton(onClick = { onBrowseServer() }) { Icon( - imageVector = Icons.Rounded.AccountCircle, + painterResource(R.drawable.ic_browse_library), contentDescription = stringResource(R.string.browseServerDestinationLabel) ) } IconButton(onClick = { onUpdateSettings() }) { Icon( - imageVector = Icons.Rounded.Settings, + painterResource(R.drawable.ic_settings), contentDescription = stringResource(R.string.settingsDestinationLabel) ) } diff --git a/androidVariant/src/main/java/org/comixedproject/variant/android/view/comics/ComicBookListView.kt b/androidVariant/src/main/java/org/comixedproject/variant/android/view/comics/ComicBookListView.kt index 143a182..94a7b43 100644 --- a/androidVariant/src/main/java/org/comixedproject/variant/android/view/comics/ComicBookListView.kt +++ b/androidVariant/src/main/java/org/comixedproject/variant/android/view/comics/ComicBookListView.kt @@ -23,10 +23,12 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.staggeredgrid.LazyVerticalStaggeredGrid import androidx.compose.foundation.lazy.staggeredgrid.StaggeredGridCells import androidx.compose.foundation.lazy.staggeredgrid.items +import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier +import androidx.compose.ui.res.pluralStringResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp @@ -46,6 +48,13 @@ fun ComicBookListView( modifier: Modifier = Modifier ) { Scaffold( + topBar = { + Text( + pluralStringResource(R.plurals.comicBookListTitle, comicBookList.size, + comicBookList.size), + style = MaterialTheme.typography.headlineMedium + ) + }, content = { padding -> if (comicBookList.isEmpty()) { Log.debug( diff --git a/androidVariant/src/main/java/org/comixedproject/variant/android/view/comics/ComicBookView.kt b/androidVariant/src/main/java/org/comixedproject/variant/android/view/comics/ComicBookView.kt index 1ca9aa1..a022298 100644 --- a/androidVariant/src/main/java/org/comixedproject/variant/android/view/comics/ComicBookView.kt +++ b/androidVariant/src/main/java/org/comixedproject/variant/android/view/comics/ComicBookView.kt @@ -19,8 +19,6 @@ package org.comixedproject.variant.android.view.comics import androidx.compose.foundation.layout.padding -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Delete import androidx.compose.material3.BottomAppBar import androidx.compose.material3.Icon import androidx.compose.material3.IconButton @@ -81,7 +79,7 @@ fun ComicBookView( onDeleteComics() }) { Icon( - Icons.Filled.Delete, + painterResource(R.drawable.ic_delete_comics), contentDescription = stringResource(R.string.deleteSelectionsLabel) ) } diff --git a/androidVariant/src/main/res/drawable-anydpi/ic_browse_library.xml b/androidVariant/src/main/res/drawable-anydpi/ic_browse_library.xml new file mode 100644 index 0000000..117e380 --- /dev/null +++ b/androidVariant/src/main/res/drawable-anydpi/ic_browse_library.xml @@ -0,0 +1,13 @@ + + + + + diff --git a/androidVariant/src/main/res/drawable-anydpi/ic_comic_library.xml b/androidVariant/src/main/res/drawable-anydpi/ic_comic_library.xml new file mode 100644 index 0000000..8e9b6a7 --- /dev/null +++ b/androidVariant/src/main/res/drawable-anydpi/ic_comic_library.xml @@ -0,0 +1,16 @@ + + + + + diff --git a/androidVariant/src/main/res/drawable-anydpi/ic_delete_comics.xml b/androidVariant/src/main/res/drawable-anydpi/ic_delete_comics.xml new file mode 100644 index 0000000..b44c820 --- /dev/null +++ b/androidVariant/src/main/res/drawable-anydpi/ic_delete_comics.xml @@ -0,0 +1,20 @@ + + + + + + diff --git a/androidVariant/src/main/res/drawable-anydpi/ic_settings.xml b/androidVariant/src/main/res/drawable-anydpi/ic_settings.xml new file mode 100644 index 0000000..3085f10 --- /dev/null +++ b/androidVariant/src/main/res/drawable-anydpi/ic_settings.xml @@ -0,0 +1,19 @@ + + + + + + diff --git a/androidVariant/src/main/res/drawable-hdpi/ic_browse_library.png b/androidVariant/src/main/res/drawable-hdpi/ic_browse_library.png new file mode 100644 index 0000000..a147001 Binary files /dev/null and b/androidVariant/src/main/res/drawable-hdpi/ic_browse_library.png differ diff --git a/androidVariant/src/main/res/drawable-hdpi/ic_comic_library.png b/androidVariant/src/main/res/drawable-hdpi/ic_comic_library.png new file mode 100644 index 0000000..8b2bc41 Binary files /dev/null and b/androidVariant/src/main/res/drawable-hdpi/ic_comic_library.png differ diff --git a/androidVariant/src/main/res/drawable-hdpi/ic_delete_comics.png b/androidVariant/src/main/res/drawable-hdpi/ic_delete_comics.png new file mode 100644 index 0000000..2ae8b69 Binary files /dev/null and b/androidVariant/src/main/res/drawable-hdpi/ic_delete_comics.png differ diff --git a/androidVariant/src/main/res/drawable-hdpi/ic_settings.png b/androidVariant/src/main/res/drawable-hdpi/ic_settings.png new file mode 100644 index 0000000..fe5e143 Binary files /dev/null and b/androidVariant/src/main/res/drawable-hdpi/ic_settings.png differ diff --git a/androidVariant/src/main/res/drawable-mdpi/ic_browse_library.png b/androidVariant/src/main/res/drawable-mdpi/ic_browse_library.png new file mode 100644 index 0000000..4108ba9 Binary files /dev/null and b/androidVariant/src/main/res/drawable-mdpi/ic_browse_library.png differ diff --git a/androidVariant/src/main/res/drawable-mdpi/ic_comic_library.png b/androidVariant/src/main/res/drawable-mdpi/ic_comic_library.png new file mode 100644 index 0000000..f5b2a36 Binary files /dev/null and b/androidVariant/src/main/res/drawable-mdpi/ic_comic_library.png differ diff --git a/androidVariant/src/main/res/drawable-mdpi/ic_delete_comics.png b/androidVariant/src/main/res/drawable-mdpi/ic_delete_comics.png new file mode 100644 index 0000000..485c3f1 Binary files /dev/null and b/androidVariant/src/main/res/drawable-mdpi/ic_delete_comics.png differ diff --git a/androidVariant/src/main/res/drawable-mdpi/ic_settings.png b/androidVariant/src/main/res/drawable-mdpi/ic_settings.png new file mode 100644 index 0000000..59d2f49 Binary files /dev/null and b/androidVariant/src/main/res/drawable-mdpi/ic_settings.png differ diff --git a/androidVariant/src/main/res/drawable-xhdpi/ic_browse_library.png b/androidVariant/src/main/res/drawable-xhdpi/ic_browse_library.png new file mode 100644 index 0000000..14661b0 Binary files /dev/null and b/androidVariant/src/main/res/drawable-xhdpi/ic_browse_library.png differ diff --git a/androidVariant/src/main/res/drawable-xhdpi/ic_comic_library.png b/androidVariant/src/main/res/drawable-xhdpi/ic_comic_library.png new file mode 100644 index 0000000..64118a0 Binary files /dev/null and b/androidVariant/src/main/res/drawable-xhdpi/ic_comic_library.png differ diff --git a/androidVariant/src/main/res/drawable-xhdpi/ic_delete_comics.png b/androidVariant/src/main/res/drawable-xhdpi/ic_delete_comics.png new file mode 100644 index 0000000..92d883d Binary files /dev/null and b/androidVariant/src/main/res/drawable-xhdpi/ic_delete_comics.png differ diff --git a/androidVariant/src/main/res/drawable-xhdpi/ic_settings.png b/androidVariant/src/main/res/drawable-xhdpi/ic_settings.png new file mode 100644 index 0000000..832872d Binary files /dev/null and b/androidVariant/src/main/res/drawable-xhdpi/ic_settings.png differ diff --git a/androidVariant/src/main/res/drawable-xxhdpi/ic_browse_library.png b/androidVariant/src/main/res/drawable-xxhdpi/ic_browse_library.png new file mode 100644 index 0000000..52cf4a5 Binary files /dev/null and b/androidVariant/src/main/res/drawable-xxhdpi/ic_browse_library.png differ diff --git a/androidVariant/src/main/res/drawable-xxhdpi/ic_comic_library.png b/androidVariant/src/main/res/drawable-xxhdpi/ic_comic_library.png new file mode 100644 index 0000000..2a29721 Binary files /dev/null and b/androidVariant/src/main/res/drawable-xxhdpi/ic_comic_library.png differ diff --git a/androidVariant/src/main/res/drawable-xxhdpi/ic_delete_comics.png b/androidVariant/src/main/res/drawable-xxhdpi/ic_delete_comics.png new file mode 100644 index 0000000..f78ce91 Binary files /dev/null and b/androidVariant/src/main/res/drawable-xxhdpi/ic_delete_comics.png differ diff --git a/androidVariant/src/main/res/drawable-xxhdpi/ic_settings.png b/androidVariant/src/main/res/drawable-xxhdpi/ic_settings.png new file mode 100644 index 0000000..914162d Binary files /dev/null and b/androidVariant/src/main/res/drawable-xxhdpi/ic_settings.png differ diff --git a/androidVariant/src/main/res/values/strings.xml b/androidVariant/src/main/res/values/strings.xml index 74f2adf..e48340b 100644 --- a/androidVariant/src/main/res/values/strings.xml +++ b/androidVariant/src/main/res/values/strings.xml @@ -19,4 +19,8 @@ Mark selected comics as read. Mark selected comics as unread. Delete selected comics from device. + + %d Comic Book + %d Comic Books + diff --git a/iosVariant/Translations.xcstrings b/iosVariant/Translations.xcstrings new file mode 100644 index 0000000..dfc9481 --- /dev/null +++ b/iosVariant/Translations.xcstrings @@ -0,0 +1,28 @@ +{ + "sourceLanguage" : "en", + "strings" : { + "%lld Comic Books" : { + "localizations" : { + "en" : { + "variations" : { + "plural" : { + "one" : { + "stringUnit" : { + "state" : "translated", + "value" : "%lld Comic Book" + } + }, + "other" : { + "stringUnit" : { + "state" : "new", + "value" : "%lld Comic Books" + } + } + } + } + } + } + } + }, + "version" : "1.0" +} \ No newline at end of file diff --git a/iosVariant/Variant.xcodeproj/project.pbxproj b/iosVariant/Variant.xcodeproj/project.pbxproj index 3e52e86..4c4ffa1 100644 --- a/iosVariant/Variant.xcodeproj/project.pbxproj +++ b/iosVariant/Variant.xcodeproj/project.pbxproj @@ -10,6 +10,7 @@ 058557BB273AAA24004C7B11 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 058557BA273AAA24004C7B11 /* Assets.xcassets */; }; 058557D9273AAEEB004C7B11 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 058557D8273AAEEB004C7B11 /* Preview Assets.xcassets */; }; 2152FB042600AC8F00CF470E /* iOSApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2152FB032600AC8F00CF470E /* iOSApp.swift */; }; + 6A1EDFD12E294F7D00429CEF /* Translations.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 6A1EDFD02E294F7D00429CEF /* Translations.xcstrings */; }; 6A4D18062E14191D00FF9EA2 /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6A4D18052E14191D00FF9EA2 /* Constants.swift */; }; 6AA598492DE72E910078CC9F /* ServerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AA598482DE72E910078CC9F /* ServerView.swift */; }; 6AA5984C2DE72EF40078CC9F /* Fixtures.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AA5984B2DE72EF40078CC9F /* Fixtures.swift */; }; @@ -50,6 +51,7 @@ 058557BA273AAA24004C7B11 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 058557D8273AAEEB004C7B11 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; 2152FB032600AC8F00CF470E /* iOSApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = iOSApp.swift; sourceTree = ""; }; + 6A1EDFD02E294F7D00429CEF /* Translations.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; path = Translations.xcstrings; sourceTree = ""; }; 6A4D18052E14191D00FF9EA2 /* Constants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = ""; }; 6AA598482DE72E910078CC9F /* ServerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServerView.swift; sourceTree = ""; }; 6AA5984B2DE72EF40078CC9F /* Fixtures.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Fixtures.swift; sourceTree = ""; }; @@ -114,6 +116,7 @@ 7555FF72242A565900829871 = { isa = PBXGroup; children = ( + 6A1EDFD02E294F7D00429CEF /* Translations.xcstrings */, 7555FF7D242A565900829871 /* iosVariant */, 7555FF7C242A565900829871 /* Products */, 7555FFB0242A642200829871 /* Frameworks */, @@ -256,9 +259,6 @@ knownRegions = ( en, Base, - es, - fr, - "pt-BR", ); mainGroup = 7555FF72242A565900829871; packageReferences = ( @@ -279,6 +279,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 6A1EDFD12E294F7D00429CEF /* Translations.xcstrings in Resources */, 058557D9273AAEEB004C7B11 /* Preview Assets.xcassets in Resources */, 058557BB273AAA24004C7B11 /* Assets.xcassets in Resources */, ); @@ -394,6 +395,7 @@ ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; }; name = Debug; @@ -448,6 +450,7 @@ MTL_FAST_MATH = YES; SDKROOT = iphoneos; SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_OPTIMIZATION_LEVEL = "-O"; VALIDATE_PRODUCT = YES; }; diff --git a/iosVariant/iosVariant/Views/Comics/ComicBookListView.swift b/iosVariant/iosVariant/Views/Comics/ComicBookListView.swift index ff5c875..380c646 100644 --- a/iosVariant/iosVariant/Views/Comics/ComicBookListView.swift +++ b/iosVariant/iosVariant/Views/Comics/ComicBookListView.swift @@ -30,6 +30,8 @@ struct ComicBookListView: View { var onClick: (ComicBook) -> Void + var comicBookCount: Int { return comicBookList.count } + var body: some View { NavigationStack { ScrollView { @@ -48,8 +50,8 @@ struct ComicBookListView: View { } .navigationTitle( String( - localized: "comic-book-list.title", - defaultValue: "Comic List" + localized: "\(comicBookCount) Comic Books", + table: "Translations" ) ) }