• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

go-playground / validator / 14366072066

09 Apr 2025 08:06PM UTC coverage: 73.607% (-0.6%) from 74.225%
14366072066

Pull #1412

github

nodivbyzero
Enable more linters
Pull Request #1412: Re-enable several linters

14271 of 19388 relevant lines covered (73.61%)

72.85 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

70.38
/translations/ko/ko.go
1
package ko
2

3
import (
4
        "fmt"
5
        "log"
6
        "reflect"
7
        "strconv"
8
        "strings"
9
        "time"
10

11
        "github.com/go-playground/locales"
12
        ut "github.com/go-playground/universal-translator"
13

14
        "github.com/go-playground/validator/v10"
15
)
16

17
// RegisterDefaultTranslations registers a set of default translations
18
// for all built in tag's in validator; you may add your own as desired.
19
func RegisterDefaultTranslations(v *validator.Validate, trans ut.Translator) (err error) {
1✔
20
        translations := []struct {
1✔
21
                tag             string
1✔
22
                translation     string
1✔
23
                override        bool
1✔
24
                customRegisFunc validator.RegisterTranslationsFunc
1✔
25
                customTransFunc validator.TranslationFunc
1✔
26
        }{
1✔
27
                {
1✔
28
                        tag:         "required",
1✔
29
                        translation: "{0}은(는) 필수 필드입니다.",
1✔
30
                        override:    false,
1✔
31
                },
1✔
32
                {
1✔
33
                        tag:         "required_if",
1✔
34
                        translation: "{0}은(는) 필수 필드입니다.",
1✔
35
                        override:    false,
1✔
36
                },
1✔
37
                {
1✔
38
                        tag:         "required_unless",
1✔
39
                        translation: "{0}은(는) 필수 필드입니다.",
1✔
40
                        override:    false,
1✔
41
                },
1✔
42
                {
1✔
43
                        tag:         "required_with",
1✔
44
                        translation: "{0}은(는) 필수 필드입니다.",
1✔
45
                        override:    false,
1✔
46
                },
1✔
47
                {
1✔
48
                        tag:         "required_with_all",
1✔
49
                        translation: "{0}은(는) 필수 필드입니다.",
1✔
50
                        override:    false,
1✔
51
                },
1✔
52
                {
1✔
53
                        tag:         "required_without",
1✔
54
                        translation: "{0}은(는) 필수 필드입니다.",
1✔
55
                        override:    false,
1✔
56
                },
1✔
57
                {
1✔
58
                        tag:         "required_without_all",
1✔
59
                        translation: "{0}은(는) 필수 필드입니다.",
1✔
60
                        override:    false,
1✔
61
                },
1✔
62
                {
1✔
63
                        tag:         "excluded_if",
1✔
64
                        translation: "{0}은(는) 제외된 필드입니다.",
1✔
65
                        override:    false,
1✔
66
                },
1✔
67
                {
1✔
68
                        tag:         "excluded_unless",
1✔
69
                        translation: "{0}은(는) 제외된 필드입니다.",
1✔
70
                        override:    false,
1✔
71
                },
1✔
72
                {
1✔
73
                        tag:         "excluded_with",
1✔
74
                        translation: "{0}은(는) 제외된 필드입니다.",
1✔
75
                        override:    false,
1✔
76
                },
1✔
77
                {
1✔
78
                        tag:         "excluded_with_all",
1✔
79
                        translation: "{0}은(는) 제외된 필드입니다.",
1✔
80
                        override:    false,
1✔
81
                },
1✔
82
                {
1✔
83
                        tag:         "excluded_without",
1✔
84
                        translation: "{0}은(는) 제외된 필드입니다.",
1✔
85
                        override:    false,
1✔
86
                },
1✔
87
                {
1✔
88
                        tag:         "excluded_without_all",
1✔
89
                        translation: "{0}은(는) 제외된 필드입니다.",
1✔
90
                        override:    false,
1✔
91
                },
1✔
92
                {
1✔
93
                        tag:         "isdefault",
1✔
94
                        translation: "{0}은(는) 기본값이어야 합니다.",
1✔
95
                        override:    false,
1✔
96
                },
1✔
97
                {
1✔
98
                        tag: "len",
1✔
99
                        customRegisFunc: func(ut ut.Translator) (err error) {
2✔
100
                                if err = ut.Add("len-string", "{0}의 길이는 {1}여야 합니다.", false); err != nil {
1✔
101
                                        return
×
102
                                }
×
103

104
                                if err = ut.AddCardinal("len-string-character", "{0}자", locales.PluralRuleOther, false); err != nil {
1✔
105
                                        return
×
106
                                }
×
107

108
                                if err = ut.Add("len-number", "{0}은(는) {1}와(과) 같아야 합니다.", false); err != nil {
1✔
109
                                        return
×
110
                                }
×
111

112
                                if err = ut.Add("len-items", "{0}은(는) {1}을 포함해야 합니다.", false); err != nil {
1✔
113
                                        return
×
114
                                }
×
115

116
                                if err = ut.AddCardinal("len-items-item", "{0}개의 항목", locales.PluralRuleOther, false); err != nil {
1✔
117
                                        return
×
118
                                }
×
119

120
                                return
1✔
121
                        },
122
                        customTransFunc: func(ut ut.Translator, fe validator.FieldError) string {
4✔
123
                                var err error
4✔
124
                                var t string
4✔
125

4✔
126
                                var digits uint64
4✔
127
                                var kind reflect.Kind
4✔
128

4✔
129
                                if idx := strings.Index(fe.Param(), "."); idx != -1 {
5✔
130
                                        digits = uint64(len(fe.Param()[idx+1:]))
1✔
131
                                }
1✔
132

133
                                f64, err := strconv.ParseFloat(fe.Param(), 64)
4✔
134
                                if err != nil {
4✔
135
                                        goto END
×
136
                                }
137

138
                                kind = fe.Kind()
4✔
139
                                if kind == reflect.Ptr {
4✔
140
                                        kind = fe.Type().Elem().Kind()
×
141
                                }
×
142

143
                                switch kind {
4✔
144
                                case reflect.String:
2✔
145

2✔
146
                                        var c string
2✔
147

2✔
148
                                        c, err = ut.C("len-string-character", f64, digits, ut.FmtNumber(f64, digits))
2✔
149
                                        if err != nil {
2✔
150
                                                goto END
×
151
                                        }
152

153
                                        t, err = ut.T("len-string", fe.Field(), c)
2✔
154

155
                                case reflect.Slice, reflect.Map, reflect.Array:
1✔
156
                                        var c string
1✔
157

1✔
158
                                        c, err = ut.C("len-items-item", f64, digits, ut.FmtNumber(f64, digits))
1✔
159
                                        if err != nil {
1✔
160
                                                goto END
×
161
                                        }
162

163
                                        t, err = ut.T("len-items", fe.Field(), c)
1✔
164

165
                                default:
1✔
166
                                        t, err = ut.T("len-number", fe.Field(), ut.FmtNumber(f64, digits))
1✔
167
                                }
168

169
                        END:
170
                                if err != nil {
4✔
171
                                        fmt.Printf("warning: error translating FieldError: %s", err)
×
172
                                        return fe.(error).Error()
×
173
                                }
×
174

175
                                return t
4✔
176
                        },
177
                },
178
                {
179
                        tag: "min",
180
                        customRegisFunc: func(ut ut.Translator) (err error) {
1✔
181
                                if err = ut.Add("min-string", "{0}의 길이는 최소 {1}여야 합니다.", false); err != nil {
1✔
182
                                        return
×
183
                                }
×
184

185
                                if err = ut.AddCardinal("min-string-character", "{0}자", locales.PluralRuleOther, false); err != nil {
1✔
186
                                        return
×
187
                                }
×
188

189
                                if err = ut.Add("min-number", "{0}은(는) {1} 이상여야 합니다.", false); err != nil {
1✔
190
                                        return
×
191
                                }
×
192

193
                                if err = ut.Add("min-items", "{0}은(는) 최소 {1}을 포함해야 합니다.", false); err != nil {
1✔
194
                                        return
×
195
                                }
×
196

197
                                if err = ut.AddCardinal("min-items-item", "{0}개의 항목", locales.PluralRuleOther, false); err != nil {
1✔
198
                                        return
×
199
                                }
×
200

201
                                return
1✔
202
                        },
203
                        customTransFunc: func(ut ut.Translator, fe validator.FieldError) string {
4✔
204
                                var err error
4✔
205
                                var t string
4✔
206

4✔
207
                                var digits uint64
4✔
208
                                var kind reflect.Kind
4✔
209

4✔
210
                                if idx := strings.Index(fe.Param(), "."); idx != -1 {
5✔
211
                                        digits = uint64(len(fe.Param()[idx+1:]))
1✔
212
                                }
1✔
213

214
                                f64, err := strconv.ParseFloat(fe.Param(), 64)
4✔
215
                                if err != nil {
4✔
216
                                        goto END
×
217
                                }
218

219
                                kind = fe.Kind()
4✔
220
                                if kind == reflect.Ptr {
5✔
221
                                        kind = fe.Type().Elem().Kind()
1✔
222
                                }
1✔
223

224
                                switch kind {
4✔
225
                                case reflect.String:
2✔
226

2✔
227
                                        var c string
2✔
228

2✔
229
                                        c, err = ut.C("min-string-character", f64, digits, ut.FmtNumber(f64, digits))
2✔
230
                                        if err != nil {
2✔
231
                                                goto END
×
232
                                        }
233

234
                                        t, err = ut.T("min-string", fe.Field(), c)
2✔
235

236
                                case reflect.Slice, reflect.Map, reflect.Array:
1✔
237
                                        var c string
1✔
238

1✔
239
                                        c, err = ut.C("min-items-item", f64, digits, ut.FmtNumber(f64, digits))
1✔
240
                                        if err != nil {
1✔
241
                                                goto END
×
242
                                        }
243

244
                                        t, err = ut.T("min-items", fe.Field(), c)
1✔
245

246
                                default:
1✔
247
                                        t, err = ut.T("min-number", fe.Field(), ut.FmtNumber(f64, digits))
1✔
248
                                }
249

250
                        END:
251
                                if err != nil {
4✔
252
                                        fmt.Printf("warning: error translating FieldError: %s", err)
×
253
                                        return fe.(error).Error()
×
254
                                }
×
255

256
                                return t
4✔
257
                        },
258
                },
259
                {
260
                        tag: "max",
261
                        customRegisFunc: func(ut ut.Translator) (err error) {
1✔
262
                                if err = ut.Add("max-string", "{0}의 길이는 최대 {1}여야 합니다.", false); err != nil {
1✔
263
                                        return
×
264
                                }
×
265

266
                                if err = ut.AddCardinal("max-string-character", "{0}자", locales.PluralRuleOther, false); err != nil {
1✔
267
                                        return
×
268
                                }
×
269

270
                                if err = ut.Add("max-number", "{0}은(는) {1} 이하여야 합니다.", false); err != nil {
1✔
271
                                        return
×
272
                                }
×
273

274
                                if err = ut.Add("max-items", "{0}은(는) 최대 {1}여야 합니다.", false); err != nil {
1✔
275
                                        return
×
276
                                }
×
277

278
                                if err = ut.AddCardinal("max-items-item", "{0}개의 항목", locales.PluralRuleOther, false); err != nil {
1✔
279
                                        return
×
280
                                }
×
281

282
                                return
1✔
283
                        },
284
                        customTransFunc: func(ut ut.Translator, fe validator.FieldError) string {
4✔
285
                                var err error
4✔
286
                                var t string
4✔
287

4✔
288
                                var digits uint64
4✔
289
                                var kind reflect.Kind
4✔
290

4✔
291
                                if idx := strings.Index(fe.Param(), "."); idx != -1 {
5✔
292
                                        digits = uint64(len(fe.Param()[idx+1:]))
1✔
293
                                }
1✔
294

295
                                f64, err := strconv.ParseFloat(fe.Param(), 64)
4✔
296
                                if err != nil {
4✔
297
                                        goto END
×
298
                                }
299

300
                                kind = fe.Kind()
4✔
301
                                if kind == reflect.Ptr {
4✔
302
                                        kind = fe.Type().Elem().Kind()
×
303
                                }
×
304

305
                                switch kind {
4✔
306
                                case reflect.String:
2✔
307

2✔
308
                                        var c string
2✔
309

2✔
310
                                        c, err = ut.C("max-string-character", f64, digits, ut.FmtNumber(f64, digits))
2✔
311
                                        if err != nil {
2✔
312
                                                goto END
×
313
                                        }
314

315
                                        t, err = ut.T("max-string", fe.Field(), c)
2✔
316

317
                                case reflect.Slice, reflect.Map, reflect.Array:
1✔
318
                                        var c string
1✔
319

1✔
320
                                        c, err = ut.C("max-items-item", f64, digits, ut.FmtNumber(f64, digits))
1✔
321
                                        if err != nil {
1✔
322
                                                goto END
×
323
                                        }
324

325
                                        t, err = ut.T("max-items", fe.Field(), c)
1✔
326

327
                                default:
1✔
328
                                        t, err = ut.T("max-number", fe.Field(), ut.FmtNumber(f64, digits))
1✔
329
                                }
330

331
                        END:
332
                                if err != nil {
4✔
333
                                        fmt.Printf("warning: error translating FieldError: %s", err)
×
334
                                        return fe.(error).Error()
×
335
                                }
×
336

337
                                return t
4✔
338
                        },
339
                },
340
                {
341
                        tag:         "eq",
342
                        translation: "{0}은(는) {1}와(과) 같아야 합니다.",
343
                        override:    false,
344
                        customTransFunc: func(ut ut.Translator, fe validator.FieldError) string {
3✔
345
                                t, err := ut.T(fe.Tag(), fe.Field(), fe.Param())
3✔
346
                                if err != nil {
3✔
347
                                        fmt.Printf("경고: FieldError 번역 중 오류 발생: %#v", fe)
×
348
                                        return fe.(error).Error()
×
349
                                }
×
350

351
                                return t
3✔
352
                        },
353
                },
354
                {
355
                        tag: "ne",
356
                        customRegisFunc: func(ut ut.Translator) (err error) {
1✔
357
                                if err = ut.Add("ne-items", "{0}의 항목 수는 {1}와(과) 달라야 합니다.", false); err != nil {
1✔
358
                                        fmt.Printf("ne customRegisFunc #1 error because of %v\n", err)
×
359
                                        return
×
360
                                }
×
361

362
                                if err = ut.AddCardinal("ne-items-item", "{0}개", locales.PluralRuleOther, false); err != nil {
1✔
363
                                        return
×
364
                                }
×
365
                                if err = ut.Add("ne", "{0}은(는) {1}와(과) 달라야 합니다.", false); err != nil {
1✔
366
                                        fmt.Printf("ne customRegisFunc #2 error because of %v\n", err)
×
367
                                        return
×
368
                                }
×
369

370
                                return
1✔
371
                        },
372
                        customTransFunc: func(ut ut.Translator, fe validator.FieldError) string {
3✔
373
                                var err error
3✔
374
                                var t string
3✔
375
                                var f64 float64
3✔
376
                                var digits uint64
3✔
377
                                var kind reflect.Kind
3✔
378

3✔
379
                                fn := func() (err error) {
4✔
380
                                        if idx := strings.Index(fe.Param(), "."); idx != -1 {
1✔
381
                                                digits = uint64(len(fe.Param()[idx+1:]))
×
382
                                        }
×
383

384
                                        f64, err = strconv.ParseFloat(fe.Param(), 64)
1✔
385

1✔
386
                                        return
1✔
387
                                }
388

389
                                kind = fe.Kind()
3✔
390
                                if kind == reflect.Ptr {
3✔
391
                                        kind = fe.Type().Elem().Kind()
×
392
                                }
×
393

394
                                switch kind {
3✔
395
                                case reflect.Slice:
1✔
396
                                        var c string
1✔
397
                                        err = fn()
1✔
398
                                        if err != nil {
1✔
399
                                                goto END
×
400
                                        }
401

402
                                        c, err = ut.C("ne-items-item", f64, digits, ut.FmtNumber(f64, digits))
1✔
403
                                        if err != nil {
1✔
404
                                                goto END
×
405
                                        }
406
                                        t, err = ut.T("ne-items", fe.Field(), c)
1✔
407
                                default:
2✔
408
                                        t, err = ut.T("ne", fe.Field(), fe.Param())
2✔
409
                                }
410

411
                        END:
412
                                if err != nil {
3✔
413
                                        fmt.Printf("warning: error translating FieldError: %s", err)
×
414
                                        return fe.(error).Error()
×
415
                                }
×
416

417
                                return t
3✔
418
                        },
419
                },
420
                {
421
                        tag: "lt",
422
                        customRegisFunc: func(ut ut.Translator) (err error) {
1✔
423
                                if err = ut.Add("lt-string", "{0}의 길이는 {1}보다 작아야 합니다.", false); err != nil {
1✔
424
                                        return
×
425
                                }
×
426

427
                                if err = ut.AddCardinal("lt-string-character", "{0}자", locales.PluralRuleOther, false); err != nil {
1✔
428
                                        return
×
429
                                }
×
430

431
                                if err = ut.Add("lt-number", "{0}은(는) {1}보다 작아야 합니다.", false); err != nil {
1✔
432
                                        return
×
433
                                }
×
434

435
                                if err = ut.Add("lt-items", "{0}은(는) {1}보다 적은 항목여야 합니다.", false); err != nil {
1✔
436
                                        return
×
437
                                }
×
438

439
                                if err = ut.AddCardinal("lt-items-item", "{0}개의 항목", locales.PluralRuleOther, false); err != nil {
1✔
440
                                        return
×
441
                                }
×
442

443
                                if err = ut.Add("lt-datetime", "{0}은(는) 현재 시간보다 이전이어야 합니다.", false); err != nil {
1✔
444
                                        return
×
445
                                }
×
446

447
                                return
1✔
448
                        },
449
                        customTransFunc: func(ut ut.Translator, fe validator.FieldError) string {
5✔
450
                                var err error
5✔
451
                                var t string
5✔
452
                                var f64 float64
5✔
453
                                var digits uint64
5✔
454
                                var kind reflect.Kind
5✔
455

5✔
456
                                fn := func() (err error) {
9✔
457
                                        if idx := strings.Index(fe.Param(), "."); idx != -1 {
5✔
458
                                                digits = uint64(len(fe.Param()[idx+1:]))
1✔
459
                                        }
1✔
460

461
                                        f64, err = strconv.ParseFloat(fe.Param(), 64)
4✔
462

4✔
463
                                        return
4✔
464
                                }
465

466
                                kind = fe.Kind()
5✔
467
                                if kind == reflect.Ptr {
6✔
468
                                        kind = fe.Type().Elem().Kind()
1✔
469
                                }
1✔
470

471
                                switch kind {
5✔
472
                                case reflect.String:
2✔
473

2✔
474
                                        var c string
2✔
475

2✔
476
                                        err = fn()
2✔
477
                                        if err != nil {
2✔
478
                                                goto END
×
479
                                        }
480

481
                                        c, err = ut.C("lt-string-character", f64, digits, ut.FmtNumber(f64, digits))
2✔
482
                                        if err != nil {
2✔
483
                                                goto END
×
484
                                        }
485

486
                                        t, err = ut.T("lt-string", fe.Field(), c)
2✔
487

488
                                case reflect.Slice, reflect.Map, reflect.Array:
1✔
489
                                        var c string
1✔
490

1✔
491
                                        err = fn()
1✔
492
                                        if err != nil {
1✔
493
                                                goto END
×
494
                                        }
495

496
                                        c, err = ut.C("lt-items-item", f64, digits, ut.FmtNumber(f64, digits))
1✔
497
                                        if err != nil {
1✔
498
                                                goto END
×
499
                                        }
500

501
                                        t, err = ut.T("lt-items", fe.Field(), c)
1✔
502

503
                                case reflect.Struct:
1✔
504
                                        if fe.Type() != reflect.TypeOf(time.Time{}) {
1✔
505
                                                err = fmt.Errorf("tag '%s' cannot be used on a struct type", fe.Tag())
×
506
                                                goto END
×
507
                                        }
508

509
                                        t, err = ut.T("lt-datetime", fe.Field())
1✔
510

511
                                default:
1✔
512
                                        err = fn()
1✔
513
                                        if err != nil {
1✔
514
                                                goto END
×
515
                                        }
516

517
                                        t, err = ut.T("lt-number", fe.Field(), ut.FmtNumber(f64, digits))
1✔
518
                                }
519

520
                        END:
521
                                if err != nil {
5✔
522
                                        fmt.Printf("warning: error translating FieldError: %s", err)
×
523
                                        return fe.(error).Error()
×
524
                                }
×
525

526
                                return t
5✔
527
                        },
528
                },
529
                {
530
                        tag: "lte",
531
                        customRegisFunc: func(ut ut.Translator) (err error) {
1✔
532
                                if err = ut.Add("lte-string", "{0}의 길이는 최대 {1}여야 합니다.", false); err != nil {
1✔
533
                                        return
×
534
                                }
×
535

536
                                if err = ut.AddCardinal("lte-string-character", "{0}자", locales.PluralRuleOther, false); err != nil {
1✔
537
                                        return
×
538
                                }
×
539

540
                                if err = ut.Add("lte-number", "{0}은(는) {1} 이하여야 합니다.", false); err != nil {
1✔
541
                                        return
×
542
                                }
×
543

544
                                if err = ut.Add("lte-items", "{0}은(는) 최대 {1}여야 합니다.", false); err != nil {
1✔
545
                                        return
×
546
                                }
×
547

548
                                if err = ut.AddCardinal("lte-items-item", "{0}개의 항목", locales.PluralRuleOther, false); err != nil {
1✔
549
                                        return
×
550
                                }
×
551

552
                                if err = ut.Add("lte-datetime", "{0}은(는) 현재 시간보다 이전이어야 합니다.", false); err != nil {
1✔
553
                                        return
×
554
                                }
×
555

556
                                return
1✔
557
                        },
558
                        customTransFunc: func(ut ut.Translator, fe validator.FieldError) string {
5✔
559
                                var err error
5✔
560
                                var t string
5✔
561
                                var f64 float64
5✔
562
                                var digits uint64
5✔
563
                                var kind reflect.Kind
5✔
564

5✔
565
                                fn := func() (err error) {
9✔
566
                                        if idx := strings.Index(fe.Param(), "."); idx != -1 {
5✔
567
                                                digits = uint64(len(fe.Param()[idx+1:]))
1✔
568
                                        }
1✔
569

570
                                        f64, err = strconv.ParseFloat(fe.Param(), 64)
4✔
571

4✔
572
                                        return
4✔
573
                                }
574

575
                                kind = fe.Kind()
5✔
576
                                if kind == reflect.Ptr {
6✔
577
                                        kind = fe.Type().Elem().Kind()
1✔
578
                                }
1✔
579

580
                                switch kind {
5✔
581
                                case reflect.String:
2✔
582

2✔
583
                                        var c string
2✔
584

2✔
585
                                        err = fn()
2✔
586
                                        if err != nil {
2✔
587
                                                goto END
×
588
                                        }
589

590
                                        c, err = ut.C("lte-string-character", f64, digits, ut.FmtNumber(f64, digits))
2✔
591
                                        if err != nil {
2✔
592
                                                goto END
×
593
                                        }
594

595
                                        t, err = ut.T("lte-string", fe.Field(), c)
2✔
596

597
                                case reflect.Slice, reflect.Map, reflect.Array:
1✔
598
                                        var c string
1✔
599

1✔
600
                                        err = fn()
1✔
601
                                        if err != nil {
1✔
602
                                                goto END
×
603
                                        }
604

605
                                        c, err = ut.C("lte-items-item", f64, digits, ut.FmtNumber(f64, digits))
1✔
606
                                        if err != nil {
1✔
607
                                                goto END
×
608
                                        }
609

610
                                        t, err = ut.T("lte-items", fe.Field(), c)
1✔
611

612
                                case reflect.Struct:
1✔
613
                                        if fe.Type() != reflect.TypeOf(time.Time{}) {
1✔
614
                                                err = fmt.Errorf("tag '%s' cannot be used on a struct type", fe.Tag())
×
615
                                                goto END
×
616
                                        }
617

618
                                        t, err = ut.T("lte-datetime", fe.Field())
1✔
619

620
                                default:
1✔
621
                                        err = fn()
1✔
622
                                        if err != nil {
1✔
623
                                                goto END
×
624
                                        }
625

626
                                        t, err = ut.T("lte-number", fe.Field(), ut.FmtNumber(f64, digits))
1✔
627
                                }
628

629
                        END:
630
                                if err != nil {
5✔
631
                                        fmt.Printf("warning: error translating FieldError: %s", err)
×
632
                                        return fe.(error).Error()
×
633
                                }
×
634

635
                                return t
5✔
636
                        },
637
                },
638
                {
639
                        tag: "gt",
640
                        customRegisFunc: func(ut ut.Translator) (err error) {
1✔
641
                                if err = ut.Add("gt-string", "{0}의 길이는 {1}보다 길어야 합니다.", false); err != nil {
1✔
642
                                        return
×
643
                                }
×
644

645
                                if err = ut.AddCardinal("gt-string-character", "{0}자", locales.PluralRuleOther, false); err != nil {
1✔
646
                                        return
×
647
                                }
×
648

649
                                if err = ut.Add("gt-number", "{0}은(는) {1}보다 커야 합니다.", false); err != nil {
1✔
650
                                        return
×
651
                                }
×
652

653
                                if err = ut.Add("gt-items", "{0}은(는) {1}보다 많은 항목을 포함해야 합니다.", false); err != nil {
1✔
654
                                        return
×
655
                                }
×
656

657
                                if err = ut.AddCardinal("gt-items-item", "{0}개의 항목", locales.PluralRuleOther, false); err != nil {
1✔
658
                                        return
×
659
                                }
×
660

661
                                if err = ut.Add("gt-datetime", "{0}은(는) 현재 시간 이후이어야 합니다.", false); err != nil {
1✔
662
                                        return
×
663
                                }
×
664

665
                                return
1✔
666
                        },
667
                        customTransFunc: func(ut ut.Translator, fe validator.FieldError) string {
5✔
668
                                var err error
5✔
669
                                var t string
5✔
670
                                var f64 float64
5✔
671
                                var digits uint64
5✔
672
                                var kind reflect.Kind
5✔
673

5✔
674
                                fn := func() (err error) {
9✔
675
                                        if idx := strings.Index(fe.Param(), "."); idx != -1 {
5✔
676
                                                digits = uint64(len(fe.Param()[idx+1:]))
1✔
677
                                        }
1✔
678

679
                                        f64, err = strconv.ParseFloat(fe.Param(), 64)
4✔
680

4✔
681
                                        return
4✔
682
                                }
683

684
                                kind = fe.Kind()
5✔
685
                                if kind == reflect.Ptr {
6✔
686
                                        kind = fe.Type().Elem().Kind()
1✔
687
                                }
1✔
688

689
                                switch kind {
5✔
690
                                case reflect.String:
2✔
691

2✔
692
                                        var c string
2✔
693

2✔
694
                                        err = fn()
2✔
695
                                        if err != nil {
2✔
696
                                                goto END
×
697
                                        }
698

699
                                        c, err = ut.C("gt-string-character", f64, digits, ut.FmtNumber(f64, digits))
2✔
700
                                        if err != nil {
2✔
701
                                                goto END
×
702
                                        }
703

704
                                        t, err = ut.T("gt-string", fe.Field(), c)
2✔
705

706
                                case reflect.Slice, reflect.Map, reflect.Array:
1✔
707
                                        var c string
1✔
708

1✔
709
                                        err = fn()
1✔
710
                                        if err != nil {
1✔
711
                                                goto END
×
712
                                        }
713

714
                                        c, err = ut.C("gt-items-item", f64, digits, ut.FmtNumber(f64, digits))
1✔
715
                                        if err != nil {
1✔
716
                                                goto END
×
717
                                        }
718

719
                                        t, err = ut.T("gt-items", fe.Field(), c)
1✔
720

721
                                case reflect.Struct:
1✔
722
                                        if fe.Type() != reflect.TypeOf(time.Time{}) {
1✔
723
                                                err = fmt.Errorf("tag '%s' cannot be used on a struct type", fe.Tag())
×
724
                                                goto END
×
725
                                        }
726

727
                                        t, err = ut.T("gt-datetime", fe.Field())
1✔
728

729
                                default:
1✔
730
                                        err = fn()
1✔
731
                                        if err != nil {
1✔
732
                                                goto END
×
733
                                        }
734

735
                                        t, err = ut.T("gt-number", fe.Field(), ut.FmtNumber(f64, digits))
1✔
736
                                }
737

738
                        END:
739
                                if err != nil {
5✔
740
                                        fmt.Printf("warning: error translating FieldError: %s", err)
×
741
                                        return fe.(error).Error()
×
742
                                }
×
743

744
                                return t
5✔
745
                        },
746
                },
747
                {
748
                        tag: "gte",
749
                        customRegisFunc: func(ut ut.Translator) (err error) {
1✔
750
                                if err = ut.Add("gte-string", "{0}의 길이는 최소 {1} 이상여야 합니다.", false); err != nil {
1✔
751
                                        return
×
752
                                }
×
753

754
                                if err = ut.AddCardinal("gte-string-character", "{0}자", locales.PluralRuleOther, false); err != nil {
1✔
755
                                        return
×
756
                                }
×
757

758
                                if err = ut.Add("gte-number", "{0}은(는) {1} 이상여야 합니다.", false); err != nil {
1✔
759
                                        return
×
760
                                }
×
761

762
                                if err = ut.Add("gte-items", "{0}은(는) 최소 {1}을 포함해야 합니다.", false); err != nil {
1✔
763
                                        return
×
764
                                }
×
765

766
                                if err = ut.AddCardinal("gte-items-item", "{0}개의 항목", locales.PluralRuleOther, false); err != nil {
1✔
767
                                        return
×
768
                                }
×
769

770
                                if err = ut.Add("gte-datetime", "{0}은(는) 현재 시간 이후이어야 합니다.", false); err != nil {
1✔
771
                                        return
×
772
                                }
×
773

774
                                return
1✔
775
                        },
776
                        customTransFunc: func(ut ut.Translator, fe validator.FieldError) string {
5✔
777
                                var err error
5✔
778
                                var t string
5✔
779
                                var f64 float64
5✔
780
                                var digits uint64
5✔
781
                                var kind reflect.Kind
5✔
782

5✔
783
                                fn := func() (err error) {
9✔
784
                                        if idx := strings.Index(fe.Param(), "."); idx != -1 {
5✔
785
                                                digits = uint64(len(fe.Param()[idx+1:]))
1✔
786
                                        }
1✔
787

788
                                        f64, err = strconv.ParseFloat(fe.Param(), 64)
4✔
789

4✔
790
                                        return
4✔
791
                                }
792

793
                                kind = fe.Kind()
5✔
794
                                if kind == reflect.Ptr {
6✔
795
                                        kind = fe.Type().Elem().Kind()
1✔
796
                                }
1✔
797

798
                                switch kind {
5✔
799
                                case reflect.String:
2✔
800

2✔
801
                                        var c string
2✔
802

2✔
803
                                        err = fn()
2✔
804
                                        if err != nil {
2✔
805
                                                goto END
×
806
                                        }
807

808
                                        c, err = ut.C("gte-string-character", f64, digits, ut.FmtNumber(f64, digits))
2✔
809
                                        if err != nil {
2✔
810
                                                goto END
×
811
                                        }
812

813
                                        t, err = ut.T("gte-string", fe.Field(), c)
2✔
814

815
                                case reflect.Slice, reflect.Map, reflect.Array:
1✔
816
                                        var c string
1✔
817

1✔
818
                                        err = fn()
1✔
819
                                        if err != nil {
1✔
820
                                                goto END
×
821
                                        }
822

823
                                        c, err = ut.C("gte-items-item", f64, digits, ut.FmtNumber(f64, digits))
1✔
824
                                        if err != nil {
1✔
825
                                                goto END
×
826
                                        }
827

828
                                        t, err = ut.T("gte-items", fe.Field(), c)
1✔
829

830
                                case reflect.Struct:
1✔
831
                                        if fe.Type() != reflect.TypeOf(time.Time{}) {
1✔
832
                                                err = fmt.Errorf("tag '%s' cannot be used on a struct type", fe.Tag())
×
833
                                                goto END
×
834
                                        }
835

836
                                        t, err = ut.T("gte-datetime", fe.Field())
1✔
837

838
                                default:
1✔
839
                                        err = fn()
1✔
840
                                        if err != nil {
1✔
841
                                                goto END
×
842
                                        }
843

844
                                        t, err = ut.T("gte-number", fe.Field(), ut.FmtNumber(f64, digits))
1✔
845
                                }
846

847
                        END:
848
                                if err != nil {
5✔
849
                                        fmt.Printf("warning: error translating FieldError: %s", err)
×
850
                                        return fe.(error).Error()
×
851
                                }
×
852

853
                                return t
5✔
854
                        },
855
                },
856
                {
857
                        tag:         "eqfield",
858
                        translation: "{0}은(는) {1}와(과) 같아야 합니다.",
859
                        override:    false,
860
                        customTransFunc: func(ut ut.Translator, fe validator.FieldError) string {
1✔
861
                                t, err := ut.T(fe.Tag(), fe.Field(), fe.Param())
1✔
862
                                if err != nil {
1✔
863
                                        log.Printf("경고: FieldError 번역 중 오류 발생: %#v", fe)
×
864
                                        return fe.(error).Error()
×
865
                                }
×
866

867
                                return t
1✔
868
                        },
869
                },
870
                {
871
                        tag:         "eqcsfield",
872
                        translation: "{0}은(는) {1}와(과) 같아야 합니다.",
873
                        override:    false,
874
                        customTransFunc: func(ut ut.Translator, fe validator.FieldError) string {
1✔
875
                                t, err := ut.T(fe.Tag(), fe.Field(), fe.Param())
1✔
876
                                if err != nil {
1✔
877
                                        log.Printf("경고: FieldError 번역 중 오류 발생: %#v", fe)
×
878
                                        return fe.(error).Error()
×
879
                                }
×
880

881
                                return t
1✔
882
                        },
883
                },
884
                {
885
                        tag:         "necsfield",
886
                        translation: "{0}은(는) {1}와(과) 달라야 합니다.",
887
                        override:    false,
888
                        customTransFunc: func(ut ut.Translator, fe validator.FieldError) string {
1✔
889
                                t, err := ut.T(fe.Tag(), fe.Field(), fe.Param())
1✔
890
                                if err != nil {
1✔
891
                                        log.Printf("경고: FieldError 번역 중 오류 발생: %#v", fe)
×
892
                                        return fe.(error).Error()
×
893
                                }
×
894

895
                                return t
1✔
896
                        },
897
                },
898
                {
899
                        tag:         "gtcsfield",
900
                        translation: "{0}은(는) {1}보다 커야 합니다.",
901
                        override:    false,
902
                        customTransFunc: func(ut ut.Translator, fe validator.FieldError) string {
1✔
903
                                t, err := ut.T(fe.Tag(), fe.Field(), fe.Param())
1✔
904
                                if err != nil {
1✔
905
                                        log.Printf("경고: FieldError 번역 중 오류 발생: %#v", fe)
×
906
                                        return fe.(error).Error()
×
907
                                }
×
908

909
                                return t
1✔
910
                        },
911
                },
912
                {
913
                        tag:         "gtecsfield",
914
                        translation: "{0}은(는) {1} 이상여야 합니다.",
915
                        override:    false,
916
                        customTransFunc: func(ut ut.Translator, fe validator.FieldError) string {
1✔
917
                                t, err := ut.T(fe.Tag(), fe.Field(), fe.Param())
1✔
918
                                if err != nil {
1✔
919
                                        log.Printf("경고: FieldError 번역 중 오류 발생: %#v", fe)
×
920
                                        return fe.(error).Error()
×
921
                                }
×
922

923
                                return t
1✔
924
                        },
925
                },
926
                {
927
                        tag:         "ltcsfield",
928
                        translation: "{0}은(는) {1}보다 작아야 합니다.",
929
                        override:    false,
930
                        customTransFunc: func(ut ut.Translator, fe validator.FieldError) string {
1✔
931
                                t, err := ut.T(fe.Tag(), fe.Field(), fe.Param())
1✔
932
                                if err != nil {
1✔
933
                                        log.Printf("경고: FieldError 번역 중 오류 발생: %#v", fe)
×
934
                                        return fe.(error).Error()
×
935
                                }
×
936

937
                                return t
1✔
938
                        },
939
                },
940
                {
941
                        tag:         "ltecsfield",
942
                        translation: "{0}은(는) {1} 이하여야 합니다.",
943
                        override:    false,
944
                        customTransFunc: func(ut ut.Translator, fe validator.FieldError) string {
1✔
945
                                t, err := ut.T(fe.Tag(), fe.Field(), fe.Param())
1✔
946
                                if err != nil {
1✔
947
                                        log.Printf("경고: FieldError 번역 중 오류 발생: %#v", fe)
×
948
                                        return fe.(error).Error()
×
949
                                }
×
950

951
                                return t
1✔
952
                        },
953
                },
954
                {
955
                        tag:         "nefield",
956
                        translation: "{0}은(는) {1}와(과) 달라야 합니다.",
957
                        override:    false,
958
                        customTransFunc: func(ut ut.Translator, fe validator.FieldError) string {
1✔
959
                                t, err := ut.T(fe.Tag(), fe.Field(), fe.Param())
1✔
960
                                if err != nil {
1✔
961
                                        log.Printf("경고: FieldError 번역 중 오류 발생: %#v", fe)
×
962
                                        return fe.(error).Error()
×
963
                                }
×
964

965
                                return t
1✔
966
                        },
967
                },
968
                {
969
                        tag:         "gtfield",
970
                        translation: "{0}은(는) {1}보다 커야 합니다.",
971
                        override:    false,
972
                        customTransFunc: func(ut ut.Translator, fe validator.FieldError) string {
1✔
973
                                t, err := ut.T(fe.Tag(), fe.Field(), fe.Param())
1✔
974
                                if err != nil {
1✔
975
                                        log.Printf("경고: FieldError 번역 중 오류 발생: %#v", fe)
×
976
                                        return fe.(error).Error()
×
977
                                }
×
978

979
                                return t
1✔
980
                        },
981
                },
982
                {
983
                        tag:         "gtefield",
984
                        translation: "{0}은(는) {1} 이상여야 합니다.",
985
                        override:    false,
986
                        customTransFunc: func(ut ut.Translator, fe validator.FieldError) string {
1✔
987
                                t, err := ut.T(fe.Tag(), fe.Field(), fe.Param())
1✔
988
                                if err != nil {
1✔
989
                                        log.Printf("경고: FieldError 번역 중 오류 발생: %#v", fe)
×
990
                                        return fe.(error).Error()
×
991
                                }
×
992

993
                                return t
1✔
994
                        },
995
                },
996
                {
997
                        tag:         "ltfield",
998
                        translation: "{0}은(는) {1}보다 작아야 합니다.",
999
                        override:    false,
1000
                        customTransFunc: func(ut ut.Translator, fe validator.FieldError) string {
1✔
1001
                                t, err := ut.T(fe.Tag(), fe.Field(), fe.Param())
1✔
1002
                                if err != nil {
1✔
1003
                                        log.Printf("경고: FieldError 번역 중 오류 발생: %#v", fe)
×
1004
                                        return fe.(error).Error()
×
1005
                                }
×
1006

1007
                                return t
1✔
1008
                        },
1009
                },
1010
                {
1011
                        tag:         "ltefield",
1012
                        translation: "{0}은(는) {1} 이하여야 합니다.",
1013
                        override:    false,
1014
                        customTransFunc: func(ut ut.Translator, fe validator.FieldError) string {
1✔
1015
                                t, err := ut.T(fe.Tag(), fe.Field(), fe.Param())
1✔
1016
                                if err != nil {
1✔
1017
                                        log.Printf("경고: FieldError 번역 중 오류 발생: %#v", fe)
×
1018
                                        return fe.(error).Error()
×
1019
                                }
×
1020

1021
                                return t
1✔
1022
                        },
1023
                },
1024
                {
1025
                        tag:         "alpha",
1026
                        translation: "{0}은(는) 알파벳만 포함할 수 있습니다.",
1027
                        override:    false,
1028
                },
1029
                {
1030
                        tag:         "alphanum",
1031
                        translation: "{0}은(는) 알파벳과 숫자만 포함할 수 있습니다.",
1032
                        override:    false,
1033
                },
1034
                {
1035
                        tag:         "numeric",
1036
                        translation: "{0}은(는) 올바른 숫자여야 합니다.",
1037
                        override:    false,
1038
                },
1039
                {
1040
                        tag:         "number",
1041
                        translation: "{0}은(는) 올바른 수여야 합니다.",
1042
                        override:    false,
1043
                },
1044
                {
1045
                        tag:         "hexadecimal",
1046
                        translation: "{0}은(는) 올바른 16진수 표기여야 합니다.",
1047
                        override:    false,
1048
                },
1049
                {
1050
                        tag:         "hexcolor",
1051
                        translation: "{0}은(는) 올바른 HEX 색상 코드여야 합니다.",
1052
                        override:    false,
1053
                },
1054
                {
1055
                        tag:         "rgb",
1056
                        translation: "{0}은(는) 올바른 RGB 색상 코드여야 합니다.",
1057
                        override:    false,
1058
                },
1059
                {
1060
                        tag:         "rgba",
1061
                        translation: "{0}은(는) 올바른 RGBA 색상 코드여야 합니다.",
1062
                        override:    false,
1063
                },
1064
                {
1065
                        tag:         "hsl",
1066
                        translation: "{0}은(는) 올바른 HSL 색상 코드여야 합니다.",
1067
                        override:    false,
1068
                },
1069
                {
1070
                        tag:         "hsla",
1071
                        translation: "{0}은(는) 올바른 HSLA 색상 코드여야 합니다.",
1072
                        override:    false,
1073
                },
1074
                {
1075
                        tag:         "e164",
1076
                        translation: "{0}은(는) 유효한 E.164 형식의 전화번호여야 합니다.",
1077
                        override:    false,
1078
                },
1079
                {
1080
                        tag:         "email",
1081
                        translation: "{0}은(는) 올바른 이메일 주소여야 합니다.",
1082
                        override:    false,
1083
                },
1084
                {
1085
                        tag:         "url",
1086
                        translation: "{0}은(는) 올바른 URL여야 합니다.",
1087
                        override:    false,
1088
                },
1089
                {
1090
                        tag:         "uri",
1091
                        translation: "{0}은(는) 올바른 URI여야 합니다.",
1092
                        override:    false,
1093
                },
1094
                {
1095
                        tag:         "base64",
1096
                        translation: "{0}은(는) 올바른 Base64 문자열여야 합니다.",
1097
                        override:    false,
1098
                },
1099
                {
1100
                        tag:         "contains",
1101
                        translation: "{0}은(는) '{1}'을(를) 포함해야 합니다.",
1102
                        override:    false,
1103
                        customTransFunc: func(ut ut.Translator, fe validator.FieldError) string {
1✔
1104
                                t, err := ut.T(fe.Tag(), fe.Field(), fe.Param())
1✔
1105
                                if err != nil {
1✔
1106
                                        log.Printf("경고: FieldError 번역 중 오류 발생: %#v", fe)
×
1107
                                        return fe.(error).Error()
×
1108
                                }
×
1109

1110
                                return t
1✔
1111
                        },
1112
                },
1113
                {
1114
                        tag:         "containsany",
1115
                        translation: "{0}은(는) '{1}' 중 최소 하나를 포함해야 합니다.",
1116
                        override:    false,
1117
                        customTransFunc: func(ut ut.Translator, fe validator.FieldError) string {
1✔
1118
                                t, err := ut.T(fe.Tag(), fe.Field(), fe.Param())
1✔
1119
                                if err != nil {
1✔
1120
                                        log.Printf("경고: FieldError 번역 중 오류 발생: %#v", fe)
×
1121
                                        return fe.(error).Error()
×
1122
                                }
×
1123

1124
                                return t
1✔
1125
                        },
1126
                },
1127
                {
1128
                        tag:         "excludes",
1129
                        translation: "{0}에는 '{1}'라는 텍스트를 포함할 수 없습니다.",
1130
                        override:    false,
1131
                        customTransFunc: func(ut ut.Translator, fe validator.FieldError) string {
1✔
1132
                                t, err := ut.T(fe.Tag(), fe.Field(), fe.Param())
1✔
1133
                                if err != nil {
1✔
1134
                                        log.Printf("경고: FieldError 번역 중 오류 발생: %#v", fe)
×
1135
                                        return fe.(error).Error()
×
1136
                                }
×
1137

1138
                                return t
1✔
1139
                        },
1140
                },
1141
                {
1142
                        tag:         "excludesall",
1143
                        translation: "{0}에는 '{1}' 중 어느 것도 포함할 수 없습니다.",
1144
                        override:    false,
1145
                        customTransFunc: func(ut ut.Translator, fe validator.FieldError) string {
1✔
1146
                                t, err := ut.T(fe.Tag(), fe.Field(), fe.Param())
1✔
1147
                                if err != nil {
1✔
1148
                                        log.Printf("경고: FieldError 번역 중 오류 발생: %#v", fe)
×
1149
                                        return fe.(error).Error()
×
1150
                                }
×
1151

1152
                                return t
1✔
1153
                        },
1154
                },
1155
                {
1156
                        tag:         "excludesrune",
1157
                        translation: "{0}에는 '{1}'을(를) 포함할 수 없습니다.",
1158
                        override:    false,
1159
                        customTransFunc: func(ut ut.Translator, fe validator.FieldError) string {
1✔
1160
                                t, err := ut.T(fe.Tag(), fe.Field(), fe.Param())
1✔
1161
                                if err != nil {
1✔
1162
                                        log.Printf("경고: FieldError 번역 중 오류 발생: %#v", fe)
×
1163
                                        return fe.(error).Error()
×
1164
                                }
×
1165

1166
                                return t
1✔
1167
                        },
1168
                },
1169
                {
1170
                        tag:         "isbn",
1171
                        translation: "{0}은(는) 올바른 ISBN 번호여야 합니다.",
1172
                        override:    false,
1173
                },
1174
                {
1175
                        tag:         "isbn10",
1176
                        translation: "{0}은(는) 올바른 ISBN-10 번호여야 합니다.",
1177
                        override:    false,
1178
                },
1179
                {
1180
                        tag:         "isbn13",
1181
                        translation: "{0}은(는) 올바른 ISBN-13 번호여야 합니다.",
1182
                        override:    false,
1183
                },
1184
                {
1185
                        tag:         "issn",
1186
                        translation: "{0}은(는) 올바른 ISSN 번호여야 합니다.",
1187
                        override:    false,
1188
                },
1189
                {
1190
                        tag:         "uuid",
1191
                        translation: "{0}은(는) 올바른 UUID여야 합니다.",
1192
                        override:    false,
1193
                },
1194
                {
1195
                        tag:         "uuid3",
1196
                        translation: "{0}은(는) 버전 3의 올바른 UUID여야 합니다.",
1197
                        override:    false,
1198
                },
1199
                {
1200
                        tag:         "uuid4",
1201
                        translation: "{0}은(는) 버전 4의 올바른 UUID여야 합니다.",
1202
                        override:    false,
1203
                },
1204
                {
1205
                        tag:         "uuid5",
1206
                        translation: "{0}은(는) 버전 5의 올바른 UUID여야 합니다.",
1207
                        override:    false,
1208
                },
1209
                {
1210
                        tag:         "ulid",
1211
                        translation: "{0}은(는) 올바른 ULID여야 합니다.",
1212
                        override:    false,
1213
                },
1214
                {
1215
                        tag:         "ascii",
1216
                        translation: "{0}은(는) ASCII 문자만 포함해야 합니다.",
1217
                        override:    false,
1218
                },
1219
                {
1220
                        tag:         "printascii",
1221
                        translation: "{0}은(는) 인쇄 가능한 ASCII 문자만 포함해야 합니다.",
1222
                        override:    false,
1223
                },
1224
                {
1225
                        tag:         "multibyte",
1226
                        translation: "{0}은(는) 멀티바이트 문자를 포함해야 합니다.",
1227
                        override:    false,
1228
                },
1229
                {
1230
                        tag:         "datauri",
1231
                        translation: "{0}은(는) 올바른 데이터 URI를 포함해야 합니다.",
1232
                        override:    false,
1233
                },
1234
                {
1235
                        tag:         "latitude",
1236
                        translation: "{0}은(는) 올바른 위도 좌표를 포함해야 합니다.",
1237
                        override:    false,
1238
                },
1239
                {
1240
                        tag:         "longitude",
1241
                        translation: "{0}은(는) 올바른 경도 좌표를 포함해야 합니다.",
1242
                        override:    false,
1243
                },
1244
                {
1245
                        tag:         "ssn",
1246
                        translation: "{0}은(는) 올바른 사회 보장 번호여야 합니다.",
1247
                        override:    false,
1248
                },
1249
                {
1250
                        tag:         "ipv4",
1251
                        translation: "{0}은(는) 올바른 IPv4 주소여야 합니다.",
1252
                        override:    false,
1253
                },
1254
                {
1255
                        tag:         "ipv6",
1256
                        translation: "{0}은(는) 올바른 IPv6 주소여야 합니다.",
1257
                        override:    false,
1258
                },
1259
                {
1260
                        tag:         "ip",
1261
                        translation: "{0}은(는) 올바른 IP 주소여야 합니다.",
1262
                        override:    false,
1263
                },
1264
                {
1265
                        tag:         "cidr",
1266
                        translation: "{0}은(는) 올바른 CIDR 표기를 포함해야 합니다.",
1267
                        override:    false,
1268
                },
1269
                {
1270
                        tag:         "cidrv4",
1271
                        translation: "{0}은(는) IPv4 주소의 올바른 CIDR 표기를 포함해야 합니다.",
1272
                        override:    false,
1273
                },
1274
                {
1275
                        tag:         "cidrv6",
1276
                        translation: "{0}은(는) IPv6 주소의 올바른 CIDR 표기를 포함해야 합니다.",
1277
                        override:    false,
1278
                },
1279
                {
1280
                        tag:         "tcp_addr",
1281
                        translation: "{0}은(는) 올바른 TCP 주소여야 합니다.",
1282
                        override:    false,
1283
                },
1284
                {
1285
                        tag:         "tcp4_addr",
1286
                        translation: "{0}은(는) 올바른 IPv4의 TCP 주소여야 합니다.",
1287
                        override:    false,
1288
                },
1289
                {
1290
                        tag:         "tcp6_addr",
1291
                        translation: "{0}은(는) 올바른 IPv6의 TCP 주소여야 합니다.",
1292
                        override:    false,
1293
                },
1294
                {
1295
                        tag:         "udp_addr",
1296
                        translation: "{0}은(는) 올바른 UDP 주소여야 합니다.",
1297
                        override:    false,
1298
                },
1299
                {
1300
                        tag:         "udp4_addr",
1301
                        translation: "{0}은(는) 올바른 IPv4의 UDP 주소여야 합니다.",
1302
                        override:    false,
1303
                },
1304
                {
1305
                        tag:         "udp6_addr",
1306
                        translation: "{0}은(는) 올바른 IPv6의 UDP 주소여야 합니다.",
1307
                        override:    false,
1308
                },
1309
                {
1310
                        tag:         "ip_addr",
1311
                        translation: "{0}은(는) 해석 가능한 IP 주소여야 합니다.",
1312
                        override:    false,
1313
                },
1314
                {
1315
                        tag:         "ip4_addr",
1316
                        translation: "{0}은(는) 해석 가능한 IPv4 주소여야 합니다.",
1317
                        override:    false,
1318
                },
1319
                {
1320
                        tag:         "ip6_addr",
1321
                        translation: "{0}은(는) 해석 가능한 IPv6 주소여야 합니다.",
1322
                        override:    false,
1323
                },
1324
                {
1325
                        tag:         "unix_addr",
1326
                        translation: "{0}은(는) 해석 가능한 UNIX 주소여야 합니다.",
1327
                        override:    false,
1328
                },
1329
                {
1330
                        tag:         "mac",
1331
                        translation: "{0}은(는) 올바른 MAC 주소를 포함해야 합니다.",
1332
                        override:    false,
1333
                },
1334
                {
1335
                        tag:         "fqdn",
1336
                        translation: "{0}은(는) 유효한 FQDN이어야 합니다.",
1337
                        override:    false,
1338
                },
1339
                {
1340
                        tag:         "unique",
1341
                        translation: "{0}은(는) 고유한 값만 포함해야 합니다.",
1342
                        override:    false,
1343
                },
1344
                {
1345
                        tag:         "iscolor",
1346
                        translation: "{0}은(는) 올바른 색이여야 합니다.",
1347
                        override:    false,
1348
                },
1349
                {
1350
                        tag:         "cron",
1351
                        translation: "{0}은(는) 유효한 cron 표현식이어야 합니다.",
1352
                        override:    false,
1353
                },
1354
                {
1355
                        tag:         "oneof",
1356
                        translation: "{0}은(는) [{1}] 중 하나여야 합니다.",
1357
                        override:    false,
1358
                        customTransFunc: func(ut ut.Translator, fe validator.FieldError) string {
2✔
1359
                                s, err := ut.T(fe.Tag(), fe.Field(), fe.Param())
2✔
1360
                                if err != nil {
2✔
1361
                                        log.Printf("경고: FieldError 번역 중 오류 발생: %#v", fe)
×
1362
                                        return fe.(error).Error()
×
1363
                                }
×
1364
                                return s
2✔
1365
                        },
1366
                },
1367
                {
1368
                        tag:         "json",
1369
                        translation: "{0}은(는) 올바른 JSON 문자열여야 합니다.",
1370
                        override:    false,
1371
                },
1372
                {
1373
                        tag:         "jwt",
1374
                        translation: "{0}은(는) 올바른 JWT 문자열여야 합니다.",
1375
                        override:    false,
1376
                },
1377
                {
1378
                        tag:         "lowercase",
1379
                        translation: "{0}은(는) 소문자여야 합니다.",
1380
                        override:    false,
1381
                },
1382
                {
1383
                        tag:         "uppercase",
1384
                        translation: "{0}은(는) 대문자여야 합니다.",
1385
                        override:    false,
1386
                },
1387
                {
1388
                        tag:         "datetime",
1389
                        translation: "{0}은(는) {1} 형식과 일치해야 합니다.",
1390
                        override:    false,
1391
                        customTransFunc: func(ut ut.Translator, fe validator.FieldError) string {
1✔
1392
                                t, err := ut.T(fe.Tag(), fe.Field(), fe.Param())
1✔
1393
                                if err != nil {
1✔
1394
                                        log.Printf("경고: FieldError 번역 중 오류 발생: %#v", fe)
×
1395
                                        return fe.(error).Error()
×
1396
                                }
×
1397

1398
                                return t
1✔
1399
                        },
1400
                },
1401
                {
1402
                        tag:         "postcode_iso3166_alpha2",
1403
                        translation: "{0}은(는) 국가 코드 {1}의 우편번호 형식과 일치해야 합니다.",
1404
                        override:    false,
1405
                        customTransFunc: func(ut ut.Translator, fe validator.FieldError) string {
1✔
1406
                                t, err := ut.T(fe.Tag(), fe.Field(), fe.Param())
1✔
1407
                                if err != nil {
1✔
1408
                                        log.Printf("경고: FieldError 번역 중 오류 발생: %#v", fe)
×
1409
                                        return fe.(error).Error()
×
1410
                                }
×
1411

1412
                                return t
1✔
1413
                        },
1414
                },
1415
                {
1416
                        tag:         "postcode_iso3166_alpha2_field",
1417
                        translation: "{0}은(는) {1} 필드에 지정된 국가 코드의 우편번호 형식과 일치해야 합니다.",
1418
                        override:    false,
1419
                        customTransFunc: func(ut ut.Translator, fe validator.FieldError) string {
1✔
1420
                                t, err := ut.T(fe.Tag(), fe.Field(), fe.Param())
1✔
1421
                                if err != nil {
1✔
1422
                                        log.Printf("경고: FieldError 번역 중 오류 발생: %#v", fe)
×
1423
                                        return fe.(error).Error()
×
1424
                                }
×
1425

1426
                                return t
1✔
1427
                        },
1428
                },
1429
                {
1430
                        tag:         "boolean",
1431
                        translation: "{0}은(는) 올바른 부울 값여야 합니다.",
1432
                        override:    false,
1433
                },
1434
                {
1435
                        tag:         "image",
1436
                        translation: "{0}은(는) 유효한 이미지여야 합니다.",
1437
                        override:    false,
1438
                },
1439
                {
1440
                        tag:         "cve",
1441
                        translation: "{0}은(는) 유효한 CVE 식별자여야 합니다.",
1442
                        override:    false,
1443
                },
1444
        }
1445

1446
        for _, t := range translations {
104✔
1447
                if t.customTransFunc != nil && t.customRegisFunc != nil {
111✔
1448
                        err = v.RegisterTranslation(t.tag, trans, t.customRegisFunc, t.customTransFunc)
8✔
1449
                } else if t.customTransFunc != nil && t.customRegisFunc == nil {
125✔
1450
                        err = v.RegisterTranslation(t.tag, trans, registrationFunc(t.tag, t.translation, t.override), t.customTransFunc)
22✔
1451
                } else if t.customTransFunc == nil && t.customRegisFunc != nil {
95✔
1452
                        err = v.RegisterTranslation(t.tag, trans, t.customRegisFunc, translateFunc)
×
1453
                } else {
73✔
1454
                        err = v.RegisterTranslation(t.tag, trans, registrationFunc(t.tag, t.translation, t.override), translateFunc)
73✔
1455
                }
73✔
1456

1457
                if err != nil {
103✔
1458
                        return
×
1459
                }
×
1460
        }
1461

1462
        return
1✔
1463
}
1464

1465
func registrationFunc(tag string, translation string, override bool) validator.RegisterTranslationsFunc {
95✔
1466
        return func(ut ut.Translator) (err error) {
190✔
1467
                if err = ut.Add(tag, translation, override); err != nil {
95✔
1468
                        return
×
1469
                }
×
1470

1471
                return
95✔
1472
        }
1473
}
1474

1475
func translateFunc(ut ut.Translator, fe validator.FieldError) string {
73✔
1476
        t, err := ut.T(fe.Tag(), fe.Field())
73✔
1477
        if err != nil {
73✔
1478
                log.Printf("warning: error translating FieldError: %#v", fe)
×
1479
                return fe.(error).Error()
×
1480
        }
×
1481

1482
        return t
73✔
1483
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc