diff --git a/app/src/androidMain/kotlin/dev/alvr/katana/ui/main/navigation/NavigationBar.kt b/app/src/androidMain/kotlin/dev/alvr/katana/ui/main/navigation/NavigationBar.kt
index 694b4cb8c..7760ec842 100644
--- a/app/src/androidMain/kotlin/dev/alvr/katana/ui/main/navigation/NavigationBar.kt
+++ b/app/src/androidMain/kotlin/dev/alvr/katana/ui/main/navigation/NavigationBar.kt
@@ -19,7 +19,6 @@ import androidx.compose.runtime.referentialEqualityPolicy
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberUpdatedState
import androidx.compose.ui.Modifier
-import androidx.compose.ui.res.stringResource
import androidx.navigation.NavController
import androidx.navigation.NavDestination
import androidx.navigation.NavGraph
@@ -33,6 +32,8 @@ import dev.alvr.katana.ui.main.navigation.items.HomeNavigationBarItem
import dev.alvr.katana.ui.main.navigation.items.NavigationBarItem
import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.persistentListOf
+import org.jetbrains.compose.resources.ExperimentalResourceApi
+import org.jetbrains.compose.resources.stringResource
@Composable
internal fun NavigationBar(
@@ -160,6 +161,7 @@ private fun RailNavigationBar(
}
@Composable
+@OptIn(ExperimentalResourceApi::class)
private fun NavigationBarIcon(destination: NavigationBarItem) {
Icon(
imageVector = destination.icon,
@@ -168,6 +170,7 @@ private fun NavigationBarIcon(destination: NavigationBarItem) {
}
@Composable
+@OptIn(ExperimentalResourceApi::class)
private fun NavigationBarLabel(destination: NavigationBarItem) {
Text(text = stringResource(destination.label))
}
diff --git a/app/src/androidMain/kotlin/dev/alvr/katana/ui/main/navigation/items/HomeNavigationBarItem.kt b/app/src/androidMain/kotlin/dev/alvr/katana/ui/main/navigation/items/HomeNavigationBarItem.kt
index 165a6f37b..023ea4c33 100644
--- a/app/src/androidMain/kotlin/dev/alvr/katana/ui/main/navigation/items/HomeNavigationBarItem.kt
+++ b/app/src/androidMain/kotlin/dev/alvr/katana/ui/main/navigation/items/HomeNavigationBarItem.kt
@@ -8,24 +8,27 @@ import androidx.compose.material.icons.twotone.Explore
import androidx.compose.material.icons.twotone.VideoLibrary
import androidx.compose.ui.graphics.vector.ImageVector
import com.ramcosta.composedestinations.spec.NavGraphSpec
-import dev.alvr.katana.R
import dev.alvr.katana.ui.account.navigation.AccountNavGraph
import dev.alvr.katana.ui.explore.navigation.ExploreNavGraph
import dev.alvr.katana.ui.lists.navigation.AnimeNavGraph
import dev.alvr.katana.ui.lists.navigation.MangaNavGraph
import dev.alvr.katana.ui.social.navigation.SocialNavGraph
+import katana.app.generated.resources.Res
import kotlinx.collections.immutable.persistentListOf
+import org.jetbrains.compose.resources.ExperimentalResourceApi
+import org.jetbrains.compose.resources.StringResource
+@OptIn(ExperimentalResourceApi::class)
internal enum class HomeNavigationBarItem(
override val direction: NavGraphSpec,
override val icon: ImageVector,
- override val label: Int,
+ override val label: StringResource,
) : NavigationBarItem {
- Anime(AnimeNavGraph, Icons.TwoTone.VideoLibrary, R.string.navigation_bar_destination_anime_lists),
- Manga(MangaNavGraph, Icons.AutoMirrored.TwoTone.LibraryBooks, R.string.navigation_bar_destination_manga_lists),
- Explore(ExploreNavGraph, Icons.TwoTone.Explore, R.string.navigation_bar_destination_explore),
- Social(SocialNavGraph, Icons.TwoTone.Dashboard, R.string.navigation_bar_destination_social),
- Account(AccountNavGraph, Icons.TwoTone.AccountCircle, R.string.navigation_bar_destination_account);
+ Anime(AnimeNavGraph, Icons.TwoTone.VideoLibrary, Res.string.navigation_bar_destination_anime_lists),
+ Manga(MangaNavGraph, Icons.AutoMirrored.TwoTone.LibraryBooks, Res.string.navigation_bar_destination_manga_lists),
+ Explore(ExploreNavGraph, Icons.TwoTone.Explore, Res.string.navigation_bar_destination_explore),
+ Social(SocialNavGraph, Icons.TwoTone.Dashboard, Res.string.navigation_bar_destination_social),
+ Account(AccountNavGraph, Icons.TwoTone.AccountCircle, Res.string.navigation_bar_destination_account);
companion object {
@JvmField
diff --git a/app/src/androidMain/kotlin/dev/alvr/katana/ui/main/navigation/items/NavigationBarItem.kt b/app/src/androidMain/kotlin/dev/alvr/katana/ui/main/navigation/items/NavigationBarItem.kt
index 3b4e83f2f..c69945a97 100644
--- a/app/src/androidMain/kotlin/dev/alvr/katana/ui/main/navigation/items/NavigationBarItem.kt
+++ b/app/src/androidMain/kotlin/dev/alvr/katana/ui/main/navigation/items/NavigationBarItem.kt
@@ -1,11 +1,13 @@
package dev.alvr.katana.ui.main.navigation.items
-import androidx.annotation.StringRes
import androidx.compose.ui.graphics.vector.ImageVector
import com.ramcosta.composedestinations.spec.NavGraphSpec
+import org.jetbrains.compose.resources.ExperimentalResourceApi
+import org.jetbrains.compose.resources.StringResource
+@OptIn(ExperimentalResourceApi::class)
internal sealed interface NavigationBarItem {
val direction: NavGraphSpec
val icon: ImageVector
- @get:StringRes val label: Int
+ val label: StringResource
}
diff --git a/app/src/androidMain/res/values/strings.xml b/app/src/androidMain/res/values/strings.xml
index e66b993b2..66906a609 100644
--- a/app/src/androidMain/res/values/strings.xml
+++ b/app/src/androidMain/res/values/strings.xml
@@ -1,14 +1,4 @@
Katana
-
- Anime
- Manga
- Social
- Explore
- Account
-
- Session expired
- Anilist\'s session has expired. To continue using Katana you need to log in again.
- Log in
diff --git a/app/src/androidMain/res/values-es/strings.xml b/app/src/commonMain/composeResources/values-es/strings.xml
similarity index 100%
rename from app/src/androidMain/res/values-es/strings.xml
rename to app/src/commonMain/composeResources/values-es/strings.xml
diff --git a/app/src/commonMain/composeResources/values/strings.xml b/app/src/commonMain/composeResources/values/strings.xml
new file mode 100644
index 000000000..7e412d18b
--- /dev/null
+++ b/app/src/commonMain/composeResources/values/strings.xml
@@ -0,0 +1,12 @@
+
+
+ Anime
+ Manga
+ Social
+ Explore
+ Account
+
+ Session expired
+ Anilist\'s session has expired. To continue using Katana you need to log in again.
+ Log in
+
diff --git a/app/src/commonMain/kotlin/dev/alvr/katana/ui/main/KatanaApp.kt b/app/src/commonMain/kotlin/dev/alvr/katana/ui/main/KatanaApp.kt
index 3ef80a0ce..581b6d4b0 100644
--- a/app/src/commonMain/kotlin/dev/alvr/katana/ui/main/KatanaApp.kt
+++ b/app/src/commonMain/kotlin/dev/alvr/katana/ui/main/KatanaApp.kt
@@ -1,26 +1,13 @@
package dev.alvr.katana.ui.main
import androidx.compose.runtime.Composable
-import androidx.compose.runtime.CompositionLocalProvider
import co.touchlab.kermit.DefaultFormatter
import co.touchlab.kermit.LogWriter
import co.touchlab.kermit.Logger
import co.touchlab.kermit.Severity
import co.touchlab.kermit.platformLogWriter
import dev.alvr.katana.KatanaBuildConfig
-import dev.alvr.katana.ui.account.strings.LocalAccountStrings
-import dev.alvr.katana.ui.account.strings.rememberAccountStrings
import dev.alvr.katana.ui.base.design.KatanaTheme
-import dev.alvr.katana.ui.base.strings.LocalBaseStrings
-import dev.alvr.katana.ui.base.strings.rememberBaseStrings
-import dev.alvr.katana.ui.explore.strings.LocalExploreStrings
-import dev.alvr.katana.ui.explore.strings.rememberExploreStrings
-import dev.alvr.katana.ui.lists.strings.LocalListsStrings
-import dev.alvr.katana.ui.lists.strings.rememberListsStrings
-import dev.alvr.katana.ui.login.strings.LocalLoginStrings
-import dev.alvr.katana.ui.login.strings.rememberLoginStrings
-import dev.alvr.katana.ui.social.strings.LocalSocialStrings
-import dev.alvr.katana.ui.social.strings.rememberSocialStrings
import io.sentry.kotlin.multiplatform.Sentry
import io.sentry.kotlin.multiplatform.SentryLevel
import io.sentry.kotlin.multiplatform.protocol.Breadcrumb
@@ -33,27 +20,10 @@ internal fun KatanaApp() {
initApp()
KatanaTheme {
- KatanaStrings {
- KatanaContent()
- }
+ KatanaContent()
}
}
-@Composable
-private fun KatanaStrings(
- content: @Composable () -> Unit,
-) {
- CompositionLocalProvider(
- LocalAccountStrings provides rememberAccountStrings(),
- LocalBaseStrings provides rememberBaseStrings(),
- LocalExploreStrings provides rememberExploreStrings(),
- LocalListsStrings provides rememberListsStrings(),
- LocalLoginStrings provides rememberLoginStrings(),
- LocalSocialStrings provides rememberSocialStrings(),
- content = content,
- )
-}
-
private fun initApp() {
initSentry()
initNapier()
diff --git a/app/src/androidMain/kotlin/dev/alvr/katana/ui/main/components/SessionExpiredDialog.kt b/app/src/commonMain/kotlin/dev/alvr/katana/ui/main/components/SessionExpiredDialog.kt
similarity index 61%
rename from app/src/androidMain/kotlin/dev/alvr/katana/ui/main/components/SessionExpiredDialog.kt
rename to app/src/commonMain/kotlin/dev/alvr/katana/ui/main/components/SessionExpiredDialog.kt
index 53f40a89a..f29d4157a 100644
--- a/app/src/androidMain/kotlin/dev/alvr/katana/ui/main/components/SessionExpiredDialog.kt
+++ b/app/src/commonMain/kotlin/dev/alvr/katana/ui/main/components/SessionExpiredDialog.kt
@@ -4,11 +4,13 @@ import androidx.compose.material3.AlertDialog
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
import androidx.compose.runtime.Composable
-import androidx.compose.ui.res.stringResource
import androidx.compose.ui.window.DialogProperties
-import dev.alvr.katana.R
+import katana.app.generated.resources.Res
+import org.jetbrains.compose.resources.ExperimentalResourceApi
+import org.jetbrains.compose.resources.stringResource
@Composable
+@OptIn(ExperimentalResourceApi::class)
internal fun SessionExpiredDialog(
visible: Boolean,
onAccept: () -> Unit,
@@ -20,11 +22,11 @@ internal fun SessionExpiredDialog(
},
confirmButton = {
TextButton(onClick = onAccept) {
- Text(text = stringResource(R.string.session_expired_error_confirm_button))
+ Text(text = stringResource(Res.string.session_expired_error_confirm_button))
}
},
- title = { Text(text = stringResource(R.string.session_expired_error_title)) },
- text = { Text(text = stringResource(R.string.session_expired_error_message)) },
+ title = { Text(text = stringResource(Res.string.session_expired_error_title)) },
+ text = { Text(text = stringResource(Res.string.session_expired_error_message)) },
properties = DialogProperties(
dismissOnBackPress = false,
dismissOnClickOutside = false,
diff --git a/config/detekt.yml b/config/detekt.yml
index 3f544fa90..bd08362a4 100644
--- a/config/detekt.yml
+++ b/config/detekt.yml
@@ -980,7 +980,7 @@ Compose:
active: true
CompositionLocalAllowlist:
active: true
- allowedCompositionLocals: LocalAccountStrings,LocalBaseStrings,LocalExploreStrings,LocalListsStrings,LocalLoginStrings,LocalSocialStrings
+ allowedCompositionLocals:
CompositionLocalNaming:
active: true
ContentEmitterReturningValues:
diff --git a/ui/account/src/commonMain/composeResources/values-es/strings.xml b/ui/account/src/commonMain/composeResources/values-es/strings.xml
new file mode 100644
index 000000000..2345c7521
--- /dev/null
+++ b/ui/account/src/commonMain/composeResources/values-es/strings.xml
@@ -0,0 +1,5 @@
+
+
+ Cuenta
+ Cerrar sesión
+
diff --git a/ui/account/src/commonMain/composeResources/values/strings.xml b/ui/account/src/commonMain/composeResources/values/strings.xml
new file mode 100644
index 000000000..2345c7521
--- /dev/null
+++ b/ui/account/src/commonMain/composeResources/values/strings.xml
@@ -0,0 +1,5 @@
+
+
+ Cuenta
+ Cerrar sesión
+
diff --git a/ui/account/src/commonMain/kotlin/dev/alvr/katana/ui/account/strings/AccountStrings.kt b/ui/account/src/commonMain/kotlin/dev/alvr/katana/ui/account/strings/AccountStrings.kt
deleted file mode 100644
index 92cb2870a..000000000
--- a/ui/account/src/commonMain/kotlin/dev/alvr/katana/ui/account/strings/AccountStrings.kt
+++ /dev/null
@@ -1,25 +0,0 @@
-package dev.alvr.katana.ui.account.strings
-
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.Immutable
-import androidx.compose.runtime.compositionLocalOf
-import dev.alvr.katana.ui.base.utils.Locales
-import dev.alvr.katana.ui.base.utils.rememberKatanaStrings
-import kotlinx.collections.immutable.persistentMapOf
-
-@Immutable
-@Suppress("LongParameterList", "UseDataClass")
-class AccountStrings internal constructor(
- internal val title: String,
- internal val logoutButton: String,
-)
-
-internal val Strings = persistentMapOf(
- Locales.EN to enAccountStrings,
- Locales.ES to esAccountStrings,
-)
-
-val LocalAccountStrings = compositionLocalOf { enAccountStrings }
-
-@Composable
-fun rememberAccountStrings() = rememberKatanaStrings(Strings)
diff --git a/ui/account/src/commonMain/kotlin/dev/alvr/katana/ui/account/strings/enAccountStrings.kt b/ui/account/src/commonMain/kotlin/dev/alvr/katana/ui/account/strings/enAccountStrings.kt
deleted file mode 100644
index 482cfff48..000000000
--- a/ui/account/src/commonMain/kotlin/dev/alvr/katana/ui/account/strings/enAccountStrings.kt
+++ /dev/null
@@ -1,6 +0,0 @@
-package dev.alvr.katana.ui.account.strings
-
-internal val enAccountStrings = AccountStrings(
- title = "Account",
- logoutButton = "Logout",
-)
diff --git a/ui/account/src/commonMain/kotlin/dev/alvr/katana/ui/account/strings/esAccountStrings.kt b/ui/account/src/commonMain/kotlin/dev/alvr/katana/ui/account/strings/esAccountStrings.kt
deleted file mode 100644
index f5d62fe27..000000000
--- a/ui/account/src/commonMain/kotlin/dev/alvr/katana/ui/account/strings/esAccountStrings.kt
+++ /dev/null
@@ -1,6 +0,0 @@
-package dev.alvr.katana.ui.account.strings
-
-internal val esAccountStrings = AccountStrings(
- title = "Cuenta",
- logoutButton = "Cerrar sesión",
-)
diff --git a/ui/account/src/commonMain/kotlin/dev/alvr/katana/ui/account/view/AccountScreen.kt b/ui/account/src/commonMain/kotlin/dev/alvr/katana/ui/account/view/AccountScreen.kt
index 78f4c9578..36c118c4c 100644
--- a/ui/account/src/commonMain/kotlin/dev/alvr/katana/ui/account/view/AccountScreen.kt
+++ b/ui/account/src/commonMain/kotlin/dev/alvr/katana/ui/account/view/AccountScreen.kt
@@ -7,11 +7,13 @@ import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import dev.alvr.katana.ui.account.entities.UserInfoUi
import dev.alvr.katana.ui.account.navigation.AccountNavigator
-import dev.alvr.katana.ui.account.strings.LocalAccountStrings
import dev.alvr.katana.ui.account.viewmodel.AccountViewModel
import dev.alvr.katana.ui.base.components.home.KatanaHomeTopAppBar
import dev.alvr.katana.ui.base.navigation.Destination
import dev.alvr.katana.ui.base.viewmodel.collectAsState
+import katana.ui.account.generated.resources.Res
+import org.jetbrains.compose.resources.ExperimentalResourceApi
+import org.jetbrains.compose.resources.stringResource
import org.koin.compose.koinInject
@Composable
@@ -32,6 +34,7 @@ internal fun AccountScreen(
}
@Composable
+@OptIn(ExperimentalResourceApi::class)
private fun AccountScreen(
userInfo: UserInfoUi,
onLogoutClick: () -> Unit,
@@ -39,7 +42,7 @@ private fun AccountScreen(
Scaffold(
topBar = {
KatanaHomeTopAppBar(
- title = LocalAccountStrings.current.title,
+ title = stringResource(Res.string.title),
subtitle = null,
)
},
diff --git a/ui/account/src/commonMain/kotlin/dev/alvr/katana/ui/account/view/UserInfo.kt b/ui/account/src/commonMain/kotlin/dev/alvr/katana/ui/account/view/UserInfo.kt
index 68a58b332..700674e7a 100644
--- a/ui/account/src/commonMain/kotlin/dev/alvr/katana/ui/account/view/UserInfo.kt
+++ b/ui/account/src/commonMain/kotlin/dev/alvr/katana/ui/account/view/UserInfo.kt
@@ -17,11 +17,14 @@ import androidx.compose.ui.draw.clip
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.unit.dp
import dev.alvr.katana.ui.account.entities.UserInfoUi
-import dev.alvr.katana.ui.account.strings.LocalAccountStrings
import io.kamel.image.KamelImage
import io.kamel.image.asyncPainterResource
+import katana.ui.account.generated.resources.Res
+import org.jetbrains.compose.resources.ExperimentalResourceApi
+import org.jetbrains.compose.resources.stringResource
@Composable
+@OptIn(ExperimentalResourceApi::class)
internal fun UserInfo(
userInfo: UserInfoUi,
onLogoutClick: () -> Unit,
@@ -38,7 +41,7 @@ internal fun UserInfo(
)
Button(onClick = onLogoutClick) {
- Text(text = LocalAccountStrings.current.logoutButton)
+ Text(text = stringResource(Res.string.logout_button))
}
}
}
diff --git a/ui/base/src/commonMain/composeResources/values-es/strings.xml b/ui/base/src/commonMain/composeResources/values-es/strings.xml
new file mode 100644
index 000000000..6c1ee34ae
--- /dev/null
+++ b/ui/base/src/commonMain/composeResources/values-es/strings.xml
@@ -0,0 +1,12 @@
+
+
+ No se han encontrado datos.
+ Ha ocurrido un error.
+ Intentar de nuevo.
+
+ Menú de búsqueda
+ Menú de filtrado
+
+ Cerrar búsqueda
+ Limpiar búsqueda
+
diff --git a/ui/base/src/commonMain/composeResources/values/strings.xml b/ui/base/src/commonMain/composeResources/values/strings.xml
new file mode 100644
index 000000000..9aa6771f0
--- /dev/null
+++ b/ui/base/src/commonMain/composeResources/values/strings.xml
@@ -0,0 +1,12 @@
+
+
+ No data has been found.
+ An error occurred.
+ Retry again.
+
+ Search menu
+ Filter menu
+
+ Close search
+ Clear search input
+
diff --git a/ui/base/src/commonMain/kotlin/dev/alvr/katana/ui/base/components/KatanaSearchTopAppBar.kt b/ui/base/src/commonMain/kotlin/dev/alvr/katana/ui/base/components/KatanaSearchTopAppBar.kt
index d0e868848..67683bbee 100644
--- a/ui/base/src/commonMain/kotlin/dev/alvr/katana/ui/base/components/KatanaSearchTopAppBar.kt
+++ b/ui/base/src/commonMain/kotlin/dev/alvr/katana/ui/base/components/KatanaSearchTopAppBar.kt
@@ -27,8 +27,9 @@ import androidx.compose.ui.graphics.RectangleShape
import androidx.compose.ui.platform.LocalFocusManager
import androidx.compose.ui.text.input.ImeAction
import dev.alvr.katana.common.core.empty
-import dev.alvr.katana.ui.base.strings.LocalBaseStrings
+import katana.ui.base.generated.resources.Res
import org.jetbrains.compose.resources.ExperimentalResourceApi
+import org.jetbrains.compose.resources.stringResource
@Composable
@OptIn(ExperimentalResourceApi::class)
@@ -45,8 +46,6 @@ fun KatanaSearchTopAppBar(
val focusManager = LocalFocusManager.current
val focusRequester = remember { FocusRequester() }
- val strings = LocalBaseStrings.current
-
// Request focus only the first time
if (!focusRequested) {
LaunchedEffect(Unit) {
@@ -68,8 +67,8 @@ fun KatanaSearchTopAppBar(
leadingIcon = {
IconButton(onClick = onBack) {
Icon(
- contentDescription = strings.toolbarSearchClose,
imageVector = Icons.AutoMirrored.Outlined.ArrowBack,
+ contentDescription = stringResource(Res.string.toolbar_search_close),
)
}
},
@@ -82,7 +81,7 @@ fun KatanaSearchTopAppBar(
) {
Icon(
imageVector = Icons.Outlined.Clear,
- contentDescription = strings.toolbarSearchClear,
+ contentDescription = stringResource(Res.string.toolbar_search_clear),
)
}
},
diff --git a/ui/base/src/commonMain/kotlin/dev/alvr/katana/ui/base/components/KatanaStates.kt b/ui/base/src/commonMain/kotlin/dev/alvr/katana/ui/base/components/KatanaStates.kt
index b7c09f667..2b584ce13 100644
--- a/ui/base/src/commonMain/kotlin/dev/alvr/katana/ui/base/components/KatanaStates.kt
+++ b/ui/base/src/commonMain/kotlin/dev/alvr/katana/ui/base/components/KatanaStates.kt
@@ -25,9 +25,12 @@ import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
-import dev.alvr.katana.ui.base.strings.LocalBaseStrings
+import katana.ui.base.generated.resources.Res
+import org.jetbrains.compose.resources.ExperimentalResourceApi
+import org.jetbrains.compose.resources.stringResource
@Composable
+@OptIn(ExperimentalResourceApi::class)
fun KatanaEmptyState(
text: String,
modifier: Modifier = Modifier,
@@ -36,11 +39,12 @@ fun KatanaEmptyState(
modifier = modifier,
text = text,
imageVector = Icons.TwoTone.Inbox,
- contentDescription = LocalBaseStrings.current.componentEmptyState,
+ contentDescription = stringResource(Res.string.component_empty_state),
)
}
@Composable
+@OptIn(ExperimentalResourceApi::class)
fun KatanaErrorState(
text: String,
loading: Boolean,
@@ -52,7 +56,7 @@ fun KatanaErrorState(
modifier = modifier,
text = text,
imageVector = Icons.TwoTone.Error,
- contentDescription = LocalBaseStrings.current.componentErrorState,
+ contentDescription = stringResource(Res.string.component_error_state),
) {
Spacer(Modifier.height(16.dp))
diff --git a/ui/base/src/commonMain/kotlin/dev/alvr/katana/ui/base/components/home/KatanaHomeTopAppBar.kt b/ui/base/src/commonMain/kotlin/dev/alvr/katana/ui/base/components/home/KatanaHomeTopAppBar.kt
index 4db6e3749..ac330894c 100644
--- a/ui/base/src/commonMain/kotlin/dev/alvr/katana/ui/base/components/home/KatanaHomeTopAppBar.kt
+++ b/ui/base/src/commonMain/kotlin/dev/alvr/katana/ui/base/components/home/KatanaHomeTopAppBar.kt
@@ -12,10 +12,15 @@ import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
-import dev.alvr.katana.ui.base.strings.LocalBaseStrings
+import katana.ui.base.generated.resources.Res
+import org.jetbrains.compose.resources.ExperimentalResourceApi
+import org.jetbrains.compose.resources.stringResource
@Composable
-@OptIn(ExperimentalMaterial3Api::class)
+@OptIn(
+ ExperimentalMaterial3Api::class,
+ ExperimentalResourceApi::class,
+)
fun KatanaHomeTopAppBar(
title: String,
subtitle: String?,
@@ -23,8 +28,6 @@ fun KatanaHomeTopAppBar(
onSearch: (() -> Unit)? = null,
onFilter: (() -> Unit)? = null,
) {
- val strings = LocalBaseStrings.current
-
TopAppBar(
modifier = modifier,
title = {
@@ -40,7 +43,7 @@ fun KatanaHomeTopAppBar(
IconButton(onClick = onSearch) {
Icon(
imageVector = Icons.Outlined.Search,
- contentDescription = strings.toolbarMenuSearch,
+ contentDescription = stringResource(Res.string.toolbar_menu_search),
)
}
}
@@ -49,7 +52,7 @@ fun KatanaHomeTopAppBar(
IconButton(onClick = onFilter) {
Icon(
imageVector = Icons.Outlined.FilterAlt,
- contentDescription = strings.toolbarMenuFilter,
+ contentDescription = stringResource(Res.string.toolbar_menu_filter),
)
}
}
diff --git a/ui/base/src/commonMain/kotlin/dev/alvr/katana/ui/base/strings/BaseStrings.kt b/ui/base/src/commonMain/kotlin/dev/alvr/katana/ui/base/strings/BaseStrings.kt
deleted file mode 100644
index d140e7b41..000000000
--- a/ui/base/src/commonMain/kotlin/dev/alvr/katana/ui/base/strings/BaseStrings.kt
+++ /dev/null
@@ -1,30 +0,0 @@
-package dev.alvr.katana.ui.base.strings
-
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.Immutable
-import androidx.compose.runtime.compositionLocalOf
-import dev.alvr.katana.ui.base.utils.Locales
-import dev.alvr.katana.ui.base.utils.rememberKatanaStrings
-import kotlinx.collections.immutable.persistentMapOf
-
-@Immutable
-@Suppress("LongParameterList", "UseDataClass")
-class BaseStrings internal constructor(
- internal val componentEmptyState: String,
- internal val componentErrorState: String,
- internal val componentErrorStateRetryButton: String,
- internal val toolbarMenuSearch: String,
- internal val toolbarMenuFilter: String,
- internal val toolbarSearchClose: String,
- internal val toolbarSearchClear: String,
-)
-
-internal val Strings = persistentMapOf(
- Locales.EN to enBaseStrings,
- Locales.ES to esBaseStrings,
-)
-
-val LocalBaseStrings = compositionLocalOf { enBaseStrings }
-
-@Composable
-fun rememberBaseStrings() = rememberKatanaStrings(Strings)
diff --git a/ui/base/src/commonMain/kotlin/dev/alvr/katana/ui/base/strings/enBaseStrings.kt b/ui/base/src/commonMain/kotlin/dev/alvr/katana/ui/base/strings/enBaseStrings.kt
deleted file mode 100644
index 8b9c65122..000000000
--- a/ui/base/src/commonMain/kotlin/dev/alvr/katana/ui/base/strings/enBaseStrings.kt
+++ /dev/null
@@ -1,11 +0,0 @@
-package dev.alvr.katana.ui.base.strings
-
-internal val enBaseStrings = BaseStrings(
- componentEmptyState = "No data has been found.",
- componentErrorState = "An error occurred.",
- componentErrorStateRetryButton = "Retry again.",
- toolbarMenuSearch = "Search menu",
- toolbarMenuFilter = "Filter menu",
- toolbarSearchClose = "Close search",
- toolbarSearchClear = "Clear search input",
-)
diff --git a/ui/base/src/commonMain/kotlin/dev/alvr/katana/ui/base/strings/esBaseStrings.kt b/ui/base/src/commonMain/kotlin/dev/alvr/katana/ui/base/strings/esBaseStrings.kt
deleted file mode 100644
index 867baded8..000000000
--- a/ui/base/src/commonMain/kotlin/dev/alvr/katana/ui/base/strings/esBaseStrings.kt
+++ /dev/null
@@ -1,11 +0,0 @@
-package dev.alvr.katana.ui.base.strings
-
-internal val esBaseStrings = BaseStrings(
- componentEmptyState = "No se han encontrado datos.",
- componentErrorState = "Ha ocurrido un error.",
- componentErrorStateRetryButton = "Intentar de nuevo.",
- toolbarMenuSearch = "Menú de búsqueda",
- toolbarMenuFilter = "Menú de filtrado",
- toolbarSearchClose = "Cerrar búsqueda",
- toolbarSearchClear = "Limpiar búsqueda",
-)
diff --git a/ui/base/src/commonMain/kotlin/dev/alvr/katana/ui/base/utils/strings.kt b/ui/base/src/commonMain/kotlin/dev/alvr/katana/ui/base/utils/strings.kt
deleted file mode 100644
index e882c4448..000000000
--- a/ui/base/src/commonMain/kotlin/dev/alvr/katana/ui/base/utils/strings.kt
+++ /dev/null
@@ -1,23 +0,0 @@
-package dev.alvr.katana.ui.base.utils
-
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.remember
-import androidx.compose.ui.text.intl.Locale
-import cafe.adriel.lyricist.LanguageTag
-import cafe.adriel.lyricist.Lyricist
-import kotlinx.collections.immutable.ImmutableMap
-
-@Composable
-fun rememberKatanaStrings(strings: ImmutableMap): T = remember {
- Lyricist(
- defaultLanguageTag = Locales.Default,
- translations = strings,
- ).apply { languageTag = Locale.current.toLanguageTag() }.strings
-}
-
-object Locales {
- const val EN = "en"
- const val ES = "es"
-
- internal const val Default = EN
-}
diff --git a/ui/explore/src/commonMain/composeResources/values-es/strings.xml b/ui/explore/src/commonMain/composeResources/values-es/strings.xml
new file mode 100644
index 000000000..c35788e1b
--- /dev/null
+++ b/ui/explore/src/commonMain/composeResources/values-es/strings.xml
@@ -0,0 +1,5 @@
+
+
+ Explorar
+ Buscar…
+
diff --git a/ui/explore/src/commonMain/composeResources/values/strings.xml b/ui/explore/src/commonMain/composeResources/values/strings.xml
new file mode 100644
index 000000000..490da99b2
--- /dev/null
+++ b/ui/explore/src/commonMain/composeResources/values/strings.xml
@@ -0,0 +1,5 @@
+
+
+ Explore
+ Search…
+
diff --git a/ui/explore/src/commonMain/kotlin/dev/alvr/katana/ui/explore/strings/ExploreStrings.kt b/ui/explore/src/commonMain/kotlin/dev/alvr/katana/ui/explore/strings/ExploreStrings.kt
deleted file mode 100644
index aab44aca5..000000000
--- a/ui/explore/src/commonMain/kotlin/dev/alvr/katana/ui/explore/strings/ExploreStrings.kt
+++ /dev/null
@@ -1,25 +0,0 @@
-package dev.alvr.katana.ui.explore.strings
-
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.Immutable
-import androidx.compose.runtime.compositionLocalOf
-import dev.alvr.katana.ui.base.utils.Locales
-import dev.alvr.katana.ui.base.utils.rememberKatanaStrings
-import kotlinx.collections.immutable.persistentMapOf
-
-@Immutable
-@Suppress("LongParameterList", "UseDataClass")
-class ExploreStrings internal constructor(
- internal val exploreToolbarTitle: String,
- internal val exploreToolbarSearchPlaceholder: String,
-)
-
-internal val Strings = persistentMapOf(
- Locales.EN to enExploreStrings,
- Locales.ES to esExploreStrings,
-)
-
-val LocalExploreStrings = compositionLocalOf { enExploreStrings }
-
-@Composable
-fun rememberExploreStrings() = rememberKatanaStrings(Strings)
diff --git a/ui/explore/src/commonMain/kotlin/dev/alvr/katana/ui/explore/strings/enExploreStrings.kt b/ui/explore/src/commonMain/kotlin/dev/alvr/katana/ui/explore/strings/enExploreStrings.kt
deleted file mode 100644
index a1bf1fb47..000000000
--- a/ui/explore/src/commonMain/kotlin/dev/alvr/katana/ui/explore/strings/enExploreStrings.kt
+++ /dev/null
@@ -1,6 +0,0 @@
-package dev.alvr.katana.ui.explore.strings
-
-internal val enExploreStrings = ExploreStrings(
- exploreToolbarTitle = "Explore",
- exploreToolbarSearchPlaceholder = "Search…",
-)
diff --git a/ui/explore/src/commonMain/kotlin/dev/alvr/katana/ui/explore/strings/esExploreStrings.kt b/ui/explore/src/commonMain/kotlin/dev/alvr/katana/ui/explore/strings/esExploreStrings.kt
deleted file mode 100644
index 695ef0c87..000000000
--- a/ui/explore/src/commonMain/kotlin/dev/alvr/katana/ui/explore/strings/esExploreStrings.kt
+++ /dev/null
@@ -1,6 +0,0 @@
-package dev.alvr.katana.ui.explore.strings
-
-internal val esExploreStrings = ExploreStrings(
- exploreToolbarTitle = "Explorar",
- exploreToolbarSearchPlaceholder = "Buscar…",
-)
diff --git a/ui/explore/src/commonMain/kotlin/dev/alvr/katana/ui/explore/view/ExploreScreen.kt b/ui/explore/src/commonMain/kotlin/dev/alvr/katana/ui/explore/view/ExploreScreen.kt
index 981caf832..70b9dfb9f 100644
--- a/ui/explore/src/commonMain/kotlin/dev/alvr/katana/ui/explore/view/ExploreScreen.kt
+++ b/ui/explore/src/commonMain/kotlin/dev/alvr/katana/ui/explore/view/ExploreScreen.kt
@@ -8,23 +8,27 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import dev.alvr.katana.ui.base.components.home.KatanaHomeScaffold
import dev.alvr.katana.ui.base.navigation.Destination
-import dev.alvr.katana.ui.explore.strings.LocalExploreStrings
+import katana.ui.explore.generated.resources.Res
+import org.jetbrains.compose.resources.ExperimentalResourceApi
+import org.jetbrains.compose.resources.stringResource
@Composable
@Destination
-@OptIn(ExperimentalMaterialApi::class, ExperimentalAnimationApi::class)
+@OptIn(
+ ExperimentalMaterialApi::class,
+ ExperimentalResourceApi::class,
+ ExperimentalAnimationApi::class,
+)
internal fun ExploreScreen() {
- val strings = LocalExploreStrings.current
-
KatanaHomeScaffold(
- title = strings.exploreToolbarTitle,
- searchPlaceholder = strings.exploreToolbarSearchPlaceholder,
+ title = stringResource(Res.string.explore_toolbar_title),
+ searchPlaceholder = stringResource(Res.string.explore_toolbar_search_placeholder),
onSearch = {},
backContent = { Filter() },
) { paddingValues ->
Text(
modifier = Modifier.padding(paddingValues),
- text = strings.exploreToolbarTitle,
+ text = stringResource(Res.string.explore_toolbar_title),
)
}
}
diff --git a/ui/lists/src/androidMain/kotlin/dev/alvr/katana/ui/lists/view/AnimeScreen.kt b/ui/lists/src/androidMain/kotlin/dev/alvr/katana/ui/lists/view/AnimeScreen.kt
index 6290e481c..a5134d4b0 100644
--- a/ui/lists/src/androidMain/kotlin/dev/alvr/katana/ui/lists/view/AnimeScreen.kt
+++ b/ui/lists/src/androidMain/kotlin/dev/alvr/katana/ui/lists/view/AnimeScreen.kt
@@ -8,16 +8,19 @@ import androidx.compose.runtime.Composable
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.result.ResultRecipient
import dev.alvr.katana.ui.lists.navigation.ListsNavigator
-import dev.alvr.katana.ui.lists.strings.LocalListsStrings
import dev.alvr.katana.ui.lists.view.components.ListScreen
import dev.alvr.katana.ui.lists.view.destinations.ChangeListSheetDestination
import dev.alvr.katana.ui.lists.viewmodel.AnimeListsViewModel
+import katana.ui.lists.generated.resources.Res
+import org.jetbrains.compose.resources.ExperimentalResourceApi
+import org.jetbrains.compose.resources.stringResource
import org.koin.androidx.compose.koinViewModel
@Composable
@Destination
@OptIn(
ExperimentalMaterialApi::class,
+ ExperimentalResourceApi::class,
ExperimentalAnimationApi::class,
ExperimentalFoundationApi::class,
)
@@ -25,14 +28,12 @@ internal fun AnimeScreen(
navigator: ListsNavigator,
resultRecipient: ResultRecipient,
) {
- val strings = LocalListsStrings.current
-
ListScreen(
vm = koinViewModel(),
navigator = navigator,
resultRecipient = resultRecipient,
- title = strings.animeToolbar,
- emptyStateRes = strings.emptyAnimeList,
+ title = stringResource(Res.string.anime_toolbar),
+ emptyStateRes = stringResource(Res.string.empty_anime_list),
backContent = { Filter() },
)
}
diff --git a/ui/lists/src/androidMain/kotlin/dev/alvr/katana/ui/lists/view/MangaScreen.kt b/ui/lists/src/androidMain/kotlin/dev/alvr/katana/ui/lists/view/MangaScreen.kt
index 80b715cbf..c54ed2518 100644
--- a/ui/lists/src/androidMain/kotlin/dev/alvr/katana/ui/lists/view/MangaScreen.kt
+++ b/ui/lists/src/androidMain/kotlin/dev/alvr/katana/ui/lists/view/MangaScreen.kt
@@ -8,16 +8,19 @@ import androidx.compose.runtime.Composable
import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.result.ResultRecipient
import dev.alvr.katana.ui.lists.navigation.ListsNavigator
-import dev.alvr.katana.ui.lists.strings.LocalListsStrings
import dev.alvr.katana.ui.lists.view.components.ListScreen
import dev.alvr.katana.ui.lists.view.destinations.ChangeListSheetDestination
import dev.alvr.katana.ui.lists.viewmodel.MangaListsViewModel
+import katana.ui.lists.generated.resources.Res.string
+import org.jetbrains.compose.resources.ExperimentalResourceApi
+import org.jetbrains.compose.resources.stringResource
import org.koin.androidx.compose.koinViewModel
@Composable
@Destination
@OptIn(
ExperimentalMaterialApi::class,
+ ExperimentalResourceApi::class,
ExperimentalAnimationApi::class,
ExperimentalFoundationApi::class,
)
@@ -25,14 +28,12 @@ internal fun MangaScreen(
navigator: ListsNavigator,
resultRecipient: ResultRecipient,
) {
- val strings = LocalListsStrings.current
-
ListScreen(
vm = koinViewModel(),
navigator = navigator,
resultRecipient = resultRecipient,
- title = strings.mangaToolbar,
- emptyStateRes = strings.emptyMangaList,
+ title = stringResource(string.manga_toolbar),
+ emptyStateRes = stringResource(string.empty_anime_list),
backContent = { Filter() },
)
}
diff --git a/ui/lists/src/androidMain/kotlin/dev/alvr/katana/ui/lists/view/components/ChangeList.kt b/ui/lists/src/androidMain/kotlin/dev/alvr/katana/ui/lists/view/components/ChangeList.kt
index b00f8b254..1c149d67a 100644
--- a/ui/lists/src/androidMain/kotlin/dev/alvr/katana/ui/lists/view/components/ChangeList.kt
+++ b/ui/lists/src/androidMain/kotlin/dev/alvr/katana/ui/lists/view/components/ChangeList.kt
@@ -26,7 +26,9 @@ import com.ramcosta.composedestinations.annotation.Destination
import com.ramcosta.composedestinations.result.ResultBackNavigator
import com.ramcosta.composedestinations.spec.DestinationStyleBottomSheet
import dev.alvr.katana.ui.lists.entities.UserList
-import dev.alvr.katana.ui.lists.strings.LocalListsStrings
+import katana.ui.lists.generated.resources.Res
+import org.jetbrains.compose.resources.ExperimentalResourceApi
+import org.jetbrains.compose.resources.stringResource
@Composable
@Destination(style = DestinationStyleBottomSheet::class)
@@ -75,8 +77,8 @@ internal fun ChangeListButton(
if (visible) {
FloatingActionButton(onClick = onClick) {
Icon(
- contentDescription = LocalListsStrings.current.changeListButton,
imageVector = Icons.AutoMirrored.TwoTone.List,
+ contentDescription = stringResource(Res.string.change_list_button),
)
}
}
diff --git a/ui/lists/src/androidMain/kotlin/dev/alvr/katana/ui/lists/view/components/ListScreen.kt b/ui/lists/src/androidMain/kotlin/dev/alvr/katana/ui/lists/view/components/ListScreen.kt
index 157611723..3ca47f2a2 100644
--- a/ui/lists/src/androidMain/kotlin/dev/alvr/katana/ui/lists/view/components/ListScreen.kt
+++ b/ui/lists/src/androidMain/kotlin/dev/alvr/katana/ui/lists/view/components/ListScreen.kt
@@ -1,7 +1,6 @@
package dev.alvr.katana.ui.lists.view.components
import androidx.compose.animation.ExperimentalAnimationApi
-import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.grid.rememberLazyGridState
import androidx.compose.material.ExperimentalMaterialApi
@@ -21,17 +20,21 @@ import dev.alvr.katana.ui.base.components.home.KatanaHomeScaffold
import dev.alvr.katana.ui.base.components.home.rememberKatanaHomeScaffoldState
import dev.alvr.katana.ui.base.viewmodel.collectAsState
import dev.alvr.katana.ui.lists.navigation.ListsNavigator
-import dev.alvr.katana.ui.lists.strings.LocalListsStrings
import dev.alvr.katana.ui.lists.view.destinations.ChangeListSheetDestination
import dev.alvr.katana.ui.lists.viewmodel.AnimeListsViewModel
import dev.alvr.katana.ui.lists.viewmodel.ListsViewModel
import dev.alvr.katana.ui.lists.viewmodel.MangaListsViewModel
+import katana.ui.lists.generated.resources.Res
import kotlinx.coroutines.launch
+import org.jetbrains.compose.resources.ExperimentalResourceApi
+import org.jetbrains.compose.resources.stringResource
@Composable
-@ExperimentalMaterialApi
-@ExperimentalAnimationApi
-@ExperimentalFoundationApi
+@OptIn(
+ ExperimentalMaterialApi::class,
+ ExperimentalResourceApi::class,
+ ExperimentalAnimationApi::class,
+)
internal fun ListScreen(
vm: ListsViewModel<*, *>,
navigator: ListsNavigator,
@@ -45,7 +48,6 @@ internal fun ListScreen(
val katanaScaffoldState = rememberKatanaHomeScaffoldState()
val lazyGridState = rememberLazyGridState()
val coroutineScope = rememberCoroutineScope()
- val strings = LocalListsStrings.current
resultRecipient.OnNavValue { result ->
vm.selectList(result).also {
@@ -55,9 +57,9 @@ internal fun ListScreen(
}
val searchPlaceholder = when (vm) {
- is AnimeListsViewModel -> strings.animeToolbarSearchPlaceholder
- is MangaListsViewModel -> strings.mangaToolbarSearchPlaceholder
- }
+ is AnimeListsViewModel -> Res.string.anime_toolbar_search_placeholder
+ is MangaListsViewModel -> Res.string.manga_toolbar_search_placeholder
+ }.let { res -> stringResource(res) }
val buttonsVisible by remember(state.isError) {
derivedStateOf(structuralEqualityPolicy()) { !state.isError }
@@ -81,12 +83,12 @@ internal fun ListScreen(
when {
isError -> KatanaErrorState(
modifier = modifier.padding(paddingValues),
- text = strings.errorMessage,
+ text = stringResource(Res.string.error_message),
onRetry = {
vm.refreshList()
katanaScaffoldState.resetToolbar()
},
- buttonText = strings.errorRetryButton,
+ buttonText = stringResource(Res.string.error_retry_button),
loading = state.isLoading,
)
isEmpty && !isLoading -> KatanaEmptyState(
diff --git a/ui/lists/src/commonMain/composeResources/values-es/strings.xml b/ui/lists/src/commonMain/composeResources/values-es/strings.xml
new file mode 100644
index 000000000..3a446e0b3
--- /dev/null
+++ b/ui/lists/src/commonMain/composeResources/values-es/strings.xml
@@ -0,0 +1,33 @@
+
+
+ Anime
+ Manga
+ %d/%d
+ Ep. %d: %s
+ ›
+ %d +
+
+ Search Anime…
+ Search Manga…
+
+ TV
+ TV Short
+ Movie
+ Special
+ OVA
+ ONA
+ Music
+ Manga
+ Light Novel
+ One Shot
+ Unknown
+
+ This Anime list is empty
+ This Manga list is empty
+
+ Something has happened when getting the information from the selected list
+ Cover not found
+ Try again
+
+ Change list
+
diff --git a/ui/lists/src/commonMain/composeResources/values/strings.xml b/ui/lists/src/commonMain/composeResources/values/strings.xml
new file mode 100644
index 000000000..3a446e0b3
--- /dev/null
+++ b/ui/lists/src/commonMain/composeResources/values/strings.xml
@@ -0,0 +1,33 @@
+
+
+ Anime
+ Manga
+ %d/%d
+ Ep. %d: %s
+ ›
+ %d +
+
+ Search Anime…
+ Search Manga…
+
+ TV
+ TV Short
+ Movie
+ Special
+ OVA
+ ONA
+ Music
+ Manga
+ Light Novel
+ One Shot
+ Unknown
+
+ This Anime list is empty
+ This Manga list is empty
+
+ Something has happened when getting the information from the selected list
+ Cover not found
+ Try again
+
+ Change list
+
diff --git a/ui/lists/src/commonMain/kotlin/dev/alvr/katana/ui/lists/entities/MediaListItem.kt b/ui/lists/src/commonMain/kotlin/dev/alvr/katana/ui/lists/entities/MediaListItem.kt
index f24fff96c..1b3c25602 100644
--- a/ui/lists/src/commonMain/kotlin/dev/alvr/katana/ui/lists/entities/MediaListItem.kt
+++ b/ui/lists/src/commonMain/kotlin/dev/alvr/katana/ui/lists/entities/MediaListItem.kt
@@ -5,9 +5,11 @@ import androidx.compose.runtime.Immutable
import androidx.compose.runtime.Stable
import com.arkivanov.essenty.parcelable.Parcelable
import com.arkivanov.essenty.parcelable.Parcelize
-import dev.alvr.katana.ui.lists.strings.LocalListsStrings
+import katana.ui.lists.generated.resources.Res
import korlibs.time.Date
import korlibs.time.DateTimeTz
+import org.jetbrains.compose.resources.ExperimentalResourceApi
+import org.jetbrains.compose.resources.stringResource
@Immutable
@Suppress("ComplexInterface")
@@ -90,21 +92,22 @@ internal sealed interface MediaListItem : Parcelable {
OneShot,
Unknown;
+ @OptIn(ExperimentalResourceApi::class)
val value
- @Composable get() = with(LocalListsStrings.current) {
+ @Composable get() = with(Res.string) {
when (this@Format) {
- Tv -> entryFormatTv
- TvShort -> entryFormatTvShort
- Movie -> entryFormatMovie
- Special -> entryFormatSpecial
- Ova -> entryFormatOva
- Ona -> entryFormatOna
- Music -> entryFormatMusic
- Manga -> entryFormatManga
- Novel -> entryFormatNovel
- OneShot -> entryFormatOneShot
- Unknown -> entryFormatUnknown
- }
+ Tv -> entry_format_tv
+ TvShort -> entry_format_tv_short
+ Movie -> entry_format_movie
+ Special -> entry_format_special
+ Ova -> entry_format_ova
+ Ona -> entry_format_ona
+ Music -> entry_format_music
+ Manga -> manga_toolbar
+ Novel -> entry_format_novel
+ OneShot -> entry_format_one_shot
+ Unknown -> entry_format_unknown
+ }.let { res -> stringResource(res) }
}
}
}
diff --git a/ui/lists/src/commonMain/kotlin/dev/alvr/katana/ui/lists/strings/ListsStrings.kt b/ui/lists/src/commonMain/kotlin/dev/alvr/katana/ui/lists/strings/ListsStrings.kt
deleted file mode 100644
index 07bd185cc..000000000
--- a/ui/lists/src/commonMain/kotlin/dev/alvr/katana/ui/lists/strings/ListsStrings.kt
+++ /dev/null
@@ -1,55 +0,0 @@
-package dev.alvr.katana.ui.lists.strings
-
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.Immutable
-import androidx.compose.runtime.compositionLocalOf
-import dev.alvr.katana.ui.base.utils.Locales
-import dev.alvr.katana.ui.base.utils.rememberKatanaStrings
-import kotlinx.collections.immutable.persistentMapOf
-
-@Immutable
-@Suppress("LongParameterList", "UseDataClass")
-class ListsStrings internal constructor(
- // Common
- internal val animeToolbar: String = "Anime",
- internal val mangaToolbar: String = "Manga",
- internal val entryProgress: (Int, Any) -> String = { current, total -> "$current/$total" },
- internal val entryNextEpisode: (Int, String) -> String = { number, date -> "Ep. $number: $date" },
- internal val entryNextEpisodeSeparator: String = "›",
- internal val entryPlusOne: (String) -> String = { progress -> "$progress +" },
-
- // Specific
- internal val animeToolbarSearchPlaceholder: String,
- internal val mangaToolbarSearchPlaceholder: String,
-
- internal val emptyAnimeList: String,
- internal val emptyMangaList: String,
-
- internal val errorMessage: String,
- internal val errorCover: String,
- internal val errorRetryButton: String,
-
- internal val entryFormatTv: String,
- internal val entryFormatTvShort: String,
- internal val entryFormatMovie: String,
- internal val entryFormatSpecial: String,
- internal val entryFormatOva: String,
- internal val entryFormatOna: String,
- internal val entryFormatMusic: String,
- internal val entryFormatManga: String,
- internal val entryFormatNovel: String,
- internal val entryFormatOneShot: String,
- internal val entryFormatUnknown: String,
-
- internal val changeListButton: String,
-)
-
-internal val Strings = persistentMapOf(
- Locales.EN to enListsStrings,
- Locales.ES to esListsStrings,
-)
-
-val LocalListsStrings = compositionLocalOf { enListsStrings }
-
-@Composable
-fun rememberListsStrings() = rememberKatanaStrings(Strings)
diff --git a/ui/lists/src/commonMain/kotlin/dev/alvr/katana/ui/lists/strings/enListsStrings.kt b/ui/lists/src/commonMain/kotlin/dev/alvr/katana/ui/lists/strings/enListsStrings.kt
deleted file mode 100644
index 64616b3cb..000000000
--- a/ui/lists/src/commonMain/kotlin/dev/alvr/katana/ui/lists/strings/enListsStrings.kt
+++ /dev/null
@@ -1,27 +0,0 @@
-package dev.alvr.katana.ui.lists.strings
-
-internal val enListsStrings = ListsStrings(
- animeToolbarSearchPlaceholder = "Search Anime…",
- mangaToolbarSearchPlaceholder = "Search Manga…",
-
- entryFormatTv = "TV",
- entryFormatTvShort = "TV Short",
- entryFormatMovie = "Movie",
- entryFormatSpecial = "Special",
- entryFormatOva = "OVA",
- entryFormatOna = "ONA",
- entryFormatMusic = "Music",
- entryFormatManga = "Manga",
- entryFormatNovel = "Light Novel",
- entryFormatOneShot = "One Shot",
- entryFormatUnknown = "Unknown",
-
- emptyAnimeList = "This Anime list is empty",
- emptyMangaList = "This Manga list is empty",
-
- errorMessage = "Something has happened when getting the information from the selected list",
- errorCover = "Cover not found",
- errorRetryButton = "Try again",
-
- changeListButton = "Change list",
-)
diff --git a/ui/lists/src/commonMain/kotlin/dev/alvr/katana/ui/lists/strings/esListsStrings.kt b/ui/lists/src/commonMain/kotlin/dev/alvr/katana/ui/lists/strings/esListsStrings.kt
deleted file mode 100644
index 4d84dce98..000000000
--- a/ui/lists/src/commonMain/kotlin/dev/alvr/katana/ui/lists/strings/esListsStrings.kt
+++ /dev/null
@@ -1,27 +0,0 @@
-package dev.alvr.katana.ui.lists.strings
-
-internal val esListsStrings = ListsStrings(
- animeToolbarSearchPlaceholder = "Buscar Anime…",
- mangaToolbarSearchPlaceholder = "Buscar Manga…",
-
- entryFormatTv = "TV",
- entryFormatTvShort = "Corto TV",
- entryFormatMovie = "Película",
- entryFormatSpecial = "Especial",
- entryFormatOva = "OVA",
- entryFormatOna = "ONA",
- entryFormatMusic = "Música",
- entryFormatManga = "Manga",
- entryFormatNovel = "Novela Ligera",
- entryFormatOneShot = "One Shot",
- entryFormatUnknown = "Desconocido",
-
- emptyAnimeList = "Esta lista de Anime está vacía",
- emptyMangaList = "Esta lista de Manga está vacía",
-
- errorMessage = "Algo ha ocurrido al obtener la información de la lista seleccionada",
- errorCover = "Carátula no encontrada",
- errorRetryButton = "Interta de nuevo",
-
- changeListButton = "Cambiar lista",
-)
diff --git a/ui/lists/src/commonMain/kotlin/dev/alvr/katana/ui/lists/view/components/MediaList.kt b/ui/lists/src/commonMain/kotlin/dev/alvr/katana/ui/lists/view/components/MediaList.kt
index 370458bc9..abf717f81 100644
--- a/ui/lists/src/commonMain/kotlin/dev/alvr/katana/ui/lists/view/components/MediaList.kt
+++ b/ui/lists/src/commonMain/kotlin/dev/alvr/katana/ui/lists/view/components/MediaList.kt
@@ -50,7 +50,6 @@ import dev.alvr.katana.common.core.zero
import dev.alvr.katana.ui.base.components.KatanaPullRefresh
import dev.alvr.katana.ui.base.modifiers.katanaPlaceholder
import dev.alvr.katana.ui.lists.entities.MediaListItem
-import dev.alvr.katana.ui.lists.strings.LocalListsStrings
import dev.alvr.katana.ui.lists.viewmodel.ListState
import io.kamel.image.KamelImage
import io.kamel.image.asyncPainterResource
@@ -58,6 +57,7 @@ import katana.ui.lists.generated.resources.Res
import kotlinx.collections.immutable.ImmutableList
import org.jetbrains.compose.resources.ExperimentalResourceApi
import org.jetbrains.compose.resources.painterResource
+import org.jetbrains.compose.resources.stringResource
@Composable
internal fun MediaList(
@@ -266,7 +266,7 @@ private fun Cover(
Image(
modifier = Modifier.align(Alignment.Center),
painter = painterResource(Res.drawable.default_cover),
- contentDescription = LocalListsStrings.current.errorCover,
+ contentDescription = stringResource(Res.string.error_cover),
)
},
)
@@ -288,19 +288,20 @@ private fun Title(
}
@Composable
+@OptIn(ExperimentalResourceApi::class)
private fun Subtitle(
format: MediaListItem.Format,
modifier: Modifier = Modifier,
nextEpisode: MediaListItem.AnimeListItem.NextEpisode? = null,
) {
- val strings = LocalListsStrings.current
val text = buildAnnotatedString {
append(format.value)
if (nextEpisode != null) {
- append(" ${strings.entryNextEpisodeSeparator} ")
+ append(" ${stringResource(Res.string.entry_next_episode_separator)} ")
append(
- strings.entryNextEpisode(
+ stringResource(
+ Res.string.entry_next_episode,
nextEpisode.number,
KatanaDateFormatter.DateWithTime(nextEpisode.date),
),
@@ -338,6 +339,7 @@ private fun Score(
}
@Composable
+@OptIn(ExperimentalResourceApi::class)
private fun PlusOne(
progress: Int,
total: Int?,
@@ -348,7 +350,7 @@ private fun PlusOne(
// Episodes - Chapters (Anime & Manga)
if (progress != total) {
PlusOneButton(
- progress = LocalListsStrings.current.entryProgress(progress, total ?: String.unknown),
+ progress = stringResource(Res.string.entry_progress, progress, total ?: String.unknown),
itemLoading = itemLoading,
onAddPlusOne = onAddPlusOne,
modifier = modifier,
@@ -357,6 +359,7 @@ private fun PlusOne(
}
@Composable
+@OptIn(ExperimentalResourceApi::class)
private fun PlusOneButton(
progress: String,
itemLoading: Boolean,
@@ -370,7 +373,7 @@ private fun PlusOneButton(
) {
Text(
modifier = Modifier.katanaPlaceholder(visible = itemLoading),
- text = LocalListsStrings.current.entryPlusOne(progress),
+ text = stringResource(Res.string.entry_plus_one, progress),
)
}
}
diff --git a/ui/login/src/androidMain/kotlin/dev/alvr/katana/ui/login/view/LoginScreen.kt b/ui/login/src/androidMain/kotlin/dev/alvr/katana/ui/login/view/LoginScreen.kt
index f67a7a24d..83e95b183 100644
--- a/ui/login/src/androidMain/kotlin/dev/alvr/katana/ui/login/view/LoginScreen.kt
+++ b/ui/login/src/androidMain/kotlin/dev/alvr/katana/ui/login/view/LoginScreen.kt
@@ -78,12 +78,12 @@ import dev.alvr.katana.ui.login.LOGIN_DEEP_LINK
import dev.alvr.katana.ui.login.LOGO_FULL_SIZE
import dev.alvr.katana.ui.login.LOGO_RESIZED
import dev.alvr.katana.ui.login.navigation.LoginNavigator
-import dev.alvr.katana.ui.login.strings.LocalLoginStrings
import dev.alvr.katana.ui.login.viewmodel.LoginState
import dev.alvr.katana.ui.login.viewmodel.LoginViewModel
import katana.ui.login.generated.resources.Res
import org.jetbrains.compose.resources.ExperimentalResourceApi
import org.jetbrains.compose.resources.painterResource
+import org.jetbrains.compose.resources.stringResource
import org.koin.androidx.compose.koinViewModel
import org.koin.core.parameter.parametersOf
@@ -109,8 +109,6 @@ internal fun LoginScreen(
@Composable
@OptIn(ExperimentalResourceApi::class)
private fun Login(state: LoginState, onLogin: () -> Unit) {
- val strings = LocalLoginStrings.current
-
val background = remember {
listOf(
Res.drawable.background_chihiro,
@@ -126,9 +124,9 @@ private fun Login(state: LoginState, onLogin: () -> Unit) {
state.saved -> onLogin()
state.errorType != null -> {
val message = when (state.errorType) {
- LoginState.ErrorType.SaveToken -> strings.saveTokenError
- LoginState.ErrorType.SaveUserId -> strings.fetchUserIdError
- }
+ LoginState.ErrorType.SaveToken -> Res.string.save_token_error
+ LoginState.ErrorType.SaveUserId -> Res.string.fetch_user_id_error
+ }.let { res -> stringResource(res) }
LaunchedEffect(state.errorType) {
scaffoldState.snackbarHostState.showSnackbar(message)
}
@@ -149,7 +147,7 @@ private fun Login(state: LoginState, onLogin: () -> Unit) {
} else {
Image(
painter = painterResource(background),
- contentDescription = strings.contentDescriptionBackground,
+ contentDescription = stringResource(Res.string.content_description_background),
contentScale = ContentScale.Crop,
modifier = Modifier
.fillMaxSize()
@@ -198,7 +196,7 @@ private fun KatanaLogo() {
Image(
painter = painterResource(Res.drawable.ic_katana_logo),
- contentDescription = LocalLoginStrings.current.contentDescriptionKatanaLogo,
+ contentDescription = stringResource(Res.string.content_description_katana_logo),
modifier = Modifier
.padding(top = 8.dp)
.fillMaxWidth(fraction = sizeFraction),
@@ -206,9 +204,10 @@ private fun KatanaLogo() {
}
@Composable
+@OptIn(ExperimentalResourceApi::class)
private fun Description() {
Text(
- text = LocalLoginStrings.current.headerKatanaDescription,
+ text = stringResource(Res.string.header_katana_description),
style = MaterialTheme.typography.headlineSmall,
)
}
@@ -248,9 +247,10 @@ private fun GetStarted(onStartedClick: (State) -> Unit) {
}
@Composable
+@OptIn(ExperimentalResourceApi::class)
private fun GetStartedDescription() {
Text(
- text = LocalLoginStrings.current.getStartedDescription,
+ text = stringResource(Res.string.get_started_description),
textAlign = TextAlign.Justify,
)
}
@@ -260,7 +260,7 @@ private fun GetStartedDescription() {
private fun GetStartedButton(onStartedClick: (State) -> Unit) {
val inlineArrow = "inlineArrowContent"
val text = buildAnnotatedString {
- append(LocalLoginStrings.current.getStartedButton)
+ append(stringResource(Res.string.get_started_button))
append(' ')
appendInlineContent(inlineArrow)
}
@@ -290,8 +290,8 @@ private fun GetStartedButton(onStartedClick: (State) -> Unit) {
),
) {
Icon(
- contentDescription = LocalLoginStrings.current.contentDescriptionGetStartedArrow,
imageVector = Icons.AutoMirrored.Filled.ArrowForward,
+ contentDescription = stringResource(Res.string.content_description_get_started_arrow),
modifier = Modifier.offset(x = translation),
tint = MaterialTheme.colorScheme.onSurface,
)
@@ -339,14 +339,16 @@ private fun Begin() {
}
@Composable
+@OptIn(ExperimentalResourceApi::class)
private fun BeginText() {
Text(
- text = LocalLoginStrings.current.beginDescription,
+ text = stringResource(Res.string.begin_description),
textAlign = TextAlign.Justify,
)
}
@Composable
+@OptIn(ExperimentalResourceApi::class)
private fun BeginRegisterButton(modifier: Modifier = Modifier) {
val uriHandler = LocalUriHandler.current
@@ -355,12 +357,13 @@ private fun BeginRegisterButton(modifier: Modifier = Modifier) {
onClick = { uriHandler.openUri(ANILIST_REGISTER) },
) {
Text(
- text = LocalLoginStrings.current.beginRegisterButton,
+ text = stringResource(Res.string.begin_register_button),
)
}
}
@Composable
+@OptIn(ExperimentalResourceApi::class)
private fun BeginLoginButton(modifier: Modifier = Modifier) {
val uriHandler = LocalUriHandler.current
@@ -369,7 +372,7 @@ private fun BeginLoginButton(modifier: Modifier = Modifier) {
onClick = { uriHandler.openUri(ANILIST_LOGIN) },
) {
Text(
- text = LocalLoginStrings.current.beginLoginButton,
+ text = stringResource(Res.string.begin_login_button),
)
}
}
diff --git a/ui/login/src/commonMain/composeResources/values-es/strings.xml b/ui/login/src/commonMain/composeResources/values-es/strings.xml
new file mode 100644
index 000000000..7da87b319
--- /dev/null
+++ b/ui/login/src/commonMain/composeResources/values-es/strings.xml
@@ -0,0 +1,18 @@
+
+
+ Un cliente Android para Anilist
+
+ Katana es un cliente de Anilist para Android donde puedes llevar la cuenta, explorar, descubrir y comentar Anime & Manga.
+ Empezar
+
+ Para empezar a usar Katana necesitas una cuenta de Anilist. Toca uno de los botones de abajo para registrarte o iniciar sesión.
+ Registrarse
+ Iniciar sesión
+
+ Ha habido un error al obtener el usuario, por favor, inténtalo de nuevo.
+ Ha habido un error al iniciar sesión, por favor, inténtalo de nuevo.
+
+ Fondo de inicio de sesión. Selección variada de Studio Ghibli
+ Logo de Katana
+ Flecha indicando continuación
+
diff --git a/ui/login/src/commonMain/composeResources/values/strings.xml b/ui/login/src/commonMain/composeResources/values/strings.xml
new file mode 100644
index 000000000..ebda68799
--- /dev/null
+++ b/ui/login/src/commonMain/composeResources/values/strings.xml
@@ -0,0 +1,18 @@
+
+
+ An Anilist client for Android
+
+ Katana is an Anilist client for Android where you can track, explore, discover and discuss Anime & Manga.
+ Get Started
+
+ To start using Katana you need an Anilist account. Tap one of the buttons below to register or login.
+ Register
+ Login
+
+ There was an error obtaining the user, please try again.
+ There was an error logging in, please try again.
+
+ Login background. Assorted selection of Studio Ghibli
+ Katana logo
+ Arrow indicating continuation
+
diff --git a/ui/login/src/commonMain/kotlin/dev/alvr/katana/ui/login/strings/LoginStrings.kt b/ui/login/src/commonMain/kotlin/dev/alvr/katana/ui/login/strings/LoginStrings.kt
deleted file mode 100644
index edb60c972..000000000
--- a/ui/login/src/commonMain/kotlin/dev/alvr/katana/ui/login/strings/LoginStrings.kt
+++ /dev/null
@@ -1,38 +0,0 @@
-package dev.alvr.katana.ui.login.strings
-
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.Immutable
-import androidx.compose.runtime.compositionLocalOf
-import dev.alvr.katana.ui.base.utils.Locales
-import dev.alvr.katana.ui.base.utils.rememberKatanaStrings
-import kotlinx.collections.immutable.persistentMapOf
-
-@Immutable
-@Suppress("LongParameterList", "UseDataClass")
-class LoginStrings internal constructor(
- internal val headerKatanaDescription: String,
-
- internal val getStartedDescription: String,
- internal val getStartedButton: String,
-
- internal val beginDescription: String,
- internal val beginRegisterButton: String,
- internal val beginLoginButton: String,
-
- internal val fetchUserIdError: String,
- internal val saveTokenError: String,
-
- internal val contentDescriptionBackground: String,
- internal val contentDescriptionKatanaLogo: String,
- internal val contentDescriptionGetStartedArrow: String,
-)
-
-internal val Strings = persistentMapOf(
- Locales.EN to enLoginStrings,
- Locales.ES to esLoginStrings,
-)
-
-val LocalLoginStrings = compositionLocalOf { enLoginStrings }
-
-@Composable
-fun rememberLoginStrings() = rememberKatanaStrings(Strings)
diff --git a/ui/login/src/commonMain/kotlin/dev/alvr/katana/ui/login/strings/enLoginStrings.kt b/ui/login/src/commonMain/kotlin/dev/alvr/katana/ui/login/strings/enLoginStrings.kt
deleted file mode 100644
index 2ded7c0b0..000000000
--- a/ui/login/src/commonMain/kotlin/dev/alvr/katana/ui/login/strings/enLoginStrings.kt
+++ /dev/null
@@ -1,21 +0,0 @@
-package dev.alvr.katana.ui.login.strings
-
-internal val enLoginStrings = LoginStrings(
- headerKatanaDescription = "An Anilist client for Android",
-
- getStartedDescription = "Katana is an Anilist client for Android where you can track, explore, " +
- "discover and discuss Anime & Manga.",
- getStartedButton = "Get Started",
-
- beginDescription = "To start using Katana you need an Anilist account. Tap one of the buttons " +
- "below to register or login.",
- beginRegisterButton = "Register",
- beginLoginButton = "Login",
-
- fetchUserIdError = "There was an error obtaining the user, please try again.",
- saveTokenError = "There was an error logging in, please try again.",
-
- contentDescriptionBackground = "Login background. Assorted selection of Studio Ghibli",
- contentDescriptionKatanaLogo = "Katana logo",
- contentDescriptionGetStartedArrow = "Arrow indicating continuation",
-)
diff --git a/ui/login/src/commonMain/kotlin/dev/alvr/katana/ui/login/strings/esLoginStrings.kt b/ui/login/src/commonMain/kotlin/dev/alvr/katana/ui/login/strings/esLoginStrings.kt
deleted file mode 100644
index e5095b404..000000000
--- a/ui/login/src/commonMain/kotlin/dev/alvr/katana/ui/login/strings/esLoginStrings.kt
+++ /dev/null
@@ -1,21 +0,0 @@
-package dev.alvr.katana.ui.login.strings
-
-internal val esLoginStrings = LoginStrings(
- headerKatanaDescription = "Un cliente Android para Anilist",
-
- getStartedDescription = "Katana es un cliente de Anilist para Android donde puedes llevar la " +
- "cuenta, explorar, descubrir y comentar Anime & Manga.",
- getStartedButton = "Empezar",
-
- beginDescription = "Para empezar a usar Katana necesitas una cuenta de Anilist. Toca uno de los " +
- "botones de abajo para registrarte o iniciar sesión.",
- beginRegisterButton = "Registrarse",
- beginLoginButton = "Iniciar sesión",
-
- fetchUserIdError = "Ha habido un error al obtener el usuario, por favor, inténtalo de nuevo.",
- saveTokenError = "Ha habido un error al iniciar sesión, por favor, inténtalo de nuevo.",
-
- contentDescriptionBackground = "Fondo de inicio de sesión. Selección variada de Studio Ghibli",
- contentDescriptionKatanaLogo = "Logo de Katana",
- contentDescriptionGetStartedArrow = "Flecha indicando continuación",
-)
diff --git a/ui/social/src/commonMain/composeResources/values-es/strings.xml b/ui/social/src/commonMain/composeResources/values-es/strings.xml
new file mode 100644
index 000000000..d5fc78632
--- /dev/null
+++ b/ui/social/src/commonMain/composeResources/values-es/strings.xml
@@ -0,0 +1,5 @@
+
+
+ Social
+ Buscar…
+
diff --git a/ui/social/src/commonMain/composeResources/values/strings.xml b/ui/social/src/commonMain/composeResources/values/strings.xml
new file mode 100644
index 000000000..dc142ae4a
--- /dev/null
+++ b/ui/social/src/commonMain/composeResources/values/strings.xml
@@ -0,0 +1,5 @@
+
+
+ Social
+ Search…
+
diff --git a/ui/social/src/commonMain/kotlin/dev/alvr/katana/ui/social/strings/SocialStrings.kt b/ui/social/src/commonMain/kotlin/dev/alvr/katana/ui/social/strings/SocialStrings.kt
deleted file mode 100644
index aff3767d1..000000000
--- a/ui/social/src/commonMain/kotlin/dev/alvr/katana/ui/social/strings/SocialStrings.kt
+++ /dev/null
@@ -1,25 +0,0 @@
-package dev.alvr.katana.ui.social.strings
-
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.Immutable
-import androidx.compose.runtime.compositionLocalOf
-import dev.alvr.katana.ui.base.utils.Locales
-import dev.alvr.katana.ui.base.utils.rememberKatanaStrings
-import kotlinx.collections.immutable.persistentMapOf
-
-@Immutable
-@Suppress("LongParameterList", "UseDataClass")
-class SocialStrings internal constructor(
- internal val socialToolbarTitle: String,
- internal val socialToolbarSearchPlaceholder: String,
-)
-
-internal val Strings = persistentMapOf(
- Locales.EN to enSocialStrings,
- Locales.ES to esSocialStrings,
-)
-
-val LocalSocialStrings = compositionLocalOf { enSocialStrings }
-
-@Composable
-fun rememberSocialStrings() = rememberKatanaStrings(Strings)
diff --git a/ui/social/src/commonMain/kotlin/dev/alvr/katana/ui/social/strings/enSocialStrings.kt b/ui/social/src/commonMain/kotlin/dev/alvr/katana/ui/social/strings/enSocialStrings.kt
deleted file mode 100644
index ce8132b1a..000000000
--- a/ui/social/src/commonMain/kotlin/dev/alvr/katana/ui/social/strings/enSocialStrings.kt
+++ /dev/null
@@ -1,6 +0,0 @@
-package dev.alvr.katana.ui.social.strings
-
-internal val enSocialStrings = SocialStrings(
- socialToolbarTitle = "Social",
- socialToolbarSearchPlaceholder = "Search…",
-)
diff --git a/ui/social/src/commonMain/kotlin/dev/alvr/katana/ui/social/strings/esSocialStrings.kt b/ui/social/src/commonMain/kotlin/dev/alvr/katana/ui/social/strings/esSocialStrings.kt
deleted file mode 100644
index 6cc5dd5de..000000000
--- a/ui/social/src/commonMain/kotlin/dev/alvr/katana/ui/social/strings/esSocialStrings.kt
+++ /dev/null
@@ -1,6 +0,0 @@
-package dev.alvr.katana.ui.social.strings
-
-internal val esSocialStrings = SocialStrings(
- socialToolbarTitle = "Social",
- socialToolbarSearchPlaceholder = "Buscar…",
-)
diff --git a/ui/social/src/commonMain/kotlin/dev/alvr/katana/ui/social/view/SocialScreen.kt b/ui/social/src/commonMain/kotlin/dev/alvr/katana/ui/social/view/SocialScreen.kt
index e05a89b2d..2eccb694a 100644
--- a/ui/social/src/commonMain/kotlin/dev/alvr/katana/ui/social/view/SocialScreen.kt
+++ b/ui/social/src/commonMain/kotlin/dev/alvr/katana/ui/social/view/SocialScreen.kt
@@ -8,23 +8,27 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import dev.alvr.katana.ui.base.components.home.KatanaHomeScaffold
import dev.alvr.katana.ui.base.navigation.Destination
-import dev.alvr.katana.ui.social.strings.LocalSocialStrings
+import katana.ui.social.generated.resources.Res
+import org.jetbrains.compose.resources.ExperimentalResourceApi
+import org.jetbrains.compose.resources.stringResource
@Composable
@Destination
-@OptIn(ExperimentalMaterialApi::class, ExperimentalAnimationApi::class)
+@OptIn(
+ ExperimentalMaterialApi::class,
+ ExperimentalResourceApi::class,
+ ExperimentalAnimationApi::class,
+)
internal fun SocialScreen() {
- val strings = LocalSocialStrings.current
-
KatanaHomeScaffold(
- title = strings.socialToolbarTitle,
- searchPlaceholder = strings.socialToolbarSearchPlaceholder,
+ title = stringResource(Res.string.social_toolbar_title),
+ searchPlaceholder = stringResource(Res.string.social_toolbar_search_placeholder),
onSearch = {},
backContent = { Filter() },
) { paddingValues ->
Text(
modifier = Modifier.padding(paddingValues),
- text = strings.socialToolbarTitle,
+ text = stringResource(Res.string.social_toolbar_title),
)
}
}