LocalesConfigPlugin.kt 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import org.gradle.api.Project
  2. import org.gradle.api.Task
  3. import org.gradle.api.tasks.TaskProvider
  4. import org.gradle.kotlin.dsl.TaskContainerScope
  5. fun TaskContainerScope.registerLocalesConfigTask(project: Project): TaskProvider<Task> {
  6. return with(project) {
  7. register("generateLocalesConfig") {
  8. val emptyResourcesElement = "<resources>\\s*</resources>|<resources/>".toRegex()
  9. val valuesPrefix = "values-?".toRegex()
  10. val languages = fileTree("$projectDir/src/main/res/")
  11. .matching {
  12. include("**/strings.xml")
  13. }
  14. .filterNot {
  15. it.readText().contains(emptyResourcesElement)
  16. }
  17. .map { it.parentFile.name }
  18. .sorted()
  19. .joinToString(separator = "\n") {
  20. val language = it
  21. .replace(valuesPrefix, "")
  22. .replace("-r", "-")
  23. .takeIf(String::isNotBlank) ?: "en"
  24. " <locale android:name=\"$language\"/>"
  25. }
  26. val content = """
  27. <?xml version="1.0" encoding="utf-8"?>
  28. <locale-config xmlns:android="http://schemas.android.com/apk/res/android">
  29. $languages
  30. </locale-config>
  31. """.trimIndent()
  32. val localeFile = file("$projectDir/src/main/res/xml/locales_config.xml")
  33. localeFile.parentFile.mkdirs()
  34. localeFile.writeText(content)
  35. }
  36. }
  37. }