-
Notifications
You must be signed in to change notification settings - Fork 0
/
locales-fs-drafts.go
87 lines (77 loc) · 2.57 KB
/
locales-fs-drafts.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
// Copyright (c) 2023 The Go-Enjin Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package locales
import (
"fmt"
"net/http"
"github.com/go-enjin/golang-org-x-text/language"
"github.com/go-enjin/be/pkg/lang/catalog"
"github.com/go-enjin/be/pkg/log"
)
func (f *CFeature) performDraftChanges(r *http.Request, translations map[string]interface{}, ld *LocaleData) (err error) {
for code, v := range translations {
var tag language.Tag
if tag, err = language.Parse(code); err != nil {
log.WarnRF(r, "error parsing language code: %v - %v", code, err)
continue
}
if messages, ok := v.(map[string]interface{}); ok {
for shasum, vv := range messages {
switch t := vv.(type) {
case string:
if err = ld.SetStringTranslation(tag, shasum, t); err != nil {
log.WarnRF(r, "error setting string translation: %v - %v - %v", code, shasum, err)
continue
}
case map[string]interface{}:
if arg, ok := t["arg"].(string); ok {
var foundPlaceholder *catalog.Placeholder
if msg, ok := ld.Data[shasum][tag]; ok {
numerics := msg.Placeholders.Numeric()
for _, placeholder := range numerics {
if arg == placeholder.ID {
foundPlaceholder = placeholder
}
}
}
if foundPlaceholder == nil {
err = fmt.Errorf(`invalid placeholder: %q`, arg)
return
}
if cases, ok := t["cases"].([]interface{}); ok {
var list []string
for _, v := range cases {
if pair, ok := v.(map[string]interface{}); ok {
if pk, ok := pair["key"].(string); ok {
if pv, ok := pair["value"].(string); ok {
list = append(list, pk, pv)
}
}
}
}
if err = ld.SetPluralTranslation(tag, shasum, arg, list...); err != nil {
log.WarnRF(r, "error setting plural translation: %v - %v - %v - %+v - %v", code, shasum, arg, list, err)
continue
}
}
}
default:
log.WarnRF(r, `unexpected message translation type: (%T) %#+v`, t, t)
}
}
}
}
ld.ConvertAllPlaceholders()
return
}