translator.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. // Copyright 2017 Frédéric Guillot. All rights reserved.
  2. // Use of this source code is governed by the Apache 2.0
  3. // license that can be found in the LICENSE file.
  4. package locale // import "miniflux.app/locale"
  5. import (
  6. "encoding/json"
  7. "fmt"
  8. "strings"
  9. )
  10. // Translator manage supported locales.
  11. type Translator struct {
  12. locales Locales
  13. }
  14. // AddLanguage loads a new language into the system.
  15. func (t *Translator) AddLanguage(language, translations string) error {
  16. var decodedTranslations Translation
  17. decoder := json.NewDecoder(strings.NewReader(translations))
  18. if err := decoder.Decode(&decodedTranslations); err != nil {
  19. return fmt.Errorf("Invalid JSON file: %v", err)
  20. }
  21. t.locales[language] = decodedTranslations
  22. return nil
  23. }
  24. // GetLanguage returns the given language handler.
  25. func (t *Translator) GetLanguage(language string) *Language {
  26. translations, found := t.locales[language]
  27. if !found {
  28. return &Language{language: language}
  29. }
  30. return &Language{language: language, translations: translations}
  31. }
  32. // NewTranslator creates a new Translator.
  33. func NewTranslator() *Translator {
  34. return &Translator{locales: make(Locales)}
  35. }