Advertisement
Guest User

Untitled

a guest
Oct 14th, 2019
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.24 KB | None | 0 0
  1. import java.io.File
  2.  
  3. data class StringResourceId(private val value: String) {
  4. override fun toString(): String {
  5. return value
  6. }
  7. }
  8.  
  9. data class StringResource(
  10. val id: StringResourceId,
  11. var jp: String = "",
  12. var en: String = "",
  13. var zhrcn: String = "",
  14. var translatable: Boolean = true
  15. )
  16.  
  17. val resourcesMap = LinkedHashMap<StringResourceId, StringResource>()
  18.  
  19. fun File.forEachBindResource(howToBind: (StringResource, String) -> Unit) {
  20. readLines().forEach {
  21.  
  22. if (!it.contains("<string name=\"")) {
  23. return@forEach
  24. }
  25.  
  26. val id = StringResourceId("(?<=name\\=\").*?(?=\\\")".toRegex().find(it)!!.value)
  27. val translatable = "(?<=translatable\\=\").*?(?=\\\")".toRegex().find(it)?.value?.toBoolean()
  28. val value = "(?<=\\>).*?(?=\\</string\\>)".toRegex().find(it)!!.value
  29.  
  30. val res = resourcesMap[id] ?: StringResource(id)
  31. res.translatable = translatable ?: true
  32.  
  33. howToBind(res, value)
  34. resourcesMap.put(id, res)
  35. }
  36. }
  37.  
  38.  
  39. // import Japanese String.xml
  40. File("src/main/res/values-ja/strings.xml").forEachBindResource { stringResource, s ->
  41. stringResource.jp = s
  42. }
  43.  
  44. // import English String.xml
  45. File("src/main/res/values/strings.xml").forEachBindResource { stringResource, s ->
  46. stringResource.en = s
  47. }
  48.  
  49. // import chinese hanzi String.xml
  50. File("src/main/res/values-zh-rCN/strings.xml").forEachBindResource { stringResource, s ->
  51. stringResource.zhrcn = s
  52. }
  53.  
  54. // deserialize
  55. resourcesMap.values.forEach { res ->
  56. res.jp.let { jpRes ->
  57. if ("@string\\/.*".toRegex().matches(jpRes)) {
  58. val referenced = resourcesMap[StringResourceId(jpRes.split("/")[1])]
  59. res.jp = referenced!!.jp
  60. }
  61. }
  62.  
  63. res.en.let { enRes ->
  64. if ("@string\\/.*".toRegex().matches(enRes)) {
  65. val referenced = resourcesMap[StringResourceId(enRes.split("/")[1])]
  66. res.en = referenced!!.en
  67. }
  68. }
  69.  
  70. res.zhrcn.let { zhRes ->
  71. if ("@string\\/.*".toRegex().matches(zhRes)) {
  72. val referenced = resourcesMap[StringResourceId(zhRes.split("/")[1])]
  73. res.zhrcn = referenced!!.zhrcn
  74. }
  75. }
  76. }
  77.  
  78. resourcesMap.values.forEach {
  79. println("${it.id}|${it.jp}|${it.en}|${it.zhrcn}")
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement