convert.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. const fetch = (...args) => import('node-fetch').then(({default: fetch}) => fetch(...args));
  2. const bidiFactory = require('bidi-js');
  3. const bidi = bidiFactory();
  4. const fs = require('fs');
  5. const fileExtension = 'txt';
  6. async function main()
  7. {
  8. try
  9. {
  10. let tsvRes = await fetch('https://docs.google.com/spreadsheets/d/1FoYdyEraEQuWofzbYCDPKN7EdKgS_2ZrsDrOA8scgwQ/export?format=tsv');
  11. let tsv = await tsvRes.text();
  12. let lines = tsv.split('\n');
  13. // First line contains full language names
  14. // Second line contains file extensions
  15. let codes = lines[1].split('\t');
  16. if (codes[0] == '')
  17. {
  18. codes[0] = 'i18n';
  19. }
  20. let outputFiles = [];
  21. for (let j = 2; j < lines.length; j++)
  22. {
  23. let entries = lines[j].split('\t');
  24. if (entries.length > 1)
  25. {
  26. let key = entries[0];
  27. if (key)
  28. {
  29. for (let i = 0; i < codes.length; i++)
  30. {
  31. if (codes[i].trim())
  32. {
  33. if (outputFiles[i] == null)
  34. {
  35. outputFiles[i] = '# *DO NOT DIRECTLY EDIT THIS FILE, IT IS AUTOMATICALLY GENERATED AND IT IS BASED ON:*\n' +
  36. '# https://docs.google.com/spreadsheet/ccc?key=0AmQEO36liL4FdDJLWVNMaVV2UmRKSnpXU09MYkdGbEE\n';
  37. }
  38. if (codes[i] == 'i18n')
  39. {
  40. outputFiles[i] += key + '=' + key + '\n';
  41. }
  42. else
  43. {
  44. let value = (entries.length > i) ? entries[i] : '';
  45. // Empty entries will be translated to English
  46. if (value == '')
  47. {
  48. value = entries[1];
  49. }
  50. value = value.trim();
  51. //TODO Add encoding support
  52. /*if (PropGen.encodeValues)
  53. {
  54. value = encodeString(value);
  55. }*/
  56. let lang = codes[i].toLowerCase();
  57. let rtl = false;
  58. if (lang == 'ar' || lang == 'fa' || lang == 'he')
  59. {
  60. let embeddingLevels = bidi.getEmbeddingLevels(value);
  61. function isMixed(levels)
  62. {
  63. for (let i = 0; i < levels.length; i++)
  64. {
  65. if (levels[i] == 1) return true;
  66. }
  67. return false;
  68. };
  69. if (embeddingLevels.paragraphs[0].level == 1 || isMixed(embeddingLevels.levels))
  70. {
  71. console.log(value);
  72. rtl = true;
  73. }
  74. }
  75. if (rtl)
  76. {
  77. outputFiles[i] += key + '=' + '\u202B' + value + '\u202C' + '\n';
  78. }
  79. else
  80. {
  81. // Checks for HTML entities in output
  82. if (value.includes('<') || value.includes('>'))
  83. {
  84. console.log('**** WARNING: HTML Entities in ' + lang + '/' + key + '=' + value);
  85. }
  86. outputFiles[i] += key + '=' + value + '\n';
  87. }
  88. }
  89. }
  90. }
  91. }
  92. }
  93. }
  94. let outDir = './resources';
  95. if (!fs.existsSync(outDir))
  96. {
  97. fs.mkdirSync(outDir);
  98. }
  99. for (let i = 0; i < codes.length; i++)
  100. {
  101. if (codes[i].trim())
  102. {
  103. let ext = (codes[i] == 'en') ? '' : '_' + codes[i].toLowerCase();
  104. let filename = outDir + '/dia' + ext + '.' + fileExtension;
  105. fs.writeFileSync(filename, outputFiles[i], 'utf8');
  106. console.log(filename + ' created');
  107. }
  108. }
  109. }
  110. catch (e)
  111. {
  112. console.log(e);
  113. }
  114. }
  115. main();