update-locales.mjs 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import { setTimeout } from 'node:timers/promises'
  2. export async function task (payload) {
  3. if (WIKI.config.update?.locales === false) {
  4. return
  5. }
  6. WIKI.logger.info('Fetching latest localization data...')
  7. try {
  8. const metadata = await fetch('https://github.com/requarks/wiki-locales/raw/main/locales/metadata.json').then(r => r.json())
  9. for (const lang of metadata.languages) {
  10. // -> Build filename
  11. const langFilenameParts = [lang.language]
  12. if (lang.region) {
  13. langFilenameParts.push(lang.region)
  14. }
  15. if (lang.script) {
  16. langFilenameParts.push(lang.script)
  17. }
  18. const langFilename = langFilenameParts.join('-')
  19. WIKI.logger.debug(`Fetching updates for language ${langFilename}...`)
  20. const strings = await fetch(`https://github.com/requarks/wiki-locales/raw/main/locales/${langFilename}.json`).then(r => r.json())
  21. if (strings) {
  22. await WIKI.db.knex('locales').insert({
  23. code: langFilename,
  24. name: lang.name,
  25. nativeName: lang.localizedName,
  26. language: lang.language,
  27. region: lang.region,
  28. script: lang.script,
  29. isRTL: lang.isRtl,
  30. strings
  31. }).onConflict('code').merge({
  32. strings,
  33. updatedAt: new Date()
  34. })
  35. }
  36. WIKI.logger.debug(`Updated strings for language ${langFilename}.`)
  37. await setTimeout(100)
  38. }
  39. WIKI.logger.info('Fetched latest localization data: [ COMPLETED ]')
  40. } catch (err) {
  41. WIKI.logger.error('Fetching latest localization data: [ FAILED ]')
  42. WIKI.logger.error(err.message)
  43. throw err
  44. }
  45. }