1 package tr
2
3 import (
4 "testing"
5 "time"
6
7 . "github.com/go-playground/assert/v2"
8 turkish "github.com/go-playground/locales/tr"
9 ut "github.com/go-playground/universal-translator"
10 "github.com/go-playground/validator/v10"
11 )
12
13 func TestTranslations(t *testing.T) {
14
15 tr := turkish.New()
16 uni := ut.New(tr, tr)
17 trans, _ := uni.GetTranslator("tr")
18
19 validate := validator.New()
20
21 err := RegisterDefaultTranslations(validate, trans)
22 Equal(t, err, nil)
23
24 type Inner struct {
25 EqCSFieldString string
26 NeCSFieldString string
27 GtCSFieldString string
28 GteCSFieldString string
29 LtCSFieldString string
30 LteCSFieldString string
31 }
32
33 type Test struct {
34 Inner Inner
35 RequiredString string `validate:"required"`
36 RequiredNumber int `validate:"required"`
37 RequiredMultiple []string `validate:"required"`
38 LenString string `validate:"len=1"`
39 LenNumber float64 `validate:"len=1113.00"`
40 LenMultiple []string `validate:"len=7"`
41 MinString string `validate:"min=1"`
42 MinNumber float64 `validate:"min=1113.00"`
43 MinMultiple []string `validate:"min=7"`
44 MaxString string `validate:"max=3"`
45 MaxNumber float64 `validate:"max=1113.00"`
46 MaxMultiple []string `validate:"max=7"`
47 EqString string `validate:"eq=3"`
48 EqNumber float64 `validate:"eq=2.33"`
49 EqMultiple []string `validate:"eq=7"`
50 NeString string `validate:"ne="`
51 NeNumber float64 `validate:"ne=0.00"`
52 NeMultiple []string `validate:"ne=0"`
53 LtString string `validate:"lt=3"`
54 LtNumber float64 `validate:"lt=5.56"`
55 LtMultiple []string `validate:"lt=2"`
56 LtTime time.Time `validate:"lt"`
57 LteString string `validate:"lte=3"`
58 LteNumber float64 `validate:"lte=5.56"`
59 LteMultiple []string `validate:"lte=2"`
60 LteTime time.Time `validate:"lte"`
61 GtString string `validate:"gt=3"`
62 GtNumber float64 `validate:"gt=5.56"`
63 GtMultiple []string `validate:"gt=2"`
64 GtTime time.Time `validate:"gt"`
65 GteString string `validate:"gte=3"`
66 GteNumber float64 `validate:"gte=5.56"`
67 GteMultiple []string `validate:"gte=2"`
68 GteTime time.Time `validate:"gte"`
69 EqFieldString string `validate:"eqfield=MaxString"`
70 EqCSFieldString string `validate:"eqcsfield=Inner.EqCSFieldString"`
71 NeCSFieldString string `validate:"necsfield=Inner.NeCSFieldString"`
72 GtCSFieldString string `validate:"gtcsfield=Inner.GtCSFieldString"`
73 GteCSFieldString string `validate:"gtecsfield=Inner.GteCSFieldString"`
74 LtCSFieldString string `validate:"ltcsfield=Inner.LtCSFieldString"`
75 LteCSFieldString string `validate:"ltecsfield=Inner.LteCSFieldString"`
76 NeFieldString string `validate:"nefield=EqFieldString"`
77 GtFieldString string `validate:"gtfield=MaxString"`
78 GteFieldString string `validate:"gtefield=MaxString"`
79 LtFieldString string `validate:"ltfield=MaxString"`
80 LteFieldString string `validate:"ltefield=MaxString"`
81 AlphaString string `validate:"alpha"`
82 AlphanumString string `validate:"alphanum"`
83 NumericString string `validate:"numeric"`
84 NumberString string `validate:"number"`
85 HexadecimalString string `validate:"hexadecimal"`
86 HexColorString string `validate:"hexcolor"`
87 RGBColorString string `validate:"rgb"`
88 RGBAColorString string `validate:"rgba"`
89 HSLColorString string `validate:"hsl"`
90 HSLAColorString string `validate:"hsla"`
91 Email string `validate:"email"`
92 URL string `validate:"url"`
93 URI string `validate:"uri"`
94 Base64 string `validate:"base64"`
95 Contains string `validate:"contains=purpose"`
96 ContainsAny string `validate:"containsany=!@#$"`
97 Excludes string `validate:"excludes=text"`
98 ExcludesAll string `validate:"excludesall=!@#$"`
99 ExcludesRune string `validate:"excludesrune=☻"`
100 ISBN string `validate:"isbn"`
101 ISBN10 string `validate:"isbn10"`
102 ISBN13 string `validate:"isbn13"`
103 ISSN string `validate:"issn"`
104 UUID string `validate:"uuid"`
105 UUID3 string `validate:"uuid3"`
106 UUID4 string `validate:"uuid4"`
107 UUID5 string `validate:"uuid5"`
108 ULID string `validate:"ulid"`
109 ASCII string `validate:"ascii"`
110 PrintableASCII string `validate:"printascii"`
111 MultiByte string `validate:"multibyte"`
112 DataURI string `validate:"datauri"`
113 Latitude string `validate:"latitude"`
114 Longitude string `validate:"longitude"`
115 SSN string `validate:"ssn"`
116 IP string `validate:"ip"`
117 IPv4 string `validate:"ipv4"`
118 IPv6 string `validate:"ipv6"`
119 CIDR string `validate:"cidr"`
120 CIDRv4 string `validate:"cidrv4"`
121 CIDRv6 string `validate:"cidrv6"`
122 TCPAddr string `validate:"tcp_addr"`
123 TCPAddrv4 string `validate:"tcp4_addr"`
124 TCPAddrv6 string `validate:"tcp6_addr"`
125 UDPAddr string `validate:"udp_addr"`
126 UDPAddrv4 string `validate:"udp4_addr"`
127 UDPAddrv6 string `validate:"udp6_addr"`
128 IPAddr string `validate:"ip_addr"`
129 IPAddrv4 string `validate:"ip4_addr"`
130 IPAddrv6 string `validate:"ip6_addr"`
131 UinxAddr string `validate:"unix_addr"`
132 MAC string `validate:"mac"`
133 IsColor string `validate:"iscolor"`
134 StrPtrMinLen *string `validate:"min=10"`
135 StrPtrMaxLen *string `validate:"max=1"`
136 StrPtrLen *string `validate:"len=2"`
137 StrPtrLt *string `validate:"lt=1"`
138 StrPtrLte *string `validate:"lte=1"`
139 StrPtrGt *string `validate:"gt=10"`
140 StrPtrGte *string `validate:"gte=10"`
141 OneOfString string `validate:"oneof=red green"`
142 OneOfInt int `validate:"oneof=5 63"`
143 UniqueSlice []string `validate:"unique"`
144 UniqueArray [3]string `validate:"unique"`
145 UniqueMap map[string]string `validate:"unique"`
146 Image string `validate:"image"`
147 }
148
149 var test Test
150
151 test.Inner.EqCSFieldString = "1234"
152 test.Inner.GtCSFieldString = "1234"
153 test.Inner.GteCSFieldString = "1234"
154
155 test.MaxString = "1234"
156 test.MaxNumber = 2000
157 test.MaxMultiple = make([]string, 9)
158
159 test.LtString = "1234"
160 test.LtNumber = 6
161 test.LtMultiple = make([]string, 3)
162 test.LtTime = time.Now().Add(time.Hour * 24)
163
164 test.LteString = "1234"
165 test.LteNumber = 6
166 test.LteMultiple = make([]string, 3)
167 test.LteTime = time.Now().Add(time.Hour * 24)
168
169 test.LtFieldString = "12345"
170 test.LteFieldString = "12345"
171
172 test.LtCSFieldString = "1234"
173 test.LteCSFieldString = "1234"
174
175 test.AlphaString = "abc3"
176 test.AlphanumString = "abc3!"
177 test.NumericString = "12E.00"
178 test.NumberString = "12E"
179
180 test.Excludes = "this is some test text"
181 test.ExcludesAll = "This is Great!"
182 test.ExcludesRune = "Love it ☻"
183
184 test.ASCII = "カタカナ"
185 test.PrintableASCII = "カタカナ"
186
187 test.MultiByte = "1234feerf"
188
189 s := "toolong"
190 test.StrPtrMaxLen = &s
191 test.StrPtrLen = &s
192
193 test.UniqueSlice = []string{"1234", "1234"}
194 test.UniqueMap = map[string]string{"key1": "1234", "key2": "1234"}
195
196 err = validate.Struct(test)
197 NotEqual(t, err, nil)
198
199 errs, ok := err.(validator.ValidationErrors)
200 Equal(t, ok, true)
201
202 tests := []struct {
203 ns string
204 expected string
205 }{
206 {
207 ns: "Test.IsColor",
208 expected: "IsColor geçerli bir renk olmalıdır",
209 },
210 {
211 ns: "Test.MAC",
212 expected: "MAC geçerli bir MAC adresi içermelidir",
213 },
214 {
215 ns: "Test.IPAddr",
216 expected: "IPAddr çözülebilir bir IP adresi olmalıdır",
217 },
218 {
219 ns: "Test.IPAddrv4",
220 expected: "IPAddrv4 çözülebilir bir IPv4 adresi olmalıdır",
221 },
222 {
223 ns: "Test.IPAddrv6",
224 expected: "IPAddrv6 çözülebilir bir IPv6 adresi olmalıdır",
225 },
226 {
227 ns: "Test.UDPAddr",
228 expected: "UDPAddr geçerli bir UDP adresi olmalıdır",
229 },
230 {
231 ns: "Test.UDPAddrv4",
232 expected: "UDPAddrv4 geçerli bir IPv4 UDP adresi olmalıdır",
233 },
234 {
235 ns: "Test.UDPAddrv6",
236 expected: "UDPAddrv6 geçerli bir IPv6 UDP adresi olmalıdır",
237 },
238 {
239 ns: "Test.TCPAddr",
240 expected: "TCPAddr geçerli bir TCP adresi olmalıdır",
241 },
242 {
243 ns: "Test.TCPAddrv4",
244 expected: "TCPAddrv4 geçerli bir IPv4 TCP adresi olmalıdır",
245 },
246 {
247 ns: "Test.TCPAddrv6",
248 expected: "TCPAddrv6 geçerli bir IPv6 TCP adresi olmalıdır",
249 },
250 {
251 ns: "Test.CIDR",
252 expected: "CIDR geçerli bir CIDR gösterimi içermelidir",
253 },
254 {
255 ns: "Test.CIDRv4",
256 expected: "CIDRv4 bir IPv4 adresi için geçerli bir CIDR gösterimi içermelidir",
257 },
258 {
259 ns: "Test.CIDRv6",
260 expected: "CIDRv6 bir IPv6 adresi için geçerli bir CIDR gösterimi içermelidir",
261 },
262 {
263 ns: "Test.SSN",
264 expected: "SSN geçerli bir SSN numarası olmalıdır",
265 },
266 {
267 ns: "Test.IP",
268 expected: "IP geçerli bir IP adresi olmalıdır",
269 },
270 {
271 ns: "Test.IPv4",
272 expected: "IPv4 geçerli bir IPv4 adresi olmalıdır",
273 },
274 {
275 ns: "Test.IPv6",
276 expected: "IPv6 geçerli bir IPv6 adresi olmalıdır",
277 },
278 {
279 ns: "Test.DataURI",
280 expected: "DataURI geçerli bir Veri URI içermelidir",
281 },
282 {
283 ns: "Test.Latitude",
284 expected: "Latitude geçerli bir enlem koordinatı içermelidir",
285 },
286 {
287 ns: "Test.Longitude",
288 expected: "Longitude geçerli bir boylam koordinatı içermelidir",
289 },
290 {
291 ns: "Test.MultiByte",
292 expected: "MultiByte çok baytlı karakterler içermelidir",
293 },
294 {
295 ns: "Test.ASCII",
296 expected: "ASCII yalnızca ascii karakterler içermelidir",
297 },
298 {
299 ns: "Test.PrintableASCII",
300 expected: "PrintableASCII yalnızca yazdırılabilir ascii karakterleri içermelidir",
301 },
302 {
303 ns: "Test.UUID",
304 expected: "UUID geçerli bir UUID olmalıdır",
305 },
306 {
307 ns: "Test.UUID3",
308 expected: "UUID3 geçerli bir sürüm 3 UUID olmalıdır",
309 },
310 {
311 ns: "Test.UUID4",
312 expected: "UUID4 geçerli bir sürüm 4 UUID olmalıdır",
313 },
314 {
315 ns: "Test.UUID5",
316 expected: "UUID5 geçerli bir sürüm 5 UUID olmalıdır",
317 },
318 {
319 ns: "Test.ULID",
320 expected: "ULID geçerli bir ULID olmalıdır",
321 },
322 {
323 ns: "Test.ISBN",
324 expected: "ISBN geçerli bir ISBN numarası olmalıdır",
325 },
326 {
327 ns: "Test.ISBN10",
328 expected: "ISBN10 geçerli bir ISBN-10 numarası olmalıdır",
329 },
330 {
331 ns: "Test.ISBN13",
332 expected: "ISBN13 geçerli bir ISBN-13 numarası olmalıdır",
333 },
334 {
335 ns: "Test.ISSN",
336 expected: "ISSN geçerli bir ISSN numarası olmalıdır",
337 },
338 {
339 ns: "Test.Excludes",
340 expected: "Excludes, 'text' metnini içeremez",
341 },
342 {
343 ns: "Test.ExcludesAll",
344 expected: "ExcludesAll, '!@#$' karakterlerinden hiçbirini içeremez",
345 },
346 {
347 ns: "Test.ExcludesRune",
348 expected: "ExcludesRune, '☻' ifadesini içeremez",
349 },
350 {
351 ns: "Test.ContainsAny",
352 expected: "ContainsAny, '!@#$' karakterlerinden en az birini içermelidir",
353 },
354 {
355 ns: "Test.Contains",
356 expected: "Contains, 'purpose' metnini içermelidir",
357 },
358 {
359 ns: "Test.Base64",
360 expected: "Base64 geçerli bir Base64 karakter dizesi olmalıdır",
361 },
362 {
363 ns: "Test.Email",
364 expected: "Email geçerli bir e-posta adresi olmalıdır",
365 },
366 {
367 ns: "Test.URL",
368 expected: "URL geçerli bir URL olmalıdır",
369 },
370 {
371 ns: "Test.URI",
372 expected: "URI geçerli bir URI olmalıdır",
373 },
374 {
375 ns: "Test.RGBColorString",
376 expected: "RGBColorString geçerli bir RGB rengi olmalıdır",
377 },
378 {
379 ns: "Test.RGBAColorString",
380 expected: "RGBAColorString geçerli bir RGBA rengi olmalıdır",
381 },
382 {
383 ns: "Test.HSLColorString",
384 expected: "HSLColorString geçerli bir HSL rengi olmalıdır",
385 },
386 {
387 ns: "Test.HSLAColorString",
388 expected: "HSLAColorString geçerli bir HSLA rengi olmalıdır",
389 },
390 {
391 ns: "Test.HexadecimalString",
392 expected: "HexadecimalString geçerli bir onaltılık olmalıdır",
393 },
394 {
395 ns: "Test.HexColorString",
396 expected: "HexColorString geçerli bir HEX rengi olmalıdır",
397 },
398 {
399 ns: "Test.NumberString",
400 expected: "NumberString geçerli bir sayı olmalıdır",
401 },
402 {
403 ns: "Test.NumericString",
404 expected: "NumericString geçerli bir sayısal değer olmalıdır",
405 },
406 {
407 ns: "Test.AlphanumString",
408 expected: "AlphanumString yalnızca alfanümerik karakterler içerebilir",
409 },
410 {
411 ns: "Test.AlphaString",
412 expected: "AlphaString yalnızca alfabetik karakterler içerebilir",
413 },
414 {
415 ns: "Test.LtFieldString",
416 expected: "LtFieldString, MaxString değerinden küçük olmalıdır",
417 },
418 {
419 ns: "Test.LteFieldString",
420 expected: "LteFieldString, MaxString değerinden küçük veya ona eşit olmalıdır",
421 },
422 {
423 ns: "Test.GtFieldString",
424 expected: "GtFieldString, MaxString değerinden büyük olmalıdır",
425 },
426 {
427 ns: "Test.GteFieldString",
428 expected: "GteFieldString, MaxString değerinden büyük veya ona eşit olmalıdır",
429 },
430 {
431 ns: "Test.NeFieldString",
432 expected: "NeFieldString, EqFieldString değerine eşit olmamalıdır",
433 },
434 {
435 ns: "Test.LtCSFieldString",
436 expected: "LtCSFieldString, Inner.LtCSFieldString değerinden küçük olmalıdır",
437 },
438 {
439 ns: "Test.LteCSFieldString",
440 expected: "LteCSFieldString, Inner.LteCSFieldString değerinden küçük veya ona eşit olmalıdır",
441 },
442 {
443 ns: "Test.GtCSFieldString",
444 expected: "GtCSFieldString, Inner.GtCSFieldString değerinden büyük olmalıdır",
445 },
446 {
447 ns: "Test.GteCSFieldString",
448 expected: "GteCSFieldString, Inner.GteCSFieldString değerinden küçük veya ona eşit olmalıdır",
449 },
450 {
451 ns: "Test.NeCSFieldString",
452 expected: "NeCSFieldString, Inner.NeCSFieldString değerine eşit olmamalıdır",
453 },
454 {
455 ns: "Test.EqCSFieldString",
456 expected: "EqCSFieldString, Inner.EqCSFieldString değerine eşit olmalıdır",
457 },
458 {
459 ns: "Test.EqFieldString",
460 expected: "EqFieldString, MaxString değerine eşit olmalıdır",
461 },
462 {
463 ns: "Test.GteString",
464 expected: "GteString en az 3 karakter uzunluğunda olmalıdır",
465 },
466 {
467 ns: "Test.GteNumber",
468 expected: "GteNumber, 5,56 veya daha büyük olmalıdır",
469 },
470 {
471 ns: "Test.GteMultiple",
472 expected: "GteMultiple en az 2 öğe içermelidir",
473 },
474 {
475 ns: "Test.GteTime",
476 expected: "GteTime geçerli Tarih ve Saatten büyük veya ona eşit olmalıdır",
477 },
478 {
479 ns: "Test.GtString",
480 expected: "GtString, 3 karakter uzunluğundan fazla olmalıdır",
481 },
482 {
483 ns: "Test.GtNumber",
484 expected: "GtNumber, 5,56 değerinden büyük olmalıdır",
485 },
486 {
487 ns: "Test.GtMultiple",
488 expected: "GtMultiple, 2 öğeden daha fazla içermelidir",
489 },
490 {
491 ns: "Test.GtTime",
492 expected: "GtTime geçerli Tarih ve Saatten büyük olmalıdır",
493 },
494 {
495 ns: "Test.LteString",
496 expected: "LteString en fazla 3 karakter uzunluğunda olmalıdır",
497 },
498 {
499 ns: "Test.LteNumber",
500 expected: "LteNumber, 5,56 veya daha az olmalıdır",
501 },
502 {
503 ns: "Test.LteMultiple",
504 expected: "LteMultiple, maksimum 2 öğe içermelidir",
505 },
506 {
507 ns: "Test.LteTime",
508 expected: "LteTime geçerli Tarih ve Saate eşit veya daha küçük olmalıdır",
509 },
510 {
511 ns: "Test.LtString",
512 expected: "LtString, 3 karakter uzunluğundan daha az olmalıdır",
513 },
514 {
515 ns: "Test.LtNumber",
516 expected: "LtNumber, 5,56 değerinden küçük olmalıdır",
517 },
518 {
519 ns: "Test.LtMultiple",
520 expected: "LtMultiple, 2 öğeden daha az içermelidir",
521 },
522 {
523 ns: "Test.LtTime",
524 expected: "LtTime geçerli Tarih ve Saatten daha az olmalıdır",
525 },
526 {
527 ns: "Test.NeString",
528 expected: "NeString, değerine eşit olmamalıdır",
529 },
530 {
531 ns: "Test.NeNumber",
532 expected: "NeNumber, 0.00 değerine eşit olmamalıdır",
533 },
534 {
535 ns: "Test.NeMultiple",
536 expected: "NeMultiple, 0 değerine eşit olmamalıdır",
537 },
538 {
539 ns: "Test.EqString",
540 expected: "EqString, 3 değerine eşit değil",
541 },
542 {
543 ns: "Test.EqNumber",
544 expected: "EqNumber, 2.33 değerine eşit değil",
545 },
546 {
547 ns: "Test.EqMultiple",
548 expected: "EqMultiple, 7 değerine eşit değil",
549 },
550 {
551 ns: "Test.MaxString",
552 expected: "MaxString uzunluğu en fazla 3 karakter olmalıdır",
553 },
554 {
555 ns: "Test.MaxNumber",
556 expected: "MaxNumber, 1.113,00 veya daha az olmalıdır",
557 },
558 {
559 ns: "Test.MaxMultiple",
560 expected: "MaxMultiple maksimum 7 öğe içermelidir",
561 },
562 {
563 ns: "Test.MinString",
564 expected: "MinString en az 1 karakter uzunluğunda olmalıdır",
565 },
566 {
567 ns: "Test.MinNumber",
568 expected: "MinNumber, 1.113,00 veya daha büyük olmalıdır",
569 },
570 {
571 ns: "Test.MinMultiple",
572 expected: "MinMultiple en az 7 öğe içermelidir",
573 },
574 {
575 ns: "Test.LenString",
576 expected: "LenString uzunluğu 1 karakter olmalıdır",
577 },
578 {
579 ns: "Test.LenNumber",
580 expected: "LenNumber, 1.113,00 değerine eşit olmalıdır",
581 },
582 {
583 ns: "Test.LenMultiple",
584 expected: "LenMultiple, 7 öğe içermelidir",
585 },
586 {
587 ns: "Test.RequiredString",
588 expected: "RequiredString zorunlu bir alandır",
589 },
590 {
591 ns: "Test.RequiredNumber",
592 expected: "RequiredNumber zorunlu bir alandır",
593 },
594 {
595 ns: "Test.RequiredMultiple",
596 expected: "RequiredMultiple zorunlu bir alandır",
597 },
598 {
599 ns: "Test.StrPtrMinLen",
600 expected: "StrPtrMinLen en az 10 karakter uzunluğunda olmalıdır",
601 },
602 {
603 ns: "Test.StrPtrMaxLen",
604 expected: "StrPtrMaxLen uzunluğu en fazla 1 karakter olmalıdır",
605 },
606 {
607 ns: "Test.StrPtrLen",
608 expected: "StrPtrLen uzunluğu 2 karakter olmalıdır",
609 },
610 {
611 ns: "Test.StrPtrLt",
612 expected: "StrPtrLt, 1 karakter uzunluğundan daha az olmalıdır",
613 },
614 {
615 ns: "Test.StrPtrLte",
616 expected: "StrPtrLte en fazla 1 karakter uzunluğunda olmalıdır",
617 },
618 {
619 ns: "Test.StrPtrGt",
620 expected: "StrPtrGt, 10 karakter uzunluğundan fazla olmalıdır",
621 },
622 {
623 ns: "Test.StrPtrGte",
624 expected: "StrPtrGte en az 10 karakter uzunluğunda olmalıdır",
625 },
626 {
627 ns: "Test.OneOfString",
628 expected: "OneOfString, [red green]'dan biri olmalıdır",
629 },
630 {
631 ns: "Test.OneOfInt",
632 expected: "OneOfInt, [5 63]'dan biri olmalıdır",
633 },
634 {
635 ns: "Test.UniqueSlice",
636 expected: "UniqueSlice benzersiz değerler içermelidir",
637 },
638 {
639 ns: "Test.UniqueArray",
640 expected: "UniqueArray benzersiz değerler içermelidir",
641 },
642 {
643 ns: "Test.UniqueMap",
644 expected: "UniqueMap benzersiz değerler içermelidir",
645 },
646 {
647 ns: "Test.Image",
648 expected: "Image geçerli bir resim olmalıdır",
649 },
650 }
651
652 for _, tt := range tests {
653
654 var fe validator.FieldError
655
656 for _, e := range errs {
657 if tt.ns == e.Namespace() {
658 fe = e
659 break
660 }
661 }
662
663 NotEqual(t, fe, nil)
664 Equal(t, tt.expected, fe.Translate(trans))
665 }
666
667 }
668
View as plain text