123456789101112131415161718192021222324252627282930313233343536373839404142 |
- import org.gradle.api.Project
- import org.gradle.api.Task
- import org.gradle.api.tasks.TaskProvider
- import org.gradle.kotlin.dsl.TaskContainerScope
- fun TaskContainerScope.registerLocalesConfigTask(project: Project): TaskProvider<Task> {
- return with(project) {
- register("generateLocalesConfig") {
- val emptyResourcesElement = "<resources>\\s*</resources>|<resources/>".toRegex()
- val valuesPrefix = "values-?".toRegex()
- val languages = fileTree("$projectDir/src/main/res/")
- .matching {
- include("**/strings.xml")
- }
- .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\"/>"
- }
- val content = """
- <?xml version="1.0" encoding="utf-8"?>
- <locale-config xmlns:android="http://schemas.android.com/apk/res/android">
- $languages
- </locale-config>
- """.trimIndent()
- val localeFile = file("$projectDir/src/main/res/xml/locales_config.xml")
- localeFile.parentFile.mkdirs()
- localeFile.writeText(content)
- }
- }
- }
|