mirror of
https://github.com/Suwayomi/TachideskJUI.git
synced 2025-12-23 21:12:34 +01:00
Cleanup, remove uneeded locale library
This commit is contained in:
@@ -77,7 +77,6 @@ dependencies {
|
|||||||
// Localization
|
// Localization
|
||||||
implementation(libs.moko.core)
|
implementation(libs.moko.core)
|
||||||
implementation(libs.moko.compose)
|
implementation(libs.moko.compose)
|
||||||
implementation(libs.locale)
|
|
||||||
|
|
||||||
// Testing
|
// Testing
|
||||||
testImplementation(kotlin("test-junit"))
|
testImplementation(kotlin("test-junit"))
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
import org.jetbrains.compose.compose
|
||||||
|
|
||||||
@Suppress("DSL_SCOPE_VIOLATION")
|
@Suppress("DSL_SCOPE_VIOLATION")
|
||||||
plugins {
|
plugins {
|
||||||
id(libs.plugins.kotlin.multiplatform.get().pluginId)
|
id(libs.plugins.kotlin.multiplatform.get().pluginId)
|
||||||
@@ -46,8 +48,8 @@ kotlin {
|
|||||||
api(libs.multiplatformSettings.core)
|
api(libs.multiplatformSettings.core)
|
||||||
api(libs.multiplatformSettings.coroutines)
|
api(libs.multiplatformSettings.coroutines)
|
||||||
api(libs.multiplatformSettings.serialization)
|
api(libs.multiplatformSettings.serialization)
|
||||||
api(libs.locale)
|
|
||||||
api(libs.dateTime)
|
api(libs.dateTime)
|
||||||
|
api(compose("org.jetbrains.compose.ui:ui-text"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
val commonTest by getting {
|
val commonTest by getting {
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
package ca.gosyer.jui.core.lang
|
package ca.gosyer.jui.core.lang
|
||||||
|
|
||||||
import io.fluidsonic.locale.Locale
|
import androidx.compose.ui.text.intl.Locale
|
||||||
|
|
||||||
expect fun Locale.Companion.getDefault(): Locale
|
expect fun Locale.Companion.getDefault(): Locale
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
package ca.gosyer.jui.core.lang
|
package ca.gosyer.jui.core.lang
|
||||||
|
|
||||||
import io.fluidsonic.locale.Locale
|
import androidx.compose.ui.text.intl.Locale
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Replaces the given string to have at most [count] characters using [replacement] at its end.
|
* Replaces the given string to have at most [count] characters using [replacement] at its end.
|
||||||
|
|||||||
@@ -6,12 +6,12 @@
|
|||||||
|
|
||||||
package ca.gosyer.jui.core.lang
|
package ca.gosyer.jui.core.lang
|
||||||
|
|
||||||
import io.fluidsonic.locale.Locale
|
import androidx.compose.ui.text.intl.Locale
|
||||||
import io.fluidsonic.locale.toCommon
|
|
||||||
import io.fluidsonic.locale.toPlatform
|
|
||||||
import java.util.Locale as PlatformLocale
|
import java.util.Locale as PlatformLocale
|
||||||
|
|
||||||
actual fun Locale.Companion.getDefault(): Locale = PlatformLocale.getDefault().toCommon()
|
actual fun Locale.Companion.getDefault(): Locale = current
|
||||||
|
|
||||||
|
fun Locale.toPlatform() = PlatformLocale.forLanguageTag(toLanguageTag())
|
||||||
|
|
||||||
actual fun Locale.getDisplayLanguage(displayLocale: Locale): String = toPlatform()
|
actual fun Locale.getDisplayLanguage(displayLocale: Locale): String = toPlatform()
|
||||||
.getDisplayLanguage(displayLocale.toPlatform())
|
.getDisplayLanguage(displayLocale.toPlatform())
|
||||||
|
|||||||
@@ -7,10 +7,9 @@
|
|||||||
|
|
||||||
package ca.gosyer.jui.core.lang
|
package ca.gosyer.jui.core.lang
|
||||||
|
|
||||||
import io.fluidsonic.locale.Locale
|
import androidx.compose.ui.text.intl.Locale
|
||||||
import io.fluidsonic.locale.toPlatform
|
|
||||||
|
|
||||||
fun String.capitalize(locale: Locale = Locale.getDefault()) =
|
fun String.capitalize(locale: Locale = Locale.current) =
|
||||||
replaceFirstChar { if (it.isLowerCase()) it.titlecase(locale) else it.toString() }
|
replaceFirstChar { if (it.isLowerCase()) it.titlecase(locale) else it.toString() }
|
||||||
|
|
||||||
actual fun String.uppercase(locale: Locale): String = uppercase(locale.toPlatform())
|
actual fun String.uppercase(locale: Locale): String = uppercase(locale.toPlatform())
|
||||||
|
|||||||
@@ -43,9 +43,7 @@ kotlin {
|
|||||||
api(libs.ktor.auth)
|
api(libs.ktor.auth)
|
||||||
api(libs.ktor.logging)
|
api(libs.ktor.logging)
|
||||||
api(libs.ktor.websockets)
|
api(libs.ktor.websockets)
|
||||||
api(libs.ktor.okHttp)
|
|
||||||
api(libs.okio)
|
api(libs.okio)
|
||||||
api(libs.locale)
|
|
||||||
api(libs.dateTime)
|
api(libs.dateTime)
|
||||||
api(projects.core)
|
api(projects.core)
|
||||||
api(projects.i18n)
|
api(projects.i18n)
|
||||||
@@ -61,6 +59,7 @@ kotlin {
|
|||||||
val desktopMain by getting {
|
val desktopMain by getting {
|
||||||
dependencies {
|
dependencies {
|
||||||
api(kotlin("stdlib-jdk8"))
|
api(kotlin("stdlib-jdk8"))
|
||||||
|
api(libs.ktor.okHttp)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
val desktopTest by getting {
|
val desktopTest by getting {
|
||||||
@@ -69,6 +68,7 @@ kotlin {
|
|||||||
val androidMain by getting {
|
val androidMain by getting {
|
||||||
dependencies {
|
dependencies {
|
||||||
api(kotlin("stdlib-jdk8"))
|
api(kotlin("stdlib-jdk8"))
|
||||||
|
api(libs.ktor.okHttp)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
val androidTest by getting {
|
val androidTest by getting {
|
||||||
|
|||||||
@@ -6,11 +6,11 @@
|
|||||||
|
|
||||||
package ca.gosyer.jui.data.catalog
|
package ca.gosyer.jui.data.catalog
|
||||||
|
|
||||||
|
import androidx.compose.ui.text.intl.Locale
|
||||||
import ca.gosyer.jui.core.lang.getDefault
|
import ca.gosyer.jui.core.lang.getDefault
|
||||||
import ca.gosyer.jui.core.prefs.Preference
|
import ca.gosyer.jui.core.prefs.Preference
|
||||||
import ca.gosyer.jui.core.prefs.PreferenceStore
|
import ca.gosyer.jui.core.prefs.PreferenceStore
|
||||||
import ca.gosyer.jui.data.library.model.DisplayMode
|
import ca.gosyer.jui.data.library.model.DisplayMode
|
||||||
import io.fluidsonic.locale.Locale
|
|
||||||
|
|
||||||
class CatalogPreferences(private val preferenceStore: PreferenceStore) {
|
class CatalogPreferences(private val preferenceStore: PreferenceStore) {
|
||||||
fun languages(): Preference<Set<String>> {
|
fun languages(): Preference<Set<String>> {
|
||||||
|
|||||||
@@ -6,10 +6,10 @@
|
|||||||
|
|
||||||
package ca.gosyer.jui.data.extension
|
package ca.gosyer.jui.data.extension
|
||||||
|
|
||||||
|
import androidx.compose.ui.text.intl.Locale
|
||||||
import ca.gosyer.jui.core.lang.getDefault
|
import ca.gosyer.jui.core.lang.getDefault
|
||||||
import ca.gosyer.jui.core.prefs.Preference
|
import ca.gosyer.jui.core.prefs.Preference
|
||||||
import ca.gosyer.jui.core.prefs.PreferenceStore
|
import ca.gosyer.jui.core.prefs.PreferenceStore
|
||||||
import io.fluidsonic.locale.Locale
|
|
||||||
|
|
||||||
class ExtensionPreferences(private val preferenceStore: PreferenceStore) {
|
class ExtensionPreferences(private val preferenceStore: PreferenceStore) {
|
||||||
fun languages(): Preference<Set<String>> {
|
fun languages(): Preference<Set<String>> {
|
||||||
|
|||||||
@@ -6,9 +6,9 @@
|
|||||||
|
|
||||||
package ca.gosyer.jui.data.base
|
package ca.gosyer.jui.data.base
|
||||||
|
|
||||||
|
import androidx.compose.ui.text.intl.Locale
|
||||||
import ca.gosyer.jui.core.lang.getDefault
|
import ca.gosyer.jui.core.lang.getDefault
|
||||||
import io.fluidsonic.locale.Locale
|
import ca.gosyer.jui.core.lang.toPlatform
|
||||||
import io.fluidsonic.locale.toPlatform
|
|
||||||
import kotlinx.datetime.Instant
|
import kotlinx.datetime.Instant
|
||||||
import kotlinx.datetime.toJavaInstant
|
import kotlinx.datetime.toJavaInstant
|
||||||
import me.tatarka.inject.annotations.Inject
|
import me.tatarka.inject.annotations.Inject
|
||||||
|
|||||||
@@ -85,7 +85,6 @@ dependencies {
|
|||||||
// Localization
|
// Localization
|
||||||
implementation(libs.moko.core)
|
implementation(libs.moko.core)
|
||||||
implementation(libs.moko.compose)
|
implementation(libs.moko.compose)
|
||||||
implementation(libs.locale)
|
|
||||||
|
|
||||||
// Testing
|
// Testing
|
||||||
testImplementation(kotlin("test-junit"))
|
testImplementation(kotlin("test-junit"))
|
||||||
|
|||||||
@@ -53,7 +53,6 @@ aboutLibraries = "10.1.0"
|
|||||||
dateTime = "0.3.2"
|
dateTime = "0.3.2"
|
||||||
|
|
||||||
# Localization
|
# Localization
|
||||||
locale = "0.11.0"
|
|
||||||
moko = "0.19.1"
|
moko = "0.19.1"
|
||||||
|
|
||||||
# BuildConfigs
|
# BuildConfigs
|
||||||
@@ -144,7 +143,6 @@ dateTime = { module = "org.jetbrains.kotlinx:kotlinx-datetime", version.ref = "d
|
|||||||
# Localization
|
# Localization
|
||||||
moko-core = { module = "dev.icerock.moko:resources", version.ref = "moko" }
|
moko-core = { module = "dev.icerock.moko:resources", version.ref = "moko" }
|
||||||
moko-compose = { module = "dev.icerock.moko:resources-compose", version.ref = "moko" }
|
moko-compose = { module = "dev.icerock.moko:resources-compose", version.ref = "moko" }
|
||||||
locale = { module = "io.fluidsonic.locale:fluid-locale", version.ref = "locale" }
|
|
||||||
|
|
||||||
# Optimizer
|
# Optimizer
|
||||||
proguard = { module = "com.guardsquare:proguard-gradle", version.ref = "proguard" }
|
proguard = { module = "com.guardsquare:proguard-gradle", version.ref = "proguard" }
|
||||||
|
|||||||
@@ -1,11 +1,8 @@
|
|||||||
import org.jetbrains.compose.compose
|
|
||||||
|
|
||||||
@Suppress("DSL_SCOPE_VIOLATION")
|
@Suppress("DSL_SCOPE_VIOLATION")
|
||||||
plugins {
|
plugins {
|
||||||
id(libs.plugins.kotlin.multiplatform.get().pluginId)
|
id(libs.plugins.kotlin.multiplatform.get().pluginId)
|
||||||
id(libs.plugins.android.library.get().pluginId)
|
id(libs.plugins.android.library.get().pluginId)
|
||||||
id(libs.plugins.moko.gradle.get().pluginId)
|
id(libs.plugins.moko.gradle.get().pluginId)
|
||||||
id(libs.plugins.compose.get().pluginId)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
kotlin {
|
kotlin {
|
||||||
@@ -28,8 +25,6 @@ kotlin {
|
|||||||
val commonMain by getting {
|
val commonMain by getting {
|
||||||
dependencies {
|
dependencies {
|
||||||
api(kotlin("stdlib-common"))
|
api(kotlin("stdlib-common"))
|
||||||
compileOnly(compose.runtime)
|
|
||||||
compileOnly(compose.ui)
|
|
||||||
api(libs.moko.core)
|
api(libs.moko.core)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,7 +51,6 @@ kotlin {
|
|||||||
api(libs.accompanist.pagerIndicators)
|
api(libs.accompanist.pagerIndicators)
|
||||||
api(libs.accompanist.flowLayout)
|
api(libs.accompanist.flowLayout)
|
||||||
api(libs.krokiCoroutines)
|
api(libs.krokiCoroutines)
|
||||||
api(libs.locale)
|
|
||||||
api(libs.dateTime)
|
api(libs.dateTime)
|
||||||
api(libs.aboutLibraries.core)
|
api(libs.aboutLibraries.core)
|
||||||
api(libs.aboutLibraries.ui)
|
api(libs.aboutLibraries.ui)
|
||||||
|
|||||||
@@ -6,10 +6,10 @@
|
|||||||
|
|
||||||
package ca.gosyer.jui.ui.base.components
|
package ca.gosyer.jui.ui.base.components
|
||||||
|
|
||||||
|
import androidx.compose.ui.text.intl.Locale
|
||||||
import ca.gosyer.jui.core.lang.getDefault
|
import ca.gosyer.jui.core.lang.getDefault
|
||||||
import ca.gosyer.jui.core.lang.getDisplayLanguage
|
import ca.gosyer.jui.core.lang.getDisplayLanguage
|
||||||
import io.fluidsonic.locale.Locale
|
|
||||||
|
|
||||||
fun localeToString(locale: String) = Locale.forLanguageTag(locale)
|
fun localeToString(locale: String) = Locale(locale)
|
||||||
.getDisplayLanguage(Locale.getDefault())
|
.getDisplayLanguage(Locale.getDefault())
|
||||||
.ifBlank { locale.uppercase() }
|
.ifBlank { locale.uppercase() }
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
|
|
||||||
package ca.gosyer.jui.ui.extensions
|
package ca.gosyer.jui.ui.extensions
|
||||||
|
|
||||||
|
import androidx.compose.ui.text.intl.Locale
|
||||||
import ca.gosyer.jui.core.lang.displayName
|
import ca.gosyer.jui.core.lang.displayName
|
||||||
import ca.gosyer.jui.data.extension.ExtensionPreferences
|
import ca.gosyer.jui.data.extension.ExtensionPreferences
|
||||||
import ca.gosyer.jui.data.models.Extension
|
import ca.gosyer.jui.data.models.Extension
|
||||||
@@ -13,7 +14,6 @@ import ca.gosyer.jui.data.server.interactions.ExtensionInteractionHandler
|
|||||||
import ca.gosyer.jui.i18n.MR
|
import ca.gosyer.jui.i18n.MR
|
||||||
import ca.gosyer.jui.uicore.vm.ContextWrapper
|
import ca.gosyer.jui.uicore.vm.ContextWrapper
|
||||||
import ca.gosyer.jui.uicore.vm.ViewModel
|
import ca.gosyer.jui.uicore.vm.ViewModel
|
||||||
import io.fluidsonic.locale.Locale
|
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
import kotlinx.coroutines.flow.SharingStarted
|
import kotlinx.coroutines.flow.SharingStarted
|
||||||
import kotlinx.coroutines.flow.asStateFlow
|
import kotlinx.coroutines.flow.asStateFlow
|
||||||
@@ -148,7 +148,7 @@ class ExtensionsScreenViewModel @Inject constructor(
|
|||||||
if (it.key == "all") {
|
if (it.key == "all") {
|
||||||
MR.strings.all.toPlatformString()
|
MR.strings.all.toPlatformString()
|
||||||
} else {
|
} else {
|
||||||
Locale.forLanguageTag(it.key).displayName
|
Locale(it.key).displayName
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ import androidx.compose.ui.graphics.Color
|
|||||||
import androidx.compose.ui.graphics.FilterQuality
|
import androidx.compose.ui.graphics.FilterQuality
|
||||||
import androidx.compose.ui.text.SpanStyle
|
import androidx.compose.ui.text.SpanStyle
|
||||||
import androidx.compose.ui.text.buildAnnotatedString
|
import androidx.compose.ui.text.buildAnnotatedString
|
||||||
|
import androidx.compose.ui.text.intl.Locale
|
||||||
import androidx.compose.ui.text.withStyle
|
import androidx.compose.ui.text.withStyle
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.unit.sp
|
import androidx.compose.ui.unit.sp
|
||||||
@@ -65,7 +66,6 @@ import com.vanpra.composematerialdialogs.MaterialDialog
|
|||||||
import com.vanpra.composematerialdialogs.MaterialDialogState
|
import com.vanpra.composematerialdialogs.MaterialDialogState
|
||||||
import com.vanpra.composematerialdialogs.rememberMaterialDialogState
|
import com.vanpra.composematerialdialogs.rememberMaterialDialogState
|
||||||
import com.vanpra.composematerialdialogs.title
|
import com.vanpra.composematerialdialogs.title
|
||||||
import io.fluidsonic.locale.Locale
|
|
||||||
import io.kamel.image.lazyPainterResource
|
import io.kamel.image.lazyPainterResource
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
@@ -240,7 +240,7 @@ fun LanguageDialog(
|
|||||||
horizontalArrangement = Arrangement.SpaceBetween
|
horizontalArrangement = Arrangement.SpaceBetween
|
||||||
) {
|
) {
|
||||||
val langName by derivedStateOf {
|
val langName by derivedStateOf {
|
||||||
Locale.forLanguageTag(lang).getDisplayName(locale).ifBlank { lang }
|
Locale(lang).getDisplayName(locale).ifBlank { lang.replaceFirstChar { if (it.isLowerCase()) it.titlecase() else it.toString() } }
|
||||||
}
|
}
|
||||||
Text(langName)
|
Text(langName)
|
||||||
Switch(
|
Switch(
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
|
|
||||||
package ca.gosyer.jui.ui.library
|
package ca.gosyer.jui.ui.library
|
||||||
|
|
||||||
|
import androidx.compose.ui.text.intl.Locale
|
||||||
import ca.gosyer.jui.core.lang.getDefault
|
import ca.gosyer.jui.core.lang.getDefault
|
||||||
import ca.gosyer.jui.core.lang.lowercase
|
import ca.gosyer.jui.core.lang.lowercase
|
||||||
import ca.gosyer.jui.core.lang.withDefaultContext
|
import ca.gosyer.jui.core.lang.withDefaultContext
|
||||||
@@ -23,7 +24,6 @@ import ca.gosyer.jui.i18n.MR
|
|||||||
import ca.gosyer.jui.ui.util.lang.Collator
|
import ca.gosyer.jui.ui.util.lang.Collator
|
||||||
import ca.gosyer.jui.uicore.vm.ContextWrapper
|
import ca.gosyer.jui.uicore.vm.ContextWrapper
|
||||||
import ca.gosyer.jui.uicore.vm.ViewModel
|
import ca.gosyer.jui.uicore.vm.ViewModel
|
||||||
import io.fluidsonic.locale.Locale
|
|
||||||
import kotlinx.coroutines.async
|
import kotlinx.coroutines.async
|
||||||
import kotlinx.coroutines.awaitAll
|
import kotlinx.coroutines.awaitAll
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ import androidx.compose.runtime.getValue
|
|||||||
import androidx.compose.runtime.produceState
|
import androidx.compose.runtime.produceState
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.text.intl.Locale
|
||||||
import ca.gosyer.jui.core.lang.getDefault
|
import ca.gosyer.jui.core.lang.getDefault
|
||||||
import ca.gosyer.jui.core.lang.getDisplayName
|
import ca.gosyer.jui.core.lang.getDisplayName
|
||||||
import ca.gosyer.jui.core.lang.withIOContext
|
import ca.gosyer.jui.core.lang.withIOContext
|
||||||
@@ -41,7 +42,6 @@ import ca.gosyer.jui.uicore.vm.viewModel
|
|||||||
import cafe.adriel.voyager.core.screen.Screen
|
import cafe.adriel.voyager.core.screen.Screen
|
||||||
import cafe.adriel.voyager.core.screen.ScreenKey
|
import cafe.adriel.voyager.core.screen.ScreenKey
|
||||||
import cafe.adriel.voyager.core.screen.uniqueScreenKey
|
import cafe.adriel.voyager.core.screen.uniqueScreenKey
|
||||||
import io.fluidsonic.locale.Locale
|
|
||||||
import kotlinx.datetime.Clock
|
import kotlinx.datetime.Clock
|
||||||
import kotlinx.serialization.decodeFromString
|
import kotlinx.serialization.decodeFromString
|
||||||
import kotlinx.serialization.json.Json
|
import kotlinx.serialization.json.Json
|
||||||
@@ -101,7 +101,7 @@ class SettingsGeneralViewModel @Inject constructor(
|
|||||||
?.jsonArray
|
?.jsonArray
|
||||||
.orEmpty()
|
.orEmpty()
|
||||||
.map { it.jsonPrimitive.content }
|
.map { it.jsonPrimitive.content }
|
||||||
.associateWith { Locale.forLanguageTag(it).getDisplayName(currentLocale) }
|
.associateWith { Locale(it).getDisplayName(currentLocale) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
package ca.gosyer.jui.ui.util.lang
|
package ca.gosyer.jui.ui.util.lang
|
||||||
|
|
||||||
import io.fluidsonic.locale.Locale
|
import androidx.compose.ui.text.intl.Locale
|
||||||
|
|
||||||
expect fun Collator(locale: Locale): Collator
|
expect fun Collator(locale: Locale): Collator
|
||||||
|
|
||||||
|
|||||||
@@ -6,8 +6,8 @@
|
|||||||
|
|
||||||
package ca.gosyer.jui.ui.util.lang
|
package ca.gosyer.jui.ui.util.lang
|
||||||
|
|
||||||
import io.fluidsonic.locale.Locale
|
import androidx.compose.ui.text.intl.Locale
|
||||||
import io.fluidsonic.locale.toPlatform
|
import ca.gosyer.jui.core.lang.toPlatform
|
||||||
import java.text.Collator as JvmCollator
|
import java.text.Collator as JvmCollator
|
||||||
|
|
||||||
actual fun Collator(locale: Locale): Collator {
|
actual fun Collator(locale: Locale): Collator {
|
||||||
|
|||||||
@@ -40,7 +40,6 @@ kotlin {
|
|||||||
api(libs.coroutines.core)
|
api(libs.coroutines.core)
|
||||||
api(libs.kamel)
|
api(libs.kamel)
|
||||||
api(libs.voyager.core)
|
api(libs.voyager.core)
|
||||||
api(libs.locale)
|
|
||||||
api(libs.dateTime)
|
api(libs.dateTime)
|
||||||
api(projects.core)
|
api(projects.core)
|
||||||
api(projects.i18n)
|
api(projects.i18n)
|
||||||
|
|||||||
Reference in New Issue
Block a user