catalog.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. // SPDX-FileCopyrightText: Copyright The Miniflux Authors. All rights reserved.
  2. // SPDX-License-Identifier: Apache-2.0
  3. package locale // import "miniflux.app/v2/internal/locale"
  4. import (
  5. "embed"
  6. "encoding/json"
  7. "fmt"
  8. )
  9. type translationDict map[string]interface{}
  10. type catalog map[string]translationDict
  11. var defaultCatalog catalog
  12. //go:embed translations/*.json
  13. var translationFiles embed.FS
  14. // LoadCatalogMessages loads and parses all translations encoded in JSON.
  15. func LoadCatalogMessages() error {
  16. var err error
  17. defaultCatalog = make(catalog, len(AvailableLanguages()))
  18. for language := range AvailableLanguages() {
  19. defaultCatalog[language], err = loadTranslationFile(language)
  20. if err != nil {
  21. return err
  22. }
  23. }
  24. return nil
  25. }
  26. func loadTranslationFile(language string) (translationDict, error) {
  27. translationFileData, err := translationFiles.ReadFile(fmt.Sprintf("translations/%s.json", language))
  28. if err != nil {
  29. return nil, err
  30. }
  31. translationMessages, err := parseTranslationMessages(translationFileData)
  32. if err != nil {
  33. return nil, err
  34. }
  35. return translationMessages, nil
  36. }
  37. func parseTranslationMessages(data []byte) (translationDict, error) {
  38. var translationMessages translationDict
  39. if err := json.Unmarshal(data, &translationMessages); err != nil {
  40. return nil, fmt.Errorf(`invalid translation file: %w`, err)
  41. }
  42. return translationMessages, nil
  43. }