diff --git a/buildSrc/src/main/kotlin/LocalesConfigPlugin.kt b/buildSrc/src/main/kotlin/LocalesConfigPlugin.kt index a2aacc1d6a..7e91e5062d 100644 --- a/buildSrc/src/main/kotlin/LocalesConfigPlugin.kt +++ b/buildSrc/src/main/kotlin/LocalesConfigPlugin.kt @@ -1,38 +1,37 @@ import org.gradle.api.Project import org.gradle.api.Task import org.gradle.api.tasks.TaskProvider -import org.gradle.kotlin.dsl.TaskContainerScope +import java.io.File private val emptyResourcesElement = "\\s*|".toRegex() -fun TaskContainerScope.registerLocalesConfigTask(project: Project): TaskProvider { - return with(project) { - register("generateLocalesConfig") { - 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" - } - .sorted() - .joinToString(separator = "\n") { - " " - } +fun Project.registerLocalesConfigTask(outputResourceDir: File): TaskProvider { + return tasks.register("generateLocalesConfig") { + 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" + } + .sorted() + .joinToString(separator = "\n") { + " " + } - val content = """ + val content = """ $languages - """.trimIndent() +""".trimIndent() - val localeFile = file("$projectDir/src/androidMain/res/xml/locales_config.xml") - localeFile.parentFile.mkdirs() - localeFile.writeText(content) + outputResourceDir.resolve("xml/locales_config.xml").apply { + parentFile.mkdirs() + writeText(content) } } } diff --git a/buildSrc/src/main/kotlin/yokai/build/ProjectExtensions.kt b/buildSrc/src/main/kotlin/yokai/build/ProjectExtensions.kt new file mode 100644 index 0000000000..df362eaefc --- /dev/null +++ b/buildSrc/src/main/kotlin/yokai/build/ProjectExtensions.kt @@ -0,0 +1,6 @@ +package yokai.build + +import org.gradle.api.Project +import java.io.File + +val Project.generatedBuildDir: File get() = project.layout.buildDirectory.asFile.get().resolve("generated/yokai") diff --git a/i18n/.gitignore b/i18n/.gitignore deleted file mode 100644 index 4d99b14242..0000000000 --- a/i18n/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -# Generated -locales_config.xml diff --git a/i18n/build.gradle.kts b/i18n/build.gradle.kts index dce23c1719..2c86f33426 100644 --- a/i18n/build.gradle.kts +++ b/i18n/build.gradle.kts @@ -1,3 +1,4 @@ +import yokai.build.generatedBuildDir import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { @@ -28,8 +29,18 @@ kotlin { } } +val generatedAndroidResourceDir = generatedBuildDir.resolve("android/res") + android { namespace = "yokai.i18n" + + sourceSets { + val main by getting + main.res.srcDirs( + "src/commonMain/moko-resources", + generatedAndroidResourceDir, + ) + } } multiplatformResources { @@ -37,7 +48,7 @@ multiplatformResources { } tasks { - val localesConfigTask = registerLocalesConfigTask(project) + val localesConfigTask = project.registerLocalesConfigTask(generatedAndroidResourceDir) preBuild { dependsOn(localesConfigTask) }