diff --git a/CHANGELOG.md b/CHANGELOG.md index c714170d518..b8db90765be 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,9 @@ ## 0.20.21 +* `Resources`: + * Inited + ## 0.20.20 * `Repos`: diff --git a/resources/build.gradle b/resources/build.gradle new file mode 100644 index 00000000000..178fbdff3f5 --- /dev/null +++ b/resources/build.gradle @@ -0,0 +1,17 @@ +plugins { + id "org.jetbrains.kotlin.multiplatform" + id "org.jetbrains.kotlin.plugin.serialization" + id "com.android.library" +} + +apply from: "$mppJvmJsAndroidLinuxMingwLinuxArm64ProjectPresetPath" + +kotlin { + sourceSets { + commonMain { + dependencies { + api project(":micro_utils.language_codes") + } + } + } +} diff --git a/resources/src/androidMain/kotlin/StringResourceGetter.kt b/resources/src/androidMain/kotlin/StringResourceGetter.kt new file mode 100644 index 00000000000..8c18b7ded4f --- /dev/null +++ b/resources/src/androidMain/kotlin/StringResourceGetter.kt @@ -0,0 +1,23 @@ +package dev.inmo.micro_utils.strings + +import android.content.Context +import android.content.res.Configuration +import android.content.res.Resources +import android.os.Build +import dev.inmo.micro_utils.language_codes.toIetfLanguageCode + +fun StringResource.translation(configuration: Configuration): String { + val locale = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + configuration.locales[0] + } else { + configuration.locale + } + + return translation(locale.toIetfLanguageCode()) +} +fun StringResource.translation(resources: Resources): String = translation(resources.configuration) +fun StringResource.translation(context: Context): String = translation(context.resources) + +fun Configuration.translation(resource: StringResource): String = resource.translation(this) +fun Resources.translation(resource: StringResource): String = configuration.translation(resource) +fun Context.translation(resource: StringResource): String = resources.translation(resource) diff --git a/resources/src/commonMain/kotlin/StringResource.kt b/resources/src/commonMain/kotlin/StringResource.kt new file mode 100644 index 00000000000..12c433be7b6 --- /dev/null +++ b/resources/src/commonMain/kotlin/StringResource.kt @@ -0,0 +1,32 @@ +package dev.inmo.micro_utils.strings + +import dev.inmo.micro_utils.language_codes.IetfLanguageCode + +class StringResource( + val default: String, + private val map: Map> +) { + class Builder( + var default: String + ) { + private val map = mutableMapOf>() + + infix fun IetfLanguageCode.variant(value: Lazy) { + map[this] = value + } + infix fun IetfLanguageCode.variant(value: String) = this variant lazy { value } + infix fun String.variant(value: Lazy) = IetfLanguageCode(this) variant value + infix fun String.variant(value: String) = this variant lazy { value } + + fun build() = StringResource(default, map.toMap()) + } + + fun translation(languageCode: IetfLanguageCode): String = (map[languageCode] ?: map[IetfLanguageCode(languageCode.withoutDialect)]) ?.value ?: default +} + +inline fun buildStringResource( + default: String, + builder: StringResource.Builder.() -> Unit +): StringResource { + return StringResource.Builder(default).apply(builder).build() +} diff --git a/settings.gradle b/settings.gradle index 2d20aa33d5d..d9d6508c329 100644 --- a/settings.gradle +++ b/settings.gradle @@ -43,6 +43,8 @@ String[] includes = [ ":startup:plugin", ":startup:launcher", + ":resources", + ":fsm:common", ":fsm:repos:common",