Improve language handling and Compose startup

This commit is contained in:
Syer10
2021-08-20 22:50:25 -04:00
parent a44dfa56cb
commit d3a1e5594d
3 changed files with 23 additions and 29 deletions

View File

@@ -6,28 +6,12 @@
package ca.gosyer.data.translation
import ca.gosyer.data.ui.UiPreferences
import java.util.Locale
import javax.inject.Inject
import javax.inject.Provider
class ResourceProvider @Inject constructor(
private val uiPreferences: UiPreferences
) : Provider<XmlResourceBundle> {
class ResourceProvider @Inject constructor() : Provider<XmlResourceBundle> {
override fun get(): XmlResourceBundle {
val languagePref = uiPreferences.language()
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()
return XmlResourceBundle.forLocale(Locale.getDefault())
}
private fun getDefault() = XmlResourceBundle.forLocale(Locale.getDefault())
}

View File

@@ -78,20 +78,14 @@ class XmlResourceBundle internal constructor(internal val lookup: ConcurrentHash
val rootBundle = classLoader.getResourceAsStream("values/values/strings.xml")!!
.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) }
val languageTagBundle = classLoader.getResourceAsStream("values/values-${locale.toLanguageTag()}/strings.xml")
?.use { XmlResourceBundle(it) }
var resultBundle = rootBundle
if (languageBundle != null) {
resultBundle += languageBundle
return if (languageBundle != null) {
rootBundle + languageBundle
} else {
rootBundle
}
if (languageTagBundle != null) {
resultBundle += languageTagBundle
}
return resultBundle
}
}
}

View File

@@ -13,6 +13,7 @@ import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
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.window.Window
@@ -49,6 +50,7 @@ import toothpick.configuration.Configuration
import toothpick.ktp.KTP
import toothpick.ktp.extension.getInstance
import java.io.File
import java.util.Locale
import kotlin.system.exitProcess
@OptIn(DelicateCoroutinesApi::class)
@@ -74,8 +76,22 @@ suspend fun main() {
val serverService = scope.getInstance<ServerService>()
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>()
// Set the Compose constants before any
// Swing functions are called
configureSwingGlobalsForCompose()
uiPreferences.themeMode()
.getAsFlow {
if (!uiPreferences.windowDecorations().get()) {