Add resource translations for record page buttons

This commit is contained in:
Tomaž Jerman
2022-04-26 03:04:03 +02:00
committed by Denis Arh
parent 47cdee0125
commit ef803a8198
4 changed files with 120 additions and 1 deletions
+24
View File
@@ -58,6 +58,30 @@ page: schema.#Resource & {
keys: {
title: {}
description: {}
recordToolbarButtonNewLabel: {
path: ["recordToolbar", "new", "label"]
customHandler: true
}
recordToolbarButtonEditLabel: {
path: ["recordToolbar", "edit", "label"]
customHandler: true
}
recordToolbarButtonSubmitLabel: {
path: ["recordToolbar", "submit", "label"]
customHandler: true
}
recordToolbarButtonDeleteLabel: {
path: ["recordToolbar", "delete", "label"]
customHandler: true
}
recordToolbarButtonCloneLabel: {
path: ["recordToolbar", "clone", "label"]
customHandler: true
}
recordToolbarButtonBackLabel: {
path: ["recordToolbar", "back", "label"]
customHandler: true
}
blockTitle: {
path: ["pageBlock", {part: "blockID", var: true}, "title"]
customHandler: true
+45
View File
@@ -180,6 +180,51 @@ func (svc resourceTranslationsManager) pageExtended(ctx context.Context, res *ty
)
for _, tag := range svc.locale.Tags() {
// Button translations
if res.Config.Buttons != nil {
out = append(out, &locale.ResourceTranslation{
Resource: res.ResourceTranslation(),
Lang: tag.String(),
Key: types.LocaleKeyPageRecordToolbarNewLabel.Path,
Msg: svc.locale.TResourceFor(tag, res.ResourceTranslation(), types.LocaleKeyPageRecordToolbarNewLabel.Path),
})
out = append(out, &locale.ResourceTranslation{
Resource: res.ResourceTranslation(),
Lang: tag.String(),
Key: types.LocaleKeyPageRecordToolbarEditLabel.Path,
Msg: svc.locale.TResourceFor(tag, res.ResourceTranslation(), types.LocaleKeyPageRecordToolbarEditLabel.Path),
})
out = append(out, &locale.ResourceTranslation{
Resource: res.ResourceTranslation(),
Lang: tag.String(),
Key: types.LocaleKeyPageRecordToolbarSubmitLabel.Path,
Msg: svc.locale.TResourceFor(tag, res.ResourceTranslation(), types.LocaleKeyPageRecordToolbarSubmitLabel.Path),
})
out = append(out, &locale.ResourceTranslation{
Resource: res.ResourceTranslation(),
Lang: tag.String(),
Key: types.LocaleKeyPageRecordToolbarDeleteLabel.Path,
Msg: svc.locale.TResourceFor(tag, res.ResourceTranslation(), types.LocaleKeyPageRecordToolbarDeleteLabel.Path),
})
out = append(out, &locale.ResourceTranslation{
Resource: res.ResourceTranslation(),
Lang: tag.String(),
Key: types.LocaleKeyPageRecordToolbarCloneLabel.Path,
Msg: svc.locale.TResourceFor(tag, res.ResourceTranslation(), types.LocaleKeyPageRecordToolbarCloneLabel.Path),
})
out = append(out, &locale.ResourceTranslation{
Resource: res.ResourceTranslation(),
Lang: tag.String(),
Key: types.LocaleKeyPageRecordToolbarBackLabel.Path,
Msg: svc.locale.TResourceFor(tag, res.ResourceTranslation(), types.LocaleKeyPageRecordToolbarBackLabel.Path),
})
}
for i, block := range res.Blocks {
pbContentID := locale.ContentID(block.BlockID, i)
rpl := strings.NewReplacer(
+6
View File
@@ -45,6 +45,12 @@ var (
LocaleKeyNamespaceMetaDescription = LocaleKey{Path: "meta.description"}
LocaleKeyPageTitle = LocaleKey{Path: "title"}
LocaleKeyPageDescription = LocaleKey{Path: "description"}
LocaleKeyPageRecordToolbarNewLabel = LocaleKey{Path: "recordToolbar.new.label"}
LocaleKeyPageRecordToolbarEditLabel = LocaleKey{Path: "recordToolbar.edit.label"}
LocaleKeyPageRecordToolbarSubmitLabel = LocaleKey{Path: "recordToolbar.submit.label"}
LocaleKeyPageRecordToolbarDeleteLabel = LocaleKey{Path: "recordToolbar.delete.label"}
LocaleKeyPageRecordToolbarCloneLabel = LocaleKey{Path: "recordToolbar.clone.label"}
LocaleKeyPageRecordToolbarBackLabel = LocaleKey{Path: "recordToolbar.back.label"}
LocaleKeyPagePageBlockBlockIDTitle = LocaleKey{Path: "pageBlock.{{blockID}}.title"}
LocaleKeyPagePageBlockBlockIDDescription = LocaleKey{Path: "pageBlock.{{blockID}}.description"}
LocaleKeyPagePageBlockBlockIDButtonButtonIDLabel = LocaleKey{Path: "pageBlock.{{blockID}}.button.{{buttonID}}.label"}
+45 -1
View File
@@ -75,12 +75,28 @@ type (
Variants map[string]string `json:"variants,omitempty"`
}
PageButton struct {
Label string `json:"label"`
Enabled bool `json:"enabled"`
}
PageButtonConfig struct {
New PageButton `json:"new"`
Edit PageButton `json:"edit"`
Submit PageButton `json:"submit"`
Delete PageButton `json:"delete"`
Clone PageButton `json:"clone"`
Back PageButton `json:"back"`
}
PageConfig struct {
// How page is presented in the navigation
NavItem struct {
Icon *PageConfigIcon `json:"icon,omitempty"`
} `json:"navItem"`
Buttons *PageButtonConfig `json:"buttons,omitempty"`
//// Example how page-config structure can evolve in the future
//Views []struct {
// // what kind of output is this view intended for (screen, mobile...?)
@@ -166,6 +182,28 @@ func (m Page) Clone() *Page {
func (p *Page) decodeTranslations(tt locale.ResourceTranslationIndex) {
var aux *locale.ResourceTranslation
// Buttons here
if p.Config.Buttons != nil {
if aux = tt.FindByKey(LocaleKeyPageRecordToolbarNewLabel.Path); aux != nil {
p.Config.Buttons.New.Label = aux.Msg
}
if aux = tt.FindByKey(LocaleKeyPageRecordToolbarEditLabel.Path); aux != nil {
p.Config.Buttons.Edit.Label = aux.Msg
}
if aux = tt.FindByKey(LocaleKeyPageRecordToolbarSubmitLabel.Path); aux != nil {
p.Config.Buttons.Submit.Label = aux.Msg
}
if aux = tt.FindByKey(LocaleKeyPageRecordToolbarDeleteLabel.Path); aux != nil {
p.Config.Buttons.Delete.Label = aux.Msg
}
if aux = tt.FindByKey(LocaleKeyPageRecordToolbarCloneLabel.Path); aux != nil {
p.Config.Buttons.Clone.Label = aux.Msg
}
if aux = tt.FindByKey(LocaleKeyPageRecordToolbarBackLabel.Path); aux != nil {
p.Config.Buttons.Back.Label = aux.Msg
}
}
for i, block := range p.Blocks {
blockID := locale.ContentID(block.BlockID, i)
rpl := strings.NewReplacer(
@@ -213,7 +251,10 @@ func (p *Page) decodeTranslations(tt locale.ResourceTranslationIndex) {
}
func (p *Page) encodeTranslations() (out locale.ResourceTranslationSet) {
out = make(locale.ResourceTranslationSet, 0, 3)
out = make(locale.ResourceTranslationSet, 0, 12)
// Button translations don't need to happen here as we don't do anything with buttons at the moment
// @todo when we add custom buttons this should change
// Page blocks
for i, block := range p.Blocks {
@@ -386,5 +427,8 @@ func (bb *PageConfig) Scan(value interface{}) error {
}
func (bb PageConfig) Value() (driver.Value, error) {
// We're not saving button config to the DB; no need for it
bb.Buttons = nil
return json.Marshal(bb)
}