diff --git a/pkg/items/item.go b/pkg/items/item.go
index b29dfe98d02f9a373504c6e75295d20c0ef7d76b..a145bf532ef43353ad2a25ddb92d4f0471e37723 100644
--- a/pkg/items/item.go
+++ b/pkg/items/item.go
@@ -219,7 +219,7 @@ func (i *Item) Localize(localizer *localizer.Localizer) (err error) {
 
 func (i Item) Encode(ctx context.Context, s *schema.Schema) (*Item, error) {
 	if i.Data != nil {
-		dt, err := schema.Encode(nil, s, i.Data)
+		dt, err := schema.Encode(ctx, s, i.Data)
 		if err != nil {
 			// return errors.WithField(err, "data")
 			return nil, err
@@ -228,7 +228,7 @@ func (i Item) Encode(ctx context.Context, s *schema.Schema) (*Item, error) {
 	}
 	if len(i.Translations) > 0 {
 		for l, v := range i.Translations {
-			dt, err := schema.Encode(nil, s, v)
+			dt, err := schema.Encode(ctx, s, v)
 			if err != nil {
 				// return errors.WithField(err, fmt.Sprintf("translations.%s", l))
 				return nil, err
@@ -240,7 +240,6 @@ func (i Item) Encode(ctx context.Context, s *schema.Schema) (*Item, error) {
 }
 
 func (i Item) Decode(ctx context.Context, s *schema.Schema) (res *Item, err error) {
-
 	if i.Data != nil {
 		i.Data, err = s.Decode(ctx, i.Data)
 		if err != nil {
@@ -248,7 +247,15 @@ func (i Item) Decode(ctx context.Context, s *schema.Schema) (res *Item, err erro
 			// return errors.WithField(err, "data")
 		}
 	}
-
+	if len(i.Translations) > 0 {
+		for l, v := range i.Translations {
+			dt, err := schema.Decode(ctx, s, v)
+			if err != nil {
+				return nil, err
+			}
+			i.Translations[l] = dt.(map[string]interface{})
+		}
+	}
 	return &i, nil
 }