enhance(i18n/android): Dynamically generate locales_config.xml

This commit is contained in:
Ahmad Ansori Palembani 2024-06-24 14:20:24 +07:00
parent 875100dd6c
commit 582e0f19b3
Signed by: null2264
GPG key ID: BA64F8B60AF3EFB6
3 changed files with 17 additions and 78 deletions

View file

@ -3,28 +3,24 @@ import org.gradle.api.Task
import org.gradle.api.tasks.TaskProvider
import org.gradle.kotlin.dsl.TaskContainerScope
private val emptyResourcesElement = "<resources>\\s*</resources>|<resources/>".toRegex()
fun TaskContainerScope.registerLocalesConfigTask(project: Project): TaskProvider<Task> {
return with(project) {
register("generateLocalesConfig") {
val emptyResourcesElement = "<resources>\\s*</resources>|<resources/>".toRegex()
val valuesPrefix = "values-?".toRegex()
println(projectDir)
val languages = fileTree("$projectDir/src/main/res/")
.matching {
include("**/strings.xml")
val languages = fileTree("$projectDir/src/commonMain/moko-resources/")
.matching { include("**/strings.xml") }
.filterNot { it.readText().contains(emptyResourcesElement) }
.map {
it.parentFile.name
.replace("base", "en")
.replace("-r", "-")
.replace("+", "-")
.takeIf(String::isNotBlank) ?: "en"
}
.filterNot {
it.readText().contains(emptyResourcesElement)
}
.map { it.parentFile.name }
.sorted()
.joinToString(separator = "\n") {
val language = it
.replace(valuesPrefix, "")
.replace("-r", "-")
.takeIf(String::isNotBlank) ?: "en"
" <locale android:name=\"$language\"/>"
" <locale android:name=\"$it\"/>"
}
val content = """
@ -34,7 +30,7 @@ $languages
</locale-config>
""".trimIndent()
val localeFile = file("$projectDir/src/main/res/xml/locales_config.xml")
val localeFile = file("$projectDir/src/androidMain/res/xml/locales_config.xml")
localeFile.parentFile.mkdirs()
localeFile.writeText(content)
}

View file

@ -32,11 +32,10 @@ multiplatformResources {
}
tasks {
// FIXME: Migrate fully to MR
// val localesConfigTask = registerLocalesConfigTask(project)
// preBuild {
// dependsOn(localesConfigTask)
// }
val localesConfigTask = registerLocalesConfigTask(project)
preBuild {
dependsOn(localesConfigTask)
}
withType<KotlinCompile> {
compilerOptions.freeCompilerArgs.addAll(

View file

@ -1,56 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<locale-config xmlns:android="http://schemas.android.com/apk/res/android">
<locale android:name="ar"/>
<locale android:name="bg"/>
<locale android:name="bn"/>
<locale android:name="ca"/>
<locale android:name="ceb"/>
<locale android:name="cs"/>
<locale android:name="cv"/>
<locale android:name="de"/>
<locale android:name="el"/>
<locale android:name="en"/>
<locale android:name="eo"/>
<locale android:name="es"/>
<locale android:name="eu"/>
<locale android:name="fa"/>
<locale android:name="fi"/>
<locale android:name="fil"/>
<locale android:name="fr"/>
<locale android:name="gl"/>
<locale android:name="hi"/>
<locale android:name="hr"/>
<locale android:name="hu"/>
<locale android:name="in"/>
<locale android:name="it"/>
<locale android:name="ja"/>
<locale android:name="ka"/>
<locale android:name="km"/>
<locale android:name="ko"/>
<locale android:name="lv"/>
<locale android:name="mn"/>
<locale android:name="ms"/>
<locale android:name="my"/>
<locale android:name="nb-NO"/>
<locale android:name="nl"/>
<locale android:name="nn"/>
<locale android:name="or"/>
<locale android:name="pl"/>
<locale android:name="pt"/>
<locale android:name="pt-BR"/>
<locale android:name="ro"/>
<locale android:name="ru"/>
<locale android:name="sc"/>
<locale android:name="sk"/>
<locale android:name="sr"/>
<locale android:name="sv"/>
<locale android:name="te"/>
<locale android:name="th"/>
<locale android:name="ti"/>
<locale android:name="tl"/>
<locale android:name="tr"/>
<locale android:name="uk"/>
<locale android:name="vi"/>
<locale android:name="zh-Hans"/>
<locale android:name="zh-Hant"/>
</locale-config>