func testNewTranslation(t *testing.T, data map[string]interface{}) translation.Translation { translation, err := translation.NewTranslation(data) if err != nil { t.Fatal(err) } return translation }
func parseTranslationFile(filename string) ([]translation.Translation, error) { var unmarshalFunc func([]byte, interface{}) error switch format := filepath.Ext(filename); format { case ".json": unmarshalFunc = json.Unmarshal /* case ".yaml": unmarshalFunc = goyaml.Unmarshal */ default: return nil, fmt.Errorf("unsupported file extension %s", format) } fileBytes, err := ioutil.ReadFile(filename) if err != nil { return nil, err } var translationsData []map[string]interface{} if len(fileBytes) > 0 { if err := unmarshalFunc(fileBytes, &translationsData); err != nil { return nil, err } } translations := make([]translation.Translation, 0, len(translationsData)) for i, translationData := range translationsData { t, err := translation.NewTranslation(translationData) if err != nil { return nil, fmt.Errorf("unable to parse translation #%d in %s because %s\n%v", i, filename, err, translationData) } translations = append(translations, t) } return translations, nil }
// LoadJSON takes a json document of translations and manually // loads them into the system func LoadJSON(userLocale string, translationDocument string) error { tracelog.Startedf("localize", "LoadJSON", "userLocale[%s] length[%d]", userLocale, len(translationDocument)) var tranDocuments []map[string]interface{} if err := json.Unmarshal([]byte(translationDocument), &tranDocuments); err != nil { tracelog.CompletedErrorf(err, "localize", "LoadJSON", "**************>") return err } for _, tranDocument := range tranDocuments { tran, err := translation.NewTranslation(tranDocument) if err != nil { tracelog.CompletedError(err, "localize", "LoadJSON") return err } i18n.AddTranslation(locale.MustNew(userLocale), tran) } tracelog.Completed("localize", "LoadJSON") return nil }