From d01b735cc6625acdbffb2a5a758f09281a425059 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Tue, 12 Dec 2023 20:21:37 +0600 Subject: [PATCH 1/6] start 0.20.21 --- CHANGELOG.md | 2 ++ gradle.properties | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index afbdc4cbca0..c714170d518 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,7 @@ # Changelog +## 0.20.21 + ## 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 From f6ded92251fab670392410d9a7ecd581183544ca Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Tue, 12 Dec 2023 20:58:08 +0600 Subject: [PATCH 2/6] init resources module --- CHANGELOG.md | 3 ++ resources/build.gradle | 17 ++++++++++ .../kotlin/StringResourceGetter.kt | 23 +++++++++++++ .../src/commonMain/kotlin/StringResource.kt | 32 +++++++++++++++++++ settings.gradle | 2 ++ 5 files changed, 77 insertions(+) create mode 100644 resources/build.gradle create mode 100644 resources/src/androidMain/kotlin/StringResourceGetter.kt create mode 100644 resources/src/commonMain/kotlin/StringResource.kt 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", From 0d01561476f30fc89325a69e8c9fa4856811572e Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Tue, 12 Dec 2023 21:39:58 +0600 Subject: [PATCH 3/6] optimizations and improvements in resources --- resources/build.gradle | 4 ++++ ...ourceGetter.kt => StringResourceContextGetter.kt} | 12 +++--------- resources/src/commonMain/kotlin/StringResource.kt | 6 +++--- .../src/jvmMain/kotlin/StringResourceLocaleGetter.kt | 8 ++++++++ 4 files changed, 18 insertions(+), 12 deletions(-) rename resources/src/androidMain/kotlin/{StringResourceGetter.kt => StringResourceContextGetter.kt} (57%) create mode 100644 resources/src/jvmMain/kotlin/StringResourceLocaleGetter.kt diff --git a/resources/build.gradle b/resources/build.gradle index 178fbdff3f5..ba3a7ca9d9e 100644 --- a/resources/build.gradle +++ b/resources/build.gradle @@ -13,5 +13,9 @@ kotlin { api project(":micro_utils.language_codes") } } + + androidMain { + dependsOn(jvmMain) + } } } diff --git a/resources/src/androidMain/kotlin/StringResourceGetter.kt b/resources/src/androidMain/kotlin/StringResourceContextGetter.kt similarity index 57% rename from resources/src/androidMain/kotlin/StringResourceGetter.kt rename to resources/src/androidMain/kotlin/StringResourceContextGetter.kt index 8c18b7ded4f..a7839d28898 100644 --- a/resources/src/androidMain/kotlin/StringResourceGetter.kt +++ b/resources/src/androidMain/kotlin/StringResourceContextGetter.kt @@ -6,18 +6,12 @@ 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) { +fun StringResource.translation(configuration: Configuration): String = translation( + 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 index 12c433be7b6..c7a332b20de 100644 --- a/resources/src/commonMain/kotlin/StringResource.kt +++ b/resources/src/commonMain/kotlin/StringResource.kt @@ -4,7 +4,7 @@ import dev.inmo.micro_utils.language_codes.IetfLanguageCode class StringResource( val default: String, - private val map: Map> + val map: Map> ) { class Builder( var default: String @@ -14,9 +14,9 @@ class StringResource( infix fun IetfLanguageCode.variant(value: Lazy) { map[this] = value } - infix fun IetfLanguageCode.variant(value: String) = this variant lazy { 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 lazy { value } + infix fun String.variant(value: String) = this variant lazyOf(value) fun build() = StringResource(default, map.toMap()) } diff --git a/resources/src/jvmMain/kotlin/StringResourceLocaleGetter.kt b/resources/src/jvmMain/kotlin/StringResourceLocaleGetter.kt new file mode 100644 index 00000000000..af9895439d5 --- /dev/null +++ b/resources/src/jvmMain/kotlin/StringResourceLocaleGetter.kt @@ -0,0 +1,8 @@ +package dev.inmo.micro_utils.strings + +import dev.inmo.micro_utils.language_codes.toIetfLanguageCode +import java.util.Locale + +fun StringResource.translation(locale: Locale): String { + return translation(locale.toIetfLanguageCode()) +} From 3bf689629636aa91b838ab4644a76cc9eed789c1 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Tue, 12 Dec 2023 21:41:09 +0600 Subject: [PATCH 4/6] get back translations with android and java resources packages --- .../src/androidMain/kotlin/StringResourceContextGetter.kt | 4 ++++ resources/src/jvmMain/kotlin/StringResourceLocaleGetter.kt | 2 ++ 2 files changed, 6 insertions(+) diff --git a/resources/src/androidMain/kotlin/StringResourceContextGetter.kt b/resources/src/androidMain/kotlin/StringResourceContextGetter.kt index a7839d28898..8ce918ecf94 100644 --- a/resources/src/androidMain/kotlin/StringResourceContextGetter.kt +++ b/resources/src/androidMain/kotlin/StringResourceContextGetter.kt @@ -15,3 +15,7 @@ fun StringResource.translation(configuration: Configuration): String = translati ) 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/jvmMain/kotlin/StringResourceLocaleGetter.kt b/resources/src/jvmMain/kotlin/StringResourceLocaleGetter.kt index af9895439d5..3bca7549eda 100644 --- a/resources/src/jvmMain/kotlin/StringResourceLocaleGetter.kt +++ b/resources/src/jvmMain/kotlin/StringResourceLocaleGetter.kt @@ -6,3 +6,5 @@ import java.util.Locale fun StringResource.translation(locale: Locale): String { return translation(locale.toIetfLanguageCode()) } + +fun Locale.translation(resource: StringResource): String = resource.translation(this) \ No newline at end of file From 151aa1863d15c246d293ce4c35ffc0f52959dee2 Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Tue, 12 Dec 2023 21:41:53 +0600 Subject: [PATCH 5/6] update gradle wrapper --- gradle/wrapper/gradle-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 From 4a454f3d67ea2afa74a57b5ad31e5592f1613d2a Mon Sep 17 00:00:00 2001 From: InsanusMokrassar Date: Tue, 12 Dec 2023 23:45:22 +0600 Subject: [PATCH 6/6] add opportunity to use translation with default locale --- resources/src/jvmMain/kotlin/StringResourceLocaleGetter.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resources/src/jvmMain/kotlin/StringResourceLocaleGetter.kt b/resources/src/jvmMain/kotlin/StringResourceLocaleGetter.kt index 3bca7549eda..486ca85403b 100644 --- a/resources/src/jvmMain/kotlin/StringResourceLocaleGetter.kt +++ b/resources/src/jvmMain/kotlin/StringResourceLocaleGetter.kt @@ -3,7 +3,7 @@ package dev.inmo.micro_utils.strings import dev.inmo.micro_utils.language_codes.toIetfLanguageCode import java.util.Locale -fun StringResource.translation(locale: Locale): String { +fun StringResource.translation(locale: Locale = Locale.getDefault()): String { return translation(locale.toIetfLanguageCode()) }