optimize SUI page writeLocaleSource and writeLocaleFiles logic
This commit is contained in:
parent
61f297b3dc
commit
1005556c2f
2 changed files with 108 additions and 89 deletions
|
|
@ -67,3 +67,21 @@ func (locale *Locale) Merge(locale2 Locale) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ParseKeys match
|
||||
func (locale *Locale) ParseKeys() {
|
||||
if locale.Keys == nil {
|
||||
locale.Keys = map[string]string{}
|
||||
}
|
||||
|
||||
if locale.Messages == nil {
|
||||
locale.Messages = map[string]string{}
|
||||
}
|
||||
|
||||
for key, msgKey := range locale.Keys {
|
||||
if message, has := locale.Messages[msgKey]; has {
|
||||
locale.Keys[key] = message
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
|
|
|||
|
|
@ -217,6 +217,89 @@ func (tmpl *Template) SyncAssets(option *core.BuildOption) error {
|
|||
return copyDirectory(sourceRoot, targetRoot)
|
||||
}
|
||||
|
||||
func (tmpl *Template) getLocaleGlobal(name string) core.Locale {
|
||||
global := core.Locale{
|
||||
Keys: map[string]string{},
|
||||
Messages: map[string]string{},
|
||||
}
|
||||
file := filepath.Join(tmpl.Root, "__locales", name, "__global.yml")
|
||||
exist, err := tmpl.local.fs.Exists(file)
|
||||
if err != nil {
|
||||
log.Error(`[SUI] Check the global locale file error: %s`, err.Error())
|
||||
return global
|
||||
}
|
||||
|
||||
if !exist {
|
||||
return global
|
||||
}
|
||||
|
||||
raw, err := tmpl.local.fs.ReadFile(file)
|
||||
if err != nil {
|
||||
log.Error(`[SUI] Read the global locale file error: %s`, err.Error())
|
||||
return global
|
||||
}
|
||||
|
||||
err = yaml.Unmarshal(raw, &global)
|
||||
if err != nil {
|
||||
log.Error(`[SUI] Parse the global locale file error: %s`, err.Error())
|
||||
return global
|
||||
}
|
||||
|
||||
return global
|
||||
}
|
||||
|
||||
func (tmpl *Template) getLocale(name string, route string, pageOnly ...bool) core.Locale {
|
||||
file := filepath.Join(tmpl.Root, "__locales", name, fmt.Sprintf("%s.yml", route))
|
||||
global := tmpl.getLocaleGlobal(name)
|
||||
|
||||
// Check the locale file
|
||||
exist, err := tmpl.local.fs.Exists(file)
|
||||
if err != nil {
|
||||
return global
|
||||
}
|
||||
|
||||
if !exist {
|
||||
return global
|
||||
}
|
||||
|
||||
locale := core.Locale{
|
||||
Keys: map[string]string{},
|
||||
Messages: map[string]string{},
|
||||
Date: global.Date,
|
||||
Currency: global.Currency,
|
||||
Number: global.Number,
|
||||
}
|
||||
raw, err := tmpl.local.fs.ReadFile(file)
|
||||
if err != nil {
|
||||
log.Error(`[SUI] Read the locale file error: %s`, err.Error())
|
||||
return global
|
||||
}
|
||||
|
||||
err = yaml.Unmarshal(raw, &locale)
|
||||
if err != nil {
|
||||
log.Error(`[SUI] Parse the locale file error: %s`, err.Error())
|
||||
return global
|
||||
}
|
||||
|
||||
if len(pageOnly) == 0 || !pageOnly[0] {
|
||||
|
||||
// Merge the global
|
||||
for key, message := range global.Keys {
|
||||
if _, ok := locale.Keys[key]; !ok {
|
||||
locale.Keys[key] = message
|
||||
}
|
||||
}
|
||||
|
||||
for key, message := range global.Messages {
|
||||
if _, ok := locale.Messages[key]; !ok {
|
||||
locale.Messages[key] = message
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return locale
|
||||
}
|
||||
|
||||
// Build is the struct for the public
|
||||
func (page *Page) Build(globalCtx *core.GlobalBuildContext, option *core.BuildOption) ([]string, error) {
|
||||
|
||||
|
|
@ -399,89 +482,6 @@ func (page *Page) localeFiles(data map[string]interface{}) map[string]string {
|
|||
return roots
|
||||
}
|
||||
|
||||
func (page *Page) localeGlobal(name string) core.Locale {
|
||||
global := core.Locale{
|
||||
Keys: map[string]string{},
|
||||
Messages: map[string]string{},
|
||||
}
|
||||
file := filepath.Join(page.tmpl.Root, "__locales", name, "__global.yml")
|
||||
exist, err := page.tmpl.local.fs.Exists(file)
|
||||
if err != nil {
|
||||
log.Error(`[SUI] Check the global locale file error: %s`, err.Error())
|
||||
return global
|
||||
}
|
||||
|
||||
if !exist {
|
||||
return global
|
||||
}
|
||||
|
||||
raw, err := page.tmpl.local.fs.ReadFile(file)
|
||||
if err != nil {
|
||||
log.Error(`[SUI] Read the global locale file error: %s`, err.Error())
|
||||
return global
|
||||
}
|
||||
|
||||
err = yaml.Unmarshal(raw, &global)
|
||||
if err != nil {
|
||||
log.Error(`[SUI] Parse the global locale file error: %s`, err.Error())
|
||||
return global
|
||||
}
|
||||
|
||||
return global
|
||||
}
|
||||
|
||||
func (page *Page) locale(name string, pageOnly ...bool) core.Locale {
|
||||
file := filepath.Join(page.tmpl.Root, "__locales", name, fmt.Sprintf("%s.yml", page.Route))
|
||||
global := page.localeGlobal(name)
|
||||
|
||||
// Check the locale file
|
||||
exist, err := page.tmpl.local.fs.Exists(file)
|
||||
if err != nil {
|
||||
return global
|
||||
}
|
||||
|
||||
if !exist {
|
||||
return global
|
||||
}
|
||||
|
||||
locale := core.Locale{
|
||||
Keys: map[string]string{},
|
||||
Messages: map[string]string{},
|
||||
Date: global.Date,
|
||||
Currency: global.Currency,
|
||||
Number: global.Number,
|
||||
}
|
||||
raw, err := page.tmpl.local.fs.ReadFile(file)
|
||||
if err != nil {
|
||||
log.Error(`[SUI] Read the locale file error: %s`, err.Error())
|
||||
return global
|
||||
}
|
||||
|
||||
err = yaml.Unmarshal(raw, &locale)
|
||||
if err != nil {
|
||||
log.Error(`[SUI] Parse the locale file error: %s`, err.Error())
|
||||
return global
|
||||
}
|
||||
|
||||
if len(pageOnly) == 0 || !pageOnly[0] {
|
||||
|
||||
// Merge the global
|
||||
for key, message := range global.Keys {
|
||||
if _, ok := locale.Keys[key]; !ok {
|
||||
locale.Keys[key] = message
|
||||
}
|
||||
}
|
||||
|
||||
for key, message := range global.Messages {
|
||||
if _, ok := locale.Messages[key]; !ok {
|
||||
locale.Messages[key] = message
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return locale
|
||||
}
|
||||
|
||||
func (page *Page) writeLocaleSource(ctx *core.BuildContext, option *core.BuildOption) error {
|
||||
|
||||
locales := page.tmpl.Locales()
|
||||
|
|
@ -501,7 +501,7 @@ func (page *Page) writeLocaleSource(ctx *core.BuildContext, option *core.BuildOp
|
|||
continue
|
||||
}
|
||||
|
||||
locale := page.locale(lc.Value, true)
|
||||
locale := page.tmpl.getLocale(lc.Value, page.Route, true)
|
||||
locale.MergeTranslations(translations, prefix)
|
||||
|
||||
// Call the hook
|
||||
|
|
@ -560,16 +560,17 @@ func (page *Page) writeLocaleFiles(ctx *core.BuildContext, data map[string]inter
|
|||
if len(translations) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
prefix := core.TranslationKeyPrefix(page.Route)
|
||||
files := page.localeFiles(data)
|
||||
components := ctx.GetComponents()
|
||||
for name, file := range files {
|
||||
locale := page.locale(name)
|
||||
locale.MergeTranslations(translations)
|
||||
locale := page.tmpl.getLocale(name, page.Route)
|
||||
locale.MergeTranslations(translations, prefix)
|
||||
|
||||
// Merge the components locale
|
||||
for _, component := range components {
|
||||
compLocale := page.locale(component, true)
|
||||
for _, route := range components {
|
||||
compLocale := page.tmpl.getLocale(name, route, true)
|
||||
compLocale.ParseKeys()
|
||||
locale.Merge(compLocale)
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue