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)
}