From 72154f77c0221c3758ca1c61a40845ec676f4c02 Mon Sep 17 00:00:00 2001 From: Anton Sattarov <sattarov@perx.ru> Date: Wed, 4 Jun 2025 07:11:36 +0000 Subject: [PATCH] =?UTF-8?q?fix(core):=20=D0=98=D1=81=D0=BF=D1=80=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA?= =?UTF-8?q?=D0=B0=20=D0=BF=D1=80=D0=B8=20"=D0=BF=D1=80=D0=BE=D1=80=D0=B5?= =?UTF-8?q?=D0=B6=D0=B8=D0=B2=D0=B0=D0=BD=D0=B8=D0=B8"=20=D0=BF=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D0=B2=D0=BE=D0=B4=D0=BE=D0=B2=20=D1=8D=D0=BB=D0=B5?= =?UTF-8?q?=D0=BC=D0=B5=D0=BD=D1=82=D0=BE=D0=B2=20=D0=BC=D0=B0=D1=81=D1=81?= =?UTF-8?q?=D0=B8=D0=B2=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Issue: #3264 --- pkg/schema/localizer/localizer.go | 12 ++++-- pkg/schema/localizer/localizer_test.go | 51 ++++++++++++++++++++++++++ 2 files changed, 60 insertions(+), 3 deletions(-) diff --git a/pkg/schema/localizer/localizer.go b/pkg/schema/localizer/localizer.go index 4cc99d60..c8d8604f 100644 --- a/pkg/schema/localizer/localizer.go +++ b/pkg/schema/localizer/localizer.go @@ -240,14 +240,20 @@ func localize(c *walk.WalkContext) (err error) { return } -func extractTranslation(c *walk.WalkContext) (err error) { +func extractTranslation(c *walk.WalkContext) error { if c.Dst == nil { - return + return nil } if reflect.DeepEqual(c.Src, c.Dst) { c.Dst = nil c.Changed = true + return nil } - return + // если массивы отличаются, то не очищаем совпадающие элементы + if _, ok := c.Field.Params.(*field.ArrayParameters); ok { + c.Src = nil + return nil + } + return nil } diff --git a/pkg/schema/localizer/localizer_test.go b/pkg/schema/localizer/localizer_test.go index ab6b277c..8389f038 100644 --- a/pkg/schema/localizer/localizer_test.go +++ b/pkg/schema/localizer/localizer_test.go @@ -370,6 +370,32 @@ func TestLocalizer_localize(t *testing.T) { }, }, }, + { + name: "Success arrays", + fallback: map[string]any{ + "slice": []any{"en_s1", "en_s2"}, + "arr": []any{ + map[string]any{"num": 11}, + map[string]any{"num": 22}, + }, + }, + target: map[string]any{ + "slice": []any{nil, nil, "ru_s3"}, + "arr": []any{ + nil, + map[string]any{"num": 2}, + nil, + }, + }, + want: map[string]any{ + "slice": []any{"en_s1", "en_s2", "ru_s3"}, + "arr": []any{ + map[string]any{"num": 11}, + map[string]any{"num": 2}, + nil, + }, + }, + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { @@ -613,6 +639,31 @@ func TestLocalizer_extractTranslation(t *testing.T) { }, }, }, + { + name: "Success arrays", + fallback: map[string]any{ + "slice": []any{"en_s1", "en_s2"}, + "arr": []any{ + map[string]any{"num": 11}, + map[string]any{"num": 22}, + }, + }, + target: map[string]any{ + "slice": []interface{}{"en_s1", "en_s2"}, + "arr": []interface{}{ + map[string]any{"num": 11}, + map[string]any{"num": 2}, + map[string]any{"num": 22}, + }, + }, + want: map[string]any{ + "arr": []interface{}{ + map[string]any{"num": 11}, + map[string]any{"num": 2}, + map[string]any{"num": 22}, + }, + }, + }, { name: "Success singlelocale obj", fallback: map[string]interface{}{ -- GitLab