2018-09-22 18:04:55 -04:00
|
|
|
// 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 (
|
2021-02-17 01:58:44 -05:00
|
|
|
"embed"
|
2018-09-22 18:04:55 -04:00
|
|
|
"encoding/json"
|
|
|
|
"fmt"
|
|
|
|
)
|
|
|
|
|
|
|
|
type translationDict map[string]interface{}
|
|
|
|
type catalog map[string]translationDict
|
|
|
|
|
|
|
|
var defaultCatalog catalog
|
|
|
|
|
2021-02-17 01:58:44 -05:00
|
|
|
//go:embed translations/*.json
|
|
|
|
var translationFiles embed.FS
|
|
|
|
|
|
|
|
// LoadCatalogMessages loads and parses all translations encoded in JSON.
|
|
|
|
func LoadCatalogMessages() error {
|
|
|
|
var err error
|
2018-09-22 18:04:55 -04:00
|
|
|
defaultCatalog = make(catalog)
|
|
|
|
|
2021-02-17 01:58:44 -05:00
|
|
|
for language := range AvailableLanguages() {
|
|
|
|
defaultCatalog[language], err = loadTranslationFile(language)
|
2018-09-22 18:04:55 -04:00
|
|
|
if err != nil {
|
2021-02-17 01:58:44 -05:00
|
|
|
return err
|
2018-09-22 18:04:55 -04:00
|
|
|
}
|
2021-02-17 01:58:44 -05:00
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|
2018-09-22 18:04:55 -04:00
|
|
|
|
2021-02-17 01:58:44 -05:00
|
|
|
func loadTranslationFile(language string) (translationDict, error) {
|
|
|
|
translationFileData, err := translationFiles.ReadFile(fmt.Sprintf("translations/%s.json", language))
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
2018-09-22 18:04:55 -04:00
|
|
|
}
|
2021-02-17 01:58:44 -05:00
|
|
|
|
|
|
|
translationMessages, err := parseTranslationMessages(translationFileData)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
return translationMessages, nil
|
2018-09-22 18:04:55 -04:00
|
|
|
}
|
|
|
|
|
2021-02-17 01:58:44 -05:00
|
|
|
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)
|
2018-09-22 18:04:55 -04:00
|
|
|
}
|
2021-02-17 01:58:44 -05:00
|
|
|
return translationMessages, nil
|
2018-09-22 18:04:55 -04:00
|
|
|
}
|