diff --git a/CHANGELOG.md b/CHANGELOG.md index afbdc4cbca0..b8db90765be 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +## 0.20.21 + +* `Resources`: + * Inited + ## 0.20.20 * `Repos`: diff --git a/gradle.properties b/gradle.properties index e8f541ad0da..0c0a0f594c6 100644 --- a/gradle.properties +++ b/gradle.properties @@ -15,5 +15,5 @@ crypto_js_version=4.1.1 # Project data group=dev.inmo -version=0.20.20 -android_code_version=226 +version=0.20.21 +android_code_version=227 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index e411586a54a..a5952066425 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/resources/build.gradle b/resources/build.gradle new file mode 100644 index 00000000000..ba3a7ca9d9e --- /dev/null +++ b/resources/build.gradle @@ -0,0 +1,21 @@ +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") + } + } + + androidMain { + dependsOn(jvmMain) + } + } +} diff --git a/resources/src/androidMain/kotlin/StringResourceContextGetter.kt b/resources/src/androidMain/kotlin/StringResourceContextGetter.kt new file mode 100644 index 00000000000..8ce918ecf94 --- /dev/null +++ b/resources/src/androidMain/kotlin/StringResourceContextGetter.kt @@ -0,0 +1,21 @@ +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 = translation( + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + configuration.locales[0] + } else { + configuration.locale + } +) +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..c7a332b20de --- /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, + 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 lazyOf(value) + infix fun String.variant(value: Lazy) = IetfLanguageCode(this) variant value + infix fun String.variant(value: String) = this variant lazyOf(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/resources/src/jvmMain/kotlin/StringResourceLocaleGetter.kt b/resources/src/jvmMain/kotlin/StringResourceLocaleGetter.kt new file mode 100644 index 00000000000..486ca85403b --- /dev/null +++ b/resources/src/jvmMain/kotlin/StringResourceLocaleGetter.kt @@ -0,0 +1,10 @@ +package dev.inmo.micro_utils.strings + +import dev.inmo.micro_utils.language_codes.toIetfLanguageCode +import java.util.Locale + +fun StringResource.translation(locale: Locale = Locale.getDefault()): String { + return translation(locale.toIetfLanguageCode()) +} + +fun Locale.translation(resource: StringResource): String = resource.translation(this) \ No newline at end of file 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",