diff --git a/pkg/schema/localizer/localizer.go b/pkg/schema/localizer/localizer.go
index 0d1ddabec5bc5be09fb0cbd0ff9c4e83272b4baa..907ade5b5e603e1132d733cbb91604b45f87fc20 100644
--- a/pkg/schema/localizer/localizer.go
+++ b/pkg/schema/localizer/localizer.go
@@ -14,16 +14,16 @@ import (
 type Localizer struct {
 	schema           *schema.Schema
 	localesKV        map[string]*locales.Locale
-	locales          []*locales.Locale
 	localeID         string
+	locales          []*locales.Locale
 	allowNoPublished bool
 	allowDisabled    bool
 }
 
 type Config struct {
 	Schema           *schema.Schema
-	Locales          []*locales.Locale
 	LocaleID         string
+	Locales          []*locales.Locale
 	AllowNoPublished bool
 	AllowDisabled    bool
 }
@@ -147,13 +147,19 @@ func (l *Localizer) Locales() []*locales.Locale {
 	return l.locales
 }
 
+func (l *Localizer) LocaleID() string {
+	return l.localeID
+}
+
 func (l *Localizer) getTargetAndFallBackLocales() (target, fallback *locales.Locale, err error) {
 	if target, err = l.locale(l.localeID); err != nil {
-		return nil, nil, errors.New("target locale not found or disabled")
+		return nil, nil, errors.Wrap(err, "target locale not found or disabled")
 	}
 
 	if fallback, err = l.locale(target.Fallback); err != nil {
-		fallback = l.localesKV[locales.DefaultID]
+		if fallback, err = l.locale(locales.DefaultID); err != nil {
+			return nil, nil, errors.Wrap(err, "fallback locale not found or disabled")
+		}
 	}
 	return
 }
diff --git a/pkg/schema/localizer/localizer_test.go b/pkg/schema/localizer/localizer_test.go
index 23e6f0fdad2440f3102f481ce410bb29a5acc190..21b334d488dbbc513163545806c414ce963e8ea9 100644
--- a/pkg/schema/localizer/localizer_test.go
+++ b/pkg/schema/localizer/localizer_test.go
@@ -3,6 +3,7 @@ package localizer
 import (
 	"testing"
 
+	"git.perx.ru/perxis/perxis-go/pkg/locales"
 	"git.perx.ru/perxis/perxis-go/pkg/schema"
 	"git.perx.ru/perxis/perxis-go/pkg/schema/field"
 	"github.com/stretchr/testify/assert"
@@ -35,10 +36,10 @@ func TestLocalizer_localize(t *testing.T) {
 	)
 
 	tests := []struct {
-		name     string
 		fallback map[string]interface{}
 		target   map[string]interface{}
 		want     map[string]interface{}
+		name     string
 		wantErr  bool
 	}{
 		{
@@ -394,10 +395,10 @@ func TestLocalizer_deLocalize(t *testing.T) {
 	)
 
 	tests := []struct {
-		name     string
 		fallback map[string]interface{}
 		target   map[string]interface{}
 		want     map[string]interface{}
+		name     string
 		wantErr  bool
 	}{
 		{
@@ -610,3 +611,149 @@ func TestLocalizer_deLocalize(t *testing.T) {
 		})
 	}
 }
+
+func TestLocalizer_getTargetAndFallBackLocales(t *testing.T) {
+
+	tests := []struct {
+		localizer    *Localizer
+		wantTarget   *locales.Locale
+		wantFallback *locales.Locale
+		name         string
+		wantErr      bool
+	}{
+		{
+			name:      "Empty",
+			localizer: &Localizer{},
+			wantErr:   true,
+		},
+		{
+			name: "Success",
+			localizer: &Localizer{
+				localeID: "en",
+				localesKV: map[string]*locales.Locale{
+					"en":      {ID: "en"},
+					"default": {ID: "default"},
+				},
+			},
+			wantTarget:   &locales.Locale{ID: "en"},
+			wantFallback: &locales.Locale{ID: "default"},
+		},
+		{
+			name: "Success fallback",
+			localizer: &Localizer{
+				localeID: "ru",
+				localesKV: map[string]*locales.Locale{
+					"en":      {ID: "en"},
+					"ru":      {ID: "ru", Fallback: "en"},
+					"default": {ID: "default"},
+				},
+			},
+			wantTarget:   &locales.Locale{ID: "ru", Fallback: "en"},
+			wantFallback: &locales.Locale{ID: "en"},
+		},
+		{
+			name: "Success fallback no default",
+			localizer: &Localizer{
+				localeID: "ru",
+				localesKV: map[string]*locales.Locale{
+					"en": {ID: "en"},
+					"ru": {ID: "ru", Fallback: "en"},
+				},
+			},
+			wantTarget:   &locales.Locale{ID: "ru", Fallback: "en"},
+			wantFallback: &locales.Locale{ID: "en"},
+		},
+		{
+			name: "Success fallback no fallback",
+			localizer: &Localizer{
+				localeID: "ru",
+				localesKV: map[string]*locales.Locale{
+					"ru":      {ID: "ru", Fallback: "en"},
+					"default": {ID: "default"},
+				},
+			},
+			wantTarget:   &locales.Locale{ID: "ru", Fallback: "en"},
+			wantFallback: &locales.Locale{ID: "default"},
+		},
+		{
+			name: "Fail fallback no fallback",
+			localizer: &Localizer{
+				localeID: "ru",
+				localesKV: map[string]*locales.Locale{
+					"ru": {ID: "ru", Fallback: "en"},
+				},
+			},
+			wantErr: true,
+		},
+		{
+			name: "Fail target nil",
+			localizer: &Localizer{
+				localeID: "ru",
+				localesKV: map[string]*locales.Locale{
+					"ru": nil,
+				},
+			},
+			wantErr: true,
+		},
+		{
+			name: "Fail target disabled",
+			localizer: &Localizer{
+				localeID: "ru",
+				localesKV: map[string]*locales.Locale{
+					"ru":      {ID: "ru", Fallback: "en", Disabled: true},
+					"default": {ID: "default"},
+				},
+			},
+			wantErr: true,
+		},
+		{
+			name: "Success fallback disabled",
+			localizer: &Localizer{
+				localeID: "ru",
+				localesKV: map[string]*locales.Locale{
+					"en":      {ID: "en", Disabled: true},
+					"ru":      {ID: "ru", Fallback: "en"},
+					"default": {ID: "default"},
+				},
+			},
+			wantTarget:   &locales.Locale{ID: "ru", Fallback: "en"},
+			wantFallback: &locales.Locale{ID: "default"},
+		},
+		{
+			name: "Fail target no publish",
+			localizer: &Localizer{
+				localeID: "ru",
+				localesKV: map[string]*locales.Locale{
+					"ru":      {ID: "ru", Fallback: "en", NoPublish: true},
+					"default": {ID: "default"},
+				},
+			},
+			wantErr: true,
+		},
+		{
+			name: "Success fallback no publish",
+			localizer: &Localizer{
+				localeID: "ru",
+				localesKV: map[string]*locales.Locale{
+					"en":      {ID: "en", NoPublish: true},
+					"ru":      {ID: "ru", Fallback: "en"},
+					"default": {ID: "default"},
+				},
+			},
+			wantTarget:   &locales.Locale{ID: "ru", Fallback: "en"},
+			wantFallback: &locales.Locale{ID: "en", NoPublish: true},
+		},
+	}
+	for _, tt := range tests {
+		t.Run(tt.name, func(t *testing.T) {
+			gotTarget, gotFallback, err := tt.localizer.getTargetAndFallBackLocales()
+			if tt.wantErr {
+				require.Error(t, err)
+				return
+			}
+			require.NoError(t, err)
+			assert.Equal(t, tt.wantTarget, gotTarget)
+			assert.Equal(t, tt.wantFallback, gotFallback)
+		})
+	}
+}