| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- // Copyright 2018 Frédéric Guillot. All rights reserved.
- // Use of this source code is governed by the Apache 2.0
- // license that can be found in the LICENSE file.
- package locale // import "miniflux.app/locale"
- import (
- "embed"
- "encoding/json"
- "fmt"
- )
- type translationDict map[string]interface{}
- type catalog map[string]translationDict
- var defaultCatalog catalog
- //go:embed translations/*.json
- var translationFiles embed.FS
- // LoadCatalogMessages loads and parses all translations encoded in JSON.
- func LoadCatalogMessages() error {
- var err error
- defaultCatalog = make(catalog)
- for language := range AvailableLanguages() {
- defaultCatalog[language], err = loadTranslationFile(language)
- if err != nil {
- return err
- }
- }
- return nil
- }
- func loadTranslationFile(language string) (translationDict, error) {
- translationFileData, err := translationFiles.ReadFile(fmt.Sprintf("translations/%s.json", language))
- if err != nil {
- return nil, err
- }
- translationMessages, err := parseTranslationMessages(translationFileData)
- if err != nil {
- return nil, err
- }
- return translationMessages, nil
- }
- func parseTranslationMessages(data []byte) (translationDict, error) {
- var translationMessages translationDict
- if err := json.Unmarshal(data, &translationMessages); err != nil {
- return nil, fmt.Errorf(`invalid translation file: %w`, err)
- }
- return translationMessages, nil
- }
|