You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123 lines
2.4 KiB

  1. #!/usr/bin/env node
  2. const fs = require('fs')
  3. const forEach = require('async-foreach').forEach
  4. var all = {}
  5. var allIds = []
  6. /* read existing translation files in lang/ */
  7. fs.readdir('lang', function (err, files) {
  8. forEach(files, function (f) {
  9. let m = f.match(/^(.*)\.json$/)
  10. if (!m) {
  11. return
  12. }
  13. let done = this.async()
  14. let lang = m[1]
  15. fs.readFile('lang/' + f, function (err, contents) {
  16. let data = JSON.parse(contents)
  17. if (!(lang in all)) {
  18. all[lang] = {}
  19. }
  20. for (var id in data) {
  21. if (!(id in all[lang])) {
  22. all[lang][id] = data[id]
  23. }
  24. }
  25. done()
  26. })
  27. })
  28. })
  29. fs.readdir(
  30. '.',
  31. function (err, files) {
  32. forEach(
  33. files,
  34. function (f) {
  35. if (f === 'package.json') {
  36. return
  37. }
  38. let m = f.match(/^(.*)\.json$/)
  39. if (!m) {
  40. return
  41. }
  42. let done = this.async()
  43. let id = m[1]
  44. allIds.push('category:' + id)
  45. fs.readFile(f, function (err, contents) {
  46. let data = JSON.parse(contents)
  47. if ('name' in data) {
  48. for (var lang in data.name) {
  49. if (!(lang in all)) {
  50. all[lang] = {}
  51. }
  52. all[lang]['category:' + id] = data.name[lang]
  53. }
  54. if (data.type && data.type === 'index') {
  55. parseSubCategories(data.subCategories, all)
  56. }
  57. }
  58. done()
  59. })
  60. },
  61. writeTranslationFiles
  62. )
  63. }
  64. )
  65. function parseSubCategories(categories, all) {
  66. categories.forEach(data => {
  67. if ('name' in data) {
  68. for (var lang in data.name) {
  69. if (!(lang in all)) {
  70. all[lang] = {}
  71. }
  72. all[lang]['category:' + data.id] = data.name[lang]
  73. }
  74. if (data.type && data.type === 'index') {
  75. parseSubCategories(data.subCategories, all)
  76. }
  77. }
  78. })
  79. }
  80. function writeTranslationFiles () {
  81. forEach(Object.keys(all), function (lang) {
  82. let done = this.async()
  83. let data = {}
  84. allIds.forEach(function (id) {
  85. data[id] = ''
  86. })
  87. let keys = Object.keys(all[lang])
  88. keys.sort()
  89. for (let i = 0; i < keys.length; i++) {
  90. data[keys[i]] = all[lang][keys[i]]
  91. }
  92. fs.writeFile(
  93. 'lang/' + lang + '.json',
  94. JSON.stringify(data, null, ' ') + '\n',
  95. function (err, result) {
  96. done()
  97. }
  98. )
  99. })
  100. }