in internal/cli/i18n.go [117:177]
func findI18nFileInDir(pluginAllTranslations map[string]*YamlPluginContent, i18nDir string) error {
// if i18n dir is not i18n, find deeper
dirBase := filepath.Base(i18nDir)
if dirBase != "i18n" {
if strings.HasPrefix(dirBase, ".") {
return nil
}
// find all i18n dir in target dir
targetDirs, err := os.ReadDir(i18nDir)
if err != nil {
return err
}
for _, targetDir := range targetDirs {
if targetDir.IsDir() {
if err := findI18nFileInDir(pluginAllTranslations, filepath.Join(i18nDir, targetDir.Name())); err != nil {
fmt.Printf("[i18n] find i18n file in dir failed: %s %s\n", targetDir.Name(), err)
}
}
}
return nil
}
fmt.Printf("[i18n] find i18n file in dir: %s\n", i18nDir)
// if i18nDir is i18n, find all yaml files
entries, err := os.ReadDir(i18nDir)
if err != nil {
return err
}
for _, file := range entries {
// ignore directory
if file.IsDir() {
continue
}
// ignore non-YAML file
if filepath.Ext(file.Name()) != ".yaml" {
continue
}
buf, err := os.ReadFile(filepath.Join(i18nDir, file.Name()))
if err != nil {
fmt.Printf("[i18n] read translation file failed: %s %s\n", file.Name(), err)
continue
}
translation := &YamlPluginContent{}
if err = yaml.Unmarshal(buf, translation); err != nil {
fmt.Printf("[i18n] unmarshal translation file failed: %s %s\n", file.Name(), err)
continue
}
if pluginAllTranslations[file.Name()] == nil {
pluginAllTranslations[file.Name()] = &YamlPluginContent{Plugin: make(map[string]any)}
}
for k, v := range translation.Plugin {
pluginAllTranslations[file.Name()].Plugin[k] = v
}
}
return nil
}