mirror of
https://github.com/Suwayomi/TachideskJUI.git
synced 2025-12-10 23:02:04 +01:00
Improve language handling and Compose startup
This commit is contained in:
@@ -6,28 +6,12 @@
|
|||||||
|
|
||||||
package ca.gosyer.data.translation
|
package ca.gosyer.data.translation
|
||||||
|
|
||||||
import ca.gosyer.data.ui.UiPreferences
|
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import javax.inject.Provider
|
import javax.inject.Provider
|
||||||
|
|
||||||
class ResourceProvider @Inject constructor(
|
class ResourceProvider @Inject constructor() : Provider<XmlResourceBundle> {
|
||||||
private val uiPreferences: UiPreferences
|
|
||||||
) : Provider<XmlResourceBundle> {
|
|
||||||
override fun get(): XmlResourceBundle {
|
override fun get(): XmlResourceBundle {
|
||||||
val languagePref = uiPreferences.language()
|
return XmlResourceBundle.forLocale(Locale.getDefault())
|
||||||
return if (languagePref.isSet()) {
|
|
||||||
languagePref.get().let {
|
|
||||||
if (it.isBlank()) {
|
|
||||||
getDefault()
|
|
||||||
} else {
|
|
||||||
val locale: Locale = Locale.forLanguageTag(it)
|
|
||||||
Locale.setDefault(locale)
|
|
||||||
XmlResourceBundle.forLocale(locale)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else getDefault()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getDefault() = XmlResourceBundle.forLocale(Locale.getDefault())
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -78,20 +78,14 @@ class XmlResourceBundle internal constructor(internal val lookup: ConcurrentHash
|
|||||||
val rootBundle = classLoader.getResourceAsStream("values/values/strings.xml")!!
|
val rootBundle = classLoader.getResourceAsStream("values/values/strings.xml")!!
|
||||||
.use { XmlResourceBundle(it) }
|
.use { XmlResourceBundle(it) }
|
||||||
|
|
||||||
val languageBundle = classLoader.getResourceAsStream("values/values-${locale.language}/strings.xml")
|
val languageBundle = classLoader.getResourceAsStream("values/values-${locale.toLanguageTag()}/strings.xml")
|
||||||
?.use { XmlResourceBundle(it) }
|
?.use { XmlResourceBundle(it) }
|
||||||
|
|
||||||
val languageTagBundle = classLoader.getResourceAsStream("values/values-${locale.toLanguageTag()}/strings.xml")
|
return if (languageBundle != null) {
|
||||||
?.use { XmlResourceBundle(it) }
|
rootBundle + languageBundle
|
||||||
|
} else {
|
||||||
var resultBundle = rootBundle
|
rootBundle
|
||||||
if (languageBundle != null) {
|
|
||||||
resultBundle += languageBundle
|
|
||||||
}
|
}
|
||||||
if (languageTagBundle != null) {
|
|
||||||
resultBundle += languageTagBundle
|
|
||||||
}
|
|
||||||
return resultBundle
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import androidx.compose.runtime.DisposableEffect
|
|||||||
import androidx.compose.runtime.collectAsState
|
import androidx.compose.runtime.collectAsState
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
|
import androidx.compose.ui.configureSwingGlobalsForCompose
|
||||||
import androidx.compose.ui.input.key.Key
|
import androidx.compose.ui.input.key.Key
|
||||||
import androidx.compose.ui.input.key.key
|
import androidx.compose.ui.input.key.key
|
||||||
import androidx.compose.ui.window.Window
|
import androidx.compose.ui.window.Window
|
||||||
@@ -49,6 +50,7 @@ import toothpick.configuration.Configuration
|
|||||||
import toothpick.ktp.KTP
|
import toothpick.ktp.KTP
|
||||||
import toothpick.ktp.extension.getInstance
|
import toothpick.ktp.extension.getInstance
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
import java.util.Locale
|
||||||
import kotlin.system.exitProcess
|
import kotlin.system.exitProcess
|
||||||
|
|
||||||
@OptIn(DelicateCoroutinesApi::class)
|
@OptIn(DelicateCoroutinesApi::class)
|
||||||
@@ -74,8 +76,22 @@ suspend fun main() {
|
|||||||
|
|
||||||
val serverService = scope.getInstance<ServerService>()
|
val serverService = scope.getInstance<ServerService>()
|
||||||
val uiPreferences = scope.getInstance<UiPreferences>()
|
val uiPreferences = scope.getInstance<UiPreferences>()
|
||||||
|
|
||||||
|
// Call setDefault before getting a resource bundle
|
||||||
|
val language = uiPreferences.language().get()
|
||||||
|
if (language.isNotBlank()) {
|
||||||
|
val locale: Locale? = Locale.forLanguageTag(language)
|
||||||
|
if (locale != null) {
|
||||||
|
Locale.setDefault(locale)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
val resources = scope.getInstance<XmlResourceBundle>()
|
val resources = scope.getInstance<XmlResourceBundle>()
|
||||||
|
|
||||||
|
// Set the Compose constants before any
|
||||||
|
// Swing functions are called
|
||||||
|
configureSwingGlobalsForCompose()
|
||||||
|
|
||||||
uiPreferences.themeMode()
|
uiPreferences.themeMode()
|
||||||
.getAsFlow {
|
.getAsFlow {
|
||||||
if (!uiPreferences.windowDecorations().get()) {
|
if (!uiPreferences.windowDecorations().get()) {
|
||||||
|
|||||||
Reference in New Issue
Block a user