Bundle.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. /**
  2. * Bundle.js
  3. *
  4. * @author realor
  5. */
  6. import { ModuleLoader } from '../utils/ModuleLoader.js'
  7. class Bundle {
  8. name = null
  9. translations = new Map()
  10. constructor(name, path) {
  11. this.name = name
  12. this.path = path
  13. }
  14. load(languages) {
  15. let promises = []
  16. for (let language of languages) {
  17. let translations = this.translations.get(language)
  18. if (translations === undefined) {
  19. let path = this.path
  20. if (language.length > 0) path += '_' + language
  21. path += '.js'
  22. let promise = ModuleLoader.load(path)
  23. promise.then(
  24. module => {
  25. console.info('bundle ' + path + ' loaded.')
  26. this.translations.set(language, module.translations)
  27. },
  28. () => {
  29. console.info('bundle ' + path + ' not found.')
  30. this.translations.set(language, {})
  31. }
  32. )
  33. promises.push(promise)
  34. this.translations.set(language, promise)
  35. } else if (translations instanceof Promise) {
  36. promises.push(translations)
  37. }
  38. }
  39. return Promise.allSettled(promises)
  40. }
  41. get(languages, key, ...args) {
  42. let text = undefined
  43. for (let language of languages) {
  44. let langTranslations = this.translations.get(language)
  45. if (langTranslations) {
  46. text = langTranslations[key]
  47. if (text) {
  48. if (typeof text === 'function') {
  49. text = text(...args)
  50. }
  51. break
  52. }
  53. }
  54. }
  55. return text || key
  56. }
  57. }
  58. export { Bundle }