48fa64f8ec
Less lines or code and marginally greater readability, yay! Oh and also preallocate a map in LoadCatalogMessages just because we can.
54 lines
1.4 KiB
Go
54 lines
1.4 KiB
Go
// SPDX-FileCopyrightText: Copyright The Miniflux Authors. All rights reserved.
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package locale // import "miniflux.app/v2/internal/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, len(AvailableLanguages()))
|
|
|
|
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
|
|
}
|