From ed7f3c55f7647b19ce2358ebce861a0cee8944d5 Mon Sep 17 00:00:00 2001 From: Max Wittig Date: Mon, 29 Jul 2019 14:20:11 +0200 Subject: [PATCH 01/66] docs(tutorial): add missing permission import in viewsets --- docs/tutorial/6-viewsets-and-routers.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/tutorial/6-viewsets-and-routers.md b/docs/tutorial/6-viewsets-and-routers.md index 11e24448f..3719bbf18 100644 --- a/docs/tutorial/6-viewsets-and-routers.md +++ b/docs/tutorial/6-viewsets-and-routers.md @@ -27,6 +27,7 @@ Next we're going to replace the `SnippetList`, `SnippetDetail` and `SnippetHighl from rest_framework.decorators import action from rest_framework.response import Response + from rest_framework import permissions class SnippetViewSet(viewsets.ModelViewSet): """ From 505a69cf432a1b9684462848059f731ea381ea6c Mon Sep 17 00:00:00 2001 From: Nikhil Kumar Date: Mon, 1 Jun 2020 13:49:43 -0400 Subject: [PATCH 02/66] Fixed heading markdown --- docs/api-guide/serializers.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/api-guide/serializers.md b/docs/api-guide/serializers.md index 4f566ff59..6323ceacd 100644 --- a/docs/api-guide/serializers.md +++ b/docs/api-guide/serializers.md @@ -161,7 +161,7 @@ Each key in the dictionary will be the field name, and the values will be lists When deserializing a list of items, errors will be returned as a list of dictionaries representing each of the deserialized items. -#### Raising an exception on invalid data +#### Raising an exception on invalid data The `.is_valid()` method takes an optional `raise_exception` flag that will cause it to raise a `serializers.ValidationError` exception if there are validation errors. From 9dc7021770ecb5689302cb97b282dd85fb7ed108 Mon Sep 17 00:00:00 2001 From: Nikhil Kumar Date: Mon, 1 Jun 2020 14:03:10 -0400 Subject: [PATCH 03/66] Fixed h4 rendering --- docs/api-guide/fields.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/api-guide/fields.md b/docs/api-guide/fields.md index b2bdd50c8..e309c9d91 100644 --- a/docs/api-guide/fields.md +++ b/docs/api-guide/fields.md @@ -371,7 +371,7 @@ Corresponds to `django.db.models.fields.TimeField` * `format` - A string representing the output format. If not specified, this defaults to the same value as the `TIME_FORMAT` settings key, which will be `'iso-8601'` unless set. Setting to a format string indicates that `to_representation` return values should be coerced to string output. Format strings are described below. Setting this value to `None` indicates that Python `time` objects should be returned by `to_representation`. In this case the time encoding will be determined by the renderer. * `input_formats` - A list of strings representing the input formats which may be used to parse the date. If not specified, the `TIME_INPUT_FORMATS` setting will be used, which defaults to `['iso-8601']`. -#### `TimeField` format strings +#### `TimeField` format strings Format strings may either be [Python strftime formats][strftime] which explicitly specify the format, or the special string `'iso-8601'`, which indicates that [ISO 8601][iso8601] style times should be used. (eg `'12:34:56.000000'`) From c252c3dfa550e57a7a9ac9bde518d10bb639c315 Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Wed, 29 Jul 2020 14:55:10 +0100 Subject: [PATCH 04/66] Update sponsors (#7434) * Adjusted token admin to map to user ID. Closes #6131. * Adds a proxy model for Token that uses the user.pk, rather than it's own. * Adjusts Admin to map back from User ID to token instance. * Update sponsors Co-authored-by: Carlton Gibson --- README.md | 16 ++++------------ docs/img/premium/bitio-readme.png | Bin 0 -> 27386 bytes docs/index.md | 6 ++---- 3 files changed, 6 insertions(+), 16 deletions(-) create mode 100644 docs/img/premium/bitio-readme.png diff --git a/README.md b/README.md index 95020bb1d..4dfff3119 100644 --- a/README.md +++ b/README.md @@ -22,13 +22,11 @@ The initial aim is to provide a single full-time position on REST framework. [![][sentry-img]][sentry-url] [![][stream-img]][stream-url] [![][rollbar-img]][rollbar-url] -[![][cadre-img]][cadre-url] -[![][kloudless-img]][kloudless-url] [![][esg-img]][esg-url] -[![][lightson-img]][lightson-url] [![][retool-img]][retool-url] +[![][bitio-img]][bitio-url] -Many thanks to all our [wonderful sponsors][sponsors], and in particular to our premium backers, [Sentry][sentry-url], [Stream][stream-url], [Rollbar][rollbar-url], [Cadre][cadre-url], [Kloudless][kloudless-url], [ESG][esg-url], [Lights On Software][lightson-url], and [Retool][retool-url]. +Many thanks to all our [wonderful sponsors][sponsors], and in particular to our premium backers, [Sentry][sentry-url], [Stream][stream-url], [Rollbar][rollbar-url], [ESG][esg-url], [Retool][retool-url], and [bit.io][bitio-url]. --- @@ -191,25 +189,19 @@ Please see the [security policy][security-policy]. [funding]: https://fund.django-rest-framework.org/topics/funding/ [sponsors]: https://fund.django-rest-framework.org/topics/funding/#our-sponsors -[rover-img]: https://raw.githubusercontent.com/encode/django-rest-framework/master/docs/img/premium/rover-readme.png [sentry-img]: https://raw.githubusercontent.com/encode/django-rest-framework/master/docs/img/premium/sentry-readme.png [stream-img]: https://raw.githubusercontent.com/encode/django-rest-framework/master/docs/img/premium/stream-readme.png [rollbar-img]: https://raw.githubusercontent.com/encode/django-rest-framework/master/docs/img/premium/rollbar-readme.png -[cadre-img]: https://raw.githubusercontent.com/encode/django-rest-framework/master/docs/img/premium/cadre-readme.png -[load-impact-img]: https://raw.githubusercontent.com/encode/django-rest-framework/master/docs/img/premium/load-impact-readme.png -[kloudless-img]: https://raw.githubusercontent.com/encode/django-rest-framework/master/docs/img/premium/kloudless-readme.png [esg-img]: https://raw.githubusercontent.com/encode/django-rest-framework/master/docs/img/premium/esg-readme.png -[lightson-img]: https://raw.githubusercontent.com/encode/django-rest-framework/master/docs/img/premium/lightson-readme.png [retool-img]: https://raw.githubusercontent.com/encode/django-rest-framework/master/docs/img/premium/retool-readme.png +[bitio-img]: https://raw.githubusercontent.com/encode/django-rest-framework/master/docs/img/premium/bitio-readme.png [sentry-url]: https://getsentry.com/welcome/ [stream-url]: https://getstream.io/try-the-api/?utm_source=drf&utm_medium=banner&utm_campaign=drf [rollbar-url]: https://rollbar.com/?utm_source=django&utm_medium=sponsorship&utm_campaign=freetrial -[cadre-url]: https://cadre.com/ -[kloudless-url]: https://hubs.ly/H0f30Lf0 [esg-url]: https://software.esg-usa.com/ -[lightson-url]: https://lightsonsoftware.com [retool-url]: https://retool.com/?utm_source=djangorest&utm_medium=sponsorship +[bitio-url]: https://bit.io/jobs?utm_source=DRF&utm_medium=sponsor&utm_campaign=DRF_sponsorship [oauth1-section]: https://www.django-rest-framework.org/api-guide/authentication/#django-rest-framework-oauth [oauth2-section]: https://www.django-rest-framework.org/api-guide/authentication/#django-oauth-toolkit diff --git a/docs/img/premium/bitio-readme.png b/docs/img/premium/bitio-readme.png new file mode 100644 index 0000000000000000000000000000000000000000..42959bb60c23dcca3f21f43ed55438ef75e48180 GIT binary patch literal 27386 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
  • ESG
  • Rollbar
  • -
  • Cadre
  • -
  • Kloudless
  • -
  • Lights On Software
  • Retool
  • +
  • bit.io
  • -*Many thanks to all our [wonderful sponsors][sponsors], and in particular to our premium backers, [Sentry](https://getsentry.com/welcome/), [Stream](https://getstream.io/?utm_source=drf&utm_medium=banner&utm_campaign=drf), [ESG](https://software.esg-usa.com/), [Rollbar](https://rollbar.com/?utm_source=django&utm_medium=sponsorship&utm_campaign=freetrial), [Cadre](https://cadre.com), [Kloudless](https://hubs.ly/H0f30Lf0), [Lights On Software](https://lightsonsoftware.com), and [Retool](https://retool.com/?utm_source=djangorest&utm_medium=sponsorship).* +*Many thanks to all our [wonderful sponsors][sponsors], and in particular to our premium backers, [Sentry](https://getsentry.com/welcome/), [Stream](https://getstream.io/?utm_source=drf&utm_medium=banner&utm_campaign=drf), [ESG](https://software.esg-usa.com/), [Rollbar](https://rollbar.com/?utm_source=django&utm_medium=sponsorship&utm_campaign=freetrial), [Cadre](https://cadre.com), [Kloudless](https://hubs.ly/H0f30Lf0), [Lights On Software](https://lightsonsoftware.com), [Retool](https://retool.com/?utm_source=djangorest&utm_medium=sponsorship), and [bit.io](https://bit.io/jobs?utm_source=DRF&utm_medium=sponsor&utm_campaign=DRF_sponsorship).* --- From 30ca04df835e2d41f32a0ecad3a23bcd06533658 Mon Sep 17 00:00:00 2001 From: Mark Story Date: Wed, 29 Jul 2020 09:58:53 -0400 Subject: [PATCH 05/66] Fix broken links in documenting API section The changed links were not working on the documentation site. I'm not 100% sure that these changes are correct but they generate working links in the GitHub previews. --- docs/topics/documenting-your-api.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/topics/documenting-your-api.md b/docs/topics/documenting-your-api.md index 5c5872650..e86a6cc77 100644 --- a/docs/topics/documenting-your-api.md +++ b/docs/topics/documenting-your-api.md @@ -209,8 +209,8 @@ To implement a hypermedia API you'll need to decide on an appropriate media type [cite]: https://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven [hypermedia-docs]: rest-hypermedia-hateoas.md -[metadata-docs]: ../api-guide/metadata/ -[schemas-examples]: ../api-guide/schemas/#examples +[metadata-docs]: ../api-guide/metadata.md +[schemas-examples]: ../api-guide/schemas.md#examples [image-drf-yasg]: ../img/drf-yasg.png [image-self-describing-api]: ../img/self-describing.png From 559088463b8625880e6a03dde804cb5a61da3088 Mon Sep 17 00:00:00 2001 From: Paul Watts Date: Wed, 29 Jul 2020 12:21:13 -0700 Subject: [PATCH 06/66] Update an example to not use oppressive language (#7439) * Update an example to use less oppressive language For reference: https://tools.ietf.org/id/draft-knodel-terminology-00.html * Code review update Blocklisted -> blocked. --- docs/api-guide/permissions.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/api-guide/permissions.md b/docs/api-guide/permissions.md index d035243d5..f317c12e6 100644 --- a/docs/api-guide/permissions.md +++ b/docs/api-guide/permissions.md @@ -243,19 +243,19 @@ Custom permissions will raise a `PermissionDenied` exception if the test fails. ## Examples -The following is an example of a permission class that checks the incoming request's IP address against a blacklist, and denies the request if the IP has been blacklisted. +The following is an example of a permission class that checks the incoming request's IP address against a blocklist, and denies the request if the IP has been blocked. from rest_framework import permissions - class BlacklistPermission(permissions.BasePermission): + class BlocklistPermission(permissions.BasePermission): """ - Global permission check for blacklisted IPs. + Global permission check for blocked IPs. """ def has_permission(self, request, view): ip_addr = request.META['REMOTE_ADDR'] - blacklisted = Blacklist.objects.filter(ip_addr=ip_addr).exists() - return not blacklisted + blocked = Blocklist.objects.filter(ip_addr=ip_addr).exists() + return not blocked As well as global permissions, that are run against all incoming requests, you can also create object-level permissions, that are only run against operations that affect a particular object instance. For example: From 7d5155e0ebd770e95c20a103fb0874568b9d646a Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Wed, 5 Aug 2020 14:13:01 +0100 Subject: [PATCH 07/66] Resize sponsor images for new GitHub layout (#7465) --- docs/img/premium/bitio-readme.png | Bin 27386 -> 18526 bytes docs/img/premium/cadre-readme.png | Bin 6989 -> 6933 bytes docs/img/premium/esg-readme.png | Bin 13590 -> 13473 bytes docs/img/premium/kloudless-readme.png | Bin 14582 -> 14501 bytes docs/img/premium/lightson-readme.png | Bin 16420 -> 16358 bytes docs/img/premium/release-history.png | Bin 17960 -> 17889 bytes docs/img/premium/retool-readme.png | Bin 9053 -> 8962 bytes docs/img/premium/rollbar-readme.png | Bin 17335 -> 17227 bytes docs/img/premium/sentry-readme.png | Bin 24549 -> 24504 bytes docs/img/premium/stream-readme.png | Bin 19281 -> 19213 bytes docs/index.md | 2 +- 11 files changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/img/premium/bitio-readme.png b/docs/img/premium/bitio-readme.png index 42959bb60c23dcca3f21f43ed55438ef75e48180..c47118cc6956b8a27a1be8edf3b84f8fa119e54c 100644 GIT binary patch delta 17602 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 delta 26532 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 diff --git a/docs/img/premium/esg-readme.png b/docs/img/premium/esg-readme.png index 50aec5f1f77da7e7f4bd046adbc812f6d589ab76..8f84e5669772aa94441876f3a9a46a45eba414a7 100644 GIT binary patch delta 12513 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%0AN0aY;f^nS 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 UyH455TMUq*teQ;KJLBO00X8LX=l}o! delta 13198 zcmc(GWn2_r-0v<6OQ&>)NOw0#Nh{qcCEd*~-5?+#-3XF`bS$|j($cjwNO!~Ke?QO5 z`{urS-po1knK?7Rj_;W%b-Qw-i+QiEh>byx0RRB7mEOr|0sug&m-!tU_~n>moO+o| z#|(T^uly4UD4YU9;PZ%x@^FiC3(@lM|2GljPCW&QfP^^(Q`wLeA;%r-z`At?)0*ys|ZDbBnCm?;Ck9 z-SF!4H2Spy6NJO#R*FS|>6uam2gMQ*z2m&1qS0SQ8tIohTC_nJwNXi_;DQzGB5UUB!)@d(e_`wbwHhpAG(e|w zD(#91R|lH06Y~wV$J9pcuXa|bYLaHu{$g(!k2Gm;LqfM#yx-2U`wEy&sLArJ$J`U= z8JHYPFu@~irQ_AtL^3EBdtk|2OWLIaueA1yFKw-=wrQ97CxT*|{RLJ^>|ME`9g|r7 zPl%T#0~Rk!+~ z?i7LOkWP@K19?Ovwv5~z7(g?bFjYRvwqJ>*SD!kRiudKi8r0buXioA{H`aNes8P|} z?-#IC{nyKC(rYxzdkUjA^gLBl9hxrh^~xST=B^48a6V&2PyCXCr^t$tMT0FLljXP; ze*~46Sb>K>#m?;V+)J(|zc!a4#Vgjr%VLD2UU8e76Ox{8%$I~zc&L7wPvVq3U)Y-O zPp!MPl^*mw8#|@W=!-TwqHzA#6X3WU?5yh!3@zeDY_JlS8mHK!^A$j{L&z6D1)tBx$_p@%iZ0`XKQ|sbdH6S#&t15C zE_NZS5F;w)WXmOaradQR%RixfAw$`(=I5}GYC4Ihfn@R2Av0ruEIni2-XG=K)00;Z zFmtfWHW1Yn;g6spGetR`-#$7ANAsyU5jZ&bhB}ceZeUyX3*A*GQO+$Yp@~3(Ld0`r zFVjuc*>xRIs@neo<%}@?V>RM?U3(gxqvOw0$-4GAr6eXiavI*oa`@5%3~()yf8SQh zWJ3;|s^f^es){nPXe8%e6qFp}w{|vXS5(nYdfwl3kUIZbj?9MiA9d1q&iU3$Rq(cQ zDww)X;o1aJh+C8WD3u=s9@ghA`gIMlyW=8GnqQLXxP~H)jf1TlncZfA?NfyEcIFf5 zm*@=>5r5n4ocdn!tW(U3&HAhcKl8FQ(FT3oUCi{L~!^1;Sco?EkjWr(NZr7@3={A zegOdsShHl>tV~~6&o;hq#!hSPpDxI%YFgG!@4+LsnpEyE<&vd?|Mv+$fv%63;1r>X zGgW_)dS9odnPYEw#^dD27Z0>I%}C*#cKG=d-)Q#qD1KqzeC^P;VNEGK)I;&Xa#U|h zXDD`&gsf27_Bs=y=1$aVgPVWX|7wI!-&XP~wEVpE_tZoxpYF^??XP$p(JYni9MasB zR>JlVGFhwAHRp+Yz7C)H#UpwCVxi_sA_h@$&+>Lo`^%lFp>#PeOmO!lVBIK2LW8^3 zt@7->)E%$MYU{5bSii{F_~t~@!<0CKrXFMzU5vy}F4WE;sFa<1X+c-ZSIRogj2iJ+ ztqq?a*STqjX=D5Do%7j__Blw8M)Z?P*3gkr$$^IkqmY1ADp5-vO*^!%WE3CW4(Sd zxxX9bv@WKhE4MaGxe1uy%K^MAzYnD8+5`}ce}>!z4*K?|tT(mP268<KtnzVNx648FF-a@BAVWvnNhMkG&nPj-nh;*%Bz#V%KuhV_xtzg zjOqq$HP6|@I$urh{q2rnOVs>1I@TRzWy)%3FeA5aX<`4~bLP&`4tiQAG+G;oZ^f^b zMgM&1xjXIZCTa@wClNfW5goocM_B3dAASKxCN*(VyB1mRWk^HVC(+#hL>KG@rfkp`3RSdkK9Dqb5;_BHJ^omrYf>sQNYIaBuMYA0Lse#G@@-CJ7+*70!Jd zYBu{n@@CUB_N4msRY7fXNfvT8)L8F0;(rx#6K(`x%?Fals|WTy{LX0ey%5@b879NQvaoMUOVbGL#Cs|CV2HIYEQ7jknZMRdH_9)DND z1lgk|MCd60I?H@$BW-)48+6LUlKYpxfBG}a(C5QJ^B`Erah0FZZh;SCZk~u+v`=(N zO5x-C@RQgv$27|RQOlpY*{170=fHOCh0X(!R8mf`!tw>;dAIB;XmJLU6FH?u^8k!uu~JV_lAw&>-j_#Cg(y^(LTag{6>M++{)YdIJPE{tOw>=xtntq zX?wn(C)=!QYZwTu(}UC|6t2J>7q(W#4^a%w<9JRe+MG;c-AWnkRVT?P%68D&?bEGm z>zzC_$E$?GHqdB!*e#|DIZ`-AxV5W4}o2sWitEAqI;Iy^WmS|w^Jv~9reJlmFQ!@5=M?#cjz;+M*4AMBn+{k;wYKNXPb$de%yAp`vU|-{Ntw%$fdGYr zjBS0g2UJ*Z($e>6FX&GtS*vmbLn(toIfKce_>9*8@buV z8JB>W=YHjW2$??arIxR-YvKdk`klWRrB94p^^`x(;@O`v2-ZWTjlPRa?fqru!*=E$ z%mynpw|mHsE_lr+lh8GxU`1Rehgwm8%%KmD#YUG({;(Sd?dDGxqiGHb%V#iF{ZI`H z%=Cq})<1#-!(nZ$x1B0uPC;MCe)(?eUY?ldHcol-f24-Ht@||-vlH1=rwrnp z8xa*kYnTWO47ps2Vy(#KY7Q~J-i~kW%6s=W$cR{BLepKR(|H+7sr!_LG2`VMqjbpLN#sobW~;8&`|%;$)r` zhe-f7pI%RsKi#jMP4K-*mBO<^(we~c&RY*`J%i2_Y!zX!InmtvxeB_IfGgP#+?}j=faB;NI};88acdAV4cac*a2Un%ty=i*u3{7{rh|_tjMPJb~$L_myr8P z%;u!3r%Ruz(S=TK@txPtbo4sZb?gsvEa{SrV%l!QIGLnTzj`O;SgeD|iVHv7b96#*$^{s-t#ntg@F1Da<9)H=#tX-H5z9);r?2hUmR0>)>~c-NG+GyK?4;sML>T zXBcl3W~xJjcnu~=p!;DOk-h%{_uFpU^tOup@rqRHZ>!0j^XMDPeeblhySpkN*Nw>x z8FEtH_x-LrVm??gaO_uBzp_CgLs!3tO&9GC)0(rElgyf^L@il9ALNNxd|Dx&oL(W` zOC29s@m?Yi7bunWT>RF*q%Y-3a?j7dCw9<6=fWx$UOKOQ&5AAJUYU!ftw&KTs<%=? zu}$<#=rfONZw9b+<#!@ex>33pi; z%}X1cNR$3rwVjmIYgkrlMy;4UPYn;E(eUd>_3AF&{YsKeFeFT9O-H2-;#s>(_#{}? zZd05;ZE)#C=|k!5CJc>_IMUxLNZOYOoNE8>EOyscvlWs*BPgH|)-(6IU3Qn=USFwZ zTAqL+{&VmNRE7A6cY8zK=<2)=>REf%_r2twC8F41XN=l!N;b}mt&K+V?@zm5(5O(f3xUg@^M=%C%oEo2<2DE z@QPD?Vi`e1pndfmH$a<2h86c!w#C!|Wds|6oKyu1zS#<%i>Tf1>hWsVRvdK_0%VxG z?so6y%d_}OP*SlFvN*-fVQQe~@?5xx7+DRAnp%oF`}pJEOz~i5nF#Lbz5Lo`ODTJF zpyiAi8>Dgfb+hReX5ULu(0jt(+Q?n!eRlE4lPONcP-}~d?Qx72kDbBwUU)n7F$;=M zGaqo&x$iK0G~J-`+_niZ{V6vq$ayHhPT6?er`R1l?zLM68Pi)0-s~#F7sfm#FLHal z4zuMjJ`Ohty6^8hA&V>TjEpiP>OYGfL-O`@TxEM|>O<#R?B%9aDCZXUxiOy6$djBC zOn4qxn!crD80WAYFiJ>}RVOPO&#t-|eq^1={U&w$ao=&gjfIbi+^{G>R%>~w2b0F> zZoS&sBr1LxV%U7JtrUO)s@H4(f`U`97J7YV&z~n8FkYp%;x=jQwm-4aS9V2cGk`ed zrx2PG^qf6Vh?h>P=x|))+)zdTt^YMa@8KiKvL=NAj&mCn`jEs?*wkP>yho zn6~=&r1lp0;49mw*Oc6={rV$6zXjGRJUprvm9lLyGKBv`y(#X9cq9*anih$2%jXLP zo|8l3hjzuxzlCP`9ihNoHuTVqB98gRQ1P+IQL&0yNhkA-+=f4xd0p^}`!3#ks!rEp zyE%cvjYx|=sFThUC;kUqZM4a5Hg5HknapV1t}%v~BUZTugDn%;ao34g2VAzVA(0w4fo7=^lzaYzgYu=c$ADi_=T23gW~BEuh;WsW)%H2G zVutmGWlLo1D!#UU?7MJh4{*-+TP6_>QC-fO`GtnHQ8Ok zVIo}_2w4k(zxr{}UDamY>$)R1c`|orzdKlsX&z4IZTq)UY>?@>e+->r@!`Lw?3wa- zLPVU$tFrYdTxAsN$cdvj{;wAm(WZ0bUhh_1qr=2O*rwCT{Wrkv zZvzgJDaH~##j3uux6{SH2z_Q}2qZ*i-Q=v`rM-^_aZf)TRJMByiW6huwps4uf3LNV z5IZI?AoR0-fi+C`mK$EJa^FV5X>?|vt>cRyL<%UPT<^rTc?iFfBI1d*>z{bdSGdeP zdV2vu-AhCFuR6PELXI`6F8(7gNf+12nt4 z5%nceUy+|pkKLwRaFHaUWs~eCL9YQGy|BKC3CXn#fEGG7t|?fYHoY!iPVb**6~9LC znI%F8^Jd`f+Y%U7bh(x}q}ONXK=?7iEn7@&Nu;YiEFsmeB3a9xCLG&8i+WnnS`zgr)8U#z10;fSZgD9g*c*?ivBpSGiOYIXhV_YpES)i9~0`%*EZRW$FUE!VQx zL9mEZ5Bpp~8#U!BG=;!Fq;b+o{I6z$ zTt>(!F7h%q{wMSuU$r8v1R9$Avw|t>t1`^lPb$W2ilsL!iuO|z@GbQ!Sg2R=8V|%M zEoU^IKDg)?()9D-jW`pEXQ1_p6Eq((+>N#0!#j6YAio84mP5WnGoYJB@H<8>h4*>Z zU&X1yHI%IgBbm&D8+=R#$P(3?BCMssDVW38&e=xO!`HBJJ0XH!&Y$r~r|kxCqZHkR z+k}cOJXuqhX)nTrhvkx(b*|&S|Kdsa(5lTyv410?l$q?&j`|z*?;wLdPI6|Pr_1j3 zCrK8q_gC(BRnr3uT=H4} zjyzr=WwaA>Aw5yKV5|l_cN~pbB%}qrz70SNfYge01kij9{N0@XsLWeZbGRkc5kAcE z5?$PfZKG73U{b-IC`8Y;n2lLVQ*DCCeGDg)t81A~>a3JKJc%LyM6c6RU|Uh%{y)k0Ft^;DY=_MT zDzNA%^B9l!bci=h-~h84SuUB5ak^2wpkBO-H4!{}zXc5U!dKrpNB8Ruh9)acMWlM% zTD=5>r8QK?2L|{;CYNTEm`%Z`XPVV%+(mp8}SCRIOsDJB;- z(lWU6+NaP(n92WxxD`4-=BR*2#b4zc3}*lG#V*&mQJQ=wUcb^f;$WEeL(B7}RwsNU zcn5SJ0JP~Iw@md0h&`l0*0}DT?Vd86I}b=QUZ@(_GIJlJ1L=Rfvp_a8DR1cWaYt;i z$40PG4_OeWXyd%FmkJ_ajF~j2wIF-$S(qe$a^miKGZ)>nVG!t6$FIy(>iTle1~=W} za$bmx9{c8GB*goW@bAfvzmJaT)$i=~pwcTCM)bryi0hMLHH2VgqW*L&u%SsneyrhN zLcX^)b;(LElzTiFd~?dlN#nB-amB>OLKp@-^^EOl+hoD=G=Jg56A{OyLjsQNc`3y# z>p1-|KvbD8_{7^Z7c~{HspAgeMztApp>4tXqB%;lE1D&r$xVa=|$+grgrG+czK{RwiXgHMqK; zh=i%JhPp*U!|5@x6BuL;F2Hx981vqgV0V$S2INMkv-h*;a8ub$^ppl!@=l_>zjn|_ zUr%>^QLNX><;#nTPnDNzq1j8nflxA?C`;A8O^g6q6!>CoPVSBe zt$h2YOcKFK!*xlY!pAl!tzcgDf8NMMZzhLP}SQ4#F%1jJu z6%?)X57+)JzNf9gl@Ye($J+Fo4a<`fjA7w9cZiSw-zF>VFKN2?#P=LnXrNwcwil5b zR(z)VZ~vPa`Q-$o=f@`9%cbfU9od(@^?q4UfcKxikcU&ExIgCsyF|t!ej67U56$at z4~UEO9hgdn_dO`lv1P^?e$KS~6FDKA1Q-Mw>;LwF_|^-{n}Gts4-_|~L(>r3hMLEa z9zX_W2e?sj?%S=m;FQTqUbx{pZ!RPRFgzsRNnA&!kLjDyC#~~??eSV+UIA1L4FZ@t z%tTxwE+6pbkTwl7cRnJ_&CQ@@b_jt_$a7^a`dNP6I31`b3C~v;`#$2XgmqHmAZFA# zoBa?X7!!;FW&{u!YW-3)aSQpjH4otGV0h!*Vt1}6ElCbdP4XF5a3zLKL&hB`t)*FG z*81;Z$04goPEN0*7>=$(l3}#a;dj(vQ_znzo@m!Mu*OIb2ucF=fHq;c;JBYTL4|N! z3>9;-FIV3`;G3JOaWJ)>b$VgE>OJ}4CKQBijtl`v0u9N7-5}w6xFJ;sy7QT>M%1o2TFQ;`3 zW0IU&$9}}7O;iAn`0!i>5b8{ekInecc->?+7<$T9q8G1&F@3A0VxDkL z#NRW2jg7zgDDoqLY!c*4jF@6HDhwG(+x!PIaAcYW(6Clzo2^axbG`_1U*FLp+66U!Q%32Nh(v4h$+HtsuuEE7K^>c?wW{&85cnbyXUbqhTvvMX= z!h2D&kko`dq>mnnAHRf-KQf4PN<^$hAf~cv{0qaWV}IZ9JR3qeuWVsB&;(yXZZI0q zdF}L&1H<3E{rd@e5Cu1%8j5hFth4@(Gr;A&V#_mL-6-S(q5W_TPiIFe;cWxkDeDRP zd)zt-QQ{j`M5m%UH1Y71AL@0*K*BKYDKFhbCz)f4tPAL^sgBmpTPXzgmu+9P(Q2KNo=9N|L`$^Z95XJE8nwgkJX3>FM>fikMNf8L z%{GzuqsY!b$S%MLxvi8?%h4mu|)zZ1Cv9DBDAE5W+!-@q2NFf1d<_sz_cH>7QDWa~!}=VqvR zNLhfyw1^N@g11mTfRA5mH<2&}H&nZ~B?@>A;2(6n?}MhKIVRwkjO+lpM8vx&#zP!S zBow0jB!IrdKgipPgNQA`y&^}IV!5T`Q!RJNn!KW~-kS@0`C7ld{f%Wkb>QRouMs+tLam6i)EMeEpI5eRc4 z?$xd))!BmYz6$6*R~uh*7ga`Mth5w3ve-Mk`aQeXviB|aP~_|Ft`{-aEo5RBtLA92yW|%G9bjD z%?}zj?`WattXxksSf>jChF&x$hGplj3)$tzHv{bbm&{xI@=7~0aE0F#U7y`~c#G*g zhm9#ac6D#&x~VKybi>6++Ey@vDk{|#dT_J|odrD|Ve@D-oN+&5KKIqxGE_qzCH4+s z^{Y{UV%~?^mJNJ=LLKVd`_IcG7S8g+Pe>7*8I>TSnEH14BfKBb>4$uBMjr?3#!G6(rM%E{KjLo389tcn83L<`4 zzeJc{;`f#alX#zHjQsnH_u2}!@3L+v+!9UrYID|fHcx~T8@2NY;crB`bUax~Cgy2= z22mmc(46UHR*@v#*)Sn3V@ye(-h?RhIa`VNuGu$s{J1s9a!B?2_1{-m?>sM2d zlB68K24i}Cp9w(*`>UU^oKPWjlDa-eU5IyVSw68X8bosuoytPSv2}J;l;j!y9Hr^$ z=Ywm1geTdffmwdT1r;?KIf~9`Z}1pxSqptG8rP9KYZpT@UQ$pGU{RrFlk9arYQElR z=(-sIdqodWD}<@@G_dc#&7gS22toB#{CnGfYle7+T4HcWVJGP=h@CXeWSbAWtrFg8 ze(+I{VI_(%D29xu{ivjjIQO4s=c>IfhW;xH7pWVy9 zTZkn;z7)dV!Gd|p{aXli)4*EXBbN(Xz0Bc`xA#HH+=Te+6hj`;5~u^k826jF`?s_o zAJR0SCd#b2~OEIW#f0AfyKWPOg@ zfzQw8)ipU%iD!>=uCOJrxGb-T5*>&s0hYQIPjZF4f+~hM!Uyl@)CEq2%*|l6b;I7` zCw%6etM540Zcf&G_vsP)9Bny{7^iX@C~FB4RHQhRNG)4%;TrB3#462OxsM^UyK~3mfo+lbN!PxvK%AK!mVxP01l)k=ej1WY8M39;j z!XUhNr#EmqO8BQYz~F>;9KEKvOSn16+(#iWNdUIZo5G&rK3Gc}FUpli7oGx~1+|@` zG3Oa@C#LMU=d_Gc1>Ocm5SxBsMtCJJ?kAV<+6Y9{n5W;01o~2Zti1d9HLxdC@v~Mj zy%71|9jN7uE&3Ug4am{i?pf?S{B>SzkHpL!tfN20nQv$UH*9N%Ex+|pq_ z+^%>q@c<;&c}!*Ra~xD*;9pJ_x$EC1Fby|XNrV%Y=N2{i-P^*5!OseCwm^bLMNMq- zvocQW3dJ?;K;Hy+me~+%D+(<#-x-GKpB5c&F^6wNPXOH5h=d^K6HMAPR4?LD2sX+B zYsVnv>n8>n@Fic9x6=Tgf!e(R=k1lR=Ko}&`ZGPf$-Om3 z5KBeY`^>Faq*IFmwu{m#f3puQ7`u1O7p33U|4d=g7BVmC5w;nB6QsxYH{K_TIjkPH zu4YZ2u#n+G*=AD?6!$!kBCd1{r0=R`hSTnXSucWh_zO(eBDBebU0RH(Am7Qq=QrvI z?bFKrQ7S&yf>K8Kf%Z=B+8E=*lAYyaj=RIp+yDz~w;jY6{+fPbEAAhIjK5JB>C{oZ zcMnwbdKHX&w-0^$i~i%LQx4@2#p)nZ9UHGM{x#LEaHKYKg`<^19RAoaD!fHI@~;c= z#Tf?2F>nm_RdQM^VDqvYJ zXz)1PH3{jcWBLAgof6ys%{(s9F8;p)=~@Mh6kLK7;_K1iu%#9S_dyB{cN(I2_LIUl z>OBcrPZ--+1z2-fJU9!#=@(tz=R<0DN4>-Pjv+{-%msm5j$><~I8OwjEIuoFNKRGA zph<%^whq=+@#EaOUJ5#ra};@bgVSqhm-HJ8hAVJz4P{#%l!h!u`T!m_&AupDSVz}Q7x7~b9)$8DE(&b&oU1T33}?A%LLdfK~=8- z&W+qN!W^;_PAu9f&4ZmE$l&Zr$}eAWn)^0A#z6Coa1w=TUD86-i%cmPck2y>1yMmwY9pA~-JKiQX(=DaYVq2z#H z$Q9}+=n4JXx_}G>387~fxC+*`4?=q6H>brz(x+KLpdvK@kEd9GRPDqojW*Idiu&Dp zK$k%3^F0+=UrbkgSKx^(l(G}|+q$opBUkXICi2PxFTod5 z{0I=nFb^ODoRry;WGlGvAQCi+l@m45;f%|-)9abwHDjpX33+7+#g`q>cYsgekqb!w zSlb<0y`@&9_EqhgHB3gjG9dc!$QMBb%VtWNA5_s?aPZV;@n+DJNW1ySPs$t-i0Myc z;ZO*9CCn}_-rR1H`IoMR6#euI zdhz2JL8-`kQ=X5Y%5#Zx>PvfV*I!W==e1x#umspL;J9!LDpnOBwLGH10BPb@Gj2*P zg&8Acpv(P6A#f-zfSlRKbX2mhto_)v&G&6@PN?XjffF;%eZ8~8VadRu#$<`2Mhtk6 zYNZn*o7Hlp1#+vybA^w1=VKpH7H|;Ay%r32JooHvIMoJy(FPynZBKOtqtX*nRHgMU($`< zGJYmGDVJug9cGDpff^L3cYil2WH~zyZNq0OXQW1N4u|V$*(ukHF9WB>O6wlxkjm?Eab%CqzAf zYnM@Vya+HZaCm7&;e9gF~Me3wv6pdg@|7Y*2ro`W2Z zdDEvUy!gl>WnkK()WJ^UdMEROyMI0JMhiw)ZW3J%VOOojZEHY&lS zKLyjmi=jZ6DIkKfp}q^V1JHpaJe#<(h*dx$9VWL15!hCH5X21}N=EDB+^~?|Nk93M zdaDW&Y}$Qr?h1wS+oVDtfiuNe1$FV*FkPrg5(MBlyxGdp>i`QxGac@NP6^hx$2mrB zt08z0WKff0#|UE$Wc3#$N(WGD##+%AlLR1FYO-<>3$1)iaVVa8BG?i{Nm&9F2&^Jk z0U-;l{N5csV4!L$oKWyi2j&h<;HR;q|FA+E_$e6M+^VPwObm#FUPC=^r=%ay3z%+L zKC|tGha+*s4AiUXMH+9l;u6rKI(GB(AGX#+=c$%6HSr^l{!B2>x35L@<=fU|{X9o& z&Rs{tja0yc=)0goyn+r^SL1@^mgRfLNk0pbcU!>hpp=uD96(9rOs2*9^8#2+bi*lf lHZYYIg_7*$w}fX<#nQmNW}x`k%P%$nC3$tZnz!bm{|AH9(d_^L diff --git a/docs/img/premium/lightson-readme.png b/docs/img/premium/lightson-readme.png index 0de66562b293f337395c008cdd516b779a100ddb..9afc1eee952fe21701bbd07b59a3443d0e20255c 100644 GIT binary patch delta 12681 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 diff --git a/docs/img/premium/retool-readme.png b/docs/img/premium/retool-readme.png index b5dc3aee746f12e183a52eb067a8edd031ac9435..56adba04d3acc812f5499e19ecd9c72d3632eb32 100644 GIT binary patch literal 8962 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 literal 9053 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

    |5jz}4ReE`$VjeJN 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 Z#d<;6VmyH&8uLPCv%6c>JiQ|3<>*PxC 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 S-sJ11;bbKhCCbGO{Qn0dF5(pc literal 24549 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 Kbe*JW$bSHrTxjS3 diff --git a/docs/img/premium/stream-readme.png b/docs/img/premium/stream-readme.png index 0ca650eaa85c0b9675870ff6467d8e346c9e830b..15da6ba71d07b65483d340b7dd519c6171126eba 100644 GIT binary patch literal 19213 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 X{nT9-*dJL4I-tta)z4*}Q$iB}z?3lk literal 19281 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 diff --git a/docs/index.md b/docs/index.md index 7741f8af5..c7b78e9c3 100644 --- a/docs/index.md +++ b/docs/index.md @@ -71,7 +71,7 @@ continued development by **[signing up for a paid plan][funding]**.

  • ESG
  • Rollbar
  • Retool
  • -
  • bit.io
  • +
  • bit.io
  • From 17f2b39bdb530c9c7e0722e41682788ea6019bde Mon Sep 17 00:00:00 2001 From: Masked Man Date: Thu, 6 Aug 2020 03:03:30 +0430 Subject: [PATCH 08/66] Fix docs issue (#7418) --- docs/api-guide/serializers.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/api-guide/serializers.md b/docs/api-guide/serializers.md index ceec319de..efa325620 100644 --- a/docs/api-guide/serializers.md +++ b/docs/api-guide/serializers.md @@ -595,7 +595,7 @@ Normally if a `ModelSerializer` does not generate the fields you need by default ### `.serializer_field_mapping` -A mapping of Django model classes to REST framework serializer classes. You can override this mapping to alter the default serializer classes that should be used for each model class. +A mapping of Django model fields to REST framework serializer fields. You can override this mapping to alter the default serializer fields that should be used for each model field. ### `.serializer_related_field` From 0d2bbd317743f2459ccdf2bd750edb0c10261eaf Mon Sep 17 00:00:00 2001 From: Michael K Date: Wed, 5 Aug 2020 23:51:06 +0000 Subject: [PATCH 09/66] Fix Request docstring kwarg names (#7443) --- rest_framework/request.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rest_framework/request.py b/rest_framework/request.py index 43cdf5e9b..2a007cd2b 100644 --- a/rest_framework/request.py +++ b/rest_framework/request.py @@ -143,9 +143,9 @@ class Request: Kwargs: - request(HttpRequest). The original request instance. - - parsers_classes(list/tuple). The parsers to use for parsing the + - parsers(list/tuple). The parsers to use for parsing the request content. - - authentication_classes(list/tuple). The authentications used to try + - authenticators(list/tuple). The authenticators used to try authenticating the request's user. """ From 1e383f103a1a84461e949e59b001ee61a2e0f7c4 Mon Sep 17 00:00:00 2001 From: Ryan P Kilby Date: Wed, 5 Aug 2020 21:29:47 -0700 Subject: [PATCH 10/66] Check extra action func.__name__ (#7098) --- rest_framework/viewsets.py | 13 ++++++++++- tests/test_viewsets.py | 48 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+), 1 deletion(-) diff --git a/rest_framework/viewsets.py b/rest_framework/viewsets.py index 9cb48729e..5a1f8acf5 100644 --- a/rest_framework/viewsets.py +++ b/rest_framework/viewsets.py @@ -33,6 +33,15 @@ def _is_extra_action(attr): return hasattr(attr, 'mapping') and isinstance(attr.mapping, MethodMapper) +def _check_attr_name(func, name): + assert func.__name__ == name, ( + 'Expected function (`{func.__name__}`) to match its attribute name ' + '(`{name}`). If using a decorator, ensure the inner function is ' + 'decorated with `functools.wraps`, or that `{func.__name__}.__name__` ' + 'is otherwise set to `{name}`.').format(func=func, name=name) + return func + + class ViewSetMixin: """ This is the magic. @@ -164,7 +173,9 @@ class ViewSetMixin: """ Get the methods that are marked as an extra ViewSet `@action`. """ - return [method for _, method in getmembers(cls, _is_extra_action)] + return [_check_attr_name(method, name) + for name, method + in getmembers(cls, _is_extra_action)] def get_extra_action_url_map(self): """ diff --git a/tests/test_viewsets.py b/tests/test_viewsets.py index 465806a09..2a2997a0b 100644 --- a/tests/test_viewsets.py +++ b/tests/test_viewsets.py @@ -1,4 +1,5 @@ from collections import OrderedDict +from functools import wraps import pytest from django.conf.urls import include, url @@ -33,6 +34,13 @@ class Action(models.Model): pass +def decorate(fn): + @wraps(fn) + def wrapper(self, request, *args, **kwargs): + return fn(self, request, *args, **kwargs) + return wrapper + + class ActionViewSet(GenericViewSet): queryset = Action.objects.all() @@ -68,6 +76,16 @@ class ActionViewSet(GenericViewSet): def unresolvable_detail_action(self, request, *args, **kwargs): raise NotImplementedError + @action(detail=False) + @decorate + def wrapped_list_action(self, request, *args, **kwargs): + raise NotImplementedError + + @action(detail=True) + @decorate + def wrapped_detail_action(self, request, *args, **kwargs): + raise NotImplementedError + class ActionNamesViewSet(GenericViewSet): @@ -191,6 +209,8 @@ class GetExtraActionsTests(TestCase): 'detail_action', 'list_action', 'unresolvable_detail_action', + 'wrapped_detail_action', + 'wrapped_list_action', ] self.assertEqual(actual, expected) @@ -204,9 +224,35 @@ class GetExtraActionsTests(TestCase): 'detail_action', 'list_action', 'unresolvable_detail_action', + 'wrapped_detail_action', + 'wrapped_list_action', ] self.assertEqual(actual, expected) + def test_attr_name_check(self): + def decorate(fn): + def wrapper(self, request, *args, **kwargs): + return fn(self, request, *args, **kwargs) + return wrapper + + class ActionViewSet(GenericViewSet): + queryset = Action.objects.all() + + @action(detail=False) + @decorate + def wrapped_list_action(self, request, *args, **kwargs): + raise NotImplementedError + + view = ActionViewSet() + with pytest.raises(AssertionError) as excinfo: + view.get_extra_actions() + + assert str(excinfo.value) == ( + 'Expected function (`wrapper`) to match its attribute name ' + '(`wrapped_list_action`). If using a decorator, ensure the inner ' + 'function is decorated with `functools.wraps`, or that ' + '`wrapper.__name__` is otherwise set to `wrapped_list_action`.') + @override_settings(ROOT_URLCONF='tests.test_viewsets') class GetExtraActionUrlMapTests(TestCase): @@ -218,6 +264,7 @@ class GetExtraActionUrlMapTests(TestCase): expected = OrderedDict([ ('Custom list action', 'http://testserver/api/actions/custom_list_action/'), ('List action', 'http://testserver/api/actions/list_action/'), + ('Wrapped list action', 'http://testserver/api/actions/wrapped_list_action/'), ]) self.assertEqual(view.get_extra_action_url_map(), expected) @@ -229,6 +276,7 @@ class GetExtraActionUrlMapTests(TestCase): expected = OrderedDict([ ('Custom detail action', 'http://testserver/api/actions/1/custom_detail_action/'), ('Detail action', 'http://testserver/api/actions/1/detail_action/'), + ('Wrapped detail action', 'http://testserver/api/actions/1/wrapped_detail_action/'), # "Unresolvable detail action" excluded, since it's not resolvable ]) From 3d708ac7005e29ca75aa68b447edb8d9dc111637 Mon Sep 17 00:00:00 2001 From: Vibhu Agarwal Date: Wed, 12 Aug 2020 05:06:23 +0530 Subject: [PATCH 11/66] Fix broken docs link (#7473) --- docs/topics/rest-hypermedia-hateoas.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/topics/rest-hypermedia-hateoas.md b/docs/topics/rest-hypermedia-hateoas.md index d48319a26..a11bd6cc7 100644 --- a/docs/topics/rest-hypermedia-hateoas.md +++ b/docs/topics/rest-hypermedia-hateoas.md @@ -34,7 +34,7 @@ REST framework also includes [serialization] and [parser]/[renderer] components What REST framework doesn't do is give you machine readable hypermedia formats such as [HAL][hal], [Collection+JSON][collection], [JSON API][json-api] or HTML [microformats] by default, or the ability to auto-magically create fully HATEOAS style APIs that include hypermedia-based form descriptions and semantically labelled hyperlinks. Doing so would involve making opinionated choices about API design that should really remain outside of the framework's scope. -[cite]: https://vimeo.com/channels/restfest/page:2 +[cite]: https://vimeo.com/channels/restfest/49503453 [dissertation]: https://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm [hypertext-driven]: https://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven [restful-web-apis]: http://restfulwebapis.org/ From 355afcf64b27a06c8b48c0291fa3eae61e0c3695 Mon Sep 17 00:00:00 2001 From: David Smith <39445562+smithdc1@users.noreply.github.com> Date: Mon, 17 Aug 2020 21:26:56 +0100 Subject: [PATCH 12/66] isort v5 (#7484) --- requirements/requirements-codestyle.txt | 2 +- rest_framework/compat.py | 5 +++-- runtests.py | 2 +- setup.cfg | 2 +- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/requirements/requirements-codestyle.txt b/requirements/requirements-codestyle.txt index d9efde1d0..434fc41af 100644 --- a/requirements/requirements-codestyle.txt +++ b/requirements/requirements-codestyle.txt @@ -4,4 +4,4 @@ flake8-tidy-imports==4.1.0 pycodestyle==2.5.0 # Sort and lint imports -isort==4.3.21 +isort==5.4.2 diff --git a/rest_framework/compat.py b/rest_framework/compat.py index 611068a62..4bae7729f 100644 --- a/rest_framework/compat.py +++ b/rest_framework/compat.py @@ -96,8 +96,8 @@ except ImportError: try: import pygments - from pygments.lexers import get_lexer_by_name, TextLexer from pygments.formatters import HtmlFormatter + from pygments.lexers import TextLexer, get_lexer_by_name def pygments_highlight(text, lang, style): lexer = get_lexer_by_name(lang, stripall=False) @@ -121,9 +121,10 @@ if markdown is not None and pygments is not None: # starting from this blogpost and modified to support current markdown extensions API # https://zerokspot.com/weblog/2008/06/18/syntax-highlighting-in-markdown-with-pygments/ - from markdown.preprocessors import Preprocessor import re + from markdown.preprocessors import Preprocessor + class CodeBlockPreprocessor(Preprocessor): pattern = re.compile( r'^\s*``` *([^\n]+)\n(.+?)^\s*```', re.M | re.S) diff --git a/runtests.py b/runtests.py index 19513cdbf..82028ea32 100755 --- a/runtests.py +++ b/runtests.py @@ -11,7 +11,7 @@ PYTEST_ARGS = { FLAKE8_ARGS = ['rest_framework', 'tests'] -ISORT_ARGS = ['--recursive', '--check-only', '--diff', 'rest_framework', 'tests'] +ISORT_ARGS = ['--check-only', '--diff', 'rest_framework', 'tests'] def exit_on_failure(ret, message=None): diff --git a/setup.cfg b/setup.cfg index 81da18b1c..abb7cca90 100644 --- a/setup.cfg +++ b/setup.cfg @@ -13,7 +13,7 @@ banned-modules = json = use from rest_framework.utils import json! skip=.tox atomic=true multi_line_output=5 -known_standard_library=types +extra_standard_library=types known_third_party=pytest,_pytest,django,pytz,uritemplate known_first_party=rest_framework,tests From 374c0d414237708a28eccc412c078c06d0d82be2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=91=D0=BE=D1=80=D0=B8=D1=81=20=D0=92=D0=B5=D1=80=D1=85?= =?UTF-8?q?=D0=BE=D0=B2=D1=81=D0=BA=D0=B8=D0=B9?= Date: Thu, 20 Aug 2020 06:23:59 -0600 Subject: [PATCH 13/66] Punctuation fix (#7488) * Punctuation fix * more punctuation --- docs/api-guide/relations.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/api-guide/relations.md b/docs/api-guide/relations.md index ef6efec5e..88b462e1a 100644 --- a/docs/api-guide/relations.md +++ b/docs/api-guide/relations.md @@ -56,7 +56,7 @@ In order to explain the various types of relational fields, we'll use a couple o `StringRelatedField` may be used to represent the target of the relationship using its `__str__` method. -For example, the following serializer. +For example, the following serializer: class AlbumSerializer(serializers.ModelSerializer): tracks = serializers.StringRelatedField(many=True) @@ -65,7 +65,7 @@ For example, the following serializer. model = Album fields = ['album_name', 'artist', 'tracks'] -Would serialize to the following representation. +Would serialize to the following representation: { 'album_name': 'Things We Lost In The Fire', @@ -291,7 +291,7 @@ Would serialize to a nested representation like this: ## Writable nested serializers -By default nested serializers are read-only. If you want to support write-operations to a nested serializer field you'll need to create `create()` and/or `update()` methods in order to explicitly specify how the child relationships should be saved. +By default nested serializers are read-only. If you want to support write-operations to a nested serializer field you'll need to create `create()` and/or `update()` methods in order to explicitly specify how the child relationships should be saved: class TrackSerializer(serializers.ModelSerializer): class Meta: @@ -343,7 +343,7 @@ To provide a dynamic queryset based on the `context`, you can also override `.ge ## Example -For example, we could define a relational field to serialize a track to a custom string representation, using its ordering, title, and duration. +For example, we could define a relational field to serialize a track to a custom string representation, using its ordering, title, and duration: import time @@ -359,7 +359,7 @@ For example, we could define a relational field to serialize a track to a custom model = Album fields = ['album_name', 'artist', 'tracks'] -This custom field would then serialize to the following representation. +This custom field would then serialize to the following representation: { 'album_name': 'Sometimes I Wish We Were an Eagle', @@ -535,7 +535,7 @@ And the following two models, which may have associated tags: text = models.CharField(max_length=1000) tags = GenericRelation(TaggedItem) -We could define a custom field that could be used to serialize tagged instances, using the type of each instance to determine how it should be serialized. +We could define a custom field that could be used to serialize tagged instances, using the type of each instance to determine how it should be serialized: class TaggedObjectRelatedField(serializers.RelatedField): """ From 48c327c681da481b7c36c674307bd58adfa4286c Mon Sep 17 00:00:00 2001 From: Justin Duke Date: Mon, 24 Aug 2020 03:44:34 -0700 Subject: [PATCH 14/66] Fix schema typo (#7491) --- rest_framework/schemas/openapi.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rest_framework/schemas/openapi.py b/rest_framework/schemas/openapi.py index 9774a94c7..8a8e267e0 100644 --- a/rest_framework/schemas/openapi.py +++ b/rest_framework/schemas/openapi.py @@ -50,7 +50,7 @@ class SchemaGenerator(BaseSchemaGenerator): 'You have a duplicated operationId in your OpenAPI schema: {operation_id}\n' '\tRoute: {route1}, Method: {method1}\n' '\tRoute: {route2}, Method: {method2}\n' - '\tAn operationId has to be unique accros your schema. Your schema may not work in other tools.' + '\tAn operationId has to be unique across your schema. Your schema may not work in other tools.' .format( route1=ids[operation_id]['route'], method1=ids[operation_id]['method'], From e215db206a6a80432c4f2a5cb711fc858e9069b3 Mon Sep 17 00:00:00 2001 From: Vlad <38493865+VladSaichenko@users.noreply.github.com> Date: Tue, 25 Aug 2020 18:50:02 +0700 Subject: [PATCH 15/66] Updated url()'s with path() and re_path() (#7492) --- rest_framework/documentation.py | 6 +++--- rest_framework/routers.py | 7 +++---- rest_framework/urlpatterns.py | 7 +++---- rest_framework/urls.py | 6 +++--- 4 files changed, 12 insertions(+), 14 deletions(-) diff --git a/rest_framework/documentation.py b/rest_framework/documentation.py index ce61fa6bf..53e5ab551 100644 --- a/rest_framework/documentation.py +++ b/rest_framework/documentation.py @@ -1,4 +1,4 @@ -from django.conf.urls import include, url +from django.urls import include, path from rest_framework.renderers import ( CoreJSONRenderer, DocumentationRenderer, SchemaJSRenderer @@ -82,7 +82,7 @@ def include_docs_urls( permission_classes=permission_classes, ) urls = [ - url(r'^$', docs_view, name='docs-index'), - url(r'^schema.js$', schema_js_view, name='schema-js') + path('', docs_view, name='docs-index'), + path('schema.js', schema_js_view, name='schema-js') ] return include((urls, 'api-docs'), namespace='api-docs') diff --git a/rest_framework/routers.py b/rest_framework/routers.py index 657ad67bc..e2afa573f 100644 --- a/rest_framework/routers.py +++ b/rest_framework/routers.py @@ -16,9 +16,8 @@ For example, you might have a `urls.py` that looks something like this: import itertools from collections import OrderedDict, namedtuple -from django.conf.urls import url from django.core.exceptions import ImproperlyConfigured -from django.urls import NoReverseMatch +from django.urls import NoReverseMatch, re_path from rest_framework import views from rest_framework.response import Response @@ -265,7 +264,7 @@ class SimpleRouter(BaseRouter): view = viewset.as_view(mapping, **initkwargs) name = route.name.format(basename=basename) - ret.append(url(regex, view, name=name)) + ret.append(re_path(regex, view, name=name)) return ret @@ -340,7 +339,7 @@ class DefaultRouter(SimpleRouter): if self.include_root_view: view = self.get_api_root_view(api_urls=urls) - root_url = url(r'^$', view, name=self.root_view_name) + root_url = re_path(r'^$', view, name=self.root_view_name) urls.append(root_url) if self.include_format_suffixes: diff --git a/rest_framework/urlpatterns.py b/rest_framework/urlpatterns.py index efcfd8401..bed5708eb 100644 --- a/rest_framework/urlpatterns.py +++ b/rest_framework/urlpatterns.py @@ -1,5 +1,4 @@ -from django.conf.urls import include, url -from django.urls import URLResolver, path, register_converter +from django.urls import URLResolver, include, path, re_path, register_converter from django.urls.resolvers import RoutePattern from rest_framework.settings import api_settings @@ -52,7 +51,7 @@ def apply_suffix_patterns(urlpatterns, suffix_pattern, suffix_required, suffix_r route = str(urlpattern.pattern) new_pattern = path(route, include((patterns, app_name), namespace), kwargs) else: - new_pattern = url(regex, include((patterns, app_name), namespace), kwargs) + new_pattern = re_path(regex, include((patterns, app_name), namespace), kwargs) ret.append(new_pattern) else: @@ -72,7 +71,7 @@ def apply_suffix_patterns(urlpatterns, suffix_pattern, suffix_required, suffix_r route = str(urlpattern.pattern).rstrip('$').rstrip('/') + suffix_route new_pattern = path(route, view, kwargs, name) else: - new_pattern = url(regex, view, kwargs, name) + new_pattern = re_path(regex, view, kwargs, name) ret.append(new_pattern) diff --git a/rest_framework/urls.py b/rest_framework/urls.py index 482a0a364..d9b858ebc 100644 --- a/rest_framework/urls.py +++ b/rest_framework/urls.py @@ -11,11 +11,11 @@ your API requires authentication: You should make sure your authentication settings include `SessionAuthentication`. """ -from django.conf.urls import url from django.contrib.auth import views +from django.urls import path app_name = 'rest_framework' urlpatterns = [ - url(r'^login/$', views.LoginView.as_view(template_name='rest_framework/login.html'), name='login'), - url(r'^logout/$', views.LogoutView.as_view(), name='logout'), + path('login/', views.LoginView.as_view(template_name='rest_framework/login.html'), name='login'), + path('logout/', views.LogoutView.as_view(), name='logout'), ] From 7f3a3557a050147dd2420aa41d1bf7ddd7f9818e Mon Sep 17 00:00:00 2001 From: johnthagen Date: Tue, 25 Aug 2020 18:15:17 -0400 Subject: [PATCH 16/66] Add drf_ujson2 reference (#7494) --- docs/api-guide/renderers.md | 5 +++-- docs/community/third-party-packages.md | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/docs/api-guide/renderers.md b/docs/api-guide/renderers.md index a508a9ff9..ca3a29b82 100644 --- a/docs/api-guide/renderers.md +++ b/docs/api-guide/renderers.md @@ -503,7 +503,7 @@ Comma-separated values are a plain-text tabular data format, that can be easily ## UltraJSON -[UltraJSON][ultrajson] is an optimized C JSON encoder which can give significantly faster JSON rendering. [Jacob Haslehurst][hzy] maintains the [drf-ujson-renderer][drf-ujson-renderer] package which implements JSON rendering using the UJSON package. +[UltraJSON][ultrajson] is an optimized C JSON encoder which can give significantly faster JSON rendering. [Adam Mertz][Amertz08] maintains [drf_ujson2][drf_ujson2], a fork of the now unmaintained [drf-ujson-renderer][drf-ujson-renderer], which implements JSON rendering using the UJSON package. ## CamelCase JSON @@ -547,8 +547,9 @@ Comma-separated values are a plain-text tabular data format, that can be easily [djangorestframework-msgpack]: https://github.com/juanriaza/django-rest-framework-msgpack [djangorestframework-csv]: https://github.com/mjumbewu/django-rest-framework-csv [ultrajson]: https://github.com/esnme/ultrajson -[hzy]: https://github.com/hzy +[Amertz08]: https://github.com/Amertz08 [drf-ujson-renderer]: https://github.com/gizmag/drf-ujson-renderer +[drf_ujson2]: https://github.com/Amertz08/drf_ujson2 [djangorestframework-camel-case]: https://github.com/vbabiy/djangorestframework-camel-case [Django REST Pandas]: https://github.com/wq/django-rest-pandas [Pandas]: https://pandas.pydata.org/ diff --git a/docs/community/third-party-packages.md b/docs/community/third-party-packages.md index b47dc098f..79cb56e01 100644 --- a/docs/community/third-party-packages.md +++ b/docs/community/third-party-packages.md @@ -240,7 +240,7 @@ To submit new content, [open an issue][drf-create-issue] or [create a pull reque * [djangorestframework-csv][djangorestframework-csv] - Provides CSV renderer support. * [djangorestframework-jsonapi][djangorestframework-jsonapi] - Provides a parser, renderer, serializers, and other tools to help build an API that is compliant with the jsonapi.org spec. -* [drf_ujson][drf_ujson] - Implements JSON rendering using the UJSON package. +* [drf_ujson2][drf_ujson2] - Implements JSON rendering using the UJSON package. * [rest-pandas][rest-pandas] - Pandas DataFrame-powered renderers including Excel, CSV, and SVG formats. * [djangorestframework-rapidjson][djangorestframework-rapidjson] - Provides rapidjson support with parser and renderer. @@ -313,7 +313,7 @@ To submit new content, [open an issue][drf-create-issue] or [create a pull reque [djangorestframework-msgpack]: https://github.com/juanriaza/django-rest-framework-msgpack [djangorestframework-camel-case]: https://github.com/vbabiy/djangorestframework-camel-case [djangorestframework-csv]: https://github.com/mjumbewu/django-rest-framework-csv -[drf_ujson]: https://github.com/gizmag/drf-ujson-renderer +[drf_ujson2]: https://github.com/Amertz08/drf_ujson2 [rest-pandas]: https://github.com/wq/django-rest-pandas [djangorestframework-rapidjson]: https://github.com/allisson/django-rest-framework-rapidjson [djangorestframework-chain]: https://github.com/philipn/django-rest-framework-chain From b3e02592d019fc4c66b5f4b11a462691e5cc64f1 Mon Sep 17 00:00:00 2001 From: Bob Thomas Date: Thu, 3 Sep 2020 06:47:11 -0400 Subject: [PATCH 17/66] Add support for Django 3.1 JSONField (#7467) Django 3.1 adds a new generic JSONField to replace the PostgreSQL-specific one. This adds support for the new field type, which should behave the same as the existing PostgreSQL field. Django's new JSONField also includes support for a custom "decoder", so add support for that in the serializer field. --- rest_framework/fields.py | 3 ++- rest_framework/serializers.py | 9 +++++++-- rest_framework/utils/field_mapping.py | 3 ++- tests/test_model_serializer.py | 26 ++++++++++++++++++++++++++ 4 files changed, 37 insertions(+), 4 deletions(-) diff --git a/rest_framework/fields.py b/rest_framework/fields.py index da2dd54be..f218713f1 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -1758,6 +1758,7 @@ class JSONField(Field): def __init__(self, *args, **kwargs): self.binary = kwargs.pop('binary', False) self.encoder = kwargs.pop('encoder', None) + self.decoder = kwargs.pop('decoder', None) super().__init__(*args, **kwargs) def get_value(self, dictionary): @@ -1777,7 +1778,7 @@ class JSONField(Field): if self.binary or getattr(data, 'is_json_string', False): if isinstance(data, bytes): data = data.decode() - return json.loads(data) + return json.loads(data, cls=self.decoder) else: json.dumps(data, cls=self.encoder) except (TypeError, ValueError): diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index 916f8bec4..439220b34 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -884,6 +884,8 @@ class ModelSerializer(Serializer): models.GenericIPAddressField: IPAddressField, models.FilePathField: FilePathField, } + if hasattr(models, 'JSONField'): + serializer_field_mapping[models.JSONField] = JSONField if postgres_fields: serializer_field_mapping[postgres_fields.HStoreField] = HStoreField serializer_field_mapping[postgres_fields.ArrayField] = ListField @@ -1242,10 +1244,13 @@ class ModelSerializer(Serializer): # `allow_blank` is only valid for textual fields. field_kwargs.pop('allow_blank', None) - if postgres_fields and isinstance(model_field, postgres_fields.JSONField): + is_django_jsonfield = hasattr(models, 'JSONField') and isinstance(model_field, models.JSONField) + if (postgres_fields and isinstance(model_field, postgres_fields.JSONField)) or is_django_jsonfield: # Populate the `encoder` argument of `JSONField` instances generated - # for the PostgreSQL specific `JSONField`. + # for the model `JSONField`. field_kwargs['encoder'] = getattr(model_field, 'encoder', None) + if is_django_jsonfield: + field_kwargs['decoder'] = getattr(model_field, 'decoder', None) if postgres_fields and isinstance(model_field, postgres_fields.ArrayField): # Populate the `child` argument on `ListField` instances generated diff --git a/rest_framework/utils/field_mapping.py b/rest_framework/utils/field_mapping.py index ed270be5e..c008495cc 100644 --- a/rest_framework/utils/field_mapping.py +++ b/rest_framework/utils/field_mapping.py @@ -92,7 +92,8 @@ def get_field_kwargs(field_name, model_field): kwargs['allow_unicode'] = model_field.allow_unicode if isinstance(model_field, models.TextField) and not model_field.choices or \ - (postgres_fields and isinstance(model_field, postgres_fields.JSONField)): + (postgres_fields and isinstance(model_field, postgres_fields.JSONField)) or \ + (hasattr(models, 'JSONField') and isinstance(model_field, models.JSONField)): kwargs['style'] = {'base_template': 'textarea.html'} if isinstance(model_field, models.AutoField) or not model_field.editable: diff --git a/tests/test_model_serializer.py b/tests/test_model_serializer.py index 51b8f2e22..1733930a6 100644 --- a/tests/test_model_serializer.py +++ b/tests/test_model_serializer.py @@ -7,6 +7,7 @@ an appropriate set of serializer fields for each case. """ import datetime import decimal +import json # noqa import sys import tempfile from collections import OrderedDict @@ -478,6 +479,7 @@ class TestPosgresFieldsMapping(TestCase): """) self.assertEqual(repr(TestSerializer()), expected) + @pytest.mark.skipif(hasattr(models, 'JSONField'), reason='has models.JSONField') def test_json_field(self): class JSONFieldModel(models.Model): json_field = postgres_fields.JSONField() @@ -496,6 +498,30 @@ class TestPosgresFieldsMapping(TestCase): self.assertEqual(repr(TestSerializer()), expected) +class CustomJSONDecoder(json.JSONDecoder): + pass + + +@pytest.mark.skipif(not hasattr(models, 'JSONField'), reason='no models.JSONField') +class TestDjangoJSONFieldMapping(TestCase): + def test_json_field(self): + class JSONFieldModel(models.Model): + json_field = models.JSONField() + json_field_with_encoder = models.JSONField(encoder=DjangoJSONEncoder, decoder=CustomJSONDecoder) + + class TestSerializer(serializers.ModelSerializer): + class Meta: + model = JSONFieldModel + fields = ['json_field', 'json_field_with_encoder'] + + expected = dedent(""" + TestSerializer(): + json_field = JSONField(decoder=None, encoder=None, style={'base_template': 'textarea.html'}) + json_field_with_encoder = JSONField(decoder=, encoder=, style={'base_template': 'textarea.html'}) + """) + self.assertEqual(repr(TestSerializer()), expected) + + # Tests for relational field mappings. # ------------------------------------ From f323049ecc24b48b8453867d0d8952e8e0c1c003 Mon Sep 17 00:00:00 2001 From: Ryan P Kilby Date: Thu, 3 Sep 2020 03:49:15 -0700 Subject: [PATCH 18/66] Fix pk-only optimization for properties (#7142) * Add callable/prop tests for pk-only optimization * Fix related field pk-only optimization for props --- rest_framework/relations.py | 9 +++++-- tests/models.py | 9 +++++++ tests/test_relations_pk.py | 47 +++++++++++++++++++++++++++++++++++++ 3 files changed, 63 insertions(+), 2 deletions(-) diff --git a/rest_framework/relations.py b/rest_framework/relations.py index 3a2a8fb4b..3cd46379d 100644 --- a/rest_framework/relations.py +++ b/rest_framework/relations.py @@ -175,8 +175,13 @@ class RelatedField(Field): value = attribute_instance.serializable_value(self.source_attrs[-1]) if is_simple_callable(value): # Handle edge case where the relationship `source` argument - # points to a `get_relationship()` method on the model - value = value().pk + # points to a `get_relationship()` method on the model. + value = value() + + # Handle edge case where relationship `source` argument points + # to an instance instead of a pk (e.g., a `@property`). + value = getattr(value, 'pk', value) + return PKOnlyObject(pk=value) except AttributeError: pass diff --git a/tests/models.py b/tests/models.py index 2c340a3e6..afe649760 100644 --- a/tests/models.py +++ b/tests/models.py @@ -37,6 +37,15 @@ class ManyToManySource(RESTFrameworkModel): class ForeignKeyTarget(RESTFrameworkModel): name = models.CharField(max_length=100) + def get_first_source(self): + """Used for testing related field against a callable.""" + return self.sources.all().order_by('pk')[0] + + @property + def first_source(self): + """Used for testing related field against a property.""" + return self.sources.all().order_by('pk')[0] + class UUIDForeignKeyTarget(RESTFrameworkModel): uuid = models.UUIDField(primary_key=True, default=uuid.uuid4) diff --git a/tests/test_relations_pk.py b/tests/test_relations_pk.py index 0da9da890..7a4878a2b 100644 --- a/tests/test_relations_pk.py +++ b/tests/test_relations_pk.py @@ -30,6 +30,25 @@ class ForeignKeyTargetSerializer(serializers.ModelSerializer): fields = ('id', 'name', 'sources') +class ForeignKeyTargetCallableSourceSerializer(serializers.ModelSerializer): + first_source = serializers.PrimaryKeyRelatedField( + source='get_first_source', + read_only=True, + ) + + class Meta: + model = ForeignKeyTarget + fields = ('id', 'name', 'first_source') + + +class ForeignKeyTargetPropertySourceSerializer(serializers.ModelSerializer): + first_source = serializers.PrimaryKeyRelatedField(read_only=True) + + class Meta: + model = ForeignKeyTarget + fields = ('id', 'name', 'first_source') + + class ForeignKeySourceSerializer(serializers.ModelSerializer): class Meta: model = ForeignKeySource @@ -389,6 +408,34 @@ class PKForeignKeyTests(TestCase): assert len(queryset) == 1 +class PKRelationTests(TestCase): + + def setUp(self): + self.target = ForeignKeyTarget.objects.create(name='target-1') + ForeignKeySource.objects.create(name='source-1', target=self.target) + ForeignKeySource.objects.create(name='source-2', target=self.target) + + def test_relation_field_callable_source(self): + serializer = ForeignKeyTargetCallableSourceSerializer(self.target) + expected = { + 'id': 1, + 'name': 'target-1', + 'first_source': 1, + } + with self.assertNumQueries(1): + self.assertEqual(serializer.data, expected) + + def test_relation_field_property_source(self): + serializer = ForeignKeyTargetPropertySourceSerializer(self.target) + expected = { + 'id': 1, + 'name': 'target-1', + 'first_source': 1, + } + with self.assertNumQueries(1): + self.assertEqual(serializer.data, expected) + + class PKNullableForeignKeyTests(TestCase): def setUp(self): target = ForeignKeyTarget(name='target-1') From 35c0abf24ea4a6c38e6fc2ee22b4aabe73776783 Mon Sep 17 00:00:00 2001 From: Charles Date: Thu, 3 Sep 2020 19:51:03 +0900 Subject: [PATCH 19/66] Change Token.generate_key to a Classmethod (#7502) * adds classmethod decorator to generate_key and test to confirm change is acceptable * self -> cls --- rest_framework/authtoken/models.py | 3 ++- tests/authentication/test_authentication.py | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/rest_framework/authtoken/models.py b/rest_framework/authtoken/models.py index f8a871bf1..fd8a50e0e 100644 --- a/rest_framework/authtoken/models.py +++ b/rest_framework/authtoken/models.py @@ -32,7 +32,8 @@ class Token(models.Model): self.key = self.generate_key() return super().save(*args, **kwargs) - def generate_key(self): + @classmethod + def generate_key(cls): return binascii.hexlify(os.urandom(20)).decode() def __str__(self): diff --git a/tests/authentication/test_authentication.py b/tests/authentication/test_authentication.py index 4760ea319..e872fa744 100644 --- a/tests/authentication/test_authentication.py +++ b/tests/authentication/test_authentication.py @@ -397,6 +397,10 @@ class TokenAuthTests(BaseTokenAuthTests, TestCase): key = token.generate_key() assert isinstance(key, str) + def test_generate_key_accessible_as_classmethod(self): + key = self.model.generate_key() + assert isinstance(key, str) + def test_token_login_json(self): """Ensure token login view using JSON POST works.""" client = APIClient(enforce_csrf_checks=True) From b8ab30683a03f8c6af2dda27ba893920ea83bc92 Mon Sep 17 00:00:00 2001 From: David Smith Date: Thu, 13 Aug 2020 21:33:25 +0100 Subject: [PATCH 20/66] default_app_config application variable is deprecated in Django 3.2 --- rest_framework/__init__.py | 6 +++++- rest_framework/authtoken/__init__.py | 5 ++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/rest_framework/__init__.py b/rest_framework/__init__.py index 8f2bc4466..483276e14 100644 --- a/rest_framework/__init__.py +++ b/rest_framework/__init__.py @@ -7,6 +7,8 @@ ______ _____ _____ _____ __ \_| \_\____/\____/ \_/ |_| |_| \__,_|_| |_| |_|\___| \_/\_/ \___/|_| |_|\_| """ +import django + __title__ = 'Django REST framework' __version__ = '3.11.0' __author__ = 'Tom Christie' @@ -22,7 +24,9 @@ HTTP_HEADER_ENCODING = 'iso-8859-1' # Default datetime input and output formats ISO_8601 = 'iso-8601' -default_app_config = 'rest_framework.apps.RestFrameworkConfig' + +if django.VERSION < (3, 2): + default_app_config = 'rest_framework.apps.RestFrameworkConfig' class RemovedInDRF313Warning(DeprecationWarning): diff --git a/rest_framework/authtoken/__init__.py b/rest_framework/authtoken/__init__.py index 82f5b9171..285fe15c6 100644 --- a/rest_framework/authtoken/__init__.py +++ b/rest_framework/authtoken/__init__.py @@ -1 +1,4 @@ -default_app_config = 'rest_framework.authtoken.apps.AuthTokenConfig' +import django + +if django.VERSION < (3, 2): + default_app_config = 'rest_framework.authtoken.apps.AuthTokenConfig' From d5461e93fea2367fb0a5c7ef28d49c6be150273c Mon Sep 17 00:00:00 2001 From: David Smith <39445562+smithdc1@users.noreply.github.com> Date: Sat, 5 Sep 2020 09:02:27 +0100 Subject: [PATCH 21/66] Bump flake8 to 3.8.3 (#7521) --- requirements/requirements-codestyle.txt | 4 ++-- rest_framework/renderers.py | 4 ++-- rest_framework/utils/field_mapping.py | 1 - tests/test_fields.py | 2 +- 4 files changed, 5 insertions(+), 6 deletions(-) diff --git a/requirements/requirements-codestyle.txt b/requirements/requirements-codestyle.txt index 434fc41af..4f54d6e77 100644 --- a/requirements/requirements-codestyle.txt +++ b/requirements/requirements-codestyle.txt @@ -1,7 +1,7 @@ # PEP8 code linting, which we run on all commits. -flake8==3.7.9 +flake8==3.8.3 flake8-tidy-imports==4.1.0 -pycodestyle==2.5.0 +pycodestyle==2.6.0 # Sort and lint imports isort==5.4.2 diff --git a/rest_framework/renderers.py b/rest_framework/renderers.py index a96fa6e65..c790879b9 100644 --- a/rest_framework/renderers.py +++ b/rest_framework/renderers.py @@ -856,8 +856,8 @@ class DocumentationRenderer(BaseRenderer): return { 'document': data, 'langs': self.languages, - 'lang_htmls': ["rest_framework/docs/langs/%s.html" % l for l in self.languages], - 'lang_intro_htmls': ["rest_framework/docs/langs/%s-intro.html" % l for l in self.languages], + 'lang_htmls': ["rest_framework/docs/langs/%s.html" % language for language in self.languages], + 'lang_intro_htmls': ["rest_framework/docs/langs/%s-intro.html" % language for language in self.languages], 'code_style': pygments_css(self.code_style), 'request': request } diff --git a/rest_framework/utils/field_mapping.py b/rest_framework/utils/field_mapping.py index c008495cc..4f8a4f192 100644 --- a/rest_framework/utils/field_mapping.py +++ b/rest_framework/utils/field_mapping.py @@ -58,7 +58,6 @@ def get_detail_view_name(model): that refer to instances of the model. """ return '%(model_name)s-detail' % { - 'app_label': model._meta.app_label, 'model_name': model._meta.object_name.lower() } diff --git a/tests/test_fields.py b/tests/test_fields.py index b1ad1dc66..506e75905 100644 --- a/tests/test_fields.py +++ b/tests/test_fields.py @@ -669,7 +669,7 @@ class TestBooleanField(FieldValues): for input_value in inputs: with pytest.raises(serializers.ValidationError) as exc_info: field.run_validation(input_value) - expected = ['Must be a valid boolean.'.format(input_value)] + expected = ['Must be a valid boolean.'] assert exc_info.value.detail == expected From 9990b5928139072c8e010c8b5c86616f0d40ef9d Mon Sep 17 00:00:00 2001 From: David Smith <39445562+smithdc1@users.noreply.github.com> Date: Mon, 7 Sep 2020 19:00:17 +0100 Subject: [PATCH 22/66] Dropped test compatibility shims for Django <2.2. (#7523) --- tests/conftest.py | 29 +++++++++++++---------------- tests/schemas/test_coreapi.py | 1 - tests/test_model_serializer.py | 22 +--------------------- tests/test_permissions.py | 7 ------- tests/test_urlpatterns.py | 9 --------- 5 files changed, 14 insertions(+), 54 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index d28edeb8a..ac29e4a42 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -67,22 +67,19 @@ def pytest_configure(config): ) # guardian is optional - # Note that for the test cases we're installing a version of django-guardian - # that's only compatible with Django 2.0+. - if django.VERSION >= (2, 0, 0): - try: - import guardian # NOQA - except ImportError: - pass - else: - settings.ANONYMOUS_USER_ID = -1 - settings.AUTHENTICATION_BACKENDS = ( - 'django.contrib.auth.backends.ModelBackend', - 'guardian.backends.ObjectPermissionBackend', - ) - settings.INSTALLED_APPS += ( - 'guardian', - ) + try: + import guardian # NOQA + except ImportError: + pass + else: + settings.ANONYMOUS_USER_ID = -1 + settings.AUTHENTICATION_BACKENDS = ( + 'django.contrib.auth.backends.ModelBackend', + 'guardian.backends.ObjectPermissionBackend', + ) + settings.INSTALLED_APPS += ( + 'guardian', + ) if config.getoption('--no-pkgroot'): sys.path.pop(0) diff --git a/tests/schemas/test_coreapi.py b/tests/schemas/test_coreapi.py index 403b3b634..5f646258b 100644 --- a/tests/schemas/test_coreapi.py +++ b/tests/schemas/test_coreapi.py @@ -456,7 +456,6 @@ class TestSchemaGenerator(TestCase): @unittest.skipUnless(coreapi, 'coreapi is not installed') -@unittest.skipUnless(path, 'needs Django 2') @override_settings(REST_FRAMEWORK={'DEFAULT_SCHEMA_CLASS': 'rest_framework.schemas.AutoSchema'}) class TestSchemaGeneratorDjango2(TestCase): def setUp(self): diff --git a/tests/test_model_serializer.py b/tests/test_model_serializer.py index 1733930a6..7da1b41ae 100644 --- a/tests/test_model_serializer.py +++ b/tests/test_model_serializer.py @@ -12,7 +12,6 @@ import sys import tempfile from collections import OrderedDict -import django import pytest from django.core.exceptions import ImproperlyConfigured from django.core.serializers.json import DjangoJSONEncoder @@ -63,7 +62,7 @@ class RegularFieldsModel(models.Model): email_field = models.EmailField(max_length=100) float_field = models.FloatField() integer_field = models.IntegerField() - null_boolean_field = models.NullBooleanField() + null_boolean_field = models.BooleanField(null=True, default=False) positive_integer_field = models.PositiveIntegerField() positive_small_integer_field = models.PositiveSmallIntegerField() slug_field = models.SlugField(max_length=100) @@ -218,25 +217,6 @@ class TestRegularFieldMappings(TestCase): """) self.assertEqual(repr(TestSerializer()), expected) - # merge this into test_regular_fields / RegularFieldsModel when - # Django 2.1 is the minimum supported version - @pytest.mark.skipif(django.VERSION < (2, 1), reason='Django version < 2.1') - def test_nullable_boolean_field(self): - class NullableBooleanModel(models.Model): - field = models.BooleanField(null=True, default=False) - - class NullableBooleanSerializer(serializers.ModelSerializer): - class Meta: - model = NullableBooleanModel - fields = ['field'] - - expected = dedent(""" - NullableBooleanSerializer(): - field = BooleanField(allow_null=True, required=False) - """) - - self.assertEqual(repr(NullableBooleanSerializer()), expected) - def test_nullable_boolean_field_choices(self): class NullableBooleanChoicesModel(models.Model): CHECKLIST_OPTIONS = ( diff --git a/tests/test_permissions.py b/tests/test_permissions.py index 232c72dd2..4e6cae4b8 100644 --- a/tests/test_permissions.py +++ b/tests/test_permissions.py @@ -2,7 +2,6 @@ import base64 import unittest from unittest import mock -import django from django.conf import settings from django.contrib.auth.models import AnonymousUser, Group, Permission, User from django.db import models @@ -248,12 +247,6 @@ class BasicPermModel(models.Model): class Meta: app_label = 'tests' - if django.VERSION < (2, 1): - permissions = ( - ('view_basicpermmodel', 'Can view basic perm model'), - # add, change, delete built in to django - ) - class BasicPermSerializer(serializers.ModelSerializer): class Meta: diff --git a/tests/test_urlpatterns.py b/tests/test_urlpatterns.py index ec19494b0..90820b532 100644 --- a/tests/test_urlpatterns.py +++ b/tests/test_urlpatterns.py @@ -1,4 +1,3 @@ -import unittest from collections import namedtuple from django.conf.urls import include, url @@ -66,7 +65,6 @@ class FormatSuffixTests(TestCase): ] self._test_trailing_slash(urlpatterns) - @unittest.skipUnless(path, 'needs Django 2') def test_trailing_slash_django2(self): urlpatterns = [ path('test/', dummy_view), @@ -87,14 +85,12 @@ class FormatSuffixTests(TestCase): ] self._test_format_suffix(urlpatterns) - @unittest.skipUnless(path, 'needs Django 2') def test_format_suffix_django2(self): urlpatterns = [ path('test', dummy_view), ] self._test_format_suffix(urlpatterns) - @unittest.skipUnless(path, 'needs Django 2') def test_format_suffix_django2_args(self): urlpatterns = [ path('convtest/', dummy_view), @@ -124,7 +120,6 @@ class FormatSuffixTests(TestCase): ] self._test_default_args(urlpatterns) - @unittest.skipUnless(path, 'needs Django 2') def test_default_args_django2(self): urlpatterns = [ path('test', dummy_view, {'foo': 'bar'}), @@ -148,7 +143,6 @@ class FormatSuffixTests(TestCase): ] self._test_included_urls(urlpatterns) - @unittest.skipUnless(path, 'needs Django 2') def test_included_urls_django2(self): nested_patterns = [ path('path', dummy_view) @@ -158,7 +152,6 @@ class FormatSuffixTests(TestCase): ] self._test_included_urls(urlpatterns) - @unittest.skipUnless(path, 'needs Django 2') def test_included_urls_django2_mixed(self): nested_patterns = [ path('path', dummy_view) @@ -168,7 +161,6 @@ class FormatSuffixTests(TestCase): ] self._test_included_urls(urlpatterns) - @unittest.skipUnless(path, 'needs Django 2') def test_included_urls_django2_mixed_args(self): nested_patterns = [ path('path/', dummy_view), @@ -216,7 +208,6 @@ class FormatSuffixTests(TestCase): ] self._test_allowed_formats(urlpatterns) - @unittest.skipUnless(path, 'needs Django 2') def test_allowed_formats_django2(self): urlpatterns = [ path('test', dummy_view), From 410575dace9d64a53ec771ea5e21b40525ed0e95 Mon Sep 17 00:00:00 2001 From: Adam Johnson Date: Tue, 8 Sep 2020 15:32:27 +0100 Subject: [PATCH 23/66] Replace all url() calls with path() or re_path() (#7512) * url() is deprecated in Django 3.1 * update given feedbacks on url() is deprecated in Django 3.1 * Fix test_urlpatterns.py to continue testing mixed re_path() and path() * Fix one missed reference Co-authored-by: sanjusci --- docs/api-guide/authentication.md | 4 +- docs/api-guide/filtering.md | 2 +- docs/api-guide/format-suffixes.md | 6 +- docs/api-guide/generic-views.md | 2 +- docs/api-guide/parsers.md | 2 +- docs/api-guide/routers.md | 14 ++--- docs/api-guide/schemas.md | 2 +- docs/community/3.5-announcement.md | 6 +- docs/community/3.6-announcement.md | 2 +- docs/community/3.9-announcement.md | 3 +- docs/coreapi/from-documenting-your-api.md | 4 +- docs/coreapi/schemas.md | 9 +-- docs/index.md | 2 +- docs/topics/api-clients.md | 2 +- .../4-authentication-and-permissions.md | 2 +- .../templates/rest_framework/docs/error.html | 2 +- rest_framework/urls.py | 2 +- rest_framework/versioning.py | 12 ++-- tests/authentication/test_authentication.py | 30 ++++----- tests/browsable_api/auth_urls.py | 6 +- tests/browsable_api/no_auth_urls.py | 4 +- .../test_browsable_nested_api.py | 4 +- tests/schemas/test_coreapi.py | 61 +++++++++--------- tests/schemas/test_managementcommand.py | 4 +- tests/schemas/test_openapi.py | 40 ++++++------ tests/test_api_client.py | 16 ++--- tests/test_atomic_requests.py | 4 +- tests/test_fields.py | 2 +- tests/test_htmlrenderer.py | 8 +-- tests/test_lazy_hyperlinks.py | 4 +- tests/test_metadata.py | 3 +- tests/test_middleware.py | 6 +- tests/test_relations.py | 4 +- tests/test_relations_hyperlink.py | 18 +++--- tests/test_renderers.py | 20 +++--- tests/test_request.py | 8 +-- tests/test_requests_client.py | 10 +-- tests/test_response.py | 20 +++--- tests/test_reverse.py | 5 +- tests/test_routers.py | 23 ++++--- tests/test_testing.py | 12 ++-- tests/test_urlpatterns.py | 63 +++++++------------ tests/test_utils.py | 14 ++--- tests/test_versioning.py | 30 ++++----- tests/test_viewsets.py | 4 +- tests/urls.py | 4 +- 46 files changed, 243 insertions(+), 262 deletions(-) diff --git a/docs/api-guide/authentication.md b/docs/api-guide/authentication.md index ebb0ab4d6..5878040a4 100644 --- a/docs/api-guide/authentication.md +++ b/docs/api-guide/authentication.md @@ -199,7 +199,7 @@ When using `TokenAuthentication`, you may want to provide a mechanism for client from rest_framework.authtoken import views urlpatterns += [ - url(r'^api-token-auth/', views.obtain_auth_token) + path('api-token-auth/', views.obtain_auth_token) ] Note that the URL part of the pattern can be whatever you want to use. @@ -238,7 +238,7 @@ For example, you may return additional user information beyond the `token` value And in your `urls.py`: urlpatterns += [ - url(r'^api-token-auth/', CustomAuthToken.as_view()) + path('api-token-auth/', CustomAuthToken.as_view()) ] diff --git a/docs/api-guide/filtering.md b/docs/api-guide/filtering.md index 8e3bd9ef5..41c1341dd 100644 --- a/docs/api-guide/filtering.md +++ b/docs/api-guide/filtering.md @@ -45,7 +45,7 @@ Another style of filtering might involve restricting the queryset based on some For example if your URL config contained an entry like this: - url('^purchases/(?P.+)/$', PurchaseList.as_view()), + re_path('^purchases/(?P.+)/$', PurchaseList.as_view()), You could then write a view that returned a purchase queryset filtered by the username portion of the URL: diff --git a/docs/api-guide/format-suffixes.md b/docs/api-guide/format-suffixes.md index 04467b3d3..dfdf24953 100644 --- a/docs/api-guide/format-suffixes.md +++ b/docs/api-guide/format-suffixes.md @@ -32,9 +32,9 @@ Example: from blog import views urlpatterns = [ - url(r'^/$', views.apt_root), - url(r'^comments/$', views.comment_list), - url(r'^comments/(?P[0-9]+)/$', views.comment_detail) + path('', views.apt_root), + path('comments/', views.comment_list), + path('comments//', views.comment_detail) ] urlpatterns = format_suffix_patterns(urlpatterns, allowed=['json', 'html']) diff --git a/docs/api-guide/generic-views.md b/docs/api-guide/generic-views.md index 4ff549f07..afc2cab56 100644 --- a/docs/api-guide/generic-views.md +++ b/docs/api-guide/generic-views.md @@ -45,7 +45,7 @@ For more complex cases you might also want to override various methods on the vi For very simple cases you might want to pass through any class attributes using the `.as_view()` method. For example, your URLconf might include something like the following entry: - url(r'^/users/', ListCreateAPIView.as_view(queryset=User.objects.all(), serializer_class=UserSerializer), name='user-list') + path('users/', ListCreateAPIView.as_view(queryset=User.objects.all(), serializer_class=UserSerializer), name='user-list') --- diff --git a/docs/api-guide/parsers.md b/docs/api-guide/parsers.md index a3bc74a2b..e8f03de8b 100644 --- a/docs/api-guide/parsers.md +++ b/docs/api-guide/parsers.md @@ -125,7 +125,7 @@ If it is called without a `filename` URL keyword argument, then the client must # urls.py urlpatterns = [ # ... - url(r'^upload/(?P[^/]+)$', FileUploadView.as_view()) + re_path(r'^upload/(?P[^/]+)$', FileUploadView.as_view()) ] --- diff --git a/docs/api-guide/routers.md b/docs/api-guide/routers.md index 5f6802222..8d8594eee 100644 --- a/docs/api-guide/routers.md +++ b/docs/api-guide/routers.md @@ -63,7 +63,7 @@ For example, you can append `router.urls` to a list of existing views... router.register(r'accounts', AccountViewSet) urlpatterns = [ - url(r'^forgot-password/$', ForgotPasswordFormView.as_view()), + path('forgot-password/', ForgotPasswordFormView.as_view()), ] urlpatterns += router.urls @@ -71,22 +71,22 @@ For example, you can append `router.urls` to a list of existing views... Alternatively you can use Django's `include` function, like so... urlpatterns = [ - url(r'^forgot-password/$', ForgotPasswordFormView.as_view()), - url(r'^', include(router.urls)), + path('forgot-password', ForgotPasswordFormView.as_view()), + path('', include(router.urls)), ] You may use `include` with an application namespace: urlpatterns = [ - url(r'^forgot-password/$', ForgotPasswordFormView.as_view()), - url(r'^api/', include((router.urls, 'app_name'))), + path('forgot-password/', ForgotPasswordFormView.as_view()), + path('api/', include((router.urls, 'app_name'))), ] Or both an application and instance namespace: urlpatterns = [ - url(r'^forgot-password/$', ForgotPasswordFormView.as_view()), - url(r'^api/', include((router.urls, 'app_name'), namespace='instance_name')), + path('forgot-password/', ForgotPasswordFormView.as_view()), + path('api/', include((router.urls, 'app_name'), namespace='instance_name')), ] See Django's [URL namespaces docs][url-namespace-docs] and the [`include` API reference][include-api-reference] for more details. diff --git a/docs/api-guide/schemas.md b/docs/api-guide/schemas.md index 402315ef9..e39cd21a8 100644 --- a/docs/api-guide/schemas.md +++ b/docs/api-guide/schemas.md @@ -114,7 +114,7 @@ The `get_schema_view()` helper takes the following keyword arguments: only want the `myproject.api` urls to be exposed in the schema: schema_url_patterns = [ - url(r'^api/', include('myproject.api.urls')), + path('api/', include('myproject.api.urls')), ] schema_view = get_schema_view( diff --git a/docs/community/3.5-announcement.md b/docs/community/3.5-announcement.md index cce2dd050..91bfce428 100644 --- a/docs/community/3.5-announcement.md +++ b/docs/community/3.5-announcement.md @@ -69,7 +69,7 @@ schema_view = get_schema_view( ) urlpatterns = [ - url(r'^swagger/$', schema_view), + path('swagger/', schema_view), ... ] ``` @@ -198,8 +198,8 @@ Make sure to include the view before your router urls. For example: schema_view = get_schema_view(title='Example API') urlpatterns = [ - url('^$', schema_view), - url(r'^', include(router.urls)), + path('', schema_view), + path('', include(router.urls)), ] ### Schema path representations diff --git a/docs/community/3.6-announcement.md b/docs/community/3.6-announcement.md index c41ad8ecb..35704eb58 100644 --- a/docs/community/3.6-announcement.md +++ b/docs/community/3.6-announcement.md @@ -73,7 +73,7 @@ To install the API documentation, you'll need to include it in your projects URL urlpatterns = [ ... - url(r'^docs/', include_docs_urls(title=API_TITLE, description=API_DESCRIPTION)) + path('docs/', include_docs_urls(title=API_TITLE, description=API_DESCRIPTION)) ] Once installed you should see something a little like this: diff --git a/docs/community/3.9-announcement.md b/docs/community/3.9-announcement.md index 1cf4464d6..fee6e6909 100644 --- a/docs/community/3.9-announcement.md +++ b/docs/community/3.9-announcement.md @@ -62,6 +62,7 @@ Here's an example of adding an OpenAPI schema to the URL conf: ```python from rest_framework.schemas import get_schema_view from rest_framework.renderers import JSONOpenAPIRenderer +from django.urls import path schema_view = get_schema_view( title='Server Monitoring API', @@ -70,7 +71,7 @@ schema_view = get_schema_view( ) urlpatterns = [ - url('^schema.json$', schema_view), + path('schema.json', schema_view), ... ] ``` diff --git a/docs/coreapi/from-documenting-your-api.md b/docs/coreapi/from-documenting-your-api.md index 9ac3be686..604dfa668 100644 --- a/docs/coreapi/from-documenting-your-api.md +++ b/docs/coreapi/from-documenting-your-api.md @@ -19,7 +19,7 @@ To install the API documentation, you'll need to include it in your project's UR urlpatterns = [ ... - url(r'^docs/', include_docs_urls(title='My API title')) + path('docs/', include_docs_urls(title='My API title')) ] This will include two different views: @@ -41,7 +41,7 @@ You may ensure views are given a `request` instance by calling `include_docs_url urlpatterns = [ ... # Generate schema with valid `request` instance: - url(r'^docs/', include_docs_urls(title='My API title', public=False)) + path('docs/', include_docs_urls(title='My API title', public=False)) ] diff --git a/docs/coreapi/schemas.md b/docs/coreapi/schemas.md index 69606f853..e7a418b80 100644 --- a/docs/coreapi/schemas.md +++ b/docs/coreapi/schemas.md @@ -43,11 +43,12 @@ To add a dynamically generated schema view to your API, use `get_schema_view`. ```python from rest_framework.schemas import get_schema_view +from django.urls import path schema_view = get_schema_view(title="Example API") urlpatterns = [ - url('^schema$', schema_view), + path('schema', schema_view), ... ] ``` @@ -292,7 +293,7 @@ The simplest way to include a schema in your project is to use the schema_view = get_schema_view(title="Server Monitoring API") urlpatterns = [ - url('^$', schema_view), + path('', schema_view), ... ] @@ -358,7 +359,7 @@ List of url patterns to limit the schema introspection to. If you only want the to be exposed in the schema: schema_url_patterns = [ - url(r'^api/', include('myproject.api.urls')), + path('api/', include('myproject.api.urls')), ] schema_view = get_schema_view( @@ -411,7 +412,7 @@ return the schema. **urls.py:** urlpatterns = [ - url('/', schema_view), + path('', schema_view), ... ] diff --git a/docs/index.md b/docs/index.md index c7b78e9c3..54654c7c5 100644 --- a/docs/index.md +++ b/docs/index.md @@ -120,7 +120,7 @@ If you're intending to use the browsable API you'll probably also want to add RE urlpatterns = [ ... - url(r'^api-auth/', include('rest_framework.urls')) + path('api-auth/', include('rest_framework.urls')) ] Note that the URL path can be whatever you want. diff --git a/docs/topics/api-clients.md b/docs/topics/api-clients.md index b020c380a..9b61eaf42 100644 --- a/docs/topics/api-clients.md +++ b/docs/topics/api-clients.md @@ -384,7 +384,7 @@ First, install the API documentation views. These will include the schema resour urlpatterns = [ ... - url(r'^docs/', include_docs_urls(title='My API service'), name='api-docs'), + path('docs/', include_docs_urls(title='My API service'), name='api-docs'), ] Once the API documentation URLs are installed, you'll be able to include both the required JavaScript resources. Note that the ordering of these two lines is important, as the schema loading requires CoreAPI to already be installed. diff --git a/docs/tutorial/4-authentication-and-permissions.md b/docs/tutorial/4-authentication-and-permissions.md index 6808780fa..79ce355c9 100644 --- a/docs/tutorial/4-authentication-and-permissions.md +++ b/docs/tutorial/4-authentication-and-permissions.md @@ -137,7 +137,7 @@ We can add a login view for use with the browsable API, by editing the URLconf i Add the following import at the top of the file: - from django.conf.urls import include + from django.urls import path, include And, at the end of the file, add a pattern to include the login and logout views for the browsable API. diff --git a/rest_framework/templates/rest_framework/docs/error.html b/rest_framework/templates/rest_framework/docs/error.html index 6afc4a88b..694f88a15 100644 --- a/rest_framework/templates/rest_framework/docs/error.html +++ b/rest_framework/templates/rest_framework/docs/error.html @@ -48,7 +48,7 @@ being applied unexpectedly?

    when including the docs urls:

    -   url(r'^docs/', include_docs_urls(title='Your API',
    +   path('docs/', include_docs_urls(title='Your API',
                                         authentication_classes=[],
                                         permission_classes=[])),
     
    diff --git a/rest_framework/urls.py b/rest_framework/urls.py index d9b858ebc..0aa301332 100644 --- a/rest_framework/urls.py +++ b/rest_framework/urls.py @@ -6,7 +6,7 @@ your API requires authentication: urlpatterns = [ ... - url(r'^auth/', include('rest_framework.urls')) + path('auth/', include('rest_framework.urls')) ] You should make sure your authentication settings include `SessionAuthentication`. diff --git a/rest_framework/versioning.py b/rest_framework/versioning.py index 8c35a1a58..78cfc9dc8 100644 --- a/rest_framework/versioning.py +++ b/rest_framework/versioning.py @@ -60,8 +60,8 @@ class URLPathVersioning(BaseVersioning): An example URL conf for two views that accept two different versions. urlpatterns = [ - url(r'^(?P[v1|v2]+)/users/$', users_list, name='users-list'), - url(r'^(?P[v1|v2]+)/users/(?P[0-9]+)/$', users_detail, name='users-detail') + re_path(r'^(?P[v1|v2]+)/users/$', users_list, name='users-list'), + re_path(r'^(?P[v1|v2]+)/users/(?P[0-9]+)/$', users_detail, name='users-detail') ] GET /1.0/something/ HTTP/1.1 @@ -99,14 +99,14 @@ class NamespaceVersioning(BaseVersioning): # users/urls.py urlpatterns = [ - url(r'^/users/$', users_list, name='users-list'), - url(r'^/users/(?P[0-9]+)/$', users_detail, name='users-detail') + path('/users/', users_list, name='users-list'), + path('/users//', users_detail, name='users-detail') ] # urls.py urlpatterns = [ - url(r'^v1/', include('users.urls', namespace='v1')), - url(r'^v2/', include('users.urls', namespace='v2')) + path('v1/', include('users.urls', namespace='v1')), + path('v2/', include('users.urls', namespace='v2')) ] GET /1.0/something/ HTTP/1.1 diff --git a/tests/authentication/test_authentication.py b/tests/authentication/test_authentication.py index e872fa744..a73e0d79c 100644 --- a/tests/authentication/test_authentication.py +++ b/tests/authentication/test_authentication.py @@ -2,10 +2,10 @@ import base64 import pytest from django.conf import settings -from django.conf.urls import include, url from django.contrib.auth.models import User from django.http import HttpResponse from django.test import TestCase, override_settings +from django.urls import include, path from rest_framework import ( HTTP_HEADER_ENCODING, exceptions, permissions, renderers, status @@ -47,34 +47,34 @@ class MockView(APIView): urlpatterns = [ - url( - r'^session/$', + path( + 'session/', MockView.as_view(authentication_classes=[SessionAuthentication]) ), - url( - r'^basic/$', + path( + 'basic/', MockView.as_view(authentication_classes=[BasicAuthentication]) ), - url( - r'^remote-user/$', + path( + 'remote-user/', MockView.as_view(authentication_classes=[RemoteUserAuthentication]) ), - url( - r'^token/$', + path( + 'token/', MockView.as_view(authentication_classes=[TokenAuthentication]) ), - url( - r'^customtoken/$', + path( + 'customtoken/', MockView.as_view(authentication_classes=[CustomTokenAuthentication]) ), - url( - r'^customkeywordtoken/$', + path( + 'customkeywordtoken/', MockView.as_view( authentication_classes=[CustomKeywordTokenAuthentication] ) ), - url(r'^auth-token/$', obtain_auth_token), - url(r'^auth/', include('rest_framework.urls', namespace='rest_framework')), + path('auth-token/', obtain_auth_token), + path('auth/', include('rest_framework.urls', namespace='rest_framework')), ] diff --git a/tests/browsable_api/auth_urls.py b/tests/browsable_api/auth_urls.py index 7530c5e40..151278cbd 100644 --- a/tests/browsable_api/auth_urls.py +++ b/tests/browsable_api/auth_urls.py @@ -1,8 +1,8 @@ -from django.conf.urls import include, url +from django.urls import include, path from .views import MockView urlpatterns = [ - url(r'^$', MockView.as_view()), - url(r'^auth/', include('rest_framework.urls', namespace='rest_framework')), + path('', MockView.as_view()), + path('auth/', include('rest_framework.urls', namespace='rest_framework')), ] diff --git a/tests/browsable_api/no_auth_urls.py b/tests/browsable_api/no_auth_urls.py index 348bfe1c0..65701c065 100644 --- a/tests/browsable_api/no_auth_urls.py +++ b/tests/browsable_api/no_auth_urls.py @@ -1,7 +1,7 @@ -from django.conf.urls import url +from django.urls import path from .views import MockView urlpatterns = [ - url(r'^$', MockView.as_view()), + path('', MockView.as_view()), ] diff --git a/tests/browsable_api/test_browsable_nested_api.py b/tests/browsable_api/test_browsable_nested_api.py index f945d2a43..a6c2ee6bd 100644 --- a/tests/browsable_api/test_browsable_nested_api.py +++ b/tests/browsable_api/test_browsable_nested_api.py @@ -1,6 +1,6 @@ -from django.conf.urls import url from django.test import TestCase from django.test.utils import override_settings +from django.urls import path from rest_framework import serializers from rest_framework.generics import ListCreateAPIView @@ -23,7 +23,7 @@ class NestedSerializersView(ListCreateAPIView): urlpatterns = [ - url(r'^api/$', NestedSerializersView.as_view(), name='api'), + path('api/', NestedSerializersView.as_view(), name='api'), ] diff --git a/tests/schemas/test_coreapi.py b/tests/schemas/test_coreapi.py index 5f646258b..7b1f15fef 100644 --- a/tests/schemas/test_coreapi.py +++ b/tests/schemas/test_coreapi.py @@ -1,11 +1,10 @@ import unittest import pytest -from django.conf.urls import include, url from django.core.exceptions import PermissionDenied from django.http import Http404 from django.test import TestCase, override_settings -from django.urls import path +from django.urls import include, path from rest_framework import ( filters, generics, pagination, permissions, serializers @@ -145,8 +144,8 @@ with override_settings(REST_FRAMEWORK={'DEFAULT_SCHEMA_CLASS': 'rest_framework.s router = DefaultRouter() router.register('example', ExampleViewSet, basename='example') urlpatterns = [ - url(r'^$', schema_view), - url(r'^', include(router.urls)) + path('', schema_view), + path('', include(router.urls)) ] @@ -407,9 +406,9 @@ class ExampleDetailView(APIView): class TestSchemaGenerator(TestCase): def setUp(self): self.patterns = [ - url(r'^example/?$', views.ExampleListView.as_view()), - url(r'^example/(?P\d+)/?$', views.ExampleDetailView.as_view()), - url(r'^example/(?P\d+)/sub/?$', views.ExampleDetailView.as_view()), + path('example/', views.ExampleListView.as_view()), + path('example//', views.ExampleDetailView.as_view()), + path('example//sub/', views.ExampleDetailView.as_view()), ] def test_schema_for_regular_views(self): @@ -513,9 +512,9 @@ class TestSchemaGeneratorDjango2(TestCase): class TestSchemaGeneratorNotAtRoot(TestCase): def setUp(self): self.patterns = [ - url(r'^api/v1/example/?$', views.ExampleListView.as_view()), - url(r'^api/v1/example/(?P\d+)/?$', views.ExampleDetailView.as_view()), - url(r'^api/v1/example/(?P\d+)/sub/?$', views.ExampleDetailView.as_view()), + path('api/v1/example/', views.ExampleListView.as_view()), + path('api/v1/example//', views.ExampleDetailView.as_view()), + path('api/v1/example//sub/', views.ExampleDetailView.as_view()), ] def test_schema_for_regular_views(self): @@ -569,7 +568,7 @@ class TestSchemaGeneratorWithMethodLimitedViewSets(TestCase): router = DefaultRouter() router.register('example1', MethodLimitedViewSet, basename='example1') self.patterns = [ - url(r'^', include(router.urls)) + path('', include(router.urls)) ] def test_schema_for_regular_views(self): @@ -635,8 +634,8 @@ class TestSchemaGeneratorWithRestrictedViewSets(TestCase): router.register('example1', Http404ExampleViewSet, basename='example1') router.register('example2', PermissionDeniedExampleViewSet, basename='example2') self.patterns = [ - url('^example/?$', views.ExampleListView.as_view()), - url(r'^', include(router.urls)) + path('example/', views.ExampleListView.as_view()), + path('', include(router.urls)) ] def test_schema_for_regular_views(self): @@ -679,7 +678,7 @@ class ForeignKeySourceView(generics.CreateAPIView): class TestSchemaGeneratorWithForeignKey(TestCase): def setUp(self): self.patterns = [ - url(r'^example/?$', ForeignKeySourceView.as_view()), + path('example/', ForeignKeySourceView.as_view()), ] def test_schema_for_regular_views(self): @@ -725,7 +724,7 @@ class ManyToManySourceView(generics.CreateAPIView): class TestSchemaGeneratorWithManyToMany(TestCase): def setUp(self): self.patterns = [ - url(r'^example/?$', ManyToManySourceView.as_view()), + path('example/', ManyToManySourceView.as_view()), ] def test_schema_for_regular_views(self): @@ -1041,9 +1040,9 @@ with override_settings(REST_FRAMEWORK={'DEFAULT_SCHEMA_CLASS': 'rest_framework.s class SchemaGenerationExclusionTests(TestCase): def setUp(self): self.patterns = [ - url('^excluded-cbv/$', ExcludedAPIView.as_view()), - url('^excluded-fbv/$', excluded_fbv), - url('^included-fbv/$', included_fbv), + path('excluded-cbv/', ExcludedAPIView.as_view()), + path('excluded-fbv/', excluded_fbv), + path('included-fbv/', included_fbv), ] def test_schema_generator_excludes_correctly(self): @@ -1136,8 +1135,8 @@ class TestURLNamingCollisions(TestCase): pass patterns = [ - url(r'^test', simple_fbv), - url(r'^test/list/', simple_fbv), + path('test', simple_fbv), + path('test/list/', simple_fbv), ] generator = SchemaGenerator(title='Naming Colisions', patterns=patterns) @@ -1173,14 +1172,14 @@ class TestURLNamingCollisions(TestCase): def test_manually_routing_generic_view(self): patterns = [ - url(r'^test', NamingCollisionView.as_view()), - url(r'^test/retrieve/', NamingCollisionView.as_view()), - url(r'^test/update/', NamingCollisionView.as_view()), + path('test', NamingCollisionView.as_view()), + path('test/retrieve/', NamingCollisionView.as_view()), + path('test/update/', NamingCollisionView.as_view()), # Fails with method names: - url(r'^test/get/', NamingCollisionView.as_view()), - url(r'^test/put/', NamingCollisionView.as_view()), - url(r'^test/delete/', NamingCollisionView.as_view()), + path('test/get/', NamingCollisionView.as_view()), + path('test/put/', NamingCollisionView.as_view()), + path('test/delete/', NamingCollisionView.as_view()), ] generator = SchemaGenerator(title='Naming Colisions', patterns=patterns) @@ -1196,7 +1195,7 @@ class TestURLNamingCollisions(TestCase): def test_from_router(self): patterns = [ - url(r'from-router', include(naming_collisions_router.urls)), + path('from-router', include(naming_collisions_router.urls)), ] generator = SchemaGenerator(title='Naming Colisions', patterns=patterns) @@ -1228,8 +1227,8 @@ class TestURLNamingCollisions(TestCase): def test_url_under_same_key_not_replaced(self): patterns = [ - url(r'example/(?P\d+)/$', BasicNamingCollisionView.as_view()), - url(r'example/(?P\w+)/$', BasicNamingCollisionView.as_view()), + path('example//', BasicNamingCollisionView.as_view()), + path('example//', BasicNamingCollisionView.as_view()), ] generator = SchemaGenerator(title='Naming Colisions', patterns=patterns) @@ -1245,8 +1244,8 @@ class TestURLNamingCollisions(TestCase): pass patterns = [ - url(r'^test/list/', simple_fbv), - url(r'^test/(?P\d+)/list/', simple_fbv), + path('test/list/', simple_fbv), + path('test//list/', simple_fbv), ] generator = SchemaGenerator(title='Naming Colisions', patterns=patterns) diff --git a/tests/schemas/test_managementcommand.py b/tests/schemas/test_managementcommand.py index 115f871e5..645eaf91d 100644 --- a/tests/schemas/test_managementcommand.py +++ b/tests/schemas/test_managementcommand.py @@ -3,10 +3,10 @@ import os import tempfile import pytest -from django.conf.urls import url from django.core.management import call_command from django.test import TestCase from django.test.utils import override_settings +from django.urls import path from rest_framework.compat import uritemplate, yaml from rest_framework.management.commands import generateschema @@ -20,7 +20,7 @@ class FooView(APIView): urlpatterns = [ - url(r'^$', FooView.as_view()) + path('', FooView.as_view()) ] diff --git a/tests/schemas/test_openapi.py b/tests/schemas/test_openapi.py index d483f3d45..8ea910dc1 100644 --- a/tests/schemas/test_openapi.py +++ b/tests/schemas/test_openapi.py @@ -2,8 +2,8 @@ import uuid import warnings import pytest -from django.conf.urls import url from django.test import RequestFactory, TestCase, override_settings +from django.urls import path from django.utils.translation import gettext_lazy as _ from rest_framework import filters, generics, pagination, routers, serializers @@ -719,8 +719,8 @@ class TestOperationIntrospection(TestCase): def test_duplicate_operation_id(self): patterns = [ - url(r'^duplicate1/?$', views.ExampleOperationIdDuplicate1.as_view()), - url(r'^duplicate2/?$', views.ExampleOperationIdDuplicate2.as_view()), + path('duplicate1/', views.ExampleOperationIdDuplicate1.as_view()), + path('duplicate2/', views.ExampleOperationIdDuplicate2.as_view()), ] generator = SchemaGenerator(patterns=patterns) @@ -874,7 +874,7 @@ class TestOperationIntrospection(TestCase): schema = AutoSchema(tags=['example1', 'example2']) url_patterns = [ - url(r'^test/?$', ExampleStringTagsViewSet.as_view()), + path('test/', ExampleStringTagsViewSet.as_view()), ] generator = SchemaGenerator(patterns=url_patterns) schema = generator.get_schema(request=create_request('/')) @@ -911,8 +911,8 @@ class TestOperationIntrospection(TestCase): pass url_patterns = [ - url(r'^any-dash_underscore/?$', RestaurantAPIView.as_view()), - url(r'^restaurants/branches/?$', BranchAPIView.as_view()) + path('any-dash_underscore/', RestaurantAPIView.as_view()), + path('restaurants/branches/', BranchAPIView.as_view()) ] generator = SchemaGenerator(patterns=url_patterns) schema = generator.get_schema(request=create_request('/')) @@ -930,7 +930,7 @@ class TestGenerator(TestCase): def test_paths_construction(self): """Construction of the `paths` key.""" patterns = [ - url(r'^example/?$', views.ExampleListView.as_view()), + path('example/', views.ExampleListView.as_view()), ] generator = SchemaGenerator(patterns=patterns) generator._initialise_endpoints() @@ -946,8 +946,8 @@ class TestGenerator(TestCase): def test_prefixed_paths_construction(self): """Construction of the `paths` key maintains a common prefix.""" patterns = [ - url(r'^v1/example/?$', views.ExampleListView.as_view()), - url(r'^v1/example/{pk}/?$', views.ExampleDetailView.as_view()), + path('v1/example/', views.ExampleListView.as_view()), + path('v1/example/{pk}/', views.ExampleDetailView.as_view()), ] generator = SchemaGenerator(patterns=patterns) generator._initialise_endpoints() @@ -959,8 +959,8 @@ class TestGenerator(TestCase): def test_mount_url_prefixed_to_paths(self): patterns = [ - url(r'^example/?$', views.ExampleListView.as_view()), - url(r'^example/{pk}/?$', views.ExampleDetailView.as_view()), + path('example/', views.ExampleListView.as_view()), + path('example/{pk}/', views.ExampleDetailView.as_view()), ] generator = SchemaGenerator(patterns=patterns, url='/api') generator._initialise_endpoints() @@ -973,7 +973,7 @@ class TestGenerator(TestCase): def test_schema_construction(self): """Construction of the top level dictionary.""" patterns = [ - url(r'^example/?$', views.ExampleListView.as_view()), + path('example/', views.ExampleListView.as_view()), ] generator = SchemaGenerator(patterns=patterns) @@ -995,7 +995,7 @@ class TestGenerator(TestCase): def test_schema_information(self): """Construction of the top level dictionary.""" patterns = [ - url(r'^example/?$', views.ExampleListView.as_view()), + path('example/', views.ExampleListView.as_view()), ] generator = SchemaGenerator(patterns=patterns, title='My title', version='1.2.3', description='My description') @@ -1009,7 +1009,7 @@ class TestGenerator(TestCase): def test_schema_information_empty(self): """Construction of the top level dictionary.""" patterns = [ - url(r'^example/?$', views.ExampleListView.as_view()), + path('example/', views.ExampleListView.as_view()), ] generator = SchemaGenerator(patterns=patterns) @@ -1022,7 +1022,7 @@ class TestGenerator(TestCase): def test_serializer_model(self): """Construction of the top level dictionary.""" patterns = [ - url(r'^example/?$', views.ExampleGenericAPIViewModel.as_view()), + path('example/', views.ExampleGenericAPIViewModel.as_view()), ] generator = SchemaGenerator(patterns=patterns) @@ -1038,7 +1038,7 @@ class TestGenerator(TestCase): def test_authtoken_serializer(self): patterns = [ - url(r'^api-token-auth/', obtain_auth_token) + path('api-token-auth/', obtain_auth_token) ] generator = SchemaGenerator(patterns=patterns) @@ -1065,7 +1065,7 @@ class TestGenerator(TestCase): def test_component_name(self): patterns = [ - url(r'^example/?$', views.ExampleAutoSchemaComponentName.as_view()), + path('example/', views.ExampleAutoSchemaComponentName.as_view()), ] generator = SchemaGenerator(patterns=patterns) @@ -1080,8 +1080,8 @@ class TestGenerator(TestCase): def test_duplicate_component_name(self): patterns = [ - url(r'^duplicate1/?$', views.ExampleAutoSchemaDuplicate1.as_view()), - url(r'^duplicate2/?$', views.ExampleAutoSchemaDuplicate2.as_view()), + path('duplicate1/', views.ExampleAutoSchemaDuplicate1.as_view()), + path('duplicate2/', views.ExampleAutoSchemaDuplicate2.as_view()), ] generator = SchemaGenerator(patterns=patterns) @@ -1104,7 +1104,7 @@ class TestGenerator(TestCase): schema = AutoSchema(operation_id_base='example') url_patterns = [ - url(r'^example/?$', ExampleView.as_view()), + path('example/', ExampleView.as_view()), ] generator = SchemaGenerator(patterns=url_patterns) schema = generator.get_schema(request=create_request('/')) diff --git a/tests/test_api_client.py b/tests/test_api_client.py index 74a3579e2..976f10ed1 100644 --- a/tests/test_api_client.py +++ b/tests/test_api_client.py @@ -2,9 +2,9 @@ import os import tempfile import unittest -from django.conf.urls import url from django.http import HttpResponse from django.test import override_settings +from django.urls import path, re_path from rest_framework.compat import coreapi, coreschema from rest_framework.parsers import FileUploadParser @@ -178,13 +178,13 @@ class HeadersView(APIView): urlpatterns = [ - url(r'^$', SchemaView.as_view()), - url(r'^example/$', ListView.as_view()), - url(r'^example/(?P[0-9]+)/$', DetailView.as_view()), - url(r'^upload/$', UploadView.as_view()), - url(r'^download/$', DownloadView.as_view()), - url(r'^text/$', TextView.as_view()), - url(r'^headers/$', HeadersView.as_view()), + path('', SchemaView.as_view()), + path('example/', ListView.as_view()), + re_path(r'^example/(?P[0-9]+)/$', DetailView.as_view()), + path('upload/', UploadView.as_view()), + path('download/', DownloadView.as_view()), + path('text/', TextView.as_view()), + path('headers/', HeadersView.as_view()), ] diff --git a/tests/test_atomic_requests.py b/tests/test_atomic_requests.py index de04d2c06..15b41e02f 100644 --- a/tests/test_atomic_requests.py +++ b/tests/test_atomic_requests.py @@ -1,9 +1,9 @@ import unittest -from django.conf.urls import url from django.db import connection, connections, transaction from django.http import Http404 from django.test import TestCase, TransactionTestCase, override_settings +from django.urls import path from rest_framework import status from rest_framework.exceptions import APIException @@ -44,7 +44,7 @@ class NonAtomicAPIExceptionView(APIView): urlpatterns = ( - url(r'^$', NonAtomicAPIExceptionView.as_view()), + path('', NonAtomicAPIExceptionView.as_view()), ) diff --git a/tests/test_fields.py b/tests/test_fields.py index 506e75905..fdd570d8a 100644 --- a/tests/test_fields.py +++ b/tests/test_fields.py @@ -697,7 +697,7 @@ class TestNullBooleanField(TestBooleanField): None: None, 'other': True } - field = serializers.NullBooleanField() + field = serializers.BooleanField(allow_null=True) class TestNullableBooleanField(TestNullBooleanField): diff --git a/tests/test_htmlrenderer.py b/tests/test_htmlrenderer.py index e31a9ced5..fa0f4efc6 100644 --- a/tests/test_htmlrenderer.py +++ b/tests/test_htmlrenderer.py @@ -1,10 +1,10 @@ import django.template.loader import pytest -from django.conf.urls import url from django.core.exceptions import ImproperlyConfigured, PermissionDenied from django.http import Http404 from django.template import TemplateDoesNotExist, engines from django.test import TestCase, override_settings +from django.urls import path from rest_framework import status from rest_framework.decorators import api_view, renderer_classes @@ -35,9 +35,9 @@ def not_found(request): urlpatterns = [ - url(r'^$', example), - url(r'^permission_denied$', permission_denied), - url(r'^not_found$', not_found), + path('', example), + path('permission_denied', permission_denied), + path('not_found', not_found), ] diff --git a/tests/test_lazy_hyperlinks.py b/tests/test_lazy_hyperlinks.py index cf3ee735f..716d02d2a 100644 --- a/tests/test_lazy_hyperlinks.py +++ b/tests/test_lazy_hyperlinks.py @@ -1,6 +1,6 @@ -from django.conf.urls import url from django.db import models from django.test import TestCase, override_settings +from django.urls import path from rest_framework import serializers from rest_framework.renderers import JSONRenderer @@ -29,7 +29,7 @@ def dummy_view(request): urlpatterns = [ - url(r'^example/(?P[0-9]+)/$', dummy_view, name='example-detail'), + path('example//', dummy_view, name='example-detail'), ] diff --git a/tests/test_metadata.py b/tests/test_metadata.py index e1a1fd352..4abc0fc07 100644 --- a/tests/test_metadata.py +++ b/tests/test_metadata.py @@ -311,7 +311,8 @@ class TestMetadata: class TestSimpleMetadataFieldInfo(TestCase): def test_null_boolean_field_info_type(self): options = metadata.SimpleMetadata() - field_info = options.get_field_info(serializers.NullBooleanField()) + field_info = options.get_field_info(serializers.BooleanField( + allow_null=True)) assert field_info['type'] == 'boolean' def test_related_field_choices(self): diff --git a/tests/test_middleware.py b/tests/test_middleware.py index 28a5e558a..6b2c91db7 100644 --- a/tests/test_middleware.py +++ b/tests/test_middleware.py @@ -1,7 +1,7 @@ -from django.conf.urls import url from django.contrib.auth.models import User from django.http import HttpRequest from django.test import override_settings +from django.urls import path from rest_framework.authentication import TokenAuthentication from rest_framework.authtoken.models import Token @@ -17,8 +17,8 @@ class PostView(APIView): urlpatterns = [ - url(r'^auth$', APIView.as_view(authentication_classes=(TokenAuthentication,))), - url(r'^post$', PostView.as_view()), + path('auth', APIView.as_view(authentication_classes=(TokenAuthentication,))), + path('post', PostView.as_view()), ] diff --git a/tests/test_relations.py b/tests/test_relations.py index 9f05e3b31..92aeecf6c 100644 --- a/tests/test_relations.py +++ b/tests/test_relations.py @@ -2,9 +2,9 @@ import uuid import pytest from _pytest.monkeypatch import MonkeyPatch -from django.conf.urls import url from django.core.exceptions import ImproperlyConfigured, ObjectDoesNotExist from django.test import override_settings +from django.urls import re_path from django.utils.datastructures import MultiValueDict from rest_framework import relations, serializers @@ -146,7 +146,7 @@ class TestProxiedPrimaryKeyRelatedField(APISimpleTestCase): urlpatterns = [ - url(r'^example/(?P.+)/$', lambda: None, name='example'), + re_path(r'^example/(?P.+)/$', lambda: None, name='example'), ] diff --git a/tests/test_relations_hyperlink.py b/tests/test_relations_hyperlink.py index 5ad0e31ff..77e4cd95f 100644 --- a/tests/test_relations_hyperlink.py +++ b/tests/test_relations_hyperlink.py @@ -1,5 +1,5 @@ -from django.conf.urls import url from django.test import TestCase, override_settings +from django.urls import path from rest_framework import serializers from rest_framework.test import APIRequestFactory @@ -17,14 +17,14 @@ def dummy_view(request, pk): urlpatterns = [ - url(r'^dummyurl/(?P[0-9]+)/$', dummy_view, name='dummy-url'), - url(r'^manytomanysource/(?P[0-9]+)/$', dummy_view, name='manytomanysource-detail'), - url(r'^manytomanytarget/(?P[0-9]+)/$', dummy_view, name='manytomanytarget-detail'), - url(r'^foreignkeysource/(?P[0-9]+)/$', dummy_view, name='foreignkeysource-detail'), - url(r'^foreignkeytarget/(?P[0-9]+)/$', dummy_view, name='foreignkeytarget-detail'), - url(r'^nullableforeignkeysource/(?P[0-9]+)/$', dummy_view, name='nullableforeignkeysource-detail'), - url(r'^onetoonetarget/(?P[0-9]+)/$', dummy_view, name='onetoonetarget-detail'), - url(r'^nullableonetoonesource/(?P[0-9]+)/$', dummy_view, name='nullableonetoonesource-detail'), + path('dummyurl//', dummy_view, name='dummy-url'), + path('manytomanysource//', dummy_view, name='manytomanysource-detail'), + path('manytomanytarget//', dummy_view, name='manytomanytarget-detail'), + path('foreignkeysource//', dummy_view, name='foreignkeysource-detail'), + path('foreignkeytarget//', dummy_view, name='foreignkeytarget-detail'), + path('nullableforeignkeysource//', dummy_view, name='nullableforeignkeysource-detail'), + path('onetoonetarget//', dummy_view, name='onetoonetarget-detail'), + path('nullableonetoonesource//', dummy_view, name='nullableonetoonesource-detail'), ] diff --git a/tests/test_renderers.py b/tests/test_renderers.py index 71c5fb3f6..8271608e1 100644 --- a/tests/test_renderers.py +++ b/tests/test_renderers.py @@ -3,12 +3,12 @@ from collections import OrderedDict from collections.abc import MutableMapping import pytest -from django.conf.urls import include, url from django.core.cache import cache from django.db import models from django.http.request import HttpRequest from django.template import loader from django.test import TestCase, override_settings +from django.urls import include, path, re_path from django.utils.safestring import SafeText from django.utils.translation import gettext_lazy as _ @@ -111,14 +111,14 @@ class HTMLView1(APIView): urlpatterns = [ - url(r'^.*\.(?P.+)$', MockView.as_view(renderer_classes=[RendererA, RendererB])), - url(r'^$', MockView.as_view(renderer_classes=[RendererA, RendererB])), - url(r'^cache$', MockGETView.as_view()), - url(r'^parseerror$', MockPOSTView.as_view(renderer_classes=[JSONRenderer, BrowsableAPIRenderer])), - url(r'^html$', HTMLView.as_view()), - url(r'^html1$', HTMLView1.as_view()), - url(r'^empty$', EmptyGETView.as_view()), - url(r'^api', include('rest_framework.urls', namespace='rest_framework')) + re_path(r'^.*\.(?P.+)$', MockView.as_view(renderer_classes=[RendererA, RendererB])), + path('', MockView.as_view(renderer_classes=[RendererA, RendererB])), + path('cache', MockGETView.as_view()), + path('parseerror', MockPOSTView.as_view(renderer_classes=[JSONRenderer, BrowsableAPIRenderer])), + path('html', HTMLView.as_view()), + path('html1', HTMLView1.as_view()), + path('empty', EmptyGETView.as_view()), + path('api', include('rest_framework.urls', namespace='rest_framework')) ] @@ -637,7 +637,7 @@ class BrowsableAPIRendererTests(URLPatternsTestCase): router = SimpleRouter() router.register('examples', ExampleViewSet, basename='example') router.register('auth-examples', AuthExampleViewSet, basename='auth-example') - urlpatterns = [url(r'^api/', include(router.urls))] + urlpatterns = [path('api/', include(router.urls))] def setUp(self): self.renderer = BrowsableAPIRenderer() diff --git a/tests/test_request.py b/tests/test_request.py index be84fe5f9..4425c020f 100644 --- a/tests/test_request.py +++ b/tests/test_request.py @@ -5,7 +5,6 @@ import os.path import tempfile import pytest -from django.conf.urls import url from django.contrib.auth import authenticate, login, logout from django.contrib.auth.middleware import AuthenticationMiddleware from django.contrib.auth.models import User @@ -13,6 +12,7 @@ from django.contrib.sessions.middleware import SessionMiddleware from django.core.files.uploadedfile import SimpleUploadedFile from django.http.request import RawPostDataException from django.test import TestCase, override_settings +from django.urls import path from rest_framework import status from rest_framework.authentication import SessionAuthentication @@ -153,9 +153,9 @@ class FileUploadView(APIView): urlpatterns = [ - url(r'^$', MockView.as_view()), - url(r'^echo/$', EchoView.as_view()), - url(r'^upload/$', FileUploadView.as_view()) + path('', MockView.as_view()), + path('echo/', EchoView.as_view()), + path('upload/', FileUploadView.as_view()) ] diff --git a/tests/test_requests_client.py b/tests/test_requests_client.py index 59b388c5a..c8e7be6ee 100644 --- a/tests/test_requests_client.py +++ b/tests/test_requests_client.py @@ -1,10 +1,10 @@ import unittest -from django.conf.urls import url from django.contrib.auth import authenticate, login from django.contrib.auth.models import User from django.shortcuts import redirect from django.test import override_settings +from django.urls import path from django.utils.decorators import method_decorator from django.views.decorators.csrf import csrf_protect, ensure_csrf_cookie @@ -90,10 +90,10 @@ class AuthView(APIView): urlpatterns = [ - url(r'^$', Root.as_view(), name='root'), - url(r'^headers/$', HeadersView.as_view(), name='headers'), - url(r'^session/$', SessionView.as_view(), name='session'), - url(r'^auth/$', AuthView.as_view(), name='auth'), + path('', Root.as_view(), name='root'), + path('headers/', HeadersView.as_view(), name='headers'), + path('session/', SessionView.as_view(), name='session'), + path('auth/', AuthView.as_view(), name='auth'), ] diff --git a/tests/test_response.py b/tests/test_response.py index d3a56d01b..0d5528dc9 100644 --- a/tests/test_response.py +++ b/tests/test_response.py @@ -1,5 +1,5 @@ -from django.conf.urls import include, url from django.test import TestCase, override_settings +from django.urls import include, path, re_path from rest_framework import generics, routers, serializers, status, viewsets from rest_framework.parsers import JSONParser @@ -117,15 +117,15 @@ new_model_viewset_router.register(r'', HTMLNewModelViewSet) urlpatterns = [ - url(r'^setbyview$', MockViewSettingContentType.as_view(renderer_classes=[RendererA, RendererB, RendererC])), - url(r'^.*\.(?P.+)$', MockView.as_view(renderer_classes=[RendererA, RendererB, RendererC])), - url(r'^$', MockView.as_view(renderer_classes=[RendererA, RendererB, RendererC])), - url(r'^html$', HTMLView.as_view()), - url(r'^json$', JSONView.as_view()), - url(r'^html1$', HTMLView1.as_view()), - url(r'^html_new_model$', HTMLNewModelView.as_view()), - url(r'^html_new_model_viewset', include(new_model_viewset_router.urls)), - url(r'^restframework', include('rest_framework.urls', namespace='rest_framework')) + path('setbyview', MockViewSettingContentType.as_view(renderer_classes=[RendererA, RendererB, RendererC])), + re_path(r'^.*\.(?P.+)$', MockView.as_view(renderer_classes=[RendererA, RendererB, RendererC])), + path('', MockView.as_view(renderer_classes=[RendererA, RendererB, RendererC])), + path('html', HTMLView.as_view()), + path('json', JSONView.as_view()), + path('html1', HTMLView1.as_view()), + path('html_new_model', HTMLNewModelView.as_view()), + path('html_new_model_viewset', include(new_model_viewset_router.urls)), + path('restframework', include('rest_framework.urls', namespace='rest_framework')) ] diff --git a/tests/test_reverse.py b/tests/test_reverse.py index 9ab1667c5..b26b448c9 100644 --- a/tests/test_reverse.py +++ b/tests/test_reverse.py @@ -1,6 +1,5 @@ -from django.conf.urls import url from django.test import TestCase, override_settings -from django.urls import NoReverseMatch +from django.urls import NoReverseMatch, path from rest_framework.reverse import reverse from rest_framework.test import APIRequestFactory @@ -13,7 +12,7 @@ def null_view(request): urlpatterns = [ - url(r'^view$', null_view, name='view'), + path('view', null_view, name='view'), ] diff --git a/tests/test_routers.py b/tests/test_routers.py index 007cb4768..f767a843d 100644 --- a/tests/test_routers.py +++ b/tests/test_routers.py @@ -1,11 +1,10 @@ from collections import namedtuple import pytest -from django.conf.urls import include, url from django.core.exceptions import ImproperlyConfigured from django.db import models from django.test import TestCase, override_settings -from django.urls import resolve, reverse +from django.urls import include, path, resolve, reverse from rest_framework import permissions, serializers, viewsets from rest_framework.decorators import action @@ -118,7 +117,7 @@ class TestSimpleRouter(URLPatternsTestCase, TestCase): router.register('basics', BasicViewSet, basename='basic') urlpatterns = [ - url(r'^api/', include(router.urls)), + path('api/', include(router.urls)), ] def setUp(self): @@ -163,8 +162,8 @@ class TestSimpleRouter(URLPatternsTestCase, TestCase): class TestRootView(URLPatternsTestCase, TestCase): urlpatterns = [ - url(r'^non-namespaced/', include(namespaced_router.urls)), - url(r'^namespaced/', include((namespaced_router.urls, 'namespaced'), namespace='namespaced')), + path('non-namespaced/', include(namespaced_router.urls)), + path('namespaced/', include((namespaced_router.urls, 'namespaced'), namespace='namespaced')), ] def test_retrieve_namespaced_root(self): @@ -181,8 +180,8 @@ class TestCustomLookupFields(URLPatternsTestCase, TestCase): Ensure that custom lookup fields are correctly routed. """ urlpatterns = [ - url(r'^example/', include(notes_router.urls)), - url(r'^example2/', include(kwarged_notes_router.urls)), + path('example/', include(notes_router.urls)), + path('example2/', include(kwarged_notes_router.urls)), ] def setUp(self): @@ -238,8 +237,8 @@ class TestLookupUrlKwargs(URLPatternsTestCase, TestCase): Setup a deep lookup_field, but map it to a simple URL kwarg. """ urlpatterns = [ - url(r'^example/', include(notes_router.urls)), - url(r'^example2/', include(kwarged_notes_router.urls)), + path('example/', include(notes_router.urls)), + path('example2/', include(kwarged_notes_router.urls)), ] def setUp(self): @@ -426,7 +425,7 @@ class TestDynamicListAndDetailRouter(TestCase): class TestEmptyPrefix(URLPatternsTestCase, TestCase): urlpatterns = [ - url(r'^empty-prefix/', include(empty_prefix_router.urls)), + path('empty-prefix/', include(empty_prefix_router.urls)), ] def test_empty_prefix_list(self): @@ -443,7 +442,7 @@ class TestEmptyPrefix(URLPatternsTestCase, TestCase): class TestRegexUrlPath(URLPatternsTestCase, TestCase): urlpatterns = [ - url(r'^regex/', include(regex_url_path_router.urls)), + path('regex/', include(regex_url_path_router.urls)), ] def test_regex_url_path_list(self): @@ -462,7 +461,7 @@ class TestRegexUrlPath(URLPatternsTestCase, TestCase): class TestViewInitkwargs(URLPatternsTestCase, TestCase): urlpatterns = [ - url(r'^example/', include(notes_router.urls)), + path('example/', include(notes_router.urls)), ] def test_suffix(self): diff --git a/tests/test_testing.py b/tests/test_testing.py index 8094bfd8d..cc60e4f00 100644 --- a/tests/test_testing.py +++ b/tests/test_testing.py @@ -1,9 +1,9 @@ from io import BytesIO -from django.conf.urls import url from django.contrib.auth.models import User from django.shortcuts import redirect from django.test import TestCase, override_settings +from django.urls import path from rest_framework import fields, serializers from rest_framework.decorators import api_view @@ -47,10 +47,10 @@ def post_view(request): urlpatterns = [ - url(r'^view/$', view), - url(r'^session-view/$', session_view), - url(r'^redirect-view/$', redirect_view), - url(r'^post-view/$', post_view) + path('view/', view), + path('session-view/', session_view), + path('redirect-view/', redirect_view), + path('post-view/', post_view) ] @@ -284,7 +284,7 @@ class TestAPIRequestFactory(TestCase): class TestUrlPatternTestCase(URLPatternsTestCase): urlpatterns = [ - url(r'^$', view), + path('', view), ] @classmethod diff --git a/tests/test_urlpatterns.py b/tests/test_urlpatterns.py index 90820b532..adcd0a742 100644 --- a/tests/test_urlpatterns.py +++ b/tests/test_urlpatterns.py @@ -1,8 +1,7 @@ from collections import namedtuple -from django.conf.urls import include, url from django.test import TestCase -from django.urls import Resolver404, URLResolver, path, re_path +from django.urls import Resolver404, URLResolver, include, path, re_path from django.urls.resolvers import RegexPattern from rest_framework.test import APIRequestFactory @@ -61,7 +60,7 @@ class FormatSuffixTests(TestCase): def test_trailing_slash(self): urlpatterns = [ - url(r'^test/$', dummy_view), + path('test/', dummy_view), ] self._test_trailing_slash(urlpatterns) @@ -81,7 +80,7 @@ class FormatSuffixTests(TestCase): def test_format_suffix(self): urlpatterns = [ - url(r'^test$', dummy_view), + path('test', dummy_view), ] self._test_format_suffix(urlpatterns) @@ -116,7 +115,7 @@ class FormatSuffixTests(TestCase): def test_default_args(self): urlpatterns = [ - url(r'^test$', dummy_view, {'foo': 'bar'}), + path('test', dummy_view, {'foo': 'bar'}), ] self._test_default_args(urlpatterns) @@ -135,15 +134,6 @@ class FormatSuffixTests(TestCase): self._resolve_urlpatterns(urlpatterns, test_paths) def test_included_urls(self): - nested_patterns = [ - url(r'^path$', dummy_view) - ] - urlpatterns = [ - url(r'^test/', include(nested_patterns), {'foo': 'bar'}), - ] - self._test_included_urls(urlpatterns) - - def test_included_urls_django2(self): nested_patterns = [ path('path', dummy_view) ] @@ -152,44 +142,35 @@ class FormatSuffixTests(TestCase): ] self._test_included_urls(urlpatterns) - def test_included_urls_django2_mixed(self): - nested_patterns = [ - path('path', dummy_view) - ] - urlpatterns = [ - url('^test/', include(nested_patterns), {'foo': 'bar'}), - ] - self._test_included_urls(urlpatterns) - - def test_included_urls_django2_mixed_args(self): + def test_included_urls_mixed(self): nested_patterns = [ path('path/', dummy_view), - url('^url/(?P[0-9]+)$', dummy_view) + re_path(r'^re_path/(?P[0-9]+)$', dummy_view) ] urlpatterns = [ - url('^purl/(?P[0-9]+)/', include(nested_patterns), {'foo': 'bar'}), + re_path(r'^pre_path/(?P[0-9]+)/', include(nested_patterns), {'foo': 'bar'}), path('ppath//', include(nested_patterns), {'foo': 'bar'}), ] test_paths = [ - # parent url() nesting child path() - URLTestPath('/purl/87/path/42', (), {'parent': '87', 'child': 42, 'foo': 'bar', }), - URLTestPath('/purl/87/path/42.api', (), {'parent': '87', 'child': 42, 'foo': 'bar', 'format': 'api'}), - URLTestPath('/purl/87/path/42.asdf', (), {'parent': '87', 'child': 42, 'foo': 'bar', 'format': 'asdf'}), + # parent re_path() nesting child path() + URLTestPath('/pre_path/87/path/42', (), {'parent': '87', 'child': 42, 'foo': 'bar', }), + URLTestPath('/pre_path/87/path/42.api', (), {'parent': '87', 'child': 42, 'foo': 'bar', 'format': 'api'}), + URLTestPath('/pre_path/87/path/42.asdf', (), {'parent': '87', 'child': 42, 'foo': 'bar', 'format': 'asdf'}), - # parent path() nesting child url() - URLTestPath('/ppath/87/url/42', (), {'parent': 87, 'child': '42', 'foo': 'bar', }), - URLTestPath('/ppath/87/url/42.api', (), {'parent': 87, 'child': '42', 'foo': 'bar', 'format': 'api'}), - URLTestPath('/ppath/87/url/42.asdf', (), {'parent': 87, 'child': '42', 'foo': 'bar', 'format': 'asdf'}), + # parent path() nesting child re_path() + URLTestPath('/ppath/87/re_path/42', (), {'parent': 87, 'child': '42', 'foo': 'bar', }), + URLTestPath('/ppath/87/re_path/42.api', (), {'parent': 87, 'child': '42', 'foo': 'bar', 'format': 'api'}), + URLTestPath('/ppath/87/re_path/42.asdf', (), {'parent': 87, 'child': '42', 'foo': 'bar', 'format': 'asdf'}), # parent path() nesting child path() URLTestPath('/ppath/87/path/42', (), {'parent': 87, 'child': 42, 'foo': 'bar', }), URLTestPath('/ppath/87/path/42.api', (), {'parent': 87, 'child': 42, 'foo': 'bar', 'format': 'api'}), URLTestPath('/ppath/87/path/42.asdf', (), {'parent': 87, 'child': 42, 'foo': 'bar', 'format': 'asdf'}), - # parent url() nesting child url() - URLTestPath('/purl/87/url/42', (), {'parent': '87', 'child': '42', 'foo': 'bar', }), - URLTestPath('/purl/87/url/42.api', (), {'parent': '87', 'child': '42', 'foo': 'bar', 'format': 'api'}), - URLTestPath('/purl/87/url/42.asdf', (), {'parent': '87', 'child': '42', 'foo': 'bar', 'format': 'asdf'}), + # parent re_path() nesting child re_path() + URLTestPath('/pre_path/87/re_path/42', (), {'parent': '87', 'child': '42', 'foo': 'bar', }), + URLTestPath('/pre_path/87/re_path/42.api', (), {'parent': '87', 'child': '42', 'foo': 'bar', 'format': 'api'}), + URLTestPath('/pre_path/87/re_path/42.asdf', (), {'parent': '87', 'child': '42', 'foo': 'bar', 'format': 'asdf'}), ] self._resolve_urlpatterns(urlpatterns, test_paths) @@ -202,13 +183,13 @@ class FormatSuffixTests(TestCase): ] self._resolve_urlpatterns(urlpatterns, test_paths, allowed=allowed_formats) - def test_allowed_formats(self): + def test_allowed_formats_re_path(self): urlpatterns = [ - url('^test$', dummy_view), + re_path(r'^test$', dummy_view), ] self._test_allowed_formats(urlpatterns) - def test_allowed_formats_django2(self): + def test_allowed_formats_path(self): urlpatterns = [ path('test', dummy_view), ] diff --git a/tests/test_utils.py b/tests/test_utils.py index 500c6a3fa..c72f680fe 100644 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -1,7 +1,7 @@ from unittest import mock -from django.conf.urls import url from django.test import TestCase, override_settings +from django.urls import path from rest_framework.decorators import action from rest_framework.routers import SimpleRouter @@ -64,12 +64,12 @@ class ResourceViewSet(ModelViewSet): router = SimpleRouter() router.register(r'resources', ResourceViewSet) urlpatterns = [ - url(r'^$', Root.as_view()), - url(r'^resource/$', ResourceRoot.as_view()), - url(r'^resource/customname$', CustomNameResourceInstance.as_view()), - url(r'^resource/(?P[0-9]+)$', ResourceInstance.as_view()), - url(r'^resource/(?P[0-9]+)/$', NestedResourceRoot.as_view()), - url(r'^resource/(?P[0-9]+)/(?P[A-Za-z]+)$', NestedResourceInstance.as_view()), + path('', Root.as_view()), + path('resource/', ResourceRoot.as_view()), + path('resource/customname', CustomNameResourceInstance.as_view()), + path('resource/', ResourceInstance.as_view()), + path('resource//', NestedResourceRoot.as_view()), + path('resource//', NestedResourceInstance.as_view()), ] urlpatterns += router.urls diff --git a/tests/test_versioning.py b/tests/test_versioning.py index d4e269df3..d40d54229 100644 --- a/tests/test_versioning.py +++ b/tests/test_versioning.py @@ -1,6 +1,6 @@ import pytest -from django.conf.urls import include, url from django.test import override_settings +from django.urls import include, path, re_path from rest_framework import serializers, status, versioning from rest_framework.decorators import APIView @@ -144,14 +144,14 @@ class TestRequestVersion: class TestURLReversing(URLPatternsTestCase, APITestCase): included = [ - url(r'^namespaced/$', dummy_view, name='another'), - url(r'^example/(?P\d+)/$', dummy_pk_view, name='example-detail') + path('namespaced/', dummy_view, name='another'), + path('example//', dummy_pk_view, name='example-detail') ] urlpatterns = [ - url(r'^v1/', include((included, 'v1'), namespace='v1')), - url(r'^another/$', dummy_view, name='another'), - url(r'^(?P[v1|v2]+)/another/$', dummy_view, name='another'), + path('v1/', include((included, 'v1'), namespace='v1')), + path('another/', dummy_view, name='another'), + re_path(r'^(?P[v1|v2]+)/another/$', dummy_view, name='another'), ] def test_reverse_unversioned(self): @@ -310,12 +310,12 @@ class TestAllowedAndDefaultVersion: class TestHyperlinkedRelatedField(URLPatternsTestCase, APITestCase): included = [ - url(r'^namespaced/(?P\d+)/$', dummy_pk_view, name='namespaced'), + path('namespaced//', dummy_pk_view, name='namespaced'), ] urlpatterns = [ - url(r'^v1/', include((included, 'v1'), namespace='v1')), - url(r'^v2/', include((included, 'v2'), namespace='v2')) + path('v1/', include((included, 'v1'), namespace='v1')), + path('v2/', include((included, 'v2'), namespace='v2')) ] def setUp(self): @@ -342,17 +342,17 @@ class TestHyperlinkedRelatedField(URLPatternsTestCase, APITestCase): class TestNamespaceVersioningHyperlinkedRelatedFieldScheme(URLPatternsTestCase, APITestCase): nested = [ - url(r'^namespaced/(?P\d+)/$', dummy_pk_view, name='nested'), + path('namespaced//', dummy_pk_view, name='nested'), ] included = [ - url(r'^namespaced/(?P\d+)/$', dummy_pk_view, name='namespaced'), - url(r'^nested/', include((nested, 'nested-namespace'), namespace='nested-namespace')) + path('namespaced//', dummy_pk_view, name='namespaced'), + path('nested/', include((nested, 'nested-namespace'), namespace='nested-namespace')) ] urlpatterns = [ - url(r'^v1/', include((included, 'restframeworkv1'), namespace='v1')), - url(r'^v2/', include((included, 'restframeworkv2'), namespace='v2')), - url(r'^non-api/(?P\d+)/$', dummy_pk_view, name='non-api-view') + path('v1/', include((included, 'restframeworkv1'), namespace='v1')), + path('v2/', include((included, 'restframeworkv2'), namespace='v2')), + path('non-api//', dummy_pk_view, name='non-api-view') ] def _create_field(self, view_name, version): diff --git a/tests/test_viewsets.py b/tests/test_viewsets.py index 2a2997a0b..8842b0b1c 100644 --- a/tests/test_viewsets.py +++ b/tests/test_viewsets.py @@ -2,9 +2,9 @@ from collections import OrderedDict from functools import wraps import pytest -from django.conf.urls import include, url from django.db import models from django.test import TestCase, override_settings +from django.urls import include, path from rest_framework import status from rest_framework.decorators import action @@ -124,7 +124,7 @@ router.register(r'mapping', ActionViewSetWithMapping, basename='mapping') urlpatterns = [ - url(r'^api/', include(router.urls)), + path('api/', include(router.urls)), ] diff --git a/tests/urls.py b/tests/urls.py index 76ada5e3d..d9147683f 100644 --- a/tests/urls.py +++ b/tests/urls.py @@ -3,14 +3,14 @@ URLConf for test suite. We need only the docs urls for DocumentationRenderer tests. """ -from django.conf.urls import url +from django.urls import path from rest_framework.compat import coreapi from rest_framework.documentation import include_docs_urls if coreapi: urlpatterns = [ - url(r'^docs/', include_docs_urls(title='Test Suite API')), + path('docs/', include_docs_urls(title='Test Suite API')), ] else: urlpatterns = [] From ddcd8b539be4a5ffb7e6c89830bec9a24914ba55 Mon Sep 17 00:00:00 2001 From: Michael K Date: Tue, 8 Sep 2020 14:40:21 +0000 Subject: [PATCH 24/66] Run tests against Python 3.9 (#7517) 3.9.0 final is expected on Monday, 2020-10-05 See https://www.python.org/dev/peps/pep-0596/#schedule Also mention Django 3.1 compat where missing. --- .travis.yml | 3 +++ README.md | 4 ++-- docs/index.md | 4 ++-- setup.py | 1 + tox.ini | 6 +++--- 5 files changed, 11 insertions(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index 39efaf4fc..c204c5460 100644 --- a/.travis.yml +++ b/.travis.yml @@ -21,6 +21,9 @@ matrix: - { python: "3.8", env: DJANGO=3.1 } - { python: "3.8", env: DJANGO=master } + - { python: "3.9-dev", env: DJANGO=3.1 } + - { python: "3.9-dev", env: DJANGO=master } + - { python: "3.8", env: TOXENV=base } - { python: "3.8", env: TOXENV=lint } - { python: "3.8", env: TOXENV=docs } diff --git a/README.md b/README.md index 4dfff3119..8af1466f8 100644 --- a/README.md +++ b/README.md @@ -52,8 +52,8 @@ There is a live example API for testing purposes, [available here][sandbox]. # Requirements -* Python (3.5, 3.6, 3.7, 3.8) -* Django (2.2, 3.0) +* Python (3.5, 3.6, 3.7, 3.8, 3.9) +* Django (2.2, 3.0, 3.1) We **highly recommend** and only officially support the latest patch release of each Python and Django series. diff --git a/docs/index.md b/docs/index.md index 54654c7c5..0273da9f1 100644 --- a/docs/index.md +++ b/docs/index.md @@ -83,8 +83,8 @@ continued development by **[signing up for a paid plan][funding]**. REST framework requires the following: -* Python (3.5, 3.6, 3.7, 3.8) -* Django (2.2, 3.0) +* Python (3.5, 3.6, 3.7, 3.8, 3.9) +* Django (2.2, 3.0, 3.1) We **highly recommend** and only officially support the latest patch release of each Python and Django series. diff --git a/setup.py b/setup.py index 38e680e10..e2a1c0222 100755 --- a/setup.py +++ b/setup.py @@ -101,6 +101,7 @@ setup( 'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', + 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3 :: Only', 'Topic :: Internet :: WWW/HTTP', ], diff --git a/tox.ini b/tox.ini index 190865f23..d5e769764 100644 --- a/tox.ini +++ b/tox.ini @@ -2,8 +2,8 @@ envlist = {py35,py36,py37}-django22, {py36,py37,py38}-django30, - {py36,py37,py38}-django31, - {py36,py37,py38}-djangomaster, + {py36,py37,py38,py39}-django31, + {py36,py37,py38,py39}-djangomaster, base,dist,lint,docs, [travis:env] @@ -22,7 +22,7 @@ setenv = deps = django22: Django>=2.2,<3.0 django30: Django>=3.0,<3.1 - django31: Django>=3.1a1,<3.2 + django31: Django>=3.1,<3.2 djangomaster: https://github.com/django/django/archive/master.tar.gz -rrequirements/requirements-testing.txt -rrequirements/requirements-optionals.txt From 6b632c15b1bccf53287f81df143428b59d710241 Mon Sep 17 00:00:00 2001 From: Francisco Couzo Date: Tue, 8 Sep 2020 11:42:01 -0300 Subject: [PATCH 25/66] Remove unnecessary type conversions (#7526) --- rest_framework/pagination.py | 2 +- rest_framework/renderers.py | 2 +- rest_framework/serializers.py | 12 ++++-------- rest_framework/utils/urls.py | 4 ++-- 4 files changed, 8 insertions(+), 12 deletions(-) diff --git a/rest_framework/pagination.py b/rest_framework/pagination.py index a73f2e526..60a57c8e4 100644 --- a/rest_framework/pagination.py +++ b/rest_framework/pagination.py @@ -80,7 +80,7 @@ def _get_displayed_page_numbers(current, final): # Now sort the page numbers and drop anything outside the limits. included = [ - idx for idx in sorted(list(included)) + idx for idx in sorted(included) if 0 < idx <= final ] diff --git a/rest_framework/renderers.py b/rest_framework/renderers.py index c790879b9..0fb74ca00 100644 --- a/rest_framework/renderers.py +++ b/rest_framework/renderers.py @@ -329,7 +329,7 @@ class HTMLFormRenderer(BaseRenderer): if isinstance(field._field, serializers.HiddenField): return '' - style = dict(self.default_style[field]) + style = self.default_style[field].copy() style.update(field.style) if 'template_pack' not in style: style['template_pack'] = parent_style.get('template_pack', self.template_pack) diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index 439220b34..3def1946c 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -194,10 +194,7 @@ class BaseSerializer(Field): "inspect 'serializer.validated_data' instead. " ) - validated_data = dict( - list(self.validated_data.items()) + - list(kwargs.items()) - ) + validated_data = {**self.validated_data, **kwargs} if self.instance is not None: self.instance = self.update(self.instance, validated_data) @@ -699,8 +696,7 @@ class ListSerializer(BaseSerializer): ) validated_data = [ - dict(list(attrs.items()) + list(kwargs.items())) - for attrs in self.validated_data + {**attrs, **kwargs} for attrs in self.validated_data ] if self.instance is not None: @@ -1410,7 +1406,7 @@ class ModelSerializer(Serializer): # so long as all the field names are included on the serializer. for parent_class in [model] + list(model._meta.parents): for unique_together_list in parent_class._meta.unique_together: - if set(field_names).issuperset(set(unique_together_list)): + if set(field_names).issuperset(unique_together_list): unique_constraint_names |= set(unique_together_list) # Now we have all the field names that have uniqueness constraints @@ -1541,7 +1537,7 @@ class ModelSerializer(Serializer): for parent_class in model_class_inheritance_tree: for unique_together in parent_class._meta.unique_together: # Skip if serializer does not map to all unique together sources - if not set(source_map).issuperset(set(unique_together)): + if not set(source_map).issuperset(unique_together): continue for source in unique_together: diff --git a/rest_framework/utils/urls.py b/rest_framework/utils/urls.py index 3534e5f49..afb06994c 100644 --- a/rest_framework/utils/urls.py +++ b/rest_framework/utils/urls.py @@ -11,7 +11,7 @@ def replace_query_param(url, key, val): (scheme, netloc, path, query, fragment) = parse.urlsplit(force_str(url)) query_dict = parse.parse_qs(query, keep_blank_values=True) query_dict[force_str(key)] = [force_str(val)] - query = parse.urlencode(sorted(list(query_dict.items())), doseq=True) + query = parse.urlencode(sorted(query_dict.items()), doseq=True) return parse.urlunsplit((scheme, netloc, path, query, fragment)) @@ -23,5 +23,5 @@ def remove_query_param(url, key): (scheme, netloc, path, query, fragment) = parse.urlsplit(force_str(url)) query_dict = parse.parse_qs(query, keep_blank_values=True) query_dict.pop(key, None) - query = parse.urlencode(sorted(list(query_dict.items())), doseq=True) + query = parse.urlencode(sorted(query_dict.items()), doseq=True) return parse.urlunsplit((scheme, netloc, path, query, fragment)) From 327cbef29977bb999f292d3c8b7b3efc2491691d Mon Sep 17 00:00:00 2001 From: Rafael Henter Date: Tue, 8 Sep 2020 11:44:03 -0300 Subject: [PATCH 26/66] Add Django API Client to the third party packages (#7440) --- docs/community/third-party-packages.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/community/third-party-packages.md b/docs/community/third-party-packages.md index 79cb56e01..336380aee 100644 --- a/docs/community/third-party-packages.md +++ b/docs/community/third-party-packages.md @@ -274,6 +274,7 @@ To submit new content, [open an issue][drf-create-issue] or [create a pull reque * [drf-viewset-profiler][drf-viewset-profiler] - Lib to profile all methods from a viewset line by line. * [djangorestframework-features][djangorestframework-features] - Advanced schema generation and more based on named features. * [django-elasticsearch-dsl-drf][django-elasticsearch-dsl-drf] - Integrate Elasticsearch DSL with Django REST framework. Package provides views, serializers, filter backends, pagination and other handy add-ons. +* [django-api-client][django-api-client] - DRF client that groups the Endpoint response, for use in CBVs and FBV as if you were working with Django's Native Models.. [cite]: http://www.software-ecosystems.com/Software_Ecosystems/Ecosystems.html [cookiecutter]: https://github.com/jpadilla/cookiecutter-django-rest-framework @@ -358,3 +359,4 @@ To submit new content, [open an issue][drf-create-issue] or [create a pull reque [drf-viewset-profiler]: https://github.com/fvlima/drf-viewset-profiler [djangorestframework-features]: https://github.com/cloudcode-hungary/django-rest-framework-features/ [django-elasticsearch-dsl-drf]: https://github.com/barseghyanartur/django-elasticsearch-dsl-drf +[django-api-client]: https://github.com/rhenter/django-api-client From 04f39c42ee28bd462fcc9088909b18f2b321501d Mon Sep 17 00:00:00 2001 From: Mohammad Amin Haghpanah Date: Wed, 9 Sep 2020 12:24:05 +0430 Subject: [PATCH 27/66] Add drf-psq package to docs (#7451) * Add drf-psq to third party packages * Add drf-psq to permissions.md this package is an extension that gives support for having action-based **permission_classes**, **serializer_class**, and **queryset** dependent on permission-based rules. Co-authored-by: Salar Nasiri --- docs/api-guide/permissions.md | 6 ++++++ docs/community/third-party-packages.md | 2 ++ 2 files changed, 8 insertions(+) diff --git a/docs/api-guide/permissions.md b/docs/api-guide/permissions.md index f317c12e6..ade146257 100644 --- a/docs/api-guide/permissions.md +++ b/docs/api-guide/permissions.md @@ -312,6 +312,11 @@ The [Django REST Framework API Key][djangorestframework-api-key] package provide The [Django Rest Framework Role Filters][django-rest-framework-role-filters] package provides simple filtering over multiple types of roles. +## Django Rest Framework PSQ + +The [Django Rest Framework PSQ][drf-psq] package is an extension that gives support for having action-based **permission_classes**, **serializer_class**, and **queryset** dependent on permission-based rules. + + [cite]: https://developer.apple.com/library/mac/#documentation/security/Conceptual/AuthenticationAndAuthorizationGuide/Authorization/Authorization.html [authentication]: authentication.md [throttling]: throttling.md @@ -328,3 +333,4 @@ The [Django Rest Framework Role Filters][django-rest-framework-role-filters] pac [django-rest-framework-role-filters]: https://github.com/allisson/django-rest-framework-role-filters [django-rest-framework-guardian]: https://github.com/rpkilby/django-rest-framework-guardian [drf-access-policy]: https://github.com/rsinger86/drf-access-policy +[drf-psq]: https://github.com/drf-psq/drf-psq diff --git a/docs/community/third-party-packages.md b/docs/community/third-party-packages.md index 336380aee..d4359890d 100644 --- a/docs/community/third-party-packages.md +++ b/docs/community/third-party-packages.md @@ -198,6 +198,7 @@ To submit new content, [open an issue][drf-create-issue] or [create a pull reque * [rest_condition][rest-condition] - Another extension for building complex permissions in a simple and convenient way. * [dry-rest-permissions][dry-rest-permissions] - Provides a simple way to define permissions for individual api actions. * [drf-access-policy][drf-access-policy] - Declarative and flexible permissions inspired by AWS' IAM policies. +* [drf-psq][drf-psq] - An extension that gives support for having action-based **permission_classes**, **serializer_class**, and **queryset** dependent on permission-based rules. ### Serializers @@ -360,3 +361,4 @@ To submit new content, [open an issue][drf-create-issue] or [create a pull reque [djangorestframework-features]: https://github.com/cloudcode-hungary/django-rest-framework-features/ [django-elasticsearch-dsl-drf]: https://github.com/barseghyanartur/django-elasticsearch-dsl-drf [django-api-client]: https://github.com/rhenter/django-api-client +[drf-psq]: https://github.com/drf-psq/drf-psq From e17779c47bccd218cfcdf1f3eaa61c354032ff71 Mon Sep 17 00:00:00 2001 From: johnthagen Date: Mon, 14 Sep 2020 13:46:51 -0400 Subject: [PATCH 28/66] Make it more clear to add django_filters to INSTALLED_APPS in docs. (#7535) --- docs/api-guide/filtering.md | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/docs/api-guide/filtering.md b/docs/api-guide/filtering.md index 41c1341dd..d305ede6b 100644 --- a/docs/api-guide/filtering.md +++ b/docs/api-guide/filtering.md @@ -145,10 +145,18 @@ Note that you can use both an overridden `.get_queryset()` and generic filtering The [`django-filter`][django-filter-docs] library includes a `DjangoFilterBackend` class which supports highly customizable field filtering for REST framework. -To use `DjangoFilterBackend`, first install `django-filter`. Then add `django_filters` to Django's `INSTALLED_APPS` +To use `DjangoFilterBackend`, first install `django-filter`. pip install django-filter +Then add `'django_filters'` to Django's `INSTALLED_APPS`: + + INSTALLED_APPS = [ + ... + 'django_filters', + ... + ] + You should now either add the filter backend to your settings: REST_FRAMEWORK = { @@ -365,4 +373,4 @@ The [djangorestframework-word-filter][django-rest-framework-word-search-filter] [django-url-filter]: https://github.com/miki725/django-url-filter [drf-url-filter]: https://github.com/manjitkumar/drf-url-filters [HStoreField]: https://docs.djangoproject.com/en/3.0/ref/contrib/postgres/fields/#hstorefield -[JSONField]: https://docs.djangoproject.com/en/3.0/ref/contrib/postgres/fields/#jsonfield \ No newline at end of file +[JSONField]: https://docs.djangoproject.com/en/3.0/ref/contrib/postgres/fields/#jsonfield From 98761e4ebb6c963aade674a568d010660302358e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=91=D0=BE=D1=80=D0=B8=D1=81=20=D0=92=D0=B5=D1=80=D1=85?= =?UTF-8?q?=D0=BE=D0=B2=D1=81=D0=BA=D0=B8=D0=B9?= Date: Wed, 16 Sep 2020 09:43:27 -0400 Subject: [PATCH 29/66] Correct indentation --- docs/api-guide/views.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/api-guide/views.md b/docs/api-guide/views.md index 45226d57b..2224c1f3a 100644 --- a/docs/api-guide/views.md +++ b/docs/api-guide/views.md @@ -169,7 +169,7 @@ To override the default settings, REST framework provides a set of additional de from rest_framework.throttling import UserRateThrottle class OncePerDayUserThrottle(UserRateThrottle): - rate = '1/day' + rate = '1/day' @api_view(['GET']) @throttle_classes([OncePerDayUserThrottle]) From c6e24521dab27a7af8e8637a32b868ffa03dec2f Mon Sep 17 00:00:00 2001 From: "T. Franzel" Date: Mon, 21 Sep 2020 12:39:35 +0200 Subject: [PATCH 30/66] Add third-party schema library drf-spectacular to docs (#7540) Co-authored-by: T. Franzel <13507857+tfranzel@users.noreply.github.com> --- docs/coreapi/schemas.md | 7 +++++++ docs/topics/documenting-your-api.md | 11 +++++++++++ 2 files changed, 18 insertions(+) diff --git a/docs/coreapi/schemas.md b/docs/coreapi/schemas.md index e7a418b80..653105a7a 100644 --- a/docs/coreapi/schemas.md +++ b/docs/coreapi/schemas.md @@ -828,10 +828,17 @@ A short description of the meaning and intended usage of the input field. [drf-yasg][drf-yasg] generates [OpenAPI][open-api] documents suitable for code generation - nested schemas, named models, response bodies, enum/pattern/min/max validators, form parameters, etc. + +## drf-spectacular - Sane and flexible OpenAPI 3.0 schema generation for Django REST framework + +[drf-spectacular][drf-spectacular] is a [OpenAPI 3][open-api] schema generation tool with explicit focus on extensibility, +customizability and client generation. It's usage patterns are very similar to [drf-yasg][drf-yasg]. + [cite]: https://blog.heroku.com/archives/2014/1/8/json_schema_for_heroku_platform_api [coreapi]: https://www.coreapi.org/ [corejson]: https://www.coreapi.org/specification/encoding/#core-json-encoding [drf-yasg]: https://github.com/axnsan12/drf-yasg/ +[drf-spectacular]: https://github.com/tfranzel/drf-spectacular/ [open-api]: https://openapis.org/ [json-hyperschema]: https://json-schema.org/latest/json-schema-hypermedia.html [api-blueprint]: https://apiblueprint.org/ diff --git a/docs/topics/documenting-your-api.md b/docs/topics/documenting-your-api.md index 5c5872650..7f39a9c33 100644 --- a/docs/topics/documenting-your-api.md +++ b/docs/topics/documenting-your-api.md @@ -142,6 +142,16 @@ This also translates into a very useful interactive documentation viewer in the ![Screenshot - drf-yasg][image-drf-yasg] +#### drf-spectacular - Sane and flexible OpenAPI 3.0 schema generation for Django REST framework + +[drf-spectacular][drf-spectacular] is a [OpenAPI 3][open-api] schema generation tool with explicit focus on extensibility, +customizability and client generation. Usage patterns are very similar to [drf-yasg][drf-yasg]. + +It aims to extract as much schema information as possible, while providing decorators and extensions for easy +customization. There is explicit support for [swagger-codegen][swagger], [SwaggerUI][swagger-ui] and [Redoc][redoc], +i18n, versioning, authentication, polymorphism (dynamic requests and responses), query/path/header parameters, +documentation and more. Several popular plugins for DRF are supported out-of-the-box as well. + --- ## Self describing APIs @@ -216,6 +226,7 @@ To implement a hypermedia API you'll need to decide on an appropriate media type [image-self-describing-api]: ../img/self-describing.png [drf-yasg]: https://github.com/axnsan12/drf-yasg/ +[drf-spectacular]: https://github.com/tfranzel/drf-spectacular/ [markdown]: https://daringfireball.net/projects/markdown/syntax [open-api]: https://openapis.org/ [redoc]: https://github.com/Rebilly/ReDoc From ae649336b110afe21b9429f2554052f31a9dfaf9 Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Wed, 23 Sep 2020 15:39:06 +0100 Subject: [PATCH 31/66] Drop urlize_quoted_links (#7548) --- rest_framework/renderers.py | 2 +- .../templates/rest_framework/base.html | 6 +- rest_framework/templatetags/rest_framework.py | 83 +------------------ tests/test_templatetags.py | 26 +++--- 4 files changed, 21 insertions(+), 96 deletions(-) diff --git a/rest_framework/renderers.py b/rest_framework/renderers.py index 0fb74ca00..3c4be8aeb 100644 --- a/rest_framework/renderers.py +++ b/rest_framework/renderers.py @@ -418,7 +418,7 @@ class BrowsableAPIRenderer(BaseRenderer): if render_style == 'binary': return '[%d bytes of binary content]' % len(content) - return content + return content.decode('utf-8') if isinstance(content, bytes) else content def show_form_for_method(self, view, method, request, obj): """ diff --git a/rest_framework/templates/rest_framework/base.html b/rest_framework/templates/rest_framework/base.html index 9207f049b..a88e1591c 100644 --- a/rest_framework/templates/rest_framework/base.html +++ b/rest_framework/templates/rest_framework/base.html @@ -77,7 +77,7 @@
    {% block request_forms %} - + {% if 'GET' in allowed_methods %}
    @@ -176,9 +176,9 @@
    HTTP {{ response.status_code }} {{ response.status_text }}{% for key, val in response_headers|items %}
    -{{ key }}: {{ val|break_long_headers|urlize_quoted_links }}{% endfor %}
    +{{ key }}: {{ val|break_long_headers|urlize }}{% endfor %}
     
    -{{ content|urlize_quoted_links }}
    +{{ content|urlize }}
    diff --git a/rest_framework/templatetags/rest_framework.py b/rest_framework/templatetags/rest_framework.py index 79dd953ff..7bfa8f599 100644 --- a/rest_framework/templatetags/rest_framework.py +++ b/rest_framework/templatetags/rest_framework.py @@ -4,9 +4,9 @@ from collections import OrderedDict from django import template from django.template import loader from django.urls import NoReverseMatch, reverse -from django.utils.encoding import force_str, iri_to_uri +from django.utils.encoding import iri_to_uri from django.utils.html import escape, format_html, smart_urlquote -from django.utils.safestring import SafeData, mark_safe +from django.utils.safestring import mark_safe from rest_framework.compat import apply_markdown, pygments_highlight from rest_framework.renderers import HTMLFormRenderer @@ -311,85 +311,6 @@ def smart_urlquote_wrapper(matched_url): return None -@register.filter(needs_autoescape=True) -def urlize_quoted_links(text, trim_url_limit=None, nofollow=True, autoescape=True): - """ - Converts any URLs in text into clickable links. - - Works on http://, https://, www. links, and also on links ending in one of - the original seven gTLDs (.com, .edu, .gov, .int, .mil, .net, and .org). - Links can have trailing punctuation (periods, commas, close-parens) and - leading punctuation (opening parens) and it'll still do the right thing. - - If trim_url_limit is not None, the URLs in link text longer than this limit - will truncated to trim_url_limit-3 characters and appended with an ellipsis. - - If nofollow is True, the URLs in link text will get a rel="nofollow" - attribute. - - If autoescape is True, the link text and URLs will get autoescaped. - """ - def trim_url(x, limit=trim_url_limit): - return limit is not None and (len(x) > limit and ('%s...' % x[:max(0, limit - 3)])) or x - - safe_input = isinstance(text, SafeData) - - # Unfortunately, Django built-in cannot be used here, because escaping - # is to be performed on words, which have been forcibly coerced to text - def conditional_escape(text): - return escape(text) if autoescape and not safe_input else text - - words = word_split_re.split(force_str(text)) - for i, word in enumerate(words): - if '.' in word or '@' in word or ':' in word: - # Deal with punctuation. - lead, middle, trail = '', word, '' - for punctuation in TRAILING_PUNCTUATION: - if middle.endswith(punctuation): - middle = middle[:-len(punctuation)] - trail = punctuation + trail - for opening, closing in WRAPPING_PUNCTUATION: - if middle.startswith(opening): - middle = middle[len(opening):] - lead = lead + opening - # Keep parentheses at the end only if they're balanced. - if ( - middle.endswith(closing) and - middle.count(closing) == middle.count(opening) + 1 - ): - middle = middle[:-len(closing)] - trail = closing + trail - - # Make URL we want to point to. - url = None - nofollow_attr = ' rel="nofollow"' if nofollow else '' - if simple_url_re.match(middle): - url = smart_urlquote_wrapper(middle) - elif simple_url_2_re.match(middle): - url = smart_urlquote_wrapper('http://%s' % middle) - elif ':' not in middle and simple_email_re.match(middle): - local, domain = middle.rsplit('@', 1) - try: - domain = domain.encode('idna').decode('ascii') - except UnicodeError: - continue - url = 'mailto:%s@%s' % (local, domain) - nofollow_attr = '' - - # Make link. - if url: - trimmed = trim_url(middle) - lead, trail = conditional_escape(lead), conditional_escape(trail) - url, trimmed = conditional_escape(url), conditional_escape(trimmed) - middle = '%s' % (url, nofollow_attr, trimmed) - words[i] = '%s%s%s' % (lead, middle, trail) - else: - words[i] = conditional_escape(word) - else: - words[i] = conditional_escape(word) - return mark_safe(''.join(words)) - - @register.filter def break_long_headers(header): """ diff --git a/tests/test_templatetags.py b/tests/test_templatetags.py index 28d6b4011..cdf10ab1e 100644 --- a/tests/test_templatetags.py +++ b/tests/test_templatetags.py @@ -2,13 +2,14 @@ import unittest from django.template import Context, Template from django.test import TestCase +from django.utils.html import urlize from rest_framework.compat import coreapi, coreschema from rest_framework.relations import Hyperlink from rest_framework.templatetags import rest_framework from rest_framework.templatetags.rest_framework import ( add_nested_class, add_query_param, as_string, break_long_headers, - format_value, get_pagination_html, schema_links, urlize_quoted_links + format_value, get_pagination_html, schema_links ) from rest_framework.test import APIRequestFactory @@ -246,7 +247,7 @@ class Issue1386Tests(TestCase): def test_issue_1386(self): """ - Test function urlize_quoted_links with different args + Test function urlize with different args """ correct_urls = [ "asdf.com", @@ -255,7 +256,7 @@ class Issue1386Tests(TestCase): "as.d8f.ghj8.gov", ] for i in correct_urls: - res = urlize_quoted_links(i) + res = urlize(i) self.assertNotEqual(res, i) self.assertIn(i, res) @@ -264,11 +265,11 @@ class Issue1386Tests(TestCase): "asdf.netnet", ] for i in incorrect_urls: - res = urlize_quoted_links(i) + res = urlize(i) self.assertEqual(i, res) # example from issue #1386, this shouldn't raise an exception - urlize_quoted_links("asdf:[/p]zxcv.com") + urlize("asdf:[/p]zxcv.com") def test_smart_urlquote_wrapper_handles_value_error(self): def mock_smart_urlquote(url): @@ -289,7 +290,10 @@ class URLizerTests(TestCase): For all items in dict test assert that the value is urlized key """ for original, urlized in data.items(): - assert urlize_quoted_links(original, nofollow=False) == urlized + print('====') + print(repr(urlize(original, nofollow=False))) + print(repr(urlized)) + assert urlize(original, nofollow=False) == urlized def test_json_with_url(self): """ @@ -297,26 +301,26 @@ class URLizerTests(TestCase): """ data = {} data['"url": "http://api/users/1/", '] = \ - '"url": "http://api/users/1/", ' + '"url": "http://api/users/1/", ' data['"foo_set": [\n "http://api/foos/1/"\n], '] = \ - '"foo_set": [\n "http://api/foos/1/"\n], ' + '"foo_set": [\n "http://api/foos/1/"\n], ' self._urlize_dict_check(data) def test_template_render_with_autoescape(self): """ Test that HTML is correctly escaped in Browsable API views. """ - template = Template("{% load rest_framework %}{{ content|urlize_quoted_links }}") + template = Template("{% load rest_framework %}{{ content|urlize }}") rendered = template.render(Context({'content': ' http://example.com'})) assert rendered == '<script>alert()</script>' \ ' http://example.com' def test_template_render_with_noautoescape(self): """ - Test if the autoescape value is getting passed to urlize_quoted_links filter. + Test if the autoescape value is getting passed to urlize filter. """ template = Template("{% load rest_framework %}" - "{% autoescape off %}{{ content|urlize_quoted_links }}" + "{% autoescape off %}{{ content|urlize }}" "{% endautoescape %}") rendered = template.render(Context({'content': ' "http://example.com" '})) assert rendered == ' "http://example.com" ' From 9ee67bbff77638316b6f1455d5dff38637a02306 Mon Sep 17 00:00:00 2001 From: Esieboma Jeremiah <57163971+esiebomaj@users.noreply.github.com> Date: Mon, 28 Sep 2020 08:52:17 +0100 Subject: [PATCH 32/66] corrects typographical error in line 118 (#7553) --- rest_framework/serializers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rest_framework/serializers.py b/rest_framework/serializers.py index 3def1946c..49eec8259 100644 --- a/rest_framework/serializers.py +++ b/rest_framework/serializers.py @@ -115,7 +115,7 @@ class BaseSerializer(Field): super().__init__(**kwargs) def __new__(cls, *args, **kwargs): - # We override this method in order to automagically create + # We override this method in order to automatically create # `ListSerializer` classes instead when `many=True` is set. if kwargs.pop('many', False): return cls.many_init(*args, **kwargs) From 6f7aad8ffa96226672eacb82ab003dcf01070ed3 Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Mon, 28 Sep 2020 10:47:50 +0100 Subject: [PATCH 33/66] Placeholder for 3.12 release (#7379) * Placeholder for 3.12 release * Updating release notes * Updating release notes * Updating release notes * Update release notes * Fix typo * Basic structure for release announcement * 3.12 release notes * Version 3.12.0 --- docs/community/3.12-announcement.md | 169 ++++++++++++++++++++++++++++ docs/community/release-notes.md | 49 +++++++- mkdocs.yml | 1 + rest_framework/__init__.py | 2 +- 4 files changed, 219 insertions(+), 2 deletions(-) create mode 100644 docs/community/3.12-announcement.md diff --git a/docs/community/3.12-announcement.md b/docs/community/3.12-announcement.md new file mode 100644 index 000000000..9d2220933 --- /dev/null +++ b/docs/community/3.12-announcement.md @@ -0,0 +1,169 @@ + + +# Django REST framework 3.12 + +REST framework 3.12 brings a handful of refinements to the OpenAPI schema +generation, plus support for Django's new database-agnostic `JSONField`, +and some improvements to the `SearchFilter` class. + +## Grouping operations with tags. + +Open API schemas will now automatically include tags, based on the first element +in the URL path. + +For example... + +Method | Path | Tags +--------------------------------|-----------------|------------- +`GET`, `PUT`, `PATCH`, `DELETE` | `/users/{id}/` | `['users']` +`GET`, `POST` | `/users/` | `['users']` +`GET`, `PUT`, `PATCH`, `DELETE` | `/orders/{id}/` | `['orders']` +`GET`, `POST` | `/orders/` | `['orders']` + +The tags used for a particular view may also be overridden... + +```python +class MyOrders(APIView): + schema = AutoSchema(tags=['users', 'orders']) + ... +``` + +See [the schema documentation](https://www.django-rest-framework.org/api-guide/schemas/#grouping-operations-with-tags) for more information. + +## Customizing the operation ID. + +REST framework automatically determines operation IDs to use in OpenAPI +schemas. The latest version provides more control for overriding the behaviour +used to generate the operation IDs. + +See [the schema documentation](https://www.django-rest-framework.org/api-guide/schemas/#operationid) for more information. + +## Support for OpenAPI components. + +In order to output more graceful OpenAPI schemes, REST framework 3.12 now +defines components in the schema, and then references them inside request +and response objects. This is in contrast with the previous approach, which +fully expanded the request and response bodies for each operation. + +The names used for a component default to using the serializer class name, [but +may be overridden if needed](https://www.django-rest-framework.org/api-guide/schemas/#components +)... + +```python +class MyOrders(APIView): + schema = AutoSchema(component_name="OrderDetails") +``` + +## More Public API + +Many methods on the `AutoSchema` class have now been promoted to public API, +allowing you to more fully customize the schema generation. The following methods +are now available for overriding... + +* `get_path_parameters` +* `get_pagination_parameters` +* `get_filter_parameters` +* `get_request_body` +* `get_responses` +* `get_serializer` +* `get_paginator` +* `map_serializer` +* `map_field` +* `map_choice_field` +* `map_field_validators` +* `allows_filters`. + +See [the schema docs](https://www.django-rest-framework.org/api-guide/schemas/#per-view-customization) +for details on using custom `AutoSchema` subclasses. + +## Support for JSONField. + +Django 3.1 deprecated the existing `django.contrib.postgres.fields.JSONField` +in favour of a new database-agnositic `JSONField`. + +REST framework 3.12 now supports this new model field, and `ModelSerializer` +classes will correctly map the model field. + +## SearchFilter improvements + +There are a couple of significant improvements to the `SearchFilter` class. + +### Nested searches against JSONField and HStoreField + +The class now supports nested search within `JSONField` and `HStoreField`, using +the double underscore notation for traversing which element of the field the +search should apply to. + +```python +class SitesSearchView(generics.ListAPIView): + """ + An API view to return a list of archaeological sites, optionally filtered + by a search against the site name or location. (Location searches are + matched against the region and country names.) + """ + queryset = Sites.objects.all() + serializer_class = SitesSerializer + filter_backends = [filters.SearchFilter] + search_fields = ['site_name', 'location__region', 'location__country'] +``` + +### Searches against annotate fields + +Django allows querysets to create additional virtual fields, using the `.annotate` +method. We now support searching against annotate fields. + +```python +class PublisherSearchView(generics.ListAPIView): + """ + Search for publishers, optionally filtering the search against the average + rating of all their books. + """ + queryset = Publisher.objects.annotate(avg_rating=Avg('book__rating')) + serializer_class = PublisherSerializer + filter_backends = [filters.SearchFilter] + search_fields = ['avg_rating'] +``` + +--- + +## Funding + +REST framework is a *collaboratively funded project*. If you use +REST framework commercially we strongly encourage you to invest in its +continued development by **[signing up for a paid plan][funding]**. + +*Every single sign-up helps us make REST framework long-term financially sustainable.* + + +
    + +*Many thanks to all our [wonderful sponsors][sponsors], and in particular to our premium backers, [Sentry](https://getsentry.com/welcome/), [Stream](https://getstream.io/?utm_source=drf&utm_medium=banner&utm_campaign=drf), [ESG](https://software.esg-usa.com/), [Rollbar](https://rollbar.com/?utm_source=django&utm_medium=sponsorship&utm_campaign=freetrial), [Cadre](https://cadre.com), [Kloudless](https://hubs.ly/H0f30Lf0), [Lights On Software](https://lightsonsoftware.com), and [Retool](https://retool.com/?utm_source=djangorest&utm_medium=sponsorship).* + +[sponsors]: https://fund.django-rest-framework.org/topics/funding/#our-sponsors +[funding]: funding.md diff --git a/docs/community/release-notes.md b/docs/community/release-notes.md index d6f56317d..636e91d6c 100644 --- a/docs/community/release-notes.md +++ b/docs/community/release-notes.md @@ -36,11 +36,58 @@ You can determine your currently installed version using `pip show`: ## 3.11.x series +### 3.12.0 + +* Add `--file` option to `generateschema` command. [#7130] +* Support `tags` for OpenAPI schema generation. See [the schema docs](https://www.django-rest-framework.org/api-guide/schemas/#grouping-operations-with-tags). [#7184] +* Support customising the operation ID for schema generation. See [the schema docs](https://www.django-rest-framework.org/api-guide/schemas/#operationid). [#7190] +* Support OpenAPI components for schema generation. See [the schema docs](https://www.django-rest-framework.org/api-guide/schemas/#components). [#7124] +* The following methods on `AutoSchema` become public API: `get_path_parameters`, `get_pagination_parameters`, `get_filter_parameters`, `get_request_body`, `get_responses`, `get_serializer`, `get_paginator`, `map_serializer`, `map_field`, `map_choice_field`, `map_field_validators`, `allows_filters`. See [the schema docs](https://www.django-rest-framework.org/api-guide/schemas/#autoschema) +* Add support for Django 3.1's database-agnositic `JSONField`. [#7467] +* `SearchFilter` now supports nested search on `JSONField` and `HStoreField` model fields. [#7121] +* `SearchFilter` now supports searching on `annotate()` fields. [#6240] +* The authtoken model no longer exposes the `pk` in the admin URL. [#7341] +* Add `__repr__` for Request instances. [#7239] +* UTF-8 decoding with Latin-1 fallback for basic auth credentials. [#7193] +* CharField treats surrogate characters as a validation failure. [#7026] +* Don't include callables as default values in schemas. [#7105] +* Improve `ListField` schema output to include all available child information. [#7137] +* Allow `default=False` to be included for `BooleanField` schema outputs. [#7165] +* Include `"type"` information in `ChoiceField` schema outputs. [#7161] +* Include `"type": "object"` on schema objects. [#7169] +* Don't include component in schema output for DELETE requests. [#7229] +* Fix schema types for `DecimalField`. [#7254] +* Fix schema generation for `ObtainAuthToken` view. [#7211] +* Support passing `context=...` to view `.get_serializer()` methods. [#7298] +* Pass custom code to `PermissionDenied` if permission class has one set. [#7306] +* Include "example" in schema pagination output. [#7275] +* Default status code of 201 on schema output for POST requests. [#7206] +* Use camelCase for operation IDs in schema output. [#7208] +* Warn if duplicate operation IDs exist in schema output. [#7207] +* Improve handling of decimal type when mapping `ChoiceField` to a schema output. [#7264] +* Disable YAML aliases for OpenAPI schema outputs. [#7131] +* Fix action URL names for APIs included under a namespaced URL. [#7287] +* Update jQuery version from 3.4 to 3.5. [#7313] +* Fix `UniqueTogether` handling when serializer fields use `source=...`. [#7143] +* HTTP `HEAD` requests now set `self.action` correctly on a ViewSet instance. [#7223] +* Return a valid OpenAPI schema for the case where no API schema paths exist. [#7125] +* Include tests in package distribution. [#7145] +* Allow type checkers to support annotations like `ModelSerializer[Author]`. [#7385] +* Don't include invalid `charset=None` portion in the request `Content-Type` header when using APIClient. [#7400] +* Fix `\Z`/`\z` tokens in OpenAPI regexs. [#7389] +* Fix `PrimaryKeyRelatedField` and `HyperlinkedRelatedField` when source field is actually a property. [#7142] +* `Token.generate_key` is now a class method. [#7502] +* `@action` warns if method is wrapped in a decorator that does not preserve information using `@functools.wraps`. [#7098] + +--- + +## 3.11.x series + ### 3.11.0 **Date**: 12th December 2019 -* Drop `.set_context` API [in favour of a `requires_context` marker](../3.11-announcement#validator-default-context). +* Drop `.set_context` API [in favour of a `requires_context` marker](3.11-announcement.md#validator-default-context). * Changed default widget for TextField with choices to select box. [#6892][gh6892] * Supported nested writes on non-relational fields, such as JSONField. [#6916][gh6916] * Include request/response media types in OpenAPI schemas, based on configured parsers/renderers. [#6865][gh6865] diff --git a/mkdocs.yml b/mkdocs.yml index 484971a71..573898bca 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -66,6 +66,7 @@ nav: - 'Contributing to REST framework': 'community/contributing.md' - 'Project management': 'community/project-management.md' - 'Release Notes': 'community/release-notes.md' + - '3.12 Announcement': 'community/3.12-announcement.md' - '3.11 Announcement': 'community/3.11-announcement.md' - '3.10 Announcement': 'community/3.10-announcement.md' - '3.9 Announcement': 'community/3.9-announcement.md' diff --git a/rest_framework/__init__.py b/rest_framework/__init__.py index 8f2bc4466..afb2d3429 100644 --- a/rest_framework/__init__.py +++ b/rest_framework/__init__.py @@ -8,7 +8,7 @@ ______ _____ _____ _____ __ """ __title__ = 'Django REST framework' -__version__ = '3.11.0' +__version__ = '3.12.0' __author__ = 'Tom Christie' __license__ = 'BSD 3-Clause' __copyright__ = 'Copyright 2011-2019 Encode OSS Ltd' From 68b23075a2d72935f1e6c428c664d49412a8af68 Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Mon, 28 Sep 2020 10:54:52 +0100 Subject: [PATCH 34/66] Add date to 3.12 release. --- docs/community/release-notes.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/community/release-notes.md b/docs/community/release-notes.md index 636e91d6c..b9bccc3ac 100644 --- a/docs/community/release-notes.md +++ b/docs/community/release-notes.md @@ -38,6 +38,8 @@ You can determine your currently installed version using `pip show`: ### 3.12.0 +Date: 28th September 2020 + * Add `--file` option to `generateschema` command. [#7130] * Support `tags` for OpenAPI schema generation. See [the schema docs](https://www.django-rest-framework.org/api-guide/schemas/#grouping-operations-with-tags). [#7184] * Support customising the operation ID for schema generation. See [the schema docs](https://www.django-rest-framework.org/api-guide/schemas/#operationid). [#7190] From 995188f8c5bfdd0da29a7f9ca01898dfce5f0b37 Mon Sep 17 00:00:00 2001 From: Hugo Rodger-Brown Date: Mon, 28 Sep 2020 16:16:18 +0100 Subject: [PATCH 35/66] Add missing TokenProxy migration (#7557) Fixes #7554 --- .../authtoken/migrations/0003_tokenproxy.py | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 rest_framework/authtoken/migrations/0003_tokenproxy.py diff --git a/rest_framework/authtoken/migrations/0003_tokenproxy.py b/rest_framework/authtoken/migrations/0003_tokenproxy.py new file mode 100644 index 000000000..79405a7c0 --- /dev/null +++ b/rest_framework/authtoken/migrations/0003_tokenproxy.py @@ -0,0 +1,25 @@ +# Generated by Django 3.1.1 on 2020-09-28 09:34 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('authtoken', '0002_auto_20160226_1747'), + ] + + operations = [ + migrations.CreateModel( + name='TokenProxy', + fields=[ + ], + options={ + 'verbose_name': 'token', + 'proxy': True, + 'indexes': [], + 'constraints': [], + }, + bases=('authtoken.token',), + ), + ] From 05b3865838bcc0e4298a2c6a75cca69aad4f51d7 Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Mon, 28 Sep 2020 16:18:23 +0100 Subject: [PATCH 36/66] Version 3.12.1 --- docs/community/release-notes.md | 6 ++++++ rest_framework/__init__.py | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/community/release-notes.md b/docs/community/release-notes.md index b9bccc3ac..a300162aa 100644 --- a/docs/community/release-notes.md +++ b/docs/community/release-notes.md @@ -36,6 +36,12 @@ You can determine your currently installed version using `pip show`: ## 3.11.x series +### 3.12.1 + +Date: 28th September 2020 + +* Add `TokenProxy` migration. [#7557] + ### 3.12.0 Date: 28th September 2020 diff --git a/rest_framework/__init__.py b/rest_framework/__init__.py index afb2d3429..cd35f7a04 100644 --- a/rest_framework/__init__.py +++ b/rest_framework/__init__.py @@ -8,7 +8,7 @@ ______ _____ _____ _____ __ """ __title__ = 'Django REST framework' -__version__ = '3.12.0' +__version__ = '3.12.1' __author__ = 'Tom Christie' __license__ = 'BSD 3-Clause' __copyright__ = 'Copyright 2011-2019 Encode OSS Ltd' From 9edd5dfe5d65b99289b7a6d0d74deab89749a512 Mon Sep 17 00:00:00 2001 From: Ali Mirlou Date: Mon, 28 Sep 2020 23:15:30 +0330 Subject: [PATCH 37/66] Fix typo in release notes --- docs/community/release-notes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/community/release-notes.md b/docs/community/release-notes.md index a300162aa..26dca3e4f 100644 --- a/docs/community/release-notes.md +++ b/docs/community/release-notes.md @@ -34,7 +34,7 @@ You can determine your currently installed version using `pip show`: --- -## 3.11.x series +## 3.12.x series ### 3.12.1 From a03c85225ff79db42319fda4dfa6e65d316b6c03 Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Wed, 30 Sep 2020 09:10:36 +0100 Subject: [PATCH 38/66] Update test_templatetags.py --- tests/test_templatetags.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/tests/test_templatetags.py b/tests/test_templatetags.py index cdf10ab1e..4b84f6647 100644 --- a/tests/test_templatetags.py +++ b/tests/test_templatetags.py @@ -290,9 +290,6 @@ class URLizerTests(TestCase): For all items in dict test assert that the value is urlized key """ for original, urlized in data.items(): - print('====') - print(repr(urlize(original, nofollow=False))) - print(repr(urlized)) assert urlize(original, nofollow=False) == urlized def test_json_with_url(self): From be87eb43b348f1f079de81329218b79814b97173 Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Wed, 30 Sep 2020 09:44:31 +0100 Subject: [PATCH 39/66] Update release notes with 3.11.1, 3.11.2 --- docs/community/release-notes.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/docs/community/release-notes.md b/docs/community/release-notes.md index 26dca3e4f..a48888719 100644 --- a/docs/community/release-notes.md +++ b/docs/community/release-notes.md @@ -91,6 +91,18 @@ Date: 28th September 2020 ## 3.11.x series +### 3.11.2 + +**Date**: 30th September 2020 + +* **Security**: Drop `urlize_quoted_links` template tag in favour of Django's built-in `urlize`. Removes a XSS vulnerability for some kinds of content in the browsable API. + +### 3.11.1 + +**Date**: 5th August 2020 + +* Fix compat with Django 3.1 + ### 3.11.0 **Date**: 12th December 2019 From 91916a4db14cd6a06aca13fb9a46fc667f6c0682 Mon Sep 17 00:00:00 2001 From: Adam Johnson Date: Wed, 30 Sep 2020 13:47:06 +0100 Subject: [PATCH 40/66] Fix NullBooleanField warning (#7565) The argument to Field is 'allow_null'. --- rest_framework/fields.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rest_framework/fields.py b/rest_framework/fields.py index f218713f1..fdfba13f2 100644 --- a/rest_framework/fields.py +++ b/rest_framework/fields.py @@ -749,7 +749,7 @@ class NullBooleanField(BooleanField): warnings.warn( "The `NullBooleanField` is deprecated and will be removed starting " "with 3.14. Instead use the `BooleanField` field and set " - "`null=True` which does the same thing.", + "`allow_null=True` which does the same thing.", RemovedInDRF314Warning, stacklevel=2 ) From 86ec3da2daa7c585ac00c9900a6b482d7e819eac Mon Sep 17 00:00:00 2001 From: Emmanuel Meric de Bellefon Date: Mon, 5 Oct 2020 20:56:42 +0200 Subject: [PATCH 41/66] Update 6-viewsets-and-routers.md --- docs/tutorial/6-viewsets-and-routers.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tutorial/6-viewsets-and-routers.md b/docs/tutorial/6-viewsets-and-routers.md index 11e24448f..18989a3ee 100644 --- a/docs/tutorial/6-viewsets-and-routers.md +++ b/docs/tutorial/6-viewsets-and-routers.md @@ -2,7 +2,7 @@ REST framework includes an abstraction for dealing with `ViewSets`, that allows the developer to concentrate on modeling the state and interactions of the API, and leave the URL construction to be handled automatically, based on common conventions. -`ViewSet` classes are almost the same thing as `View` classes, except that they provide operations such as `read`, or `update`, and not method handlers such as `get` or `put`. +`ViewSet` classes are almost the same thing as `View` classes, except that they provide operations such as `retrieve`, or `update`, and not method handlers such as `get` or `put`. A `ViewSet` class is only bound to a set of method handlers at the last moment, when it is instantiated into a set of views, typically by using a `Router` class which handles the complexities of defining the URL conf for you. From a849627f88c95cf3561a51055a0d8af901430e6a Mon Sep 17 00:00:00 2001 From: Xavier Ordoquy Date: Mon, 5 Oct 2020 21:48:07 +0200 Subject: [PATCH 42/66] Fixes #7538 - use `retrieve` action name instead of `detail` --- docs/tutorial/6-viewsets-and-routers.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tutorial/6-viewsets-and-routers.md b/docs/tutorial/6-viewsets-and-routers.md index 11e24448f..3ce3ae710 100644 --- a/docs/tutorial/6-viewsets-and-routers.md +++ b/docs/tutorial/6-viewsets-and-routers.md @@ -16,7 +16,7 @@ First of all let's refactor our `UserList` and `UserDetail` views into a single class UserViewSet(viewsets.ReadOnlyModelViewSet): """ - This viewset automatically provides `list` and `detail` actions. + This viewset automatically provides `list` and `retrieve` actions. """ queryset = User.objects.all() serializer_class = UserSerializer From 6a45a6a36fedf5b2a9bfbb23cf12b8a1cc8acb3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E0=A4=B8=E0=A5=8D=E0=A4=AA=E0=A4=B0=E0=A5=8D=E0=A4=B6?= Date: Tue, 6 Oct 2020 17:59:11 +0545 Subject: [PATCH 43/66] Fix broken machinalis links (#7580) #7572 #7423 #7573 all are related to this --- docs/community/tutorials-and-resources.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/community/tutorials-and-resources.md b/docs/community/tutorials-and-resources.md index 6fdac6004..cfd3ba852 100644 --- a/docs/community/tutorials-and-resources.md +++ b/docs/community/tutorials-and-resources.md @@ -101,12 +101,12 @@ Want your Django REST Framework talk/tutorial/article to be added to our website [django-rest-framework-course]: https://teamtreehouse.com/library/django-rest-framework [pycon-uk-2016]: https://www.youtube.com/watch?v=FjmiGh7OqVg [django-under-hood-2014]: https://www.youtube.com/watch?v=3cSsbe-tA0E -[integrating-pandas-drf-and-bokeh]: https://machinalis.com/blog/pandas-django-rest-framework-bokeh/ -[controlling-uncertainty-on-web-apps-and-apis]: https://machinalis.com/blog/controlling-uncertainty-on-web-applications-and-apis/ -[full-text-search-in-drf]: https://machinalis.com/blog/full-text-search-on-django-rest-framework/ -[oauth2-authentication-with-drf]: https://machinalis.com/blog/oauth2-authentication/ -[nested-resources-with-drf]: https://machinalis.com/blog/nested-resources-with-django/ -[image-fields-with-drf]: https://machinalis.com/blog/image-fields-with-django-rest-framework/ +[integrating-pandas-drf-and-bokeh]: https://web.archive.org/web/20180104205117/http://machinalis.com/blog/pandas-django-rest-framework-bokeh/ +[controlling-uncertainty-on-web-apps-and-apis]: https://web.archive.org/web/20180104205043/https://machinalis.com/blog/controlling-uncertainty-on-web-applications-and-apis/ +[full-text-search-in-drf]: https://web.archive.org/web/20180104205059/http://machinalis.com/blog/full-text-search-on-django-rest-framework/ +[oauth2-authentication-with-drf]: https://web.archive.org/web/20180104205054/http://machinalis.com/blog/oauth2-authentication/ +[nested-resources-with-drf]: https://web.archive.org/web/20180104205109/http://machinalis.com/blog/nested-resources-with-django/ +[image-fields-with-drf]: https://web.archive.org/web/20180104205048/http://machinalis.com/blog/image-fields-with-django-rest-framework/ [chatbot-using-drf-part1]: https://chatbotslife.com/chatbot-using-django-rest-framework-api-ai-slack-part-1-3-69c7e38b7b1e#.g2aceuncf [new-django-admin-with-drf-and-emberjs]: https://blog.levit.be/new-django-admin-with-emberjs-what-are-the-news/ [drf-schema]: https://drf-schema-adapter.readthedocs.io/en/latest/ From 5e23b559f83f2ce2a4683111590909dc475d41a6 Mon Sep 17 00:00:00 2001 From: Mopsan Date: Fri, 9 Oct 2020 11:38:11 +0300 Subject: [PATCH 44/66] Fix example override of SchemaGenerator.get_schema() --- docs/api-guide/schemas.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/api-guide/schemas.md b/docs/api-guide/schemas.md index e39cd21a8..b4832b369 100644 --- a/docs/api-guide/schemas.md +++ b/docs/api-guide/schemas.md @@ -181,8 +181,8 @@ dictionary For example you might wish to add terms of service to the [top-level ``` class TOSSchemaGenerator(SchemaGenerator): - def get_schema(self): - schema = super().get_schema() + def get_schema(self, *args, **kwargs): + schema = super().get_schema(*args, **kwargs) schema["info"]["termsOfService"] = "https://example.com/tos.html" return schema ``` From 7921e9af434f2ccfde6962cf8a1b76331cc77722 Mon Sep 17 00:00:00 2001 From: Adam Johnson Date: Fri, 9 Oct 2020 10:48:03 +0100 Subject: [PATCH 45/66] Fix RemovedInDjango40Warning for middleware get_resopnse() (#7513) Fixes #7417. Fixes all these issues seen with `tox -e py38-django31`: ``` /Users/chainz/Documents/Projects/django-rest-framework/tests/test_request.py:208: RemovedInDjango40Warning: Passing None for the middleware get_response argument is deprecated. SessionMiddleware().process_request(self.wrapped_request) tests/test_requests_client.py: 1 test with warning tests/test_testing.py: 4 tests with warnings tests/test_throttling.py: 1 test with warning tests/authentication/test_authentication.py: 4 tests with warnings tests/browsable_api/test_browsable_api.py: 4 tests with warnings /Users/chainz/Documents/Projects/django-rest-framework/rest_framework/authentication.py:139: RemovedInDjango40Warning: Passing None for the middleware get_response argument is deprecated. check = CSRFCheck() ``` --- rest_framework/authentication.py | 5 ++++- tests/test_request.py | 8 ++++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/rest_framework/authentication.py b/rest_framework/authentication.py index a2ba53480..9111007c0 100644 --- a/rest_framework/authentication.py +++ b/rest_framework/authentication.py @@ -136,7 +136,10 @@ class SessionAuthentication(BaseAuthentication): """ Enforce CSRF validation for session based authentication. """ - check = CSRFCheck() + def dummy_get_response(request): # pragma: no cover + return None + + check = CSRFCheck(dummy_get_response) # populates request.META['CSRF_COOKIE'], which is used in process_view() check.process_request(request) reason = check.process_view(request, None, (), {}) diff --git a/tests/test_request.py b/tests/test_request.py index 4425c020f..8f55d00ed 100644 --- a/tests/test_request.py +++ b/tests/test_request.py @@ -205,8 +205,12 @@ class TestUserSetter(TestCase): # available to login and logout functions self.wrapped_request = factory.get('/') self.request = Request(self.wrapped_request) - SessionMiddleware().process_request(self.wrapped_request) - AuthenticationMiddleware().process_request(self.wrapped_request) + + def dummy_get_response(request): # pragma: no cover + return None + + SessionMiddleware(dummy_get_response).process_request(self.wrapped_request) + AuthenticationMiddleware(dummy_get_response).process_request(self.wrapped_request) User.objects.create_user('ringo', 'starr@thebeatles.com', 'yellow') self.user = authenticate(username='ringo', password='yellow') From 931b34e7deb3b54e9b8205aad3a2448ff319e2b8 Mon Sep 17 00:00:00 2001 From: Adam Johnson Date: Fri, 9 Oct 2020 11:09:34 +0100 Subject: [PATCH 46/66] Remove tox-venv from Travis setup (#7585) This was added in #6139. However it seems [tox-venv is no longer maintained](https://github.com/tox-dev/tox-venv), the related [virtualenv issue has been closed](https://github.com/pypa/virtualenv/issues/355), and I suspect with the virtualenv rewrite fixed the problem with site.py and the warnings referred to for the DRF tests. --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index c204c5460..2c2724bf6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -40,7 +40,7 @@ matrix: - env: DJANGO=master install: - - pip install tox tox-venv tox-travis + - pip install tox tox-travis script: - tox From 79daf315c4504d55bfd6025567be8ec9f35d361c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kry=C5=A1tof=20Piln=C3=A1=C4=8Dek?= Date: Fri, 9 Oct 2020 13:16:15 +0200 Subject: [PATCH 47/66] Fix: authtoken.TokenProxy cannot be proxy when not installed (#7571) closes https://github.com/encode/django-rest-framework/issues/7442 --- rest_framework/authtoken/models.py | 3 ++- tests/test_authtoken.py | 11 ++++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/rest_framework/authtoken/models.py b/rest_framework/authtoken/models.py index fd8a50e0e..540049295 100644 --- a/rest_framework/authtoken/models.py +++ b/rest_framework/authtoken/models.py @@ -49,5 +49,6 @@ class TokenProxy(Token): return self.user.pk class Meta: - proxy = True + proxy = 'rest_framework.authtoken' in settings.INSTALLED_APPS + abstract = 'rest_framework.authtoken' not in settings.INSTALLED_APPS verbose_name = "token" diff --git a/tests/test_authtoken.py b/tests/test_authtoken.py index 036e317ef..30e416d65 100644 --- a/tests/test_authtoken.py +++ b/tests/test_authtoken.py @@ -1,10 +1,11 @@ +import importlib from io import StringIO import pytest from django.contrib.admin import site from django.contrib.auth.models import User from django.core.management import CommandError, call_command -from django.test import TestCase +from django.test import TestCase, modify_settings from rest_framework.authtoken.admin import TokenAdmin from rest_framework.authtoken.management.commands.drf_create_token import \ @@ -21,6 +22,14 @@ class AuthTokenTests(TestCase): self.user = User.objects.create_user(username='test_user') self.token = Token.objects.create(key='test token', user=self.user) + def test_authtoken_can_be_imported_when_not_included_in_installed_apps(self): + import rest_framework.authtoken.models + with modify_settings(INSTALLED_APPS={'remove': 'rest_framework.authtoken'}): + importlib.reload(rest_framework.authtoken.models) + # Set the proxy and abstract properties back to the version, + # where authtoken is among INSTALLED_APPS. + importlib.reload(rest_framework.authtoken.models) + def test_model_admin_displayed_fields(self): mock_request = object() token_admin = TokenAdmin(self.token, self.site) From 79c37d0dc3740aa1c439f8a447e5e8b64fd567be Mon Sep 17 00:00:00 2001 From: David Smith <39445562+smithdc1@users.noreply.github.com> Date: Fri, 9 Oct 2020 12:21:22 +0100 Subject: [PATCH 48/66] Return NotImplemented sooner for ErrorDetail equality test (#7531) The test suite raises warnings when tested against Python 3.9 `DeprecationWarning: NotImplemented should not be used in a boolean context` Where `r` returns `NotImplemented` then this change returns `NotImplemented` first to avoid the comparison test. --- rest_framework/exceptions.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/rest_framework/exceptions.py b/rest_framework/exceptions.py index 345a40524..943dcc88c 100644 --- a/rest_framework/exceptions.py +++ b/rest_framework/exceptions.py @@ -73,6 +73,8 @@ class ErrorDetail(str): def __eq__(self, other): r = super().__eq__(other) + if r is NotImplemented: + return NotImplemented try: return r and self.code == other.code except AttributeError: From 563b04376828a9c3d4d0c3232c1dad342627168b Mon Sep 17 00:00:00 2001 From: Adam Johnson Date: Sat, 10 Oct 2020 17:34:00 +0100 Subject: [PATCH 49/66] Error on deprecation and pending deprecation warnings (#7586) Erroring on deprecation or pending deprecation warnings means they are caught early. This will avoid the cycle of releasing with 'support for Django X', then chasing all the deprecation warnings one-by-one. Instead, when a new Django version is added to the test matrix, it will fail until all the relevant warnings are fixed. This avoids passing these warnings on to users, some of whom don't upgrade until they are all fixed. --- tox.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tox.ini b/tox.ini index d5e769764..df6387d5e 100644 --- a/tox.ini +++ b/tox.ini @@ -14,7 +14,7 @@ DJANGO = master: djangomaster [testenv] -commands = ./runtests.py --fast --coverage {posargs} +commands = python -W error::DeprecationWarning -W error::PendingDeprecationWarning runtests.py --fast --coverage {posargs} envdir = {toxworkdir}/venvs/{envname} setenv = PYTHONDONTWRITEBYTECODE=1 From 1ef192811cee3e6953aeb3d8f724d45c3057b6e7 Mon Sep 17 00:00:00 2001 From: Thomas Riccardi Date: Sat, 10 Oct 2020 18:34:39 +0200 Subject: [PATCH 50/66] Add missing quoting for `data` keyword argument in serializer doc (#7587) --- docs/api-guide/serializers.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/api-guide/serializers.md b/docs/api-guide/serializers.md index efa325620..5e2705834 100644 --- a/docs/api-guide/serializers.md +++ b/docs/api-guide/serializers.md @@ -251,7 +251,7 @@ For more information see the [validators documentation](validators.md). When passing an initial object or queryset to a serializer instance, the object will be made available as `.instance`. If no initial object is passed then the `.instance` attribute will be `None`. -When passing data to a serializer instance, the unmodified data will be made available as `.initial_data`. If the data keyword argument is not passed then the `.initial_data` attribute will not exist. +When passing data to a serializer instance, the unmodified data will be made available as `.initial_data`. If the `data` keyword argument is not passed then the `.initial_data` attribute will not exist. ## Partial updates From ffde1691025761c97927f9f4bbd5a9f3ec9ea96e Mon Sep 17 00:00:00 2001 From: zach valenta Date: Sat, 10 Oct 2020 12:36:15 -0400 Subject: [PATCH 51/66] Add docs link to to_internal_value() (#7476) --- docs/api-guide/relations.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/api-guide/relations.md b/docs/api-guide/relations.md index 88b462e1a..d3d8b30b8 100644 --- a/docs/api-guide/relations.md +++ b/docs/api-guide/relations.md @@ -337,7 +337,7 @@ output representation should be generated from the model instance. To implement a custom relational field, you should override `RelatedField`, and implement the `.to_representation(self, value)` method. This method takes the target of the field as the `value` argument, and should return the representation that should be used to serialize the target. The `value` argument will typically be a model instance. -If you want to implement a read-write relational field, you must also implement the `.to_internal_value(self, data)` method. +If you want to implement a read-write relational field, you must also implement the [`.to_internal_value(self, data)` method][to_internal_value]. To provide a dynamic queryset based on the `context`, you can also override `.get_queryset(self)` instead of specifying `.queryset` on the class or when initializing the field. @@ -605,3 +605,4 @@ The [rest-framework-generic-relations][drf-nested-relations] library provides re [drf-nested-relations]: https://github.com/Ian-Foote/rest-framework-generic-relations [django-intermediary-manytomany]: https://docs.djangoproject.com/en/2.2/topics/db/models/#intermediary-manytomany [dealing-with-nested-objects]: https://www.django-rest-framework.org/api-guide/serializers/#dealing-with-nested-objects +[to_internal_value]: https://www.django-rest-framework.org/api-guide/serializers/#to_internal_valueself-data From eff97efa283529c6503b9ebde6506691cecb17a2 Mon Sep 17 00:00:00 2001 From: Thomas Leese Date: Sat, 10 Oct 2020 18:02:21 +0100 Subject: [PATCH 52/66] Don't catch exceptions in get_queryset (#7480) In the `to_internal_value` method of the primary key and slug related fields, `TypeError`s and `ValueError`s are caught from `self.get_queryset().get(...)` and presented to the user. This works fine for most cases, but can cause problems if the exception is coming from `self.get_queryset()` rather than from the `.get(...)`. It means errors in the `get_queryset` method can be hidden and presented back to the user as though, for example, the input provided to the `to_internal_value` was the wrong type, whereas in reality there's a bug in the `get_queryset` method and therefore it should bubble up and be exposed as a server error. I've decided to fix this because twice now I've had to debug why I'm seeing `invalid_type` errors from my serializer (errors like `wrong pk type - int` when the `pk` type on my model is `int`) when the real problem was a bug in my custom `get_queryset` method. --- rest_framework/relations.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/rest_framework/relations.py b/rest_framework/relations.py index 3cd46379d..eaf27e1d9 100644 --- a/rest_framework/relations.py +++ b/rest_framework/relations.py @@ -257,8 +257,9 @@ class PrimaryKeyRelatedField(RelatedField): def to_internal_value(self, data): if self.pk_field is not None: data = self.pk_field.to_internal_value(data) + queryset = self.get_queryset() try: - return self.get_queryset().get(pk=data) + return queryset.get(pk=data) except ObjectDoesNotExist: self.fail('does_not_exist', pk_value=data) except (TypeError, ValueError): @@ -454,8 +455,9 @@ class SlugRelatedField(RelatedField): super().__init__(**kwargs) def to_internal_value(self, data): + queryset = self.get_queryset() try: - return self.get_queryset().get(**{self.slug_field: data}) + return queryset.get(**{self.slug_field: data}) except ObjectDoesNotExist: self.fail('does_not_exist', slug_name=self.slug_field, value=smart_str(data)) except (TypeError, ValueError): From 0bdd537cc454477886fefc9873353b2364d94158 Mon Sep 17 00:00:00 2001 From: Aarni Koskela Date: Mon, 12 Oct 2020 17:40:26 +0300 Subject: [PATCH 53/66] Ignore derivations of BrowsableAPIRenderer in OpenAPI schema (#7497) * Ignore derivations of BrowsableAPIRenderer in OpenAPI schema * Improve test_renderer_mapping test Co-authored-by: Carlton Gibson --- rest_framework/schemas/openapi.py | 2 +- tests/schemas/test_openapi.py | 17 +++++++++++++---- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/rest_framework/schemas/openapi.py b/rest_framework/schemas/openapi.py index 8a8e267e0..4ecb7a65f 100644 --- a/rest_framework/schemas/openapi.py +++ b/rest_framework/schemas/openapi.py @@ -595,7 +595,7 @@ class AutoSchema(ViewInspector): media_types = [] for renderer in self.view.renderer_classes: # BrowsableAPIRenderer not relevant to OpenAPI spec - if renderer == renderers.BrowsableAPIRenderer: + if issubclass(renderer, renderers.BrowsableAPIRenderer): continue media_types.append(renderer.media_type) return media_types diff --git a/tests/schemas/test_openapi.py b/tests/schemas/test_openapi.py index 8ea910dc1..542c377b1 100644 --- a/tests/schemas/test_openapi.py +++ b/tests/schemas/test_openapi.py @@ -10,7 +10,9 @@ from rest_framework import filters, generics, pagination, routers, serializers from rest_framework.authtoken.views import obtain_auth_token from rest_framework.compat import uritemplate from rest_framework.parsers import JSONParser, MultiPartParser -from rest_framework.renderers import JSONRenderer, OpenAPIRenderer +from rest_framework.renderers import ( + BaseRenderer, BrowsableAPIRenderer, JSONRenderer, OpenAPIRenderer +) from rest_framework.request import Request from rest_framework.schemas.openapi import AutoSchema, SchemaGenerator @@ -507,9 +509,16 @@ class TestOperationIntrospection(TestCase): path = '/{id}/' method = 'GET' + class CustomBrowsableAPIRenderer(BrowsableAPIRenderer): + media_type = 'image/jpeg' # that's a wild API renderer + + class TextRenderer(BaseRenderer): + media_type = 'text/plain' + format = 'text' + class View(generics.CreateAPIView): serializer_class = views.ExampleSerializer - renderer_classes = [JSONRenderer] + renderer_classes = [JSONRenderer, TextRenderer, BrowsableAPIRenderer, CustomBrowsableAPIRenderer] view = create_view( View, @@ -524,8 +533,8 @@ class TestOperationIntrospection(TestCase): # schema support is there success_response = responses['200'] - assert len(success_response['content'].keys()) == 1 - assert 'application/json' in success_response['content'] + # Check that the API renderers aren't included, but custom renderers are + assert set(success_response['content']) == {'application/json', 'text/plain'} def test_openapi_yaml_rendering_without_aliases(self): renderer = OpenAPIRenderer() From 95f0b0867a7542f7304401bfb6ae74c6e804934b Mon Sep 17 00:00:00 2001 From: Pawel Date: Tue, 13 Oct 2020 08:32:38 +0200 Subject: [PATCH 54/66] Documentation: improve the action decorator documentation (#7316) (#7380) * Documentation: improve the action decorator documentation (#7316) --- docs/api-guide/viewsets.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/docs/api-guide/viewsets.md b/docs/api-guide/viewsets.md index d7aa7ad3b..22cc3d8aa 100644 --- a/docs/api-guide/viewsets.md +++ b/docs/api-guide/viewsets.md @@ -171,11 +171,6 @@ A more complete example of extra actions: serializer = self.get_serializer(recent_users, many=True) return Response(serializer.data) -The decorator can additionally take extra arguments that will be set for the routed view only. For example: - - @action(detail=True, methods=['post'], permission_classes=[IsAdminOrIsSelf]) - def set_password(self, request, pk=None): - ... The `action` decorator will route `GET` requests by default, but may also accept other HTTP methods by setting the `methods` argument. For example: @@ -183,7 +178,14 @@ The `action` decorator will route `GET` requests by default, but may also accept def unset_password(self, request, pk=None): ... -The two new actions will then be available at the urls `^users/{pk}/set_password/$` and `^users/{pk}/unset_password/$` + +The decorator allows you to override any viewset-level configuration such as `permission_classes`, `serializer_class`, `filter_backends`...: + + @action(detail=True, methods=['post'], permission_classes=[IsAdminOrIsSelf]) + def set_password(self, request, pk=None): + ... + +The two new actions will then be available at the urls `^users/{pk}/set_password/$` and `^users/{pk}/unset_password/$`. Use the `url_path` and `url_name` parameters to change the URL segement and the reverse URL name of the action. To view all extra actions, call the `.get_extra_actions()` method. From 3799633cdeb679eec681451bd318867dbd292114 Mon Sep 17 00:00:00 2001 From: Tom Christie Date: Tue, 13 Oct 2020 14:17:53 +0100 Subject: [PATCH 55/66] Version 3.12.2 --- docs/community/release-notes.md | 8 ++++++++ rest_framework/__init__.py | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/docs/community/release-notes.md b/docs/community/release-notes.md index a48888719..c981b9ac9 100644 --- a/docs/community/release-notes.md +++ b/docs/community/release-notes.md @@ -36,6 +36,14 @@ You can determine your currently installed version using `pip show`: ## 3.12.x series +### 3.12.2 + +Date: 13th October 2020 + +* Fix issue if `rest_framework.authtoken.models` is imported, but `rest_framework.authtoken` is not in INSTALLED_APPS. [#7571] +* Ignore subclasses of BrowsableAPIRenderer in OpenAPI schema. [#7497] +* Narrower exception catching in serilizer fields, to ensure that any errors in broken `get_queryset()` methods are not masked. [#7480] + ### 3.12.1 Date: 28th September 2020 diff --git a/rest_framework/__init__.py b/rest_framework/__init__.py index 05d5adc46..7ff188a5a 100644 --- a/rest_framework/__init__.py +++ b/rest_framework/__init__.py @@ -10,7 +10,7 @@ ______ _____ _____ _____ __ import django __title__ = 'Django REST framework' -__version__ = '3.12.1' +__version__ = '3.12.2' __author__ = 'Tom Christie' __license__ = 'BSD 3-Clause' __copyright__ = 'Copyright 2011-2019 Encode OSS Ltd' From 04e0c2b9ab6616a28148ce32e2d19858ccfe6c69 Mon Sep 17 00:00:00 2001 From: David Smith <39445562+smithdc1@users.noreply.github.com> Date: Tue, 13 Oct 2020 17:27:08 +0100 Subject: [PATCH 56/66] Bumped Markdown version to 3.3 (#7590) --- requirements/requirements-optionals.txt | 3 +- tests/test_description.py | 372 ++++++++++++------------ 2 files changed, 182 insertions(+), 193 deletions(-) diff --git a/requirements/requirements-optionals.txt b/requirements/requirements-optionals.txt index 2b7a18a13..739555667 100644 --- a/requirements/requirements-optionals.txt +++ b/requirements/requirements-optionals.txt @@ -1,6 +1,7 @@ # Optional packages which may be used with REST framework. psycopg2-binary>=2.8.5, <2.9 -markdown==3.1.1 +markdown==3.3;python_version>="3.6" +markdown==3.2.2;python_version=="3.5" pygments==2.4.2 django-guardian==2.2.0 django-filter>=2.2.0, <2.3 diff --git a/tests/test_description.py b/tests/test_description.py index ae00fe4a9..9e7e4dc32 100644 --- a/tests/test_description.py +++ b/tests/test_description.py @@ -1,192 +1,180 @@ -from django.test import TestCase - -from rest_framework.compat import apply_markdown -from rest_framework.utils.formatting import dedent -from rest_framework.views import APIView - -# We check that docstrings get nicely un-indented. -DESCRIPTION = """an example docstring -==================== - -* list -* list - -another header --------------- - - code block - -indented - -# hash style header # - -``` json -[{ - "alpha": 1, - "beta: "this is a string" -}] -```""" - - -# If markdown is installed we also test it's working -# (and that our wrapped forces '=' to h2 and '-' to h3) -MARKED_DOWN_HILITE = """ -
    [{
    "alpha": 1,
    \ - "beta: "this\ - is a \ -string"
    }]
    - -


    """ - -MARKED_DOWN_NOT_HILITE = """ -

    json -[{ - "alpha": 1, - "beta: "this is a string" -}]

    """ - -# We support markdown < 2.1 and markdown >= 2.1 -MARKED_DOWN_lt_21 = """

    an example docstring

    -
      -
    • list
    • -
    • list
    • -
    -

    another header

    -
    code block
    -
    -

    indented

    -

    hash style header

    %s""" - -MARKED_DOWN_gte_21 = """

    an example docstring

    -
      -
    • list
    • -
    • list
    • -
    -

    another header

    -
    code block
    -
    -

    indented

    -

    hash style header

    %s""" - - -class TestViewNamesAndDescriptions(TestCase): - def test_view_name_uses_class_name(self): - """ - Ensure view names are based on the class name. - """ - class MockView(APIView): - pass - assert MockView().get_view_name() == 'Mock' - - def test_view_name_uses_name_attribute(self): - class MockView(APIView): - name = 'Foo' - assert MockView().get_view_name() == 'Foo' - - def test_view_name_uses_suffix_attribute(self): - class MockView(APIView): - suffix = 'List' - assert MockView().get_view_name() == 'Mock List' - - def test_view_name_preferences_name_over_suffix(self): - class MockView(APIView): - name = 'Foo' - suffix = 'List' - assert MockView().get_view_name() == 'Foo' - - def test_view_description_uses_docstring(self): - """Ensure view descriptions are based on the docstring.""" - class MockView(APIView): - """an example docstring - ==================== - - * list - * list - - another header - -------------- - - code block - - indented - - # hash style header # - - ``` json - [{ - "alpha": 1, - "beta: "this is a string" - }] - ```""" - - assert MockView().get_view_description() == DESCRIPTION - - def test_view_description_uses_description_attribute(self): - class MockView(APIView): - description = 'Foo' - assert MockView().get_view_description() == 'Foo' - - def test_view_description_allows_empty_description(self): - class MockView(APIView): - """Description.""" - description = '' - assert MockView().get_view_description() == '' - - def test_view_description_can_be_empty(self): - """ - Ensure that if a view has no docstring, - then it's description is the empty string. - """ - class MockView(APIView): - pass - assert MockView().get_view_description() == '' - - def test_view_description_can_be_promise(self): - """ - Ensure a view may have a docstring that is actually a lazily evaluated - class that can be converted to a string. - - See: https://github.com/encode/django-rest-framework/issues/1708 - """ - # use a mock object instead of gettext_lazy to ensure that we can't end - # up with a test case string in our l10n catalog - - class MockLazyStr: - def __init__(self, string): - self.s = string - - def __str__(self): - return self.s - - class MockView(APIView): - __doc__ = MockLazyStr("a gettext string") - - assert MockView().get_view_description() == 'a gettext string' - - def test_markdown(self): - """ - Ensure markdown to HTML works as expected. - """ - if apply_markdown: - md_applied = apply_markdown(DESCRIPTION) - gte_21_match = ( - md_applied == ( - MARKED_DOWN_gte_21 % MARKED_DOWN_HILITE) or - md_applied == ( - MARKED_DOWN_gte_21 % MARKED_DOWN_NOT_HILITE)) - lt_21_match = ( - md_applied == ( - MARKED_DOWN_lt_21 % MARKED_DOWN_HILITE) or - md_applied == ( - MARKED_DOWN_lt_21 % MARKED_DOWN_NOT_HILITE)) - assert gte_21_match or lt_21_match - - -def test_dedent_tabs(): - result = 'first string\n\nsecond string' - assert dedent(" first string\n\n second string") == result - assert dedent("first string\n\n second string") == result - assert dedent("\tfirst string\n\n\tsecond string") == result - assert dedent("first string\n\n\tsecond string") == result +import sys + +import pytest +from django.test import TestCase + +from rest_framework.compat import apply_markdown +from rest_framework.utils.formatting import dedent +from rest_framework.views import APIView + +# We check that docstrings get nicely un-indented. +DESCRIPTION = """an example docstring +==================== + +* list +* list + +another header +-------------- + + code block + +indented + +# hash style header # + +``` json +[{ + "alpha": 1, + "beta: "this is a string" +}] +```""" + + +# If markdown is installed we also test it's working +# (and that our wrapped forces '=' to h2 and '-' to h3) +MARKDOWN_BASE = """

    an example docstring

    +
      +
    • list
    • +
    • list
    • +
    +

    another header

    +
    code block
    +
    +

    indented

    +

    hash style header

    %s""" + +MARKDOWN_gte_33 = """ +
    [{
    \ + "alpha":\ + 1,
    \ + "beta: "this\ + is a \ +string"
    }]\ +
    +


    """ + +MARKDOWN_lt_33 = """ +
    [{
    \ + "alpha":\ + 1,
    \ + "beta: "this\ + is a\ + string"
    }]\ +
    + +


    """ + + +class TestViewNamesAndDescriptions(TestCase): + def test_view_name_uses_class_name(self): + """ + Ensure view names are based on the class name. + """ + class MockView(APIView): + pass + assert MockView().get_view_name() == 'Mock' + + def test_view_name_uses_name_attribute(self): + class MockView(APIView): + name = 'Foo' + assert MockView().get_view_name() == 'Foo' + + def test_view_name_uses_suffix_attribute(self): + class MockView(APIView): + suffix = 'List' + assert MockView().get_view_name() == 'Mock List' + + def test_view_name_preferences_name_over_suffix(self): + class MockView(APIView): + name = 'Foo' + suffix = 'List' + assert MockView().get_view_name() == 'Foo' + + def test_view_description_uses_docstring(self): + """Ensure view descriptions are based on the docstring.""" + class MockView(APIView): + """an example docstring + ==================== + + * list + * list + + another header + -------------- + + code block + + indented + + # hash style header # + + ``` json + [{ + "alpha": 1, + "beta: "this is a string" + }] + ```""" + + assert MockView().get_view_description() == DESCRIPTION + + def test_view_description_uses_description_attribute(self): + class MockView(APIView): + description = 'Foo' + assert MockView().get_view_description() == 'Foo' + + def test_view_description_allows_empty_description(self): + class MockView(APIView): + """Description.""" + description = '' + assert MockView().get_view_description() == '' + + def test_view_description_can_be_empty(self): + """ + Ensure that if a view has no docstring, + then it's description is the empty string. + """ + class MockView(APIView): + pass + assert MockView().get_view_description() == '' + + def test_view_description_can_be_promise(self): + """ + Ensure a view may have a docstring that is actually a lazily evaluated + class that can be converted to a string. + + See: https://github.com/encode/django-rest-framework/issues/1708 + """ + # use a mock object instead of gettext_lazy to ensure that we can't end + # up with a test case string in our l10n catalog + + class MockLazyStr: + def __init__(self, string): + self.s = string + + def __str__(self): + return self.s + + class MockView(APIView): + __doc__ = MockLazyStr("a gettext string") + + assert MockView().get_view_description() == 'a gettext string' + + @pytest.mark.skipif(not apply_markdown, reason="Markdown is not installed") + def test_markdown(self): + """ + Ensure markdown to HTML works as expected. + """ + # Markdown 3.3 is only supported on Python 3.6 and higher + if sys.version_info >= (3, 6): + assert apply_markdown(DESCRIPTION) == MARKDOWN_BASE % MARKDOWN_gte_33 + else: + assert apply_markdown(DESCRIPTION) == MARKDOWN_BASE % MARKDOWN_lt_33 + + +def test_dedent_tabs(): + result = 'first string\n\nsecond string' + assert dedent(" first string\n\n second string") == result + assert dedent("first string\n\n second string") == result + assert dedent("\tfirst string\n\n\tsecond string") == result + assert dedent("first string\n\n\tsecond string") == result From a0115e66d4583905613346f65ff6cbb98092e3c4 Mon Sep 17 00:00:00 2001 From: Xavier Ordoquy Date: Tue, 13 Oct 2020 21:30:05 +0200 Subject: [PATCH 57/66] restore the transifex configuration This reverts commit 6957aaae8594b42cbf368d361031ce5fb9eb7246. --- .tx/config | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 .tx/config diff --git a/.tx/config b/.tx/config new file mode 100644 index 000000000..e151a7e6f --- /dev/null +++ b/.tx/config @@ -0,0 +1,9 @@ +[main] +host = https://www.transifex.com +lang_map = sr@latin:sr_Latn, zh-Hans:zh_Hans, zh-Hant:zh_Hant + +[django-rest-framework.djangopo] +file_filter = rest_framework/locale//LC_MESSAGES/django.po +source_file = rest_framework/locale/en_US/LC_MESSAGES/django.po +source_lang = en_US +type = PO From 47cfbdac97c8bafd88a1eea796301e61f9bb9f36 Mon Sep 17 00:00:00 2001 From: Xavier Ordoquy Date: Tue, 13 Oct 2020 21:40:33 +0200 Subject: [PATCH 58/66] Translations updated from transifex and compiled --- .../locale/ar/LC_MESSAGES/django.mo | Bin 6525 -> 12150 bytes .../locale/ar/LC_MESSAGES/django.po | 536 ++++++++++------ .../locale/az/LC_MESSAGES/django.mo | Bin 0 -> 10428 bytes .../locale/az/LC_MESSAGES/django.po | 573 +++++++++++++++++ .../locale/bg/LC_MESSAGES/django.mo | Bin 0 -> 13083 bytes .../locale/bg/LC_MESSAGES/django.po | 572 +++++++++++++++++ .../locale/ca/LC_MESSAGES/django.mo | Bin 9605 -> 9300 bytes .../locale/ca/LC_MESSAGES/django.po | 379 ++++++++---- .../locale/cs/LC_MESSAGES/django.mo | Bin 8990 -> 10519 bytes .../locale/cs/LC_MESSAGES/django.po | 427 ++++++++----- .../locale/da/LC_MESSAGES/django.mo | Bin 10360 -> 9955 bytes .../locale/da/LC_MESSAGES/django.po | 387 ++++++++---- .../locale/de/LC_MESSAGES/django.mo | Bin 10885 -> 10490 bytes .../locale/de/LC_MESSAGES/django.po | 389 ++++++++---- .../locale/el/LC_MESSAGES/django.mo | Bin 13466 -> 12933 bytes .../locale/el/LC_MESSAGES/django.po | 395 ++++++++---- .../locale/en/LC_MESSAGES/django.mo | Bin 10185 -> 12285 bytes .../locale/en/LC_MESSAGES/django.po | 387 ++++++++---- .../locale/en_US/LC_MESSAGES/django.po | 371 +++++++---- .../locale/es/LC_MESSAGES/django.mo | Bin 11023 -> 10627 bytes .../locale/es/LC_MESSAGES/django.po | 392 ++++++++---- .../locale/et/LC_MESSAGES/django.mo | Bin 8691 -> 10096 bytes .../locale/et/LC_MESSAGES/django.po | 428 ++++++++----- .../locale/fa/LC_MESSAGES/django.mo | Bin 466 -> 11976 bytes .../locale/fa/LC_MESSAGES/django.po | 549 ++++++++++------- .../locale/fa_IR/LC_MESSAGES/django.mo | Bin 479 -> 11989 bytes .../locale/fa_IR/LC_MESSAGES/django.po | 549 ++++++++++------- .../locale/fi/LC_MESSAGES/django.mo | Bin 10508 -> 10197 bytes .../locale/fi/LC_MESSAGES/django.po | 414 ++++++++----- .../locale/fr/LC_MESSAGES/django.mo | Bin 10973 -> 10662 bytes .../locale/fr/LC_MESSAGES/django.po | 447 +++++++++----- .../locale/hu/LC_MESSAGES/django.mo | Bin 9082 -> 10844 bytes .../locale/hu/LC_MESSAGES/django.po | 437 ++++++++----- .../locale/hy/LC_MESSAGES/django.mo | Bin 0 -> 12885 bytes .../locale/hy/LC_MESSAGES/django.po | 573 +++++++++++++++++ .../locale/id/LC_MESSAGES/django.mo | Bin 469 -> 5188 bytes .../locale/id/LC_MESSAGES/django.po | 461 +++++++++----- .../locale/it/LC_MESSAGES/django.mo | Bin 10318 -> 10480 bytes .../locale/it/LC_MESSAGES/django.po | 417 ++++++++----- .../locale/ja/LC_MESSAGES/django.mo | Bin 12254 -> 11759 bytes .../locale/ja/LC_MESSAGES/django.po | 387 ++++++++---- .../locale/ko_KR/LC_MESSAGES/django.mo | Bin 11774 -> 11698 bytes .../locale/ko_KR/LC_MESSAGES/django.po | 400 ++++++++---- .../locale/lt/LC_MESSAGES/django.mo | Bin 0 -> 5056 bytes .../locale/lt/LC_MESSAGES/django.po | 573 +++++++++++++++++ .../locale/lv/LC_MESSAGES/django.mo | Bin 10800 -> 10423 bytes .../locale/lv/LC_MESSAGES/django.po | 387 ++++++++---- .../locale/mk/LC_MESSAGES/django.mo | Bin 12619 -> 12121 bytes .../locale/mk/LC_MESSAGES/django.po | 387 ++++++++---- .../locale/nb/LC_MESSAGES/django.mo | Bin 10317 -> 9928 bytes .../locale/nb/LC_MESSAGES/django.po | 387 ++++++++---- .../locale/ne_NP/LC_MESSAGES/django.mo | Bin 0 -> 15636 bytes .../locale/ne_NP/LC_MESSAGES/django.po | 574 ++++++++++++++++++ .../locale/nl/LC_MESSAGES/django.mo | Bin 10567 -> 10163 bytes .../locale/nl/LC_MESSAGES/django.po | 390 ++++++++---- .../locale/pl/LC_MESSAGES/django.mo | Bin 11080 -> 10673 bytes .../locale/pl/LC_MESSAGES/django.po | 389 ++++++++---- .../locale/pt/LC_MESSAGES/django.mo | Bin 476 -> 10382 bytes .../locale/pt/LC_MESSAGES/django.po | 546 ++++++++++------- .../locale/pt_BR/LC_MESSAGES/django.mo | Bin 10804 -> 10397 bytes .../locale/pt_BR/LC_MESSAGES/django.po | 390 ++++++++---- .../locale/ro/LC_MESSAGES/django.mo | Bin 10854 -> 10701 bytes .../locale/ro/LC_MESSAGES/django.po | 398 ++++++++---- .../locale/ru/LC_MESSAGES/django.mo | Bin 13400 -> 13160 bytes .../locale/ru/LC_MESSAGES/django.po | 393 ++++++++---- .../locale/ru_RU/LC_MESSAGES/django.mo | Bin 0 -> 5208 bytes .../locale/ru_RU/LC_MESSAGES/django.po | 573 +++++++++++++++++ .../locale/sk/LC_MESSAGES/django.mo | Bin 9370 -> 9164 bytes .../locale/sk/LC_MESSAGES/django.po | 381 ++++++++---- .../locale/sl/LC_MESSAGES/django.mo | Bin 10349 -> 9985 bytes .../locale/sl/LC_MESSAGES/django.po | 387 ++++++++---- .../locale/sv/LC_MESSAGES/django.mo | Bin 10584 -> 10204 bytes .../locale/sv/LC_MESSAGES/django.po | 387 ++++++++---- .../locale/th/LC_MESSAGES/django.mo | Bin 0 -> 8880 bytes .../locale/th/LC_MESSAGES/django.po | 573 +++++++++++++++++ .../locale/tr/LC_MESSAGES/django.mo | Bin 10509 -> 10073 bytes .../locale/tr/LC_MESSAGES/django.po | 389 ++++++++---- .../locale/tr_TR/LC_MESSAGES/django.mo | Bin 10481 -> 10292 bytes .../locale/tr_TR/LC_MESSAGES/django.po | 396 ++++++++---- .../locale/uk/LC_MESSAGES/django.mo | Bin 13437 -> 13245 bytes .../locale/uk/LC_MESSAGES/django.po | 411 ++++++++----- .../locale/vi/LC_MESSAGES/django.mo | Bin 469 -> 2179 bytes .../locale/vi/LC_MESSAGES/django.po | 413 ++++++++----- .../locale/zh_CN/LC_MESSAGES/django.mo | Bin 10301 -> 9915 bytes .../locale/zh_CN/LC_MESSAGES/django.po | 387 ++++++++---- .../locale/zh_Hans/LC_MESSAGES/django.mo | Bin 10321 -> 9938 bytes .../locale/zh_Hans/LC_MESSAGES/django.po | 389 ++++++++---- .../locale/zh_Hant/LC_MESSAGES/django.mo | Bin 488 -> 4809 bytes .../locale/zh_Hant/LC_MESSAGES/django.po | 470 +++++++++----- 89 files changed, 14471 insertions(+), 5369 deletions(-) create mode 100644 rest_framework/locale/az/LC_MESSAGES/django.mo create mode 100644 rest_framework/locale/az/LC_MESSAGES/django.po create mode 100644 rest_framework/locale/bg/LC_MESSAGES/django.mo create mode 100644 rest_framework/locale/bg/LC_MESSAGES/django.po create mode 100644 rest_framework/locale/hy/LC_MESSAGES/django.mo create mode 100644 rest_framework/locale/hy/LC_MESSAGES/django.po create mode 100644 rest_framework/locale/lt/LC_MESSAGES/django.mo create mode 100644 rest_framework/locale/lt/LC_MESSAGES/django.po create mode 100644 rest_framework/locale/ne_NP/LC_MESSAGES/django.mo create mode 100644 rest_framework/locale/ne_NP/LC_MESSAGES/django.po create mode 100644 rest_framework/locale/ru_RU/LC_MESSAGES/django.mo create mode 100644 rest_framework/locale/ru_RU/LC_MESSAGES/django.po create mode 100644 rest_framework/locale/th/LC_MESSAGES/django.mo create mode 100644 rest_framework/locale/th/LC_MESSAGES/django.po diff --git a/rest_framework/locale/ar/LC_MESSAGES/django.mo b/rest_framework/locale/ar/LC_MESSAGES/django.mo index 19a41dfd6e6ccc0c4ebc3b5cce8325eecd65fb65..f793d7c73b74b37eee04252018de72e7505a305d 100644 GIT binary patch literal 12150 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 B_B#Lo delta 1987 zcmY+^TWnNC7{KvaC{QZ5mP;>`GA+GOx@>o=m9`WE5-jTS_w3&t!#`G(j4RqYj#`eAX-e(HU#4@SbJfgc8i(*A$|vez&q;>sPy*Y6R8zf;h_X1_IAlVpLN|x3hcz6ULo%1FrtE#F8M+Ei;OUdVQmCTl=iGe<9nY#(W|4OPQ2Cw3s68fwr^ zQpe&c9o7fK15QNu#p46fa4cX}mNu9JrKj_)vwc33D67xkDeLl?_?%bgZg!#r5xvhD zNJSG#6Pp_{BlEYI(FOkLTcbzJ>GI?4v8dX{ocrSGSR|mHNJOFuC-$7$9!@3?#S;;= zJ(?JFl1V2X(~)S*G4E8Yn7K3EH|V6y+J&dgxkZ!9lF@|P#YuSseOY_x;I?t1;Wx>-ye^~ zqW!6GB$+R%eBM{7-51@L-BEj9yQA()_EYKF^8vG`YLoe<>U!Q*`+YmyF>S9hp40Y{ z&2o`-$Nbt(*qr^)X6(D#p0#;2i#$NCy%M#@&cf@Se zYt3gXj+)P#2HJQD8Jr-BjLj+%8L<;nQ8PoHo2P7+pxrU^eapDHwsN^CZ*4Ty?X|rD zMJ`$Ufs#, 2017 # Bashar Al-Abdulhadi, 2016-2017 # Eyad Toma , 2015,2017 +# zak zak , 2020 msgid "" msgstr "" "Project-Id-Version: Django REST framework\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-07-12 16:13+0100\n" -"PO-Revision-Date: 2017-10-18 09:51+0000\n" -"Last-Translator: Andrew Ayoub \n" +"POT-Creation-Date: 2020-10-13 21:45+0200\n" +"PO-Revision-Date: 2020-10-13 19:45+0000\n" +"Last-Translator: Xavier Ordoquy \n" "Language-Team: Arabic (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/ar/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,40 +22,40 @@ msgstr "" "Language: ar\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" -#: authentication.py:73 +#: authentication.py:70 msgid "Invalid basic header. No credentials provided." -msgstr "" +msgstr "رأس أساسي غير صالح, لم تقدم اي بيانات." -#: authentication.py:76 +#: authentication.py:73 msgid "Invalid basic header. Credentials string should not contain spaces." -msgstr "" +msgstr "رأس أساسي غير صالح, سلسلة البيانات لا يجب أن تحتوي على أي أحرف مسافات" -#: authentication.py:82 +#: authentication.py:83 msgid "Invalid basic header. Credentials not correctly base64 encoded." -msgstr "" +msgstr "رأس أساسي غير صالح, البيانات ليست مرمّزة بصحة على أساس64." -#: authentication.py:99 +#: authentication.py:101 msgid "Invalid username/password." msgstr "اسم المستخدم/كلمة السر غير صحيحين." -#: authentication.py:102 authentication.py:198 +#: authentication.py:104 authentication.py:206 msgid "User inactive or deleted." msgstr "المستخدم غير مفعل او تم حذفه." -#: authentication.py:176 +#: authentication.py:184 msgid "Invalid token header. No credentials provided." -msgstr "" +msgstr "رمز الراْس المميّز غير صالح, لم تقدم أي بيانات." -#: authentication.py:179 +#: authentication.py:187 msgid "Invalid token header. Token string should not contain spaces." -msgstr "" +msgstr "رمز الراْس المميّز غير صالح, سلسلة الرمز المميّز لا يجب أن تحتوي على أي أحرف مسافات." -#: authentication.py:185 +#: authentication.py:193 msgid "" "Invalid token header. Token string should not contain invalid characters." -msgstr "" +msgstr "رمز الراْس المميّز غير صالح, سلسلة الرمز المميّز لا يجب أن تحتوي على أي أحرف غير صالحة." -#: authentication.py:195 +#: authentication.py:203 msgid "Invalid token." msgstr "رمز غير صحيح." @@ -62,382 +63,515 @@ msgstr "رمز غير صحيح." msgid "Auth Token" msgstr "رمز التفويض" -#: authtoken/models.py:15 +#: authtoken/models.py:13 msgid "Key" msgstr "المفتاح" -#: authtoken/models.py:18 +#: authtoken/models.py:16 msgid "User" msgstr "المستخدم" -#: authtoken/models.py:20 +#: authtoken/models.py:18 msgid "Created" msgstr "أنشئ" -#: authtoken/models.py:29 +#: authtoken/models.py:27 authtoken/serializers.py:19 msgid "Token" msgstr "الرمز" -#: authtoken/models.py:30 +#: authtoken/models.py:28 msgid "Tokens" msgstr "الرموز" -#: authtoken/serializers.py:8 +#: authtoken/serializers.py:9 msgid "Username" msgstr "اسم المستخدم" -#: authtoken/serializers.py:9 +#: authtoken/serializers.py:13 msgid "Password" msgstr "كلمة المرور" -#: authtoken/serializers.py:20 -msgid "User account is disabled." -msgstr "حساب المستخدم غير مفعل." - -#: authtoken/serializers.py:23 +#: authtoken/serializers.py:35 msgid "Unable to log in with provided credentials." msgstr "تعذر تسجيل الدخول بالبيانات التي ادخلتها." -#: authtoken/serializers.py:26 +#: authtoken/serializers.py:38 msgid "Must include \"username\" and \"password\"." msgstr "يجب أن تتضمن \"اسم المستخدم\" و \"كلمة المرور\"." -#: exceptions.py:49 +#: exceptions.py:102 msgid "A server error occurred." msgstr "حدث خطأ في المخدم." -#: exceptions.py:84 -msgid "Malformed request." +#: exceptions.py:142 +msgid "Invalid input." msgstr "" -#: exceptions.py:89 +#: exceptions.py:161 +msgid "Malformed request." +msgstr "الطلب صيغ بشكل سيء." + +#: exceptions.py:167 msgid "Incorrect authentication credentials." msgstr "بيانات الدخول غير صحيحة." -#: exceptions.py:94 +#: exceptions.py:173 msgid "Authentication credentials were not provided." msgstr "لم يتم تزويد بيانات الدخول." -#: exceptions.py:99 +#: exceptions.py:179 msgid "You do not have permission to perform this action." msgstr "ليس لديك صلاحية للقيام بهذا الإجراء." -#: exceptions.py:104 views.py:81 +#: exceptions.py:185 msgid "Not found." msgstr "غير موجود." -#: exceptions.py:109 +#: exceptions.py:191 +#, python-brace-format msgid "Method \"{method}\" not allowed." -msgstr "طلب غير مسموح به" +msgstr "الطريقة \"{method}\" غير مسموح بها." -#: exceptions.py:120 +#: exceptions.py:202 msgid "Could not satisfy the request Accept header." -msgstr "" +msgstr "لم نتمكن من تلبية الرٱس Accept في الطلب." -#: exceptions.py:132 +#: exceptions.py:212 +#, python-brace-format msgid "Unsupported media type \"{media_type}\" in request." -msgstr "" +msgstr "الوسيط \"{media_type}\" الموجود في الطلب غير معتمد." -#: exceptions.py:145 +#: exceptions.py:223 msgid "Request was throttled." +msgstr "تم تقييد الطلب." + +#: exceptions.py:224 +#, python-brace-format +msgid "Expected available in {wait} second." msgstr "" -#: fields.py:269 relations.py:206 relations.py:239 validators.py:98 -#: validators.py:181 +#: exceptions.py:225 +#, python-brace-format +msgid "Expected available in {wait} seconds." +msgstr "" + +#: fields.py:316 relations.py:245 relations.py:279 validators.py:90 +#: validators.py:183 msgid "This field is required." msgstr "هذا الحقل مطلوب." -#: fields.py:270 +#: fields.py:317 msgid "This field may not be null." msgstr "لا يمكن لهذا الحقل ان يكون فارغاً null." -#: fields.py:608 fields.py:639 -msgid "\"{input}\" is not a valid boolean." -msgstr "\"{input}\" ليس قيمة منطقية." +#: fields.py:701 +msgid "Must be a valid boolean." +msgstr "" -#: fields.py:674 +#: fields.py:766 +msgid "Not a valid string." +msgstr "" + +#: fields.py:767 msgid "This field may not be blank." msgstr "لا يمكن لهذا الحقل ان يكون فارغاً." -#: fields.py:675 fields.py:1675 +#: fields.py:768 fields.py:1881 +#, python-brace-format msgid "Ensure this field has no more than {max_length} characters." msgstr "تأكد ان الحقل لا يزيد عن {max_length} محرف." -#: fields.py:676 +#: fields.py:769 +#, python-brace-format msgid "Ensure this field has at least {min_length} characters." msgstr "تأكد ان الحقل {min_length} محرف على الاقل." -#: fields.py:713 +#: fields.py:816 msgid "Enter a valid email address." msgstr "عليك ان تدخل بريد إلكتروني صالح." -#: fields.py:724 +#: fields.py:827 msgid "This value does not match the required pattern." msgstr "هذه القيمة لا تطابق النمط المطلوب." -#: fields.py:735 +#: fields.py:838 msgid "" "Enter a valid \"slug\" consisting of letters, numbers, underscores or " "hyphens." +msgstr "أدخل \"slug\" صالح يحتوي على حروف، أرقام، شُرط سفلية أو واصلات." + +#: fields.py:839 +msgid "" +"Enter a valid \"slug\" consisting of Unicode letters, numbers, underscores, " +"or hyphens." msgstr "" -#: fields.py:747 +#: fields.py:854 msgid "Enter a valid URL." msgstr "الرجاء إدخال رابط إلكتروني صالح." -#: fields.py:760 -msgid "\"{value}\" is not a valid UUID." +#: fields.py:867 +msgid "Must be a valid UUID." msgstr "" -#: fields.py:796 +#: fields.py:903 msgid "Enter a valid IPv4 or IPv6 address." -msgstr "برجاء إدخال عنوان IPV4 أو IPV6 صحيح" +msgstr "أدخِل عنوان IPV4 أو IPV6 صحيح." -#: fields.py:821 +#: fields.py:931 msgid "A valid integer is required." msgstr "الرجاء إدخال رقم صحيح صالح." -#: fields.py:822 fields.py:857 fields.py:891 +#: fields.py:932 fields.py:969 fields.py:1005 fields.py:1366 +#, python-brace-format msgid "Ensure this value is less than or equal to {max_value}." msgstr "تأكد ان القيمة أقل أو تساوي {max_value}." -#: fields.py:823 fields.py:858 fields.py:892 +#: fields.py:933 fields.py:970 fields.py:1006 fields.py:1367 +#, python-brace-format msgid "Ensure this value is greater than or equal to {min_value}." msgstr "تأكد ان القيمة أكبر أو تساوي {min_value}." -#: fields.py:824 fields.py:859 fields.py:896 +#: fields.py:934 fields.py:971 fields.py:1010 msgid "String value too large." -msgstr "القيمه اكبر من المسموح" +msgstr "السلسلة اطول من القيمة المسموح بها." -#: fields.py:856 fields.py:890 +#: fields.py:968 fields.py:1004 msgid "A valid number is required." msgstr "الرجاء إدخال رقم صالح." -#: fields.py:893 +#: fields.py:1007 +#, python-brace-format msgid "Ensure that there are no more than {max_digits} digits in total." msgstr "تأكد ان القيمة لا تحوي أكثر من {max_digits} رقم." -#: fields.py:894 +#: fields.py:1008 +#, python-brace-format msgid "" "Ensure that there are no more than {max_decimal_places} decimal places." -msgstr "" +msgstr "تأكد انه لا يوجد اكثر من {max_decimal_places} منازل عشرية." -#: fields.py:895 +#: fields.py:1009 +#, python-brace-format msgid "" "Ensure that there are no more than {max_whole_digits} digits before the " "decimal point." -msgstr "" +msgstr "تأكد انه لا يوجد اكثر من {max_whole_digits} أرقام قبل النقطة العشرية." -#: fields.py:1025 +#: fields.py:1148 +#, python-brace-format msgid "Datetime has wrong format. Use one of these formats instead: {format}." msgstr "صيغة التاريخ و الوقت غير صحيحة. عليك أن تستخدم واحدة من هذه الصيغ التالية: {format}." -#: fields.py:1026 +#: fields.py:1149 msgid "Expected a datetime but got a date." msgstr "متوقع تاريخ و وقت و وجد تاريخ فقط" -#: fields.py:1103 +#: fields.py:1150 +#, python-brace-format +msgid "Invalid datetime for the timezone \"{timezone}\"." +msgstr "" + +#: fields.py:1151 +msgid "Datetime value out of range." +msgstr "" + +#: fields.py:1236 +#, python-brace-format msgid "Date has wrong format. Use one of these formats instead: {format}." msgstr "صيغة التاريخ غير صحيحة. عليك أن تستخدم واحدة من هذه الصيغ التالية: {format}." -#: fields.py:1104 +#: fields.py:1237 msgid "Expected a date but got a datetime." msgstr "متوقع تاريخ فقط و وجد تاريخ ووقت" -#: fields.py:1170 +#: fields.py:1303 +#, python-brace-format msgid "Time has wrong format. Use one of these formats instead: {format}." msgstr "صيغة الوقت غير صحيحة. عليك أن تستخدم واحدة من هذه الصيغ التالية: {format}." -#: fields.py:1232 +#: fields.py:1365 +#, python-brace-format msgid "Duration has wrong format. Use one of these formats instead: {format}." -msgstr "صيغة المده غير صحيحه, برجاء إستخدام أحد هذه الصيغ {format}" +msgstr "صيغة المدة غير صحيحه, يرجى إستخدام إحدى هذه الصيغ: {format}." -#: fields.py:1251 fields.py:1300 +#: fields.py:1399 fields.py:1456 +#, python-brace-format msgid "\"{input}\" is not a valid choice." msgstr "\"{input}\" ليست واحدة من الخيارات الصالحة." -#: fields.py:1254 relations.py:71 relations.py:441 +#: fields.py:1402 +#, python-brace-format msgid "More than {count} items..." msgstr "أكثر من {count} عنصر..." -#: fields.py:1301 fields.py:1448 relations.py:437 serializers.py:524 +#: fields.py:1457 fields.py:1603 relations.py:485 serializers.py:570 +#, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." -msgstr "" +msgstr "المتوقع وجود قائمة عناصر لكن وجد النوع \"{input_type}\"." -#: fields.py:1302 +#: fields.py:1458 msgid "This selection may not be empty." -msgstr "" +msgstr "هذا التحديد لا يجب أن يكون فارغا." -#: fields.py:1339 +#: fields.py:1495 +#, python-brace-format msgid "\"{input}\" is not a valid path choice." -msgstr "" +msgstr "{input} كإختيار مسار غير صالح." -#: fields.py:1358 +#: fields.py:1514 msgid "No file was submitted." msgstr "لم يتم إرسال أي ملف." -#: fields.py:1359 +#: fields.py:1515 msgid "" "The submitted data was not a file. Check the encoding type on the form." -msgstr "" +msgstr "المعطيات المرسولة ليست ملف. إفحص نوع الترميز في النموذج." -#: fields.py:1360 +#: fields.py:1516 msgid "No filename could be determined." -msgstr "" +msgstr "ما من إسم ملف أمكن تحديده." -#: fields.py:1361 +#: fields.py:1517 msgid "The submitted file is empty." msgstr "الملف الذي تم إرساله فارغ." -#: fields.py:1362 +#: fields.py:1518 +#, python-brace-format msgid "" "Ensure this filename has at most {max_length} characters (it has {length})." msgstr "تأكد ان اسم الملف لا يحوي أكثر من {max_length} محرف (الإسم المرسل يحوي {length} محرف)." -#: fields.py:1410 +#: fields.py:1566 msgid "" "Upload a valid image. The file you uploaded was either not an image or a " "corrupted image." -msgstr "" +msgstr "الرجاء تحميل صورة صالحة. الملف الذي تم تحميله إما لم يكن صورة او انه كان صورة تالفة." -#: fields.py:1449 relations.py:438 serializers.py:525 +#: fields.py:1604 relations.py:486 serializers.py:571 msgid "This list may not be empty." +msgstr "القائمة يجب أن لا تكون فارغة." + +#: fields.py:1605 +#, python-brace-format +msgid "Ensure this field has at least {min_length} elements." msgstr "" -#: fields.py:1502 +#: fields.py:1606 +#, python-brace-format +msgid "Ensure this field has no more than {max_length} elements." +msgstr "" + +#: fields.py:1682 +#, python-brace-format msgid "Expected a dictionary of items but got type \"{input_type}\"." +msgstr "المتوقع كان قاموس عناصر و لكن النوع المتحصل عليه هو \"{input_type}\"." + +#: fields.py:1683 +msgid "This dictionary may not be empty." msgstr "" -#: fields.py:1549 +#: fields.py:1755 msgid "Value must be valid JSON." -msgstr "" +msgstr "القيمة يجب أن تكون JSON صالح." -#: filters.py:36 templates/rest_framework/filters/django_filter.html:5 -msgid "Submit" -msgstr "أرسل" - -#: filters.py:336 -msgid "ascending" -msgstr "تصاعدي" - -#: filters.py:337 -msgid "descending" -msgstr "تنازلي" - -#: pagination.py:193 -msgid "Invalid page." -msgstr "صفحة غير صحيحة." - -#: pagination.py:427 -msgid "Invalid cursor" -msgstr "" - -#: relations.py:207 -msgid "Invalid pk \"{pk_value}\" - object does not exist." -msgstr "معرف العنصر \"{pk_value}\" غير صالح - العنصر غير موجود." - -#: relations.py:208 -msgid "Incorrect type. Expected pk value, received {data_type}." -msgstr "" - -#: relations.py:240 -msgid "Invalid hyperlink - No URL match." -msgstr "" - -#: relations.py:241 -msgid "Invalid hyperlink - Incorrect URL match." -msgstr "" - -#: relations.py:242 -msgid "Invalid hyperlink - Object does not exist." -msgstr "" - -#: relations.py:243 -msgid "Incorrect type. Expected URL string, received {data_type}." -msgstr "" - -#: relations.py:401 -msgid "Object with {slug_name}={value} does not exist." -msgstr "" - -#: relations.py:402 -msgid "Invalid value." -msgstr "قيمة غير صالحة." - -#: serializers.py:326 -msgid "Invalid data. Expected a dictionary, but got {datatype}." -msgstr "" - -#: templates/rest_framework/admin.html:116 -#: templates/rest_framework/base.html:128 -msgid "Filters" -msgstr "مرشحات" - -#: templates/rest_framework/filters/django_filter.html:2 -#: templates/rest_framework/filters/django_filter_crispyforms.html:4 -msgid "Field filters" -msgstr "مرشحات الحقول" - -#: templates/rest_framework/filters/ordering.html:3 -msgid "Ordering" -msgstr "الترتيب" - -#: templates/rest_framework/filters/search.html:2 +#: filters.py:49 templates/rest_framework/filters/search.html:2 msgid "Search" msgstr "بحث" -#: templates/rest_framework/horizontal/radio.html:2 -#: templates/rest_framework/inline/radio.html:2 -#: templates/rest_framework/vertical/radio.html:2 +#: filters.py:50 +msgid "A search term." +msgstr "" + +#: filters.py:180 templates/rest_framework/filters/ordering.html:3 +msgid "Ordering" +msgstr "الترتيب" + +#: filters.py:181 +msgid "Which field to use when ordering the results." +msgstr "" + +#: filters.py:287 +msgid "ascending" +msgstr "تصاعدي" + +#: filters.py:288 +msgid "descending" +msgstr "تنازلي" + +#: pagination.py:174 +msgid "A page number within the paginated result set." +msgstr "" + +#: pagination.py:179 pagination.py:372 pagination.py:590 +msgid "Number of results to return per page." +msgstr "" + +#: pagination.py:189 +msgid "Invalid page." +msgstr "صفحة غير صحيحة." + +#: pagination.py:374 +msgid "The initial index from which to return the results." +msgstr "" + +#: pagination.py:581 +msgid "The pagination cursor value." +msgstr "" + +#: pagination.py:583 +msgid "Invalid cursor" +msgstr "مؤشر غير صالح" + +#: relations.py:246 +#, python-brace-format +msgid "Invalid pk \"{pk_value}\" - object does not exist." +msgstr "معرف العنصر \"{pk_value}\" غير صالح - العنصر غير موجود." + +#: relations.py:247 +#, python-brace-format +msgid "Incorrect type. Expected pk value, received {data_type}." +msgstr "نوع خاطئ. المتوقع قيمة من pk، لكن المتحصل عليه {data_type}." + +#: relations.py:280 +msgid "Invalid hyperlink - No URL match." +msgstr "إرتباط تشعبي غير صالح - لا مطابقة لURL." + +#: relations.py:281 +msgid "Invalid hyperlink - Incorrect URL match." +msgstr "إرتباط تشعبي غير صالح - مطابقة خاطئة لURL." + +#: relations.py:282 +msgid "Invalid hyperlink - Object does not exist." +msgstr "إرتباط تشعبي غير صالح - عنصر غير موجود." + +#: relations.py:283 +#, python-brace-format +msgid "Incorrect type. Expected URL string, received {data_type}." +msgstr "نوع خاطئ. المتوقع سلسلة URL، لكن المتحصل عليه {data_type}." + +#: relations.py:448 +#, python-brace-format +msgid "Object with {slug_name}={value} does not exist." +msgstr "عنصر ب {slug_name}={value} غير موجود." + +#: relations.py:449 +msgid "Invalid value." +msgstr "قيمة غير صالحة." + +#: schemas/utils.py:32 +msgid "unique integer value" +msgstr "" + +#: schemas/utils.py:34 +msgid "UUID string" +msgstr "" + +#: schemas/utils.py:36 +msgid "unique value" +msgstr "" + +#: schemas/utils.py:38 +#, python-brace-format +msgid "A {value_type} identifying this {name}." +msgstr "" + +#: serializers.py:337 +#, python-brace-format +msgid "Invalid data. Expected a dictionary, but got {datatype}." +msgstr "معطيات غير صالحة. المتوقع هو قاموس، لكن المتحصل عليه {datatype}." + +#: templates/rest_framework/admin.html:116 +#: templates/rest_framework/base.html:136 +msgid "Extra Actions" +msgstr "" + +#: templates/rest_framework/admin.html:130 +#: templates/rest_framework/base.html:150 +msgid "Filters" +msgstr "مرشحات" + +#: templates/rest_framework/base.html:37 +msgid "navbar" +msgstr "" + +#: templates/rest_framework/base.html:75 +msgid "content" +msgstr "" + +#: templates/rest_framework/base.html:78 +msgid "request form" +msgstr "" + +#: templates/rest_framework/base.html:157 +msgid "main content" +msgstr "" + +#: templates/rest_framework/base.html:173 +msgid "request info" +msgstr "" + +#: templates/rest_framework/base.html:177 +msgid "response info" +msgstr "" + +#: templates/rest_framework/horizontal/radio.html:4 +#: templates/rest_framework/inline/radio.html:3 +#: templates/rest_framework/vertical/radio.html:3 msgid "None" msgstr "لا شيء" -#: templates/rest_framework/horizontal/select_multiple.html:2 -#: templates/rest_framework/inline/select_multiple.html:2 -#: templates/rest_framework/vertical/select_multiple.html:2 +#: templates/rest_framework/horizontal/select_multiple.html:4 +#: templates/rest_framework/inline/select_multiple.html:3 +#: templates/rest_framework/vertical/select_multiple.html:3 msgid "No items to select." -msgstr "" +msgstr "ما من عناصر للتحديد." -#: validators.py:43 +#: validators.py:39 msgid "This field must be unique." msgstr "هذا الحقل يجب أن يكون فريد" -#: validators.py:97 +#: validators.py:89 +#, python-brace-format msgid "The fields {field_names} must make a unique set." +msgstr "الحقول {field_names} يجب أن تشكل مجموعة فريدة." + +#: validators.py:171 +#, python-brace-format +msgid "Surrogate characters are not allowed: U+{code_point:X}." msgstr "" -#: validators.py:245 +#: validators.py:243 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" date." -msgstr "" +msgstr "الحقل يجب ان يكون فريد للتاريخ {date_field}." -#: validators.py:260 +#: validators.py:258 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" month." -msgstr "" +msgstr "الحقل يجب ان يكون فريد للشهر {date_field}." -#: validators.py:273 +#: validators.py:271 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" year." -msgstr "" +msgstr "الحقل يجب ان يكون فريد للعام {date_field}." -#: versioning.py:42 +#: versioning.py:40 msgid "Invalid version in \"Accept\" header." -msgstr "" +msgstr "إصدار غير صالح في الرٱس \"Accept\"." -#: versioning.py:73 +#: versioning.py:71 msgid "Invalid version in URL path." -msgstr "" +msgstr "إصدار غير صالح في المسار URL." -#: versioning.py:115 +#: versioning.py:116 msgid "Invalid version in URL path. Does not match any version namespace." -msgstr "" +msgstr " إصدار غير صالح في المسار URL. لا يطابق أي إصدار من مساحة الإسم." -#: versioning.py:147 +#: versioning.py:148 msgid "Invalid version in hostname." -msgstr "" +msgstr "إصدار غير صالح في اسم المضيف." -#: versioning.py:169 +#: versioning.py:170 msgid "Invalid version in query parameter." -msgstr "" - -#: views.py:88 -msgid "Permission denied." -msgstr "ليس لديك صلاحية." +msgstr "إصدار غير صالح في معلمة الإستعلام." diff --git a/rest_framework/locale/az/LC_MESSAGES/django.mo b/rest_framework/locale/az/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..08648351e8ed72361f7148ed5f2e38e412dea206 GIT binary patch literal 10428 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 OM2QKMStIZS>i+>T@S}zR literal 0 HcmV?d00001 diff --git a/rest_framework/locale/az/LC_MESSAGES/django.po b/rest_framework/locale/az/LC_MESSAGES/django.po new file mode 100644 index 000000000..43a224259 --- /dev/null +++ b/rest_framework/locale/az/LC_MESSAGES/django.po @@ -0,0 +1,573 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Emin Mastizada , 2020 +msgid "" +msgstr "" +"Project-Id-Version: Django REST framework\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-10-13 21:45+0200\n" +"PO-Revision-Date: 2020-10-13 19:45+0000\n" +"Last-Translator: Xavier Ordoquy \n" +"Language-Team: Azerbaijani (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/az/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: az\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: authentication.py:70 +msgid "Invalid basic header. No credentials provided." +msgstr "Xətalı sadə başlıq. İstifadəçi məlumatları təchiz edilməyib." + +#: authentication.py:73 +msgid "Invalid basic header. Credentials string should not contain spaces." +msgstr "Xətalı sadə başlıq. İstifadəçi məlumatlarında boşluq olmamalıdır." + +#: authentication.py:83 +msgid "Invalid basic header. Credentials not correctly base64 encoded." +msgstr "Xətalı sadə başlıq. İstifadəçi məlumatları base64 ilə düzgün şifrələnməyib." + +#: authentication.py:101 +msgid "Invalid username/password." +msgstr "Xətalı istifadəçi adı/parol." + +#: authentication.py:104 authentication.py:206 +msgid "User inactive or deleted." +msgstr "İstifadəçi aktiv deyil və ya silinib." + +#: authentication.py:184 +msgid "Invalid token header. No credentials provided." +msgstr "Xətalı token başlığı. İstifadəçi məlumatları təchiz edilməyib." + +#: authentication.py:187 +msgid "Invalid token header. Token string should not contain spaces." +msgstr "Xətalı token başlığı. Token mətnində boşluqlar olmamalıdır." + +#: authentication.py:193 +msgid "" +"Invalid token header. Token string should not contain invalid characters." +msgstr "Xətalı token başlığı. Token mətnində xətalı simvollar olmamalıdır." + +#: authentication.py:203 +msgid "Invalid token." +msgstr "Xətalı token." + +#: authtoken/apps.py:7 +msgid "Auth Token" +msgstr "Təsdiqləmə Tokeni" + +#: authtoken/models.py:13 +msgid "Key" +msgstr "Açar" + +#: authtoken/models.py:16 +msgid "User" +msgstr "İstifadəçi" + +#: authtoken/models.py:18 +msgid "Created" +msgstr "Yaradılıb" + +#: authtoken/models.py:27 authtoken/serializers.py:19 +msgid "Token" +msgstr "Token" + +#: authtoken/models.py:28 +msgid "Tokens" +msgstr "Tokenlər" + +#: authtoken/serializers.py:9 +msgid "Username" +msgstr "İstifadəçi adı" + +#: authtoken/serializers.py:13 +msgid "Password" +msgstr "Parol" + +#: authtoken/serializers.py:35 +msgid "Unable to log in with provided credentials." +msgstr "Təchiz edilən istifadəçi məlumatları ilə daxil olmaq mümkün olmadı." + +#: authtoken/serializers.py:38 +msgid "Must include \"username\" and \"password\"." +msgstr "Mütləq \"username\" və \"password\" olmalıdır." + +#: exceptions.py:102 +msgid "A server error occurred." +msgstr "Server xətası yaşandı." + +#: exceptions.py:142 +msgid "Invalid input." +msgstr "" + +#: exceptions.py:161 +msgid "Malformed request." +msgstr "Qüsurlu istək." + +#: exceptions.py:167 +msgid "Incorrect authentication credentials." +msgstr "Səhv təsdiqləmə məlumatları." + +#: exceptions.py:173 +msgid "Authentication credentials were not provided." +msgstr "Təsdiqləmə məlumatları təchiz edilməyib." + +#: exceptions.py:179 +msgid "You do not have permission to perform this action." +msgstr "Bu əməliyyat üçün icazəniz yoxdur." + +#: exceptions.py:185 +msgid "Not found." +msgstr "Tapılmadı." + +#: exceptions.py:191 +#, python-brace-format +msgid "Method \"{method}\" not allowed." +msgstr "\"{method}\" yöntəminə icazə verilmir." + +#: exceptions.py:202 +msgid "Could not satisfy the request Accept header." +msgstr "İstəyin Accept başlığını qane etmək mümkün olmadı." + +#: exceptions.py:212 +#, python-brace-format +msgid "Unsupported media type \"{media_type}\" in request." +msgstr "İstəkdə dəstəklənməyən \"{media_type}\" mediya növü." + +#: exceptions.py:223 +msgid "Request was throttled." +msgstr "İstək nəzərə alınmadı." + +#: exceptions.py:224 +#, python-brace-format +msgid "Expected available in {wait} second." +msgstr "" + +#: exceptions.py:225 +#, python-brace-format +msgid "Expected available in {wait} seconds." +msgstr "" + +#: fields.py:316 relations.py:245 relations.py:279 validators.py:90 +#: validators.py:183 +msgid "This field is required." +msgstr "Bu sahə tələb edilir." + +#: fields.py:317 +msgid "This field may not be null." +msgstr "Bu sahə null ola bilməz." + +#: fields.py:701 +msgid "Must be a valid boolean." +msgstr "" + +#: fields.py:766 +msgid "Not a valid string." +msgstr "" + +#: fields.py:767 +msgid "This field may not be blank." +msgstr "Bu sahə boş ola bilməz." + +#: fields.py:768 fields.py:1881 +#, python-brace-format +msgid "Ensure this field has no more than {max_length} characters." +msgstr "Bu sahənin ən çox {max_length} simvolu olduğuna əmin olun." + +#: fields.py:769 +#, python-brace-format +msgid "Ensure this field has at least {min_length} characters." +msgstr "Bu sahənin ən az {min_length} simvolu olduğuna əmin olun." + +#: fields.py:816 +msgid "Enter a valid email address." +msgstr "Keçərli e-poçt ünvanı daxil edin." + +#: fields.py:827 +msgid "This value does not match the required pattern." +msgstr "Bu dəyər tələb edilən formaya uyğun gəlmir." + +#: fields.py:838 +msgid "" +"Enter a valid \"slug\" consisting of letters, numbers, underscores or " +"hyphens." +msgstr "Hərf, rəqəm, alt xətt və defislərdən ibarət keçərli \"slug\" daxil edin." + +#: fields.py:839 +msgid "" +"Enter a valid \"slug\" consisting of Unicode letters, numbers, underscores, " +"or hyphens." +msgstr "" + +#: fields.py:854 +msgid "Enter a valid URL." +msgstr "Keçərli URL daxil edin." + +#: fields.py:867 +msgid "Must be a valid UUID." +msgstr "" + +#: fields.py:903 +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Keçərli IPv4 və ya IPv6 ünvanı daxil edin." + +#: fields.py:931 +msgid "A valid integer is required." +msgstr "Keçərli tam ədəd tələb edilir." + +#: fields.py:932 fields.py:969 fields.py:1005 fields.py:1366 +#, python-brace-format +msgid "Ensure this value is less than or equal to {max_value}." +msgstr "Bu dəyərin uzunluğunun ən çox {max_value} olduğuna əmin olun." + +#: fields.py:933 fields.py:970 fields.py:1006 fields.py:1367 +#, python-brace-format +msgid "Ensure this value is greater than or equal to {min_value}." +msgstr "Bu dəyərin uzunluğunun ən az {min_value} olduğuna əmin olun." + +#: fields.py:934 fields.py:971 fields.py:1010 +msgid "String value too large." +msgstr "Yazı dəyəri çox uzundur." + +#: fields.py:968 fields.py:1004 +msgid "A valid number is required." +msgstr "Keçərli rəqəm tələb edilir." + +#: fields.py:1007 +#, python-brace-format +msgid "Ensure that there are no more than {max_digits} digits in total." +msgstr "Ən çox {max_digits} rəqəm olduğuna əmin olun." + +#: fields.py:1008 +#, python-brace-format +msgid "" +"Ensure that there are no more than {max_decimal_places} decimal places." +msgstr "Ən çox {max_decimal_places} onluq kəsr hissəsi olduğuna əmin olun." + +#: fields.py:1009 +#, python-brace-format +msgid "" +"Ensure that there are no more than {max_whole_digits} digits before the " +"decimal point." +msgstr "Onluq kərsdən əvvəl ən çox {max_whole_digits} rəqəm olduğuna əmin olun." + +#: fields.py:1148 +#, python-brace-format +msgid "Datetime has wrong format. Use one of these formats instead: {format}." +msgstr "Datetime dəyəri səhvdir. Əvəzinə bu formatlardan birini işlədin: {format}." + +#: fields.py:1149 +msgid "Expected a datetime but got a date." +msgstr "Datetime gözlənirdi amma date gəldi." + +#: fields.py:1150 +#, python-brace-format +msgid "Invalid datetime for the timezone \"{timezone}\"." +msgstr "" + +#: fields.py:1151 +msgid "Datetime value out of range." +msgstr "" + +#: fields.py:1236 +#, python-brace-format +msgid "Date has wrong format. Use one of these formats instead: {format}." +msgstr "Date dəyəri səhvdir. Əvəzinə bu formatlardan birini işlədin: {format}." + +#: fields.py:1237 +msgid "Expected a date but got a datetime." +msgstr "Date gözlənirdi amma datetime gəldi." + +#: fields.py:1303 +#, python-brace-format +msgid "Time has wrong format. Use one of these formats instead: {format}." +msgstr "Vaxt formatı səhvdir. Əvəzinə bu formatlardan birini işlədin: {format}." + +#: fields.py:1365 +#, python-brace-format +msgid "Duration has wrong format. Use one of these formats instead: {format}." +msgstr "Müddət formatı səhvdir. Əvəzinə bu formatlardan birini işlədin: {format}." + +#: fields.py:1399 fields.py:1456 +#, python-brace-format +msgid "\"{input}\" is not a valid choice." +msgstr "\"{input}\" keçərli seçim deyil." + +#: fields.py:1402 +#, python-brace-format +msgid "More than {count} items..." +msgstr "{count} elementdən daha çoxdur..." + +#: fields.py:1457 fields.py:1603 relations.py:485 serializers.py:570 +#, python-brace-format +msgid "Expected a list of items but got type \"{input_type}\"." +msgstr "Elementlər siyahısı gözlənirdi, amma \"{input_type}\" növü gəldi." + +#: fields.py:1458 +msgid "This selection may not be empty." +msgstr "Bu seçim boş ola bilməz." + +#: fields.py:1495 +#, python-brace-format +msgid "\"{input}\" is not a valid path choice." +msgstr "\"{input}\" keçərli yol seçimi deyil." + +#: fields.py:1514 +msgid "No file was submitted." +msgstr "Heç bir fayl göndərilmədi." + +#: fields.py:1515 +msgid "" +"The submitted data was not a file. Check the encoding type on the form." +msgstr "Göndərilən məlumat fayl deyildi. Anketin şifrələmə (encoding) növünü yoxlayın." + +#: fields.py:1516 +msgid "No filename could be determined." +msgstr "Faylın adı təyin edilə bilmədi." + +#: fields.py:1517 +msgid "The submitted file is empty." +msgstr "Göndərilən fayl boşdur." + +#: fields.py:1518 +#, python-brace-format +msgid "" +"Ensure this filename has at most {max_length} characters (it has {length})." +msgstr "Fayl adının ən çox {max_length} simvoldan ibarət olduğuna əmin olun (hazırki: {length})." + +#: fields.py:1566 +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "Keçərli şəkil yükləyin. Yüklədiyiniz fayl ya şəkil deyil, ya da ola bilsin zədələnib." + +#: fields.py:1604 relations.py:486 serializers.py:571 +msgid "This list may not be empty." +msgstr "Bu siyahı boş ola bilməz." + +#: fields.py:1605 +#, python-brace-format +msgid "Ensure this field has at least {min_length} elements." +msgstr "" + +#: fields.py:1606 +#, python-brace-format +msgid "Ensure this field has no more than {max_length} elements." +msgstr "" + +#: fields.py:1682 +#, python-brace-format +msgid "Expected a dictionary of items but got type \"{input_type}\"." +msgstr "Elementlərin kitabçası (dictionary) gözlənirdi amma \"{input_type}\" növü gəldi." + +#: fields.py:1683 +msgid "This dictionary may not be empty." +msgstr "" + +#: fields.py:1755 +msgid "Value must be valid JSON." +msgstr "Dəyər keçərli JSON olmalıdır." + +#: filters.py:49 templates/rest_framework/filters/search.html:2 +msgid "Search" +msgstr "Axtarış" + +#: filters.py:50 +msgid "A search term." +msgstr "" + +#: filters.py:180 templates/rest_framework/filters/ordering.html:3 +msgid "Ordering" +msgstr "Sıralama" + +#: filters.py:181 +msgid "Which field to use when ordering the results." +msgstr "" + +#: filters.py:287 +msgid "ascending" +msgstr "artan" + +#: filters.py:288 +msgid "descending" +msgstr "azalan" + +#: pagination.py:174 +msgid "A page number within the paginated result set." +msgstr "" + +#: pagination.py:179 pagination.py:372 pagination.py:590 +msgid "Number of results to return per page." +msgstr "" + +#: pagination.py:189 +msgid "Invalid page." +msgstr "Xətalı səhifə." + +#: pagination.py:374 +msgid "The initial index from which to return the results." +msgstr "" + +#: pagination.py:581 +msgid "The pagination cursor value." +msgstr "" + +#: pagination.py:583 +msgid "Invalid cursor" +msgstr "Xətalı kursor" + +#: relations.py:246 +#, python-brace-format +msgid "Invalid pk \"{pk_value}\" - object does not exist." +msgstr "Xətalı pk \"{pk_value}\" - obyekt mövcud deyil." + +#: relations.py:247 +#, python-brace-format +msgid "Incorrect type. Expected pk value, received {data_type}." +msgstr "Xətalı növ. PK dəyəri gözlənirdi, {data_type} alındı." + +#: relations.py:280 +msgid "Invalid hyperlink - No URL match." +msgstr "Xətalı hiperkeçid - Heç bir URL uyğun gəlmir." + +#: relations.py:281 +msgid "Invalid hyperlink - Incorrect URL match." +msgstr "Xətalı hiperkeçid - Xətalı URL uyğunluğu." + +#: relations.py:282 +msgid "Invalid hyperlink - Object does not exist." +msgstr "Xətalı hiperkeçid - Obyekt mövcud deyil." + +#: relations.py:283 +#, python-brace-format +msgid "Incorrect type. Expected URL string, received {data_type}." +msgstr "Xətalı növ. URL yazısı gözlənirdi, {data_type} gəldi." + +#: relations.py:448 +#, python-brace-format +msgid "Object with {slug_name}={value} does not exist." +msgstr "{slug_name}={value} üçün uyğun obyekt mövcud deyil." + +#: relations.py:449 +msgid "Invalid value." +msgstr "Xətalı dəyər." + +#: schemas/utils.py:32 +msgid "unique integer value" +msgstr "" + +#: schemas/utils.py:34 +msgid "UUID string" +msgstr "" + +#: schemas/utils.py:36 +msgid "unique value" +msgstr "" + +#: schemas/utils.py:38 +#, python-brace-format +msgid "A {value_type} identifying this {name}." +msgstr "" + +#: serializers.py:337 +#, python-brace-format +msgid "Invalid data. Expected a dictionary, but got {datatype}." +msgstr "Xətalı məlumat. Kitabça (dictionary) gözlənirdi, {datatype} gəldi." + +#: templates/rest_framework/admin.html:116 +#: templates/rest_framework/base.html:136 +msgid "Extra Actions" +msgstr "" + +#: templates/rest_framework/admin.html:130 +#: templates/rest_framework/base.html:150 +msgid "Filters" +msgstr "Filterlər" + +#: templates/rest_framework/base.html:37 +msgid "navbar" +msgstr "" + +#: templates/rest_framework/base.html:75 +msgid "content" +msgstr "" + +#: templates/rest_framework/base.html:78 +msgid "request form" +msgstr "" + +#: templates/rest_framework/base.html:157 +msgid "main content" +msgstr "" + +#: templates/rest_framework/base.html:173 +msgid "request info" +msgstr "" + +#: templates/rest_framework/base.html:177 +msgid "response info" +msgstr "" + +#: templates/rest_framework/horizontal/radio.html:4 +#: templates/rest_framework/inline/radio.html:3 +#: templates/rest_framework/vertical/radio.html:3 +msgid "None" +msgstr "Heç nə" + +#: templates/rest_framework/horizontal/select_multiple.html:4 +#: templates/rest_framework/inline/select_multiple.html:3 +#: templates/rest_framework/vertical/select_multiple.html:3 +msgid "No items to select." +msgstr "Seçiləcək element yoxdur." + +#: validators.py:39 +msgid "This field must be unique." +msgstr "Bu sahə unikal olmalıdır." + +#: validators.py:89 +#, python-brace-format +msgid "The fields {field_names} must make a unique set." +msgstr "{field_names} sahələri birlikdə unikal dəst olmalıdırlar." + +#: validators.py:171 +#, python-brace-format +msgid "Surrogate characters are not allowed: U+{code_point:X}." +msgstr "" + +#: validators.py:243 +#, python-brace-format +msgid "This field must be unique for the \"{date_field}\" date." +msgstr "Bu sahə \"{date_field}\" günü üçün unikal olmalıdır." + +#: validators.py:258 +#, python-brace-format +msgid "This field must be unique for the \"{date_field}\" month." +msgstr "Bu sahə \"{date_field}\" ayı üçün unikal olmalıdır." + +#: validators.py:271 +#, python-brace-format +msgid "This field must be unique for the \"{date_field}\" year." +msgstr "Bu sahə \"{date_field}\" ili üçün unikal olmalıdır." + +#: versioning.py:40 +msgid "Invalid version in \"Accept\" header." +msgstr "\"Accept\" başlığında xətalı versiya." + +#: versioning.py:71 +msgid "Invalid version in URL path." +msgstr "URL yolunda xətalı versiya." + +#: versioning.py:116 +msgid "Invalid version in URL path. Does not match any version namespace." +msgstr "URL yolunda xətalı versiya. Heç bir versiya namespace-inə uyğun gəlmir." + +#: versioning.py:148 +msgid "Invalid version in hostname." +msgstr "Hostname-də xətalı versiya." + +#: versioning.py:170 +msgid "Invalid version in query parameter." +msgstr "Sorğu parametrində xətalı versiya." diff --git a/rest_framework/locale/bg/LC_MESSAGES/django.mo b/rest_framework/locale/bg/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..71a0d8a74863adbce4792dd85f71dd318fa09d8c GIT binary patch literal 13083 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 Z)7DY7BZU1%)5`JoOQlb%aFFP}{9nBZ#RUKW literal 0 HcmV?d00001 diff --git a/rest_framework/locale/bg/LC_MESSAGES/django.po b/rest_framework/locale/bg/LC_MESSAGES/django.po new file mode 100644 index 000000000..56e1c9ef8 --- /dev/null +++ b/rest_framework/locale/bg/LC_MESSAGES/django.po @@ -0,0 +1,572 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: Django REST framework\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-10-13 21:45+0200\n" +"PO-Revision-Date: 2020-10-13 19:45+0000\n" +"Last-Translator: Xavier Ordoquy \n" +"Language-Team: Bulgarian (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/bg/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: bg\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: authentication.py:70 +msgid "Invalid basic header. No credentials provided." +msgstr "Невалиден header за базово удостоверение (basic authentication). Не се предоставени удостоверения." + +#: authentication.py:73 +msgid "Invalid basic header. Credentials string should not contain spaces." +msgstr "Невалиден header за базово удостоверение (basic authentication). Носителите на удостоверение не трябва да съдържат интервали." + +#: authentication.py:83 +msgid "Invalid basic header. Credentials not correctly base64 encoded." +msgstr "Невалиден header за базово удостоверение (basic authentication). Носителите на удостоверение не са кодирани в base64." + +#: authentication.py:101 +msgid "Invalid username/password." +msgstr "Невалидни потребителско име/парола." + +#: authentication.py:104 authentication.py:206 +msgid "User inactive or deleted." +msgstr "Потребителят е неактивен или изтрит." + +#: authentication.py:184 +msgid "Invalid token header. No credentials provided." +msgstr "Невалиден token header. Не са предоставени носители на удостоверение." + +#: authentication.py:187 +msgid "Invalid token header. Token string should not contain spaces." +msgstr "Невалиден token header. Жетона (token-a) не трябва да съдържа интервали." + +#: authentication.py:193 +msgid "" +"Invalid token header. Token string should not contain invalid characters." +msgstr "Невалиден token header. Жетона (token-a) не трябва да съдържа невалидни символи." + +#: authentication.py:203 +msgid "Invalid token." +msgstr "Невалиден жетон." + +#: authtoken/apps.py:7 +msgid "Auth Token" +msgstr "Жетон за удостоверение" + +#: authtoken/models.py:13 +msgid "Key" +msgstr "Ключ" + +#: authtoken/models.py:16 +msgid "User" +msgstr "Потребител" + +#: authtoken/models.py:18 +msgid "Created" +msgstr "Създаден" + +#: authtoken/models.py:27 authtoken/serializers.py:19 +msgid "Token" +msgstr "Жетон" + +#: authtoken/models.py:28 +msgid "Tokens" +msgstr "Жетони" + +#: authtoken/serializers.py:9 +msgid "Username" +msgstr "Потребителско име" + +#: authtoken/serializers.py:13 +msgid "Password" +msgstr "Парола" + +#: authtoken/serializers.py:35 +msgid "Unable to log in with provided credentials." +msgstr "Не е възможен вход с предоставените удостоверения." + +#: authtoken/serializers.py:38 +msgid "Must include \"username\" and \"password\"." +msgstr "Трябва да съдържа \"username\" (потребителско име) и \"password\" (парола)." + +#: exceptions.py:102 +msgid "A server error occurred." +msgstr "Сървърна грешка." + +#: exceptions.py:142 +msgid "Invalid input." +msgstr "" + +#: exceptions.py:161 +msgid "Malformed request." +msgstr "Неправилно оформена заявка." + +#: exceptions.py:167 +msgid "Incorrect authentication credentials." +msgstr "Невалидни носители на удостоверение." + +#: exceptions.py:173 +msgid "Authentication credentials were not provided." +msgstr "Носители на удостоверение не са предоставени." + +#: exceptions.py:179 +msgid "You do not have permission to perform this action." +msgstr "Нямате права да се направи това действие." + +#: exceptions.py:185 +msgid "Not found." +msgstr "Обектът не е намерен." + +#: exceptions.py:191 +#, python-brace-format +msgid "Method \"{method}\" not allowed." +msgstr "Метод \"{method}\" не е позволен." + +#: exceptions.py:202 +msgid "Could not satisfy the request Accept header." +msgstr "Не може да бъде удовлетворен Accept header." + +#: exceptions.py:212 +#, python-brace-format +msgid "Unsupported media type \"{media_type}\" in request." +msgstr "Неподдържан тип на документа \"{media_type}\" в заявката." + +#: exceptions.py:223 +msgid "Request was throttled." +msgstr "Заявката е ограничена." + +#: exceptions.py:224 +#, python-brace-format +msgid "Expected available in {wait} second." +msgstr "" + +#: exceptions.py:225 +#, python-brace-format +msgid "Expected available in {wait} seconds." +msgstr "" + +#: fields.py:316 relations.py:245 relations.py:279 validators.py:90 +#: validators.py:183 +msgid "This field is required." +msgstr "Това поле е задължително." + +#: fields.py:317 +msgid "This field may not be null." +msgstr "Това поле не може да има празна стойност." + +#: fields.py:701 +msgid "Must be a valid boolean." +msgstr "" + +#: fields.py:766 +msgid "Not a valid string." +msgstr "" + +#: fields.py:767 +msgid "This field may not be blank." +msgstr "Това поле не може да е празно." + +#: fields.py:768 fields.py:1881 +#, python-brace-format +msgid "Ensure this field has no more than {max_length} characters." +msgstr "Това поле не трябва да съдържа повече от {max_length} символа." + +#: fields.py:769 +#, python-brace-format +msgid "Ensure this field has at least {min_length} characters." +msgstr "Това поле трябва да съдържа поде {min_length} символа." + +#: fields.py:816 +msgid "Enter a valid email address." +msgstr "Въведете валиден имейл адрес." + +#: fields.py:827 +msgid "This value does not match the required pattern." +msgstr "Тази стойност не съответства на изисквания шаблон." + +#: fields.py:838 +msgid "" +"Enter a valid \"slug\" consisting of letters, numbers, underscores or " +"hyphens." +msgstr "Въведете валиден \"slug\" съдържащ латински букви, цифри, долни черти или тирета." + +#: fields.py:839 +msgid "" +"Enter a valid \"slug\" consisting of Unicode letters, numbers, underscores, " +"or hyphens." +msgstr "" + +#: fields.py:854 +msgid "Enter a valid URL." +msgstr "Въведете валиден URL." + +#: fields.py:867 +msgid "Must be a valid UUID." +msgstr "" + +#: fields.py:903 +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Въведете валиден IPv4 или IPv6 адрес." + +#: fields.py:931 +msgid "A valid integer is required." +msgstr "Необходимо е валидно цяло число." + +#: fields.py:932 fields.py:969 fields.py:1005 fields.py:1366 +#, python-brace-format +msgid "Ensure this value is less than or equal to {max_value}." +msgstr "Тази стойност трябва да е не повече от {max_value}." + +#: fields.py:933 fields.py:970 fields.py:1006 fields.py:1367 +#, python-brace-format +msgid "Ensure this value is greater than or equal to {min_value}." +msgstr "Тази стойност трябва да е поне {min_value}." + +#: fields.py:934 fields.py:971 fields.py:1010 +msgid "String value too large." +msgstr "Низът е прекалено голям." + +#: fields.py:968 fields.py:1004 +msgid "A valid number is required." +msgstr "Необходимо е валидно число." + +#: fields.py:1007 +#, python-brace-format +msgid "Ensure that there are no more than {max_digits} digits in total." +msgstr "Допустими са не повече от {max_digits} цифри." + +#: fields.py:1008 +#, python-brace-format +msgid "" +"Ensure that there are no more than {max_decimal_places} decimal places." +msgstr "Допустими са не повече от {max_decimal_places} цифри след десетичната запетая." + +#: fields.py:1009 +#, python-brace-format +msgid "" +"Ensure that there are no more than {max_whole_digits} digits before the " +"decimal point." +msgstr "Допустими са не повече от {max_whole_digits} цифри преди десетичната запетая." + +#: fields.py:1148 +#, python-brace-format +msgid "Datetime has wrong format. Use one of these formats instead: {format}." +msgstr "Датата и часът са в невалиден формат. Валидни са следните формати: {format}." + +#: fields.py:1149 +msgid "Expected a datetime but got a date." +msgstr "Очаква се дата и час, но е намерена само дата." + +#: fields.py:1150 +#, python-brace-format +msgid "Invalid datetime for the timezone \"{timezone}\"." +msgstr "" + +#: fields.py:1151 +msgid "Datetime value out of range." +msgstr "" + +#: fields.py:1236 +#, python-brace-format +msgid "Date has wrong format. Use one of these formats instead: {format}." +msgstr "Дата е в невалиден формат. Валидни са следните формати: {format}." + +#: fields.py:1237 +msgid "Expected a date but got a datetime." +msgstr "Очаква се дата, но са подадени дата и час." + +#: fields.py:1303 +#, python-brace-format +msgid "Time has wrong format. Use one of these formats instead: {format}." +msgstr "Времето е в невалиден формат. Валидни са следните формати: {format}." + +#: fields.py:1365 +#, python-brace-format +msgid "Duration has wrong format. Use one of these formats instead: {format}." +msgstr "Отрязъкът от време е в невалиден формат. Валидни са следните формати: {format}." + +#: fields.py:1399 fields.py:1456 +#, python-brace-format +msgid "\"{input}\" is not a valid choice." +msgstr "\"{input}\" не е валиден избор." + +#: fields.py:1402 +#, python-brace-format +msgid "More than {count} items..." +msgstr "Повече от {count} неща..." + +#: fields.py:1457 fields.py:1603 relations.py:485 serializers.py:570 +#, python-brace-format +msgid "Expected a list of items but got type \"{input_type}\"." +msgstr "Очаква се списък от неща, но е получен тип \"{input_type}\"." + +#: fields.py:1458 +msgid "This selection may not be empty." +msgstr "Този избор не може да е празен." + +#: fields.py:1495 +#, python-brace-format +msgid "\"{input}\" is not a valid path choice." +msgstr "\"{input}\" не е валиден избор за път." + +#: fields.py:1514 +msgid "No file was submitted." +msgstr "Не е подаден файл." + +#: fields.py:1515 +msgid "" +"The submitted data was not a file. Check the encoding type on the form." +msgstr "Подадените данни не са файл. Проверете кодировката на формата." + +#: fields.py:1516 +msgid "No filename could be determined." +msgstr "Не може да бъде определено името на файла." + +#: fields.py:1517 +msgid "The submitted file is empty." +msgstr "Подадения файл е празен." + +#: fields.py:1518 +#, python-brace-format +msgid "" +"Ensure this filename has at most {max_length} characters (it has {length})." +msgstr "Името на файла може да е до {max_length} символа (то е {length})." + +#: fields.py:1566 +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "Невалидно изображение. Подадения файл не е изображение или е повредено изображение." + +#: fields.py:1604 relations.py:486 serializers.py:571 +msgid "This list may not be empty." +msgstr "Този списък не може да е празен." + +#: fields.py:1605 +#, python-brace-format +msgid "Ensure this field has at least {min_length} elements." +msgstr "" + +#: fields.py:1606 +#, python-brace-format +msgid "Ensure this field has no more than {max_length} elements." +msgstr "" + +#: fields.py:1682 +#, python-brace-format +msgid "Expected a dictionary of items but got type \"{input_type}\"." +msgstr "Очаква се асоциативен масив, но е получен \"{input_type}\"." + +#: fields.py:1683 +msgid "This dictionary may not be empty." +msgstr "" + +#: fields.py:1755 +msgid "Value must be valid JSON." +msgstr "Стойността трябва да е валиден JSON." + +#: filters.py:49 templates/rest_framework/filters/search.html:2 +msgid "Search" +msgstr "Търсене" + +#: filters.py:50 +msgid "A search term." +msgstr "" + +#: filters.py:180 templates/rest_framework/filters/ordering.html:3 +msgid "Ordering" +msgstr "Подредба" + +#: filters.py:181 +msgid "Which field to use when ordering the results." +msgstr "" + +#: filters.py:287 +msgid "ascending" +msgstr "в нарастващ ред" + +#: filters.py:288 +msgid "descending" +msgstr "в намаляващ ред" + +#: pagination.py:174 +msgid "A page number within the paginated result set." +msgstr "" + +#: pagination.py:179 pagination.py:372 pagination.py:590 +msgid "Number of results to return per page." +msgstr "" + +#: pagination.py:189 +msgid "Invalid page." +msgstr "Невалидна страница." + +#: pagination.py:374 +msgid "The initial index from which to return the results." +msgstr "" + +#: pagination.py:581 +msgid "The pagination cursor value." +msgstr "" + +#: pagination.py:583 +msgid "Invalid cursor" +msgstr "Невалиден курсор" + +#: relations.py:246 +#, python-brace-format +msgid "Invalid pk \"{pk_value}\" - object does not exist." +msgstr "Невалиден идентификатор \"{pk_value}\" - обектът не съществува." + +#: relations.py:247 +#, python-brace-format +msgid "Incorrect type. Expected pk value, received {data_type}." +msgstr "Неправилен тип. Очакван е тип за основен ключ, получен е {data_type}." + +#: relations.py:280 +msgid "Invalid hyperlink - No URL match." +msgstr "Невалидна връзка (hyperlink) - няма намерен URL." + +#: relations.py:281 +msgid "Invalid hyperlink - Incorrect URL match." +msgstr "Невалидна връзка (hyperlink) - неправилно съвпадение на URL." + +#: relations.py:282 +msgid "Invalid hyperlink - Object does not exist." +msgstr "Невалидна връзка (hyperlink) - обектът не съществува." + +#: relations.py:283 +#, python-brace-format +msgid "Incorrect type. Expected URL string, received {data_type}." +msgstr "Невалиден тип. Очаква се URL низ, получен е {data_type}." + +#: relations.py:448 +#, python-brace-format +msgid "Object with {slug_name}={value} does not exist." +msgstr "Обект с {slug_name}={value} не съществува." + +#: relations.py:449 +msgid "Invalid value." +msgstr "Невалидна стойност." + +#: schemas/utils.py:32 +msgid "unique integer value" +msgstr "" + +#: schemas/utils.py:34 +msgid "UUID string" +msgstr "" + +#: schemas/utils.py:36 +msgid "unique value" +msgstr "" + +#: schemas/utils.py:38 +#, python-brace-format +msgid "A {value_type} identifying this {name}." +msgstr "" + +#: serializers.py:337 +#, python-brace-format +msgid "Invalid data. Expected a dictionary, but got {datatype}." +msgstr "Невалидни данни. Очаква се асоциативен масив, но е получен {datatype}." + +#: templates/rest_framework/admin.html:116 +#: templates/rest_framework/base.html:136 +msgid "Extra Actions" +msgstr "" + +#: templates/rest_framework/admin.html:130 +#: templates/rest_framework/base.html:150 +msgid "Filters" +msgstr "Филтри" + +#: templates/rest_framework/base.html:37 +msgid "navbar" +msgstr "" + +#: templates/rest_framework/base.html:75 +msgid "content" +msgstr "" + +#: templates/rest_framework/base.html:78 +msgid "request form" +msgstr "" + +#: templates/rest_framework/base.html:157 +msgid "main content" +msgstr "" + +#: templates/rest_framework/base.html:173 +msgid "request info" +msgstr "" + +#: templates/rest_framework/base.html:177 +msgid "response info" +msgstr "" + +#: templates/rest_framework/horizontal/radio.html:4 +#: templates/rest_framework/inline/radio.html:3 +#: templates/rest_framework/vertical/radio.html:3 +msgid "None" +msgstr "Нищо" + +#: templates/rest_framework/horizontal/select_multiple.html:4 +#: templates/rest_framework/inline/select_multiple.html:3 +#: templates/rest_framework/vertical/select_multiple.html:3 +msgid "No items to select." +msgstr "Няма неща за избиране." + +#: validators.py:39 +msgid "This field must be unique." +msgstr "Това поле трябва да е уникално." + +#: validators.py:89 +#, python-brace-format +msgid "The fields {field_names} must make a unique set." +msgstr "Полетата {field_names} трябва да образуват уникална комбинация." + +#: validators.py:171 +#, python-brace-format +msgid "Surrogate characters are not allowed: U+{code_point:X}." +msgstr "" + +#: validators.py:243 +#, python-brace-format +msgid "This field must be unique for the \"{date_field}\" date." +msgstr "Това поле трябва да е уникално за \"{date_field}\" дата." + +#: validators.py:258 +#, python-brace-format +msgid "This field must be unique for the \"{date_field}\" month." +msgstr "Това поле трябва да е уникално за \"{date_field}\" месец." + +#: validators.py:271 +#, python-brace-format +msgid "This field must be unique for the \"{date_field}\" year." +msgstr "Това поле трябва да е уникално за \"{date_field}\" година." + +#: versioning.py:40 +msgid "Invalid version in \"Accept\" header." +msgstr "Невалидна версия в \"Accept\" header." + +#: versioning.py:71 +msgid "Invalid version in URL path." +msgstr "Невалидна версия в URL пътя." + +#: versioning.py:116 +msgid "Invalid version in URL path. Does not match any version namespace." +msgstr "Невалидна версия в URL пътя. Няма съвпадение с пространството от имена на версии." + +#: versioning.py:148 +msgid "Invalid version in hostname." +msgstr "Невалидна версия в името на сървъра (hostname)." + +#: versioning.py:170 +msgid "Invalid version in query parameter." +msgstr "Невалидна версия в GET параметър." diff --git a/rest_framework/locale/ca/LC_MESSAGES/django.mo b/rest_framework/locale/ca/LC_MESSAGES/django.mo index 0f72ec03947a137debd0497f8e67a4d84ca95ac7..7da9971a8ec201a5e8907883c09508c10db7c4d9 100644 GIT binary patch delta 1850 zcmYk+-A`0U7{~F4H&5*8 z`|uCnT`SGrrT+y+%@Vdq;|LD|*=D=&Lu|nd*p0tpGnV9d{~y2@{jYHgE@2*~2fYau zqMq0J9zp%yBsSm;R3Oi>nfF^>u2~ZgdaxDG;9gwBYRp+>wi?5zah+I!r?C{T;|{!! zHTXB`dlh`C3;S_5euMnkZ+yIoFVyG#mi>k|S%?aA+`2~@2026UkM$54AbiH&#xwN(%N zeipM+L=n`uespjg_2P4=T)2ys7+{vQSf9`O570QlgJQgmb@&voq>+RLW^d8|zR>%@ zN4S;#pQz`>grgOC2ld0pP!pWS{rD3ez#!qq@F?p4SACb(vHluZNJ?vuKEg0w#>4mo z6=^lItH+PA4`;9nU!qoMBjGCt!dQ*ReUliae+P96GFTqv&VFpc@dS+y8uNGvUt<)z z_|*uWMRvu0L5+KYdU44nFN?cTk&mKQZWf#HA!>X!%M-?4Bu#7@H{&J0pSVRs$Kf9G zZhMLRS&&hB(GFC<-**BP!FePoTR=_VDY96Wm6jMa`h<7%HmeqT|^@RfHt7doh7qn713LI=R%{YWPLTsIrHu)l_b@Qnf;y zLia}13DW!Bs2fnrq@v}~60301+>*(sR!N1Vx9wEr!D?!hsvJ3l{qQr`6+Nl37; delta 2103 zcmaLXTWl0n9LMof3cYaYg>5OV)D9~a#kRDR(%OrxU8uztini4Vi8$>}>`1#?y1Sqd z-9*zE600T~V+au{5)(r-sY@a+Xtd%BF&Hfm8pP;>vGGBLMB|I``ZPw4+90uxIKRZ0L)gEJf3%W(W7cCSTG)(t;t<}BM{zBlK;8d7 z-iBAO9)HFVgr7RyYN@+!uDdG!~4zCbgJ-0oxn4wnarVPaMkyQ zf4;aRJHuvF3VLuOI=BXB(89AAz)QFkzeX0zT*uA0h$$^qWoh=tI;`M0jE%S-m714O z16lBY|II%x!@o7ArLkds>n_}7<@D;T1yzf=4<@k61_iARR73)U5&#qwox6zs5#Dn-L z?!jV8x*s1${eI5(2h??yj7m9-;JtVThw&P=;ufaej8EYZp29l3i5jrQa;QeSQgj;V zjQPHfA&x&oZIgViR&njY4m^T8F@uBnCx&o$wK1LeGLlwv8Fk$?)Qf{mTSY#Ant2kn zlBqZ8w9#2W-LR@AJEK9Q-pma0XWsCSFQOjwIWk6b6S>tCTiF*ippN(Z9z{*y1TuN^ z32Fe}B8!sHhDQ_~C7^a0Vs71hr zb@O5LmRxnD#)6vr32kwuV5jo0rPZ?OgP=61>1+1yMxl5`SdJ95*Vy{E+THZJiGE@Q z!FKmjM<&bwp*jf@1%!5u()KXnt&@sFg{Ia^1iW7MlWBs-+~{O7@odm?<5o15ux#tF zJ?=)Vkyvcpv7-&?3wgcO!DF0EI{&?DczD;2%wKuW7nbgIrY78Y+>J%8h!b_4Nanec zp4@;vIvPtx6MA~YjoTyRP9%LXaJHzawZ5^fzOmVA+S=aImX4KGSVLp62|I3u$EMtP z!gZ|9L~J5NjQS@sZ\n" +"POT-Creation-Date: 2020-10-13 21:45+0200\n" +"PO-Revision-Date: 2020-10-13 19:45+0000\n" +"Last-Translator: Xavier Ordoquy \n" "Language-Team: Catalan (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/ca/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,40 +17,40 @@ msgstr "" "Language: ca\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: authentication.py:73 +#: authentication.py:70 msgid "Invalid basic header. No credentials provided." msgstr "Header Basic invàlid. No hi ha disponibles les credencials." -#: authentication.py:76 +#: authentication.py:73 msgid "Invalid basic header. Credentials string should not contain spaces." msgstr "Header Basic invàlid. Les credencials no poden contenir espais." -#: authentication.py:82 +#: authentication.py:83 msgid "Invalid basic header. Credentials not correctly base64 encoded." msgstr "Header Basic invàlid. Les credencials no estan codificades correctament en base64." -#: authentication.py:99 +#: authentication.py:101 msgid "Invalid username/password." msgstr "Usuari/Contrasenya incorrectes." -#: authentication.py:102 authentication.py:198 +#: authentication.py:104 authentication.py:206 msgid "User inactive or deleted." msgstr "Usuari inactiu o esborrat." -#: authentication.py:176 +#: authentication.py:184 msgid "Invalid token header. No credentials provided." msgstr "Token header invàlid. No s'han indicat les credencials." -#: authentication.py:179 +#: authentication.py:187 msgid "Invalid token header. Token string should not contain spaces." msgstr "Token header invàlid. El token no ha de contenir espais." -#: authentication.py:185 +#: authentication.py:193 msgid "" "Invalid token header. Token string should not contain invalid characters." msgstr "Token header invàlid. El token no pot contenir caràcters invàlids." -#: authentication.py:195 +#: authentication.py:203 msgid "Invalid token." msgstr "Token invàlid." @@ -58,382 +58,515 @@ msgstr "Token invàlid." msgid "Auth Token" msgstr "" -#: authtoken/models.py:15 +#: authtoken/models.py:13 msgid "Key" msgstr "" -#: authtoken/models.py:18 +#: authtoken/models.py:16 msgid "User" msgstr "" -#: authtoken/models.py:20 +#: authtoken/models.py:18 msgid "Created" msgstr "" -#: authtoken/models.py:29 +#: authtoken/models.py:27 authtoken/serializers.py:19 msgid "Token" msgstr "" -#: authtoken/models.py:30 +#: authtoken/models.py:28 msgid "Tokens" msgstr "" -#: authtoken/serializers.py:8 +#: authtoken/serializers.py:9 msgid "Username" msgstr "" -#: authtoken/serializers.py:9 +#: authtoken/serializers.py:13 msgid "Password" msgstr "" -#: authtoken/serializers.py:20 -msgid "User account is disabled." -msgstr "Compte d'usuari desactivat." - -#: authtoken/serializers.py:23 +#: authtoken/serializers.py:35 msgid "Unable to log in with provided credentials." msgstr "No es possible loguejar-se amb les credencials introduïdes." -#: authtoken/serializers.py:26 +#: authtoken/serializers.py:38 msgid "Must include \"username\" and \"password\"." msgstr "S'ha d'incloure \"username\" i \"password\"." -#: exceptions.py:49 +#: exceptions.py:102 msgid "A server error occurred." msgstr "S'ha produït un error en el servidor." -#: exceptions.py:84 +#: exceptions.py:142 +msgid "Invalid input." +msgstr "" + +#: exceptions.py:161 msgid "Malformed request." msgstr "Request amb format incorrecte." -#: exceptions.py:89 +#: exceptions.py:167 msgid "Incorrect authentication credentials." msgstr "Credencials d'autenticació incorrectes." -#: exceptions.py:94 +#: exceptions.py:173 msgid "Authentication credentials were not provided." msgstr "Credencials d'autenticació no disponibles." -#: exceptions.py:99 +#: exceptions.py:179 msgid "You do not have permission to perform this action." msgstr "No té permisos per realitzar aquesta acció." -#: exceptions.py:104 views.py:81 +#: exceptions.py:185 msgid "Not found." msgstr "No trobat." -#: exceptions.py:109 +#: exceptions.py:191 +#, python-brace-format msgid "Method \"{method}\" not allowed." msgstr "Mètode \"{method}\" no permès." -#: exceptions.py:120 +#: exceptions.py:202 msgid "Could not satisfy the request Accept header." msgstr "No s'ha pogut satisfer l'Accept header de la petició." -#: exceptions.py:132 +#: exceptions.py:212 +#, python-brace-format msgid "Unsupported media type \"{media_type}\" in request." msgstr "Media type \"{media_type}\" no suportat." -#: exceptions.py:145 +#: exceptions.py:223 msgid "Request was throttled." msgstr "La petició ha estat limitada pel número màxim de peticions definit." -#: fields.py:269 relations.py:206 relations.py:239 validators.py:98 -#: validators.py:181 +#: exceptions.py:224 +#, python-brace-format +msgid "Expected available in {wait} second." +msgstr "" + +#: exceptions.py:225 +#, python-brace-format +msgid "Expected available in {wait} seconds." +msgstr "" + +#: fields.py:316 relations.py:245 relations.py:279 validators.py:90 +#: validators.py:183 msgid "This field is required." msgstr "Aquest camp és obligatori." -#: fields.py:270 +#: fields.py:317 msgid "This field may not be null." msgstr "Aquest camp no pot ser nul." -#: fields.py:608 fields.py:639 -msgid "\"{input}\" is not a valid boolean." -msgstr "\"{input}\" no és un booleà." +#: fields.py:701 +msgid "Must be a valid boolean." +msgstr "" -#: fields.py:674 +#: fields.py:766 +msgid "Not a valid string." +msgstr "" + +#: fields.py:767 msgid "This field may not be blank." msgstr "Aquest camp no pot estar en blanc." -#: fields.py:675 fields.py:1675 +#: fields.py:768 fields.py:1881 +#, python-brace-format msgid "Ensure this field has no more than {max_length} characters." msgstr "Aquest camp no pot tenir més de {max_length} caràcters." -#: fields.py:676 +#: fields.py:769 +#, python-brace-format msgid "Ensure this field has at least {min_length} characters." msgstr "Aquest camp ha de tenir un mínim de {min_length} caràcters." -#: fields.py:713 +#: fields.py:816 msgid "Enter a valid email address." msgstr "Introdueixi una adreça de correu vàlida." -#: fields.py:724 +#: fields.py:827 msgid "This value does not match the required pattern." msgstr "Aquest valor no compleix el patró requerit." -#: fields.py:735 +#: fields.py:838 msgid "" "Enter a valid \"slug\" consisting of letters, numbers, underscores or " "hyphens." msgstr "Introdueix un \"slug\" vàlid consistent en lletres, números, guions o guions baixos." -#: fields.py:747 +#: fields.py:839 +msgid "" +"Enter a valid \"slug\" consisting of Unicode letters, numbers, underscores, " +"or hyphens." +msgstr "" + +#: fields.py:854 msgid "Enter a valid URL." msgstr "Introdueixi una URL vàlida." -#: fields.py:760 -msgid "\"{value}\" is not a valid UUID." -msgstr "\"{value}\" no és un UUID vàlid." +#: fields.py:867 +msgid "Must be a valid UUID." +msgstr "" -#: fields.py:796 +#: fields.py:903 msgid "Enter a valid IPv4 or IPv6 address." msgstr "Introdueixi una adreça IPv4 o IPv6 vàlida." -#: fields.py:821 +#: fields.py:931 msgid "A valid integer is required." msgstr "Es requereix un nombre enter vàlid." -#: fields.py:822 fields.py:857 fields.py:891 +#: fields.py:932 fields.py:969 fields.py:1005 fields.py:1366 +#, python-brace-format msgid "Ensure this value is less than or equal to {max_value}." msgstr "Aquest valor ha de ser menor o igual a {max_value}." -#: fields.py:823 fields.py:858 fields.py:892 +#: fields.py:933 fields.py:970 fields.py:1006 fields.py:1367 +#, python-brace-format msgid "Ensure this value is greater than or equal to {min_value}." msgstr "Aquest valor ha de ser més gran o igual a {min_value}." -#: fields.py:824 fields.py:859 fields.py:896 +#: fields.py:934 fields.py:971 fields.py:1010 msgid "String value too large." msgstr "Valor del text massa gran." -#: fields.py:856 fields.py:890 +#: fields.py:968 fields.py:1004 msgid "A valid number is required." msgstr "Es requereix un nombre vàlid." -#: fields.py:893 +#: fields.py:1007 +#, python-brace-format msgid "Ensure that there are no more than {max_digits} digits in total." msgstr "No pot haver-hi més de {max_digits} dígits en total." -#: fields.py:894 +#: fields.py:1008 +#, python-brace-format msgid "" "Ensure that there are no more than {max_decimal_places} decimal places." msgstr "No pot haver-hi més de {max_decimal_places} decimals." -#: fields.py:895 +#: fields.py:1009 +#, python-brace-format msgid "" "Ensure that there are no more than {max_whole_digits} digits before the " "decimal point." msgstr "No pot haver-hi més de {max_whole_digits} dígits abans del punt decimal." -#: fields.py:1025 +#: fields.py:1148 +#, python-brace-format msgid "Datetime has wrong format. Use one of these formats instead: {format}." msgstr "El Datetime té un format incorrecte. Utilitzi un d'aquests formats: {format}." -#: fields.py:1026 +#: fields.py:1149 msgid "Expected a datetime but got a date." msgstr "S'espera un Datetime però s'ha rebut un Date." -#: fields.py:1103 +#: fields.py:1150 +#, python-brace-format +msgid "Invalid datetime for the timezone \"{timezone}\"." +msgstr "" + +#: fields.py:1151 +msgid "Datetime value out of range." +msgstr "" + +#: fields.py:1236 +#, python-brace-format msgid "Date has wrong format. Use one of these formats instead: {format}." msgstr "El Date té un format incorrecte. Utilitzi un d'aquests formats: {format}." -#: fields.py:1104 +#: fields.py:1237 msgid "Expected a date but got a datetime." msgstr "S'espera un Date però s'ha rebut un Datetime." -#: fields.py:1170 +#: fields.py:1303 +#, python-brace-format msgid "Time has wrong format. Use one of these formats instead: {format}." msgstr "El Time té un format incorrecte. Utilitzi un d'aquests formats: {format}." -#: fields.py:1232 +#: fields.py:1365 +#, python-brace-format msgid "Duration has wrong format. Use one of these formats instead: {format}." msgstr "La durada té un format incorrecte. Utilitzi un d'aquests formats: {format}." -#: fields.py:1251 fields.py:1300 +#: fields.py:1399 fields.py:1456 +#, python-brace-format msgid "\"{input}\" is not a valid choice." msgstr "\"{input}\" no és una opció vàlida." -#: fields.py:1254 relations.py:71 relations.py:441 +#: fields.py:1402 +#, python-brace-format msgid "More than {count} items..." msgstr "" -#: fields.py:1301 fields.py:1448 relations.py:437 serializers.py:524 +#: fields.py:1457 fields.py:1603 relations.py:485 serializers.py:570 +#, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "S'espera una llista d'ítems però s'ha rebut el tipus \"{input_type}\"." -#: fields.py:1302 +#: fields.py:1458 msgid "This selection may not be empty." msgstr "Aquesta selecció no pot estar buida." -#: fields.py:1339 +#: fields.py:1495 +#, python-brace-format msgid "\"{input}\" is not a valid path choice." msgstr "\"{input}\" no és un path vàlid." -#: fields.py:1358 +#: fields.py:1514 msgid "No file was submitted." msgstr "No s'ha enviat cap fitxer." -#: fields.py:1359 +#: fields.py:1515 msgid "" "The submitted data was not a file. Check the encoding type on the form." msgstr "Les dades enviades no són un fitxer. Comproveu l'encoding type del formulari." -#: fields.py:1360 +#: fields.py:1516 msgid "No filename could be determined." msgstr "No s'ha pogut determinar el nom del fitxer." -#: fields.py:1361 +#: fields.py:1517 msgid "The submitted file is empty." msgstr "El fitxer enviat està buit." -#: fields.py:1362 +#: fields.py:1518 +#, python-brace-format msgid "" "Ensure this filename has at most {max_length} characters (it has {length})." msgstr "El nom del fitxer ha de tenir com a màxim {max_length} caràcters (en té {length})." -#: fields.py:1410 +#: fields.py:1566 msgid "" "Upload a valid image. The file you uploaded was either not an image or a " "corrupted image." msgstr "Envieu una imatge vàlida. El fitxer enviat no és una imatge o és una imatge corrompuda." -#: fields.py:1449 relations.py:438 serializers.py:525 +#: fields.py:1604 relations.py:486 serializers.py:571 msgid "This list may not be empty." msgstr "Aquesta llista no pot estar buida." -#: fields.py:1502 +#: fields.py:1605 +#, python-brace-format +msgid "Ensure this field has at least {min_length} elements." +msgstr "" + +#: fields.py:1606 +#, python-brace-format +msgid "Ensure this field has no more than {max_length} elements." +msgstr "" + +#: fields.py:1682 +#, python-brace-format msgid "Expected a dictionary of items but got type \"{input_type}\"." msgstr "S'espera un diccionari però s'ha rebut el tipus \"{input_type}\"." -#: fields.py:1549 +#: fields.py:1683 +msgid "This dictionary may not be empty." +msgstr "" + +#: fields.py:1755 msgid "Value must be valid JSON." msgstr "" -#: filters.py:36 templates/rest_framework/filters/django_filter.html:5 -msgid "Submit" +#: filters.py:49 templates/rest_framework/filters/search.html:2 +msgid "Search" msgstr "" -#: filters.py:336 +#: filters.py:50 +msgid "A search term." +msgstr "" + +#: filters.py:180 templates/rest_framework/filters/ordering.html:3 +msgid "Ordering" +msgstr "" + +#: filters.py:181 +msgid "Which field to use when ordering the results." +msgstr "" + +#: filters.py:287 msgid "ascending" msgstr "" -#: filters.py:337 +#: filters.py:288 msgid "descending" msgstr "" -#: pagination.py:193 +#: pagination.py:174 +msgid "A page number within the paginated result set." +msgstr "" + +#: pagination.py:179 pagination.py:372 pagination.py:590 +msgid "Number of results to return per page." +msgstr "" + +#: pagination.py:189 msgid "Invalid page." msgstr "" -#: pagination.py:427 +#: pagination.py:374 +msgid "The initial index from which to return the results." +msgstr "" + +#: pagination.py:581 +msgid "The pagination cursor value." +msgstr "" + +#: pagination.py:583 msgid "Invalid cursor" msgstr "Cursor invàlid." -#: relations.py:207 +#: relations.py:246 +#, python-brace-format msgid "Invalid pk \"{pk_value}\" - object does not exist." msgstr "PK invàlida \"{pk_value}\" - l'objecte no existeix." -#: relations.py:208 +#: relations.py:247 +#, python-brace-format msgid "Incorrect type. Expected pk value, received {data_type}." msgstr "Tipus incorrecte. S'espera el valor d'una PK, s'ha rebut {data_type}." -#: relations.py:240 +#: relations.py:280 msgid "Invalid hyperlink - No URL match." msgstr "Hyperlink invàlid - Cap match d'URL." -#: relations.py:241 +#: relations.py:281 msgid "Invalid hyperlink - Incorrect URL match." msgstr "Hyperlink invàlid - Match d'URL incorrecta." -#: relations.py:242 +#: relations.py:282 msgid "Invalid hyperlink - Object does not exist." msgstr "Hyperlink invàlid - L'objecte no existeix." -#: relations.py:243 +#: relations.py:283 +#, python-brace-format msgid "Incorrect type. Expected URL string, received {data_type}." msgstr "Tipus incorrecte. S'espera una URL, s'ha rebut {data_type}." -#: relations.py:401 +#: relations.py:448 +#, python-brace-format msgid "Object with {slug_name}={value} does not exist." msgstr "L'objecte amb {slug_name}={value} no existeix." -#: relations.py:402 +#: relations.py:449 msgid "Invalid value." msgstr "Valor invàlid." -#: serializers.py:326 +#: schemas/utils.py:32 +msgid "unique integer value" +msgstr "" + +#: schemas/utils.py:34 +msgid "UUID string" +msgstr "" + +#: schemas/utils.py:36 +msgid "unique value" +msgstr "" + +#: schemas/utils.py:38 +#, python-brace-format +msgid "A {value_type} identifying this {name}." +msgstr "" + +#: serializers.py:337 +#, python-brace-format msgid "Invalid data. Expected a dictionary, but got {datatype}." msgstr "Dades invàlides. S'espera un diccionari però s'ha rebut {datatype}." #: templates/rest_framework/admin.html:116 -#: templates/rest_framework/base.html:128 +#: templates/rest_framework/base.html:136 +msgid "Extra Actions" +msgstr "" + +#: templates/rest_framework/admin.html:130 +#: templates/rest_framework/base.html:150 msgid "Filters" msgstr "" -#: templates/rest_framework/filters/django_filter.html:2 -#: templates/rest_framework/filters/django_filter_crispyforms.html:4 -msgid "Field filters" +#: templates/rest_framework/base.html:37 +msgid "navbar" msgstr "" -#: templates/rest_framework/filters/ordering.html:3 -msgid "Ordering" +#: templates/rest_framework/base.html:75 +msgid "content" msgstr "" -#: templates/rest_framework/filters/search.html:2 -msgid "Search" +#: templates/rest_framework/base.html:78 +msgid "request form" msgstr "" -#: templates/rest_framework/horizontal/radio.html:2 -#: templates/rest_framework/inline/radio.html:2 -#: templates/rest_framework/vertical/radio.html:2 +#: templates/rest_framework/base.html:157 +msgid "main content" +msgstr "" + +#: templates/rest_framework/base.html:173 +msgid "request info" +msgstr "" + +#: templates/rest_framework/base.html:177 +msgid "response info" +msgstr "" + +#: templates/rest_framework/horizontal/radio.html:4 +#: templates/rest_framework/inline/radio.html:3 +#: templates/rest_framework/vertical/radio.html:3 msgid "None" msgstr "Cap" -#: templates/rest_framework/horizontal/select_multiple.html:2 -#: templates/rest_framework/inline/select_multiple.html:2 -#: templates/rest_framework/vertical/select_multiple.html:2 +#: templates/rest_framework/horizontal/select_multiple.html:4 +#: templates/rest_framework/inline/select_multiple.html:3 +#: templates/rest_framework/vertical/select_multiple.html:3 msgid "No items to select." msgstr "Cap opció seleccionada." -#: validators.py:43 +#: validators.py:39 msgid "This field must be unique." msgstr "Aquest camp ha de ser únic." -#: validators.py:97 +#: validators.py:89 +#, python-brace-format msgid "The fields {field_names} must make a unique set." msgstr "Aquests camps {field_names} han de constituir un conjunt únic." -#: validators.py:245 +#: validators.py:171 +#, python-brace-format +msgid "Surrogate characters are not allowed: U+{code_point:X}." +msgstr "" + +#: validators.py:243 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" date." msgstr "Aquest camp ha de ser únic per a la data \"{date_field}\"." -#: validators.py:260 +#: validators.py:258 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" month." msgstr "Aquest camp ha de ser únic per al mes \"{date_field}\"." -#: validators.py:273 +#: validators.py:271 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" year." msgstr "Aquest camp ha de ser únic per a l'any \"{date_field}\"." -#: versioning.py:42 +#: versioning.py:40 msgid "Invalid version in \"Accept\" header." msgstr "Versió invàlida al header \"Accept\"." -#: versioning.py:73 +#: versioning.py:71 msgid "Invalid version in URL path." msgstr "Versió invàlida a la URL." -#: versioning.py:115 +#: versioning.py:116 msgid "Invalid version in URL path. Does not match any version namespace." msgstr "" -#: versioning.py:147 +#: versioning.py:148 msgid "Invalid version in hostname." msgstr "Versió invàlida al hostname." -#: versioning.py:169 +#: versioning.py:170 msgid "Invalid version in query parameter." msgstr "Versió invàlida al paràmetre de consulta." - -#: views.py:88 -msgid "Permission denied." -msgstr "Permís denegat." diff --git a/rest_framework/locale/cs/LC_MESSAGES/django.mo b/rest_framework/locale/cs/LC_MESSAGES/django.mo index 1561cd98c570a634e4abd2fcbda46ab764e56ca7..ebf7db5aa7b4cb3f8bc3c7e406e4246ea92501ce 100644 GIT binary patch delta 3414 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\n" +"POT-Creation-Date: 2020-10-13 21:45+0200\n" +"PO-Revision-Date: 2020-10-13 19:45+0000\n" +"Last-Translator: Xavier Ordoquy \n" "Language-Team: Czech (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/cs/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" -#: authentication.py:73 +#: authentication.py:70 msgid "Invalid basic header. No credentials provided." msgstr "Chybná hlavička. Nebyly poskytnuty přihlašovací údaje." -#: authentication.py:76 +#: authentication.py:73 msgid "Invalid basic header. Credentials string should not contain spaces." msgstr "Chybná hlavička. Přihlašovací údaje by neměly obsahovat mezery." -#: authentication.py:82 +#: authentication.py:83 msgid "Invalid basic header. Credentials not correctly base64 encoded." msgstr "Chybná hlavička. Přihlašovací údaje nebyly správně zakódovány pomocí base64." -#: authentication.py:99 +#: authentication.py:101 msgid "Invalid username/password." msgstr "Chybné uživatelské jméno nebo heslo." -#: authentication.py:102 authentication.py:198 +#: authentication.py:104 authentication.py:206 msgid "User inactive or deleted." msgstr "Uživatelský účet je neaktivní nebo byl smazán." -#: authentication.py:176 +#: authentication.py:184 msgid "Invalid token header. No credentials provided." msgstr "Chybná hlavička tokenu. Nebyly zadány přihlašovací údaje." -#: authentication.py:179 +#: authentication.py:187 msgid "Invalid token header. Token string should not contain spaces." msgstr "Chybná hlavička tokenu. Přihlašovací údaje by neměly obsahovat mezery." -#: authentication.py:185 +#: authentication.py:193 msgid "" "Invalid token header. Token string should not contain invalid characters." -msgstr "" +msgstr "Chybná hlavička s tokenem. Token nesmí obsahovat nevalidní znaky." -#: authentication.py:195 +#: authentication.py:203 msgid "Invalid token." msgstr "Chybný token." #: authtoken/apps.py:7 msgid "Auth Token" -msgstr "" +msgstr "Autentizační token" -#: authtoken/models.py:15 +#: authtoken/models.py:13 msgid "Key" -msgstr "" +msgstr "Klíč" + +#: authtoken/models.py:16 +msgid "User" +msgstr "Uživatel" #: authtoken/models.py:18 -msgid "User" -msgstr "" - -#: authtoken/models.py:20 msgid "Created" -msgstr "" +msgstr "Vytvořeno" -#: authtoken/models.py:29 +#: authtoken/models.py:27 authtoken/serializers.py:19 msgid "Token" -msgstr "" +msgstr "Token" -#: authtoken/models.py:30 +#: authtoken/models.py:28 msgid "Tokens" -msgstr "" - -#: authtoken/serializers.py:8 -msgid "Username" -msgstr "" +msgstr "Tokeny" #: authtoken/serializers.py:9 +msgid "Username" +msgstr "Uživatelské jméno" + +#: authtoken/serializers.py:13 msgid "Password" -msgstr "" +msgstr "Heslo" -#: authtoken/serializers.py:20 -msgid "User account is disabled." -msgstr "Uživatelský účet je uzamčen." - -#: authtoken/serializers.py:23 +#: authtoken/serializers.py:35 msgid "Unable to log in with provided credentials." msgstr "Zadanými údaji se nebylo možné přihlásit." -#: authtoken/serializers.py:26 +#: authtoken/serializers.py:38 msgid "Must include \"username\" and \"password\"." msgstr "Musí obsahovat \"uživatelské jméno\" a \"heslo\"." -#: exceptions.py:49 +#: exceptions.py:102 msgid "A server error occurred." msgstr "Chyba na straně serveru." -#: exceptions.py:84 +#: exceptions.py:142 +msgid "Invalid input." +msgstr "" + +#: exceptions.py:161 msgid "Malformed request." msgstr "Neplatný formát požadavku." -#: exceptions.py:89 +#: exceptions.py:167 msgid "Incorrect authentication credentials." msgstr "Chybné přihlašovací údaje." -#: exceptions.py:94 +#: exceptions.py:173 msgid "Authentication credentials were not provided." msgstr "Nebyly zadány přihlašovací údaje." -#: exceptions.py:99 +#: exceptions.py:179 msgid "You do not have permission to perform this action." msgstr "K této akci nemáte oprávnění." -#: exceptions.py:104 views.py:81 +#: exceptions.py:185 msgid "Not found." msgstr "Nenalezeno." -#: exceptions.py:109 +#: exceptions.py:191 +#, python-brace-format msgid "Method \"{method}\" not allowed." msgstr "Metoda \"{method}\" není povolena." -#: exceptions.py:120 +#: exceptions.py:202 msgid "Could not satisfy the request Accept header." msgstr "Nelze vyhovět požadavku v hlavičce Accept." -#: exceptions.py:132 +#: exceptions.py:212 +#, python-brace-format msgid "Unsupported media type \"{media_type}\" in request." msgstr "Nepodporovaný media type \"{media_type}\" v požadavku." -#: exceptions.py:145 +#: exceptions.py:223 msgid "Request was throttled." msgstr "Požadavek byl limitován kvůli omezení počtu požadavků za časovou periodu." -#: fields.py:269 relations.py:206 relations.py:239 validators.py:98 -#: validators.py:181 +#: exceptions.py:224 +#, python-brace-format +msgid "Expected available in {wait} second." +msgstr "" + +#: exceptions.py:225 +#, python-brace-format +msgid "Expected available in {wait} seconds." +msgstr "" + +#: fields.py:316 relations.py:245 relations.py:279 validators.py:90 +#: validators.py:183 msgid "This field is required." msgstr "Toto pole je vyžadováno." -#: fields.py:270 +#: fields.py:317 msgid "This field may not be null." msgstr "Toto pole nesmí být prázdné (null)." -#: fields.py:608 fields.py:639 -msgid "\"{input}\" is not a valid boolean." -msgstr "\"{input}\" nelze použít jako typ boolean." +#: fields.py:701 +msgid "Must be a valid boolean." +msgstr "" -#: fields.py:674 +#: fields.py:766 +msgid "Not a valid string." +msgstr "" + +#: fields.py:767 msgid "This field may not be blank." msgstr "Toto pole nesmí být prázdné." -#: fields.py:675 fields.py:1675 +#: fields.py:768 fields.py:1881 +#, python-brace-format msgid "Ensure this field has no more than {max_length} characters." msgstr "Zkontrolujte, že toto pole není delší než {max_length} znaků." -#: fields.py:676 +#: fields.py:769 +#, python-brace-format msgid "Ensure this field has at least {min_length} characters." msgstr "Zkontrolujte, že toto pole obsahuje alespoň {min_length} znaků." -#: fields.py:713 +#: fields.py:816 msgid "Enter a valid email address." msgstr "Vložte platnou e-mailovou adresu." -#: fields.py:724 +#: fields.py:827 msgid "This value does not match the required pattern." msgstr "Hodnota v tomto poli neodpovídá požadovanému formátu." -#: fields.py:735 +#: fields.py:838 msgid "" "Enter a valid \"slug\" consisting of letters, numbers, underscores or " "hyphens." msgstr "Vložte platnou \"zkrácenou formu\" obsahující pouze malá písmena, čísla, spojovník nebo podtržítko." -#: fields.py:747 +#: fields.py:839 +msgid "" +"Enter a valid \"slug\" consisting of Unicode letters, numbers, underscores, " +"or hyphens." +msgstr "" + +#: fields.py:854 msgid "Enter a valid URL." msgstr "Vložte platný odkaz." -#: fields.py:760 -msgid "\"{value}\" is not a valid UUID." -msgstr "\"{value}\" není platné UUID." - -#: fields.py:796 -msgid "Enter a valid IPv4 or IPv6 address." +#: fields.py:867 +msgid "Must be a valid UUID." msgstr "" -#: fields.py:821 +#: fields.py:903 +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Vložte platnou IPv4 nebo IPv6 adresu." + +#: fields.py:931 msgid "A valid integer is required." msgstr "Je vyžadováno celé číslo." -#: fields.py:822 fields.py:857 fields.py:891 +#: fields.py:932 fields.py:969 fields.py:1005 fields.py:1366 +#, python-brace-format msgid "Ensure this value is less than or equal to {max_value}." msgstr "Zkontrolujte, že hodnota je menší nebo rovna {max_value}." -#: fields.py:823 fields.py:858 fields.py:892 +#: fields.py:933 fields.py:970 fields.py:1006 fields.py:1367 +#, python-brace-format msgid "Ensure this value is greater than or equal to {min_value}." msgstr "Zkontrolujte, že hodnota je větší nebo rovna {min_value}." -#: fields.py:824 fields.py:859 fields.py:896 +#: fields.py:934 fields.py:971 fields.py:1010 msgid "String value too large." msgstr "Řetězec je příliš dlouhý." -#: fields.py:856 fields.py:890 +#: fields.py:968 fields.py:1004 msgid "A valid number is required." msgstr "Je vyžadováno číslo." -#: fields.py:893 +#: fields.py:1007 +#, python-brace-format msgid "Ensure that there are no more than {max_digits} digits in total." msgstr "Zkontrolujte, že číslo neobsahuje více než {max_digits} čislic." -#: fields.py:894 +#: fields.py:1008 +#, python-brace-format msgid "" "Ensure that there are no more than {max_decimal_places} decimal places." msgstr "Zkontrolujte, že číslo nemá více než {max_decimal_places} desetinných míst." -#: fields.py:895 +#: fields.py:1009 +#, python-brace-format msgid "" "Ensure that there are no more than {max_whole_digits} digits before the " "decimal point." msgstr "Zkontrolujte, že číslo neobsahuje více než {max_whole_digits} čislic před desetinnou čárkou." -#: fields.py:1025 +#: fields.py:1148 +#, python-brace-format msgid "Datetime has wrong format. Use one of these formats instead: {format}." msgstr "Chybný formát data a času. Použijte jeden z těchto formátů: {format}." -#: fields.py:1026 +#: fields.py:1149 msgid "Expected a datetime but got a date." msgstr "Bylo zadáno pouze datum bez času." -#: fields.py:1103 +#: fields.py:1150 +#, python-brace-format +msgid "Invalid datetime for the timezone \"{timezone}\"." +msgstr "" + +#: fields.py:1151 +msgid "Datetime value out of range." +msgstr "" + +#: fields.py:1236 +#, python-brace-format msgid "Date has wrong format. Use one of these formats instead: {format}." msgstr "Chybný formát data. Použijte jeden z těchto formátů: {format}." -#: fields.py:1104 +#: fields.py:1237 msgid "Expected a date but got a datetime." msgstr "Bylo zadáno datum a čas, místo samotného data." -#: fields.py:1170 +#: fields.py:1303 +#, python-brace-format msgid "Time has wrong format. Use one of these formats instead: {format}." msgstr "Chybný formát času. Použijte jeden z těchto formátů: {format}." -#: fields.py:1232 +#: fields.py:1365 +#, python-brace-format msgid "Duration has wrong format. Use one of these formats instead: {format}." -msgstr "" +msgstr "Trvání má nesprávný formát. Použijte jeden z následujících: {format}." -#: fields.py:1251 fields.py:1300 +#: fields.py:1399 fields.py:1456 +#, python-brace-format msgid "\"{input}\" is not a valid choice." msgstr "\"{input}\" není platnou možností." -#: fields.py:1254 relations.py:71 relations.py:441 +#: fields.py:1402 +#, python-brace-format msgid "More than {count} items..." -msgstr "" +msgstr "Více než {count} položek..." -#: fields.py:1301 fields.py:1448 relations.py:437 serializers.py:524 +#: fields.py:1457 fields.py:1603 relations.py:485 serializers.py:570 +#, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "Byl očekáván seznam položek ale nalezen \"{input_type}\"." -#: fields.py:1302 +#: fields.py:1458 msgid "This selection may not be empty." -msgstr "" +msgstr "Tento výběr by neměl být prázdný." -#: fields.py:1339 +#: fields.py:1495 +#, python-brace-format msgid "\"{input}\" is not a valid path choice." -msgstr "" +msgstr "\"{input}\" není validní cesta k souboru." -#: fields.py:1358 +#: fields.py:1514 msgid "No file was submitted." msgstr "Nebyl zaslán žádný soubor." -#: fields.py:1359 +#: fields.py:1515 msgid "" "The submitted data was not a file. Check the encoding type on the form." msgstr "Zaslaná data neobsahují soubor. Zkontrolujte typ kódování ve formuláři." -#: fields.py:1360 +#: fields.py:1516 msgid "No filename could be determined." msgstr "Nebylo možné zjistit jméno souboru." -#: fields.py:1361 +#: fields.py:1517 msgid "The submitted file is empty." msgstr "Zaslaný soubor je prázdný." -#: fields.py:1362 +#: fields.py:1518 +#, python-brace-format msgid "" "Ensure this filename has at most {max_length} characters (it has {length})." msgstr "Zajistěte, aby jméno souboru obsahovalo maximálně {max_length} znaků (teď má {length} znaků)." -#: fields.py:1410 +#: fields.py:1566 msgid "" "Upload a valid image. The file you uploaded was either not an image or a " "corrupted image." msgstr "Nahrajte platný obrázek. Nahraný soubor buď není obrázkem nebo je poškozen." -#: fields.py:1449 relations.py:438 serializers.py:525 +#: fields.py:1604 relations.py:486 serializers.py:571 msgid "This list may not be empty." +msgstr "Tento list by neměl být prázdný." + +#: fields.py:1605 +#, python-brace-format +msgid "Ensure this field has at least {min_length} elements." msgstr "" -#: fields.py:1502 +#: fields.py:1606 +#, python-brace-format +msgid "Ensure this field has no more than {max_length} elements." +msgstr "" + +#: fields.py:1682 +#, python-brace-format msgid "Expected a dictionary of items but got type \"{input_type}\"." msgstr "Byl očekáván slovník položek ale nalezen \"{input_type}\"." -#: fields.py:1549 +#: fields.py:1683 +msgid "This dictionary may not be empty." +msgstr "" + +#: fields.py:1755 msgid "Value must be valid JSON." +msgstr "Hodnota musí být platná hodnota JSON." + +#: filters.py:49 templates/rest_framework/filters/search.html:2 +msgid "Search" +msgstr "Hledat" + +#: filters.py:50 +msgid "A search term." msgstr "" -#: filters.py:36 templates/rest_framework/filters/django_filter.html:5 -msgid "Submit" +#: filters.py:180 templates/rest_framework/filters/ordering.html:3 +msgid "Ordering" +msgstr "Řazení" + +#: filters.py:181 +msgid "Which field to use when ordering the results." msgstr "" -#: filters.py:336 +#: filters.py:287 msgid "ascending" -msgstr "" +msgstr "vzestupně" -#: filters.py:337 +#: filters.py:288 msgid "descending" +msgstr "sestupně" + +#: pagination.py:174 +msgid "A page number within the paginated result set." msgstr "" -#: pagination.py:193 +#: pagination.py:179 pagination.py:372 pagination.py:590 +msgid "Number of results to return per page." +msgstr "" + +#: pagination.py:189 msgid "Invalid page." +msgstr "Nevalidní strana." + +#: pagination.py:374 +msgid "The initial index from which to return the results." msgstr "" -#: pagination.py:427 -msgid "Invalid cursor" -msgstr "Chybný kurzor." +#: pagination.py:581 +msgid "The pagination cursor value." +msgstr "" -#: relations.py:207 +#: pagination.py:583 +msgid "Invalid cursor" +msgstr "Chybný kurzor" + +#: relations.py:246 +#, python-brace-format msgid "Invalid pk \"{pk_value}\" - object does not exist." msgstr "Chybný primární klíč \"{pk_value}\" - objekt neexistuje." -#: relations.py:208 +#: relations.py:247 +#, python-brace-format msgid "Incorrect type. Expected pk value, received {data_type}." msgstr "Chybný typ. Byl přijat typ {data_type} místo hodnoty primárního klíče." -#: relations.py:240 +#: relations.py:280 msgid "Invalid hyperlink - No URL match." msgstr "Chybný odkaz - nebyla nalezena žádní shoda." -#: relations.py:241 +#: relations.py:281 msgid "Invalid hyperlink - Incorrect URL match." msgstr "Chybný odkaz - byla nalezena neplatná shoda." -#: relations.py:242 +#: relations.py:282 msgid "Invalid hyperlink - Object does not exist." msgstr "Chybný odkaz - objekt neexistuje." -#: relations.py:243 +#: relations.py:283 +#, python-brace-format msgid "Incorrect type. Expected URL string, received {data_type}." msgstr "Chybný typ. Byl přijat typ {data_type} místo očekávaného odkazu." -#: relations.py:401 +#: relations.py:448 +#, python-brace-format msgid "Object with {slug_name}={value} does not exist." msgstr "Objekt s {slug_name}={value} neexistuje." -#: relations.py:402 +#: relations.py:449 msgid "Invalid value." msgstr "Chybná hodnota." -#: serializers.py:326 +#: schemas/utils.py:32 +msgid "unique integer value" +msgstr "" + +#: schemas/utils.py:34 +msgid "UUID string" +msgstr "" + +#: schemas/utils.py:36 +msgid "unique value" +msgstr "" + +#: schemas/utils.py:38 +#, python-brace-format +msgid "A {value_type} identifying this {name}." +msgstr "" + +#: serializers.py:337 +#, python-brace-format msgid "Invalid data. Expected a dictionary, but got {datatype}." msgstr "Chybná data. Byl přijat typ {datatype} místo očekávaného slovníku." #: templates/rest_framework/admin.html:116 -#: templates/rest_framework/base.html:128 +#: templates/rest_framework/base.html:136 +msgid "Extra Actions" +msgstr "" + +#: templates/rest_framework/admin.html:130 +#: templates/rest_framework/base.html:150 msgid "Filters" +msgstr "Filtry" + +#: templates/rest_framework/base.html:37 +msgid "navbar" msgstr "" -#: templates/rest_framework/filters/django_filter.html:2 -#: templates/rest_framework/filters/django_filter_crispyforms.html:4 -msgid "Field filters" +#: templates/rest_framework/base.html:75 +msgid "content" msgstr "" -#: templates/rest_framework/filters/ordering.html:3 -msgid "Ordering" +#: templates/rest_framework/base.html:78 +msgid "request form" msgstr "" -#: templates/rest_framework/filters/search.html:2 -msgid "Search" +#: templates/rest_framework/base.html:157 +msgid "main content" msgstr "" -#: templates/rest_framework/horizontal/radio.html:2 -#: templates/rest_framework/inline/radio.html:2 -#: templates/rest_framework/vertical/radio.html:2 +#: templates/rest_framework/base.html:173 +msgid "request info" +msgstr "" + +#: templates/rest_framework/base.html:177 +msgid "response info" +msgstr "" + +#: templates/rest_framework/horizontal/radio.html:4 +#: templates/rest_framework/inline/radio.html:3 +#: templates/rest_framework/vertical/radio.html:3 msgid "None" -msgstr "" +msgstr "Neuvedeno" -#: templates/rest_framework/horizontal/select_multiple.html:2 -#: templates/rest_framework/inline/select_multiple.html:2 -#: templates/rest_framework/vertical/select_multiple.html:2 +#: templates/rest_framework/horizontal/select_multiple.html:4 +#: templates/rest_framework/inline/select_multiple.html:3 +#: templates/rest_framework/vertical/select_multiple.html:3 msgid "No items to select." -msgstr "" +msgstr "Žádné položky k výběru." -#: validators.py:43 +#: validators.py:39 msgid "This field must be unique." msgstr "Tato položka musí být unikátní." -#: validators.py:97 +#: validators.py:89 +#, python-brace-format msgid "The fields {field_names} must make a unique set." msgstr "Položka {field_names} musí tvořit unikátní množinu." -#: validators.py:245 +#: validators.py:171 +#, python-brace-format +msgid "Surrogate characters are not allowed: U+{code_point:X}." +msgstr "" + +#: validators.py:243 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" date." msgstr "Tato položka musí být pro datum \"{date_field}\" unikátní." -#: validators.py:260 +#: validators.py:258 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" month." msgstr "Tato položka musí být pro měsíc \"{date_field}\" unikátní." -#: validators.py:273 +#: validators.py:271 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" year." msgstr "Tato položka musí být pro rok \"{date_field}\" unikátní." -#: versioning.py:42 +#: versioning.py:40 msgid "Invalid version in \"Accept\" header." msgstr "Chybné číslo verze v hlavičce Accept." -#: versioning.py:73 +#: versioning.py:71 msgid "Invalid version in URL path." msgstr "Chybné číslo verze v odkazu." -#: versioning.py:115 +#: versioning.py:116 msgid "Invalid version in URL path. Does not match any version namespace." -msgstr "" +msgstr "Nevalidní verze v URL cestě. Neodpovídá žádnému z jmenných prostorů pro verze." -#: versioning.py:147 +#: versioning.py:148 msgid "Invalid version in hostname." msgstr "Chybné číslo verze v hostname." -#: versioning.py:169 +#: versioning.py:170 msgid "Invalid version in query parameter." msgstr "Chybné čislo verze v URL parametru." - -#: views.py:88 -msgid "Permission denied." -msgstr "" diff --git a/rest_framework/locale/da/LC_MESSAGES/django.mo b/rest_framework/locale/da/LC_MESSAGES/django.mo index 77fd7c2abbe3eda1b7b4e4862469a3970ef24175..d70bc13a51ec471f0bb2093aac13daead653e7e2 100644 GIT binary patch delta 2193 zcmYk-e@xVM9LMqZb({hkBEQZ{!7qgz5*(mFh^U7ll7OJ30#Yc-3R7;eN%BX#TpN=% z=GOJQRvR15wOy;-@{hLG)@sg{Te@tP(^+k8%?(?Bm|MB^e0}fB)@QtVd_LdfzTeO1 z^L~H6-0S_VJAN}S<8`AA6KjY9zgZlYFX0z0Gt}4y*8c zT#EN`I|j1M+Ofm)Ebi2!exwuSgOY5s{Wy$|;d$JQ3)qR3%gmZ_67~6~*oA-KBiOjy zEDr}!6FY&r{)*?vsQX>P2F!U-6J)7vbhNTA)B`5436r=Df5*qMJjX18$B-X;n_v37 zb6A1DU@2y=V6s?+eANzMEskOY-@qsE8{DF;UXh!=VK+X+c*q;SfLg&cYDFKRw(^2E z&R&`RJdA#>ccONn2TO1Sb-&XX#`mxYzeWeIV?3YEzjQJ%mv6J%R){s|AnCJS&jHj8 zMo{H3g+Y7?Yw;~4r*;uF;g#H6pGQ#Rc2un#!A9ia@pP`e3k#?juPaFZVH6$4L#PS8 zh}wZ92JlbRMDF6FcpvLwmBdcQA`?d=<4*x8ihE%@y3W z4G*El^QhvxfjTzD>{~M)#ZCAD?#7=`#a6-oGFR(E<^C9!;|wbIpI{WP;bsgmYwcWo zAD#7dhOh~zu@%2W&Dh7?I&e2?Yu`i)-7cbTbPe@@g0<;W)PkDO2y)VF7B%sAkWIF$ z*on81=a7Gg6TpQjWO6p+jX%UP#^+JjucN+r4_UOem8M@bhfph-MRwU7#Ae|={2dFyPMN}&PYI_M4jq;~|8cItOp(8d-1PHYjVw>Ab|5Do2 zdI{A?m{65JK&W<_i4KB)8E&zH^$`aM9eW)~x2YgBSWDC-W;2Tu-(^Npp{%`#1KbTwx~ZFL<#8=bmM&Gik5WH4CPe|U0ibi(PGI2wEYJx+ZUqZ`2`98QbvjfYNTo{p1BumTt*OzniWFKvTaYRjx1C|L>~@yyPHTji z4aOIEs%a1vqKSzRBTsCiNW_p3O*GNOXu<+Jl~w5)4&(kk$`3&O%JnWBO!64%ksI9&{kNj%|Ii=YfD^cSn zR1pneBOXE3z;rU=TGvfSUMmwD4?- zP6eGSSdTYwJxAe1a?R2C7DKxY&-Xuoa`o2{h+XsZHY(co|jwx3B{%Dzg(m zh+7$7K&Adqq?l7?rIr1`M%056sAKmQYGPNBqipV=R&XELK2yIm`yS{)J?Ip2!pwDK zac0UN=aKhij7w41n{hkt!E&Adcj>I*!l$T}+(EX_{Ej+iMSPG1vlgqd4=G?XhAh&Y zL{6%CA60CZQ4_w3s)esmwelAhU@o)KM2oPJ=bLgmdDx0rq8t$Z3uidn+GQa)xgrZRs(N5wFX`FIm&;%(Ff?qVla zvOi%QLVf=wDl^~s{)##c#iU7@S%|gRgj&!c-#E@-yhr=5YSha^fB2wricCMD^rP%L6wL-Bab3Awcsg@s!y0>`*G>iqw%-Mf3b z(>n_9=M_0I+d349c}^mk?kcX#FWKcJMk2{%B<@IC9u&kGS^ea5PyPPlVIomzB;~;96cJ77N*4W;MyEHFoV>!j4Q# zFQ_7dOCK)FNm!9+)Uh1T3cnPyBVo_VEUji?b$(I*wM$_~YfCukfr`QWIURO5o0u6R7= diff --git a/rest_framework/locale/da/LC_MESSAGES/django.po b/rest_framework/locale/da/LC_MESSAGES/django.po index 900695649..574066f2a 100644 --- a/rest_framework/locale/da/LC_MESSAGES/django.po +++ b/rest_framework/locale/da/LC_MESSAGES/django.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: Django REST framework\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-07-12 16:13+0100\n" -"PO-Revision-Date: 2017-08-03 14:58+0000\n" -"Last-Translator: Mads Jensen \n" +"POT-Creation-Date: 2020-10-13 21:45+0200\n" +"PO-Revision-Date: 2020-10-13 19:45+0000\n" +"Last-Translator: Xavier Ordoquy \n" "Language-Team: Danish (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/da/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,40 +19,40 @@ msgstr "" "Language: da\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: authentication.py:73 +#: authentication.py:70 msgid "Invalid basic header. No credentials provided." msgstr "Ugyldig basic header. Ingen legitimation angivet." -#: authentication.py:76 +#: authentication.py:73 msgid "Invalid basic header. Credentials string should not contain spaces." msgstr "Ugyldig basic header. Legitimationsstrenge må ikke indeholde mellemrum." -#: authentication.py:82 +#: authentication.py:83 msgid "Invalid basic header. Credentials not correctly base64 encoded." msgstr "Ugyldig basic header. Legitimationen er ikke base64 encoded på korrekt vis." -#: authentication.py:99 +#: authentication.py:101 msgid "Invalid username/password." msgstr "Ugyldigt brugernavn/kodeord." -#: authentication.py:102 authentication.py:198 +#: authentication.py:104 authentication.py:206 msgid "User inactive or deleted." msgstr "Inaktiv eller slettet bruger." -#: authentication.py:176 +#: authentication.py:184 msgid "Invalid token header. No credentials provided." msgstr "Ugyldig token header." -#: authentication.py:179 +#: authentication.py:187 msgid "Invalid token header. Token string should not contain spaces." msgstr "Ugyldig token header. Token-strenge må ikke indeholde mellemrum." -#: authentication.py:185 +#: authentication.py:193 msgid "" "Invalid token header. Token string should not contain invalid characters." msgstr "Ugyldig token header. Token streng bør ikke indeholde ugyldige karakterer." -#: authentication.py:195 +#: authentication.py:203 msgid "Invalid token." msgstr "Ugyldigt token." @@ -60,382 +60,515 @@ msgstr "Ugyldigt token." msgid "Auth Token" msgstr "" -#: authtoken/models.py:15 +#: authtoken/models.py:13 msgid "Key" msgstr "Nøgle" -#: authtoken/models.py:18 +#: authtoken/models.py:16 msgid "User" msgstr "Bruger" -#: authtoken/models.py:20 +#: authtoken/models.py:18 msgid "Created" msgstr "Oprettet" -#: authtoken/models.py:29 +#: authtoken/models.py:27 authtoken/serializers.py:19 msgid "Token" msgstr "Token" -#: authtoken/models.py:30 +#: authtoken/models.py:28 msgid "Tokens" msgstr "Tokens" -#: authtoken/serializers.py:8 +#: authtoken/serializers.py:9 msgid "Username" msgstr "Brugernavn" -#: authtoken/serializers.py:9 +#: authtoken/serializers.py:13 msgid "Password" msgstr "Kodeord" -#: authtoken/serializers.py:20 -msgid "User account is disabled." -msgstr "Brugerkontoen er deaktiveret." - -#: authtoken/serializers.py:23 +#: authtoken/serializers.py:35 msgid "Unable to log in with provided credentials." msgstr "Kunne ikke logge ind med den angivne legitimation." -#: authtoken/serializers.py:26 +#: authtoken/serializers.py:38 msgid "Must include \"username\" and \"password\"." msgstr "Skal indeholde \"username\" og \"password\"." -#: exceptions.py:49 +#: exceptions.py:102 msgid "A server error occurred." msgstr "Der er sket en serverfejl." -#: exceptions.py:84 +#: exceptions.py:142 +msgid "Invalid input." +msgstr "" + +#: exceptions.py:161 msgid "Malformed request." msgstr "Misdannet forespørgsel." -#: exceptions.py:89 +#: exceptions.py:167 msgid "Incorrect authentication credentials." msgstr "Ugyldig legitimation til autentificering." -#: exceptions.py:94 +#: exceptions.py:173 msgid "Authentication credentials were not provided." msgstr "Legitimation til autentificering blev ikke angivet." -#: exceptions.py:99 +#: exceptions.py:179 msgid "You do not have permission to perform this action." msgstr "Du har ikke lov til at udføre denne handling." -#: exceptions.py:104 views.py:81 +#: exceptions.py:185 msgid "Not found." msgstr "Ikke fundet." -#: exceptions.py:109 +#: exceptions.py:191 +#, python-brace-format msgid "Method \"{method}\" not allowed." msgstr "Metoden \"{method}\" er ikke tilladt." -#: exceptions.py:120 +#: exceptions.py:202 msgid "Could not satisfy the request Accept header." msgstr "Kunne ikke efterkomme forespørgslens Accept header." -#: exceptions.py:132 +#: exceptions.py:212 +#, python-brace-format msgid "Unsupported media type \"{media_type}\" in request." msgstr "Forespørgslens media type, \"{media_type}\", er ikke understøttet." -#: exceptions.py:145 +#: exceptions.py:223 msgid "Request was throttled." msgstr "Forespørgslen blev neddroslet." -#: fields.py:269 relations.py:206 relations.py:239 validators.py:98 -#: validators.py:181 +#: exceptions.py:224 +#, python-brace-format +msgid "Expected available in {wait} second." +msgstr "" + +#: exceptions.py:225 +#, python-brace-format +msgid "Expected available in {wait} seconds." +msgstr "" + +#: fields.py:316 relations.py:245 relations.py:279 validators.py:90 +#: validators.py:183 msgid "This field is required." msgstr "Dette felt er påkrævet." -#: fields.py:270 +#: fields.py:317 msgid "This field may not be null." msgstr "Dette felt må ikke være null." -#: fields.py:608 fields.py:639 -msgid "\"{input}\" is not a valid boolean." -msgstr "\"{input}\" er ikke en tilladt boolsk værdi." +#: fields.py:701 +msgid "Must be a valid boolean." +msgstr "" -#: fields.py:674 +#: fields.py:766 +msgid "Not a valid string." +msgstr "" + +#: fields.py:767 msgid "This field may not be blank." msgstr "Dette felt må ikke være tomt." -#: fields.py:675 fields.py:1675 +#: fields.py:768 fields.py:1881 +#, python-brace-format msgid "Ensure this field has no more than {max_length} characters." msgstr "Tjek at dette felt ikke indeholder flere end {max_length} tegn." -#: fields.py:676 +#: fields.py:769 +#, python-brace-format msgid "Ensure this field has at least {min_length} characters." msgstr "Tjek at dette felt indeholder mindst {min_length} tegn." -#: fields.py:713 +#: fields.py:816 msgid "Enter a valid email address." msgstr "Angiv en gyldig e-mailadresse." -#: fields.py:724 +#: fields.py:827 msgid "This value does not match the required pattern." msgstr "Denne værdi passer ikke med det påkrævede mønster." -#: fields.py:735 +#: fields.py:838 msgid "" "Enter a valid \"slug\" consisting of letters, numbers, underscores or " "hyphens." msgstr "Indtast en gyldig \"slug\", bestående af bogstaver, tal, bund- og bindestreger." -#: fields.py:747 +#: fields.py:839 +msgid "" +"Enter a valid \"slug\" consisting of Unicode letters, numbers, underscores, " +"or hyphens." +msgstr "" + +#: fields.py:854 msgid "Enter a valid URL." msgstr "Indtast en gyldig URL." -#: fields.py:760 -msgid "\"{value}\" is not a valid UUID." -msgstr "\"{value}\" er ikke et gyldigt UUID." +#: fields.py:867 +msgid "Must be a valid UUID." +msgstr "" -#: fields.py:796 +#: fields.py:903 msgid "Enter a valid IPv4 or IPv6 address." msgstr "Indtast en gyldig IPv4 eller IPv6 adresse." -#: fields.py:821 +#: fields.py:931 msgid "A valid integer is required." msgstr "Et gyldigt heltal er påkrævet." -#: fields.py:822 fields.py:857 fields.py:891 +#: fields.py:932 fields.py:969 fields.py:1005 fields.py:1366 +#, python-brace-format msgid "Ensure this value is less than or equal to {max_value}." msgstr "Tjek at værdien er mindre end eller lig med {max_value}." -#: fields.py:823 fields.py:858 fields.py:892 +#: fields.py:933 fields.py:970 fields.py:1006 fields.py:1367 +#, python-brace-format msgid "Ensure this value is greater than or equal to {min_value}." msgstr "Tjek at værdien er større end eller lig med {min_value}." -#: fields.py:824 fields.py:859 fields.py:896 +#: fields.py:934 fields.py:971 fields.py:1010 msgid "String value too large." msgstr "Strengværdien er for stor." -#: fields.py:856 fields.py:890 +#: fields.py:968 fields.py:1004 msgid "A valid number is required." msgstr "Et gyldigt tal er påkrævet." -#: fields.py:893 +#: fields.py:1007 +#, python-brace-format msgid "Ensure that there are no more than {max_digits} digits in total." msgstr "Tjek at der ikke er flere end {max_digits} cifre i alt." -#: fields.py:894 +#: fields.py:1008 +#, python-brace-format msgid "" "Ensure that there are no more than {max_decimal_places} decimal places." msgstr "Tjek at der ikke er flere end {max_decimal_places} cifre efter kommaet." -#: fields.py:895 +#: fields.py:1009 +#, python-brace-format msgid "" "Ensure that there are no more than {max_whole_digits} digits before the " "decimal point." msgstr "Tjek at der ikke er flere end {max_whole_digits} cifre før kommaet." -#: fields.py:1025 +#: fields.py:1148 +#, python-brace-format msgid "Datetime has wrong format. Use one of these formats instead: {format}." msgstr "Datotid har et forkert format. Brug i stedet et af disse formater: {format}." -#: fields.py:1026 +#: fields.py:1149 msgid "Expected a datetime but got a date." msgstr "Forventede en datotid, men fik en dato." -#: fields.py:1103 +#: fields.py:1150 +#, python-brace-format +msgid "Invalid datetime for the timezone \"{timezone}\"." +msgstr "" + +#: fields.py:1151 +msgid "Datetime value out of range." +msgstr "" + +#: fields.py:1236 +#, python-brace-format msgid "Date has wrong format. Use one of these formats instead: {format}." msgstr "Dato har et forkert format. Brug i stedet et af disse formater: {format}." -#: fields.py:1104 +#: fields.py:1237 msgid "Expected a date but got a datetime." msgstr "Forventede en dato men fik en datotid." -#: fields.py:1170 +#: fields.py:1303 +#, python-brace-format msgid "Time has wrong format. Use one of these formats instead: {format}." msgstr "Klokkeslæt har forkert format. Brug i stedet et af disse formater: {format}. " -#: fields.py:1232 +#: fields.py:1365 +#, python-brace-format msgid "Duration has wrong format. Use one of these formats instead: {format}." msgstr "Varighed har forkert format. Brug istedet et af følgende formater: {format}." -#: fields.py:1251 fields.py:1300 +#: fields.py:1399 fields.py:1456 +#, python-brace-format msgid "\"{input}\" is not a valid choice." msgstr "\"{input}\" er ikke et gyldigt valg." -#: fields.py:1254 relations.py:71 relations.py:441 +#: fields.py:1402 +#, python-brace-format msgid "More than {count} items..." msgstr "Flere end {count} objekter..." -#: fields.py:1301 fields.py:1448 relations.py:437 serializers.py:524 +#: fields.py:1457 fields.py:1603 relations.py:485 serializers.py:570 +#, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "Forventede en liste, men fik noget af typen \"{input_type}\"." -#: fields.py:1302 +#: fields.py:1458 msgid "This selection may not be empty." msgstr "Dette valg kan være tomt." -#: fields.py:1339 +#: fields.py:1495 +#, python-brace-format msgid "\"{input}\" is not a valid path choice." msgstr "\"{input}\" er ikke et gyldigt valg af adresse." -#: fields.py:1358 +#: fields.py:1514 msgid "No file was submitted." msgstr "Ingen medsendt fil." -#: fields.py:1359 +#: fields.py:1515 msgid "" "The submitted data was not a file. Check the encoding type on the form." msgstr "Det medsendte data var ikke en fil. Tjek typen af indkodning på formularen." -#: fields.py:1360 +#: fields.py:1516 msgid "No filename could be determined." msgstr "Filnavnet kunne ikke afgøres." -#: fields.py:1361 +#: fields.py:1517 msgid "The submitted file is empty." msgstr "Den medsendte fil er tom." -#: fields.py:1362 +#: fields.py:1518 +#, python-brace-format msgid "" "Ensure this filename has at most {max_length} characters (it has {length})." msgstr "Sørg for at filnavnet er højst {max_length} langt (det er {length})." -#: fields.py:1410 +#: fields.py:1566 msgid "" "Upload a valid image. The file you uploaded was either not an image or a " "corrupted image." msgstr "Medsend et gyldigt billede. Den medsendte fil var enten ikke et billede eller billedfilen var ødelagt." -#: fields.py:1449 relations.py:438 serializers.py:525 +#: fields.py:1604 relations.py:486 serializers.py:571 msgid "This list may not be empty." msgstr "Denne liste er muligvis ikke tom." -#: fields.py:1502 +#: fields.py:1605 +#, python-brace-format +msgid "Ensure this field has at least {min_length} elements." +msgstr "" + +#: fields.py:1606 +#, python-brace-format +msgid "Ensure this field has no more than {max_length} elements." +msgstr "" + +#: fields.py:1682 +#, python-brace-format msgid "Expected a dictionary of items but got type \"{input_type}\"." msgstr "Forventede en dictionary, men fik noget af typen \"{input_type}\"." -#: fields.py:1549 +#: fields.py:1683 +msgid "This dictionary may not be empty." +msgstr "" + +#: fields.py:1755 msgid "Value must be valid JSON." msgstr "Værdi skal være gyldig JSON." -#: filters.py:36 templates/rest_framework/filters/django_filter.html:5 -msgid "Submit" -msgstr "Indsend." +#: filters.py:49 templates/rest_framework/filters/search.html:2 +msgid "Search" +msgstr "Søg" -#: filters.py:336 +#: filters.py:50 +msgid "A search term." +msgstr "" + +#: filters.py:180 templates/rest_framework/filters/ordering.html:3 +msgid "Ordering" +msgstr "Sortering" + +#: filters.py:181 +msgid "Which field to use when ordering the results." +msgstr "" + +#: filters.py:287 msgid "ascending" msgstr "stigende" -#: filters.py:337 +#: filters.py:288 msgid "descending" msgstr "faldende" -#: pagination.py:193 +#: pagination.py:174 +msgid "A page number within the paginated result set." +msgstr "" + +#: pagination.py:179 pagination.py:372 pagination.py:590 +msgid "Number of results to return per page." +msgstr "" + +#: pagination.py:189 msgid "Invalid page." msgstr "Ugyldig side" -#: pagination.py:427 +#: pagination.py:374 +msgid "The initial index from which to return the results." +msgstr "" + +#: pagination.py:581 +msgid "The pagination cursor value." +msgstr "" + +#: pagination.py:583 msgid "Invalid cursor" msgstr "Ugyldig cursor" -#: relations.py:207 +#: relations.py:246 +#, python-brace-format msgid "Invalid pk \"{pk_value}\" - object does not exist." msgstr "Ugyldig primærnøgle \"{pk_value}\" - objektet findes ikke." -#: relations.py:208 +#: relations.py:247 +#, python-brace-format msgid "Incorrect type. Expected pk value, received {data_type}." msgstr "Ugyldig type. Forventet værdi er primærnøgle, fik {data_type}." -#: relations.py:240 +#: relations.py:280 msgid "Invalid hyperlink - No URL match." msgstr "Ugyldigt hyperlink - intet URL match." -#: relations.py:241 +#: relations.py:281 msgid "Invalid hyperlink - Incorrect URL match." msgstr "Ugyldigt hyperlink - forkert URL match." -#: relations.py:242 +#: relations.py:282 msgid "Invalid hyperlink - Object does not exist." msgstr "Ugyldigt hyperlink - objektet findes ikke." -#: relations.py:243 +#: relations.py:283 +#, python-brace-format msgid "Incorrect type. Expected URL string, received {data_type}." msgstr "Forkert type. Forventede en URL-streng, fik {data_type}." -#: relations.py:401 +#: relations.py:448 +#, python-brace-format msgid "Object with {slug_name}={value} does not exist." msgstr "Object med {slug_name}={value} findes ikke." -#: relations.py:402 +#: relations.py:449 msgid "Invalid value." msgstr "Ugyldig værdi." -#: serializers.py:326 +#: schemas/utils.py:32 +msgid "unique integer value" +msgstr "" + +#: schemas/utils.py:34 +msgid "UUID string" +msgstr "" + +#: schemas/utils.py:36 +msgid "unique value" +msgstr "" + +#: schemas/utils.py:38 +#, python-brace-format +msgid "A {value_type} identifying this {name}." +msgstr "" + +#: serializers.py:337 +#, python-brace-format msgid "Invalid data. Expected a dictionary, but got {datatype}." msgstr "Ugyldig data. Forventede en dictionary, men fik {datatype}." #: templates/rest_framework/admin.html:116 -#: templates/rest_framework/base.html:128 +#: templates/rest_framework/base.html:136 +msgid "Extra Actions" +msgstr "" + +#: templates/rest_framework/admin.html:130 +#: templates/rest_framework/base.html:150 msgid "Filters" msgstr "Filtre" -#: templates/rest_framework/filters/django_filter.html:2 -#: templates/rest_framework/filters/django_filter_crispyforms.html:4 -msgid "Field filters" -msgstr "Søgefiltre" +#: templates/rest_framework/base.html:37 +msgid "navbar" +msgstr "" -#: templates/rest_framework/filters/ordering.html:3 -msgid "Ordering" -msgstr "Sortering" +#: templates/rest_framework/base.html:75 +msgid "content" +msgstr "" -#: templates/rest_framework/filters/search.html:2 -msgid "Search" -msgstr "Søg" +#: templates/rest_framework/base.html:78 +msgid "request form" +msgstr "" -#: templates/rest_framework/horizontal/radio.html:2 -#: templates/rest_framework/inline/radio.html:2 -#: templates/rest_framework/vertical/radio.html:2 +#: templates/rest_framework/base.html:157 +msgid "main content" +msgstr "" + +#: templates/rest_framework/base.html:173 +msgid "request info" +msgstr "" + +#: templates/rest_framework/base.html:177 +msgid "response info" +msgstr "" + +#: templates/rest_framework/horizontal/radio.html:4 +#: templates/rest_framework/inline/radio.html:3 +#: templates/rest_framework/vertical/radio.html:3 msgid "None" msgstr "Ingen" -#: templates/rest_framework/horizontal/select_multiple.html:2 -#: templates/rest_framework/inline/select_multiple.html:2 -#: templates/rest_framework/vertical/select_multiple.html:2 +#: templates/rest_framework/horizontal/select_multiple.html:4 +#: templates/rest_framework/inline/select_multiple.html:3 +#: templates/rest_framework/vertical/select_multiple.html:3 msgid "No items to select." msgstr "Intet at vælge." -#: validators.py:43 +#: validators.py:39 msgid "This field must be unique." msgstr "Dette felt skal være unikt." -#: validators.py:97 +#: validators.py:89 +#, python-brace-format msgid "The fields {field_names} must make a unique set." msgstr "Felterne {field_names} skal udgøre et unikt sæt." -#: validators.py:245 +#: validators.py:171 +#, python-brace-format +msgid "Surrogate characters are not allowed: U+{code_point:X}." +msgstr "" + +#: validators.py:243 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" date." msgstr "Dette felt skal være unikt for \"{date_field}\"-datoen." -#: validators.py:260 +#: validators.py:258 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" month." msgstr "Dette felt skal være unikt for \"{date_field}\"-måneden." -#: validators.py:273 +#: validators.py:271 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" year." msgstr "Dette felt skal være unikt for \"{date_field}\"-året." -#: versioning.py:42 +#: versioning.py:40 msgid "Invalid version in \"Accept\" header." msgstr "Ugyldig version i \"Accept\" headeren." -#: versioning.py:73 +#: versioning.py:71 msgid "Invalid version in URL path." msgstr "Ugyldig version i URL-stien." -#: versioning.py:115 +#: versioning.py:116 msgid "Invalid version in URL path. Does not match any version namespace." msgstr "Ugyldig version in URLen. Den stemmer ikke overens med nogen versionsnumre." -#: versioning.py:147 +#: versioning.py:148 msgid "Invalid version in hostname." msgstr "Ugyldig version i hostname." -#: versioning.py:169 +#: versioning.py:170 msgid "Invalid version in query parameter." msgstr "Ugyldig version i forespørgselsparameteren." - -#: views.py:88 -msgid "Permission denied." -msgstr "Adgang nægtet." diff --git a/rest_framework/locale/de/LC_MESSAGES/django.mo b/rest_framework/locale/de/LC_MESSAGES/django.mo index 0042572ef9e2c518221cf6536bbbb57b11626fb4..98688039789f0300dd6aed554c84050365f9991c 100644 GIT binary patch delta 2243 zcmYk-drXye9LMo5aq)npDFU5PIZ((&I33i3aDY7CLr8=GB`Y{fmy~(r5?SU>3(?g^ zYo0M{6StakU0j!)+FDzGgl+Xlx>j?e&6(L)ZLZl||D-E>f1c;D^&8*w`u(2soagyn zzP}&i-8VWCmlkGB8l|6DtVlN-lUaOFDtu-Eti&?hf_LM7)cvnu5uU~zoW>eFht+r! z=U_#)**Xm2CLDH6*ymI>b0LjiN3jKa@Ks!mKVu{M=bE)*H%9O+)b|&$4HxB_-HS0? zh~uaZzTsW})bmHw^Zv%LCCnP`bbA;_jqo|t3#PChXK)QJm}j;gJ1~fo$e(@1hwl3U zD=>GySqX-*3b!MVu$M7}uVWCu#1`Ife^6=0$X)IO58yqtk9zI5Q6u{pHKGfssl4vB z!wcN+J29Q>qo^5p0hi(g>Un3d9KXf_yoQMYl`QVg!*a~PMr774iuYqHvW#}n^DycG z6R0#fg@yP&hVU$EN&iH3xQU1B`(9Lg5S25p4XLw6jTlEkzKu#+|4&A3=RTh5Fqz(li6%WMt%#m=Cw=Qj^10t*8f|K;8H&@@Ic}?V?imV5vdgVLMSBKj^imQQ3V3wFEh=la?SK^_(hH zF12Ab?!i*+|4Hw{XUHIJ7Bv$YEa-fkiyA=@>cOq3B7+$mw$nK+7B_#$c- zjA1i=hY35qN0&cptAK0a;n-ds1aYoG)yOyG+OW5Wiu6xT1BUv zc8@yMNT?Gk4TPSreCa3p2)&1rFb*-NXhd4~M~NQiiu*yQos3?E>P&!8d4$lcbr8yQ zCe4}dR#eddR30XLPR*TFPHCrTH&ko=|6kV9==CnFL}u98hFVW0lZs9_Cd3{iGKdJF zj4vRR$STU4PNJJ2o$PT!+n8PMln42Y61jSR2~kC;kSosqS6yp)yJ!n42{#eN-o+YJ zM(_06mDujpweB1NPTArq^p9sfp+rxenYDc_Rh zMPD#gnVpuIs-L$wGx=m*UFuX`d3tiT;6lraP)#j=D+9F+kyYX4AxchLYZ^H9tyM%?TQaR`+T73K-{fG_YUlfj}F9wPsE=|{Zp8imTdN~P966L Yvr^v`|CE_LTNX+AmYq*eUaw643q5Y%YybcN delta 2567 zcmZYATWnNC9LMo#x0i*=Z3}Hd+a61ia%pXWvb9`#p-@UI6lg&T0^9D{?Xk-)+1&yG zVV^J(h*2A&Viiq{iSdDlVijXz0QJQniAG~$qGBLMB|M-{1f$>I*+YDA!oQ!H*>jos zpPAv_)|3629|L)34JAT6LiG5IIfc&_@Q3o2-2;f5@0- z96NpUd=p^shl>qK!ZLbbXl715;EM;tN=UlW5^JEXF&S zhq*NPDy9%0#{jYnOuJ_{a;fPHD;7UA=`o>qh_C3@D8s=oL>p_e5FlvCO(9HTP!e*=|9I(A_c zHPg#D7r*fQ88y>;UfaiXmeDRp*01SBWo7_h%Q41Az2G0VMl~+sVfs|PScPfST6iTx zMT_GS>cU^pO)=AAawdQ)aUp8k?8Pk@!TmUieOOAG`Z0!^@d`eLvq+=X(lhuZUc~*F zTW-vH%nVWKpz0pKMY;y=Tu$OQ(PI~@{+Gh2Y*=>6qHSo_+DZY+m+kA&@ zcpJ4F>a6TQqPR)>{{t#Peo#KNc$%;kyHP1VgW46JqQ2=JWMP{M^4N&=sQV+R8NP`; z*xW{47bNf8V!BZ65v;}ISjqd%`&2g2@ul0rAegRp!!p#222h{EMm^{#YEh2kQv3*c zm$~J&{Tvn~$26ic(T6i|H);YSsOP?pe%^21rNRa<7m)0mtC){BP$~Qsb;IAd7X6QL zR$wP;K<82SUG~~PdFC*S_4Lp8bg+Z=1+?%l%;*7gSb>^B5S7va)S`M3^YIoI;2)?} zeHYhY#Ui#E?m<6(j>^neXyNb3DQt=sXERcUTFgN#!uVqHubCaCBL_9BWL|QBew&E)^}1J;Z*Z zlhCYnVyWnC*JqhVY#+)y-|ICRaGh7TP>W?Z zkxN7frFI9Q#iimSN{JR?7ooy`8SY{YVVEc+RP>p(`X3aVN*TqcV@~|wX!>}S<)o~5B5j4NL!p=xwgwZ4m>r7Ojn()!mRB94 zbJYI-RsH>49TRcCFTco+g{_DaOWVoRM0{FhexTP*9&l1AClR;8cHFVUbz^4&!Gi6h zg9n`S#FapeZ+2*CC@~sO>(yZ=6&j4`qMLJmnBEYqt#7KWUv4$5Xl`s8yH-+K*)uv4 zN?GkrYG^nS8MKp8J87*xV7DGlB#+d^oC$wvan4*Tdi9f7+R<-2L&M2o+exPm+sSm@ zn7?dOp*M@MnPnw;?!bG?>I%QWVL_D2f, 2015 -# datKater , 2017 +# 5a85a00218ad0559ac6870a4179f4dbc, 2017 # Lukas Bischofberger , 2017 # Mads Jensen , 2015 # Niklas P , 2015-2016 @@ -15,9 +15,9 @@ msgid "" msgstr "" "Project-Id-Version: Django REST framework\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-07-12 16:13+0100\n" -"PO-Revision-Date: 2017-08-03 14:58+0000\n" -"Last-Translator: Lukas Bischofberger \n" +"POT-Creation-Date: 2020-10-13 21:45+0200\n" +"PO-Revision-Date: 2020-10-13 19:45+0000\n" +"Last-Translator: Xavier Ordoquy \n" "Language-Team: German (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -25,40 +25,40 @@ msgstr "" "Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: authentication.py:73 +#: authentication.py:70 msgid "Invalid basic header. No credentials provided." msgstr "Ungültiger basic header. Keine Zugangsdaten angegeben." -#: authentication.py:76 +#: authentication.py:73 msgid "Invalid basic header. Credentials string should not contain spaces." msgstr "Ungültiger basic header. Zugangsdaten sollen keine Leerzeichen enthalten." -#: authentication.py:82 +#: authentication.py:83 msgid "Invalid basic header. Credentials not correctly base64 encoded." msgstr "Ungültiger basic header. Zugangsdaten sind nicht korrekt mit base64 kodiert." -#: authentication.py:99 +#: authentication.py:101 msgid "Invalid username/password." msgstr "Ungültiger Benutzername/Passwort" -#: authentication.py:102 authentication.py:198 +#: authentication.py:104 authentication.py:206 msgid "User inactive or deleted." msgstr "Benutzer inaktiv oder gelöscht." -#: authentication.py:176 +#: authentication.py:184 msgid "Invalid token header. No credentials provided." msgstr "Ungültiger token header. Keine Zugangsdaten angegeben." -#: authentication.py:179 +#: authentication.py:187 msgid "Invalid token header. Token string should not contain spaces." msgstr "Ungültiger token header. Zugangsdaten sollen keine Leerzeichen enthalten." -#: authentication.py:185 +#: authentication.py:193 msgid "" "Invalid token header. Token string should not contain invalid characters." msgstr "Ungültiger Token Header. Tokens dürfen keine ungültigen Zeichen enthalten." -#: authentication.py:195 +#: authentication.py:203 msgid "Invalid token." msgstr "Ungültiges Token" @@ -66,382 +66,515 @@ msgstr "Ungültiges Token" msgid "Auth Token" msgstr "Auth Token" -#: authtoken/models.py:15 +#: authtoken/models.py:13 msgid "Key" msgstr "Schlüssel" -#: authtoken/models.py:18 +#: authtoken/models.py:16 msgid "User" msgstr "Benutzer" -#: authtoken/models.py:20 +#: authtoken/models.py:18 msgid "Created" msgstr "Erzeugt" -#: authtoken/models.py:29 +#: authtoken/models.py:27 authtoken/serializers.py:19 msgid "Token" msgstr "Token" -#: authtoken/models.py:30 +#: authtoken/models.py:28 msgid "Tokens" msgstr "Tokens" -#: authtoken/serializers.py:8 +#: authtoken/serializers.py:9 msgid "Username" msgstr "Benutzername" -#: authtoken/serializers.py:9 +#: authtoken/serializers.py:13 msgid "Password" msgstr "Passwort" -#: authtoken/serializers.py:20 -msgid "User account is disabled." -msgstr "Benutzerkonto ist gesperrt." - -#: authtoken/serializers.py:23 +#: authtoken/serializers.py:35 msgid "Unable to log in with provided credentials." msgstr "Die angegebenen Zugangsdaten stimmen nicht." -#: authtoken/serializers.py:26 +#: authtoken/serializers.py:38 msgid "Must include \"username\" and \"password\"." msgstr "\"username\" und \"password\" sind erforderlich." -#: exceptions.py:49 +#: exceptions.py:102 msgid "A server error occurred." msgstr "Ein Serverfehler ist aufgetreten." -#: exceptions.py:84 +#: exceptions.py:142 +msgid "Invalid input." +msgstr "" + +#: exceptions.py:161 msgid "Malformed request." msgstr "Fehlerhafte Anfrage." -#: exceptions.py:89 +#: exceptions.py:167 msgid "Incorrect authentication credentials." msgstr "Falsche Anmeldedaten." -#: exceptions.py:94 +#: exceptions.py:173 msgid "Authentication credentials were not provided." msgstr "Anmeldedaten fehlen." -#: exceptions.py:99 +#: exceptions.py:179 msgid "You do not have permission to perform this action." msgstr "Sie sind nicht berechtigt diese Aktion durchzuführen." -#: exceptions.py:104 views.py:81 +#: exceptions.py:185 msgid "Not found." msgstr "Nicht gefunden." -#: exceptions.py:109 +#: exceptions.py:191 +#, python-brace-format msgid "Method \"{method}\" not allowed." msgstr "Methode \"{method}\" nicht erlaubt." -#: exceptions.py:120 +#: exceptions.py:202 msgid "Could not satisfy the request Accept header." msgstr "Kann die Accept Kopfzeile der Anfrage nicht erfüllen." -#: exceptions.py:132 +#: exceptions.py:212 +#, python-brace-format msgid "Unsupported media type \"{media_type}\" in request." msgstr "Nicht unterstützter Medientyp \"{media_type}\" in der Anfrage." -#: exceptions.py:145 +#: exceptions.py:223 msgid "Request was throttled." msgstr "Die Anfrage wurde gedrosselt." -#: fields.py:269 relations.py:206 relations.py:239 validators.py:98 -#: validators.py:181 +#: exceptions.py:224 +#, python-brace-format +msgid "Expected available in {wait} second." +msgstr "" + +#: exceptions.py:225 +#, python-brace-format +msgid "Expected available in {wait} seconds." +msgstr "" + +#: fields.py:316 relations.py:245 relations.py:279 validators.py:90 +#: validators.py:183 msgid "This field is required." msgstr "Dieses Feld ist erforderlich." -#: fields.py:270 +#: fields.py:317 msgid "This field may not be null." msgstr "Dieses Feld darf nicht null sein." -#: fields.py:608 fields.py:639 -msgid "\"{input}\" is not a valid boolean." -msgstr "\"{input}\" ist kein gültiger Wahrheitswert." +#: fields.py:701 +msgid "Must be a valid boolean." +msgstr "" -#: fields.py:674 +#: fields.py:766 +msgid "Not a valid string." +msgstr "" + +#: fields.py:767 msgid "This field may not be blank." msgstr "Dieses Feld darf nicht leer sein." -#: fields.py:675 fields.py:1675 +#: fields.py:768 fields.py:1881 +#, python-brace-format msgid "Ensure this field has no more than {max_length} characters." msgstr "Stelle sicher, dass dieses Feld nicht mehr als {max_length} Zeichen lang ist." -#: fields.py:676 +#: fields.py:769 +#, python-brace-format msgid "Ensure this field has at least {min_length} characters." msgstr "Stelle sicher, dass dieses Feld mindestens {min_length} Zeichen lang ist." -#: fields.py:713 +#: fields.py:816 msgid "Enter a valid email address." msgstr "Gib eine gültige E-Mail Adresse an." -#: fields.py:724 +#: fields.py:827 msgid "This value does not match the required pattern." msgstr "Dieser Wert passt nicht zu dem erforderlichen Muster." -#: fields.py:735 +#: fields.py:838 msgid "" "Enter a valid \"slug\" consisting of letters, numbers, underscores or " "hyphens." msgstr "Gib ein gültiges \"slug\" aus Buchstaben, Ziffern, Unterstrichen und Minuszeichen ein." -#: fields.py:747 +#: fields.py:839 +msgid "" +"Enter a valid \"slug\" consisting of Unicode letters, numbers, underscores, " +"or hyphens." +msgstr "" + +#: fields.py:854 msgid "Enter a valid URL." msgstr "Gib eine gültige URL ein." -#: fields.py:760 -msgid "\"{value}\" is not a valid UUID." -msgstr "\"{value}\" ist keine gültige UUID." +#: fields.py:867 +msgid "Must be a valid UUID." +msgstr "" -#: fields.py:796 +#: fields.py:903 msgid "Enter a valid IPv4 or IPv6 address." msgstr "Geben Sie eine gültige IPv4 oder IPv6 Adresse an" -#: fields.py:821 +#: fields.py:931 msgid "A valid integer is required." msgstr "Eine gültige Ganzzahl ist erforderlich." -#: fields.py:822 fields.py:857 fields.py:891 +#: fields.py:932 fields.py:969 fields.py:1005 fields.py:1366 +#, python-brace-format msgid "Ensure this value is less than or equal to {max_value}." msgstr "Stelle sicher, dass dieser Wert kleiner oder gleich {max_value} ist." -#: fields.py:823 fields.py:858 fields.py:892 +#: fields.py:933 fields.py:970 fields.py:1006 fields.py:1367 +#, python-brace-format msgid "Ensure this value is greater than or equal to {min_value}." msgstr "Stelle sicher, dass dieser Wert größer oder gleich {min_value} ist." -#: fields.py:824 fields.py:859 fields.py:896 +#: fields.py:934 fields.py:971 fields.py:1010 msgid "String value too large." msgstr "Zeichenkette zu lang." -#: fields.py:856 fields.py:890 +#: fields.py:968 fields.py:1004 msgid "A valid number is required." msgstr "Eine gültige Zahl ist erforderlich." -#: fields.py:893 +#: fields.py:1007 +#, python-brace-format msgid "Ensure that there are no more than {max_digits} digits in total." msgstr "Stelle sicher, dass es insgesamt nicht mehr als {max_digits} Ziffern lang ist." -#: fields.py:894 +#: fields.py:1008 +#, python-brace-format msgid "" "Ensure that there are no more than {max_decimal_places} decimal places." msgstr "Stelle sicher, dass es nicht mehr als {max_decimal_places} Nachkommastellen lang ist." -#: fields.py:895 +#: fields.py:1009 +#, python-brace-format msgid "" "Ensure that there are no more than {max_whole_digits} digits before the " "decimal point." msgstr "Stelle sicher, dass es nicht mehr als {max_whole_digits} Stellen vor dem Komma lang ist." -#: fields.py:1025 +#: fields.py:1148 +#, python-brace-format msgid "Datetime has wrong format. Use one of these formats instead: {format}." msgstr "Datums- und Zeitangabe hat das falsche Format. Nutze stattdessen eines dieser Formate: {format}." -#: fields.py:1026 +#: fields.py:1149 msgid "Expected a datetime but got a date." msgstr "Erwarte eine Datums- und Zeitangabe, erhielt aber ein Datum." -#: fields.py:1103 +#: fields.py:1150 +#, python-brace-format +msgid "Invalid datetime for the timezone \"{timezone}\"." +msgstr "" + +#: fields.py:1151 +msgid "Datetime value out of range." +msgstr "" + +#: fields.py:1236 +#, python-brace-format msgid "Date has wrong format. Use one of these formats instead: {format}." msgstr "Datum hat das falsche Format. Nutze stattdessen eines dieser Formate: {format}." -#: fields.py:1104 +#: fields.py:1237 msgid "Expected a date but got a datetime." msgstr "Erwarte ein Datum, erhielt aber eine Datums- und Zeitangabe." -#: fields.py:1170 +#: fields.py:1303 +#, python-brace-format msgid "Time has wrong format. Use one of these formats instead: {format}." msgstr "Zeitangabe hat das falsche Format. Nutze stattdessen eines dieser Formate: {format}." -#: fields.py:1232 +#: fields.py:1365 +#, python-brace-format msgid "Duration has wrong format. Use one of these formats instead: {format}." msgstr "Laufzeit hat das falsche Format. Benutze stattdessen eines dieser Formate {format}." -#: fields.py:1251 fields.py:1300 +#: fields.py:1399 fields.py:1456 +#, python-brace-format msgid "\"{input}\" is not a valid choice." msgstr "\"{input}\" ist keine gültige Option." -#: fields.py:1254 relations.py:71 relations.py:441 +#: fields.py:1402 +#, python-brace-format msgid "More than {count} items..." msgstr "Mehr als {count} Ergebnisse" -#: fields.py:1301 fields.py:1448 relations.py:437 serializers.py:524 +#: fields.py:1457 fields.py:1603 relations.py:485 serializers.py:570 +#, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "Erwarte eine Liste von Elementen, erhielt aber den Typ \"{input_type}\"." -#: fields.py:1302 +#: fields.py:1458 msgid "This selection may not be empty." msgstr "Diese Auswahl darf nicht leer sein" -#: fields.py:1339 +#: fields.py:1495 +#, python-brace-format msgid "\"{input}\" is not a valid path choice." msgstr "\"{input}\" ist ein ungültiger Pfad." -#: fields.py:1358 +#: fields.py:1514 msgid "No file was submitted." msgstr "Es wurde keine Datei übermittelt." -#: fields.py:1359 +#: fields.py:1515 msgid "" "The submitted data was not a file. Check the encoding type on the form." msgstr "Die übermittelten Daten stellen keine Datei dar. Prüfe den Kodierungstyp im Formular." -#: fields.py:1360 +#: fields.py:1516 msgid "No filename could be determined." msgstr "Der Dateiname konnte nicht ermittelt werden." -#: fields.py:1361 +#: fields.py:1517 msgid "The submitted file is empty." msgstr "Die übermittelte Datei ist leer." -#: fields.py:1362 +#: fields.py:1518 +#, python-brace-format msgid "" "Ensure this filename has at most {max_length} characters (it has {length})." msgstr "Stelle sicher, dass dieser Dateiname höchstens {max_length} Zeichen lang ist (er hat {length})." -#: fields.py:1410 +#: fields.py:1566 msgid "" "Upload a valid image. The file you uploaded was either not an image or a " "corrupted image." msgstr "Lade ein gültiges Bild hoch. Die hochgeladene Datei ist entweder kein Bild oder ein beschädigtes Bild." -#: fields.py:1449 relations.py:438 serializers.py:525 +#: fields.py:1604 relations.py:486 serializers.py:571 msgid "This list may not be empty." msgstr "Diese Liste darf nicht leer sein." -#: fields.py:1502 +#: fields.py:1605 +#, python-brace-format +msgid "Ensure this field has at least {min_length} elements." +msgstr "" + +#: fields.py:1606 +#, python-brace-format +msgid "Ensure this field has no more than {max_length} elements." +msgstr "" + +#: fields.py:1682 +#, python-brace-format msgid "Expected a dictionary of items but got type \"{input_type}\"." msgstr "Erwartete ein Dictionary mit Elementen, erhielt aber den Typ \"{input_type}\"." -#: fields.py:1549 +#: fields.py:1683 +msgid "This dictionary may not be empty." +msgstr "" + +#: fields.py:1755 msgid "Value must be valid JSON." msgstr "Wert muss gültiges JSON sein." -#: filters.py:36 templates/rest_framework/filters/django_filter.html:5 -msgid "Submit" -msgstr "Abschicken" +#: filters.py:49 templates/rest_framework/filters/search.html:2 +msgid "Search" +msgstr "Suche" -#: filters.py:336 +#: filters.py:50 +msgid "A search term." +msgstr "" + +#: filters.py:180 templates/rest_framework/filters/ordering.html:3 +msgid "Ordering" +msgstr "Sortierung" + +#: filters.py:181 +msgid "Which field to use when ordering the results." +msgstr "" + +#: filters.py:287 msgid "ascending" msgstr "Aufsteigend" -#: filters.py:337 +#: filters.py:288 msgid "descending" msgstr "Absteigend" -#: pagination.py:193 +#: pagination.py:174 +msgid "A page number within the paginated result set." +msgstr "" + +#: pagination.py:179 pagination.py:372 pagination.py:590 +msgid "Number of results to return per page." +msgstr "" + +#: pagination.py:189 msgid "Invalid page." msgstr "Ungültige Seite." -#: pagination.py:427 +#: pagination.py:374 +msgid "The initial index from which to return the results." +msgstr "" + +#: pagination.py:581 +msgid "The pagination cursor value." +msgstr "" + +#: pagination.py:583 msgid "Invalid cursor" msgstr "Ungültiger Zeiger" -#: relations.py:207 +#: relations.py:246 +#, python-brace-format msgid "Invalid pk \"{pk_value}\" - object does not exist." msgstr "Ungültiger pk \"{pk_value}\" - Object existiert nicht." -#: relations.py:208 +#: relations.py:247 +#, python-brace-format msgid "Incorrect type. Expected pk value, received {data_type}." msgstr "Falscher Typ. Erwarte pk Wert, erhielt aber {data_type}." -#: relations.py:240 +#: relations.py:280 msgid "Invalid hyperlink - No URL match." msgstr "Ungültiger Hyperlink - entspricht keiner URL." -#: relations.py:241 +#: relations.py:281 msgid "Invalid hyperlink - Incorrect URL match." msgstr "Ungültiger Hyperlink - URL stimmt nicht überein." -#: relations.py:242 +#: relations.py:282 msgid "Invalid hyperlink - Object does not exist." msgstr "Ungültiger Hyperlink - Objekt existiert nicht." -#: relations.py:243 +#: relations.py:283 +#, python-brace-format msgid "Incorrect type. Expected URL string, received {data_type}." msgstr "Falscher Typ. Erwarte URL Zeichenkette, erhielt aber {data_type}." -#: relations.py:401 +#: relations.py:448 +#, python-brace-format msgid "Object with {slug_name}={value} does not exist." msgstr "Objekt mit {slug_name}={value} existiert nicht." -#: relations.py:402 +#: relations.py:449 msgid "Invalid value." msgstr "Ungültiger Wert." -#: serializers.py:326 +#: schemas/utils.py:32 +msgid "unique integer value" +msgstr "" + +#: schemas/utils.py:34 +msgid "UUID string" +msgstr "" + +#: schemas/utils.py:36 +msgid "unique value" +msgstr "" + +#: schemas/utils.py:38 +#, python-brace-format +msgid "A {value_type} identifying this {name}." +msgstr "" + +#: serializers.py:337 +#, python-brace-format msgid "Invalid data. Expected a dictionary, but got {datatype}." msgstr "Ungültige Daten. Dictionary erwartet, aber {datatype} erhalten." #: templates/rest_framework/admin.html:116 -#: templates/rest_framework/base.html:128 +#: templates/rest_framework/base.html:136 +msgid "Extra Actions" +msgstr "" + +#: templates/rest_framework/admin.html:130 +#: templates/rest_framework/base.html:150 msgid "Filters" msgstr "Filter" -#: templates/rest_framework/filters/django_filter.html:2 -#: templates/rest_framework/filters/django_filter_crispyforms.html:4 -msgid "Field filters" -msgstr "Feldfilter" +#: templates/rest_framework/base.html:37 +msgid "navbar" +msgstr "" -#: templates/rest_framework/filters/ordering.html:3 -msgid "Ordering" -msgstr "Sortierung" +#: templates/rest_framework/base.html:75 +msgid "content" +msgstr "" -#: templates/rest_framework/filters/search.html:2 -msgid "Search" -msgstr "Suche" +#: templates/rest_framework/base.html:78 +msgid "request form" +msgstr "" -#: templates/rest_framework/horizontal/radio.html:2 -#: templates/rest_framework/inline/radio.html:2 -#: templates/rest_framework/vertical/radio.html:2 +#: templates/rest_framework/base.html:157 +msgid "main content" +msgstr "" + +#: templates/rest_framework/base.html:173 +msgid "request info" +msgstr "" + +#: templates/rest_framework/base.html:177 +msgid "response info" +msgstr "" + +#: templates/rest_framework/horizontal/radio.html:4 +#: templates/rest_framework/inline/radio.html:3 +#: templates/rest_framework/vertical/radio.html:3 msgid "None" msgstr "Nichts" -#: templates/rest_framework/horizontal/select_multiple.html:2 -#: templates/rest_framework/inline/select_multiple.html:2 -#: templates/rest_framework/vertical/select_multiple.html:2 +#: templates/rest_framework/horizontal/select_multiple.html:4 +#: templates/rest_framework/inline/select_multiple.html:3 +#: templates/rest_framework/vertical/select_multiple.html:3 msgid "No items to select." msgstr "Keine Elemente zum Auswählen." -#: validators.py:43 +#: validators.py:39 msgid "This field must be unique." msgstr "Dieses Feld muss eindeutig sein." -#: validators.py:97 +#: validators.py:89 +#, python-brace-format msgid "The fields {field_names} must make a unique set." msgstr "Die Felder {field_names} müssen eine eindeutige Menge bilden." -#: validators.py:245 +#: validators.py:171 +#, python-brace-format +msgid "Surrogate characters are not allowed: U+{code_point:X}." +msgstr "" + +#: validators.py:243 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" date." msgstr "Dieses Feld muss bezüglich des \"{date_field}\" Datums eindeutig sein." -#: validators.py:260 +#: validators.py:258 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" month." msgstr "Dieses Feld muss bezüglich des \"{date_field}\" Monats eindeutig sein." -#: validators.py:273 +#: validators.py:271 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" year." msgstr "Dieses Feld muss bezüglich des \"{date_field}\" Jahrs eindeutig sein." -#: versioning.py:42 +#: versioning.py:40 msgid "Invalid version in \"Accept\" header." msgstr "Ungültige Version in der \"Accept\" Kopfzeile." -#: versioning.py:73 +#: versioning.py:71 msgid "Invalid version in URL path." msgstr "Ungültige Version im URL Pfad." -#: versioning.py:115 +#: versioning.py:116 msgid "Invalid version in URL path. Does not match any version namespace." msgstr "Ungültige Version im URL-Pfad. Entspricht keinem Versions-Namensraum." -#: versioning.py:147 +#: versioning.py:148 msgid "Invalid version in hostname." msgstr "Ungültige Version im Hostname." -#: versioning.py:169 +#: versioning.py:170 msgid "Invalid version in query parameter." msgstr "Ungültige Version im Anfrageparameter." - -#: views.py:88 -msgid "Permission denied." -msgstr "Zugriff verweigert." diff --git a/rest_framework/locale/el/LC_MESSAGES/django.mo b/rest_framework/locale/el/LC_MESSAGES/django.mo index b44b9ea9c3855c92d569c77a7613d233ab511c95..f434e6fc9067325f42f365893ffa52e35dd577bc 100644 GIT binary patch delta 2203 zcmY+_ZA@EL7{KwTv|uS48*eQWbOnYCgi^*jR@kKC7{YKcl?hYKV4G4$fRcezXR5>c z!Gz50?uGd>U*^jPm$}#vVidE*W%0w*%uLPVvSi;d5@Mpu#Kh?Tx%axvlb-uK=d``| zoaa2JeJz^U6~CJ8IxLi4Y9ZC-6p7gQXr0G~h)?#C*e z#7g`e`Kruf6aI!9u{PZ_F3-|vVc;xAFrB+>#Wt+Ncd!93<0j0@5UIyL)c4=OcD#fo zShPqa8=Fxl*o`_qW_t|velr--r7qCW8CEa0R#=DnfL>gSQ`m?X@jlGT6bWD#@{*Uh z=;sVvi5IX4uVV%JmWc3GX~H0OVgO&nRt@!O8td^djy||2iKk9<^+5JQw@n6NjTMWGE5cwW;D@IsW zC!WG${0BE-F{$5*L#QF1##;Od_h1H3(FMGK2k~{=0D}kUpT!B>!s?#FAL2AL2O`8v zZ*T@*#?T!i3H$()Co9BEn9Fi{YfMkas_+vI_md3 z?jkBUjWG<9kpv?yAJJIHzlBZUcnvM$gI}$d^tfQjMsDk3pjgvJbEyJuVN~CIb&&9 zh}~F%kKjH$jh9d-p5O?y;~^w(W7B{iKVkWgAtaw1|2SmBcsy2eu+PCl63bC9`a?jp*|^;^xmIiT%Gq^vv*U z4z$|uWZ3HJbq{shHrr#5q2^65)k)RdAfV>4B?rx)ZjFXU;8ChoSigqcP2E7%{ra!y zUN=)Yf#&}M`FXSGHr!e?;~&0dK*QfgB{j_QAXl>8%oE)rcGUdOXfWeXNB38Yo`goT zWnI$kb|-31knH9uNx=eYJ@tNS7L}h4vuO5fUXaH(%W_&?s-H@l5T56vLnC8*jJ@t` zJ(IaASXINT)?X8@UmY?cKA*q4Z#=qd)Za0> zb2v8kjDOwUVXGAxj1CQtNBfdb`+^SRYW~jT__BZ}`DMvDN6NP|Ml6_P6qYYezFYdF h)9xn=%Rg|WJYSqVSMjsM_^NUw*;JLAW}K{@{}(#=?XLg; delta 2634 zcmZYAeN0tl9Ki7hQBV-ji-Jb#5g`@i%Bvun$cy*_z9eG4^y0m6n};s<8u!v%#4d=4 zG#A-5b2Y7*HM6D3^(B^eH~+}3wR2{hTWQ*Cu33MyX69tNG-&pL}|QIgV>nBg|uU=QZw-d)G&;>cm}8AHJpNfqCD>yr&Jcs z$0TgP0^Er6a5pC6X{=Eyq(;cpbK`++El(|{{0c6`uW=)$Co5HsZMX=JVgug9O3WJ{ z``v?$ln>)9{23jXniA{aOqBaeEJI4U$w-5HunaFDf9ek|($j?0*oae6UQ~(|=*KEN zj@Fdq+M5nh_i{BI_6j~g=5HFSR} zHrckLjC8;*zlOz>PvGG=rEcH?%3T}*S*l@NhreP8R?}EEcA{+7Lnupo8)Ye+A%-Cp zS7Q)+QAT#3%j-Ci;fcp^2+NtCKD>-=*f34bkW%MRo?k$#d+;Od$Kn}EJ&&KFjyalA zNAOi#hM@wsr1UU=vL*+y1#hAkYxuDfPhkh3K_mD-NO=)kPUta>5kBqKc;vb~CHqyjsWSyXMf8T(KgxPd)b&s+U?8D+-G=PI=r z*CX3N4PiAN!&3Yasj9L#dots7I9}#%CmET6eq4mdu?lZv6XvjEcvkI1Ii5#xIbK28 zGgIfqUN{}=DVNygmr#!B5Hcz12r@Qx31tR;!ZO~k9*~iW#RahuR^ywLPhbt!@K!lC z{U{wghw>%7i#srnE$_y+u?7D|*^F);T8QtWl&_&|)+ucLeq4*8F=VciNx< z3vF4cjH@h*Bx!sVA?qheI=7OL&d(rNDQgcb#dU-v4uq<+a}q^Ag(0ZB}vwS1D-2v$XHAx06B zvWR9GzkCQJ#S=1}O9)v8NfQX!&D#iB+eAVVr&CR|at|-E8J{7>6S6!U6t$YDBwU1? zf(?Wu*@#aNAvrRVWP`{t`){hEzz5FSy>kC)LiS0H6iC$s-ytiN+p;IE?}HR8i1kE+ z6i6$GG%FYTijtkhB6sP&9i74MY)ubnK7UYiX)n6GdaLI4`@J5Q&l$dxxMEs%7dJaS z|F6~Dys|Fh92-9-+2d{1p3}WSPe&l)O!;oKW1Xj?T@M6wzfWuR_;gRJGd#{wp3v0k zZr6j6D#x7oNv@U_f2S`fuWr=?F1J@Ixh8+Htf;)8u%e)_L@O$-EUU;bBqcSv0>Od} z9WGzM>k9fiDzy#U{q3%RR=d4J4+M3Owm9f-UrMytHzMAQ!nma9!;$zi_a`4SqMALL z@XMK6LR7Pc@K0~(&lomNb3GqU%MYf!Pis-`M2*jklab#1jD+>%qDF)| zJZROtz*D<4bATHs%|3HCZP9~M#zo__F``jLI&{%E%kL2*YBe}woHs5QA9FWq?sA61 HMR)%JHvf<} diff --git a/rest_framework/locale/el/LC_MESSAGES/django.po b/rest_framework/locale/el/LC_MESSAGES/django.po index 18eb371c9..65459fc7b 100644 --- a/rest_framework/locale/el/LC_MESSAGES/django.po +++ b/rest_framework/locale/el/LC_MESSAGES/django.po @@ -3,14 +3,16 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Christos Barkonikos , 2020 +# Panagiotis Pavlidis , 2019 # Serafeim Papastefanos , 2016 msgid "" msgstr "" "Project-Id-Version: Django REST framework\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-07-12 16:13+0100\n" -"PO-Revision-Date: 2017-08-03 14:58+0000\n" -"Last-Translator: Thomas Christie \n" +"POT-Creation-Date: 2020-10-13 21:45+0200\n" +"PO-Revision-Date: 2020-10-13 19:45+0000\n" +"Last-Translator: Xavier Ordoquy \n" "Language-Team: Greek (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/el/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,40 +20,40 @@ msgstr "" "Language: el\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: authentication.py:73 +#: authentication.py:70 msgid "Invalid basic header. No credentials provided." msgstr "Λανθασμένη επικεφαλίδα basic. Δεν υπάρχουν διαπιστευτήρια." -#: authentication.py:76 +#: authentication.py:73 msgid "Invalid basic header. Credentials string should not contain spaces." -msgstr "Λανθασμένη επικεφαλίδα basic. Τα διαπιστευτήρια δε μπορεί να περιέχουν κενά." +msgstr "Λανθασμένη επικεφαλίδα basic. Τα διαπιστευτήρια δεν πρέπει να περιέχουν κενά." -#: authentication.py:82 +#: authentication.py:83 msgid "Invalid basic header. Credentials not correctly base64 encoded." msgstr "Λανθασμένη επικεφαλίδα basic. Τα διαπιστευτήρια δεν είναι κωδικοποιημένα κατά base64." -#: authentication.py:99 +#: authentication.py:101 msgid "Invalid username/password." msgstr "Λανθασμένο όνομα χρήστη/κωδικός." -#: authentication.py:102 authentication.py:198 +#: authentication.py:104 authentication.py:206 msgid "User inactive or deleted." msgstr "Ο χρήστης είναι ανενεργός ή διεγραμμένος." -#: authentication.py:176 +#: authentication.py:184 msgid "Invalid token header. No credentials provided." msgstr "Λανθασμένη επικεφαλίδα token. Δεν υπάρχουν διαπιστευτήρια." -#: authentication.py:179 +#: authentication.py:187 msgid "Invalid token header. Token string should not contain spaces." -msgstr "Λανθασμένη επικεφαλίδα token. Το token δε πρέπει να περιέχει κενά." +msgstr "Λανθασμένη επικεφαλίδα token. Το token δεν πρέπει να περιέχει κενά." -#: authentication.py:185 +#: authentication.py:193 msgid "" "Invalid token header. Token string should not contain invalid characters." msgstr "Λανθασμένη επικεφαλίδα token. Το token περιέχει μη επιτρεπτούς χαρακτήρες." -#: authentication.py:195 +#: authentication.py:203 msgid "Invalid token." msgstr "Λανθασμένο token" @@ -59,382 +61,515 @@ msgstr "Λανθασμένο token" msgid "Auth Token" msgstr "Token πιστοποίησης" -#: authtoken/models.py:15 +#: authtoken/models.py:13 msgid "Key" msgstr "Κλειδί" -#: authtoken/models.py:18 +#: authtoken/models.py:16 msgid "User" msgstr "Χρήστης" -#: authtoken/models.py:20 +#: authtoken/models.py:18 msgid "Created" msgstr "Δημιουργήθηκε" -#: authtoken/models.py:29 +#: authtoken/models.py:27 authtoken/serializers.py:19 msgid "Token" msgstr "Token" -#: authtoken/models.py:30 +#: authtoken/models.py:28 msgid "Tokens" msgstr "Tokens" -#: authtoken/serializers.py:8 +#: authtoken/serializers.py:9 msgid "Username" msgstr "Όνομα χρήστη" -#: authtoken/serializers.py:9 +#: authtoken/serializers.py:13 msgid "Password" msgstr "Κωδικός" -#: authtoken/serializers.py:20 -msgid "User account is disabled." -msgstr "Ο λογαριασμός χρήστη είναι απενεργοποιημένος." - -#: authtoken/serializers.py:23 +#: authtoken/serializers.py:35 msgid "Unable to log in with provided credentials." msgstr "Δεν είναι δυνατή η σύνδεση με τα διαπιστευτήρια." -#: authtoken/serializers.py:26 +#: authtoken/serializers.py:38 msgid "Must include \"username\" and \"password\"." msgstr "Πρέπει να περιέχει \"όνομα χρήστη\" και \"κωδικό\"." -#: exceptions.py:49 +#: exceptions.py:102 msgid "A server error occurred." msgstr "Σφάλμα διακομιστή." -#: exceptions.py:84 +#: exceptions.py:142 +msgid "Invalid input." +msgstr "" + +#: exceptions.py:161 msgid "Malformed request." msgstr "Λανθασμένο αίτημα." -#: exceptions.py:89 +#: exceptions.py:167 msgid "Incorrect authentication credentials." msgstr "Λάθος διαπιστευτήρια." -#: exceptions.py:94 +#: exceptions.py:173 msgid "Authentication credentials were not provided." msgstr "Δεν δόθηκαν διαπιστευτήρια." -#: exceptions.py:99 +#: exceptions.py:179 msgid "You do not have permission to perform this action." msgstr "Δεν έχετε δικαίωματα για αυτή την ενέργεια." -#: exceptions.py:104 views.py:81 +#: exceptions.py:185 msgid "Not found." msgstr "Δε βρέθηκε." -#: exceptions.py:109 +#: exceptions.py:191 +#, python-brace-format msgid "Method \"{method}\" not allowed." -msgstr "Η μέθοδος \"{method\"} δεν επιτρέπεται." +msgstr "Η μέθοδος \"{method}\" δεν επιτρέπεται." -#: exceptions.py:120 +#: exceptions.py:202 msgid "Could not satisfy the request Accept header." msgstr "Δεν ήταν δυνατή η ικανοποίηση της επικεφαλίδας Accept της αίτησης." -#: exceptions.py:132 +#: exceptions.py:212 +#, python-brace-format msgid "Unsupported media type \"{media_type}\" in request." msgstr "Δεν υποστηρίζεται το media type \"{media_type}\" της αίτησης." -#: exceptions.py:145 +#: exceptions.py:223 msgid "Request was throttled." msgstr "Το αίτημα έγινε throttle." -#: fields.py:269 relations.py:206 relations.py:239 validators.py:98 -#: validators.py:181 +#: exceptions.py:224 +#, python-brace-format +msgid "Expected available in {wait} second." +msgstr "" + +#: exceptions.py:225 +#, python-brace-format +msgid "Expected available in {wait} seconds." +msgstr "" + +#: fields.py:316 relations.py:245 relations.py:279 validators.py:90 +#: validators.py:183 msgid "This field is required." msgstr "Το πεδίο είναι απαραίτητο." -#: fields.py:270 +#: fields.py:317 msgid "This field may not be null." msgstr "Το πεδίο δε μπορεί να είναι null." -#: fields.py:608 fields.py:639 -msgid "\"{input}\" is not a valid boolean." -msgstr "Το \"{input}\" δεν είναι έγκυρο boolean." +#: fields.py:701 +msgid "Must be a valid boolean." +msgstr "" -#: fields.py:674 +#: fields.py:766 +msgid "Not a valid string." +msgstr "" + +#: fields.py:767 msgid "This field may not be blank." msgstr "Το πεδίο δε μπορεί να είναι κενό." -#: fields.py:675 fields.py:1675 +#: fields.py:768 fields.py:1881 +#, python-brace-format msgid "Ensure this field has no more than {max_length} characters." msgstr "Επιβεβαιώσατε ότι το πεδίο δεν έχει περισσότερους από {max_length} χαρακτήρες." -#: fields.py:676 +#: fields.py:769 +#, python-brace-format msgid "Ensure this field has at least {min_length} characters." msgstr "Επιβεβαιώσατε ότι το πεδίο έχει τουλάχιστον {min_length} χαρακτήρες." -#: fields.py:713 +#: fields.py:816 msgid "Enter a valid email address." msgstr "Συμπληρώσατε μια έγκυρη διεύθυνση e-mail." -#: fields.py:724 +#: fields.py:827 msgid "This value does not match the required pattern." msgstr "Η τιμή δε ταιριάζει με το pattern." -#: fields.py:735 +#: fields.py:838 msgid "" "Enter a valid \"slug\" consisting of letters, numbers, underscores or " "hyphens." msgstr "Εισάγετε ένα έγκυρο \"slug\" που αποτελείται από γράμματα, αριθμούς παύλες και κάτω παύλες." -#: fields.py:747 +#: fields.py:839 +msgid "" +"Enter a valid \"slug\" consisting of Unicode letters, numbers, underscores, " +"or hyphens." +msgstr "" + +#: fields.py:854 msgid "Enter a valid URL." msgstr "Εισάγετε έγκυρο URL." -#: fields.py:760 -msgid "\"{value}\" is not a valid UUID." -msgstr "Το \"{value}\" δεν είναι έγκυρο UUID." +#: fields.py:867 +msgid "Must be a valid UUID." +msgstr "" -#: fields.py:796 +#: fields.py:903 msgid "Enter a valid IPv4 or IPv6 address." msgstr "Εισάγετε μια έγκυρη διεύθυνση IPv4 ή IPv6." -#: fields.py:821 +#: fields.py:931 msgid "A valid integer is required." msgstr "Ένας έγκυρος ακέραιος είναι απαραίτητος." -#: fields.py:822 fields.py:857 fields.py:891 +#: fields.py:932 fields.py:969 fields.py:1005 fields.py:1366 +#, python-brace-format msgid "Ensure this value is less than or equal to {max_value}." msgstr "Επιβεβαιώσατε ότι η τιμή είναι μικρότερη ή ίση του {max_value}." -#: fields.py:823 fields.py:858 fields.py:892 +#: fields.py:933 fields.py:970 fields.py:1006 fields.py:1367 +#, python-brace-format msgid "Ensure this value is greater than or equal to {min_value}." msgstr "Επιβεβαιώσατε ότι η τιμή είναι μεγαλύτερη ή ίση του {min_value}." -#: fields.py:824 fields.py:859 fields.py:896 +#: fields.py:934 fields.py:971 fields.py:1010 msgid "String value too large." msgstr "Το κείμενο είναι πολύ μεγάλο." -#: fields.py:856 fields.py:890 +#: fields.py:968 fields.py:1004 msgid "A valid number is required." msgstr "Ένας έγκυρος αριθμός είναι απαραίτητος." -#: fields.py:893 +#: fields.py:1007 +#, python-brace-format msgid "Ensure that there are no more than {max_digits} digits in total." msgstr "Επιβεβαιώσατε ότι δεν υπάρχουν παραπάνω από {max_digits} ψηφία." -#: fields.py:894 +#: fields.py:1008 +#, python-brace-format msgid "" "Ensure that there are no more than {max_decimal_places} decimal places." msgstr "Επιβεβαιώσατε ότι δεν υπάρχουν παραπάνω από {max_decimal_places} δεκαδικά ψηφία." -#: fields.py:895 +#: fields.py:1009 +#, python-brace-format msgid "" "Ensure that there are no more than {max_whole_digits} digits before the " "decimal point." msgstr "Επιβεβαιώσατε ότι δεν υπάρχουν παραπάνω από {max_whole_digits} ακέραια ψηφία." -#: fields.py:1025 +#: fields.py:1148 +#, python-brace-format msgid "Datetime has wrong format. Use one of these formats instead: {format}." msgstr "Η ημερομηνία έχεi λάθος μορφή. Χρησιμοποιήστε μια από τις ακόλουθες μορφές: {format}" -#: fields.py:1026 +#: fields.py:1149 msgid "Expected a datetime but got a date." msgstr "Αναμένεται ημερομηνία και ώρα αλλά δόθηκε μόνο ημερομηνία." -#: fields.py:1103 +#: fields.py:1150 +#, python-brace-format +msgid "Invalid datetime for the timezone \"{timezone}\"." +msgstr "" + +#: fields.py:1151 +msgid "Datetime value out of range." +msgstr "" + +#: fields.py:1236 +#, python-brace-format msgid "Date has wrong format. Use one of these formats instead: {format}." msgstr "Η ημερομηνία έχεi λάθος μορφή. Χρησιμοποιήστε μια από τις ακόλουθες μορφές: {format}" -#: fields.py:1104 +#: fields.py:1237 msgid "Expected a date but got a datetime." msgstr "Αναμένεται ημερομηνία αλλά δόθηκε ημερομηνία και ώρα." -#: fields.py:1170 +#: fields.py:1303 +#, python-brace-format msgid "Time has wrong format. Use one of these formats instead: {format}." msgstr "Η ώρα έχει λάθος μορφή. Χρησιμοποιήστε μια από τις ακόλουθες μορφές: {format}" -#: fields.py:1232 +#: fields.py:1365 +#, python-brace-format msgid "Duration has wrong format. Use one of these formats instead: {format}." msgstr "Η διάρκεια έχει λάθος μορφή. Χρησιμοποιήστε μια από τις ακόλουθες μορφές: {format}" -#: fields.py:1251 fields.py:1300 +#: fields.py:1399 fields.py:1456 +#, python-brace-format msgid "\"{input}\" is not a valid choice." msgstr "Το \"{input}\" δεν είναι έγκυρη επιλογή." -#: fields.py:1254 relations.py:71 relations.py:441 +#: fields.py:1402 +#, python-brace-format msgid "More than {count} items..." msgstr "Περισσότερα από {count} αντικείμενα..." -#: fields.py:1301 fields.py:1448 relations.py:437 serializers.py:524 +#: fields.py:1457 fields.py:1603 relations.py:485 serializers.py:570 +#, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "Αναμένεται μια λίστα αντικειμένον αλλά δόθηκε ο τύπος \"{input_type}\"" -#: fields.py:1302 +#: fields.py:1458 msgid "This selection may not be empty." msgstr "Η επιλογή δε μπορεί να είναι κενή." -#: fields.py:1339 +#: fields.py:1495 +#, python-brace-format msgid "\"{input}\" is not a valid path choice." msgstr "Το \"{input}\" δεν είναι έγκυρη επιλογή διαδρομής." -#: fields.py:1358 +#: fields.py:1514 msgid "No file was submitted." msgstr "Δεν υποβλήθηκε αρχείο." -#: fields.py:1359 +#: fields.py:1515 msgid "" "The submitted data was not a file. Check the encoding type on the form." msgstr "Τα δεδομένα που υποβλήθηκαν δεν ήταν αρχείο. Ελέγξατε την κωδικοποίηση της φόρμας." -#: fields.py:1360 +#: fields.py:1516 msgid "No filename could be determined." msgstr "Δε βρέθηκε όνομα αρχείου." -#: fields.py:1361 +#: fields.py:1517 msgid "The submitted file is empty." msgstr "Το αρχείο που υποβλήθηκε είναι κενό." -#: fields.py:1362 +#: fields.py:1518 +#, python-brace-format msgid "" "Ensure this filename has at most {max_length} characters (it has {length})." msgstr "Επιβεβαιώσατε ότι το όνομα αρχείου έχει ως {max_length} χαρακτήρες (έχει {length})." -#: fields.py:1410 +#: fields.py:1566 msgid "" "Upload a valid image. The file you uploaded was either not an image or a " "corrupted image." msgstr "Ανεβάστε μια έγκυρη εικόνα. Το αρχείο που ανεβάσατε είτε δεν είναι εικόνα είτε έχει καταστραφεί." -#: fields.py:1449 relations.py:438 serializers.py:525 +#: fields.py:1604 relations.py:486 serializers.py:571 msgid "This list may not be empty." msgstr "Η λίστα δε μπορεί να είναι κενή." -#: fields.py:1502 +#: fields.py:1605 +#, python-brace-format +msgid "Ensure this field has at least {min_length} elements." +msgstr "" + +#: fields.py:1606 +#, python-brace-format +msgid "Ensure this field has no more than {max_length} elements." +msgstr "" + +#: fields.py:1682 +#, python-brace-format msgid "Expected a dictionary of items but got type \"{input_type}\"." msgstr "Αναμένεται ένα λεξικό αντικείμενων αλλά δόθηκε ο τύπος \"{input_type}\"." -#: fields.py:1549 +#: fields.py:1683 +msgid "This dictionary may not be empty." +msgstr "" + +#: fields.py:1755 msgid "Value must be valid JSON." msgstr "Η τιμή πρέπει να είναι μορφής JSON." -#: filters.py:36 templates/rest_framework/filters/django_filter.html:5 -msgid "Submit" -msgstr "Υποβολή" +#: filters.py:49 templates/rest_framework/filters/search.html:2 +msgid "Search" +msgstr "Αναζήτηση" -#: filters.py:336 +#: filters.py:50 +msgid "A search term." +msgstr "" + +#: filters.py:180 templates/rest_framework/filters/ordering.html:3 +msgid "Ordering" +msgstr "Ταξινόμηση" + +#: filters.py:181 +msgid "Which field to use when ordering the results." +msgstr "" + +#: filters.py:287 msgid "ascending" msgstr "" -#: filters.py:337 +#: filters.py:288 msgid "descending" msgstr "" -#: pagination.py:193 +#: pagination.py:174 +msgid "A page number within the paginated result set." +msgstr "" + +#: pagination.py:179 pagination.py:372 pagination.py:590 +msgid "Number of results to return per page." +msgstr "" + +#: pagination.py:189 msgid "Invalid page." msgstr "Λάθος σελίδα." -#: pagination.py:427 +#: pagination.py:374 +msgid "The initial index from which to return the results." +msgstr "" + +#: pagination.py:581 +msgid "The pagination cursor value." +msgstr "" + +#: pagination.py:583 msgid "Invalid cursor" msgstr "Λάθος cursor." -#: relations.py:207 +#: relations.py:246 +#, python-brace-format msgid "Invalid pk \"{pk_value}\" - object does not exist." msgstr "Λάθος κλειδί \"{pk_value}\" - το αντικείμενο δεν υπάρχει." -#: relations.py:208 +#: relations.py:247 +#, python-brace-format msgid "Incorrect type. Expected pk value, received {data_type}." msgstr "Λάθος τύπος. Αναμένεται τιμή κλειδιού, δόθηκε {data_type}." -#: relations.py:240 +#: relations.py:280 msgid "Invalid hyperlink - No URL match." msgstr "Λάθος σύνδεση - δε ταιριάζει κάποιο URL." -#: relations.py:241 +#: relations.py:281 msgid "Invalid hyperlink - Incorrect URL match." msgstr "Λάθος σύνδεση - δε ταιριάζει κάποιο URL." -#: relations.py:242 +#: relations.py:282 msgid "Invalid hyperlink - Object does not exist." msgstr "Λάθος σύνδεση - το αντικείμενο δεν υπάρχει." -#: relations.py:243 +#: relations.py:283 +#, python-brace-format msgid "Incorrect type. Expected URL string, received {data_type}." msgstr "Λάθος τύπος. Αναμένεται URL, δόθηκε {data_type}." -#: relations.py:401 +#: relations.py:448 +#, python-brace-format msgid "Object with {slug_name}={value} does not exist." msgstr "Το αντικείμενο {slug_name}={value} δεν υπάρχει." -#: relations.py:402 +#: relations.py:449 msgid "Invalid value." msgstr "Λάθος τιμή." -#: serializers.py:326 +#: schemas/utils.py:32 +msgid "unique integer value" +msgstr "" + +#: schemas/utils.py:34 +msgid "UUID string" +msgstr "" + +#: schemas/utils.py:36 +msgid "unique value" +msgstr "" + +#: schemas/utils.py:38 +#, python-brace-format +msgid "A {value_type} identifying this {name}." +msgstr "" + +#: serializers.py:337 +#, python-brace-format msgid "Invalid data. Expected a dictionary, but got {datatype}." msgstr "Λάθος δεδομένα. Αναμένεται λεξικό αλλά δόθηκε {datatype}." #: templates/rest_framework/admin.html:116 -#: templates/rest_framework/base.html:128 +#: templates/rest_framework/base.html:136 +msgid "Extra Actions" +msgstr "" + +#: templates/rest_framework/admin.html:130 +#: templates/rest_framework/base.html:150 msgid "Filters" msgstr "Φίλτρα" -#: templates/rest_framework/filters/django_filter.html:2 -#: templates/rest_framework/filters/django_filter_crispyforms.html:4 -msgid "Field filters" -msgstr "Φίλτρα πεδίων" +#: templates/rest_framework/base.html:37 +msgid "navbar" +msgstr "" -#: templates/rest_framework/filters/ordering.html:3 -msgid "Ordering" -msgstr "Ταξινόμηση" +#: templates/rest_framework/base.html:75 +msgid "content" +msgstr "" -#: templates/rest_framework/filters/search.html:2 -msgid "Search" -msgstr "Αναζήτηση" +#: templates/rest_framework/base.html:78 +msgid "request form" +msgstr "" -#: templates/rest_framework/horizontal/radio.html:2 -#: templates/rest_framework/inline/radio.html:2 -#: templates/rest_framework/vertical/radio.html:2 +#: templates/rest_framework/base.html:157 +msgid "main content" +msgstr "" + +#: templates/rest_framework/base.html:173 +msgid "request info" +msgstr "" + +#: templates/rest_framework/base.html:177 +msgid "response info" +msgstr "" + +#: templates/rest_framework/horizontal/radio.html:4 +#: templates/rest_framework/inline/radio.html:3 +#: templates/rest_framework/vertical/radio.html:3 msgid "None" msgstr "None" -#: templates/rest_framework/horizontal/select_multiple.html:2 -#: templates/rest_framework/inline/select_multiple.html:2 -#: templates/rest_framework/vertical/select_multiple.html:2 +#: templates/rest_framework/horizontal/select_multiple.html:4 +#: templates/rest_framework/inline/select_multiple.html:3 +#: templates/rest_framework/vertical/select_multiple.html:3 msgid "No items to select." msgstr "Δεν υπάρχουν αντικείμενα προς επιλογή." -#: validators.py:43 +#: validators.py:39 msgid "This field must be unique." msgstr "Το πεδίο πρέπει να είναι μοναδικό" -#: validators.py:97 +#: validators.py:89 +#, python-brace-format msgid "The fields {field_names} must make a unique set." msgstr "Τα πεδία {field_names} πρέπει να αποτελούν ένα μοναδικό σύνολο." -#: validators.py:245 +#: validators.py:171 +#, python-brace-format +msgid "Surrogate characters are not allowed: U+{code_point:X}." +msgstr "" + +#: validators.py:243 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" date." msgstr "Το πεδίο πρέπει να είναι μοναδικό για την ημερομηνία \"{date_field}\"." -#: validators.py:260 +#: validators.py:258 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" month." msgstr "Το πεδίο πρέπει να είναι μοναδικό για το μήνα \"{date_field}\"." -#: validators.py:273 +#: validators.py:271 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" year." msgstr "Το πεδίο πρέπει να είναι μοναδικό για το έτος \"{date_field}\"." -#: versioning.py:42 +#: versioning.py:40 msgid "Invalid version in \"Accept\" header." msgstr "Λάθος έκδοση στην επικεφαλίδα \"Accept\"." -#: versioning.py:73 +#: versioning.py:71 msgid "Invalid version in URL path." msgstr "Λάθος έκδοση στη διαδρομή URL." -#: versioning.py:115 +#: versioning.py:116 msgid "Invalid version in URL path. Does not match any version namespace." msgstr "" -#: versioning.py:147 +#: versioning.py:148 msgid "Invalid version in hostname." msgstr "Λάθος έκδοση στο hostname." -#: versioning.py:169 +#: versioning.py:170 msgid "Invalid version in query parameter." msgstr "Λάθος έκδοση στην παράμετρο" - -#: views.py:88 -msgid "Permission denied." -msgstr "Απόρριψη πρόσβασης" diff --git a/rest_framework/locale/en/LC_MESSAGES/django.mo b/rest_framework/locale/en/LC_MESSAGES/django.mo index 68e5600ae29759ff2dd8be760cfe9bbfbc6ffa2b..0770a9d5e7d6269e71717c100aa98d02275cfa7e 100644 GIT binary patch literal 12285 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 YP5-Y$2gv?EmaLz;`G42^|9|TCe^7Qb5&!@I delta 2718 zcmdVa>2Fk37{~E5T`07rKtU)iQ!Z=S3JgL^OE=oGN!i;Xh^5ocOu5?5n9e{*SSFZA zAgEDqcp*^{R7gyWN)bU5B9a&lkSJ&{(clu_U{nk*j1nY%fA?O(-{47~`#I;%-Of4B z(|@;qu_k?^Fzc|P#fWi4OQtagarYn&wATk4GXamGg%@!O{(_~LJH(hGoQ}G`5le6@ z=Hf0a$Ne}9Ph$@LgpJ0e%}qK>IWdc?WfGU+N7#TFdB(J36IS98T!dF~B^KlxQ;nNZ zzaPdHyn>Ukc&IUjScm$+b*S@k*R(M&(a{6X-~zmj{F!M5-j`OOW?YAQQ3My_QLM*r zu?dTY88aKVAg9bB)OAO28eT)K8&x%*BnU2OPi^_#xI}V1)O;dMswV z+8^7fne0T(>=k55%{hO3*Z+Mi)6e95EovnebI{hcVp)!II3!%OViOz zPoQRc5%r)SupEEISy;q0RW?gdGg^hJmKS`lqgJw%hcsXe+wmk;;yql16}(JU(~s4d zK2Jv%{DUf+P|!=Ny{NrBj{Iak@XufM{R{QLVy3eI+fh~XEb2p#pk{m=^`g&F)sQ*f ztC||5YSLym9cBF|sIs|*y6_&VY$`2pDLYYR^EB#3@1Tp{k~Yb+5%J>UnP< zi(^jt<147D`5wpdeq$zjOBzJYv=eo~9?ZmJsFipNnS?oudf;^|!`nz&m|||SFofi@ zS&z!47-~zOL?z`8R4$#6djGq0^n$af2VFvC>CZ?WnVbGNFxi{&VANh$p+0yY>blqb z@fl>h%{8pRTc|Cb%6@3vfttW!OzXn;=va6e^@YDWz&iJpctxb`cPH#GH$|4 zn1xeV4)WE^@NGuTw8J0wpsHpcs%lP`vHn_`^PC9aMxvU~^5qftn@UADs1nq4&;9nW z-%%2>6K<>Fs4Q3hs69$NLSz%9m77OefyLVYb#&B7XtTuad8N07ekZYv(5#hgYDy~p zkGM&=6j>~{HFInwx(RLPazbs5hr9Gz4YlbW=5g)+T7RG=ZSwmTYAYTiGKd(Vt!gKf zgld_D_Pw6aHmD6J_@`*XM1;s8)Fu!k+@5!cg0?KZl|w$UieMMaYGM)5Ma(DK2se3f zJ)zQ4t0OkMy$6Q|x=P?l{;3WeL`?R_$|)tRno67&a%)#fqgF+1AoPz&P4zs??Rkl# zuJcuHaZXnv(HjlNoiB4soQBfb!HK(egnPF~_e`|xq!mx3tgyuiJ7Tr9t!Q@ME^Tw( z&-;6z#!3a8rwZmfHwwNU*gI)qAb+VH?TuJ5yEhf>9~e62WWYH$GT-@g>JtNYS!0G1 z8ND+*me?MTI4{mYO!mYI7seWOp\n" +"POT-Creation-Date: 2020-10-13 21:45+0200\n" +"PO-Revision-Date: 2020-10-13 19:45+0000\n" +"Last-Translator: Xavier Ordoquy \n" "Language-Team: English (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/en/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,40 +17,40 @@ msgstr "" "Language: en\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: authentication.py:73 +#: authentication.py:70 msgid "Invalid basic header. No credentials provided." msgstr "Invalid basic header. No credentials provided." -#: authentication.py:76 +#: authentication.py:73 msgid "Invalid basic header. Credentials string should not contain spaces." msgstr "Invalid basic header. Credentials string should not contain spaces." -#: authentication.py:82 +#: authentication.py:83 msgid "Invalid basic header. Credentials not correctly base64 encoded." msgstr "Invalid basic header. Credentials not correctly base64 encoded." -#: authentication.py:99 +#: authentication.py:101 msgid "Invalid username/password." msgstr "Invalid username/password." -#: authentication.py:102 authentication.py:198 +#: authentication.py:104 authentication.py:206 msgid "User inactive or deleted." msgstr "User inactive or deleted." -#: authentication.py:176 +#: authentication.py:184 msgid "Invalid token header. No credentials provided." msgstr "Invalid token header. No credentials provided." -#: authentication.py:179 +#: authentication.py:187 msgid "Invalid token header. Token string should not contain spaces." msgstr "Invalid token header. Token string should not contain spaces." -#: authentication.py:185 +#: authentication.py:193 msgid "" "Invalid token header. Token string should not contain invalid characters." msgstr "Invalid token header. Token string should not contain invalid characters." -#: authentication.py:195 +#: authentication.py:203 msgid "Invalid token." msgstr "Invalid token." @@ -58,382 +58,515 @@ msgstr "Invalid token." msgid "Auth Token" msgstr "Auth Token" -#: authtoken/models.py:15 +#: authtoken/models.py:13 msgid "Key" msgstr "Key" -#: authtoken/models.py:18 +#: authtoken/models.py:16 msgid "User" msgstr "User" -#: authtoken/models.py:20 +#: authtoken/models.py:18 msgid "Created" msgstr "Created" -#: authtoken/models.py:29 +#: authtoken/models.py:27 authtoken/serializers.py:19 msgid "Token" msgstr "Token" -#: authtoken/models.py:30 +#: authtoken/models.py:28 msgid "Tokens" msgstr "Tokens" -#: authtoken/serializers.py:8 +#: authtoken/serializers.py:9 msgid "Username" msgstr "Username" -#: authtoken/serializers.py:9 +#: authtoken/serializers.py:13 msgid "Password" msgstr "Password" -#: authtoken/serializers.py:20 -msgid "User account is disabled." -msgstr "User account is disabled." - -#: authtoken/serializers.py:23 +#: authtoken/serializers.py:35 msgid "Unable to log in with provided credentials." msgstr "Unable to log in with provided credentials." -#: authtoken/serializers.py:26 +#: authtoken/serializers.py:38 msgid "Must include \"username\" and \"password\"." msgstr "Must include \"username\" and \"password\"." -#: exceptions.py:49 +#: exceptions.py:102 msgid "A server error occurred." msgstr "A server error occurred." -#: exceptions.py:84 +#: exceptions.py:142 +msgid "Invalid input." +msgstr "Invalid input." + +#: exceptions.py:161 msgid "Malformed request." msgstr "Malformed request." -#: exceptions.py:89 +#: exceptions.py:167 msgid "Incorrect authentication credentials." msgstr "Incorrect authentication credentials." -#: exceptions.py:94 +#: exceptions.py:173 msgid "Authentication credentials were not provided." msgstr "Authentication credentials were not provided." -#: exceptions.py:99 +#: exceptions.py:179 msgid "You do not have permission to perform this action." msgstr "You do not have permission to perform this action." -#: exceptions.py:104 views.py:81 +#: exceptions.py:185 msgid "Not found." msgstr "Not found." -#: exceptions.py:109 +#: exceptions.py:191 +#, python-brace-format msgid "Method \"{method}\" not allowed." msgstr "Method \"{method}\" not allowed." -#: exceptions.py:120 +#: exceptions.py:202 msgid "Could not satisfy the request Accept header." msgstr "Could not satisfy the request Accept header." -#: exceptions.py:132 +#: exceptions.py:212 +#, python-brace-format msgid "Unsupported media type \"{media_type}\" in request." msgstr "Unsupported media type \"{media_type}\" in request." -#: exceptions.py:145 +#: exceptions.py:223 msgid "Request was throttled." msgstr "Request was throttled." -#: fields.py:269 relations.py:206 relations.py:239 validators.py:98 -#: validators.py:181 +#: exceptions.py:224 +#, python-brace-format +msgid "Expected available in {wait} second." +msgstr "Expected available in {wait} second." + +#: exceptions.py:225 +#, python-brace-format +msgid "Expected available in {wait} seconds." +msgstr "Expected available in {wait} seconds." + +#: fields.py:316 relations.py:245 relations.py:279 validators.py:90 +#: validators.py:183 msgid "This field is required." msgstr "This field is required." -#: fields.py:270 +#: fields.py:317 msgid "This field may not be null." msgstr "This field may not be null." -#: fields.py:608 fields.py:639 -msgid "\"{input}\" is not a valid boolean." -msgstr "\"{input}\" is not a valid boolean." +#: fields.py:701 +msgid "Must be a valid boolean." +msgstr "Must be a valid boolean." -#: fields.py:674 +#: fields.py:766 +msgid "Not a valid string." +msgstr "Not a valid string." + +#: fields.py:767 msgid "This field may not be blank." msgstr "This field may not be blank." -#: fields.py:675 fields.py:1675 +#: fields.py:768 fields.py:1881 +#, python-brace-format msgid "Ensure this field has no more than {max_length} characters." msgstr "Ensure this field has no more than {max_length} characters." -#: fields.py:676 +#: fields.py:769 +#, python-brace-format msgid "Ensure this field has at least {min_length} characters." msgstr "Ensure this field has at least {min_length} characters." -#: fields.py:713 +#: fields.py:816 msgid "Enter a valid email address." msgstr "Enter a valid email address." -#: fields.py:724 +#: fields.py:827 msgid "This value does not match the required pattern." msgstr "This value does not match the required pattern." -#: fields.py:735 +#: fields.py:838 msgid "" "Enter a valid \"slug\" consisting of letters, numbers, underscores or " "hyphens." msgstr "Enter a valid \"slug\" consisting of letters, numbers, underscores or hyphens." -#: fields.py:747 +#: fields.py:839 +msgid "" +"Enter a valid \"slug\" consisting of Unicode letters, numbers, underscores, " +"or hyphens." +msgstr "Enter a valid \"slug\" consisting of Unicode letters, numbers, underscores, or hyphens." + +#: fields.py:854 msgid "Enter a valid URL." msgstr "Enter a valid URL." -#: fields.py:760 -msgid "\"{value}\" is not a valid UUID." -msgstr "\"{value}\" is not a valid UUID." +#: fields.py:867 +msgid "Must be a valid UUID." +msgstr "Must be a valid UUID." -#: fields.py:796 +#: fields.py:903 msgid "Enter a valid IPv4 or IPv6 address." msgstr "Enter a valid IPv4 or IPv6 address." -#: fields.py:821 +#: fields.py:931 msgid "A valid integer is required." msgstr "A valid integer is required." -#: fields.py:822 fields.py:857 fields.py:891 +#: fields.py:932 fields.py:969 fields.py:1005 fields.py:1366 +#, python-brace-format msgid "Ensure this value is less than or equal to {max_value}." msgstr "Ensure this value is less than or equal to {max_value}." -#: fields.py:823 fields.py:858 fields.py:892 +#: fields.py:933 fields.py:970 fields.py:1006 fields.py:1367 +#, python-brace-format msgid "Ensure this value is greater than or equal to {min_value}." msgstr "Ensure this value is greater than or equal to {min_value}." -#: fields.py:824 fields.py:859 fields.py:896 +#: fields.py:934 fields.py:971 fields.py:1010 msgid "String value too large." msgstr "String value too large." -#: fields.py:856 fields.py:890 +#: fields.py:968 fields.py:1004 msgid "A valid number is required." msgstr "A valid number is required." -#: fields.py:893 +#: fields.py:1007 +#, python-brace-format msgid "Ensure that there are no more than {max_digits} digits in total." msgstr "Ensure that there are no more than {max_digits} digits in total." -#: fields.py:894 +#: fields.py:1008 +#, python-brace-format msgid "" "Ensure that there are no more than {max_decimal_places} decimal places." msgstr "Ensure that there are no more than {max_decimal_places} decimal places." -#: fields.py:895 +#: fields.py:1009 +#, python-brace-format msgid "" "Ensure that there are no more than {max_whole_digits} digits before the " "decimal point." msgstr "Ensure that there are no more than {max_whole_digits} digits before the decimal point." -#: fields.py:1025 +#: fields.py:1148 +#, python-brace-format msgid "Datetime has wrong format. Use one of these formats instead: {format}." msgstr "Datetime has wrong format. Use one of these formats instead: {format}." -#: fields.py:1026 +#: fields.py:1149 msgid "Expected a datetime but got a date." msgstr "Expected a datetime but got a date." -#: fields.py:1103 +#: fields.py:1150 +#, python-brace-format +msgid "Invalid datetime for the timezone \"{timezone}\"." +msgstr "Invalid datetime for the timezone \"{timezone}\"." + +#: fields.py:1151 +msgid "Datetime value out of range." +msgstr "Datetime value out of range." + +#: fields.py:1236 +#, python-brace-format msgid "Date has wrong format. Use one of these formats instead: {format}." msgstr "Date has wrong format. Use one of these formats instead: {format}." -#: fields.py:1104 +#: fields.py:1237 msgid "Expected a date but got a datetime." msgstr "Expected a date but got a datetime." -#: fields.py:1170 +#: fields.py:1303 +#, python-brace-format msgid "Time has wrong format. Use one of these formats instead: {format}." msgstr "Time has wrong format. Use one of these formats instead: {format}." -#: fields.py:1232 +#: fields.py:1365 +#, python-brace-format msgid "Duration has wrong format. Use one of these formats instead: {format}." msgstr "Duration has wrong format. Use one of these formats instead: {format}." -#: fields.py:1251 fields.py:1300 +#: fields.py:1399 fields.py:1456 +#, python-brace-format msgid "\"{input}\" is not a valid choice." msgstr "\"{input}\" is not a valid choice." -#: fields.py:1254 relations.py:71 relations.py:441 +#: fields.py:1402 +#, python-brace-format msgid "More than {count} items..." msgstr "More than {count} items..." -#: fields.py:1301 fields.py:1448 relations.py:437 serializers.py:524 +#: fields.py:1457 fields.py:1603 relations.py:485 serializers.py:570 +#, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "Expected a list of items but got type \"{input_type}\"." -#: fields.py:1302 +#: fields.py:1458 msgid "This selection may not be empty." msgstr "This selection may not be empty." -#: fields.py:1339 +#: fields.py:1495 +#, python-brace-format msgid "\"{input}\" is not a valid path choice." msgstr "\"{input}\" is not a valid path choice." -#: fields.py:1358 +#: fields.py:1514 msgid "No file was submitted." msgstr "No file was submitted." -#: fields.py:1359 +#: fields.py:1515 msgid "" "The submitted data was not a file. Check the encoding type on the form." msgstr "The submitted data was not a file. Check the encoding type on the form." -#: fields.py:1360 +#: fields.py:1516 msgid "No filename could be determined." msgstr "No filename could be determined." -#: fields.py:1361 +#: fields.py:1517 msgid "The submitted file is empty." msgstr "The submitted file is empty." -#: fields.py:1362 +#: fields.py:1518 +#, python-brace-format msgid "" "Ensure this filename has at most {max_length} characters (it has {length})." msgstr "Ensure this filename has at most {max_length} characters (it has {length})." -#: fields.py:1410 +#: fields.py:1566 msgid "" "Upload a valid image. The file you uploaded was either not an image or a " "corrupted image." msgstr "Upload a valid image. The file you uploaded was either not an image or a corrupted image." -#: fields.py:1449 relations.py:438 serializers.py:525 +#: fields.py:1604 relations.py:486 serializers.py:571 msgid "This list may not be empty." msgstr "This list may not be empty." -#: fields.py:1502 +#: fields.py:1605 +#, python-brace-format +msgid "Ensure this field has at least {min_length} elements." +msgstr "Ensure this field has at least {min_length} elements." + +#: fields.py:1606 +#, python-brace-format +msgid "Ensure this field has no more than {max_length} elements." +msgstr "Ensure this field has no more than {max_length} elements." + +#: fields.py:1682 +#, python-brace-format msgid "Expected a dictionary of items but got type \"{input_type}\"." msgstr "Expected a dictionary of items but got type \"{input_type}\"." -#: fields.py:1549 +#: fields.py:1683 +msgid "This dictionary may not be empty." +msgstr "This dictionary may not be empty." + +#: fields.py:1755 msgid "Value must be valid JSON." msgstr "Value must be valid JSON." -#: filters.py:36 templates/rest_framework/filters/django_filter.html:5 -msgid "Submit" -msgstr "Submit" +#: filters.py:49 templates/rest_framework/filters/search.html:2 +msgid "Search" +msgstr "Search" -#: filters.py:336 +#: filters.py:50 +msgid "A search term." +msgstr "A search term." + +#: filters.py:180 templates/rest_framework/filters/ordering.html:3 +msgid "Ordering" +msgstr "Ordering" + +#: filters.py:181 +msgid "Which field to use when ordering the results." +msgstr "Which field to use when ordering the results." + +#: filters.py:287 msgid "ascending" msgstr "ascending" -#: filters.py:337 +#: filters.py:288 msgid "descending" msgstr "descending" -#: pagination.py:193 +#: pagination.py:174 +msgid "A page number within the paginated result set." +msgstr "A page number within the paginated result set." + +#: pagination.py:179 pagination.py:372 pagination.py:590 +msgid "Number of results to return per page." +msgstr "Number of results to return per page." + +#: pagination.py:189 msgid "Invalid page." msgstr "Invalid page." -#: pagination.py:427 +#: pagination.py:374 +msgid "The initial index from which to return the results." +msgstr "The initial index from which to return the results." + +#: pagination.py:581 +msgid "The pagination cursor value." +msgstr "The pagination cursor value." + +#: pagination.py:583 msgid "Invalid cursor" msgstr "Invalid cursor" -#: relations.py:207 +#: relations.py:246 +#, python-brace-format msgid "Invalid pk \"{pk_value}\" - object does not exist." msgstr "Invalid pk \"{pk_value}\" - object does not exist." -#: relations.py:208 +#: relations.py:247 +#, python-brace-format msgid "Incorrect type. Expected pk value, received {data_type}." msgstr "Incorrect type. Expected pk value, received {data_type}." -#: relations.py:240 +#: relations.py:280 msgid "Invalid hyperlink - No URL match." msgstr "Invalid hyperlink - No URL match." -#: relations.py:241 +#: relations.py:281 msgid "Invalid hyperlink - Incorrect URL match." msgstr "Invalid hyperlink - Incorrect URL match." -#: relations.py:242 +#: relations.py:282 msgid "Invalid hyperlink - Object does not exist." msgstr "Invalid hyperlink - Object does not exist." -#: relations.py:243 +#: relations.py:283 +#, python-brace-format msgid "Incorrect type. Expected URL string, received {data_type}." msgstr "Incorrect type. Expected URL string, received {data_type}." -#: relations.py:401 +#: relations.py:448 +#, python-brace-format msgid "Object with {slug_name}={value} does not exist." msgstr "Object with {slug_name}={value} does not exist." -#: relations.py:402 +#: relations.py:449 msgid "Invalid value." msgstr "Invalid value." -#: serializers.py:326 +#: schemas/utils.py:32 +msgid "unique integer value" +msgstr "unique integer value" + +#: schemas/utils.py:34 +msgid "UUID string" +msgstr "UUID string" + +#: schemas/utils.py:36 +msgid "unique value" +msgstr "unique value" + +#: schemas/utils.py:38 +#, python-brace-format +msgid "A {value_type} identifying this {name}." +msgstr "A {value_type} identifying this {name}." + +#: serializers.py:337 +#, python-brace-format msgid "Invalid data. Expected a dictionary, but got {datatype}." msgstr "Invalid data. Expected a dictionary, but got {datatype}." #: templates/rest_framework/admin.html:116 -#: templates/rest_framework/base.html:128 +#: templates/rest_framework/base.html:136 +msgid "Extra Actions" +msgstr "Extra Actions" + +#: templates/rest_framework/admin.html:130 +#: templates/rest_framework/base.html:150 msgid "Filters" msgstr "Filters" -#: templates/rest_framework/filters/django_filter.html:2 -#: templates/rest_framework/filters/django_filter_crispyforms.html:4 -msgid "Field filters" -msgstr "Field filters" +#: templates/rest_framework/base.html:37 +msgid "navbar" +msgstr "navbar" -#: templates/rest_framework/filters/ordering.html:3 -msgid "Ordering" -msgstr "Ordering" +#: templates/rest_framework/base.html:75 +msgid "content" +msgstr "content" -#: templates/rest_framework/filters/search.html:2 -msgid "Search" -msgstr "Search" +#: templates/rest_framework/base.html:78 +msgid "request form" +msgstr "request form" -#: templates/rest_framework/horizontal/radio.html:2 -#: templates/rest_framework/inline/radio.html:2 -#: templates/rest_framework/vertical/radio.html:2 +#: templates/rest_framework/base.html:157 +msgid "main content" +msgstr "main content" + +#: templates/rest_framework/base.html:173 +msgid "request info" +msgstr "request info" + +#: templates/rest_framework/base.html:177 +msgid "response info" +msgstr "response info" + +#: templates/rest_framework/horizontal/radio.html:4 +#: templates/rest_framework/inline/radio.html:3 +#: templates/rest_framework/vertical/radio.html:3 msgid "None" msgstr "None" -#: templates/rest_framework/horizontal/select_multiple.html:2 -#: templates/rest_framework/inline/select_multiple.html:2 -#: templates/rest_framework/vertical/select_multiple.html:2 +#: templates/rest_framework/horizontal/select_multiple.html:4 +#: templates/rest_framework/inline/select_multiple.html:3 +#: templates/rest_framework/vertical/select_multiple.html:3 msgid "No items to select." msgstr "No items to select." -#: validators.py:43 +#: validators.py:39 msgid "This field must be unique." msgstr "This field must be unique." -#: validators.py:97 +#: validators.py:89 +#, python-brace-format msgid "The fields {field_names} must make a unique set." msgstr "The fields {field_names} must make a unique set." -#: validators.py:245 +#: validators.py:171 +#, python-brace-format +msgid "Surrogate characters are not allowed: U+{code_point:X}." +msgstr "Surrogate characters are not allowed: U+{code_point:X}." + +#: validators.py:243 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" date." msgstr "This field must be unique for the \"{date_field}\" date." -#: validators.py:260 +#: validators.py:258 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" month." msgstr "This field must be unique for the \"{date_field}\" month." -#: validators.py:273 +#: validators.py:271 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" year." msgstr "This field must be unique for the \"{date_field}\" year." -#: versioning.py:42 +#: versioning.py:40 msgid "Invalid version in \"Accept\" header." msgstr "Invalid version in \"Accept\" header." -#: versioning.py:73 +#: versioning.py:71 msgid "Invalid version in URL path." msgstr "Invalid version in URL path." -#: versioning.py:115 +#: versioning.py:116 msgid "Invalid version in URL path. Does not match any version namespace." msgstr "Invalid version in URL path. Does not match any version namespace." -#: versioning.py:147 +#: versioning.py:148 msgid "Invalid version in hostname." msgstr "Invalid version in hostname." -#: versioning.py:169 +#: versioning.py:170 msgid "Invalid version in query parameter." msgstr "Invalid version in query parameter." - -#: views.py:88 -msgid "Permission denied." -msgstr "Permission denied." diff --git a/rest_framework/locale/en_US/LC_MESSAGES/django.po b/rest_framework/locale/en_US/LC_MESSAGES/django.po index 3733a1e33..c9dd2d633 100644 --- a/rest_framework/locale/en_US/LC_MESSAGES/django.po +++ b/rest_framework/locale/en_US/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-07-12 16:13+0100\n" +"POT-Creation-Date: 2020-10-13 21:45+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,40 +17,40 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: authentication.py:73 +#: authentication.py:70 msgid "Invalid basic header. No credentials provided." msgstr "" -#: authentication.py:76 +#: authentication.py:73 msgid "Invalid basic header. Credentials string should not contain spaces." msgstr "" -#: authentication.py:82 +#: authentication.py:83 msgid "Invalid basic header. Credentials not correctly base64 encoded." msgstr "" -#: authentication.py:99 +#: authentication.py:101 msgid "Invalid username/password." msgstr "" -#: authentication.py:102 authentication.py:198 +#: authentication.py:104 authentication.py:206 msgid "User inactive or deleted." msgstr "" -#: authentication.py:176 +#: authentication.py:184 msgid "Invalid token header. No credentials provided." msgstr "" -#: authentication.py:179 +#: authentication.py:187 msgid "Invalid token header. Token string should not contain spaces." msgstr "" -#: authentication.py:185 +#: authentication.py:193 msgid "" "Invalid token header. Token string should not contain invalid characters." msgstr "" -#: authentication.py:195 +#: authentication.py:203 msgid "Invalid token." msgstr "" @@ -58,380 +58,513 @@ msgstr "" msgid "Auth Token" msgstr "" -#: authtoken/models.py:15 +#: authtoken/models.py:13 msgid "Key" msgstr "" -#: authtoken/models.py:18 +#: authtoken/models.py:16 msgid "User" msgstr "" -#: authtoken/models.py:20 +#: authtoken/models.py:18 msgid "Created" msgstr "" -#: authtoken/models.py:29 +#: authtoken/models.py:27 authtoken/serializers.py:19 msgid "Token" msgstr "" -#: authtoken/models.py:30 +#: authtoken/models.py:28 msgid "Tokens" msgstr "" -#: authtoken/serializers.py:8 +#: authtoken/serializers.py:9 msgid "Username" msgstr "" -#: authtoken/serializers.py:9 +#: authtoken/serializers.py:13 msgid "Password" msgstr "" -#: authtoken/serializers.py:20 -msgid "User account is disabled." -msgstr "" - -#: authtoken/serializers.py:23 +#: authtoken/serializers.py:35 msgid "Unable to log in with provided credentials." msgstr "" -#: authtoken/serializers.py:26 +#: authtoken/serializers.py:38 msgid "Must include \"username\" and \"password\"." msgstr "" -#: exceptions.py:49 +#: exceptions.py:102 msgid "A server error occurred." msgstr "" -#: exceptions.py:84 +#: exceptions.py:142 +msgid "Invalid input." +msgstr "" + +#: exceptions.py:161 msgid "Malformed request." msgstr "" -#: exceptions.py:89 +#: exceptions.py:167 msgid "Incorrect authentication credentials." msgstr "" -#: exceptions.py:94 +#: exceptions.py:173 msgid "Authentication credentials were not provided." msgstr "" -#: exceptions.py:99 +#: exceptions.py:179 msgid "You do not have permission to perform this action." msgstr "" -#: exceptions.py:104 views.py:81 +#: exceptions.py:185 msgid "Not found." msgstr "" -#: exceptions.py:109 +#: exceptions.py:191 +#, python-brace-format msgid "Method \"{method}\" not allowed." msgstr "" -#: exceptions.py:120 +#: exceptions.py:202 msgid "Could not satisfy the request Accept header." msgstr "" -#: exceptions.py:132 +#: exceptions.py:212 +#, python-brace-format msgid "Unsupported media type \"{media_type}\" in request." msgstr "" -#: exceptions.py:145 +#: exceptions.py:223 msgid "Request was throttled." msgstr "" -#: fields.py:269 relations.py:206 relations.py:239 validators.py:98 -#: validators.py:181 +#: exceptions.py:224 +#, python-brace-format +msgid "Expected available in {wait} second." +msgstr "" + +#: exceptions.py:225 +#, python-brace-format +msgid "Expected available in {wait} seconds." +msgstr "" + +#: fields.py:316 relations.py:245 relations.py:279 validators.py:90 +#: validators.py:183 msgid "This field is required." msgstr "" -#: fields.py:270 +#: fields.py:317 msgid "This field may not be null." msgstr "" -#: fields.py:608 fields.py:639 -msgid "\"{input}\" is not a valid boolean." +#: fields.py:701 +msgid "Must be a valid boolean." msgstr "" -#: fields.py:674 +#: fields.py:766 +msgid "Not a valid string." +msgstr "" + +#: fields.py:767 msgid "This field may not be blank." msgstr "" -#: fields.py:675 fields.py:1675 +#: fields.py:768 fields.py:1881 +#, python-brace-format msgid "Ensure this field has no more than {max_length} characters." msgstr "" -#: fields.py:676 +#: fields.py:769 +#, python-brace-format msgid "Ensure this field has at least {min_length} characters." msgstr "" -#: fields.py:713 +#: fields.py:816 msgid "Enter a valid email address." msgstr "" -#: fields.py:724 +#: fields.py:827 msgid "This value does not match the required pattern." msgstr "" -#: fields.py:735 +#: fields.py:838 msgid "" "Enter a valid \"slug\" consisting of letters, numbers, underscores or " "hyphens." msgstr "" -#: fields.py:747 +#: fields.py:839 +msgid "" +"Enter a valid \"slug\" consisting of Unicode letters, numbers, underscores, " +"or hyphens." +msgstr "" + +#: fields.py:854 msgid "Enter a valid URL." msgstr "" -#: fields.py:760 -msgid "\"{value}\" is not a valid UUID." +#: fields.py:867 +msgid "Must be a valid UUID." msgstr "" -#: fields.py:796 +#: fields.py:903 msgid "Enter a valid IPv4 or IPv6 address." msgstr "" -#: fields.py:821 +#: fields.py:931 msgid "A valid integer is required." msgstr "" -#: fields.py:822 fields.py:857 fields.py:891 +#: fields.py:932 fields.py:969 fields.py:1005 fields.py:1366 +#, python-brace-format msgid "Ensure this value is less than or equal to {max_value}." msgstr "" -#: fields.py:823 fields.py:858 fields.py:892 +#: fields.py:933 fields.py:970 fields.py:1006 fields.py:1367 +#, python-brace-format msgid "Ensure this value is greater than or equal to {min_value}." msgstr "" -#: fields.py:824 fields.py:859 fields.py:896 +#: fields.py:934 fields.py:971 fields.py:1010 msgid "String value too large." msgstr "" -#: fields.py:856 fields.py:890 +#: fields.py:968 fields.py:1004 msgid "A valid number is required." msgstr "" -#: fields.py:893 +#: fields.py:1007 +#, python-brace-format msgid "Ensure that there are no more than {max_digits} digits in total." msgstr "" -#: fields.py:894 +#: fields.py:1008 +#, python-brace-format msgid "Ensure that there are no more than {max_decimal_places} decimal places." msgstr "" -#: fields.py:895 +#: fields.py:1009 +#, python-brace-format msgid "" "Ensure that there are no more than {max_whole_digits} digits before the " "decimal point." msgstr "" -#: fields.py:1025 +#: fields.py:1148 +#, python-brace-format msgid "Datetime has wrong format. Use one of these formats instead: {format}." msgstr "" -#: fields.py:1026 +#: fields.py:1149 msgid "Expected a datetime but got a date." msgstr "" -#: fields.py:1103 +#: fields.py:1150 +#, python-brace-format +msgid "Invalid datetime for the timezone \"{timezone}\"." +msgstr "" + +#: fields.py:1151 +msgid "Datetime value out of range." +msgstr "" + +#: fields.py:1236 +#, python-brace-format msgid "Date has wrong format. Use one of these formats instead: {format}." msgstr "" -#: fields.py:1104 +#: fields.py:1237 msgid "Expected a date but got a datetime." msgstr "" -#: fields.py:1170 +#: fields.py:1303 +#, python-brace-format msgid "Time has wrong format. Use one of these formats instead: {format}." msgstr "" -#: fields.py:1232 +#: fields.py:1365 +#, python-brace-format msgid "Duration has wrong format. Use one of these formats instead: {format}." msgstr "" -#: fields.py:1251 fields.py:1300 +#: fields.py:1399 fields.py:1456 +#, python-brace-format msgid "\"{input}\" is not a valid choice." msgstr "" -#: fields.py:1254 relations.py:71 relations.py:441 +#: fields.py:1402 +#, python-brace-format msgid "More than {count} items..." msgstr "" -#: fields.py:1301 fields.py:1448 relations.py:437 serializers.py:524 +#: fields.py:1457 fields.py:1603 relations.py:485 serializers.py:570 +#, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "" -#: fields.py:1302 +#: fields.py:1458 msgid "This selection may not be empty." msgstr "" -#: fields.py:1339 +#: fields.py:1495 +#, python-brace-format msgid "\"{input}\" is not a valid path choice." msgstr "" -#: fields.py:1358 +#: fields.py:1514 msgid "No file was submitted." msgstr "" -#: fields.py:1359 +#: fields.py:1515 msgid "The submitted data was not a file. Check the encoding type on the form." msgstr "" -#: fields.py:1360 +#: fields.py:1516 msgid "No filename could be determined." msgstr "" -#: fields.py:1361 +#: fields.py:1517 msgid "The submitted file is empty." msgstr "" -#: fields.py:1362 +#: fields.py:1518 +#, python-brace-format msgid "" "Ensure this filename has at most {max_length} characters (it has {length})." msgstr "" -#: fields.py:1410 +#: fields.py:1566 msgid "" "Upload a valid image. The file you uploaded was either not an image or a " "corrupted image." msgstr "" -#: fields.py:1449 relations.py:438 serializers.py:525 +#: fields.py:1604 relations.py:486 serializers.py:571 msgid "This list may not be empty." msgstr "" -#: fields.py:1502 +#: fields.py:1605 +#, python-brace-format +msgid "Ensure this field has at least {min_length} elements." +msgstr "" + +#: fields.py:1606 +#, python-brace-format +msgid "Ensure this field has no more than {max_length} elements." +msgstr "" + +#: fields.py:1682 +#, python-brace-format msgid "Expected a dictionary of items but got type \"{input_type}\"." msgstr "" -#: fields.py:1549 +#: fields.py:1683 +msgid "This dictionary may not be empty." +msgstr "" + +#: fields.py:1755 msgid "Value must be valid JSON." msgstr "" -#: filters.py:36 templates/rest_framework/filters/django_filter.html:5 -msgid "Submit" +#: filters.py:49 templates/rest_framework/filters/search.html:2 +msgid "Search" msgstr "" -#: filters.py:336 +#: filters.py:50 +msgid "A search term." +msgstr "" + +#: filters.py:180 templates/rest_framework/filters/ordering.html:3 +msgid "Ordering" +msgstr "" + +#: filters.py:181 +msgid "Which field to use when ordering the results." +msgstr "" + +#: filters.py:287 msgid "ascending" msgstr "" -#: filters.py:337 +#: filters.py:288 msgid "descending" msgstr "" -#: pagination.py:193 +#: pagination.py:174 +msgid "A page number within the paginated result set." +msgstr "" + +#: pagination.py:179 pagination.py:372 pagination.py:590 +msgid "Number of results to return per page." +msgstr "" + +#: pagination.py:189 msgid "Invalid page." msgstr "" -#: pagination.py:427 +#: pagination.py:374 +msgid "The initial index from which to return the results." +msgstr "" + +#: pagination.py:581 +msgid "The pagination cursor value." +msgstr "" + +#: pagination.py:583 msgid "Invalid cursor" msgstr "" -#: relations.py:207 +#: relations.py:246 +#, python-brace-format msgid "Invalid pk \"{pk_value}\" - object does not exist." msgstr "" -#: relations.py:208 +#: relations.py:247 +#, python-brace-format msgid "Incorrect type. Expected pk value, received {data_type}." msgstr "" -#: relations.py:240 +#: relations.py:280 msgid "Invalid hyperlink - No URL match." msgstr "" -#: relations.py:241 +#: relations.py:281 msgid "Invalid hyperlink - Incorrect URL match." msgstr "" -#: relations.py:242 +#: relations.py:282 msgid "Invalid hyperlink - Object does not exist." msgstr "" -#: relations.py:243 +#: relations.py:283 +#, python-brace-format msgid "Incorrect type. Expected URL string, received {data_type}." msgstr "" -#: relations.py:401 +#: relations.py:448 +#, python-brace-format msgid "Object with {slug_name}={value} does not exist." msgstr "" -#: relations.py:402 +#: relations.py:449 msgid "Invalid value." msgstr "" -#: serializers.py:326 +#: schemas/utils.py:32 +msgid "unique integer value" +msgstr "" + +#: schemas/utils.py:34 +msgid "UUID string" +msgstr "" + +#: schemas/utils.py:36 +msgid "unique value" +msgstr "" + +#: schemas/utils.py:38 +#, python-brace-format +msgid "A {value_type} identifying this {name}." +msgstr "" + +#: serializers.py:337 +#, python-brace-format msgid "Invalid data. Expected a dictionary, but got {datatype}." msgstr "" #: templates/rest_framework/admin.html:116 -#: templates/rest_framework/base.html:128 +#: templates/rest_framework/base.html:136 +msgid "Extra Actions" +msgstr "" + +#: templates/rest_framework/admin.html:130 +#: templates/rest_framework/base.html:150 msgid "Filters" msgstr "" -#: templates/rest_framework/filters/django_filter.html:2 -#: templates/rest_framework/filters/django_filter_crispyforms.html:4 -msgid "Field filters" +#: templates/rest_framework/base.html:37 +msgid "navbar" msgstr "" -#: templates/rest_framework/filters/ordering.html:3 -msgid "Ordering" +#: templates/rest_framework/base.html:75 +msgid "content" msgstr "" -#: templates/rest_framework/filters/search.html:2 -msgid "Search" +#: templates/rest_framework/base.html:78 +msgid "request form" msgstr "" -#: templates/rest_framework/horizontal/radio.html:2 -#: templates/rest_framework/inline/radio.html:2 -#: templates/rest_framework/vertical/radio.html:2 +#: templates/rest_framework/base.html:157 +msgid "main content" +msgstr "" + +#: templates/rest_framework/base.html:173 +msgid "request info" +msgstr "" + +#: templates/rest_framework/base.html:177 +msgid "response info" +msgstr "" + +#: templates/rest_framework/horizontal/radio.html:4 +#: templates/rest_framework/inline/radio.html:3 +#: templates/rest_framework/vertical/radio.html:3 msgid "None" msgstr "" -#: templates/rest_framework/horizontal/select_multiple.html:2 -#: templates/rest_framework/inline/select_multiple.html:2 -#: templates/rest_framework/vertical/select_multiple.html:2 +#: templates/rest_framework/horizontal/select_multiple.html:4 +#: templates/rest_framework/inline/select_multiple.html:3 +#: templates/rest_framework/vertical/select_multiple.html:3 msgid "No items to select." msgstr "" -#: validators.py:43 +#: validators.py:39 msgid "This field must be unique." msgstr "" -#: validators.py:97 +#: validators.py:89 +#, python-brace-format msgid "The fields {field_names} must make a unique set." msgstr "" -#: validators.py:245 +#: validators.py:171 +#, python-brace-format +msgid "Surrogate characters are not allowed: U+{code_point:X}." +msgstr "" + +#: validators.py:243 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" date." msgstr "" -#: validators.py:260 +#: validators.py:258 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" month." msgstr "" -#: validators.py:273 +#: validators.py:271 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" year." msgstr "" -#: versioning.py:42 +#: versioning.py:40 msgid "Invalid version in \"Accept\" header." msgstr "" -#: versioning.py:73 +#: versioning.py:71 msgid "Invalid version in URL path." msgstr "" -#: versioning.py:115 +#: versioning.py:116 msgid "Invalid version in URL path. Does not match any version namespace." msgstr "" -#: versioning.py:147 +#: versioning.py:148 msgid "Invalid version in hostname." msgstr "" -#: versioning.py:169 +#: versioning.py:170 msgid "Invalid version in query parameter." msgstr "" - -#: views.py:88 -msgid "Permission denied." -msgstr "" diff --git a/rest_framework/locale/es/LC_MESSAGES/django.mo b/rest_framework/locale/es/LC_MESSAGES/django.mo index 6efb9bdd15c6d6714283b652ecec46e2b8d56669..16df627fcc901ed5fb7307de1b195c5672dad071 100644 GIT binary patch delta 2273 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, 2015 +# Ernesto Rico Schmidt , 2015 # José Padilla , 2015 +# Leo Prada , 2019 # Miguel Gonzalez , 2015 # Miguel Gonzalez , 2016 # Miguel Gonzalez , 2015-2016 @@ -13,9 +14,9 @@ msgid "" msgstr "" "Project-Id-Version: Django REST framework\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-07-12 16:13+0100\n" -"PO-Revision-Date: 2017-08-03 14:58+0000\n" -"Last-Translator: Miguel Gonzalez \n" +"POT-Creation-Date: 2020-10-13 21:45+0200\n" +"PO-Revision-Date: 2020-10-13 19:45+0000\n" +"Last-Translator: Xavier Ordoquy \n" "Language-Team: Spanish (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -23,40 +24,40 @@ msgstr "" "Language: es\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: authentication.py:73 +#: authentication.py:70 msgid "Invalid basic header. No credentials provided." msgstr "Cabecera básica inválida. Las credenciales no fueron suministradas." -#: authentication.py:76 +#: authentication.py:73 msgid "Invalid basic header. Credentials string should not contain spaces." msgstr "Cabecera básica inválida. La cadena con las credenciales no debe contener espacios." -#: authentication.py:82 +#: authentication.py:83 msgid "Invalid basic header. Credentials not correctly base64 encoded." -msgstr "Cabecera básica inválida. Las credenciales incorrectamente codificadas en base64." +msgstr "Cabecera básica inválida. Las credenciales no fueron codificadas correctamente en base64." -#: authentication.py:99 +#: authentication.py:101 msgid "Invalid username/password." msgstr "Nombre de usuario/contraseña inválidos." -#: authentication.py:102 authentication.py:198 +#: authentication.py:104 authentication.py:206 msgid "User inactive or deleted." msgstr "Usuario inactivo o borrado." -#: authentication.py:176 +#: authentication.py:184 msgid "Invalid token header. No credentials provided." msgstr "Cabecera token inválida. Las credenciales no fueron suministradas." -#: authentication.py:179 +#: authentication.py:187 msgid "Invalid token header. Token string should not contain spaces." msgstr "Cabecera token inválida. La cadena token no debe contener espacios." -#: authentication.py:185 +#: authentication.py:193 msgid "" "Invalid token header. Token string should not contain invalid characters." msgstr "Cabecera token inválida. La cadena token no debe contener caracteres inválidos." -#: authentication.py:195 +#: authentication.py:203 msgid "Invalid token." msgstr "Token inválido." @@ -64,382 +65,515 @@ msgstr "Token inválido." msgid "Auth Token" msgstr "Token de autenticación" -#: authtoken/models.py:15 +#: authtoken/models.py:13 msgid "Key" msgstr "Clave" -#: authtoken/models.py:18 +#: authtoken/models.py:16 msgid "User" msgstr "Usuario" -#: authtoken/models.py:20 +#: authtoken/models.py:18 msgid "Created" msgstr "Fecha de creación" -#: authtoken/models.py:29 +#: authtoken/models.py:27 authtoken/serializers.py:19 msgid "Token" msgstr "Token" -#: authtoken/models.py:30 +#: authtoken/models.py:28 msgid "Tokens" msgstr "Tokens" -#: authtoken/serializers.py:8 +#: authtoken/serializers.py:9 msgid "Username" msgstr "Nombre de usuario" -#: authtoken/serializers.py:9 +#: authtoken/serializers.py:13 msgid "Password" msgstr "Contraseña" -#: authtoken/serializers.py:20 -msgid "User account is disabled." -msgstr "Cuenta de usuario está deshabilitada." - -#: authtoken/serializers.py:23 +#: authtoken/serializers.py:35 msgid "Unable to log in with provided credentials." msgstr "No puede iniciar sesión con las credenciales proporcionadas." -#: authtoken/serializers.py:26 +#: authtoken/serializers.py:38 msgid "Must include \"username\" and \"password\"." msgstr "Debe incluir \"username\" y \"password\"." -#: exceptions.py:49 +#: exceptions.py:102 msgid "A server error occurred." msgstr "Se ha producido un error en el servidor." -#: exceptions.py:84 +#: exceptions.py:142 +msgid "Invalid input." +msgstr "" + +#: exceptions.py:161 msgid "Malformed request." msgstr "Solicitud con formato incorrecto." -#: exceptions.py:89 +#: exceptions.py:167 msgid "Incorrect authentication credentials." msgstr "Credenciales de autenticación incorrectas." -#: exceptions.py:94 +#: exceptions.py:173 msgid "Authentication credentials were not provided." msgstr "Las credenciales de autenticación no se proveyeron." -#: exceptions.py:99 +#: exceptions.py:179 msgid "You do not have permission to perform this action." msgstr "Usted no tiene permiso para realizar esta acción." -#: exceptions.py:104 views.py:81 +#: exceptions.py:185 msgid "Not found." msgstr "No encontrado." -#: exceptions.py:109 +#: exceptions.py:191 +#, python-brace-format msgid "Method \"{method}\" not allowed." msgstr "Método \"{method}\" no permitido." -#: exceptions.py:120 +#: exceptions.py:202 msgid "Could not satisfy the request Accept header." msgstr "No se ha podido satisfacer la solicitud de cabecera de Accept." -#: exceptions.py:132 +#: exceptions.py:212 +#, python-brace-format msgid "Unsupported media type \"{media_type}\" in request." msgstr "Tipo de medio \"{media_type}\" incompatible en la solicitud." -#: exceptions.py:145 +#: exceptions.py:223 msgid "Request was throttled." msgstr "Solicitud fue regulada (throttled)." -#: fields.py:269 relations.py:206 relations.py:239 validators.py:98 -#: validators.py:181 +#: exceptions.py:224 +#, python-brace-format +msgid "Expected available in {wait} second." +msgstr "" + +#: exceptions.py:225 +#, python-brace-format +msgid "Expected available in {wait} seconds." +msgstr "" + +#: fields.py:316 relations.py:245 relations.py:279 validators.py:90 +#: validators.py:183 msgid "This field is required." msgstr "Este campo es requerido." -#: fields.py:270 +#: fields.py:317 msgid "This field may not be null." msgstr "Este campo no puede ser nulo." -#: fields.py:608 fields.py:639 -msgid "\"{input}\" is not a valid boolean." -msgstr "\"{input}\" no es un booleano válido." +#: fields.py:701 +msgid "Must be a valid boolean." +msgstr "" -#: fields.py:674 +#: fields.py:766 +msgid "Not a valid string." +msgstr "" + +#: fields.py:767 msgid "This field may not be blank." msgstr "Este campo no puede estar en blanco." -#: fields.py:675 fields.py:1675 +#: fields.py:768 fields.py:1881 +#, python-brace-format msgid "Ensure this field has no more than {max_length} characters." msgstr "Asegúrese de que este campo no tenga más de {max_length} caracteres." -#: fields.py:676 +#: fields.py:769 +#, python-brace-format msgid "Ensure this field has at least {min_length} characters." msgstr "Asegúrese de que este campo tenga al menos {min_length} caracteres." -#: fields.py:713 +#: fields.py:816 msgid "Enter a valid email address." msgstr "Introduzca una dirección de correo electrónico válida." -#: fields.py:724 +#: fields.py:827 msgid "This value does not match the required pattern." msgstr "Este valor no coincide con el patrón requerido." -#: fields.py:735 +#: fields.py:838 msgid "" "Enter a valid \"slug\" consisting of letters, numbers, underscores or " "hyphens." msgstr "Introduzca un \"slug\" válido consistente en letras, números, guiones o guiones bajos." -#: fields.py:747 +#: fields.py:839 +msgid "" +"Enter a valid \"slug\" consisting of Unicode letters, numbers, underscores, " +"or hyphens." +msgstr "" + +#: fields.py:854 msgid "Enter a valid URL." msgstr "Introduzca una URL válida." -#: fields.py:760 -msgid "\"{value}\" is not a valid UUID." -msgstr "\"{value}\" no es un UUID válido." +#: fields.py:867 +msgid "Must be a valid UUID." +msgstr "" -#: fields.py:796 +#: fields.py:903 msgid "Enter a valid IPv4 or IPv6 address." msgstr "Introduzca una dirección IPv4 o IPv6 válida." -#: fields.py:821 +#: fields.py:931 msgid "A valid integer is required." msgstr "Introduzca un número entero válido." -#: fields.py:822 fields.py:857 fields.py:891 +#: fields.py:932 fields.py:969 fields.py:1005 fields.py:1366 +#, python-brace-format msgid "Ensure this value is less than or equal to {max_value}." msgstr "Asegúrese de que este valor es menor o igual a {max_value}." -#: fields.py:823 fields.py:858 fields.py:892 +#: fields.py:933 fields.py:970 fields.py:1006 fields.py:1367 +#, python-brace-format msgid "Ensure this value is greater than or equal to {min_value}." msgstr "Asegúrese de que este valor es mayor o igual a {min_value}." -#: fields.py:824 fields.py:859 fields.py:896 +#: fields.py:934 fields.py:971 fields.py:1010 msgid "String value too large." msgstr "Cadena demasiado larga." -#: fields.py:856 fields.py:890 +#: fields.py:968 fields.py:1004 msgid "A valid number is required." msgstr "Se requiere un número válido." -#: fields.py:893 +#: fields.py:1007 +#, python-brace-format msgid "Ensure that there are no more than {max_digits} digits in total." msgstr "Asegúrese de que no haya más de {max_digits} dígitos en total." -#: fields.py:894 +#: fields.py:1008 +#, python-brace-format msgid "" "Ensure that there are no more than {max_decimal_places} decimal places." msgstr "Asegúrese de que no haya más de {max_decimal_places} decimales." -#: fields.py:895 +#: fields.py:1009 +#, python-brace-format msgid "" "Ensure that there are no more than {max_whole_digits} digits before the " "decimal point." msgstr "Asegúrese de que no haya más de {max_whole_digits} dígitos en la parte entera." -#: fields.py:1025 +#: fields.py:1148 +#, python-brace-format msgid "Datetime has wrong format. Use one of these formats instead: {format}." msgstr "Fecha/hora con formato erróneo. Use uno de los siguientes formatos en su lugar: {format}." -#: fields.py:1026 +#: fields.py:1149 msgid "Expected a datetime but got a date." msgstr "Se esperaba un fecha/hora en vez de una fecha." -#: fields.py:1103 +#: fields.py:1150 +#, python-brace-format +msgid "Invalid datetime for the timezone \"{timezone}\"." +msgstr "" + +#: fields.py:1151 +msgid "Datetime value out of range." +msgstr "" + +#: fields.py:1236 +#, python-brace-format msgid "Date has wrong format. Use one of these formats instead: {format}." msgstr "Fecha con formato erróneo. Use uno de los siguientes formatos en su lugar: {format}." -#: fields.py:1104 +#: fields.py:1237 msgid "Expected a date but got a datetime." msgstr "Se esperaba una fecha en vez de una fecha/hora." -#: fields.py:1170 +#: fields.py:1303 +#, python-brace-format msgid "Time has wrong format. Use one of these formats instead: {format}." msgstr "Hora con formato erróneo. Use uno de los siguientes formatos en su lugar: {format}." -#: fields.py:1232 +#: fields.py:1365 +#, python-brace-format msgid "Duration has wrong format. Use one of these formats instead: {format}." msgstr "Duración con formato erróneo. Use uno de los siguientes formatos en su lugar: {format}." -#: fields.py:1251 fields.py:1300 +#: fields.py:1399 fields.py:1456 +#, python-brace-format msgid "\"{input}\" is not a valid choice." msgstr "\"{input}\" no es una elección válida." -#: fields.py:1254 relations.py:71 relations.py:441 +#: fields.py:1402 +#, python-brace-format msgid "More than {count} items..." msgstr "Más de {count} elementos..." -#: fields.py:1301 fields.py:1448 relations.py:437 serializers.py:524 +#: fields.py:1457 fields.py:1603 relations.py:485 serializers.py:570 +#, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "Se esperaba una lista de elementos en vez del tipo \"{input_type}\"." -#: fields.py:1302 +#: fields.py:1458 msgid "This selection may not be empty." msgstr "Esta selección no puede estar vacía." -#: fields.py:1339 +#: fields.py:1495 +#, python-brace-format msgid "\"{input}\" is not a valid path choice." msgstr "\"{input}\" no es una elección de ruta válida." -#: fields.py:1358 +#: fields.py:1514 msgid "No file was submitted." msgstr "No se envió ningún archivo." -#: fields.py:1359 +#: fields.py:1515 msgid "" "The submitted data was not a file. Check the encoding type on the form." msgstr "La información enviada no era un archivo. Compruebe el tipo de codificación del formulario." -#: fields.py:1360 +#: fields.py:1516 msgid "No filename could be determined." msgstr "No se pudo determinar un nombre de archivo." -#: fields.py:1361 +#: fields.py:1517 msgid "The submitted file is empty." msgstr "El archivo enviado está vació." -#: fields.py:1362 +#: fields.py:1518 +#, python-brace-format msgid "" "Ensure this filename has at most {max_length} characters (it has {length})." msgstr "Asegúrese de que el nombre de archivo no tenga más de {max_length} caracteres (tiene {length})." -#: fields.py:1410 +#: fields.py:1566 msgid "" "Upload a valid image. The file you uploaded was either not an image or a " "corrupted image." msgstr "Adjunte una imagen válida. El archivo adjunto o bien no es una imagen o bien está dañado." -#: fields.py:1449 relations.py:438 serializers.py:525 +#: fields.py:1604 relations.py:486 serializers.py:571 msgid "This list may not be empty." msgstr "Esta lista no puede estar vacía." -#: fields.py:1502 +#: fields.py:1605 +#, python-brace-format +msgid "Ensure this field has at least {min_length} elements." +msgstr "" + +#: fields.py:1606 +#, python-brace-format +msgid "Ensure this field has no more than {max_length} elements." +msgstr "" + +#: fields.py:1682 +#, python-brace-format msgid "Expected a dictionary of items but got type \"{input_type}\"." msgstr "Se esperaba un diccionario de elementos en vez del tipo \"{input_type}\"." -#: fields.py:1549 +#: fields.py:1683 +msgid "This dictionary may not be empty." +msgstr "" + +#: fields.py:1755 msgid "Value must be valid JSON." msgstr "El valor debe ser JSON válido." -#: filters.py:36 templates/rest_framework/filters/django_filter.html:5 -msgid "Submit" -msgstr "Enviar" +#: filters.py:49 templates/rest_framework/filters/search.html:2 +msgid "Search" +msgstr "Buscar" -#: filters.py:336 +#: filters.py:50 +msgid "A search term." +msgstr "" + +#: filters.py:180 templates/rest_framework/filters/ordering.html:3 +msgid "Ordering" +msgstr "Ordenamiento" + +#: filters.py:181 +msgid "Which field to use when ordering the results." +msgstr "" + +#: filters.py:287 msgid "ascending" msgstr "ascendiente" -#: filters.py:337 +#: filters.py:288 msgid "descending" msgstr "descendiente" -#: pagination.py:193 +#: pagination.py:174 +msgid "A page number within the paginated result set." +msgstr "" + +#: pagination.py:179 pagination.py:372 pagination.py:590 +msgid "Number of results to return per page." +msgstr "" + +#: pagination.py:189 msgid "Invalid page." msgstr "Página inválida." -#: pagination.py:427 +#: pagination.py:374 +msgid "The initial index from which to return the results." +msgstr "" + +#: pagination.py:581 +msgid "The pagination cursor value." +msgstr "" + +#: pagination.py:583 msgid "Invalid cursor" msgstr "Cursor inválido" -#: relations.py:207 +#: relations.py:246 +#, python-brace-format msgid "Invalid pk \"{pk_value}\" - object does not exist." msgstr "Clave primaria \"{pk_value}\" inválida - objeto no existe." -#: relations.py:208 +#: relations.py:247 +#, python-brace-format msgid "Incorrect type. Expected pk value, received {data_type}." msgstr "Tipo incorrecto. Se esperaba valor de clave primaria y se recibió {data_type}." -#: relations.py:240 +#: relations.py:280 msgid "Invalid hyperlink - No URL match." msgstr "Hiperenlace inválido - No hay URL coincidentes." -#: relations.py:241 +#: relations.py:281 msgid "Invalid hyperlink - Incorrect URL match." msgstr "Hiperenlace inválido - Coincidencia incorrecta de la URL." -#: relations.py:242 +#: relations.py:282 msgid "Invalid hyperlink - Object does not exist." msgstr "Hiperenlace inválido - Objeto no existe." -#: relations.py:243 +#: relations.py:283 +#, python-brace-format msgid "Incorrect type. Expected URL string, received {data_type}." msgstr "Tipo incorrecto. Se esperaba una URL y se recibió {data_type}." -#: relations.py:401 +#: relations.py:448 +#, python-brace-format msgid "Object with {slug_name}={value} does not exist." msgstr "Objeto con {slug_name}={value} no existe." -#: relations.py:402 +#: relations.py:449 msgid "Invalid value." msgstr "Valor inválido." -#: serializers.py:326 +#: schemas/utils.py:32 +msgid "unique integer value" +msgstr "" + +#: schemas/utils.py:34 +msgid "UUID string" +msgstr "" + +#: schemas/utils.py:36 +msgid "unique value" +msgstr "" + +#: schemas/utils.py:38 +#, python-brace-format +msgid "A {value_type} identifying this {name}." +msgstr "" + +#: serializers.py:337 +#, python-brace-format msgid "Invalid data. Expected a dictionary, but got {datatype}." msgstr "Datos inválidos. Se esperaba un diccionario pero es un {datatype}." #: templates/rest_framework/admin.html:116 -#: templates/rest_framework/base.html:128 +#: templates/rest_framework/base.html:136 +msgid "Extra Actions" +msgstr "" + +#: templates/rest_framework/admin.html:130 +#: templates/rest_framework/base.html:150 msgid "Filters" msgstr "Filtros" -#: templates/rest_framework/filters/django_filter.html:2 -#: templates/rest_framework/filters/django_filter_crispyforms.html:4 -msgid "Field filters" -msgstr "Filtros de campo" +#: templates/rest_framework/base.html:37 +msgid "navbar" +msgstr "" -#: templates/rest_framework/filters/ordering.html:3 -msgid "Ordering" -msgstr "Ordenamiento" +#: templates/rest_framework/base.html:75 +msgid "content" +msgstr "" -#: templates/rest_framework/filters/search.html:2 -msgid "Search" -msgstr "Buscar" +#: templates/rest_framework/base.html:78 +msgid "request form" +msgstr "" -#: templates/rest_framework/horizontal/radio.html:2 -#: templates/rest_framework/inline/radio.html:2 -#: templates/rest_framework/vertical/radio.html:2 +#: templates/rest_framework/base.html:157 +msgid "main content" +msgstr "" + +#: templates/rest_framework/base.html:173 +msgid "request info" +msgstr "" + +#: templates/rest_framework/base.html:177 +msgid "response info" +msgstr "" + +#: templates/rest_framework/horizontal/radio.html:4 +#: templates/rest_framework/inline/radio.html:3 +#: templates/rest_framework/vertical/radio.html:3 msgid "None" msgstr "Ninguno" -#: templates/rest_framework/horizontal/select_multiple.html:2 -#: templates/rest_framework/inline/select_multiple.html:2 -#: templates/rest_framework/vertical/select_multiple.html:2 +#: templates/rest_framework/horizontal/select_multiple.html:4 +#: templates/rest_framework/inline/select_multiple.html:3 +#: templates/rest_framework/vertical/select_multiple.html:3 msgid "No items to select." msgstr "No hay elementos para seleccionar." -#: validators.py:43 +#: validators.py:39 msgid "This field must be unique." msgstr "Este campo debe ser único." -#: validators.py:97 +#: validators.py:89 +#, python-brace-format msgid "The fields {field_names} must make a unique set." msgstr "Los campos {field_names} deben formar un conjunto único." -#: validators.py:245 +#: validators.py:171 +#, python-brace-format +msgid "Surrogate characters are not allowed: U+{code_point:X}." +msgstr "" + +#: validators.py:243 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" date." msgstr "Este campo debe ser único para el día \"{date_field}\"." -#: validators.py:260 +#: validators.py:258 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" month." msgstr "Este campo debe ser único para el mes \"{date_field}\"." -#: validators.py:273 +#: validators.py:271 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" year." msgstr "Este campo debe ser único para el año \"{date_field}\"." -#: versioning.py:42 +#: versioning.py:40 msgid "Invalid version in \"Accept\" header." msgstr "Versión inválida en la cabecera \"Accept\"." -#: versioning.py:73 +#: versioning.py:71 msgid "Invalid version in URL path." msgstr "Versión inválida en la ruta de la URL." -#: versioning.py:115 +#: versioning.py:116 msgid "Invalid version in URL path. Does not match any version namespace." msgstr "La versión especificada en la ruta de la URL no es válida. No coincide con ninguna del espacio de nombres de versiones." -#: versioning.py:147 +#: versioning.py:148 msgid "Invalid version in hostname." msgstr "Versión inválida en el nombre de host." -#: versioning.py:169 +#: versioning.py:170 msgid "Invalid version in query parameter." msgstr "Versión inválida en el parámetro de consulta." - -#: views.py:88 -msgid "Permission denied." -msgstr "Permiso denegado." diff --git a/rest_framework/locale/et/LC_MESSAGES/django.mo b/rest_framework/locale/et/LC_MESSAGES/django.mo index 8deba1eb0a8adddd04f1465445c7d5d3083accf8..e14ea9e270d7b06ac9ad497bf06c55378c98c170 100644 GIT binary patch delta 3094 zcmZ|QZEPGz8Nl(eo!mKbY{zd&9LLQ#q^;e?m!y6naqQY|(geT6cHk z6+&W^x!=t0dUocSXEyI0y)(A-yV?y`6yEbbJHCPY@ShmP)=f%1ga`0A`URKNk7=CXLJ5C8fI~QgU%(II+js;UE0h|+ zY3#voquhTJN3nj3QXfErwfI?-30^H;Un%-)l=1$BU1~|G!JE)Q?Aclv z@Cn>W|5CC49h8;5gtDSvp@j0U#eP>!;r=Ns<9ZGy0#D*yco}89AK<7(UE&UtHgnJoW?w>*FpGV1= zFV_+OZW=FeA-~rs{l@yjj3-bYOrpk1C=>cVN(64**Or!xChBcHH{L1v-n(zQu8P?uORisR+PPe7$wA0DC79ZuBgk! z>)*mQ`mdry>JRuJ-bRT~`x1ZEOCv;S zd6d0gL-JSs1AB4PZl&(QjgSU(Q z8kQla;BI72Y6$yquGoJbW#y|VIq^p%J=9;2cc}=2$$0nhBRMpLJLUW@(vSzfit^%@ zQTA#L`L?KEpq%61qU1z`SxAo5;C5_6dA*vR`; z!(KiTxF09*5}v|aD51NbuM&$;r%@*QBua>{;e&VsWdd?hvO0=#3bvx0f?k}&O!59} zD3SU(F7Xvq@6li~`Kz*rd$}7ygHcRi36@busT}L~%L!VtDk<`nlgLa_C3j>JQe?kL zk9<@f$Fo#PKFU)5xJavu$_Gh(lsZFQFT6XyicXa9YpRq-sSi^hp>i1VpKghwoC+zj zby8&I5)~=OsB&zj$U^tY{{MFwq;sZtp#up_{#Z$vWpAZO*0)kWM%_T|p~|;|PlP&2 zl_DoXws4v%k$sFRN#016@*(N~b&I@T_Er*13R|8(&(fAHSTBcYNY);wN)AYod`T4v@P+gEwD*3INh z%8m0nlQpw)-)1Uz*p>&sS}; z^Hs635oghUt*Uc}mvwZIFd2Pu)(bPiC$t+lX+IXTYgO@Wg^mt9?K>%FHi)S)FXPy@ z>fZh1*|?K+GjnRf`2Gbi8&{{C^P%Gh`hxKpG3y0E%8AF+q+_zPiRFvcH%q!xF89-B zF+a(3j&{-u!D38JC0xJw2AS*sK45!l!Yzfc=6`+r!hxyGIKrhTJ!rs{zM?FaeSp${JJ>Flxx>$dCDCg(a? z&FZ}K;iB$+f|W^YAmwJfoNJa7bu}gST783kroPF(UO%~U^*Xb+TN{QWqn;NJ0LMPn?5y45ZehOVRdM|`B29&Q<-PIp|2)Q%J{1*8KXvBch2YqlbR3p z0uQhOOgpB=1E1z{-(9;)2Sz<7a8jYnIPem#_EIS$3*&LaGIn8v2efy|RR8Qr% zKo#Jm-OxX=ms{GZMvNZ@X5M7nw5w+9;O_cLnR|W<^2zaXOMi9J_&JkPNy8a%a_T>U C&JaZa delta 2055 zcmZY9TWl0n7{Kwf%cU1->6Tu$QtW9Hvag8R17m)_qpp9=D(ZmNH1fvEXG$9)Q-*%dKImx%bIWs#m z=X~dz^V{w_{mCElSI#QhAW=$$-AdVbaV0;rJ*$-}$45|O4DZ9!=*1Mueb;b3{)F|o zDnqHw7{ES!2Djr|_z>R2UZs+1OQuqfaUzDTxPV*Hou$-H?8Xi}fpUEgcj2FykAvAu z19%cE=^t@?1LZlFuo?ftDr~xE>3IjRjrXfr4tluo74~E98l`-=7jyAAw&4tJ!g-X8 z+{QXA$Wh9VJt+50Vi&%Na{u>uFaGTGGdL*&Ey7aXuR7!ahn)*?l$pJTlIr)d1{bgh zZ==SnwMsE5Rfi4OjB?$^VmyX2u+u0hpF??1PTtb>I!wxmJ`QBLe z8I*gLUet-QreVAvKg34-4j;!HMqh%Xj>mBe{j+$^MW#{Hj~0-B8Nf`z(f}?XlT-63 zGyewVLBBhFPoYw^^!?b42T*2q1|{V`q71x@G)R9KWl3jImiSwI3QI`OPJFJI{O{)A zGAH)qI!aoqI?Ru(@k=NVIPZ81Tj)11DtX``l!3m3QfzZ519OossrFu!|GkWUyn-ZC z{ehjBl_c-g9BjvWoWRX^7TfVE%8cBk=>hD(b$ARbaK`DUP>SjbZopfPS#+d!YLFzV zhp`NU*nr6wIbbmAW9Pym@*${SQL6hck{ngdH01%^CVV0mKb=)5P1anRERCDs zOH#drvs5&3dQ0fTX)8z6TQTUb0W2} z*yAdiWNv!g9^=7!+#0hZL2GK-XR^K8yFAl>{v|!le(#WZ*V}DAuPQVvN@A&0$*b;E zxHRBOo!?-&Tt1UoHg9f}oimI2J@aXKi@8%CFas6iX0f8RcvmPiYUxQUd^n*ezj%8p t6d6r~g1%IHWtrQ&UUkUiRe$Cgk4EBA9gXN%f_Wx_KC@6=Yc|$&{SE3a8fO3i diff --git a/rest_framework/locale/et/LC_MESSAGES/django.po b/rest_framework/locale/et/LC_MESSAGES/django.po index cc2c2e3f0..d9c4b184f 100644 --- a/rest_framework/locale/et/LC_MESSAGES/django.po +++ b/rest_framework/locale/et/LC_MESSAGES/django.po @@ -3,14 +3,15 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: -# Tõnis Kärdi , 2015 +# Erlend Eelmets , 2020 +# Tõnis Kärdi , 2015,2019 msgid "" msgstr "" "Project-Id-Version: Django REST framework\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-07-12 16:13+0100\n" -"PO-Revision-Date: 2017-08-03 14:58+0000\n" -"Last-Translator: Thomas Christie \n" +"POT-Creation-Date: 2020-10-13 21:45+0200\n" +"PO-Revision-Date: 2020-10-13 19:45+0000\n" +"Last-Translator: Xavier Ordoquy \n" "Language-Team: Estonian (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/et/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,423 +19,556 @@ msgstr "" "Language: et\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: authentication.py:73 +#: authentication.py:70 msgid "Invalid basic header. No credentials provided." msgstr "Sobimatu lihtpäis. Kasutajatunnus on esitamata." -#: authentication.py:76 +#: authentication.py:73 msgid "Invalid basic header. Credentials string should not contain spaces." msgstr "Sobimatu lihtpäis. Kasutajatunnus ei tohi sisaldada tühikuid." -#: authentication.py:82 +#: authentication.py:83 msgid "Invalid basic header. Credentials not correctly base64 encoded." msgstr "Sobimatu lihtpäis. Kasutajatunnus pole korrektselt base64-kodeeritud." -#: authentication.py:99 +#: authentication.py:101 msgid "Invalid username/password." msgstr "Sobimatu kasutajatunnus/salasõna." -#: authentication.py:102 authentication.py:198 +#: authentication.py:104 authentication.py:206 msgid "User inactive or deleted." msgstr "Kasutaja on inaktiivne või kustutatud." -#: authentication.py:176 +#: authentication.py:184 msgid "Invalid token header. No credentials provided." msgstr "Sobimatu lubakaardi päis. Kasutajatunnus on esitamata." -#: authentication.py:179 +#: authentication.py:187 msgid "Invalid token header. Token string should not contain spaces." msgstr "Sobimatu lubakaardi päis. Loa sõne ei tohi sisaldada tühikuid." -#: authentication.py:185 +#: authentication.py:193 msgid "" "Invalid token header. Token string should not contain invalid characters." -msgstr "" +msgstr "Sobimatu lubakaardi päis. Loa sõne ei tohi sisaldada sobimatuid märke." -#: authentication.py:195 +#: authentication.py:203 msgid "Invalid token." msgstr "Sobimatu lubakaart." #: authtoken/apps.py:7 msgid "Auth Token" -msgstr "" +msgstr "Autentimistähis" -#: authtoken/models.py:15 +#: authtoken/models.py:13 msgid "Key" -msgstr "" +msgstr "Võti" + +#: authtoken/models.py:16 +msgid "User" +msgstr "Kasutaja" #: authtoken/models.py:18 -msgid "User" -msgstr "" - -#: authtoken/models.py:20 msgid "Created" -msgstr "" +msgstr "Loodud" -#: authtoken/models.py:29 +#: authtoken/models.py:27 authtoken/serializers.py:19 msgid "Token" -msgstr "" +msgstr "Tähis" -#: authtoken/models.py:30 +#: authtoken/models.py:28 msgid "Tokens" -msgstr "" - -#: authtoken/serializers.py:8 -msgid "Username" -msgstr "" +msgstr "Tähised" #: authtoken/serializers.py:9 +msgid "Username" +msgstr "Kasutajanimi" + +#: authtoken/serializers.py:13 msgid "Password" -msgstr "" +msgstr "Salasõna" -#: authtoken/serializers.py:20 -msgid "User account is disabled." -msgstr "Kasutajakonto on suletud." - -#: authtoken/serializers.py:23 +#: authtoken/serializers.py:35 msgid "Unable to log in with provided credentials." msgstr "Sisselogimine antud tunnusega ebaõnnestus." -#: authtoken/serializers.py:26 +#: authtoken/serializers.py:38 msgid "Must include \"username\" and \"password\"." msgstr "Peab sisaldama \"kasutajatunnust\" ja \"slasõna\"." -#: exceptions.py:49 +#: exceptions.py:102 msgid "A server error occurred." msgstr "Viga serveril." -#: exceptions.py:84 +#: exceptions.py:142 +msgid "Invalid input." +msgstr "" + +#: exceptions.py:161 msgid "Malformed request." msgstr "Väändunud päring." -#: exceptions.py:89 +#: exceptions.py:167 msgid "Incorrect authentication credentials." msgstr "Ebakorrektne autentimistunnus." -#: exceptions.py:94 +#: exceptions.py:173 msgid "Authentication credentials were not provided." msgstr "Autentimistunnus on esitamata." -#: exceptions.py:99 +#: exceptions.py:179 msgid "You do not have permission to perform this action." msgstr "Teil puuduvad piisavad õigused selle tegevuse teostamiseks." -#: exceptions.py:104 views.py:81 +#: exceptions.py:185 msgid "Not found." msgstr "Ei leidnud." -#: exceptions.py:109 +#: exceptions.py:191 +#, python-brace-format msgid "Method \"{method}\" not allowed." msgstr "Meetod \"{method}\" pole lubatud." -#: exceptions.py:120 +#: exceptions.py:202 msgid "Could not satisfy the request Accept header." msgstr "Päringu Accept-päist ei suutnud täita." -#: exceptions.py:132 +#: exceptions.py:212 +#, python-brace-format msgid "Unsupported media type \"{media_type}\" in request." msgstr "Meedia tüüpi {media_type} päringus ei toetata." -#: exceptions.py:145 +#: exceptions.py:223 msgid "Request was throttled." msgstr "Liiga palju päringuid." -#: fields.py:269 relations.py:206 relations.py:239 validators.py:98 -#: validators.py:181 +#: exceptions.py:224 +#, python-brace-format +msgid "Expected available in {wait} second." +msgstr "" + +#: exceptions.py:225 +#, python-brace-format +msgid "Expected available in {wait} seconds." +msgstr "" + +#: fields.py:316 relations.py:245 relations.py:279 validators.py:90 +#: validators.py:183 msgid "This field is required." msgstr "Väli on kohustuslik." -#: fields.py:270 +#: fields.py:317 msgid "This field may not be null." msgstr "Väli ei tohi olla tühi." -#: fields.py:608 fields.py:639 -msgid "\"{input}\" is not a valid boolean." -msgstr "\"{input}\" pole kehtiv kahendarv." +#: fields.py:701 +msgid "Must be a valid boolean." +msgstr "" -#: fields.py:674 +#: fields.py:766 +msgid "Not a valid string." +msgstr "" + +#: fields.py:767 msgid "This field may not be blank." msgstr "See väli ei tohi olla tühi." -#: fields.py:675 fields.py:1675 +#: fields.py:768 fields.py:1881 +#, python-brace-format msgid "Ensure this field has no more than {max_length} characters." msgstr "Veendu, et see väli poleks pikem kui {max_length} tähemärki." -#: fields.py:676 +#: fields.py:769 +#, python-brace-format msgid "Ensure this field has at least {min_length} characters." msgstr "Veendu, et see väli oleks vähemalt {min_length} tähemärki pikk." -#: fields.py:713 +#: fields.py:816 msgid "Enter a valid email address." msgstr "Sisestage kehtiv e-posti aadress." -#: fields.py:724 +#: fields.py:827 msgid "This value does not match the required pattern." msgstr "Väärtus ei ühti etteantud mustriga." -#: fields.py:735 +#: fields.py:838 msgid "" "Enter a valid \"slug\" consisting of letters, numbers, underscores or " "hyphens." msgstr "Sisestage kehtiv \"slug\", mis koosneks tähtedest, numbritest, ala- või sidekriipsudest." -#: fields.py:747 +#: fields.py:839 +msgid "" +"Enter a valid \"slug\" consisting of Unicode letters, numbers, underscores, " +"or hyphens." +msgstr "" + +#: fields.py:854 msgid "Enter a valid URL." msgstr "Sisestage korrektne URL." -#: fields.py:760 -msgid "\"{value}\" is not a valid UUID." -msgstr "\"{value}\" pole kehtiv UUID." - -#: fields.py:796 -msgid "Enter a valid IPv4 or IPv6 address." +#: fields.py:867 +msgid "Must be a valid UUID." msgstr "" -#: fields.py:821 +#: fields.py:903 +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Sisesta valiidne IPv4 või IPv6 aadress" + +#: fields.py:931 msgid "A valid integer is required." msgstr "Sisendiks peab olema täisarv." -#: fields.py:822 fields.py:857 fields.py:891 +#: fields.py:932 fields.py:969 fields.py:1005 fields.py:1366 +#, python-brace-format msgid "Ensure this value is less than or equal to {max_value}." msgstr "Veenduge, et väärtus on väiksem kui või võrdne väärtusega {max_value}. " -#: fields.py:823 fields.py:858 fields.py:892 +#: fields.py:933 fields.py:970 fields.py:1006 fields.py:1367 +#, python-brace-format msgid "Ensure this value is greater than or equal to {min_value}." msgstr "Veenduge, et väärtus on suurem kui või võrdne väärtusega {min_value}." -#: fields.py:824 fields.py:859 fields.py:896 +#: fields.py:934 fields.py:971 fields.py:1010 msgid "String value too large." msgstr "Sõne on liiga pikk." -#: fields.py:856 fields.py:890 +#: fields.py:968 fields.py:1004 msgid "A valid number is required." msgstr "Sisendiks peab olema arv." -#: fields.py:893 +#: fields.py:1007 +#, python-brace-format msgid "Ensure that there are no more than {max_digits} digits in total." msgstr "Veenduge, et kokku pole rohkem kui {max_digits} numbit." -#: fields.py:894 +#: fields.py:1008 +#, python-brace-format msgid "" "Ensure that there are no more than {max_decimal_places} decimal places." msgstr "Veenduge, et komakohti pole rohkem kui {max_decimal_places}. " -#: fields.py:895 +#: fields.py:1009 +#, python-brace-format msgid "" "Ensure that there are no more than {max_whole_digits} digits before the " "decimal point." msgstr "Veenduge, et täiskohti poleks rohkem kui {max_whole_digits}." -#: fields.py:1025 +#: fields.py:1148 +#, python-brace-format msgid "Datetime has wrong format. Use one of these formats instead: {format}." msgstr "Valesti formaaditud kuupäev-kellaaeg. Kasutage mõnda neist: {format}." -#: fields.py:1026 +#: fields.py:1149 msgid "Expected a datetime but got a date." msgstr "Ootasin kuupäev-kellaaeg andmetüüpi, kuid sain hoopis kuupäeva." -#: fields.py:1103 +#: fields.py:1150 +#, python-brace-format +msgid "Invalid datetime for the timezone \"{timezone}\"." +msgstr "" + +#: fields.py:1151 +msgid "Datetime value out of range." +msgstr "" + +#: fields.py:1236 +#, python-brace-format msgid "Date has wrong format. Use one of these formats instead: {format}." msgstr "Valesti formaaditud kuupäev. Kasutage mõnda neist: {format}." -#: fields.py:1104 +#: fields.py:1237 msgid "Expected a date but got a datetime." msgstr "Ootasin kuupäeva andmetüüpi, kuid sain hoopis kuupäev-kellaaja." -#: fields.py:1170 +#: fields.py:1303 +#, python-brace-format msgid "Time has wrong format. Use one of these formats instead: {format}." msgstr "Valesti formaaditud kellaaeg. Kasutage mõnda neist: {format}." -#: fields.py:1232 +#: fields.py:1365 +#, python-brace-format msgid "Duration has wrong format. Use one of these formats instead: {format}." -msgstr "" +msgstr "Valesti formaaditud kestvus. Kasutage mõnda neist: {format}" -#: fields.py:1251 fields.py:1300 +#: fields.py:1399 fields.py:1456 +#, python-brace-format msgid "\"{input}\" is not a valid choice." msgstr "\"{input}\" on sobimatu valik." -#: fields.py:1254 relations.py:71 relations.py:441 +#: fields.py:1402 +#, python-brace-format msgid "More than {count} items..." -msgstr "" +msgstr "Kirjeid on rohkem kui {count} ... " -#: fields.py:1301 fields.py:1448 relations.py:437 serializers.py:524 +#: fields.py:1457 fields.py:1603 relations.py:485 serializers.py:570 +#, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "Ootasin kirjete järjendit, kuid sain \"{input_type}\" - tüübi." -#: fields.py:1302 +#: fields.py:1458 msgid "This selection may not be empty." -msgstr "" +msgstr "Valik ei tohi olla määramata." -#: fields.py:1339 +#: fields.py:1495 +#, python-brace-format msgid "\"{input}\" is not a valid path choice." -msgstr "" +msgstr "\"{input}\" on sobimatu valik." -#: fields.py:1358 +#: fields.py:1514 msgid "No file was submitted." msgstr "Ühtegi faili ei esitatud." -#: fields.py:1359 +#: fields.py:1515 msgid "" "The submitted data was not a file. Check the encoding type on the form." msgstr "Esitatud andmetes ei olnud faili. Kontrollige vormi kodeeringut." -#: fields.py:1360 +#: fields.py:1516 msgid "No filename could be determined." msgstr "Ei suutnud tuvastada failinime." -#: fields.py:1361 +#: fields.py:1517 msgid "The submitted file is empty." msgstr "Esitatud fail oli tühi." -#: fields.py:1362 +#: fields.py:1518 +#, python-brace-format msgid "" "Ensure this filename has at most {max_length} characters (it has {length})." msgstr "Veenduge, et failinimi oleks maksimaalselt {max_length} tähemärki pikk (praegu on {length})." -#: fields.py:1410 +#: fields.py:1566 msgid "" "Upload a valid image. The file you uploaded was either not an image or a " "corrupted image." msgstr "Laadige üles kehtiv pildifail. Üles laetud fail ei olnud pilt või oli see katki." -#: fields.py:1449 relations.py:438 serializers.py:525 +#: fields.py:1604 relations.py:486 serializers.py:571 msgid "This list may not be empty." +msgstr "Loetelu ei tohi olla määramata." + +#: fields.py:1605 +#, python-brace-format +msgid "Ensure this field has at least {min_length} elements." msgstr "" -#: fields.py:1502 +#: fields.py:1606 +#, python-brace-format +msgid "Ensure this field has no more than {max_length} elements." +msgstr "" + +#: fields.py:1682 +#, python-brace-format msgid "Expected a dictionary of items but got type \"{input_type}\"." msgstr "Ootasin kirjete sõnastikku, kuid sain \"{input_type}\"." -#: fields.py:1549 +#: fields.py:1683 +msgid "This dictionary may not be empty." +msgstr "" + +#: fields.py:1755 msgid "Value must be valid JSON." +msgstr "Väärtus peab olema valiidne JSON." + +#: filters.py:49 templates/rest_framework/filters/search.html:2 +msgid "Search" +msgstr "Otsing" + +#: filters.py:50 +msgid "A search term." msgstr "" -#: filters.py:36 templates/rest_framework/filters/django_filter.html:5 -msgid "Submit" +#: filters.py:180 templates/rest_framework/filters/ordering.html:3 +msgid "Ordering" +msgstr "Järjestus" + +#: filters.py:181 +msgid "Which field to use when ordering the results." msgstr "" -#: filters.py:336 +#: filters.py:287 msgid "ascending" -msgstr "" +msgstr "kasvav" -#: filters.py:337 +#: filters.py:288 msgid "descending" +msgstr "kahanev" + +#: pagination.py:174 +msgid "A page number within the paginated result set." msgstr "" -#: pagination.py:193 +#: pagination.py:179 pagination.py:372 pagination.py:590 +msgid "Number of results to return per page." +msgstr "" + +#: pagination.py:189 msgid "Invalid page." +msgstr "Sobimatu lehekülg." + +#: pagination.py:374 +msgid "The initial index from which to return the results." msgstr "" -#: pagination.py:427 -msgid "Invalid cursor" -msgstr "Sobimatu kursor." +#: pagination.py:581 +msgid "The pagination cursor value." +msgstr "" -#: relations.py:207 +#: pagination.py:583 +msgid "Invalid cursor" +msgstr "Sobimatu kursor" + +#: relations.py:246 +#, python-brace-format msgid "Invalid pk \"{pk_value}\" - object does not exist." msgstr "Sobimatu primaarvõti \"{pk_value}\" - objekti pole olemas." -#: relations.py:208 +#: relations.py:247 +#, python-brace-format msgid "Incorrect type. Expected pk value, received {data_type}." msgstr "Sobimatu andmetüüp. Ootasin primaarvõtit, sain {data_type}." -#: relations.py:240 +#: relations.py:280 msgid "Invalid hyperlink - No URL match." msgstr "Sobimatu hüperlink - ei leidnud URLi vastet." -#: relations.py:241 +#: relations.py:281 msgid "Invalid hyperlink - Incorrect URL match." msgstr "Sobimatu hüperlink - vale URLi vaste." -#: relations.py:242 +#: relations.py:282 msgid "Invalid hyperlink - Object does not exist." msgstr "Sobimatu hüperlink - objekti ei eksisteeri." -#: relations.py:243 +#: relations.py:283 +#, python-brace-format msgid "Incorrect type. Expected URL string, received {data_type}." msgstr "Sobimatu andmetüüp. Ootasin URLi sõne, sain {data_type}." -#: relations.py:401 +#: relations.py:448 +#, python-brace-format msgid "Object with {slug_name}={value} does not exist." msgstr "Objekti {slug_name}={value} ei eksisteeri." -#: relations.py:402 +#: relations.py:449 msgid "Invalid value." msgstr "Sobimatu väärtus." -#: serializers.py:326 +#: schemas/utils.py:32 +msgid "unique integer value" +msgstr "" + +#: schemas/utils.py:34 +msgid "UUID string" +msgstr "" + +#: schemas/utils.py:36 +msgid "unique value" +msgstr "" + +#: schemas/utils.py:38 +#, python-brace-format +msgid "A {value_type} identifying this {name}." +msgstr "" + +#: serializers.py:337 +#, python-brace-format msgid "Invalid data. Expected a dictionary, but got {datatype}." msgstr "Sobimatud andmed. Ootasin sõnastikku, kuid sain {datatype}." #: templates/rest_framework/admin.html:116 -#: templates/rest_framework/base.html:128 +#: templates/rest_framework/base.html:136 +msgid "Extra Actions" +msgstr "" + +#: templates/rest_framework/admin.html:130 +#: templates/rest_framework/base.html:150 msgid "Filters" +msgstr "Filtrid" + +#: templates/rest_framework/base.html:37 +msgid "navbar" msgstr "" -#: templates/rest_framework/filters/django_filter.html:2 -#: templates/rest_framework/filters/django_filter_crispyforms.html:4 -msgid "Field filters" +#: templates/rest_framework/base.html:75 +msgid "content" msgstr "" -#: templates/rest_framework/filters/ordering.html:3 -msgid "Ordering" +#: templates/rest_framework/base.html:78 +msgid "request form" msgstr "" -#: templates/rest_framework/filters/search.html:2 -msgid "Search" +#: templates/rest_framework/base.html:157 +msgid "main content" msgstr "" -#: templates/rest_framework/horizontal/radio.html:2 -#: templates/rest_framework/inline/radio.html:2 -#: templates/rest_framework/vertical/radio.html:2 +#: templates/rest_framework/base.html:173 +msgid "request info" +msgstr "" + +#: templates/rest_framework/base.html:177 +msgid "response info" +msgstr "" + +#: templates/rest_framework/horizontal/radio.html:4 +#: templates/rest_framework/inline/radio.html:3 +#: templates/rest_framework/vertical/radio.html:3 msgid "None" -msgstr "" +msgstr "Puudub" -#: templates/rest_framework/horizontal/select_multiple.html:2 -#: templates/rest_framework/inline/select_multiple.html:2 -#: templates/rest_framework/vertical/select_multiple.html:2 +#: templates/rest_framework/horizontal/select_multiple.html:4 +#: templates/rest_framework/inline/select_multiple.html:3 +#: templates/rest_framework/vertical/select_multiple.html:3 msgid "No items to select." -msgstr "" +msgstr "Pole midagi valida." -#: validators.py:43 +#: validators.py:39 msgid "This field must be unique." msgstr "Selle välja väärtus peab olema unikaalne." -#: validators.py:97 +#: validators.py:89 +#, python-brace-format msgid "The fields {field_names} must make a unique set." msgstr "Veerud {field_names} peavad moodustama unikaalse hulga." -#: validators.py:245 +#: validators.py:171 +#, python-brace-format +msgid "Surrogate characters are not allowed: U+{code_point:X}." +msgstr "" + +#: validators.py:243 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" date." msgstr "Selle välja väärtus peab olema unikaalne veerus \"{date_field}\" märgitud kuupäeval." -#: validators.py:260 +#: validators.py:258 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" month." msgstr "Selle välja väärtus peab olema unikaalneveerus \"{date_field}\" märgitud kuul." -#: validators.py:273 +#: validators.py:271 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" year." msgstr "Selle välja väärtus peab olema unikaalneveerus \"{date_field}\" märgitud aastal." -#: versioning.py:42 +#: versioning.py:40 msgid "Invalid version in \"Accept\" header." msgstr "Sobimatu versioon \"Accept\" päises." -#: versioning.py:73 +#: versioning.py:71 msgid "Invalid version in URL path." msgstr "Sobimatu versioon URLi rajas." -#: versioning.py:115 +#: versioning.py:116 msgid "Invalid version in URL path. Does not match any version namespace." -msgstr "" +msgstr "Sobimatu versioon URLis - see ei vasta ühelegi teadaolevale." -#: versioning.py:147 +#: versioning.py:148 msgid "Invalid version in hostname." msgstr "Sobimatu versioon hostinimes." -#: versioning.py:169 +#: versioning.py:170 msgid "Invalid version in query parameter." msgstr "Sobimatu versioon päringu parameetris." - -#: views.py:88 -msgid "Permission denied." -msgstr "" diff --git a/rest_framework/locale/fa/LC_MESSAGES/django.mo b/rest_framework/locale/fa/LC_MESSAGES/django.mo index 0e73156d43628c002f3232811c478971ac5af52e..099318e69a178c32d30b3ddcefbec1a8579d8d55 100644 GIT binary patch literal 11976 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 delta 136 zcmX>Rdx_cNo)F7a1|VPrVi_P-0b*t#)&XJ=umIv2KuJp=4N?OGlQYG__zcZ-4a{{7 zjT8(`tqe^jpA{2V2+7FLO)OS$&M3+(F3C()uqnyUbpYaIsK8_v@sE6l)(QnVrA3K3 Jwg%Q*3;^V|9OD20 diff --git a/rest_framework/locale/fa/LC_MESSAGES/django.po b/rest_framework/locale/fa/LC_MESSAGES/django.po index 0aa9ae4c6..6a5b99acf 100644 --- a/rest_framework/locale/fa/LC_MESSAGES/django.po +++ b/rest_framework/locale/fa/LC_MESSAGES/django.po @@ -3,437 +3,574 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Ali Mahdiyar , 2020 +# Aryan Baghi , 2020 +# Omid Zarin , 2019 +# Xavier Ordoquy , 2020 msgid "" msgstr "" "Project-Id-Version: Django REST framework\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-07-12 16:13+0100\n" -"PO-Revision-Date: 2016-07-12 15:14+0000\n" -"Last-Translator: Thomas Christie \n" +"POT-Creation-Date: 2020-10-13 21:45+0200\n" +"PO-Revision-Date: 2020-10-13 19:58+0000\n" +"Last-Translator: Xavier Ordoquy \n" "Language-Team: Persian (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/fa/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: fa\n" -"Plural-Forms: nplurals=1; plural=0;\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: authentication.py:70 +msgid "Invalid basic header. No credentials provided." +msgstr "هدر اولیه نامعتبر است. اطلاعات هویتی ارائه نشده است." #: authentication.py:73 -msgid "Invalid basic header. No credentials provided." -msgstr "" - -#: authentication.py:76 msgid "Invalid basic header. Credentials string should not contain spaces." -msgstr "" +msgstr "هدر اولیه نامعتبر است. رشته ی اطلاعات هویتی نباید شامل فاصله باشد." -#: authentication.py:82 +#: authentication.py:83 msgid "Invalid basic header. Credentials not correctly base64 encoded." -msgstr "" +msgstr "هدر اولیه نامعتبر است. اطلاعات هویتی با متد base64 به درستی رمزنگاری نشده است." -#: authentication.py:99 +#: authentication.py:101 msgid "Invalid username/password." -msgstr "" +msgstr "نام کاربری/رمز‌عبور نامعتبر است." -#: authentication.py:102 authentication.py:198 +#: authentication.py:104 authentication.py:206 msgid "User inactive or deleted." -msgstr "" +msgstr "کاربر غیر فعال یا حذف شده است." -#: authentication.py:176 +#: authentication.py:184 msgid "Invalid token header. No credentials provided." -msgstr "" +msgstr "توکن هدر نامعتبر است. اطلاعات هویتی ارائه نشده است. " -#: authentication.py:179 +#: authentication.py:187 msgid "Invalid token header. Token string should not contain spaces." -msgstr "" +msgstr "توکن هدر نامعتبر است. توکن نباید شامل فضای خالی باشد." -#: authentication.py:185 +#: authentication.py:193 msgid "" "Invalid token header. Token string should not contain invalid characters." -msgstr "" +msgstr "توکن هدر نامعتبر است. توکن شامل کاراکتر‌های نامعتبر است." -#: authentication.py:195 +#: authentication.py:203 msgid "Invalid token." -msgstr "" +msgstr "توکن هدر نامعتبر است. " #: authtoken/apps.py:7 msgid "Auth Token" -msgstr "" +msgstr "توکن اعتبار‌سنجی" -#: authtoken/models.py:15 +#: authtoken/models.py:13 msgid "Key" -msgstr "" +msgstr "کلید" + +#: authtoken/models.py:16 +msgid "User" +msgstr "کاربر" #: authtoken/models.py:18 -msgid "User" -msgstr "" - -#: authtoken/models.py:20 msgid "Created" -msgstr "" +msgstr "ایجاد‌شد" -#: authtoken/models.py:29 +#: authtoken/models.py:27 authtoken/serializers.py:19 msgid "Token" -msgstr "" +msgstr "توکن" -#: authtoken/models.py:30 +#: authtoken/models.py:28 msgid "Tokens" -msgstr "" - -#: authtoken/serializers.py:8 -msgid "Username" -msgstr "" +msgstr "توکن‌ها" #: authtoken/serializers.py:9 +msgid "Username" +msgstr "نام‌کاربری" + +#: authtoken/serializers.py:13 msgid "Password" -msgstr "" +msgstr "رمز‌عبور" -#: authtoken/serializers.py:20 -msgid "User account is disabled." -msgstr "" - -#: authtoken/serializers.py:23 +#: authtoken/serializers.py:35 msgid "Unable to log in with provided credentials." -msgstr "" +msgstr "با اطلاعات ارسال شده نمیتوان وارد شد." -#: authtoken/serializers.py:26 +#: authtoken/serializers.py:38 msgid "Must include \"username\" and \"password\"." -msgstr "" +msgstr "باید شامل نام‌کاربری و رمز‌عبود باشد." -#: exceptions.py:49 +#: exceptions.py:102 msgid "A server error occurred." +msgstr "خطای سمت سرور رخ داده است." + +#: exceptions.py:142 +msgid "Invalid input." msgstr "" -#: exceptions.py:84 +#: exceptions.py:161 msgid "Malformed request." -msgstr "" +msgstr "درخواست ناقص." -#: exceptions.py:89 +#: exceptions.py:167 msgid "Incorrect authentication credentials." -msgstr "" +msgstr "اطلاعات احراز هویت صحیح نیست." -#: exceptions.py:94 +#: exceptions.py:173 msgid "Authentication credentials were not provided." -msgstr "" +msgstr "اطلاعات برای اعتبارسنجی ارسال نشده است." -#: exceptions.py:99 +#: exceptions.py:179 msgid "You do not have permission to perform this action." -msgstr "" +msgstr "شما اجازه انجام این دستور را ندارید." -#: exceptions.py:104 views.py:81 +#: exceptions.py:185 msgid "Not found." -msgstr "" +msgstr "یافت نشد." -#: exceptions.py:109 +#: exceptions.py:191 +#, python-brace-format msgid "Method \"{method}\" not allowed." -msgstr "" +msgstr "متد {method} مجاز نیست." -#: exceptions.py:120 +#: exceptions.py:202 msgid "Could not satisfy the request Accept header." -msgstr "" +msgstr "نوع محتوای درخواستی در هدر قابل قبول نیست." -#: exceptions.py:132 +#: exceptions.py:212 +#, python-brace-format msgid "Unsupported media type \"{media_type}\" in request." -msgstr "" +msgstr "نوع رسانه {media_type} در درخواست پشتیبانی نمیشود." -#: exceptions.py:145 +#: exceptions.py:223 msgid "Request was throttled." +msgstr "تعداد درخواست‌های شما محدود شده است." + +#: exceptions.py:224 +#, python-brace-format +msgid "Expected available in {wait} second." msgstr "" -#: fields.py:269 relations.py:206 relations.py:239 validators.py:98 -#: validators.py:181 +#: exceptions.py:225 +#, python-brace-format +msgid "Expected available in {wait} seconds." +msgstr "" + +#: fields.py:316 relations.py:245 relations.py:279 validators.py:90 +#: validators.py:183 msgid "This field is required." -msgstr "" +msgstr "این مقدار لازم است." -#: fields.py:270 +#: fields.py:317 msgid "This field may not be null." +msgstr "این مقدار نباید توهی باشد." + +#: fields.py:701 +msgid "Must be a valid boolean." msgstr "" -#: fields.py:608 fields.py:639 -msgid "\"{input}\" is not a valid boolean." +#: fields.py:766 +msgid "Not a valid string." msgstr "" -#: fields.py:674 +#: fields.py:767 msgid "This field may not be blank." -msgstr "" +msgstr "این مقدار نباید خالی باشد." -#: fields.py:675 fields.py:1675 +#: fields.py:768 fields.py:1881 +#, python-brace-format msgid "Ensure this field has no more than {max_length} characters." -msgstr "" +msgstr "مطمعن شوید طول این مقدار بیشتر از {max_length} نیست." -#: fields.py:676 +#: fields.py:769 +#, python-brace-format msgid "Ensure this field has at least {min_length} characters." -msgstr "" +msgstr "مطمعن شوید طول این مقدار حداقل {min_length} است." -#: fields.py:713 +#: fields.py:816 msgid "Enter a valid email address." -msgstr "" +msgstr "پست الکترونیکی صحبح وارد کنید." -#: fields.py:724 +#: fields.py:827 msgid "This value does not match the required pattern." -msgstr "" +msgstr "مقدار وارد شده با الگو مطابقت ندارد." -#: fields.py:735 +#: fields.py:838 msgid "" "Enter a valid \"slug\" consisting of letters, numbers, underscores or " "hyphens." +msgstr "یک \"slug\" معتبر شامل حروف، اعداد، آندرلاین یا خط فاصله وارد کنید" + +#: fields.py:839 +msgid "" +"Enter a valid \"slug\" consisting of Unicode letters, numbers, underscores, " +"or hyphens." msgstr "" -#: fields.py:747 +#: fields.py:854 msgid "Enter a valid URL." +msgstr "یک URL معتبر وارد کنید" + +#: fields.py:867 +msgid "Must be a valid UUID." msgstr "" -#: fields.py:760 -msgid "\"{value}\" is not a valid UUID." -msgstr "" - -#: fields.py:796 +#: fields.py:903 msgid "Enter a valid IPv4 or IPv6 address." -msgstr "" +msgstr "یک آدرس IPv4 یا IPv6 معتبر وارد کنید." -#: fields.py:821 +#: fields.py:931 msgid "A valid integer is required." -msgstr "" +msgstr "یک مقدار عددی معتبر لازم است." -#: fields.py:822 fields.py:857 fields.py:891 +#: fields.py:932 fields.py:969 fields.py:1005 fields.py:1366 +#, python-brace-format msgid "Ensure this value is less than or equal to {max_value}." -msgstr "" +msgstr "این مقدار باید کوچکتر یا مساوی با {max_value} باشد." -#: fields.py:823 fields.py:858 fields.py:892 +#: fields.py:933 fields.py:970 fields.py:1006 fields.py:1367 +#, python-brace-format msgid "Ensure this value is greater than or equal to {min_value}." -msgstr "" +msgstr "این مقدار باید بزرگتر یا مساوی با {min_value} باشد." -#: fields.py:824 fields.py:859 fields.py:896 +#: fields.py:934 fields.py:971 fields.py:1010 msgid "String value too large." -msgstr "" +msgstr "رشته بسیار طولانی است." -#: fields.py:856 fields.py:890 +#: fields.py:968 fields.py:1004 msgid "A valid number is required." -msgstr "" +msgstr "یک عدد معتبر نیاز است." -#: fields.py:893 +#: fields.py:1007 +#, python-brace-format msgid "Ensure that there are no more than {max_digits} digits in total." -msgstr "" +msgstr "بیشتر از {max_digits} رقم نباید وجود داشته باشد." -#: fields.py:894 +#: fields.py:1008 +#, python-brace-format msgid "" "Ensure that there are no more than {max_decimal_places} decimal places." -msgstr "" +msgstr "بیشتر از {max_decimal_places} ممیز اعشار نباید وجود داشته باشد" -#: fields.py:895 +#: fields.py:1009 +#, python-brace-format msgid "" "Ensure that there are no more than {max_whole_digits} digits before the " "decimal point." -msgstr "" +msgstr "بیشتر از {max_whole_digits} رقم نباید قبل از ممیز اعشار باشد." -#: fields.py:1025 +#: fields.py:1148 +#, python-brace-format msgid "Datetime has wrong format. Use one of these formats instead: {format}." -msgstr "" +msgstr "فرمت Datetime اشتباه است. از یکی از این فرمت ها استفاده کنید: {format}." -#: fields.py:1026 +#: fields.py:1149 msgid "Expected a datetime but got a date." +msgstr "باید datetime باشد اما date دریافت شد." + +#: fields.py:1150 +#, python-brace-format +msgid "Invalid datetime for the timezone \"{timezone}\"." msgstr "" -#: fields.py:1103 +#: fields.py:1151 +msgid "Datetime value out of range." +msgstr "" + +#: fields.py:1236 +#, python-brace-format msgid "Date has wrong format. Use one of these formats instead: {format}." -msgstr "" +msgstr "فرمت تاریخ اشتباه است. از یکی از این فرمت ها استفاده کنید: {format}." -#: fields.py:1104 +#: fields.py:1237 msgid "Expected a date but got a datetime." -msgstr "" +msgstr "باید date باشد اما datetime دریافت شد." -#: fields.py:1170 +#: fields.py:1303 +#, python-brace-format msgid "Time has wrong format. Use one of these formats instead: {format}." -msgstr "" +msgstr "فرمت Time اشتباه است. از یکی از این فرمت ها استفاده کنید: {format}." -#: fields.py:1232 +#: fields.py:1365 +#, python-brace-format msgid "Duration has wrong format. Use one of these formats instead: {format}." -msgstr "" +msgstr "فرمت Duration اشتباه است. از یکی از این فرمت ها استفاده کنید: {format}." -#: fields.py:1251 fields.py:1300 +#: fields.py:1399 fields.py:1456 +#, python-brace-format msgid "\"{input}\" is not a valid choice." -msgstr "" +msgstr "\"{input}\" یک انتخاب معتبر نیست." -#: fields.py:1254 relations.py:71 relations.py:441 +#: fields.py:1402 +#, python-brace-format msgid "More than {count} items..." -msgstr "" +msgstr "بیشتر از {count} آیتم..." -#: fields.py:1301 fields.py:1448 relations.py:437 serializers.py:524 +#: fields.py:1457 fields.py:1603 relations.py:485 serializers.py:570 +#, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." -msgstr "" +msgstr "باید یک لیست از مقادیر ارسال شود اما یک «{input_type}» دریافت شد." -#: fields.py:1302 +#: fields.py:1458 msgid "This selection may not be empty." -msgstr "" +msgstr "این بخش نمی‌تواند خالی باشد." -#: fields.py:1339 +#: fields.py:1495 +#, python-brace-format msgid "\"{input}\" is not a valid path choice." -msgstr "" +msgstr "\"{input}\" یک مسیر انتخاب معتبر نیست." -#: fields.py:1358 +#: fields.py:1514 msgid "No file was submitted." -msgstr "" +msgstr "فایلی ارسال نشده است." -#: fields.py:1359 +#: fields.py:1515 msgid "" "The submitted data was not a file. Check the encoding type on the form." -msgstr "" +msgstr "دیتای ارسال شده فایل نیست. encoding type فرم را چک کنید." -#: fields.py:1360 +#: fields.py:1516 msgid "No filename could be determined." -msgstr "" +msgstr "اسم فایل مشخص نیست." -#: fields.py:1361 +#: fields.py:1517 msgid "The submitted file is empty." -msgstr "" +msgstr "فایل ارسال شده خالی است." -#: fields.py:1362 +#: fields.py:1518 +#, python-brace-format msgid "" "Ensure this filename has at most {max_length} characters (it has {length})." -msgstr "" +msgstr "نام این فایل باید حداکثر {max_length} کاراکتر باشد ({length} کاراکتر دارد)." -#: fields.py:1410 +#: fields.py:1566 msgid "" "Upload a valid image. The file you uploaded was either not an image or a " "corrupted image." -msgstr "" +msgstr "یک عکس معتبر آپلود کنید. فایلی که ارسال کردید عکس یا عکس خراب شده نیست" -#: fields.py:1449 relations.py:438 serializers.py:525 +#: fields.py:1604 relations.py:486 serializers.py:571 msgid "This list may not be empty." +msgstr "این لیست نمی تواند خالی باشد" + +#: fields.py:1605 +#, python-brace-format +msgid "Ensure this field has at least {min_length} elements." msgstr "" -#: fields.py:1502 +#: fields.py:1606 +#, python-brace-format +msgid "Ensure this field has no more than {max_length} elements." +msgstr "" + +#: fields.py:1682 +#, python-brace-format msgid "Expected a dictionary of items but got type \"{input_type}\"." +msgstr "باید دیکشنری از آیتم ها ارسال می شد، اما \"{input_type}\" ارسال شده است." + +#: fields.py:1683 +msgid "This dictionary may not be empty." msgstr "" -#: fields.py:1549 +#: fields.py:1755 msgid "Value must be valid JSON." +msgstr "مقدار باید JSON معتبر باشد." + +#: filters.py:49 templates/rest_framework/filters/search.html:2 +msgid "Search" +msgstr "جستجو" + +#: filters.py:50 +msgid "A search term." msgstr "" -#: filters.py:36 templates/rest_framework/filters/django_filter.html:5 -msgid "Submit" +#: filters.py:180 templates/rest_framework/filters/ordering.html:3 +msgid "Ordering" +msgstr "ترتیب" + +#: filters.py:181 +msgid "Which field to use when ordering the results." msgstr "" -#: filters.py:336 +#: filters.py:287 msgid "ascending" -msgstr "" +msgstr "صعودی" -#: filters.py:337 +#: filters.py:288 msgid "descending" +msgstr "نزولی" + +#: pagination.py:174 +msgid "A page number within the paginated result set." msgstr "" -#: pagination.py:193 +#: pagination.py:179 pagination.py:372 pagination.py:590 +msgid "Number of results to return per page." +msgstr "" + +#: pagination.py:189 msgid "Invalid page." +msgstr "صفحه نامعتبر" + +#: pagination.py:374 +msgid "The initial index from which to return the results." msgstr "" -#: pagination.py:427 +#: pagination.py:581 +msgid "The pagination cursor value." +msgstr "" + +#: pagination.py:583 msgid "Invalid cursor" -msgstr "" +msgstr "مکان نمای نامعتبر" -#: relations.py:207 +#: relations.py:246 +#, python-brace-format msgid "Invalid pk \"{pk_value}\" - object does not exist." -msgstr "" +msgstr "pk نامعتبر \"{pk_value}\" - این Object وجود ندارد" -#: relations.py:208 +#: relations.py:247 +#, python-brace-format msgid "Incorrect type. Expected pk value, received {data_type}." -msgstr "" +msgstr "تایپ نامعتبر. باید pk ارسال می شد اما {data_type} ارسال شده است." -#: relations.py:240 +#: relations.py:280 msgid "Invalid hyperlink - No URL match." -msgstr "" +msgstr "هایپرلینک نامعتبر - URL مطابق وجود ندارد" -#: relations.py:241 +#: relations.py:281 msgid "Invalid hyperlink - Incorrect URL match." -msgstr "" +msgstr "هایپرلینک نامعتبر - خطا در تطابق URL" -#: relations.py:242 +#: relations.py:282 msgid "Invalid hyperlink - Object does not exist." -msgstr "" +msgstr "هایپرلینک نامعبتر - Object وجود ندارد." -#: relations.py:243 +#: relations.py:283 +#, python-brace-format msgid "Incorrect type. Expected URL string, received {data_type}." -msgstr "" +msgstr "داده نامعتبر. باید رشته ی URL باشد، اما {data_type} دریافت شد." -#: relations.py:401 +#: relations.py:448 +#, python-brace-format msgid "Object with {slug_name}={value} does not exist." -msgstr "" +msgstr "Object با {slug_name}={value} وجود ندارد." -#: relations.py:402 +#: relations.py:449 msgid "Invalid value." +msgstr "مقدار نامعتبر." + +#: schemas/utils.py:32 +msgid "unique integer value" msgstr "" -#: serializers.py:326 -msgid "Invalid data. Expected a dictionary, but got {datatype}." +#: schemas/utils.py:34 +msgid "UUID string" msgstr "" +#: schemas/utils.py:36 +msgid "unique value" +msgstr "" + +#: schemas/utils.py:38 +#, python-brace-format +msgid "A {value_type} identifying this {name}." +msgstr "" + +#: serializers.py:337 +#, python-brace-format +msgid "Invalid data. Expected a dictionary, but got {datatype}." +msgstr "داده نامعتبر. باید دیکشنری ارسال می شد، اما {datatype} ارسال شده است." + #: templates/rest_framework/admin.html:116 -#: templates/rest_framework/base.html:128 +#: templates/rest_framework/base.html:136 +msgid "Extra Actions" +msgstr "" + +#: templates/rest_framework/admin.html:130 +#: templates/rest_framework/base.html:150 msgid "Filters" +msgstr "فیلترها" + +#: templates/rest_framework/base.html:37 +msgid "navbar" msgstr "" -#: templates/rest_framework/filters/django_filter.html:2 -#: templates/rest_framework/filters/django_filter_crispyforms.html:4 -msgid "Field filters" +#: templates/rest_framework/base.html:75 +msgid "content" msgstr "" -#: templates/rest_framework/filters/ordering.html:3 -msgid "Ordering" +#: templates/rest_framework/base.html:78 +msgid "request form" msgstr "" -#: templates/rest_framework/filters/search.html:2 -msgid "Search" +#: templates/rest_framework/base.html:157 +msgid "main content" msgstr "" -#: templates/rest_framework/horizontal/radio.html:2 -#: templates/rest_framework/inline/radio.html:2 -#: templates/rest_framework/vertical/radio.html:2 +#: templates/rest_framework/base.html:173 +msgid "request info" +msgstr "" + +#: templates/rest_framework/base.html:177 +msgid "response info" +msgstr "" + +#: templates/rest_framework/horizontal/radio.html:4 +#: templates/rest_framework/inline/radio.html:3 +#: templates/rest_framework/vertical/radio.html:3 msgid "None" -msgstr "" +msgstr "None" -#: templates/rest_framework/horizontal/select_multiple.html:2 -#: templates/rest_framework/inline/select_multiple.html:2 -#: templates/rest_framework/vertical/select_multiple.html:2 +#: templates/rest_framework/horizontal/select_multiple.html:4 +#: templates/rest_framework/inline/select_multiple.html:3 +#: templates/rest_framework/vertical/select_multiple.html:3 msgid "No items to select." -msgstr "" +msgstr "آیتمی برای انتخاب وجود ندارد" -#: validators.py:43 +#: validators.py:39 msgid "This field must be unique." -msgstr "" +msgstr "این فیلد باید یکتا باشد" -#: validators.py:97 +#: validators.py:89 +#, python-brace-format msgid "The fields {field_names} must make a unique set." +msgstr "فیلدهای {field_names} باید یک مجموعه یکتا باشند." + +#: validators.py:171 +#, python-brace-format +msgid "Surrogate characters are not allowed: U+{code_point:X}." msgstr "" -#: validators.py:245 +#: validators.py:243 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" date." -msgstr "" +msgstr "این فیلد باید برای تاریخ \"{date_field}\" یکتا باشد." -#: validators.py:260 +#: validators.py:258 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" month." -msgstr "" +msgstr "این فیلد باید برای ماه \"{date_field}\" یکتا باشد." -#: validators.py:273 +#: validators.py:271 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" year." -msgstr "" +msgstr "این فیلد باید برای سال \"{date_field}\" یکتا باشد." -#: versioning.py:42 +#: versioning.py:40 msgid "Invalid version in \"Accept\" header." -msgstr "" +msgstr "ورژن نامعتبر در هدر \"Accept\"." -#: versioning.py:73 +#: versioning.py:71 msgid "Invalid version in URL path." -msgstr "" +msgstr "ورژن نامعتبر در مسیر URL." -#: versioning.py:115 +#: versioning.py:116 msgid "Invalid version in URL path. Does not match any version namespace." -msgstr "" +msgstr "ورژن نامعتبر در مسیر URL. با هیچ نام گذاری ورژنی تطابق ندارد." -#: versioning.py:147 +#: versioning.py:148 msgid "Invalid version in hostname." -msgstr "" +msgstr "نسخه نامعتبر در نام هاست" -#: versioning.py:169 +#: versioning.py:170 msgid "Invalid version in query parameter." -msgstr "" - -#: views.py:88 -msgid "Permission denied." -msgstr "" +msgstr "ورژن نامعتبر در پارامتر کوئری." diff --git a/rest_framework/locale/fa_IR/LC_MESSAGES/django.mo b/rest_framework/locale/fa_IR/LC_MESSAGES/django.mo index 1f72e1090f6e667d41ee4f925ea7f9a0f51b6f6d..52d3f3bf84e43fd3972255b9ae363c56677e4d00 100644 GIT binary patch literal 11989 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, 2020 +# Aryan Baghi , 2020 +# Omid Zarin , 2019 +# Xavier Ordoquy , 2020 msgid "" msgstr "" "Project-Id-Version: Django REST framework\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-07-12 16:13+0100\n" -"PO-Revision-Date: 2016-07-12 15:14+0000\n" -"Last-Translator: Thomas Christie \n" +"POT-Creation-Date: 2020-10-13 21:45+0200\n" +"PO-Revision-Date: 2020-10-13 19:59+0000\n" +"Last-Translator: Xavier Ordoquy \n" "Language-Team: Persian (Iran) (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/fa_IR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: fa_IR\n" -"Plural-Forms: nplurals=1; plural=0;\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" + +#: authentication.py:70 +msgid "Invalid basic header. No credentials provided." +msgstr "هدر اولیه نامعتبر است. اطلاعات هویتی ارائه نشده است." #: authentication.py:73 -msgid "Invalid basic header. No credentials provided." -msgstr "" - -#: authentication.py:76 msgid "Invalid basic header. Credentials string should not contain spaces." -msgstr "" +msgstr "هدر اولیه نامعتبر است. رشته ی اطلاعات هویتی نباید شامل فاصله باشد." -#: authentication.py:82 +#: authentication.py:83 msgid "Invalid basic header. Credentials not correctly base64 encoded." -msgstr "" +msgstr "هدر اولیه نامعتبر است. اطلاعات هویتی با متد base64 به درستی رمزنگاری نشده است." -#: authentication.py:99 +#: authentication.py:101 msgid "Invalid username/password." -msgstr "" +msgstr "نام کاربری/رمز‌عبور نامعتبر است." -#: authentication.py:102 authentication.py:198 +#: authentication.py:104 authentication.py:206 msgid "User inactive or deleted." -msgstr "" +msgstr "کاربر غیر فعال یا حذف شده است." -#: authentication.py:176 +#: authentication.py:184 msgid "Invalid token header. No credentials provided." -msgstr "" +msgstr "توکن هدر نامعتبر است. اطلاعات هویتی ارائه نشده است. " -#: authentication.py:179 +#: authentication.py:187 msgid "Invalid token header. Token string should not contain spaces." -msgstr "" +msgstr "توکن هدر نامعتبر است. توکن نباید شامل فضای خالی باشد." -#: authentication.py:185 +#: authentication.py:193 msgid "" "Invalid token header. Token string should not contain invalid characters." -msgstr "" +msgstr "توکن هدر نامعتبر است. توکن شامل کاراکتر‌های نامعتبر است." -#: authentication.py:195 +#: authentication.py:203 msgid "Invalid token." -msgstr "" +msgstr "توکن هدر نامعتبر است. " #: authtoken/apps.py:7 msgid "Auth Token" -msgstr "" +msgstr "توکن اعتبار‌سنجی" -#: authtoken/models.py:15 +#: authtoken/models.py:13 msgid "Key" -msgstr "" +msgstr "کلید" + +#: authtoken/models.py:16 +msgid "User" +msgstr "کاربر" #: authtoken/models.py:18 -msgid "User" -msgstr "" - -#: authtoken/models.py:20 msgid "Created" -msgstr "" +msgstr "ایجاد‌شد" -#: authtoken/models.py:29 +#: authtoken/models.py:27 authtoken/serializers.py:19 msgid "Token" -msgstr "" +msgstr "توکن" -#: authtoken/models.py:30 +#: authtoken/models.py:28 msgid "Tokens" -msgstr "" - -#: authtoken/serializers.py:8 -msgid "Username" -msgstr "" +msgstr "توکن‌ها" #: authtoken/serializers.py:9 +msgid "Username" +msgstr "نام‌کاربری" + +#: authtoken/serializers.py:13 msgid "Password" -msgstr "" +msgstr "رمز‌عبور" -#: authtoken/serializers.py:20 -msgid "User account is disabled." -msgstr "" - -#: authtoken/serializers.py:23 +#: authtoken/serializers.py:35 msgid "Unable to log in with provided credentials." -msgstr "" +msgstr "با اطلاعات ارسال شده نمیتوان وارد شد." -#: authtoken/serializers.py:26 +#: authtoken/serializers.py:38 msgid "Must include \"username\" and \"password\"." -msgstr "" +msgstr "باید شامل نام‌کاربری و رمز‌عبود باشد." -#: exceptions.py:49 +#: exceptions.py:102 msgid "A server error occurred." +msgstr "خطای سمت سرور رخ داده است." + +#: exceptions.py:142 +msgid "Invalid input." msgstr "" -#: exceptions.py:84 +#: exceptions.py:161 msgid "Malformed request." -msgstr "" +msgstr "درخواست ناقص." -#: exceptions.py:89 +#: exceptions.py:167 msgid "Incorrect authentication credentials." -msgstr "" +msgstr "اطلاعات احراز هویت صحیح نیست." -#: exceptions.py:94 +#: exceptions.py:173 msgid "Authentication credentials were not provided." -msgstr "" +msgstr "اطلاعات برای اعتبارسنجی ارسال نشده است." -#: exceptions.py:99 +#: exceptions.py:179 msgid "You do not have permission to perform this action." -msgstr "" +msgstr "شما اجازه انجام این دستور را ندارید." -#: exceptions.py:104 views.py:81 +#: exceptions.py:185 msgid "Not found." -msgstr "" +msgstr "یافت نشد." -#: exceptions.py:109 +#: exceptions.py:191 +#, python-brace-format msgid "Method \"{method}\" not allowed." -msgstr "" +msgstr "متد {method} مجاز نیست." -#: exceptions.py:120 +#: exceptions.py:202 msgid "Could not satisfy the request Accept header." -msgstr "" +msgstr "نوع محتوای درخواستی در هدر قابل قبول نیست." -#: exceptions.py:132 +#: exceptions.py:212 +#, python-brace-format msgid "Unsupported media type \"{media_type}\" in request." -msgstr "" +msgstr "نوع رسانه {media_type} در درخواست پشتیبانی نمیشود." -#: exceptions.py:145 +#: exceptions.py:223 msgid "Request was throttled." +msgstr "تعداد درخواست‌های شما محدود شده است." + +#: exceptions.py:224 +#, python-brace-format +msgid "Expected available in {wait} second." msgstr "" -#: fields.py:269 relations.py:206 relations.py:239 validators.py:98 -#: validators.py:181 +#: exceptions.py:225 +#, python-brace-format +msgid "Expected available in {wait} seconds." +msgstr "" + +#: fields.py:316 relations.py:245 relations.py:279 validators.py:90 +#: validators.py:183 msgid "This field is required." -msgstr "" +msgstr "این مقدار لازم است." -#: fields.py:270 +#: fields.py:317 msgid "This field may not be null." +msgstr "این مقدار نباید توهی باشد." + +#: fields.py:701 +msgid "Must be a valid boolean." msgstr "" -#: fields.py:608 fields.py:639 -msgid "\"{input}\" is not a valid boolean." +#: fields.py:766 +msgid "Not a valid string." msgstr "" -#: fields.py:674 +#: fields.py:767 msgid "This field may not be blank." -msgstr "" +msgstr "این مقدار نباید خالی باشد." -#: fields.py:675 fields.py:1675 +#: fields.py:768 fields.py:1881 +#, python-brace-format msgid "Ensure this field has no more than {max_length} characters." -msgstr "" +msgstr "مطمعن شوید طول این مقدار بیشتر از {max_length} نیست." -#: fields.py:676 +#: fields.py:769 +#, python-brace-format msgid "Ensure this field has at least {min_length} characters." -msgstr "" +msgstr "مطمعن شوید طول این مقدار حداقل {min_length} است." -#: fields.py:713 +#: fields.py:816 msgid "Enter a valid email address." -msgstr "" +msgstr "پست الکترونیکی صحبح وارد کنید." -#: fields.py:724 +#: fields.py:827 msgid "This value does not match the required pattern." -msgstr "" +msgstr "مقدار وارد شده با الگو مطابقت ندارد." -#: fields.py:735 +#: fields.py:838 msgid "" "Enter a valid \"slug\" consisting of letters, numbers, underscores or " "hyphens." +msgstr "یک \"slug\" معتبر شامل حروف، اعداد، آندرلاین یا خط فاصله وارد کنید" + +#: fields.py:839 +msgid "" +"Enter a valid \"slug\" consisting of Unicode letters, numbers, underscores, " +"or hyphens." msgstr "" -#: fields.py:747 +#: fields.py:854 msgid "Enter a valid URL." +msgstr "یک URL معتبر وارد کنید" + +#: fields.py:867 +msgid "Must be a valid UUID." msgstr "" -#: fields.py:760 -msgid "\"{value}\" is not a valid UUID." -msgstr "" - -#: fields.py:796 +#: fields.py:903 msgid "Enter a valid IPv4 or IPv6 address." -msgstr "" +msgstr "یک آدرس IPv4 یا IPv6 معتبر وارد کنید." -#: fields.py:821 +#: fields.py:931 msgid "A valid integer is required." -msgstr "" +msgstr "یک مقدار عددی معتبر لازم است." -#: fields.py:822 fields.py:857 fields.py:891 +#: fields.py:932 fields.py:969 fields.py:1005 fields.py:1366 +#, python-brace-format msgid "Ensure this value is less than or equal to {max_value}." -msgstr "" +msgstr "این مقدار باید کوچکتر یا مساوی با {max_value} باشد." -#: fields.py:823 fields.py:858 fields.py:892 +#: fields.py:933 fields.py:970 fields.py:1006 fields.py:1367 +#, python-brace-format msgid "Ensure this value is greater than or equal to {min_value}." -msgstr "" +msgstr "این مقدار باید بزرگتر یا مساوی با {min_value} باشد." -#: fields.py:824 fields.py:859 fields.py:896 +#: fields.py:934 fields.py:971 fields.py:1010 msgid "String value too large." -msgstr "" +msgstr "رشته بسیار طولانی است." -#: fields.py:856 fields.py:890 +#: fields.py:968 fields.py:1004 msgid "A valid number is required." -msgstr "" +msgstr "یک عدد معتبر نیاز است." -#: fields.py:893 +#: fields.py:1007 +#, python-brace-format msgid "Ensure that there are no more than {max_digits} digits in total." -msgstr "" +msgstr "بیشتر از {max_digits} رقم نباید وجود داشته باشد." -#: fields.py:894 +#: fields.py:1008 +#, python-brace-format msgid "" "Ensure that there are no more than {max_decimal_places} decimal places." -msgstr "" +msgstr "بیشتر از {max_decimal_places} ممیز اعشار نباید وجود داشته باشد" -#: fields.py:895 +#: fields.py:1009 +#, python-brace-format msgid "" "Ensure that there are no more than {max_whole_digits} digits before the " "decimal point." -msgstr "" +msgstr "بیشتر از {max_whole_digits} رقم نباید قبل از ممیز اعشار باشد." -#: fields.py:1025 +#: fields.py:1148 +#, python-brace-format msgid "Datetime has wrong format. Use one of these formats instead: {format}." -msgstr "" +msgstr "فرمت Datetime اشتباه است. از یکی از این فرمت ها استفاده کنید: {format}." -#: fields.py:1026 +#: fields.py:1149 msgid "Expected a datetime but got a date." +msgstr "باید datetime باشد اما date دریافت شد." + +#: fields.py:1150 +#, python-brace-format +msgid "Invalid datetime for the timezone \"{timezone}\"." msgstr "" -#: fields.py:1103 +#: fields.py:1151 +msgid "Datetime value out of range." +msgstr "" + +#: fields.py:1236 +#, python-brace-format msgid "Date has wrong format. Use one of these formats instead: {format}." -msgstr "" +msgstr "فرمت تاریخ اشتباه است. از یکی از این فرمت ها استفاده کنید: {format}." -#: fields.py:1104 +#: fields.py:1237 msgid "Expected a date but got a datetime." -msgstr "" +msgstr "باید date باشد اما datetime دریافت شد." -#: fields.py:1170 +#: fields.py:1303 +#, python-brace-format msgid "Time has wrong format. Use one of these formats instead: {format}." -msgstr "" +msgstr "فرمت Time اشتباه است. از یکی از این فرمت ها استفاده کنید: {format}." -#: fields.py:1232 +#: fields.py:1365 +#, python-brace-format msgid "Duration has wrong format. Use one of these formats instead: {format}." -msgstr "" +msgstr "فرمت Duration اشتباه است. از یکی از این فرمت ها استفاده کنید: {format}." -#: fields.py:1251 fields.py:1300 +#: fields.py:1399 fields.py:1456 +#, python-brace-format msgid "\"{input}\" is not a valid choice." -msgstr "" +msgstr "\"{input}\" یک انتخاب معتبر نیست." -#: fields.py:1254 relations.py:71 relations.py:441 +#: fields.py:1402 +#, python-brace-format msgid "More than {count} items..." -msgstr "" +msgstr "بیشتر از {count} آیتم..." -#: fields.py:1301 fields.py:1448 relations.py:437 serializers.py:524 +#: fields.py:1457 fields.py:1603 relations.py:485 serializers.py:570 +#, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." -msgstr "" +msgstr "باید یک لیست از مقادیر ارسال شود اما یک «{input_type}» دریافت شد." -#: fields.py:1302 +#: fields.py:1458 msgid "This selection may not be empty." -msgstr "" +msgstr "این بخش نمی‌تواند خالی باشد." -#: fields.py:1339 +#: fields.py:1495 +#, python-brace-format msgid "\"{input}\" is not a valid path choice." -msgstr "" +msgstr "\"{input}\" یک مسیر انتخاب معتبر نیست." -#: fields.py:1358 +#: fields.py:1514 msgid "No file was submitted." -msgstr "" +msgstr "فایلی ارسال نشده است." -#: fields.py:1359 +#: fields.py:1515 msgid "" "The submitted data was not a file. Check the encoding type on the form." -msgstr "" +msgstr "دیتای ارسال شده فایل نیست. encoding type فرم را چک کنید." -#: fields.py:1360 +#: fields.py:1516 msgid "No filename could be determined." -msgstr "" +msgstr "اسم فایل مشخص نیست." -#: fields.py:1361 +#: fields.py:1517 msgid "The submitted file is empty." -msgstr "" +msgstr "فایل ارسال شده خالی است." -#: fields.py:1362 +#: fields.py:1518 +#, python-brace-format msgid "" "Ensure this filename has at most {max_length} characters (it has {length})." -msgstr "" +msgstr "نام این فایل باید حداکثر {max_length} کاراکتر باشد ({length} کاراکتر دارد)." -#: fields.py:1410 +#: fields.py:1566 msgid "" "Upload a valid image. The file you uploaded was either not an image or a " "corrupted image." -msgstr "" +msgstr "یک عکس معتبر آپلود کنید. فایلی که ارسال کردید عکس یا عکس خراب شده نیست" -#: fields.py:1449 relations.py:438 serializers.py:525 +#: fields.py:1604 relations.py:486 serializers.py:571 msgid "This list may not be empty." +msgstr "این لیست نمی تواند خالی باشد" + +#: fields.py:1605 +#, python-brace-format +msgid "Ensure this field has at least {min_length} elements." msgstr "" -#: fields.py:1502 +#: fields.py:1606 +#, python-brace-format +msgid "Ensure this field has no more than {max_length} elements." +msgstr "" + +#: fields.py:1682 +#, python-brace-format msgid "Expected a dictionary of items but got type \"{input_type}\"." +msgstr "باید دیکشنری از آیتم ها ارسال می شد، اما \"{input_type}\" ارسال شده است." + +#: fields.py:1683 +msgid "This dictionary may not be empty." msgstr "" -#: fields.py:1549 +#: fields.py:1755 msgid "Value must be valid JSON." +msgstr "مقدار باید JSON معتبر باشد." + +#: filters.py:49 templates/rest_framework/filters/search.html:2 +msgid "Search" +msgstr "جستجو" + +#: filters.py:50 +msgid "A search term." msgstr "" -#: filters.py:36 templates/rest_framework/filters/django_filter.html:5 -msgid "Submit" +#: filters.py:180 templates/rest_framework/filters/ordering.html:3 +msgid "Ordering" +msgstr "ترتیب" + +#: filters.py:181 +msgid "Which field to use when ordering the results." msgstr "" -#: filters.py:336 +#: filters.py:287 msgid "ascending" -msgstr "" +msgstr "صعودی" -#: filters.py:337 +#: filters.py:288 msgid "descending" +msgstr "نزولی" + +#: pagination.py:174 +msgid "A page number within the paginated result set." msgstr "" -#: pagination.py:193 +#: pagination.py:179 pagination.py:372 pagination.py:590 +msgid "Number of results to return per page." +msgstr "" + +#: pagination.py:189 msgid "Invalid page." +msgstr "صفحه نامعتبر" + +#: pagination.py:374 +msgid "The initial index from which to return the results." msgstr "" -#: pagination.py:427 +#: pagination.py:581 +msgid "The pagination cursor value." +msgstr "" + +#: pagination.py:583 msgid "Invalid cursor" -msgstr "" +msgstr "مکان نمای نامعتبر" -#: relations.py:207 +#: relations.py:246 +#, python-brace-format msgid "Invalid pk \"{pk_value}\" - object does not exist." -msgstr "" +msgstr "pk نامعتبر \"{pk_value}\" - این Object وجود ندارد" -#: relations.py:208 +#: relations.py:247 +#, python-brace-format msgid "Incorrect type. Expected pk value, received {data_type}." -msgstr "" +msgstr "تایپ نامعتبر. باید pk ارسال می شد اما {data_type} ارسال شده است." -#: relations.py:240 +#: relations.py:280 msgid "Invalid hyperlink - No URL match." -msgstr "" +msgstr "هایپرلینک نامعتبر - URL مطابق وجود ندارد" -#: relations.py:241 +#: relations.py:281 msgid "Invalid hyperlink - Incorrect URL match." -msgstr "" +msgstr "هایپرلینک نامعتبر - خطا در تطابق URL" -#: relations.py:242 +#: relations.py:282 msgid "Invalid hyperlink - Object does not exist." -msgstr "" +msgstr "هایپرلینک نامعبتر - Object وجود ندارد." -#: relations.py:243 +#: relations.py:283 +#, python-brace-format msgid "Incorrect type. Expected URL string, received {data_type}." -msgstr "" +msgstr "داده نامعتبر. باید رشته ی URL باشد، اما {data_type} دریافت شد." -#: relations.py:401 +#: relations.py:448 +#, python-brace-format msgid "Object with {slug_name}={value} does not exist." -msgstr "" +msgstr "Object با {slug_name}={value} وجود ندارد." -#: relations.py:402 +#: relations.py:449 msgid "Invalid value." +msgstr "مقدار نامعتبر." + +#: schemas/utils.py:32 +msgid "unique integer value" msgstr "" -#: serializers.py:326 -msgid "Invalid data. Expected a dictionary, but got {datatype}." +#: schemas/utils.py:34 +msgid "UUID string" msgstr "" +#: schemas/utils.py:36 +msgid "unique value" +msgstr "" + +#: schemas/utils.py:38 +#, python-brace-format +msgid "A {value_type} identifying this {name}." +msgstr "" + +#: serializers.py:337 +#, python-brace-format +msgid "Invalid data. Expected a dictionary, but got {datatype}." +msgstr "داده نامعتبر. باید دیکشنری ارسال می شد، اما {datatype} ارسال شده است." + #: templates/rest_framework/admin.html:116 -#: templates/rest_framework/base.html:128 +#: templates/rest_framework/base.html:136 +msgid "Extra Actions" +msgstr "" + +#: templates/rest_framework/admin.html:130 +#: templates/rest_framework/base.html:150 msgid "Filters" +msgstr "فیلترها" + +#: templates/rest_framework/base.html:37 +msgid "navbar" msgstr "" -#: templates/rest_framework/filters/django_filter.html:2 -#: templates/rest_framework/filters/django_filter_crispyforms.html:4 -msgid "Field filters" +#: templates/rest_framework/base.html:75 +msgid "content" msgstr "" -#: templates/rest_framework/filters/ordering.html:3 -msgid "Ordering" +#: templates/rest_framework/base.html:78 +msgid "request form" msgstr "" -#: templates/rest_framework/filters/search.html:2 -msgid "Search" +#: templates/rest_framework/base.html:157 +msgid "main content" msgstr "" -#: templates/rest_framework/horizontal/radio.html:2 -#: templates/rest_framework/inline/radio.html:2 -#: templates/rest_framework/vertical/radio.html:2 +#: templates/rest_framework/base.html:173 +msgid "request info" +msgstr "" + +#: templates/rest_framework/base.html:177 +msgid "response info" +msgstr "" + +#: templates/rest_framework/horizontal/radio.html:4 +#: templates/rest_framework/inline/radio.html:3 +#: templates/rest_framework/vertical/radio.html:3 msgid "None" -msgstr "" +msgstr "None" -#: templates/rest_framework/horizontal/select_multiple.html:2 -#: templates/rest_framework/inline/select_multiple.html:2 -#: templates/rest_framework/vertical/select_multiple.html:2 +#: templates/rest_framework/horizontal/select_multiple.html:4 +#: templates/rest_framework/inline/select_multiple.html:3 +#: templates/rest_framework/vertical/select_multiple.html:3 msgid "No items to select." -msgstr "" +msgstr "آیتمی برای انتخاب وجود ندارد" -#: validators.py:43 +#: validators.py:39 msgid "This field must be unique." -msgstr "" +msgstr "این فیلد باید یکتا باشد" -#: validators.py:97 +#: validators.py:89 +#, python-brace-format msgid "The fields {field_names} must make a unique set." +msgstr "فیلدهای {field_names} باید یک مجموعه یکتا باشند." + +#: validators.py:171 +#, python-brace-format +msgid "Surrogate characters are not allowed: U+{code_point:X}." msgstr "" -#: validators.py:245 +#: validators.py:243 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" date." -msgstr "" +msgstr "این فیلد باید برای تاریخ \"{date_field}\" یکتا باشد." -#: validators.py:260 +#: validators.py:258 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" month." -msgstr "" +msgstr "این فیلد باید برای ماه \"{date_field}\" یکتا باشد." -#: validators.py:273 +#: validators.py:271 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" year." -msgstr "" +msgstr "این فیلد باید برای سال \"{date_field}\" یکتا باشد." -#: versioning.py:42 +#: versioning.py:40 msgid "Invalid version in \"Accept\" header." -msgstr "" +msgstr "ورژن نامعتبر در هدر \"Accept\"." -#: versioning.py:73 +#: versioning.py:71 msgid "Invalid version in URL path." -msgstr "" +msgstr "ورژن نامعتبر در مسیر URL." -#: versioning.py:115 +#: versioning.py:116 msgid "Invalid version in URL path. Does not match any version namespace." -msgstr "" +msgstr "ورژن نامعتبر در مسیر URL. با هیچ نام گذاری ورژنی تطابق ندارد." -#: versioning.py:147 +#: versioning.py:148 msgid "Invalid version in hostname." -msgstr "" +msgstr "نسخه نامعتبر در نام هاست" -#: versioning.py:169 +#: versioning.py:170 msgid "Invalid version in query parameter." -msgstr "" - -#: views.py:88 -msgid "Permission denied." -msgstr "" +msgstr "ورژن نامعتبر در پارامتر کوئری." diff --git a/rest_framework/locale/fi/LC_MESSAGES/django.mo b/rest_framework/locale/fi/LC_MESSAGES/django.mo index 67dd26ef2cea382cfe820e3eb19867b8af42aeec..50a6d0f8a9fb01938b54ccd72ef0d55931faf36a 100644 GIT binary patch delta 2472 zcmZ|QZERCj9LMofwy_5h24jPJ1TJAVC*GfH$NuCYX>YDlteR!6g{UB8emtNi;@Z7~;eC*WM-g!jt{`Ip^H= z+;jiuoVz1kqn(MdX_?0irI#pGWEk_RoX7{omt%~DbFm87;7lAueg80);Azam&(M$8 za6aD0Z1m+CvjPLS8i&#*%tb0~ba?o6E4JfCd;=fD+t`T34;j;e8?XUSp|0P;wK#o} zF^^ynr{U|U2_AR*KXUyJHQrxXZxY5VeKS3Ovl7>14IV@O z%;$XQdpFRBlcpF`f%W((ZbF7I2QYwdVGVwY?cCq|N@W=~7_oHr@#7g`gl`&%( zGX*NK5$llOC(Iy~4Rm~n8u(9SW1Dtnp@Di(KRkdM@Ev51=3{KZQPk2Ddehe%QK{}l z{>)C-!>EazM?ZdpRXYEFQ_;YcT-7dZN8TwWh}r`KI0yH-?USfXokjMmNn$2mK~}?j zjasUoP!lX?aFS)Vp_b$o!} zQ<$A5v=uesov5YRg9~s3*WtIQ2dg5jKCH!rQrkm?Yo-siDc;6x{KEAbdT3`5Yl&&Z zcxj`elc1uvoK8>>yP1q$)aY%8tq^La%I1=`JF)94g9c7om;KHZac-I_6qVl_!W+Vv_D(LFmk?um#LhsapDt=2lbx zV6>L2iE_77yIA|-8Mi$bJKg#+h(3tj)n;I~27#qdOvd;`^+oy^(aSb+;Xk4BNq)?U8}zcQ zJSgjpSSv@aNs#Ru$gC~SoW gFONjRVS6aXd{0$haE5(5vLkkXC?1PBW4@Yy0XW$#F8}}l delta 2713 zcmZYATWl0n9LMpqz0d-dVu4Z$ZKti!Vriv9p|;Y}a5lPTf4K3q~J!Q zAcB~0_+SWLzQ5T4A3W)QKIhENocozx zUv_w9{QJC&V}`Vim_)Rv8*>o%4&y>Pm2FHZzKs?R;bgpp#W-TPF$Fjk^?oZ(#LYMY z2e2CV<23vjv+yRi8WT6akXgu$X*?~XxCqbVTud8j%xav6v++1K;#b&)qaHG*0oS2^ zKZfmi1VDWWZp`asRN)z{!#l{IsT`H+=`7TUn@|n)U_GA1X8aoG zVL`4jHMjw}We%a9JC2oj6*ZIh@KG!tO*^!2mXMi_Yfu%uj7#t=&cVRLsS2C1kn&Q$ z?4U;SENWyYkSR6i{PI2j_X!L?o%?f8Gtt6DOV@>QRTw2xfk!YO&!B}@a18#A8JI?a zRWVuk80I0{z_j|dA&;6aR6W~K+vqtQk1zS)KBPbf1dawaiUWwXF z5uAmGP-}eAFW*HCpmtp9xpuTD??83%AbK-`nUwFLI+RB5s&IHd^IuD*jvH%nJ8Gn# z;RL+o`vYpEcl~lY!+D%?5wd^Ha@5SM!vg_hY}A_n#?jE;$)_?c)stx97Njrc`8b(U zGH;?rdd~mhI+jtsjk9nR!_){CU?;ZW(|8iKSN_EL*h(eZj0bQvUd9G2V>(sOM%4YI zsDa0ClhITa6&Vx64%F`a0BPHNgW4N^U=vPa=cu9eI0H|i-oJ*qm{F3Nsj;Ym6`_`( z8C&oLd=fuLj&IxqtkkaWKsKz|i|W}CRKuU*Blt6F3UjDc4b@^JwxBw&4_D%QsPnJs z;{cfsR6Uze@9js`_XZZxzPUiAnHx7yYc+vZ^guIe%6pKX%ue4|kw5bxmukF*dM}Na z^j;+wmfv(B-za0F_Qo?f1^4>pcQBjw&HH53)3eAyFkfH>eupfdxry3*f1%cJ7_F(p zbC6j#`%p`D0@cwosLgi+TQH4QwFlcCxKa1Lb=1Vea=r;0>$zr}buo~6y0BQs; zqV~pXs3|{>%kfv#NE>NYGqVWQfn8iQRBU&buFSIPV(3lPDoH2o4Oh!~Cxxqr?U`3%p!v zT{n>5LM$Sx2=!b^-*%l{{f}5kXvUQ06J5ksLSMnfgwnDU-qL0JdB*Fdjaq+Ap^|p} zJTI5}NN9@J6KTXYLQABxt2I|jC$!PD7uFI=qX|BW-cjyB&8`xM!aH4Ffs0LK5b@1i z_)qDrcLgpb8i{UVCb5dprqTN8c+DY{nuv8??!U`iviU^0e`^yCBiOfIYURr3#!K}n zI=%mR+Js6^5S@f~eoz|-XSeMp?iO9h?6v!1(Znak^?vT3;zg-ka#=}LAhRp7%MK@&mQ?w< zzl*CAKU$>^N{a(s$*$5ZX}M}My2rBVg6r<7Nqkg3E4!WU*ff~@sr;3+yakTcA9386 wwae+-8H~BHVB*k}(*>>*avltIXmF1^bS4@d8mvi7ujtJP#d?E@cPncC1#S{*3;+NC diff --git a/rest_framework/locale/fi/LC_MESSAGES/django.po b/rest_framework/locale/fi/LC_MESSAGES/django.po index 0791a3005..97e5c1394 100644 --- a/rest_framework/locale/fi/LC_MESSAGES/django.po +++ b/rest_framework/locale/fi/LC_MESSAGES/django.po @@ -5,13 +5,14 @@ # Translators: # Aarni Koskela, 2015 # Aarni Koskela, 2015-2016 +# Kimmo Huoman , 2020 msgid "" msgstr "" "Project-Id-Version: Django REST framework\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-07-12 16:13+0100\n" -"PO-Revision-Date: 2017-08-03 14:58+0000\n" -"Last-Translator: Aarni Koskela\n" +"POT-Creation-Date: 2020-10-13 21:45+0200\n" +"PO-Revision-Date: 2020-10-13 19:45+0000\n" +"Last-Translator: Xavier Ordoquy \n" "Language-Team: Finnish (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/fi/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,423 +20,556 @@ msgstr "" "Language: fi\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: authentication.py:73 +#: authentication.py:70 msgid "Invalid basic header. No credentials provided." -msgstr "Epäkelpo perusotsake. Ei annettuja tunnuksia." +msgstr "Epäkelpo \"basic\" -otsake. Ei annettuja tunnuksia." -#: authentication.py:76 +#: authentication.py:73 msgid "Invalid basic header. Credentials string should not contain spaces." -msgstr "Epäkelpo perusotsake. Tunnusmerkkijono ei saa sisältää välilyöntejä." +msgstr "Epäkelpo \"basic\" -otsake. Tunnusmerkkijono ei saa sisältää välilyöntejä." -#: authentication.py:82 +#: authentication.py:83 msgid "Invalid basic header. Credentials not correctly base64 encoded." -msgstr "Epäkelpo perusotsake. Tunnukset eivät ole base64-koodattu." +msgstr "Epäkelpo \"basic\" -otsake. Tunnukset eivät ole base64-koodattu." -#: authentication.py:99 +#: authentication.py:101 msgid "Invalid username/password." msgstr "Epäkelpo käyttäjänimi tai salasana." -#: authentication.py:102 authentication.py:198 +#: authentication.py:104 authentication.py:206 msgid "User inactive or deleted." msgstr "Käyttäjä ei-aktiivinen tai poistettu." -#: authentication.py:176 +#: authentication.py:184 msgid "Invalid token header. No credentials provided." -msgstr "Epäkelpo Token-otsake. Ei annettuja tunnuksia." +msgstr "Epäkelpo \"token\" -otsake. Ei annettuja tunnuksia." -#: authentication.py:179 +#: authentication.py:187 msgid "Invalid token header. Token string should not contain spaces." -msgstr "Epäkelpo Token-otsake. Tunnusmerkkijono ei saa sisältää välilyöntejä." +msgstr "Epäkelpo \"token\" -otsake. Tunnusmerkkijono ei saa sisältää välilyöntejä." -#: authentication.py:185 +#: authentication.py:193 msgid "" "Invalid token header. Token string should not contain invalid characters." -msgstr "Epäkelpo Token-otsake. Tunnusmerkkijono ei saa sisältää epäkelpoja merkkejä." +msgstr "Epäkelpo \"token\" -otsake. Tunnusmerkkijono ei saa sisältää epäkelpoja merkkejä." -#: authentication.py:195 +#: authentication.py:203 msgid "Invalid token." -msgstr "Epäkelpo Token." +msgstr "Epäkelpo token." #: authtoken/apps.py:7 msgid "Auth Token" msgstr "Autentikaatiotunniste" -#: authtoken/models.py:15 +#: authtoken/models.py:13 msgid "Key" msgstr "Avain" -#: authtoken/models.py:18 +#: authtoken/models.py:16 msgid "User" msgstr "Käyttäjä" -#: authtoken/models.py:20 +#: authtoken/models.py:18 msgid "Created" msgstr "Luotu" -#: authtoken/models.py:29 +#: authtoken/models.py:27 authtoken/serializers.py:19 msgid "Token" msgstr "Tunniste" -#: authtoken/models.py:30 +#: authtoken/models.py:28 msgid "Tokens" msgstr "Tunnisteet" -#: authtoken/serializers.py:8 +#: authtoken/serializers.py:9 msgid "Username" msgstr "Käyttäjänimi" -#: authtoken/serializers.py:9 +#: authtoken/serializers.py:13 msgid "Password" msgstr "Salasana" -#: authtoken/serializers.py:20 -msgid "User account is disabled." -msgstr "Käyttäjätili ei ole käytössä." - -#: authtoken/serializers.py:23 +#: authtoken/serializers.py:35 msgid "Unable to log in with provided credentials." -msgstr "Ei voitu kirjautua annetuilla tunnuksilla." +msgstr "Kirjautuminen epäonnistui annetuilla tunnuksilla." -#: authtoken/serializers.py:26 +#: authtoken/serializers.py:38 msgid "Must include \"username\" and \"password\"." msgstr "Pitää sisältää \"username\" ja \"password\"." -#: exceptions.py:49 +#: exceptions.py:102 msgid "A server error occurred." msgstr "Sattui palvelinvirhe." -#: exceptions.py:84 +#: exceptions.py:142 +msgid "Invalid input." +msgstr "" + +#: exceptions.py:161 msgid "Malformed request." msgstr "Pyyntö on virheellisen muotoinen." -#: exceptions.py:89 +#: exceptions.py:167 msgid "Incorrect authentication credentials." msgstr "Väärät autentikaatiotunnukset." -#: exceptions.py:94 +#: exceptions.py:173 msgid "Authentication credentials were not provided." msgstr "Autentikaatiotunnuksia ei annettu." -#: exceptions.py:99 +#: exceptions.py:179 msgid "You do not have permission to perform this action." -msgstr "Sinulla ei ole lupaa suorittaa tätä toimintoa." +msgstr "Sinulla ei ole oikeutta suorittaa tätä toimintoa." -#: exceptions.py:104 views.py:81 +#: exceptions.py:185 msgid "Not found." msgstr "Ei löydy." -#: exceptions.py:109 +#: exceptions.py:191 +#, python-brace-format msgid "Method \"{method}\" not allowed." msgstr "Metodi \"{method}\" ei ole sallittu." -#: exceptions.py:120 +#: exceptions.py:202 msgid "Could not satisfy the request Accept header." msgstr "Ei voitu vastata pyynnön Accept-otsakkeen mukaisesti." -#: exceptions.py:132 +#: exceptions.py:212 +#, python-brace-format msgid "Unsupported media type \"{media_type}\" in request." msgstr "Pyynnön mediatyyppiä \"{media_type}\" ei tueta." -#: exceptions.py:145 +#: exceptions.py:223 msgid "Request was throttled." msgstr "Pyyntö hidastettu." -#: fields.py:269 relations.py:206 relations.py:239 validators.py:98 -#: validators.py:181 +#: exceptions.py:224 +#, python-brace-format +msgid "Expected available in {wait} second." +msgstr "" + +#: exceptions.py:225 +#, python-brace-format +msgid "Expected available in {wait} seconds." +msgstr "" + +#: fields.py:316 relations.py:245 relations.py:279 validators.py:90 +#: validators.py:183 msgid "This field is required." msgstr "Tämä kenttä vaaditaan." -#: fields.py:270 +#: fields.py:317 msgid "This field may not be null." msgstr "Tämän kentän arvo ei voi olla \"null\"." -#: fields.py:608 fields.py:639 -msgid "\"{input}\" is not a valid boolean." -msgstr "\"{input}\" ei ole kelvollinen totuusarvo." +#: fields.py:701 +msgid "Must be a valid boolean." +msgstr "" -#: fields.py:674 +#: fields.py:766 +msgid "Not a valid string." +msgstr "" + +#: fields.py:767 msgid "This field may not be blank." msgstr "Tämä kenttä ei voi olla tyhjä." -#: fields.py:675 fields.py:1675 +#: fields.py:768 fields.py:1881 +#, python-brace-format msgid "Ensure this field has no more than {max_length} characters." msgstr "Arvo saa olla enintään {max_length} merkkiä pitkä." -#: fields.py:676 +#: fields.py:769 +#, python-brace-format msgid "Ensure this field has at least {min_length} characters." msgstr "Arvo tulee olla vähintään {min_length} merkkiä pitkä." -#: fields.py:713 +#: fields.py:816 msgid "Enter a valid email address." msgstr "Syötä kelvollinen sähköpostiosoite." -#: fields.py:724 +#: fields.py:827 msgid "This value does not match the required pattern." msgstr "Arvo ei täsmää vaadittuun kuvioon." -#: fields.py:735 +#: fields.py:838 msgid "" "Enter a valid \"slug\" consisting of letters, numbers, underscores or " "hyphens." msgstr "Tässä voidaan käyttää vain kirjaimia (a-z), numeroita (0-9) sekä ala- ja tavuviivoja (_ -)." -#: fields.py:747 +#: fields.py:839 +msgid "" +"Enter a valid \"slug\" consisting of Unicode letters, numbers, underscores, " +"or hyphens." +msgstr "" + +#: fields.py:854 msgid "Enter a valid URL." msgstr "Syötä oikea URL-osoite." -#: fields.py:760 -msgid "\"{value}\" is not a valid UUID." -msgstr "{value} ei ole kelvollinen UUID." +#: fields.py:867 +msgid "Must be a valid UUID." +msgstr "" -#: fields.py:796 +#: fields.py:903 msgid "Enter a valid IPv4 or IPv6 address." msgstr "Syötä kelvollinen IPv4- tai IPv6-osoite." -#: fields.py:821 +#: fields.py:931 msgid "A valid integer is required." msgstr "Syötä kelvollinen kokonaisluku." -#: fields.py:822 fields.py:857 fields.py:891 +#: fields.py:932 fields.py:969 fields.py:1005 fields.py:1366 +#, python-brace-format msgid "Ensure this value is less than or equal to {max_value}." -msgstr "Tämän arvon on oltava enintään {max_value}." +msgstr "Tämän arvon on oltava pienempi tai yhtä suuri kuin {max_value}." -#: fields.py:823 fields.py:858 fields.py:892 +#: fields.py:933 fields.py:970 fields.py:1006 fields.py:1367 +#, python-brace-format msgid "Ensure this value is greater than or equal to {min_value}." -msgstr "Tämän luvun on oltava vähintään {min_value}." +msgstr "Tämän luvun on oltava suurempi tai yhtä suuri kuin {min_value}." -#: fields.py:824 fields.py:859 fields.py:896 +#: fields.py:934 fields.py:971 fields.py:1010 msgid "String value too large." msgstr "Liian suuri merkkijonoarvo." -#: fields.py:856 fields.py:890 +#: fields.py:968 fields.py:1004 msgid "A valid number is required." msgstr "Kelvollinen luku vaaditaan." -#: fields.py:893 +#: fields.py:1007 +#, python-brace-format msgid "Ensure that there are no more than {max_digits} digits in total." msgstr "Tässä luvussa voi olla yhteensä enintään {max_digits} numeroa." -#: fields.py:894 +#: fields.py:1008 +#, python-brace-format msgid "" "Ensure that there are no more than {max_decimal_places} decimal places." -msgstr "Tässä luvussa saa olla enintään {max_decimal_places} desimaalia." +msgstr "Tässä luvussa voi olla enintään {max_decimal_places} desimaalia." -#: fields.py:895 +#: fields.py:1009 +#, python-brace-format msgid "" "Ensure that there are no more than {max_whole_digits} digits before the " "decimal point." -msgstr "Tässä luvussa saa olla enintään {max_whole_digits} numeroa ennen desimaalipilkkua." +msgstr "Tässä luvussa voi olla enintään {max_whole_digits} numeroa ennen desimaalipilkkua." -#: fields.py:1025 +#: fields.py:1148 +#, python-brace-format msgid "Datetime has wrong format. Use one of these formats instead: {format}." msgstr "Virheellinen päivämäärän/ajan muotoilu. Käytä jotain näistä muodoista: {format}" -#: fields.py:1026 +#: fields.py:1149 msgid "Expected a datetime but got a date." msgstr "Odotettiin päivämäärää ja aikaa, saatiin vain päivämäärä." -#: fields.py:1103 +#: fields.py:1150 +#, python-brace-format +msgid "Invalid datetime for the timezone \"{timezone}\"." +msgstr "" + +#: fields.py:1151 +msgid "Datetime value out of range." +msgstr "" + +#: fields.py:1236 +#, python-brace-format msgid "Date has wrong format. Use one of these formats instead: {format}." msgstr "Virheellinen päivämäärän muotoilu. Käytä jotain näistä muodoista: {format}" -#: fields.py:1104 +#: fields.py:1237 msgid "Expected a date but got a datetime." msgstr "Odotettiin päivämäärää, saatiin päivämäärä ja aika." -#: fields.py:1170 +#: fields.py:1303 +#, python-brace-format msgid "Time has wrong format. Use one of these formats instead: {format}." msgstr "Virheellinen kellonajan muotoilu. Käytä jotain näistä muodoista: {format}" -#: fields.py:1232 +#: fields.py:1365 +#, python-brace-format msgid "Duration has wrong format. Use one of these formats instead: {format}." msgstr "Virheellinen keston muotoilu. Käytä jotain näistä muodoista: {format}" -#: fields.py:1251 fields.py:1300 +#: fields.py:1399 fields.py:1456 +#, python-brace-format msgid "\"{input}\" is not a valid choice." msgstr "\"{input}\" ei ole kelvollinen valinta." -#: fields.py:1254 relations.py:71 relations.py:441 +#: fields.py:1402 +#, python-brace-format msgid "More than {count} items..." msgstr "Enemmän kuin {count} kappaletta..." -#: fields.py:1301 fields.py:1448 relations.py:437 serializers.py:524 +#: fields.py:1457 fields.py:1603 relations.py:485 serializers.py:570 +#, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "Odotettiin listaa, saatiin tyyppi {input_type}." -#: fields.py:1302 +#: fields.py:1458 msgid "This selection may not be empty." msgstr "Valinta ei saa olla tyhjä." -#: fields.py:1339 +#: fields.py:1495 +#, python-brace-format msgid "\"{input}\" is not a valid path choice." msgstr "\"{input}\" ei ole kelvollinen polku." -#: fields.py:1358 +#: fields.py:1514 msgid "No file was submitted." msgstr "Yhtään tiedostoa ei ole lähetetty." -#: fields.py:1359 +#: fields.py:1515 msgid "" "The submitted data was not a file. Check the encoding type on the form." msgstr "Tiedostoa ei lähetetty. Tarkista lomakkeen koodaus (encoding)." -#: fields.py:1360 +#: fields.py:1516 msgid "No filename could be determined." msgstr "Tiedostonimeä ei voitu päätellä." -#: fields.py:1361 +#: fields.py:1517 msgid "The submitted file is empty." msgstr "Lähetetty tiedosto on tyhjä." -#: fields.py:1362 +#: fields.py:1518 +#, python-brace-format msgid "" "Ensure this filename has at most {max_length} characters (it has {length})." msgstr "Varmista että tiedostonimi on enintään {max_length} merkkiä pitkä (nyt {length})." -#: fields.py:1410 +#: fields.py:1566 msgid "" "Upload a valid image. The file you uploaded was either not an image or a " "corrupted image." msgstr "Kuva ei kelpaa. Lähettämäsi tiedosto ei ole kuva, tai tiedosto on vioittunut." -#: fields.py:1449 relations.py:438 serializers.py:525 +#: fields.py:1604 relations.py:486 serializers.py:571 msgid "This list may not be empty." msgstr "Lista ei saa olla tyhjä." -#: fields.py:1502 +#: fields.py:1605 +#, python-brace-format +msgid "Ensure this field has at least {min_length} elements." +msgstr "" + +#: fields.py:1606 +#, python-brace-format +msgid "Ensure this field has no more than {max_length} elements." +msgstr "" + +#: fields.py:1682 +#, python-brace-format msgid "Expected a dictionary of items but got type \"{input_type}\"." msgstr "Odotettiin sanakirjaa, saatiin tyyppi {input_type}." -#: fields.py:1549 +#: fields.py:1683 +msgid "This dictionary may not be empty." +msgstr "" + +#: fields.py:1755 msgid "Value must be valid JSON." msgstr "Arvon pitää olla kelvollista JSONia." -#: filters.py:36 templates/rest_framework/filters/django_filter.html:5 -msgid "Submit" -msgstr "Lähetä" +#: filters.py:49 templates/rest_framework/filters/search.html:2 +msgid "Search" +msgstr "Haku" -#: filters.py:336 +#: filters.py:50 +msgid "A search term." +msgstr "" + +#: filters.py:180 templates/rest_framework/filters/ordering.html:3 +msgid "Ordering" +msgstr "Järjestys" + +#: filters.py:181 +msgid "Which field to use when ordering the results." +msgstr "" + +#: filters.py:287 msgid "ascending" msgstr "nouseva" -#: filters.py:337 +#: filters.py:288 msgid "descending" msgstr "laskeva" -#: pagination.py:193 +#: pagination.py:174 +msgid "A page number within the paginated result set." +msgstr "" + +#: pagination.py:179 pagination.py:372 pagination.py:590 +msgid "Number of results to return per page." +msgstr "" + +#: pagination.py:189 msgid "Invalid page." msgstr "Epäkelpo sivu." -#: pagination.py:427 +#: pagination.py:374 +msgid "The initial index from which to return the results." +msgstr "" + +#: pagination.py:581 +msgid "The pagination cursor value." +msgstr "" + +#: pagination.py:583 msgid "Invalid cursor" msgstr "Epäkelpo kursori" -#: relations.py:207 +#: relations.py:246 +#, python-brace-format msgid "Invalid pk \"{pk_value}\" - object does not exist." msgstr "Epäkelpo pääavain {pk_value} - objektia ei ole olemassa." -#: relations.py:208 +#: relations.py:247 +#, python-brace-format msgid "Incorrect type. Expected pk value, received {data_type}." msgstr "Väärä tyyppi. Odotettiin pääavainarvoa, saatiin {data_type}." -#: relations.py:240 +#: relations.py:280 msgid "Invalid hyperlink - No URL match." msgstr "Epäkelpo linkki - URL ei täsmää." -#: relations.py:241 +#: relations.py:281 msgid "Invalid hyperlink - Incorrect URL match." msgstr "Epäkelpo linkki - epäkelpo URL-osuma." -#: relations.py:242 +#: relations.py:282 msgid "Invalid hyperlink - Object does not exist." msgstr "Epäkelpo linkki - objektia ei ole." -#: relations.py:243 +#: relations.py:283 +#, python-brace-format msgid "Incorrect type. Expected URL string, received {data_type}." msgstr "Epäkelpo tyyppi. Odotettiin URL-merkkijonoa, saatiin {data_type}." -#: relations.py:401 +#: relations.py:448 +#, python-brace-format msgid "Object with {slug_name}={value} does not exist." msgstr "Objektia ({slug_name}={value}) ei ole." -#: relations.py:402 +#: relations.py:449 msgid "Invalid value." msgstr "Epäkelpo arvo." -#: serializers.py:326 +#: schemas/utils.py:32 +msgid "unique integer value" +msgstr "" + +#: schemas/utils.py:34 +msgid "UUID string" +msgstr "" + +#: schemas/utils.py:36 +msgid "unique value" +msgstr "" + +#: schemas/utils.py:38 +#, python-brace-format +msgid "A {value_type} identifying this {name}." +msgstr "" + +#: serializers.py:337 +#, python-brace-format msgid "Invalid data. Expected a dictionary, but got {datatype}." msgstr "Odotettiin sanakirjaa, saatiin tyyppi {datatype}." #: templates/rest_framework/admin.html:116 -#: templates/rest_framework/base.html:128 +#: templates/rest_framework/base.html:136 +msgid "Extra Actions" +msgstr "" + +#: templates/rest_framework/admin.html:130 +#: templates/rest_framework/base.html:150 msgid "Filters" msgstr "Suotimet" -#: templates/rest_framework/filters/django_filter.html:2 -#: templates/rest_framework/filters/django_filter_crispyforms.html:4 -msgid "Field filters" -msgstr "Kenttäsuotimet" +#: templates/rest_framework/base.html:37 +msgid "navbar" +msgstr "" -#: templates/rest_framework/filters/ordering.html:3 -msgid "Ordering" -msgstr "Järjestys" +#: templates/rest_framework/base.html:75 +msgid "content" +msgstr "" -#: templates/rest_framework/filters/search.html:2 -msgid "Search" -msgstr "Haku" +#: templates/rest_framework/base.html:78 +msgid "request form" +msgstr "" -#: templates/rest_framework/horizontal/radio.html:2 -#: templates/rest_framework/inline/radio.html:2 -#: templates/rest_framework/vertical/radio.html:2 +#: templates/rest_framework/base.html:157 +msgid "main content" +msgstr "" + +#: templates/rest_framework/base.html:173 +msgid "request info" +msgstr "" + +#: templates/rest_framework/base.html:177 +msgid "response info" +msgstr "" + +#: templates/rest_framework/horizontal/radio.html:4 +#: templates/rest_framework/inline/radio.html:3 +#: templates/rest_framework/vertical/radio.html:3 msgid "None" msgstr "Ei mitään" -#: templates/rest_framework/horizontal/select_multiple.html:2 -#: templates/rest_framework/inline/select_multiple.html:2 -#: templates/rest_framework/vertical/select_multiple.html:2 +#: templates/rest_framework/horizontal/select_multiple.html:4 +#: templates/rest_framework/inline/select_multiple.html:3 +#: templates/rest_framework/vertical/select_multiple.html:3 msgid "No items to select." msgstr "Ei valittavia kohteita." -#: validators.py:43 +#: validators.py:39 msgid "This field must be unique." msgstr "Arvon tulee olla uniikki." -#: validators.py:97 +#: validators.py:89 +#, python-brace-format msgid "The fields {field_names} must make a unique set." msgstr "Kenttien {field_names} tulee muodostaa uniikki joukko." -#: validators.py:245 +#: validators.py:171 +#, python-brace-format +msgid "Surrogate characters are not allowed: U+{code_point:X}." +msgstr "" + +#: validators.py:243 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" date." msgstr "Kentän tulee olla uniikki päivämäärän {date_field} suhteen." -#: validators.py:260 +#: validators.py:258 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" month." msgstr "Kentän tulee olla uniikki kuukauden {date_field} suhteen." -#: validators.py:273 +#: validators.py:271 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" year." msgstr "Kentän tulee olla uniikki vuoden {date_field} suhteen." -#: versioning.py:42 +#: versioning.py:40 msgid "Invalid version in \"Accept\" header." msgstr "Epäkelpo versio Accept-otsakkeessa." -#: versioning.py:73 +#: versioning.py:71 msgid "Invalid version in URL path." msgstr "Epäkelpo versio URL-polussa." -#: versioning.py:115 +#: versioning.py:116 msgid "Invalid version in URL path. Does not match any version namespace." msgstr "URL-polun versio ei täsmää mihinkään versionimiavaruuteen." -#: versioning.py:147 +#: versioning.py:148 msgid "Invalid version in hostname." msgstr "Epäkelpo versio palvelinosoitteessa." -#: versioning.py:169 +#: versioning.py:170 msgid "Invalid version in query parameter." msgstr "Epäkelpo versio kyselyparametrissa." - -#: views.py:88 -msgid "Permission denied." -msgstr "Pääsy evätty." diff --git a/rest_framework/locale/fr/LC_MESSAGES/django.mo b/rest_framework/locale/fr/LC_MESSAGES/django.mo index b462e08d7185771785d15b3f7b20ba5579011b26..a1c0b3c2d4a0e9d28c07dac5652968dee90fcff6 100644 GIT binary patch delta 2624 zcmZ|Qe@vBC9LMp)PcadH03!11;VN)ZKtMqS&0mS)k3hj~&+|Mi=jx1eU+0|XdCqgr z`JVIeZR^>V$amutPZ-i>a;|cMF$ZNbKO}#OF&36$5iZAx*o(UVIn2Sc_yESR94})T z-oX**A8E`Yti%TFbB&lG3QK8-oA*TDbV>}OF^3^jEunyqIPu*Q}GgN(_KYvw&WtWJry;uY*cK^kiJbV z*5d}$0AEI;WqwAYY(^Bjd!-O_c)xj&!aUsIc@iI_epNSMCeu^LRmd1jD{4S{ktH7Miic>P?A>=FVq`CZ-DgO7Sg;d(S25mkf;A~EXLo21E zFB~i9oQ6cyX3{eAi7>0kN@K{)I0+w@u*iPN@lfJ)_&qs;H2fALjQOclXVg}K&D1tt1R+x(niv;8BY2* z&G#ztxQIN$9!SZvucuT*OGm~fMQ5kwCfQrlYolke^%N3T*G{2v(T;ZnfL8 zi=(Hrr^dy{2JJ5G*~cTslz32euExCvb>Qzst8M!bt#F_li6a34zh72JzY zQC2>*J1bJTh&?nsLD`*~*ddHXjiAgRjIvVKZ6BfR`plfjCf$SVS9K2K@G>sNYgmbs zxCS#drFP+N)aCqtO-0VDGdHq%d?-142W69di;}CSC`;;eMozT`_){g*FnQFlouREdEhd};2+5TRDU9WqyEM$%;BRT zIjuz|rv_05dK?+6x{k8h?jheI^#Em4KEYVb&ZnLCt3_1U$f^uwgv}_q?nZfGAIg#* z#u_|{GT`r#G%Jl!OR82PX;ob)?E#dfKWTd#<%9H({d*N(rI5U!g9?*U2T(?M7G;x7 zpo}zaabzYrDDC+ux%J~dJdcT($i`tmss$)3unc8l9Vq=9C<8iyGx63E)?b$94h;_6 zMpP5B+|uDxkrN?*ATO1Y5W%`iZlzQZq~0nkxynEpzg1*ktS4kLk}6(j4Rnpe#}z)FTsfnCxYuh0$8IJUM$dEi_4$U)puE~+1l+xY^3de`Uy{lyi%YADOP6b9 z<<%8cV-qPgj;J~cn%#q?h4 z+L~NX>T-ue3xAN-&h=s1=5Td-6ScR~H*&p`eva!~zzxV=MTBiZ>;baz23 z<$6~ua%iV=v!V<$oSU06%Q-rl)~{2phxcG0i%{*x%b-ai~*HC^GaY2wCy}HM6Pc1{B@JM}{_#t$@Uy}%{sq2Cq&ENn diff --git a/rest_framework/locale/fr/LC_MESSAGES/django.po b/rest_framework/locale/fr/LC_MESSAGES/django.po index 25b39e453..c2e08c80b 100644 --- a/rest_framework/locale/fr/LC_MESSAGES/django.po +++ b/rest_framework/locale/fr/LC_MESSAGES/django.po @@ -3,16 +3,18 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Erwann Mest , 2019 # Etienne Desgagné , 2015 # Martin Maillard , 2015 # Martin Maillard , 2015 +# Stéphane Raimbault , 2019 # Xavier Ordoquy , 2015-2016 msgid "" msgstr "" "Project-Id-Version: Django REST framework\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-07-12 16:13+0100\n" -"PO-Revision-Date: 2017-08-03 14:58+0000\n" +"POT-Creation-Date: 2020-10-13 21:45+0200\n" +"PO-Revision-Date: 2020-10-13 19:45+0000\n" "Last-Translator: Xavier Ordoquy \n" "Language-Team: French (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/fr/)\n" "MIME-Version: 1.0\n" @@ -21,40 +23,40 @@ msgstr "" "Language: fr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: authentication.py:73 +#: authentication.py:70 msgid "Invalid basic header. No credentials provided." msgstr "En-tête « basic » non valide. Informations d'identification non fournies." -#: authentication.py:76 +#: authentication.py:73 msgid "Invalid basic header. Credentials string should not contain spaces." msgstr "En-tête « basic » non valide. Les informations d'identification ne doivent pas contenir d'espaces." -#: authentication.py:82 +#: authentication.py:83 msgid "Invalid basic header. Credentials not correctly base64 encoded." msgstr "En-tête « basic » non valide. Encodage base64 des informations d'identification incorrect." -#: authentication.py:99 +#: authentication.py:101 msgid "Invalid username/password." msgstr "Nom d'utilisateur et/ou mot de passe non valide(s)." -#: authentication.py:102 authentication.py:198 +#: authentication.py:104 authentication.py:206 msgid "User inactive or deleted." msgstr "Utilisateur inactif ou supprimé." -#: authentication.py:176 +#: authentication.py:184 msgid "Invalid token header. No credentials provided." msgstr "En-tête « token » non valide. Informations d'identification non fournies." -#: authentication.py:179 +#: authentication.py:187 msgid "Invalid token header. Token string should not contain spaces." msgstr "En-tête « token » non valide. Un token ne doit pas contenir d'espaces." -#: authentication.py:185 +#: authentication.py:193 msgid "" "Invalid token header. Token string should not contain invalid characters." msgstr "En-tête « token » non valide. Un token ne doit pas contenir de caractères invalides." -#: authentication.py:195 +#: authentication.py:203 msgid "Invalid token." msgstr "Token non valide." @@ -62,382 +64,515 @@ msgstr "Token non valide." msgid "Auth Token" msgstr "Jeton d'authentification" -#: authtoken/models.py:15 +#: authtoken/models.py:13 msgid "Key" msgstr "Clef" -#: authtoken/models.py:18 +#: authtoken/models.py:16 msgid "User" msgstr "Utilisateur" -#: authtoken/models.py:20 +#: authtoken/models.py:18 msgid "Created" msgstr "Création" -#: authtoken/models.py:29 +#: authtoken/models.py:27 authtoken/serializers.py:19 msgid "Token" msgstr "Jeton" -#: authtoken/models.py:30 +#: authtoken/models.py:28 msgid "Tokens" msgstr "Jetons" -#: authtoken/serializers.py:8 +#: authtoken/serializers.py:9 msgid "Username" msgstr "Nom de l'utilisateur" -#: authtoken/serializers.py:9 +#: authtoken/serializers.py:13 msgid "Password" msgstr "Mot de passe" -#: authtoken/serializers.py:20 -msgid "User account is disabled." -msgstr "Ce compte est désactivé." - -#: authtoken/serializers.py:23 +#: authtoken/serializers.py:35 msgid "Unable to log in with provided credentials." msgstr "Impossible de se connecter avec les informations d'identification fournies." -#: authtoken/serializers.py:26 +#: authtoken/serializers.py:38 msgid "Must include \"username\" and \"password\"." -msgstr "\"username\" et \"password\" doivent être inclus." +msgstr "« username » et « password » doivent être inclus." -#: exceptions.py:49 +#: exceptions.py:102 msgid "A server error occurred." msgstr "Une erreur du serveur est survenue." -#: exceptions.py:84 +#: exceptions.py:142 +msgid "Invalid input." +msgstr "" + +#: exceptions.py:161 msgid "Malformed request." msgstr "Requête malformée" -#: exceptions.py:89 +#: exceptions.py:167 msgid "Incorrect authentication credentials." msgstr "Informations d'authentification incorrectes." -#: exceptions.py:94 +#: exceptions.py:173 msgid "Authentication credentials were not provided." msgstr "Informations d'authentification non fournies." -#: exceptions.py:99 +#: exceptions.py:179 msgid "You do not have permission to perform this action." msgstr "Vous n'avez pas la permission d'effectuer cette action." -#: exceptions.py:104 views.py:81 +#: exceptions.py:185 msgid "Not found." msgstr "Pas trouvé." -#: exceptions.py:109 +#: exceptions.py:191 +#, python-brace-format msgid "Method \"{method}\" not allowed." -msgstr "Méthode \"{method}\" non autorisée." +msgstr "Méthode « {method} » non autorisée." -#: exceptions.py:120 +#: exceptions.py:202 msgid "Could not satisfy the request Accept header." msgstr "L'en-tête « Accept » n'a pas pu être satisfaite." -#: exceptions.py:132 +#: exceptions.py:212 +#, python-brace-format msgid "Unsupported media type \"{media_type}\" in request." -msgstr "Type de média \"{media_type}\" non supporté." +msgstr "Type de média « {media_type} » non supporté." -#: exceptions.py:145 +#: exceptions.py:223 msgid "Request was throttled." msgstr "Requête ralentie." -#: fields.py:269 relations.py:206 relations.py:239 validators.py:98 -#: validators.py:181 +#: exceptions.py:224 +#, python-brace-format +msgid "Expected available in {wait} second." +msgstr "" + +#: exceptions.py:225 +#, python-brace-format +msgid "Expected available in {wait} seconds." +msgstr "" + +#: fields.py:316 relations.py:245 relations.py:279 validators.py:90 +#: validators.py:183 msgid "This field is required." msgstr "Ce champ est obligatoire." -#: fields.py:270 +#: fields.py:317 msgid "This field may not be null." msgstr "Ce champ ne peut être nul." -#: fields.py:608 fields.py:639 -msgid "\"{input}\" is not a valid boolean." -msgstr "\"{input}\" n'est pas un booléen valide." +#: fields.py:701 +msgid "Must be a valid boolean." +msgstr "" -#: fields.py:674 +#: fields.py:766 +msgid "Not a valid string." +msgstr "" + +#: fields.py:767 msgid "This field may not be blank." msgstr "Ce champ ne peut être vide." -#: fields.py:675 fields.py:1675 +#: fields.py:768 fields.py:1881 +#, python-brace-format msgid "Ensure this field has no more than {max_length} characters." -msgstr "Assurez-vous que ce champ comporte au plus {max_length} caractères." +msgstr "Assurez-vous que ce champ comporte au plus {max_length} caractères." -#: fields.py:676 +#: fields.py:769 +#, python-brace-format msgid "Ensure this field has at least {min_length} characters." -msgstr "Assurez-vous que ce champ comporte au moins {min_length} caractères." +msgstr "Assurez-vous que ce champ comporte au moins {min_length} caractères." -#: fields.py:713 +#: fields.py:816 msgid "Enter a valid email address." -msgstr "Saisissez une adresse email valable." +msgstr "Saisissez une adresse e-mail valide." -#: fields.py:724 +#: fields.py:827 msgid "This value does not match the required pattern." msgstr "Cette valeur ne satisfait pas le motif imposé." -#: fields.py:735 +#: fields.py:838 msgid "" "Enter a valid \"slug\" consisting of letters, numbers, underscores or " "hyphens." msgstr "Ce champ ne doit contenir que des lettres, des nombres, des tirets bas _ et des traits d'union." -#: fields.py:747 +#: fields.py:839 +msgid "" +"Enter a valid \"slug\" consisting of Unicode letters, numbers, underscores, " +"or hyphens." +msgstr "" + +#: fields.py:854 msgid "Enter a valid URL." msgstr "Saisissez une URL valide." -#: fields.py:760 -msgid "\"{value}\" is not a valid UUID." -msgstr "\"{value}\" n'est pas un UUID valide." +#: fields.py:867 +msgid "Must be a valid UUID." +msgstr "" -#: fields.py:796 +#: fields.py:903 msgid "Enter a valid IPv4 or IPv6 address." msgstr "Saisissez une adresse IPv4 ou IPv6 valide." -#: fields.py:821 +#: fields.py:931 msgid "A valid integer is required." msgstr "Un nombre entier valide est requis." -#: fields.py:822 fields.py:857 fields.py:891 +#: fields.py:932 fields.py:969 fields.py:1005 fields.py:1366 +#, python-brace-format msgid "Ensure this value is less than or equal to {max_value}." -msgstr "Assurez-vous que cette valeur est inférieure ou égale à {max_value}." +msgstr "Assurez-vous que cette valeur est inférieure ou égale à {max_value}." -#: fields.py:823 fields.py:858 fields.py:892 +#: fields.py:933 fields.py:970 fields.py:1006 fields.py:1367 +#, python-brace-format msgid "Ensure this value is greater than or equal to {min_value}." -msgstr "Assurez-vous que cette valeur est supérieure ou égale à {min_value}." +msgstr "Assurez-vous que cette valeur est supérieure ou égale à {min_value}." -#: fields.py:824 fields.py:859 fields.py:896 +#: fields.py:934 fields.py:971 fields.py:1010 msgid "String value too large." msgstr "Chaîne de caractères trop longue." -#: fields.py:856 fields.py:890 +#: fields.py:968 fields.py:1004 msgid "A valid number is required." msgstr "Un nombre valide est requis." -#: fields.py:893 +#: fields.py:1007 +#, python-brace-format msgid "Ensure that there are no more than {max_digits} digits in total." -msgstr "Assurez-vous qu'il n'y a pas plus de {max_digits} chiffres au total." +msgstr "Assurez-vous qu'il n'y a pas plus de {max_digits} chiffres au total." -#: fields.py:894 +#: fields.py:1008 +#, python-brace-format msgid "" "Ensure that there are no more than {max_decimal_places} decimal places." -msgstr "Assurez-vous qu'il n'y a pas plus de {max_decimal_places} chiffres après la virgule." +msgstr "Assurez-vous qu'il n'y a pas plus de {max_decimal_places} chiffres après la virgule." -#: fields.py:895 +#: fields.py:1009 +#, python-brace-format msgid "" "Ensure that there are no more than {max_whole_digits} digits before the " "decimal point." msgstr "Assurez-vous qu'il n'y a pas plus de {max_whole_digits} chiffres avant la virgule." -#: fields.py:1025 +#: fields.py:1148 +#, python-brace-format msgid "Datetime has wrong format. Use one of these formats instead: {format}." -msgstr "La date + heure n'a pas le bon format. Utilisez un des formats suivants : {format}." +msgstr "La date + heure n'a pas le bon format. Utilisez un des formats suivants : {format}." -#: fields.py:1026 +#: fields.py:1149 msgid "Expected a datetime but got a date." msgstr "Attendait une date + heure mais a reçu une date." -#: fields.py:1103 -msgid "Date has wrong format. Use one of these formats instead: {format}." -msgstr "La date n'a pas le bon format. Utilisez un des formats suivants : {format}." +#: fields.py:1150 +#, python-brace-format +msgid "Invalid datetime for the timezone \"{timezone}\"." +msgstr "" -#: fields.py:1104 +#: fields.py:1151 +msgid "Datetime value out of range." +msgstr "" + +#: fields.py:1236 +#, python-brace-format +msgid "Date has wrong format. Use one of these formats instead: {format}." +msgstr "La date n'a pas le bon format. Utilisez un des formats suivants : {format}." + +#: fields.py:1237 msgid "Expected a date but got a datetime." msgstr "Attendait une date mais a reçu une date + heure." -#: fields.py:1170 +#: fields.py:1303 +#, python-brace-format msgid "Time has wrong format. Use one of these formats instead: {format}." -msgstr "L'heure n'a pas le bon format. Utilisez un des formats suivants : {format}." +msgstr "L'heure n'a pas le bon format. Utilisez un des formats suivants : {format}." -#: fields.py:1232 +#: fields.py:1365 +#, python-brace-format msgid "Duration has wrong format. Use one of these formats instead: {format}." -msgstr "La durée n'a pas le bon format. Utilisez l'un des formats suivants: {format}." +msgstr "La durée n'a pas le bon format. Utilisez l'un des formats suivants : {format}." -#: fields.py:1251 fields.py:1300 +#: fields.py:1399 fields.py:1456 +#, python-brace-format msgid "\"{input}\" is not a valid choice." -msgstr "\"{input}\" n'est pas un choix valide." +msgstr "« {input} » n'est pas un choix valide." -#: fields.py:1254 relations.py:71 relations.py:441 +#: fields.py:1402 +#, python-brace-format msgid "More than {count} items..." msgstr "Plus de {count} éléments..." -#: fields.py:1301 fields.py:1448 relations.py:437 serializers.py:524 +#: fields.py:1457 fields.py:1603 relations.py:485 serializers.py:570 +#, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." -msgstr "Attendait une liste d'éléments mais a reçu \"{input_type}\"." +msgstr "Attendait une liste d'éléments mais a reçu « {input_type} »." -#: fields.py:1302 +#: fields.py:1458 msgid "This selection may not be empty." msgstr "Cette sélection ne peut être vide." -#: fields.py:1339 +#: fields.py:1495 +#, python-brace-format msgid "\"{input}\" is not a valid path choice." -msgstr "\"{input}\" n'est pas un choix de chemin valide." +msgstr "« {input} » n'est pas un choix de chemin valide." -#: fields.py:1358 +#: fields.py:1514 msgid "No file was submitted." msgstr "Aucun fichier n'a été soumis." -#: fields.py:1359 +#: fields.py:1515 msgid "" "The submitted data was not a file. Check the encoding type on the form." msgstr "La donnée soumise n'est pas un fichier. Vérifiez le type d'encodage du formulaire." -#: fields.py:1360 +#: fields.py:1516 msgid "No filename could be determined." msgstr "Le nom de fichier n'a pu être déterminé." -#: fields.py:1361 +#: fields.py:1517 msgid "The submitted file is empty." msgstr "Le fichier soumis est vide." -#: fields.py:1362 +#: fields.py:1518 +#, python-brace-format msgid "" "Ensure this filename has at most {max_length} characters (it has {length})." -msgstr "Assurez-vous que le nom de fichier comporte au plus {max_length} caractères (il en comporte {length})." +msgstr "Assurez-vous que le nom de fichier comporte au plus {max_length} caractères (il en comporte {length})." -#: fields.py:1410 +#: fields.py:1566 msgid "" "Upload a valid image. The file you uploaded was either not an image or a " "corrupted image." msgstr "Transférez une image valide. Le fichier que vous avez transféré n'est pas une image, ou il est corrompu." -#: fields.py:1449 relations.py:438 serializers.py:525 +#: fields.py:1604 relations.py:486 serializers.py:571 msgid "This list may not be empty." msgstr "Cette liste ne peut pas être vide." -#: fields.py:1502 -msgid "Expected a dictionary of items but got type \"{input_type}\"." -msgstr "Attendait un dictionnaire d'éléments mais a reçu \"{input_type}\"." +#: fields.py:1605 +#, python-brace-format +msgid "Ensure this field has at least {min_length} elements." +msgstr "" -#: fields.py:1549 +#: fields.py:1606 +#, python-brace-format +msgid "Ensure this field has no more than {max_length} elements." +msgstr "" + +#: fields.py:1682 +#, python-brace-format +msgid "Expected a dictionary of items but got type \"{input_type}\"." +msgstr "Attendait un dictionnaire d'éléments mais a reçu « {input_type} »." + +#: fields.py:1683 +msgid "This dictionary may not be empty." +msgstr "" + +#: fields.py:1755 msgid "Value must be valid JSON." msgstr "La valeur doit être un JSON valide." -#: filters.py:36 templates/rest_framework/filters/django_filter.html:5 -msgid "Submit" -msgstr "Envoyer" +#: filters.py:49 templates/rest_framework/filters/search.html:2 +msgid "Search" +msgstr "Recherche" -#: filters.py:336 +#: filters.py:50 +msgid "A search term." +msgstr "" + +#: filters.py:180 templates/rest_framework/filters/ordering.html:3 +msgid "Ordering" +msgstr "Ordre" + +#: filters.py:181 +msgid "Which field to use when ordering the results." +msgstr "" + +#: filters.py:287 msgid "ascending" msgstr "croissant" -#: filters.py:337 +#: filters.py:288 msgid "descending" msgstr "décroissant" -#: pagination.py:193 -msgid "Invalid page." -msgstr "Page invalide." +#: pagination.py:174 +msgid "A page number within the paginated result set." +msgstr "" -#: pagination.py:427 +#: pagination.py:179 pagination.py:372 pagination.py:590 +msgid "Number of results to return per page." +msgstr "" + +#: pagination.py:189 +msgid "Invalid page." +msgstr "Page non valide." + +#: pagination.py:374 +msgid "The initial index from which to return the results." +msgstr "" + +#: pagination.py:581 +msgid "The pagination cursor value." +msgstr "" + +#: pagination.py:583 msgid "Invalid cursor" msgstr "Curseur non valide" -#: relations.py:207 +#: relations.py:246 +#, python-brace-format msgid "Invalid pk \"{pk_value}\" - object does not exist." -msgstr "Clé primaire \"{pk_value}\" non valide - l'objet n'existe pas." +msgstr "Clé primaire « {pk_value} » non valide - l'objet n'existe pas." -#: relations.py:208 +#: relations.py:247 +#, python-brace-format msgid "Incorrect type. Expected pk value, received {data_type}." msgstr "Type incorrect. Attendait une clé primaire, a reçu {data_type}." -#: relations.py:240 +#: relations.py:280 msgid "Invalid hyperlink - No URL match." -msgstr "Lien non valide : pas d'URL correspondante." +msgstr "Lien non valide : pas d'URL correspondante." -#: relations.py:241 +#: relations.py:281 msgid "Invalid hyperlink - Incorrect URL match." -msgstr "Lien non valide : URL correspondante incorrecte." +msgstr "Lien non valide : URL correspondante incorrecte." -#: relations.py:242 +#: relations.py:282 msgid "Invalid hyperlink - Object does not exist." -msgstr "Lien non valide : l'objet n'existe pas." +msgstr "Lien non valide : l'objet n'existe pas." -#: relations.py:243 +#: relations.py:283 +#, python-brace-format msgid "Incorrect type. Expected URL string, received {data_type}." msgstr "Type incorrect. Attendait une URL, a reçu {data_type}." -#: relations.py:401 +#: relations.py:448 +#, python-brace-format msgid "Object with {slug_name}={value} does not exist." msgstr "L'object avec {slug_name}={value} n'existe pas." -#: relations.py:402 +#: relations.py:449 msgid "Invalid value." msgstr "Valeur non valide." -#: serializers.py:326 +#: schemas/utils.py:32 +msgid "unique integer value" +msgstr "" + +#: schemas/utils.py:34 +msgid "UUID string" +msgstr "" + +#: schemas/utils.py:36 +msgid "unique value" +msgstr "" + +#: schemas/utils.py:38 +#, python-brace-format +msgid "A {value_type} identifying this {name}." +msgstr "" + +#: serializers.py:337 +#, python-brace-format msgid "Invalid data. Expected a dictionary, but got {datatype}." msgstr "Donnée non valide. Attendait un dictionnaire, a reçu {datatype}." #: templates/rest_framework/admin.html:116 -#: templates/rest_framework/base.html:128 +#: templates/rest_framework/base.html:136 +msgid "Extra Actions" +msgstr "" + +#: templates/rest_framework/admin.html:130 +#: templates/rest_framework/base.html:150 msgid "Filters" msgstr "Filtres" -#: templates/rest_framework/filters/django_filter.html:2 -#: templates/rest_framework/filters/django_filter_crispyforms.html:4 -msgid "Field filters" -msgstr "Filtres de champ" +#: templates/rest_framework/base.html:37 +msgid "navbar" +msgstr "" -#: templates/rest_framework/filters/ordering.html:3 -msgid "Ordering" -msgstr "Ordre" +#: templates/rest_framework/base.html:75 +msgid "content" +msgstr "" -#: templates/rest_framework/filters/search.html:2 -msgid "Search" -msgstr "Recherche" +#: templates/rest_framework/base.html:78 +msgid "request form" +msgstr "" -#: templates/rest_framework/horizontal/radio.html:2 -#: templates/rest_framework/inline/radio.html:2 -#: templates/rest_framework/vertical/radio.html:2 +#: templates/rest_framework/base.html:157 +msgid "main content" +msgstr "" + +#: templates/rest_framework/base.html:173 +msgid "request info" +msgstr "" + +#: templates/rest_framework/base.html:177 +msgid "response info" +msgstr "" + +#: templates/rest_framework/horizontal/radio.html:4 +#: templates/rest_framework/inline/radio.html:3 +#: templates/rest_framework/vertical/radio.html:3 msgid "None" msgstr "Aucune" -#: templates/rest_framework/horizontal/select_multiple.html:2 -#: templates/rest_framework/inline/select_multiple.html:2 -#: templates/rest_framework/vertical/select_multiple.html:2 +#: templates/rest_framework/horizontal/select_multiple.html:4 +#: templates/rest_framework/inline/select_multiple.html:3 +#: templates/rest_framework/vertical/select_multiple.html:3 msgid "No items to select." msgstr "Aucun élément à sélectionner." -#: validators.py:43 +#: validators.py:39 msgid "This field must be unique." msgstr "Ce champ doit être unique." -#: validators.py:97 +#: validators.py:89 +#, python-brace-format msgid "The fields {field_names} must make a unique set." msgstr "Les champs {field_names} doivent former un ensemble unique." -#: validators.py:245 +#: validators.py:171 +#, python-brace-format +msgid "Surrogate characters are not allowed: U+{code_point:X}." +msgstr "" + +#: validators.py:243 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" date." -msgstr "Ce champ doit être unique pour la date \"{date_field}\"." +msgstr "Ce champ doit être unique pour la date « {date_field} »." -#: validators.py:260 +#: validators.py:258 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" month." -msgstr "Ce champ doit être unique pour le mois \"{date_field}\"." +msgstr "Ce champ doit être unique pour le mois « {date_field} »." -#: validators.py:273 +#: validators.py:271 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" year." -msgstr "Ce champ doit être unique pour l'année \"{date_field}\"." +msgstr "Ce champ doit être unique pour l'année « {date_field} »." -#: versioning.py:42 +#: versioning.py:40 msgid "Invalid version in \"Accept\" header." msgstr "Version non valide dans l'en-tête « Accept »." -#: versioning.py:73 +#: versioning.py:71 msgid "Invalid version in URL path." msgstr "Version non valide dans l'URL." -#: versioning.py:115 +#: versioning.py:116 msgid "Invalid version in URL path. Does not match any version namespace." msgstr "Version invalide dans l'URL. Ne correspond à aucune version de l'espace de nommage." -#: versioning.py:147 +#: versioning.py:148 msgid "Invalid version in hostname." msgstr "Version non valide dans le nom d'hôte." -#: versioning.py:169 +#: versioning.py:170 msgid "Invalid version in query parameter." msgstr "Version non valide dans le paramètre de requête." - -#: views.py:88 -msgid "Permission denied." -msgstr "Permission refusée." diff --git a/rest_framework/locale/hu/LC_MESSAGES/django.mo b/rest_framework/locale/hu/LC_MESSAGES/django.mo index 8fadddcea143d0981a071d72c1801565403d1c8e..61f285299f185130df373672340c8f4146af0556 100644 GIT binary patch delta 3436 zcmb8vdu&tJ9l-Gu5|R)SMnWirgm4IySHUDe(h_KahQ}aTfRKdJ7rod=@vZIaaPPGt zL6xPhYu9z{pl3*E6Y5fJ(=x`iDjVvm4r%qmv_DuiRg+5^JN{(vyMwv+8Y<2!%45_PspU$2UaaJcvZh)ojcf5vJb;UF6y^PA zu^GROHTVW@!0WgkZ(0F*4L%BYQk~1$X zApTu6zRQimUZY$$H5O-l2<62DYJ3J|Lf=7&zzv*@%?pbYS&nycy#_mQ5Rc*0C=2^7 zHsOaT3;Op$;x9Le)koWf!{#+-AAbL zU)Y697=%1khw*dxNXbh%8UykoK8by7)G)q@a=nV>AHhi+#9Qd&0CALLoW|WaXQ@&T zV?RoSF5xnK2W8K1qWpdZvldUIOe}Z3)TrQX3CT7js%kgN9v;J;ID!560UpB+T};~N zP~QIq?!os^a$qG#U@Z=zWP1+fz3<~z%;UY>R<~#z=f<|SVkEwf^5RFh2Fpo(qOaED z2JAuU@FdFbzJYRV)k>wdz$%oScnCRI%E4855($F3fZccn*U9<+3k}9nE%d@%)DDym z9OQ(l5!{BSQF7ylScO-S-B8z1BKHBx0DnYQrsgo}QQU{5fqDsLL9e3x?tNUz`05r7 z8K8}g5+B8T@N39Ny~USwa1&*KMtYIwo3IZPI2&KZD!huD@fylXKfy<_ll_oCqOW2n zzKl8k1Jn%~eAFNKl5B2VS6t~nlx#kXWmry?0UM|@WgiVrQ=v%bbEtzcF3hO%vve3V=v#L|)($z&vpbr1D0mBUiV0SR|6Rf-%p zDRO$M3$5ZwnOACW$Mv%Rx0hX9NOnt+5VAAs0qT8JNlGb_-9%J9Lam@mh$U*0q;j^U zNa77php6OdA^iKXi7Mr@)Sc8?8DEl)2p0;uSU6^KQCYZC{F42abG?_ktaz(%8YGb( zDqYJK9xSyb0r_hvlmjINIXOL4$s3SC4Ppz_bl}l}3 zWwqU0*;Fy=gmK$jdAw2&rW3}q->Q7Ls>e4@Xksr`Jy*Ru<2#|7_NMx(F3(!9|4?>| zPWu|Wv=fW@Ca}Ms^K?zjjmk@oKW6=!)izqwRkhbmhQ<%3F4PQ{RYo&@koN6|bAMd! zj2LTcFEqGb)=9cC9gRD_6O~u(-)gT%h6ehyOevywr%j-}bf{BK7>#Sk8`D|dVi@f? zDHDu3QDZOF^_2ITG5e>wEsN8>(P7;2^qFWnQ_fgnh9`_RsnKvOq6Xt`P#Qrd`oAyOv-2~xg*dCicVH{(f3jT-1;*E|M;P3! zk@&`#BO4GYJdxF^VJDd}I+bBmMk|Kyz>$Of_T&1_Mkk0GFD6TfnVF_t(J;JcQ~QPv zKAUyN*6uBxcePV$`kWx#Fz7p8kaWVd->n~TvM%EjhV;qInBIPx5J+oh()H3=*O|K7 zP+b7lf z&E1s=<7^YDsO;J1<@WW)#q08uq4rFwIFJcL%_JT-LH=@RJU62HcPsM z-8HV=*z~#3@k8guh5M$?FFak|SV-NhGcs08-e~@E%Gmm*7F*Z!cIWO-^H;OHlu78g zNsh@#rR5wC$41Q)ZOnjsDKp~480&XUTdR+ZPru?%pG(-5C9m0cmK?Mjn;*0-dDyR^=>E?v7QKY4pV6P$tsr@+|5OBdT;wp8=Z6&q=7 zvHw`Qk-Df|_Y(m(nKZ$8!o=K!HY3ciuo=c5ck@%)%TH!Qy5$@MCS^NXm)JX7duI1$ zlF`79v~F$AUpaANy-vAa_~{vuwW@ z|2p?IZ*iKOh#D?smE*aNPMBm;)>s@ov@b3HV%=>=$0Y2kwm0kcnq-_r^!R0d%FbVL zclUqYk&r0zfteARgsg2Q?hGskXoK7%ik@rio)w)7z5JD|No1$bsc4YDk{}Oh{s(b( Bu$lk> delta 2116 zcmajfTWnNC7{Kw_(n3L6*jjp}c3Ku$E?rs{Xn_KyEtJF>6D%bvVwUZJ9(KEjbWaPc zF^fKU0ZGKMDj{kb5|c)WnvD7=ZOf;e-x zzkuuU29{&AOsP8TM(IC}GO;AeL|^hf?T>$f6}(^lPUAidaMvQ#ScO|r;}giF)nQzY zNB#fLVKx14P$qT_Wr^$O6kZrd`Twxre;sA3KE%~{3A3{FrE?1dT__P8z~%Td${v1- zOR*%VR2#P8BN)e8{Mh$%Yz*TG@isx zJdY3JU%q|wlzN8#1d=qWhUJmIgAe1MIDlIScN9-z50;auy|@i`;%nH5*HKowvX=Fi z8#@U@JdUgJD)MgCz;eivuD~wLpuF%L?!q~&r>sy4H{%B=5#Pkc7-r)mxDD6f(t$@l62fKo zR2bLc8f0#240)u=9;dOM#(O9;`VCnfwOJP?vq0AX!QddS5=-KS>@b zvHX2=V$LzMf9{0Y8jP4sFlsIaW2U=ejX73PlY6(~vw%5WnKI#d=Oa26k2_;2SKc>d zr(?U5)=)%kPg|qfPQ~J`J#J}dR1aB6%e97#u3BaGRc$YCYj0`oXlae=wv}sFb(k-! zs`bFIGZIVdp5akD?b?>^be)kdYTO^l6<3!A1~+B&-568Wh_?0~()p>;@%&Wkkd@X+ zXRn=z*)rtjrxFqMe>X6(k%)0>vZk)N$<)=>ghs5)=g0Tur(7-1Pg=vw+;w%rPG_9t z-uz@TWk<};+Bb6jbqA-J>kU7c;>LE<+xSt5cc=Ng@gcv}uOIbWHO+12SN*lQ)YNxp zWP{&2(|pEnHHGGz=NBwD)uCP!3w4;Yp%={X!v6YAIzc@7skBZwqsjcF>tx1b%*=Ho txoZo9MP^0#S#u%$6&LQYlEbldCdD-KIqlj>mn+9*<0lulo6058e*kRCQ0o8y diff --git a/rest_framework/locale/hu/LC_MESSAGES/django.po b/rest_framework/locale/hu/LC_MESSAGES/django.po index 9002f8e61..a1d75b9f0 100644 --- a/rest_framework/locale/hu/LC_MESSAGES/django.po +++ b/rest_framework/locale/hu/LC_MESSAGES/django.po @@ -3,14 +3,14 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: -# Zoltan Szalai , 2015 +# Zoltan Szalai , 2015,2018-2019 msgid "" msgstr "" "Project-Id-Version: Django REST framework\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-07-12 16:13+0100\n" -"PO-Revision-Date: 2017-08-03 14:58+0000\n" -"Last-Translator: Thomas Christie \n" +"POT-Creation-Date: 2020-10-13 21:45+0200\n" +"PO-Revision-Date: 2020-10-13 19:45+0000\n" +"Last-Translator: Xavier Ordoquy \n" "Language-Team: Hungarian (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/hu/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,423 +18,556 @@ msgstr "" "Language: hu\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: authentication.py:73 +#: authentication.py:70 msgid "Invalid basic header. No credentials provided." -msgstr "Érvénytelen basic fejlécmező. Nem voltak megadva azonosítók." +msgstr "Érvénytelen basic fejléc. Nem voltak megadva azonosítók." -#: authentication.py:76 +#: authentication.py:73 msgid "Invalid basic header. Credentials string should not contain spaces." -msgstr "Érvénytelen basic fejlécmező. Az azonosító karakterlánc nem tartalmazhat szóközöket." +msgstr "Érvénytelen basic fejléc. Az azonosító karakterlánc nem tartalmazhat szóközöket." -#: authentication.py:82 +#: authentication.py:83 msgid "Invalid basic header. Credentials not correctly base64 encoded." -msgstr "Érvénytelen basic fejlécmező. Az azonosítók base64 kódolása nem megfelelő." +msgstr "Érvénytelen basic fejléc. Az azonosítók base64 kódolása nem megfelelő." -#: authentication.py:99 +#: authentication.py:101 msgid "Invalid username/password." msgstr "Érvénytelen felhasználónév/jelszó." -#: authentication.py:102 authentication.py:198 +#: authentication.py:104 authentication.py:206 msgid "User inactive or deleted." msgstr "A felhasználó nincs aktiválva vagy törölve lett." -#: authentication.py:176 +#: authentication.py:184 msgid "Invalid token header. No credentials provided." -msgstr "Érvénytelen token fejlécmező. Nem voltak megadva azonosítók." +msgstr "Érvénytelen token fejléc. Nem voltak megadva azonosítók." -#: authentication.py:179 +#: authentication.py:187 msgid "Invalid token header. Token string should not contain spaces." -msgstr "Érvénytelen token fejlécmező. A token karakterlánc nem tartalmazhat szóközöket." +msgstr "Érvénytelen token fejléc. A token karakterlánc nem tartalmazhat szóközöket." -#: authentication.py:185 +#: authentication.py:193 msgid "" "Invalid token header. Token string should not contain invalid characters." -msgstr "" +msgstr "Érvénytelen token fejléc. A token karakterlánc nem tartalmazhat érvénytelen karaktereket." -#: authentication.py:195 +#: authentication.py:203 msgid "Invalid token." msgstr "Érvénytelen token." #: authtoken/apps.py:7 msgid "Auth Token" -msgstr "" +msgstr "Auth token" -#: authtoken/models.py:15 +#: authtoken/models.py:13 msgid "Key" -msgstr "" +msgstr "Kulcs" + +#: authtoken/models.py:16 +msgid "User" +msgstr "Felhasználó" #: authtoken/models.py:18 -msgid "User" -msgstr "" - -#: authtoken/models.py:20 msgid "Created" -msgstr "" +msgstr "Létrehozva" -#: authtoken/models.py:29 +#: authtoken/models.py:27 authtoken/serializers.py:19 msgid "Token" -msgstr "" +msgstr "Token" -#: authtoken/models.py:30 +#: authtoken/models.py:28 msgid "Tokens" -msgstr "" - -#: authtoken/serializers.py:8 -msgid "Username" -msgstr "" +msgstr "Tokenek" #: authtoken/serializers.py:9 +msgid "Username" +msgstr "Felhasználónév" + +#: authtoken/serializers.py:13 msgid "Password" -msgstr "" +msgstr "Jelszó" -#: authtoken/serializers.py:20 -msgid "User account is disabled." -msgstr "A felhasználó tiltva van." - -#: authtoken/serializers.py:23 +#: authtoken/serializers.py:35 msgid "Unable to log in with provided credentials." msgstr "A megadott azonosítókkal nem lehet bejelentkezni." -#: authtoken/serializers.py:26 +#: authtoken/serializers.py:38 msgid "Must include \"username\" and \"password\"." msgstr "Tartalmaznia kell a \"felhasználónevet\" és a \"jelszót\"." -#: exceptions.py:49 +#: exceptions.py:102 msgid "A server error occurred." msgstr "Szerver oldali hiba történt." -#: exceptions.py:84 +#: exceptions.py:142 +msgid "Invalid input." +msgstr "" + +#: exceptions.py:161 msgid "Malformed request." msgstr "Hibás kérés." -#: exceptions.py:89 +#: exceptions.py:167 msgid "Incorrect authentication credentials." msgstr "Hibás azonosítók." -#: exceptions.py:94 +#: exceptions.py:173 msgid "Authentication credentials were not provided." msgstr "Nem voltak megadva azonosítók." -#: exceptions.py:99 +#: exceptions.py:179 msgid "You do not have permission to perform this action." msgstr "Nincs jogosultsága a művelet végrehajtásához." -#: exceptions.py:104 views.py:81 +#: exceptions.py:185 msgid "Not found." msgstr "Nem található." -#: exceptions.py:109 +#: exceptions.py:191 +#, python-brace-format msgid "Method \"{method}\" not allowed." msgstr "A \"{method}\" metódus nem megengedett." -#: exceptions.py:120 +#: exceptions.py:202 msgid "Could not satisfy the request Accept header." -msgstr "A kérés Accept fejlécmezőjét nem lehetett kiszolgálni." +msgstr "A kérés Accept fejlécét nem lehetett teljesíteni." -#: exceptions.py:132 +#: exceptions.py:212 +#, python-brace-format msgid "Unsupported media type \"{media_type}\" in request." msgstr "Nem támogatott média típus \"{media_type}\" a kérésben." -#: exceptions.py:145 +#: exceptions.py:223 msgid "Request was throttled." msgstr "A kérés korlátozva lett." -#: fields.py:269 relations.py:206 relations.py:239 validators.py:98 -#: validators.py:181 +#: exceptions.py:224 +#, python-brace-format +msgid "Expected available in {wait} second." +msgstr "" + +#: exceptions.py:225 +#, python-brace-format +msgid "Expected available in {wait} seconds." +msgstr "" + +#: fields.py:316 relations.py:245 relations.py:279 validators.py:90 +#: validators.py:183 msgid "This field is required." msgstr "Ennek a mezőnek a megadása kötelező." -#: fields.py:270 +#: fields.py:317 msgid "This field may not be null." msgstr "Ez a mező nem lehet null értékű." -#: fields.py:608 fields.py:639 -msgid "\"{input}\" is not a valid boolean." -msgstr "Az \"{input}\" nem egy érvényes logikai érték." +#: fields.py:701 +msgid "Must be a valid boolean." +msgstr "" -#: fields.py:674 +#: fields.py:766 +msgid "Not a valid string." +msgstr "" + +#: fields.py:767 msgid "This field may not be blank." msgstr "Ez a mező nem lehet üres." -#: fields.py:675 fields.py:1675 +#: fields.py:768 fields.py:1881 +#, python-brace-format msgid "Ensure this field has no more than {max_length} characters." msgstr "Bizonyosodjon meg arról, hogy ez a mező legfeljebb {max_length} karakterből áll." -#: fields.py:676 +#: fields.py:769 +#, python-brace-format msgid "Ensure this field has at least {min_length} characters." msgstr "Bizonyosodjon meg arról, hogy ez a mező legalább {min_length} karakterből áll." -#: fields.py:713 +#: fields.py:816 msgid "Enter a valid email address." msgstr "Adjon meg egy érvényes e-mail címet!" -#: fields.py:724 +#: fields.py:827 msgid "This value does not match the required pattern." msgstr "Ez az érték nem illeszkedik a szükséges mintázatra." -#: fields.py:735 +#: fields.py:838 msgid "" "Enter a valid \"slug\" consisting of letters, numbers, underscores or " "hyphens." msgstr "Az URL barát cím csak betűket, számokat, aláhúzásokat és kötőjeleket tartalmazhat." -#: fields.py:747 +#: fields.py:839 +msgid "" +"Enter a valid \"slug\" consisting of Unicode letters, numbers, underscores, " +"or hyphens." +msgstr "" + +#: fields.py:854 msgid "Enter a valid URL." msgstr "Adjon meg egy érvényes URL-t!" -#: fields.py:760 -msgid "\"{value}\" is not a valid UUID." +#: fields.py:867 +msgid "Must be a valid UUID." msgstr "" -#: fields.py:796 +#: fields.py:903 msgid "Enter a valid IPv4 or IPv6 address." -msgstr "" +msgstr "Adjon meg egy érvényes IPv4 vagy IPv6 címet!" -#: fields.py:821 +#: fields.py:931 msgid "A valid integer is required." msgstr "Egy érvényes egész szám megadása szükséges." -#: fields.py:822 fields.py:857 fields.py:891 +#: fields.py:932 fields.py:969 fields.py:1005 fields.py:1366 +#, python-brace-format msgid "Ensure this value is less than or equal to {max_value}." msgstr "Bizonyosodjon meg arról, hogy ez az érték legfeljebb {max_value}." -#: fields.py:823 fields.py:858 fields.py:892 +#: fields.py:933 fields.py:970 fields.py:1006 fields.py:1367 +#, python-brace-format msgid "Ensure this value is greater than or equal to {min_value}." msgstr "Bizonyosodjon meg arról, hogy ez az érték legalább {min_value}." -#: fields.py:824 fields.py:859 fields.py:896 +#: fields.py:934 fields.py:971 fields.py:1010 msgid "String value too large." msgstr "A karakterlánc túl hosszú." -#: fields.py:856 fields.py:890 +#: fields.py:968 fields.py:1004 msgid "A valid number is required." msgstr "Egy érvényes szám megadása szükséges." -#: fields.py:893 +#: fields.py:1007 +#, python-brace-format msgid "Ensure that there are no more than {max_digits} digits in total." msgstr "Bizonyosodjon meg arról, hogy a számjegyek száma összesen legfeljebb {max_digits}." -#: fields.py:894 +#: fields.py:1008 +#, python-brace-format msgid "" "Ensure that there are no more than {max_decimal_places} decimal places." msgstr "Bizonyosodjon meg arról, hogy a tizedes tört törtrészében levő számjegyek száma összesen legfeljebb {max_decimal_places}." -#: fields.py:895 +#: fields.py:1009 +#, python-brace-format msgid "" "Ensure that there are no more than {max_whole_digits} digits before the " "decimal point." msgstr "Bizonyosodjon meg arról, hogy a tizedes tört egész részében levő számjegyek száma összesen legfeljebb {max_whole_digits}." -#: fields.py:1025 +#: fields.py:1148 +#, python-brace-format msgid "Datetime has wrong format. Use one of these formats instead: {format}." msgstr "A dátum formátuma hibás. Használja ezek valamelyikét helyette: {format}." -#: fields.py:1026 +#: fields.py:1149 msgid "Expected a datetime but got a date." msgstr "Időt is tartalmazó dátum helyett egy időt nem tartalmazó dátum lett elküldve." -#: fields.py:1103 +#: fields.py:1150 +#, python-brace-format +msgid "Invalid datetime for the timezone \"{timezone}\"." +msgstr "" + +#: fields.py:1151 +msgid "Datetime value out of range." +msgstr "" + +#: fields.py:1236 +#, python-brace-format msgid "Date has wrong format. Use one of these formats instead: {format}." msgstr "A dátum formátuma hibás. Használja ezek valamelyikét helyette: {format}." -#: fields.py:1104 +#: fields.py:1237 msgid "Expected a date but got a datetime." msgstr "Időt nem tartalmazó dátum helyett egy időt is tartalmazó dátum lett elküldve." -#: fields.py:1170 +#: fields.py:1303 +#, python-brace-format msgid "Time has wrong format. Use one of these formats instead: {format}." msgstr "Az idő formátuma hibás. Használja ezek valamelyikét helyette: {format}." -#: fields.py:1232 +#: fields.py:1365 +#, python-brace-format msgid "Duration has wrong format. Use one of these formats instead: {format}." -msgstr "" +msgstr "Az időtartam formátuma hibás. Használja ezek valamelyikét helyette: {format}." -#: fields.py:1251 fields.py:1300 +#: fields.py:1399 fields.py:1456 +#, python-brace-format msgid "\"{input}\" is not a valid choice." -msgstr "Az \"{input}\" nem egy érvényes elem." +msgstr "Érvénytelen választási lehetőség: \"{input}\"" -#: fields.py:1254 relations.py:71 relations.py:441 +#: fields.py:1402 +#, python-brace-format msgid "More than {count} items..." -msgstr "" +msgstr "Több, mint {count} elem ..." -#: fields.py:1301 fields.py:1448 relations.py:437 serializers.py:524 +#: fields.py:1457 fields.py:1603 relations.py:485 serializers.py:570 +#, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "Elemek listája helyett \"{input_type}\" lett elküldve." -#: fields.py:1302 +#: fields.py:1458 msgid "This selection may not be empty." -msgstr "" +msgstr "Választania kell egy elemet." -#: fields.py:1339 +#: fields.py:1495 +#, python-brace-format msgid "\"{input}\" is not a valid path choice." -msgstr "" +msgstr "Érvénytelen választási lehetőség: \"{input}\"" -#: fields.py:1358 +#: fields.py:1514 msgid "No file was submitted." msgstr "Semmilyen fájl sem került feltöltésre." -#: fields.py:1359 +#: fields.py:1515 msgid "" "The submitted data was not a file. Check the encoding type on the form." msgstr "Az elküldött adat nem egy fájl volt. Ellenőrizze a kódolás típusát az űrlapon!" -#: fields.py:1360 +#: fields.py:1516 msgid "No filename could be determined." msgstr "A fájlnév nem megállapítható." -#: fields.py:1361 +#: fields.py:1517 msgid "The submitted file is empty." msgstr "A küldött fájl üres." -#: fields.py:1362 +#: fields.py:1518 +#, python-brace-format msgid "" "Ensure this filename has at most {max_length} characters (it has {length})." msgstr "Bizonyosodjon meg arról, hogy a fájlnév legfeljebb {max_length} karakterből áll (jelenlegi hossza: {length})." -#: fields.py:1410 +#: fields.py:1566 msgid "" "Upload a valid image. The file you uploaded was either not an image or a " "corrupted image." msgstr "Töltsön fel egy érvényes képfájlt! A feltöltött fájl nem kép volt, vagy megsérült." -#: fields.py:1449 relations.py:438 serializers.py:525 +#: fields.py:1604 relations.py:486 serializers.py:571 msgid "This list may not be empty." +msgstr "Nem lehet üres a lista." + +#: fields.py:1605 +#, python-brace-format +msgid "Ensure this field has at least {min_length} elements." msgstr "" -#: fields.py:1502 +#: fields.py:1606 +#, python-brace-format +msgid "Ensure this field has no more than {max_length} elements." +msgstr "" + +#: fields.py:1682 +#, python-brace-format msgid "Expected a dictionary of items but got type \"{input_type}\"." +msgstr "Dictionary elemek helyett \"{input_type}\" lett megadva." + +#: fields.py:1683 +msgid "This dictionary may not be empty." msgstr "" -#: fields.py:1549 +#: fields.py:1755 msgid "Value must be valid JSON." +msgstr "Az értéknek érvényes JSON-nek lennie." + +#: filters.py:49 templates/rest_framework/filters/search.html:2 +msgid "Search" +msgstr "Keresés" + +#: filters.py:50 +msgid "A search term." msgstr "" -#: filters.py:36 templates/rest_framework/filters/django_filter.html:5 -msgid "Submit" +#: filters.py:180 templates/rest_framework/filters/ordering.html:3 +msgid "Ordering" +msgstr "Rendezés" + +#: filters.py:181 +msgid "Which field to use when ordering the results." msgstr "" -#: filters.py:336 +#: filters.py:287 msgid "ascending" -msgstr "" +msgstr "növekvő" -#: filters.py:337 +#: filters.py:288 msgid "descending" +msgstr "csökkenő" + +#: pagination.py:174 +msgid "A page number within the paginated result set." msgstr "" -#: pagination.py:193 +#: pagination.py:179 pagination.py:372 pagination.py:590 +msgid "Number of results to return per page." +msgstr "" + +#: pagination.py:189 msgid "Invalid page." +msgstr "Érvénytelen oldal." + +#: pagination.py:374 +msgid "The initial index from which to return the results." msgstr "" -#: pagination.py:427 +#: pagination.py:581 +msgid "The pagination cursor value." +msgstr "" + +#: pagination.py:583 msgid "Invalid cursor" -msgstr "" +msgstr "Érvénytelen kurzor" -#: relations.py:207 +#: relations.py:246 +#, python-brace-format msgid "Invalid pk \"{pk_value}\" - object does not exist." msgstr "Érvénytelen pk \"{pk_value}\" - az objektum nem létezik." -#: relations.py:208 +#: relations.py:247 +#, python-brace-format msgid "Incorrect type. Expected pk value, received {data_type}." msgstr "Helytelen típus. pk érték helyett {data_type} lett elküldve." -#: relations.py:240 +#: relations.py:280 msgid "Invalid hyperlink - No URL match." msgstr "Érvénytelen link - Nem illeszkedő URL." -#: relations.py:241 +#: relations.py:281 msgid "Invalid hyperlink - Incorrect URL match." msgstr "Érvénytelen link. - Eltérő URL illeszkedés." -#: relations.py:242 +#: relations.py:282 msgid "Invalid hyperlink - Object does not exist." msgstr "Érvénytelen link - Az objektum nem létezik." -#: relations.py:243 +#: relations.py:283 +#, python-brace-format msgid "Incorrect type. Expected URL string, received {data_type}." msgstr "Helytelen típus. URL karakterlánc helyett {data_type} lett elküldve." -#: relations.py:401 +#: relations.py:448 +#, python-brace-format msgid "Object with {slug_name}={value} does not exist." msgstr "Nem létezik olyan objektum, amelynél {slug_name}={value}." -#: relations.py:402 +#: relations.py:449 msgid "Invalid value." msgstr "Érvénytelen érték." -#: serializers.py:326 +#: schemas/utils.py:32 +msgid "unique integer value" +msgstr "" + +#: schemas/utils.py:34 +msgid "UUID string" +msgstr "" + +#: schemas/utils.py:36 +msgid "unique value" +msgstr "" + +#: schemas/utils.py:38 +#, python-brace-format +msgid "A {value_type} identifying this {name}." +msgstr "" + +#: serializers.py:337 +#, python-brace-format msgid "Invalid data. Expected a dictionary, but got {datatype}." msgstr "Érvénytelen adat. Egy dictionary helyett {datatype} lett elküldve." #: templates/rest_framework/admin.html:116 -#: templates/rest_framework/base.html:128 +#: templates/rest_framework/base.html:136 +msgid "Extra Actions" +msgstr "" + +#: templates/rest_framework/admin.html:130 +#: templates/rest_framework/base.html:150 msgid "Filters" +msgstr "Szűrők" + +#: templates/rest_framework/base.html:37 +msgid "navbar" msgstr "" -#: templates/rest_framework/filters/django_filter.html:2 -#: templates/rest_framework/filters/django_filter_crispyforms.html:4 -msgid "Field filters" +#: templates/rest_framework/base.html:75 +msgid "content" msgstr "" -#: templates/rest_framework/filters/ordering.html:3 -msgid "Ordering" +#: templates/rest_framework/base.html:78 +msgid "request form" msgstr "" -#: templates/rest_framework/filters/search.html:2 -msgid "Search" +#: templates/rest_framework/base.html:157 +msgid "main content" msgstr "" -#: templates/rest_framework/horizontal/radio.html:2 -#: templates/rest_framework/inline/radio.html:2 -#: templates/rest_framework/vertical/radio.html:2 +#: templates/rest_framework/base.html:173 +msgid "request info" +msgstr "" + +#: templates/rest_framework/base.html:177 +msgid "response info" +msgstr "" + +#: templates/rest_framework/horizontal/radio.html:4 +#: templates/rest_framework/inline/radio.html:3 +#: templates/rest_framework/vertical/radio.html:3 msgid "None" -msgstr "" +msgstr "Semmi" -#: templates/rest_framework/horizontal/select_multiple.html:2 -#: templates/rest_framework/inline/select_multiple.html:2 -#: templates/rest_framework/vertical/select_multiple.html:2 +#: templates/rest_framework/horizontal/select_multiple.html:4 +#: templates/rest_framework/inline/select_multiple.html:3 +#: templates/rest_framework/vertical/select_multiple.html:3 msgid "No items to select." -msgstr "" +msgstr "Nincsenek kiválasztható elemek." -#: validators.py:43 +#: validators.py:39 msgid "This field must be unique." msgstr "Ennek a mezőnek egyedinek kell lennie." -#: validators.py:97 +#: validators.py:89 +#, python-brace-format msgid "The fields {field_names} must make a unique set." msgstr "A {field_names} mezőnevek nem tartalmazhatnak duplikátumot." -#: validators.py:245 +#: validators.py:171 +#, python-brace-format +msgid "Surrogate characters are not allowed: U+{code_point:X}." +msgstr "" + +#: validators.py:243 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" date." msgstr "A mezőnek egyedinek kell lennie a \"{date_field}\" dátumra." -#: validators.py:260 +#: validators.py:258 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" month." msgstr "A mezőnek egyedinek kell lennie a \"{date_field}\" hónapra." -#: validators.py:273 +#: validators.py:271 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" year." msgstr "A mezőnek egyedinek kell lennie a \"{date_field}\" évre." -#: versioning.py:42 +#: versioning.py:40 msgid "Invalid version in \"Accept\" header." -msgstr "Érvénytelen verzió az \"Accept\" fejlécmezőben." +msgstr "Érvénytelen verzió az \"Accept\" fejlécben." -#: versioning.py:73 +#: versioning.py:71 msgid "Invalid version in URL path." msgstr "Érvénytelen verzió az URL elérési útban." -#: versioning.py:115 +#: versioning.py:116 msgid "Invalid version in URL path. Does not match any version namespace." -msgstr "" +msgstr "Érvénytelen verzió az URL elérési útban. Nem illeszkedik egyetlen verzió névtérre sem." -#: versioning.py:147 +#: versioning.py:148 msgid "Invalid version in hostname." msgstr "Érvénytelen verzió a hosztnévben." -#: versioning.py:169 +#: versioning.py:170 msgid "Invalid version in query parameter." msgstr "Érvénytelen verzió a lekérdezési paraméterben." - -#: views.py:88 -msgid "Permission denied." -msgstr "" diff --git a/rest_framework/locale/hy/LC_MESSAGES/django.mo b/rest_framework/locale/hy/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..c5f3ebcfaa1efa88d9c0bbd02b03d659b1ae662c GIT binary patch literal 12885 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 Z>1&, 2019 +msgid "" +msgstr "" +"Project-Id-Version: Django REST framework\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-10-13 21:45+0200\n" +"PO-Revision-Date: 2020-10-13 19:45+0000\n" +"Last-Translator: Xavier Ordoquy \n" +"Language-Team: Armenian (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/hy/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: hy\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: authentication.py:70 +msgid "Invalid basic header. No credentials provided." +msgstr "Անվավեր վերնագիր: Նույնականացման տվյալները տրամադրված չեն:" + +#: authentication.py:73 +msgid "Invalid basic header. Credentials string should not contain spaces." +msgstr "Անվավեր վերնագիր: Նույնականացման տողը չպետք է պարունակի բացատներ:" + +#: authentication.py:83 +msgid "Invalid basic header. Credentials not correctly base64 encoded." +msgstr "Անվավեր վերնագիր: Նույնականացման տվյալները սխալ են ձեւակերպված base64-ում:" + +#: authentication.py:101 +msgid "Invalid username/password." +msgstr "Անվավեր օգտանուն / գաղտնաբառ:" + +#: authentication.py:104 authentication.py:206 +msgid "User inactive or deleted." +msgstr "Օգտատերը ջնջված է կամ ոչ ակտիվ:" + +#: authentication.py:184 +msgid "Invalid token header. No credentials provided." +msgstr "Անվավեր տոկենի վերնագիր: Նույնականացման տվյալները տրամադրված չեն:" + +#: authentication.py:187 +msgid "Invalid token header. Token string should not contain spaces." +msgstr "Անվավեր տոկենի վերնագիր: Տոկենի տողը չպետք է պարունակի բացատներ:" + +#: authentication.py:193 +msgid "" +"Invalid token header. Token string should not contain invalid characters." +msgstr "Անվավեր տոկենի վերնագիր: Տոկենի տողը չպետք է պարունակի անթույլատրելի նիշեր:" + +#: authentication.py:203 +msgid "Invalid token." +msgstr "Անվավեր տոկեն։" + +#: authtoken/apps.py:7 +msgid "Auth Token" +msgstr "Վավերացման Տոկեն։" + +#: authtoken/models.py:13 +msgid "Key" +msgstr "Բանալի" + +#: authtoken/models.py:16 +msgid "User" +msgstr "Օգտատեր" + +#: authtoken/models.py:18 +msgid "Created" +msgstr "Ստեղծված է" + +#: authtoken/models.py:27 authtoken/serializers.py:19 +msgid "Token" +msgstr "Տոկեն" + +#: authtoken/models.py:28 +msgid "Tokens" +msgstr "Տոկեններ" + +#: authtoken/serializers.py:9 +msgid "Username" +msgstr "Օգտանուն" + +#: authtoken/serializers.py:13 +msgid "Password" +msgstr "Գաղտնաբառ" + +#: authtoken/serializers.py:35 +msgid "Unable to log in with provided credentials." +msgstr "Անհնար է մուտք գործել տրամադրված նույնականացման տվյալներով:" + +#: authtoken/serializers.py:38 +msgid "Must include \"username\" and \"password\"." +msgstr "Պետք է ներառի «օգտանուն» եւ «գաղտնաբառ»:" + +#: exceptions.py:102 +msgid "A server error occurred." +msgstr "Տեղի ունեցել սերվերի սխալ:" + +#: exceptions.py:142 +msgid "Invalid input." +msgstr "" + +#: exceptions.py:161 +msgid "Malformed request." +msgstr "Սխալ հարցում:" + +#: exceptions.py:167 +msgid "Incorrect authentication credentials." +msgstr "Սխալ նույնականացման տվյալներ։" + +#: exceptions.py:173 +msgid "Authentication credentials were not provided." +msgstr "Նույնականացման տվյալները տրամադրված չեն:" + +#: exceptions.py:179 +msgid "You do not have permission to perform this action." +msgstr "Այս գործողությունը կատարելու թույլտվություն չունեք:" + +#: exceptions.py:185 +msgid "Not found." +msgstr "Չի գտնվել։" + +#: exceptions.py:191 +#, python-brace-format +msgid "Method \"{method}\" not allowed." +msgstr "\"{method}\" մեթոդը թույլատրված չէ:" + +#: exceptions.py:202 +msgid "Could not satisfy the request Accept header." +msgstr "Չհաջողվեց բավարարել հարցման Ընդունել վերնագիրը:" + +#: exceptions.py:212 +#, python-brace-format +msgid "Unsupported media type \"{media_type}\" in request." +msgstr "Անհամապատասխան մեդիա տիպ \"{media_type}\":" + +#: exceptions.py:223 +msgid "Request was throttled." +msgstr "Հարցումն ընդհատվել է:" + +#: exceptions.py:224 +#, python-brace-format +msgid "Expected available in {wait} second." +msgstr "" + +#: exceptions.py:225 +#, python-brace-format +msgid "Expected available in {wait} seconds." +msgstr "" + +#: fields.py:316 relations.py:245 relations.py:279 validators.py:90 +#: validators.py:183 +msgid "This field is required." +msgstr "Այս դաշտը պարտադիր է:" + +#: fields.py:317 +msgid "This field may not be null." +msgstr "Այս դաշտը չի կարող զրոյական լինել:" + +#: fields.py:701 +msgid "Must be a valid boolean." +msgstr "" + +#: fields.py:766 +msgid "Not a valid string." +msgstr "" + +#: fields.py:767 +msgid "This field may not be blank." +msgstr "Այս դաշտը չի կարող դատարկ լինել:" + +#: fields.py:768 fields.py:1881 +#, python-brace-format +msgid "Ensure this field has no more than {max_length} characters." +msgstr "Համոզվեք, որ այս դաշտը լինի ոչ ավել, քան {max_length} նիշ:" + +#: fields.py:769 +#, python-brace-format +msgid "Ensure this field has at least {min_length} characters." +msgstr "Համոզվեք, որ այս դաշտը ունի առնվազն {min_length} նիշ:" + +#: fields.py:816 +msgid "Enter a valid email address." +msgstr "Մուտքագրեք վավեր էլ.փոստի հասցե:" + +#: fields.py:827 +msgid "This value does not match the required pattern." +msgstr "Այս արժեքը չի համապատասխանում պահանջվող օրինակին:" + +#: fields.py:838 +msgid "" +"Enter a valid \"slug\" consisting of letters, numbers, underscores or " +"hyphens." +msgstr "Մուտքագրեք վավեր \"slug\", որը բաղկացած է տառերից, թվերից, ընդգծումից կամ դեֆիսից:" + +#: fields.py:839 +msgid "" +"Enter a valid \"slug\" consisting of Unicode letters, numbers, underscores, " +"or hyphens." +msgstr "" + +#: fields.py:854 +msgid "Enter a valid URL." +msgstr "Մուտքագրեք վավեր հղում:" + +#: fields.py:867 +msgid "Must be a valid UUID." +msgstr "" + +#: fields.py:903 +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Մուտքագրեք վավեր IPv4 կամ IPv6 հասցե:" + +#: fields.py:931 +msgid "A valid integer is required." +msgstr "Պահանջվում է լիարժեք ամբողջական թիվ:" + +#: fields.py:932 fields.py:969 fields.py:1005 fields.py:1366 +#, python-brace-format +msgid "Ensure this value is less than or equal to {max_value}." +msgstr "Համոզվեք, որ արժեքը փոքր է կամ հավասար {max_value} -ին։" + +#: fields.py:933 fields.py:970 fields.py:1006 fields.py:1367 +#, python-brace-format +msgid "Ensure this value is greater than or equal to {min_value}." +msgstr "Համոզվեք, որ արժեքը մեծ է կամ հավասար {min_value} -ին։" + +#: fields.py:934 fields.py:971 fields.py:1010 +msgid "String value too large." +msgstr "Տողը ունի չափազանց մեծ արժեք:" + +#: fields.py:968 fields.py:1004 +msgid "A valid number is required." +msgstr "Պահանջվում է վավեր համար:" + +#: fields.py:1007 +#, python-brace-format +msgid "Ensure that there are no more than {max_digits} digits in total." +msgstr "Համոզվեք, որ {max_digits} -ից ավել թվանշան չկա:" + +#: fields.py:1008 +#, python-brace-format +msgid "" +"Ensure that there are no more than {max_decimal_places} decimal places." +msgstr "Համոզվեք, որ {max_decimal_places} -ից ավել տասնորդական նշան չկա:" + +#: fields.py:1009 +#, python-brace-format +msgid "" +"Ensure that there are no more than {max_whole_digits} digits before the " +"decimal point." +msgstr "Համոզվեք, որ տասնորդական կետից առաջ չկա {max_whole_digits} -ից ավել թվանշան:" + +#: fields.py:1148 +#, python-brace-format +msgid "Datetime has wrong format. Use one of these formats instead: {format}." +msgstr "Datetime -ը սխալ ձեւաչափ ունի: Փոխարենը օգտագործեք այս ձեւաչափերից մեկը. {format} ։" + +#: fields.py:1149 +msgid "Expected a datetime but got a date." +msgstr "Ակնկալվում է օրվա ժամը, սակայն ամսաթիվ է ստացել:" + +#: fields.py:1150 +#, python-brace-format +msgid "Invalid datetime for the timezone \"{timezone}\"." +msgstr "" + +#: fields.py:1151 +msgid "Datetime value out of range." +msgstr "" + +#: fields.py:1236 +#, python-brace-format +msgid "Date has wrong format. Use one of these formats instead: {format}." +msgstr "Ամսաթիվն ունի սխալ ձեւաչափ: Փոխարենը օգտագործեք այս ձեւաչափերից մեկը. {format} ։" + +#: fields.py:1237 +msgid "Expected a date but got a datetime." +msgstr "Ակնկալվում է ամսաթիվ, սակայն ստացել է օրվա ժամը:" + +#: fields.py:1303 +#, python-brace-format +msgid "Time has wrong format. Use one of these formats instead: {format}." +msgstr "Ժամանակը սխալ ձեւաչափ ունի: Փոխարենը օգտագործեք այս ձեւաչափերից մեկը. {format} ։" + +#: fields.py:1365 +#, python-brace-format +msgid "Duration has wrong format. Use one of these formats instead: {format}." +msgstr "Տեւողությունը սխալ ձեւաչափ ունի: Փոխարենը օգտագործեք այս ձեւաչափերից մեկը. {format} ։" + +#: fields.py:1399 fields.py:1456 +#, python-brace-format +msgid "\"{input}\" is not a valid choice." +msgstr "\"{input}\" -ը վավեր ընտրություն չէ:" + +#: fields.py:1402 +#, python-brace-format +msgid "More than {count} items..." +msgstr "Ավելի քան {count} առարկա..." + +#: fields.py:1457 fields.py:1603 relations.py:485 serializers.py:570 +#, python-brace-format +msgid "Expected a list of items but got type \"{input_type}\"." +msgstr "Ակնկալվում է տարրերի ցանկ, բայց ստացել է \"{input_type}\" -ի տիպ:" + +#: fields.py:1458 +msgid "This selection may not be empty." +msgstr "Այս ընտրությունը չի կարող դատարկ լինել:" + +#: fields.py:1495 +#, python-brace-format +msgid "\"{input}\" is not a valid path choice." +msgstr "\"{input}\" -ը վավեր ճանապարհի ընտրություն չէ:" + +#: fields.py:1514 +msgid "No file was submitted." +msgstr "Ոչ մի ֆայլ չի ուղարկվել:" + +#: fields.py:1515 +msgid "" +"The submitted data was not a file. Check the encoding type on the form." +msgstr "Ուղարկված տվյալը ֆայլ չէ: Ստուգեք կոդավորման տիպը:" + +#: fields.py:1516 +msgid "No filename could be determined." +msgstr "Ֆայլի անունը հնարավոր չէ որոշվել:" + +#: fields.py:1517 +msgid "The submitted file is empty." +msgstr "Ուղարկված ֆայլը դատարկ է:" + +#: fields.py:1518 +#, python-brace-format +msgid "" +"Ensure this filename has at most {max_length} characters (it has {length})." +msgstr "Համոզվեք, որ այս ֆայլի անունը ունի առավելագույնը {max_length} նիշ, (այն ունի {length})։" + +#: fields.py:1566 +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "Վերբեռնեք վավեր նկար: Ձեր բեռնած ֆայլը կամ նկար չէ կամ վնասված նկար է:" + +#: fields.py:1604 relations.py:486 serializers.py:571 +msgid "This list may not be empty." +msgstr "Այս ցանկը չի կարող դատարկ լինել:" + +#: fields.py:1605 +#, python-brace-format +msgid "Ensure this field has at least {min_length} elements." +msgstr "" + +#: fields.py:1606 +#, python-brace-format +msgid "Ensure this field has no more than {max_length} elements." +msgstr "" + +#: fields.py:1682 +#, python-brace-format +msgid "Expected a dictionary of items but got type \"{input_type}\"." +msgstr "Ակնկալվում է տարրերի բառարան, բայց ստացել է \"{input_type}\" տիպ։" + +#: fields.py:1683 +msgid "This dictionary may not be empty." +msgstr "" + +#: fields.py:1755 +msgid "Value must be valid JSON." +msgstr "Արժեքը պետք է լինի JSON:" + +#: filters.py:49 templates/rest_framework/filters/search.html:2 +msgid "Search" +msgstr "Որոնում" + +#: filters.py:50 +msgid "A search term." +msgstr "" + +#: filters.py:180 templates/rest_framework/filters/ordering.html:3 +msgid "Ordering" +msgstr "Պատվիրել" + +#: filters.py:181 +msgid "Which field to use when ordering the results." +msgstr "" + +#: filters.py:287 +msgid "ascending" +msgstr "աճման կարգով" + +#: filters.py:288 +msgid "descending" +msgstr "նվազման կարգով" + +#: pagination.py:174 +msgid "A page number within the paginated result set." +msgstr "" + +#: pagination.py:179 pagination.py:372 pagination.py:590 +msgid "Number of results to return per page." +msgstr "" + +#: pagination.py:189 +msgid "Invalid page." +msgstr "Անվավեր էջ:" + +#: pagination.py:374 +msgid "The initial index from which to return the results." +msgstr "" + +#: pagination.py:581 +msgid "The pagination cursor value." +msgstr "" + +#: pagination.py:583 +msgid "Invalid cursor" +msgstr "Սխալ կուրսոր" + +#: relations.py:246 +#, python-brace-format +msgid "Invalid pk \"{pk_value}\" - object does not exist." +msgstr "Անվավեր pk \"{pk_value}\" օբյեկտը գոյություն չունի:" + +#: relations.py:247 +#, python-brace-format +msgid "Incorrect type. Expected pk value, received {data_type}." +msgstr "Անհայտ տիպ: Ակնկալվում է pk արժեք, ստացված է {data_type}։" + +#: relations.py:280 +msgid "Invalid hyperlink - No URL match." +msgstr "Անվավեր հղում - Ոչ մի հղման համընկնում:" + +#: relations.py:281 +msgid "Invalid hyperlink - Incorrect URL match." +msgstr "Անվավեր հղում - սխալ հղման համընկնում:" + +#: relations.py:282 +msgid "Invalid hyperlink - Object does not exist." +msgstr "Անվավեր հղում - տվյալ օբյեկտը գոյություն չունի:" + +#: relations.py:283 +#, python-brace-format +msgid "Incorrect type. Expected URL string, received {data_type}." +msgstr "Անվավեր տիպ: Սպասվում է հղման տողը, ստացել է {data_type}։" + +#: relations.py:448 +#, python-brace-format +msgid "Object with {slug_name}={value} does not exist." +msgstr "{slug_name}={value} տվյալ պարունակությամբ օբյեկտ գոյություն չունի:" + +#: relations.py:449 +msgid "Invalid value." +msgstr "Անվավեր արժեք:" + +#: schemas/utils.py:32 +msgid "unique integer value" +msgstr "" + +#: schemas/utils.py:34 +msgid "UUID string" +msgstr "" + +#: schemas/utils.py:36 +msgid "unique value" +msgstr "" + +#: schemas/utils.py:38 +#, python-brace-format +msgid "A {value_type} identifying this {name}." +msgstr "" + +#: serializers.py:337 +#, python-brace-format +msgid "Invalid data. Expected a dictionary, but got {datatype}." +msgstr "Անվավեր տվյալներ: Սպասվում է բառարան, բայց ստացվել է {datatype}։" + +#: templates/rest_framework/admin.html:116 +#: templates/rest_framework/base.html:136 +msgid "Extra Actions" +msgstr "" + +#: templates/rest_framework/admin.html:130 +#: templates/rest_framework/base.html:150 +msgid "Filters" +msgstr "Ֆիլտրեր" + +#: templates/rest_framework/base.html:37 +msgid "navbar" +msgstr "" + +#: templates/rest_framework/base.html:75 +msgid "content" +msgstr "" + +#: templates/rest_framework/base.html:78 +msgid "request form" +msgstr "" + +#: templates/rest_framework/base.html:157 +msgid "main content" +msgstr "" + +#: templates/rest_framework/base.html:173 +msgid "request info" +msgstr "" + +#: templates/rest_framework/base.html:177 +msgid "response info" +msgstr "" + +#: templates/rest_framework/horizontal/radio.html:4 +#: templates/rest_framework/inline/radio.html:3 +#: templates/rest_framework/vertical/radio.html:3 +msgid "None" +msgstr "Ոչ մեկը" + +#: templates/rest_framework/horizontal/select_multiple.html:4 +#: templates/rest_framework/inline/select_multiple.html:3 +#: templates/rest_framework/vertical/select_multiple.html:3 +msgid "No items to select." +msgstr "Ոչ մի տարր ընտրված չէ։" + +#: validators.py:39 +msgid "This field must be unique." +msgstr "Այս դաշտը պետք է լինի եզակի:" + +#: validators.py:89 +#, python-brace-format +msgid "The fields {field_names} must make a unique set." +msgstr "{field_names} դաշտերը պետք է կազմեն եզակի հավաքածու:" + +#: validators.py:171 +#, python-brace-format +msgid "Surrogate characters are not allowed: U+{code_point:X}." +msgstr "" + +#: validators.py:243 +#, python-brace-format +msgid "This field must be unique for the \"{date_field}\" date." +msgstr "Այս դաշտը պետք է եզակի լինի \"{date_field}\" ամսաթվի համար:" + +#: validators.py:258 +#, python-brace-format +msgid "This field must be unique for the \"{date_field}\" month." +msgstr "Այս դաշտը պետք է եզակի լինի \"{date_field}\" ամսվա համար:" + +#: validators.py:271 +#, python-brace-format +msgid "This field must be unique for the \"{date_field}\" year." +msgstr "Այս դաշտը պետք է եզակի լինի \"{date_field}\" տարվա համար:" + +#: versioning.py:40 +msgid "Invalid version in \"Accept\" header." +msgstr "\"Accept\" վերնագրի անվավեր տարբերակ:" + +#: versioning.py:71 +msgid "Invalid version in URL path." +msgstr "Անվավեր տարբերակ հղման ճանապարհի մեջ:" + +#: versioning.py:116 +msgid "Invalid version in URL path. Does not match any version namespace." +msgstr "Անվավեր տարբերակ հղման ճանապարհի մեջ: Չի համապատասխանում որեւէ անվանման տարբերակի:" + +#: versioning.py:148 +msgid "Invalid version in hostname." +msgstr "Անվավեր տարբերակ անվանման մեջ:" + +#: versioning.py:170 +msgid "Invalid version in query parameter." +msgstr "Անվավեր տարբերակ `հարցման պարամետրում:" diff --git a/rest_framework/locale/id/LC_MESSAGES/django.mo b/rest_framework/locale/id/LC_MESSAGES/django.mo index 471d5a830e78ff06fb04917d914030cf36639ad5..c67e2a1da9e52599dd32d35227af0187b2ec1b12 100644 GIT binary patch literal 5188 zcmbuCO^h5z6~~(-1ZN=u41}+Q6q5jUyfeFNN5&ar$LqvS{JpZ*7I0bBOxMhm`_tXk z`@zcMVid)lr?T7f``uD>@puo4lPk;v>sn;C==NP{Rw!s_VJoruU zEci?CJor|FC*B(buQL8Rcn17Ecndu6Xb^l6Tmw&nKLjsK_n1PGn>)@xr-+^BM{|P<`KK58`zXEv`90BG13!w0D3H&%X zYR2CHKh5~3paS0j#m~QjxDq@K8JHYA3myTV2baKGAQS}O20saY50vlytQr3bJj(cw z;E&<{zu;lUKl(t;_isVr_ix~b!MVqS;IrUU;EUjCQ0&+Qg`eMm%iw`0Y923wqW=fr zY48tVTjoDl^LrfZGrj|!0RIe%-X}gpOu^ScdH)me^D+-EfNz76C-WF3JlzJ5gWm$5 z1K$9J?>E7x!AA+!$H3=6TnxJ4XTWnHCIulVddlYgcR=Cs=b-TZ7w`=DA5i!{_K_N2 z1ZCYz;7ecx3ctSq4}rf1p(OY_D7^g(6gwaPXb?cR_ety(8{~S3Tgd|#OT7;wFBc*{ z_e8(=GO%LODaw1vrP*#? z{=Y0MbQ5hpn`Hj0FuGS#9kOH^=504~hj-dR_E$!-epndtu#l*wiY>w>&@n{T?)YUS z+9V`MOhjW-mix(J&{R%zk9TFOjH_Ww^|Q3JrL!bGNgf*~G|j8DN_zgGO4%P}pD2`K z(P%4Y3wj=Bm0eg_e?g|f<4T7itM{zAdHu53J}YJtZR45so4FxOAvT7#FMC`UTVj@V zCMi{~a%xCjaa*}jO|@B*!QECTxR7FFfw5_0S=qmYDR*_Ms1J)Wz|b8 z6eE6>j|?*C?F1{0&fq!$m*ON#-KfZ%i)HC5=|7RIl@WTA` zQ_rYgtkY-5Yb~8}X)nr5xI@eYP5w?bWQS=2ot?ubXu%l5IJgy6WiS z(Z%)>f5&+2E*?9w$TfGFV%J_RbXvyRWkpwgS+84m`L!aLPP*zs8gj~&ma21T#CqlfGJ)#+|ykdcJ*P zx=w5vn4*1-jUH02y6QyFx``)UWy86Zn8Pz}pC=w=SEachmZz3Za-7M`sl}6X!L(0t zHq;U2hjOE1o$xzwx=^`|Ed`jJV2ay1v}(vKrNK7+3wzgMs_G$5*|e#pxEB=#$`nZ z(z!P-H)%Dpoj{!Dg~J5wRwcHNI_lLb)hMoq{JN@XWyEM3Rc^ME*`)$6sYnqb51=fB z{}Kk@g*huamDHoK4kI}kFgX@yhAPSu3V@GdkM3c_`PH){;#k;yyBjIBv%2mpS~oPi zMSM)}`^_DV3?~R)&twWwm40hygA&o7L>!EJR?ixkP_po@@od~>Ohw18QO(FfQ;=!* zwX@OCQTqu>evP{oHT}jeXX>=CNhhTxLHKr)u)YNw_a6HSM&yLVb+6=1*K(=hMl}r! zJ9A4mtYkfug_cXOctTVYKHuh-t2+u^2W@hZ?{gyTQ>pth+YWHQQsV37-Xr6*1M(=KY_EeL4lLgmk zX`-=}c|qFIO+{vFXY12c5oxhRJH<_6NHrM_sTp-}BB@s;6plCWu0_J|xZ`PRVQ6hh zHCmBcI>|;;j5p}0iYxyw(|G@eQv)tdzBXG1eZ^zrv%PJP6{7uYo#jzh@=qJX-37TZ zV&?tqhT2DLcG?S%>1#=EL^J38k$jpdI%7Re*?jkm$)5=VckM4%kHa{CMF>#BCG7zXw$0H;Tok)M?SatM}#vOg1uw^1E8}V;s5{u delta 122 zcmX@2ah2KPo)F7a1|VPrVi_P-0b*t#)&XJ=umIxOKuJp=4N?OGlmBpq@fn)w8kp-E v8Yvi>S{a&5PT&?-2+7FLO)OS$&M3+(F3C()uqnyUbpYaIsKDmw+)RuBT7Vdw diff --git a/rest_framework/locale/id/LC_MESSAGES/django.po b/rest_framework/locale/id/LC_MESSAGES/django.po index c84add0a4..b3d3c2e89 100644 --- a/rest_framework/locale/id/LC_MESSAGES/django.po +++ b/rest_framework/locale/id/LC_MESSAGES/django.po @@ -3,13 +3,17 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Aldiantoro Nugroho , 2017 +# aslam hadi , 2017 +# Joseph Aditya P G, 2019 +# Xavier Ordoquy , 2020 msgid "" msgstr "" "Project-Id-Version: Django REST framework\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-07-12 16:13+0100\n" -"PO-Revision-Date: 2016-07-12 15:14+0000\n" -"Last-Translator: Thomas Christie \n" +"POT-Creation-Date: 2020-10-13 21:45+0200\n" +"PO-Revision-Date: 2020-10-13 20:03+0000\n" +"Last-Translator: Xavier Ordoquy \n" "Language-Team: Indonesian (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/id/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,423 +21,556 @@ msgstr "" "Language: id\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: authentication.py:73 +#: authentication.py:70 msgid "Invalid basic header. No credentials provided." msgstr "" -#: authentication.py:76 +#: authentication.py:73 msgid "Invalid basic header. Credentials string should not contain spaces." msgstr "" -#: authentication.py:82 +#: authentication.py:83 msgid "Invalid basic header. Credentials not correctly base64 encoded." msgstr "" -#: authentication.py:99 +#: authentication.py:101 msgid "Invalid username/password." -msgstr "" +msgstr "Nama pengguna atau kata sandi salah." -#: authentication.py:102 authentication.py:198 +#: authentication.py:104 authentication.py:206 msgid "User inactive or deleted." -msgstr "" +msgstr "Pengguna tidak akfif atau telah dihapus." -#: authentication.py:176 +#: authentication.py:184 msgid "Invalid token header. No credentials provided." msgstr "" -#: authentication.py:179 +#: authentication.py:187 msgid "Invalid token header. Token string should not contain spaces." msgstr "" -#: authentication.py:185 +#: authentication.py:193 msgid "" "Invalid token header. Token string should not contain invalid characters." msgstr "" -#: authentication.py:195 +#: authentication.py:203 msgid "Invalid token." msgstr "" #: authtoken/apps.py:7 msgid "Auth Token" -msgstr "" +msgstr "Token Autentikasi" -#: authtoken/models.py:15 +#: authtoken/models.py:13 msgid "Key" msgstr "" -#: authtoken/models.py:18 +#: authtoken/models.py:16 msgid "User" -msgstr "" +msgstr "Pengguna" -#: authtoken/models.py:20 +#: authtoken/models.py:18 msgid "Created" msgstr "" -#: authtoken/models.py:29 +#: authtoken/models.py:27 authtoken/serializers.py:19 msgid "Token" -msgstr "" +msgstr "Token" -#: authtoken/models.py:30 +#: authtoken/models.py:28 msgid "Tokens" -msgstr "" - -#: authtoken/serializers.py:8 -msgid "Username" -msgstr "" +msgstr "Token" #: authtoken/serializers.py:9 +msgid "Username" +msgstr "Nama pengguna" + +#: authtoken/serializers.py:13 msgid "Password" -msgstr "" +msgstr "Kata sandi" -#: authtoken/serializers.py:20 -msgid "User account is disabled." -msgstr "" - -#: authtoken/serializers.py:23 +#: authtoken/serializers.py:35 msgid "Unable to log in with provided credentials." -msgstr "" +msgstr "Tidak dapat masuk dengan data pengguna ini." -#: authtoken/serializers.py:26 +#: authtoken/serializers.py:38 msgid "Must include \"username\" and \"password\"." -msgstr "" +msgstr "Nama pengguna dan password harus diisi." -#: exceptions.py:49 +#: exceptions.py:102 msgid "A server error occurred." +msgstr "Terjadi galat di server." + +#: exceptions.py:142 +msgid "Invalid input." msgstr "" -#: exceptions.py:84 +#: exceptions.py:161 msgid "Malformed request." msgstr "" -#: exceptions.py:89 +#: exceptions.py:167 msgid "Incorrect authentication credentials." -msgstr "" +msgstr "Data autentikasi salah." -#: exceptions.py:94 +#: exceptions.py:173 msgid "Authentication credentials were not provided." -msgstr "" +msgstr "Data autentikasi tidak diberikan." -#: exceptions.py:99 +#: exceptions.py:179 msgid "You do not have permission to perform this action." -msgstr "" +msgstr "Anda tidak memiliki izin untuk melakukan tindakan ini." -#: exceptions.py:104 views.py:81 +#: exceptions.py:185 msgid "Not found." -msgstr "" +msgstr "Data tidak ditemukan." -#: exceptions.py:109 +#: exceptions.py:191 +#, python-brace-format msgid "Method \"{method}\" not allowed." msgstr "" -#: exceptions.py:120 +#: exceptions.py:202 msgid "Could not satisfy the request Accept header." -msgstr "" +msgstr "Permintaan dengan header Accept ini tidak dapat dipenuhi." -#: exceptions.py:132 +#: exceptions.py:212 +#, python-brace-format msgid "Unsupported media type \"{media_type}\" in request." -msgstr "" +msgstr "Jenis media \"{media_type}\" dalam permintaan ini tidak didukung." -#: exceptions.py:145 +#: exceptions.py:223 msgid "Request was throttled." +msgstr "Permintaan ini telah dibatasi." + +#: exceptions.py:224 +#, python-brace-format +msgid "Expected available in {wait} second." msgstr "" -#: fields.py:269 relations.py:206 relations.py:239 validators.py:98 -#: validators.py:181 +#: exceptions.py:225 +#, python-brace-format +msgid "Expected available in {wait} seconds." +msgstr "" + +#: fields.py:316 relations.py:245 relations.py:279 validators.py:90 +#: validators.py:183 msgid "This field is required." -msgstr "" +msgstr "Bidang ini harus diisi." -#: fields.py:270 +#: fields.py:317 msgid "This field may not be null." +msgstr "Bidang ini tidak boleh diisi dengan \"null\"." + +#: fields.py:701 +msgid "Must be a valid boolean." msgstr "" -#: fields.py:608 fields.py:639 -msgid "\"{input}\" is not a valid boolean." +#: fields.py:766 +msgid "Not a valid string." msgstr "" -#: fields.py:674 +#: fields.py:767 msgid "This field may not be blank." -msgstr "" +msgstr "Bidang ini tidak boleh kosong." -#: fields.py:675 fields.py:1675 +#: fields.py:768 fields.py:1881 +#, python-brace-format msgid "Ensure this field has no more than {max_length} characters." -msgstr "" +msgstr "Isi bidang ini tidak boleh melebihi {max_length} karakter." -#: fields.py:676 +#: fields.py:769 +#, python-brace-format msgid "Ensure this field has at least {min_length} characters." -msgstr "" +msgstr "Isi bidang ini minimal {min_length} karakter." -#: fields.py:713 +#: fields.py:816 msgid "Enter a valid email address." -msgstr "" +msgstr "Masukkan alamat email dengan format yang benar." -#: fields.py:724 +#: fields.py:827 msgid "This value does not match the required pattern." msgstr "" -#: fields.py:735 +#: fields.py:838 msgid "" "Enter a valid \"slug\" consisting of letters, numbers, underscores or " "hyphens." +msgstr "Karakter \"slug\" hanya dapat terdiri dari huruf, angka, underscore dan tanda hubung." + +#: fields.py:839 +msgid "" +"Enter a valid \"slug\" consisting of Unicode letters, numbers, underscores, " +"or hyphens." msgstr "" -#: fields.py:747 +#: fields.py:854 msgid "Enter a valid URL." +msgstr "Masukkan URL dengan format yang benar." + +#: fields.py:867 +msgid "Must be a valid UUID." msgstr "" -#: fields.py:760 -msgid "\"{value}\" is not a valid UUID." -msgstr "" - -#: fields.py:796 +#: fields.py:903 msgid "Enter a valid IPv4 or IPv6 address." -msgstr "" +msgstr "Masukkan alamat IPv4 atau IPv6 dengan format yang benar." -#: fields.py:821 +#: fields.py:931 msgid "A valid integer is required." -msgstr "" +msgstr "Nilai bidang ini harus berupa bilangan bulat." -#: fields.py:822 fields.py:857 fields.py:891 +#: fields.py:932 fields.py:969 fields.py:1005 fields.py:1366 +#, python-brace-format msgid "Ensure this value is less than or equal to {max_value}." -msgstr "" +msgstr "Isi bidang ini harus kurang atau sama dengan {max_value}." -#: fields.py:823 fields.py:858 fields.py:892 +#: fields.py:933 fields.py:970 fields.py:1006 fields.py:1367 +#, python-brace-format msgid "Ensure this value is greater than or equal to {min_value}." -msgstr "" +msgstr "Isi bidang ini harus lebih atau sama dengan {min_value}." -#: fields.py:824 fields.py:859 fields.py:896 +#: fields.py:934 fields.py:971 fields.py:1010 msgid "String value too large." msgstr "" -#: fields.py:856 fields.py:890 +#: fields.py:968 fields.py:1004 msgid "A valid number is required." msgstr "" -#: fields.py:893 +#: fields.py:1007 +#, python-brace-format msgid "Ensure that there are no more than {max_digits} digits in total." -msgstr "" +msgstr "Panjang angka tidak boleh lebih dari {max_digits}." -#: fields.py:894 +#: fields.py:1008 +#, python-brace-format msgid "" "Ensure that there are no more than {max_decimal_places} decimal places." -msgstr "" +msgstr "Panjang angka di belakang koma tidak boleh lebih dari {max_decimal_places}." -#: fields.py:895 +#: fields.py:1009 +#, python-brace-format msgid "" "Ensure that there are no more than {max_whole_digits} digits before the " "decimal point." -msgstr "" +msgstr "Panjang angka bulat tidak boleh lebih dari {max_whole_digits}." -#: fields.py:1025 +#: fields.py:1148 +#, python-brace-format msgid "Datetime has wrong format. Use one of these formats instead: {format}." -msgstr "" +msgstr "Format tanggal dan waktu salah. Gunakan salah satu format berikut: {format}." -#: fields.py:1026 +#: fields.py:1149 msgid "Expected a datetime but got a date." msgstr "" -#: fields.py:1103 -msgid "Date has wrong format. Use one of these formats instead: {format}." +#: fields.py:1150 +#, python-brace-format +msgid "Invalid datetime for the timezone \"{timezone}\"." msgstr "" -#: fields.py:1104 +#: fields.py:1151 +msgid "Datetime value out of range." +msgstr "" + +#: fields.py:1236 +#, python-brace-format +msgid "Date has wrong format. Use one of these formats instead: {format}." +msgstr "Format tanggal salah. Gunakan salah satu format berikut: {format}." + +#: fields.py:1237 msgid "Expected a date but got a datetime." msgstr "" -#: fields.py:1170 +#: fields.py:1303 +#, python-brace-format msgid "Time has wrong format. Use one of these formats instead: {format}." -msgstr "" +msgstr "Format waktu salah. Gunakan salah satu format berikut: {format}." -#: fields.py:1232 +#: fields.py:1365 +#, python-brace-format msgid "Duration has wrong format. Use one of these formats instead: {format}." -msgstr "" +msgstr "Format durasi salah. Gunakan salah satu format berikut: {format}." -#: fields.py:1251 fields.py:1300 +#: fields.py:1399 fields.py:1456 +#, python-brace-format msgid "\"{input}\" is not a valid choice." -msgstr "" +msgstr "\"{input}\" tidak ada dalam daftar pilihan." -#: fields.py:1254 relations.py:71 relations.py:441 +#: fields.py:1402 +#, python-brace-format msgid "More than {count} items..." msgstr "" -#: fields.py:1301 fields.py:1448 relations.py:437 serializers.py:524 +#: fields.py:1457 fields.py:1603 relations.py:485 serializers.py:570 +#, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "" -#: fields.py:1302 +#: fields.py:1458 msgid "This selection may not be empty." -msgstr "" +msgstr "Pilihan tidak boleh kosong." -#: fields.py:1339 +#: fields.py:1495 +#, python-brace-format msgid "\"{input}\" is not a valid path choice." msgstr "" -#: fields.py:1358 +#: fields.py:1514 msgid "No file was submitted." -msgstr "" +msgstr "Pilih berkas terlebih dahulu." -#: fields.py:1359 +#: fields.py:1515 msgid "" "The submitted data was not a file. Check the encoding type on the form." msgstr "" -#: fields.py:1360 +#: fields.py:1516 msgid "No filename could be determined." msgstr "" -#: fields.py:1361 +#: fields.py:1517 msgid "The submitted file is empty." -msgstr "" +msgstr "Berkas kosong." -#: fields.py:1362 +#: fields.py:1518 +#, python-brace-format msgid "" "Ensure this filename has at most {max_length} characters (it has {length})." -msgstr "" +msgstr "Panjang nama berkas tidak boleh lebih dari {max_length}. Panjang nama berkas ini {length} karakter." -#: fields.py:1410 +#: fields.py:1566 msgid "" "Upload a valid image. The file you uploaded was either not an image or a " "corrupted image." msgstr "" -#: fields.py:1449 relations.py:438 serializers.py:525 +#: fields.py:1604 relations.py:486 serializers.py:571 msgid "This list may not be empty." msgstr "" -#: fields.py:1502 +#: fields.py:1605 +#, python-brace-format +msgid "Ensure this field has at least {min_length} elements." +msgstr "" + +#: fields.py:1606 +#, python-brace-format +msgid "Ensure this field has no more than {max_length} elements." +msgstr "" + +#: fields.py:1682 +#, python-brace-format msgid "Expected a dictionary of items but got type \"{input_type}\"." +msgstr "Isi bidang ini harus berupa dictionary, bukan \"{input_type}\"." + +#: fields.py:1683 +msgid "This dictionary may not be empty." msgstr "" -#: fields.py:1549 +#: fields.py:1755 msgid "Value must be valid JSON." +msgstr "Isi bidang ini harus berupa JSON." + +#: filters.py:49 templates/rest_framework/filters/search.html:2 +msgid "Search" msgstr "" -#: filters.py:36 templates/rest_framework/filters/django_filter.html:5 -msgid "Submit" +#: filters.py:50 +msgid "A search term." msgstr "" -#: filters.py:336 +#: filters.py:180 templates/rest_framework/filters/ordering.html:3 +msgid "Ordering" +msgstr "" + +#: filters.py:181 +msgid "Which field to use when ordering the results." +msgstr "" + +#: filters.py:287 msgid "ascending" msgstr "" -#: filters.py:337 +#: filters.py:288 msgid "descending" msgstr "" -#: pagination.py:193 +#: pagination.py:174 +msgid "A page number within the paginated result set." +msgstr "" + +#: pagination.py:179 pagination.py:372 pagination.py:590 +msgid "Number of results to return per page." +msgstr "" + +#: pagination.py:189 msgid "Invalid page." msgstr "" -#: pagination.py:427 +#: pagination.py:374 +msgid "The initial index from which to return the results." +msgstr "" + +#: pagination.py:581 +msgid "The pagination cursor value." +msgstr "" + +#: pagination.py:583 msgid "Invalid cursor" msgstr "" -#: relations.py:207 +#: relations.py:246 +#, python-brace-format msgid "Invalid pk \"{pk_value}\" - object does not exist." -msgstr "" +msgstr "Objek dengan primary key \"{pk_value}\" tidak ditemukan." -#: relations.py:208 +#: relations.py:247 +#, python-brace-format msgid "Incorrect type. Expected pk value, received {data_type}." msgstr "" -#: relations.py:240 +#: relations.py:280 msgid "Invalid hyperlink - No URL match." msgstr "" -#: relations.py:241 +#: relations.py:281 msgid "Invalid hyperlink - Incorrect URL match." msgstr "" -#: relations.py:242 +#: relations.py:282 msgid "Invalid hyperlink - Object does not exist." msgstr "" -#: relations.py:243 +#: relations.py:283 +#, python-brace-format msgid "Incorrect type. Expected URL string, received {data_type}." msgstr "" -#: relations.py:401 +#: relations.py:448 +#, python-brace-format msgid "Object with {slug_name}={value} does not exist." msgstr "" -#: relations.py:402 +#: relations.py:449 msgid "Invalid value." msgstr "" -#: serializers.py:326 +#: schemas/utils.py:32 +msgid "unique integer value" +msgstr "" + +#: schemas/utils.py:34 +msgid "UUID string" +msgstr "" + +#: schemas/utils.py:36 +msgid "unique value" +msgstr "" + +#: schemas/utils.py:38 +#, python-brace-format +msgid "A {value_type} identifying this {name}." +msgstr "" + +#: serializers.py:337 +#, python-brace-format msgid "Invalid data. Expected a dictionary, but got {datatype}." msgstr "" #: templates/rest_framework/admin.html:116 -#: templates/rest_framework/base.html:128 +#: templates/rest_framework/base.html:136 +msgid "Extra Actions" +msgstr "" + +#: templates/rest_framework/admin.html:130 +#: templates/rest_framework/base.html:150 msgid "Filters" msgstr "" -#: templates/rest_framework/filters/django_filter.html:2 -#: templates/rest_framework/filters/django_filter_crispyforms.html:4 -msgid "Field filters" +#: templates/rest_framework/base.html:37 +msgid "navbar" msgstr "" -#: templates/rest_framework/filters/ordering.html:3 -msgid "Ordering" +#: templates/rest_framework/base.html:75 +msgid "content" msgstr "" -#: templates/rest_framework/filters/search.html:2 -msgid "Search" +#: templates/rest_framework/base.html:78 +msgid "request form" msgstr "" -#: templates/rest_framework/horizontal/radio.html:2 -#: templates/rest_framework/inline/radio.html:2 -#: templates/rest_framework/vertical/radio.html:2 +#: templates/rest_framework/base.html:157 +msgid "main content" +msgstr "" + +#: templates/rest_framework/base.html:173 +msgid "request info" +msgstr "" + +#: templates/rest_framework/base.html:177 +msgid "response info" +msgstr "" + +#: templates/rest_framework/horizontal/radio.html:4 +#: templates/rest_framework/inline/radio.html:3 +#: templates/rest_framework/vertical/radio.html:3 msgid "None" msgstr "" -#: templates/rest_framework/horizontal/select_multiple.html:2 -#: templates/rest_framework/inline/select_multiple.html:2 -#: templates/rest_framework/vertical/select_multiple.html:2 +#: templates/rest_framework/horizontal/select_multiple.html:4 +#: templates/rest_framework/inline/select_multiple.html:3 +#: templates/rest_framework/vertical/select_multiple.html:3 msgid "No items to select." msgstr "" -#: validators.py:43 +#: validators.py:39 msgid "This field must be unique." msgstr "" -#: validators.py:97 +#: validators.py:89 +#, python-brace-format msgid "The fields {field_names} must make a unique set." msgstr "" -#: validators.py:245 +#: validators.py:171 +#, python-brace-format +msgid "Surrogate characters are not allowed: U+{code_point:X}." +msgstr "" + +#: validators.py:243 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" date." msgstr "" -#: validators.py:260 +#: validators.py:258 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" month." msgstr "" -#: validators.py:273 +#: validators.py:271 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" year." msgstr "" -#: versioning.py:42 +#: versioning.py:40 msgid "Invalid version in \"Accept\" header." msgstr "" -#: versioning.py:73 +#: versioning.py:71 msgid "Invalid version in URL path." msgstr "" -#: versioning.py:115 +#: versioning.py:116 msgid "Invalid version in URL path. Does not match any version namespace." msgstr "" -#: versioning.py:147 +#: versioning.py:148 msgid "Invalid version in hostname." msgstr "" -#: versioning.py:169 +#: versioning.py:170 msgid "Invalid version in query parameter." msgstr "" - -#: views.py:88 -msgid "Permission denied." -msgstr "" diff --git a/rest_framework/locale/it/LC_MESSAGES/django.mo b/rest_framework/locale/it/LC_MESSAGES/django.mo index 1d4fd34c38965b195e1c86708ecd37ea7e246b8c..6c84273a9228807bff9e2698eaf72d15892722cc 100644 GIT binary patch delta 2662 zcmYk+X>6259LMqLfvvQKQd&wu;Nh?>S1E-8y`ZJstu1Y7X%&UX?qj=BcFXRzoVp1f z1R^MTg80S|5s!c->WVK^Vzeac3$GXxhz3uLFEk)vLV`rUzh}3BNoPMZ&-3(oX8!Y^ z`Evc0mgvQt)T4&7g?f)_iZM^fyZE6LryFD8OuQG@;dtyvJ%0cv;;T3kKf$^91(6&f{InH_)OPMko0f1-Z^HM6%-Gx`n{ z%BzWf`Iz|qR!rggASwd8aWWo4z3&Yy!cTD=UdE_J<1U^ai$$1ex z6@kroJjs|xQA;qA)SrPR$mC2LDrX)+h58xP|DDDq_#SGYmr;=_<6~>E0w2JAQ5x%L zTuj`U$wJl951}4-7i%$_Fs#HD^x-j7&isp2SV>%4a1dwVXQ+^0Lk&1%63K?833p>F z{pdLwjWqHZzDDT7nYb0#<59d1f5!#5a7uh_dr={N3l)i9P&4}nYjCL*kHB8klAS?4 zcL~ez2A1=EGn>6~KNoD&3_e6Qgc&u>7~W+jqyBLzYG5s>EZ&0~@a07R25MVbtdn*@ zGqTL44K4H|!88X^5qibD9yR7`8gseuH|m2^h*ugeL(T}Z8g+jIa@LrAsN^|}O15LD zBpgD0@N=xdAMs%s7Z=1()A)Z8K@deb3f5Rk9 zp(`fq>s17x8P=~CP0ZA4l%Ek^E-yRiQ3^^iT^NY zFVQqG4a%abC}&nul`~pbO<*InfvTc`tF%$my_PX6kW<<#)%?!U`G04rqtlhRplm17 zrjxpqnoCvD2}eN8gH(l6OQ($Hi12m_cnRE!3cHr>A*!~Y@<3$`wU(Nx?@y&FBUO|b zOLe-~#w_7r@(v2{ ziV{g#I$U%HEK78faXB@O>fTJ7;9gHFaqH4M(ya}_txmwyxlLIG?wjd#Y4st;jyS&9 zU+K$JV>MY5l2hy+C)PN6M^Z_9Yopa~M|w-F6+tI#1%eT4n;q%ywd}wyYtRXW{lS10 zu(vtke!JUok7Vb$L)j%M4bHCEmF&!yL5e)g`ck_w01j z9(F>OKVWx9{DY1a3|T&>&tW(v-W|Q$J)GB+Ylpj?fX^T3F+OLw>3*NrF{-R|?tK0h zSo13?7nZxr#^qa`_Mo4aHivw{?E|~4>YWTht=c|+AUNo^V}s)glH3pS7r8m(J4efasA^T%kZKRG>x|9bB`3PjLj?fBQ-XA^4{cZyN6*CgMc+?_xXKx?4)%rsk*P| zc95F5*BuOn{Nes!z~|5=I!-t|a7U0VpMN-Vj@vw~%L~?P(`s%9>)P~nvHBT*CZ+3B z{R2bqxK)ML?M_eOp{#fq*CvL2t?=wDh0(M}oIu1;G$TYaXay~&&%aIG;2q(-TC^!Y O9!@=Ne10#UUi*I;8g-EX delta 2508 zcmZwHTWnNC7{Kw_x}`0*+9K^%DIHpRlXlsbOSu$iX(`Yma%+J$QMT+m?P#4Ff=4SAj^^#qO8419_$m@`qS9$bS>IEG8{9CqQfNlGojM^S!%71!Zc zSb=4el`6zGlnM2qj3;~#pgiv*Tp&yRjm8uP>iNf_)KZicwxPVp#6|cPuD}b}hNV-L z3S$)cQ!nsOt{cM|JdYB&K)zBBVg*KUJ%%xbYbDh0(O8DRBloC<_bPQiu0rYWKv{u} zvLe^_h(CTBWyM!fQW7l4++Ts!^p|51?nI6Ia2mdjsUVH_X%JoY0nWt}NSf3yC=dP< z>juHA@D5)GpndnKB>%RB*LFkPt5jcpllA|aSyoC~hWjd3R5tPurjSKJ_?8W?9nFZ`d z_O%*EZdIpHo_iUYP)gmRA-lA;JmW@`2J)w- zutDU-jkp9i`R+%#|8xKMtg6fc%TYF8CobguYJ^4yzKe3hb(9OjgrysMk!PqQNV?To zzkdzq(=VxE=i}`n>69X2mjy|>R#8_|=78)^O63T`PB+dnR{lI+E8KoMglX^-eS981Y2fno^pTekDH^aMu)s(@zyl z3KSUeAv2LMZA%XtmT3%z-RBCMCTvdj51CH-MB(-qGG*empv3s z=(b&PGvSzqZg%XU7V3aMkPa4?1VWim*n%B5ZimDUyLq9`(B0Kr%=@!LI%#Qd;hmwV zdo(nfUR=_UU8IL)b}>B=9U8V(2O)@?s?9wUnvs5H<|A3@8~S*_&97)lZ?0$#, 2015 +# Marco Ventura, 2019 # Mattia Procopio , 2015 +# Riccardo Magliocchetti , 2019 # Sergio Morstabilini , 2015 # Xavier Ordoquy , 2015 msgid "" msgstr "" "Project-Id-Version: Django REST framework\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-07-12 16:13+0100\n" -"PO-Revision-Date: 2017-08-03 14:58+0000\n" -"Last-Translator: Thomas Christie \n" +"POT-Creation-Date: 2020-10-13 21:45+0200\n" +"PO-Revision-Date: 2020-10-13 19:45+0000\n" +"Last-Translator: Xavier Ordoquy \n" "Language-Team: Italian (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/it/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,423 +23,556 @@ msgstr "" "Language: it\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: authentication.py:73 +#: authentication.py:70 msgid "Invalid basic header. No credentials provided." msgstr "Header di base invalido. Credenziali non fornite." -#: authentication.py:76 +#: authentication.py:73 msgid "Invalid basic header. Credentials string should not contain spaces." msgstr "Header di base invalido. Le credenziali non dovrebbero contenere spazi." -#: authentication.py:82 +#: authentication.py:83 msgid "Invalid basic header. Credentials not correctly base64 encoded." msgstr "Credenziali non correttamente codificate in base64." -#: authentication.py:99 +#: authentication.py:101 msgid "Invalid username/password." msgstr "Nome utente/password non validi" -#: authentication.py:102 authentication.py:198 +#: authentication.py:104 authentication.py:206 msgid "User inactive or deleted." msgstr "Utente inattivo o eliminato." -#: authentication.py:176 +#: authentication.py:184 msgid "Invalid token header. No credentials provided." msgstr "Header del token non valido. Credenziali non fornite." -#: authentication.py:179 +#: authentication.py:187 msgid "Invalid token header. Token string should not contain spaces." msgstr "Header del token non valido. Il contenuto del token non dovrebbe contenere spazi." -#: authentication.py:185 +#: authentication.py:193 msgid "" "Invalid token header. Token string should not contain invalid characters." msgstr "Header del token invalido. La stringa del token non dovrebbe contenere caratteri illegali." -#: authentication.py:195 +#: authentication.py:203 msgid "Invalid token." msgstr "Token invalido." #: authtoken/apps.py:7 msgid "Auth Token" -msgstr "" +msgstr "Auth Token" -#: authtoken/models.py:15 +#: authtoken/models.py:13 msgid "Key" -msgstr "" +msgstr "Key" + +#: authtoken/models.py:16 +msgid "User" +msgstr "User" #: authtoken/models.py:18 -msgid "User" -msgstr "" - -#: authtoken/models.py:20 msgid "Created" -msgstr "" +msgstr "Creato" -#: authtoken/models.py:29 +#: authtoken/models.py:27 authtoken/serializers.py:19 msgid "Token" -msgstr "" +msgstr "Token" -#: authtoken/models.py:30 +#: authtoken/models.py:28 msgid "Tokens" -msgstr "" - -#: authtoken/serializers.py:8 -msgid "Username" -msgstr "" +msgstr "I Token" #: authtoken/serializers.py:9 +msgid "Username" +msgstr "Username" + +#: authtoken/serializers.py:13 msgid "Password" -msgstr "" +msgstr "Password" -#: authtoken/serializers.py:20 -msgid "User account is disabled." -msgstr "L'account dell'utente è disabilitato" - -#: authtoken/serializers.py:23 +#: authtoken/serializers.py:35 msgid "Unable to log in with provided credentials." msgstr "Impossibile eseguire il login con le credenziali immesse." -#: authtoken/serializers.py:26 +#: authtoken/serializers.py:38 msgid "Must include \"username\" and \"password\"." msgstr "Deve includere \"nome utente\" e \"password\"." -#: exceptions.py:49 +#: exceptions.py:102 msgid "A server error occurred." msgstr "Errore del server." -#: exceptions.py:84 +#: exceptions.py:142 +msgid "Invalid input." +msgstr "" + +#: exceptions.py:161 msgid "Malformed request." msgstr "Richiesta malformata." -#: exceptions.py:89 +#: exceptions.py:167 msgid "Incorrect authentication credentials." msgstr "Credenziali di autenticazione incorrette." -#: exceptions.py:94 +#: exceptions.py:173 msgid "Authentication credentials were not provided." msgstr "Non sono state immesse le credenziali di autenticazione." -#: exceptions.py:99 +#: exceptions.py:179 msgid "You do not have permission to perform this action." msgstr "Non hai l'autorizzazione per eseguire questa azione." -#: exceptions.py:104 views.py:81 +#: exceptions.py:185 msgid "Not found." msgstr "Non trovato." -#: exceptions.py:109 +#: exceptions.py:191 +#, python-brace-format msgid "Method \"{method}\" not allowed." msgstr "Metodo \"{method}\" non consentito" -#: exceptions.py:120 +#: exceptions.py:202 msgid "Could not satisfy the request Accept header." msgstr "Impossibile soddisfare l'header \"Accept\" presente nella richiesta." -#: exceptions.py:132 +#: exceptions.py:212 +#, python-brace-format msgid "Unsupported media type \"{media_type}\" in request." msgstr "Tipo di media \"{media_type}\"non supportato." -#: exceptions.py:145 +#: exceptions.py:223 msgid "Request was throttled." msgstr "La richiesta è stata limitata (throttled)." -#: fields.py:269 relations.py:206 relations.py:239 validators.py:98 -#: validators.py:181 +#: exceptions.py:224 +#, python-brace-format +msgid "Expected available in {wait} second." +msgstr "" + +#: exceptions.py:225 +#, python-brace-format +msgid "Expected available in {wait} seconds." +msgstr "" + +#: fields.py:316 relations.py:245 relations.py:279 validators.py:90 +#: validators.py:183 msgid "This field is required." msgstr "Campo obbligatorio." -#: fields.py:270 +#: fields.py:317 msgid "This field may not be null." msgstr "Il campo non può essere nullo." -#: fields.py:608 fields.py:639 -msgid "\"{input}\" is not a valid boolean." -msgstr "\"{input}\" non è un valido valore booleano." +#: fields.py:701 +msgid "Must be a valid boolean." +msgstr "" -#: fields.py:674 +#: fields.py:766 +msgid "Not a valid string." +msgstr "" + +#: fields.py:767 msgid "This field may not be blank." msgstr "Questo campo non può essere omesso." -#: fields.py:675 fields.py:1675 +#: fields.py:768 fields.py:1881 +#, python-brace-format msgid "Ensure this field has no more than {max_length} characters." msgstr "Assicurati che questo campo non abbia più di {max_length} caratteri." -#: fields.py:676 +#: fields.py:769 +#, python-brace-format msgid "Ensure this field has at least {min_length} characters." msgstr "Assicurati che questo campo abbia almeno {min_length} caratteri." -#: fields.py:713 +#: fields.py:816 msgid "Enter a valid email address." msgstr "Inserisci un indirizzo email valido." -#: fields.py:724 +#: fields.py:827 msgid "This value does not match the required pattern." msgstr "Questo valore non corrisponde alla sequenza richiesta." -#: fields.py:735 +#: fields.py:838 msgid "" "Enter a valid \"slug\" consisting of letters, numbers, underscores or " "hyphens." msgstr "Immetti uno \"slug\" valido che consista di lettere, numeri, underscore o trattini." -#: fields.py:747 +#: fields.py:839 +msgid "" +"Enter a valid \"slug\" consisting of Unicode letters, numbers, underscores, " +"or hyphens." +msgstr "" + +#: fields.py:854 msgid "Enter a valid URL." msgstr "Inserisci un URL valido" -#: fields.py:760 -msgid "\"{value}\" is not a valid UUID." -msgstr "\"{value}\" non è un UUID valido." +#: fields.py:867 +msgid "Must be a valid UUID." +msgstr "" -#: fields.py:796 +#: fields.py:903 msgid "Enter a valid IPv4 or IPv6 address." msgstr "Inserisci un indirizzo IPv4 o IPv6 valido." -#: fields.py:821 +#: fields.py:931 msgid "A valid integer is required." msgstr "È richiesto un numero intero valido." -#: fields.py:822 fields.py:857 fields.py:891 +#: fields.py:932 fields.py:969 fields.py:1005 fields.py:1366 +#, python-brace-format msgid "Ensure this value is less than or equal to {max_value}." msgstr "Assicurati che il valore sia minore o uguale a {max_value}." -#: fields.py:823 fields.py:858 fields.py:892 +#: fields.py:933 fields.py:970 fields.py:1006 fields.py:1367 +#, python-brace-format msgid "Ensure this value is greater than or equal to {min_value}." msgstr "Assicurati che il valore sia maggiore o uguale a {min_value}." -#: fields.py:824 fields.py:859 fields.py:896 +#: fields.py:934 fields.py:971 fields.py:1010 msgid "String value too large." msgstr "Stringa troppo lunga." -#: fields.py:856 fields.py:890 +#: fields.py:968 fields.py:1004 msgid "A valid number is required." msgstr "È richiesto un numero valido." -#: fields.py:893 +#: fields.py:1007 +#, python-brace-format msgid "Ensure that there are no more than {max_digits} digits in total." msgstr "Assicurati che non ci siano più di {max_digits} cifre in totale." -#: fields.py:894 +#: fields.py:1008 +#, python-brace-format msgid "" "Ensure that there are no more than {max_decimal_places} decimal places." msgstr "Assicurati che non ci siano più di {max_decimal_places} cifre decimali." -#: fields.py:895 +#: fields.py:1009 +#, python-brace-format msgid "" "Ensure that there are no more than {max_whole_digits} digits before the " "decimal point." msgstr "Assicurati che non ci siano più di {max_whole_digits} cifre prima del separatore decimale." -#: fields.py:1025 +#: fields.py:1148 +#, python-brace-format msgid "Datetime has wrong format. Use one of these formats instead: {format}." msgstr "L'oggetto di tipo datetime è in un formato errato. Usa uno dei seguenti formati: {format}." -#: fields.py:1026 +#: fields.py:1149 msgid "Expected a datetime but got a date." msgstr "Atteso un oggetto di tipo datetime ma l'oggetto ricevuto è di tipo date." -#: fields.py:1103 +#: fields.py:1150 +#, python-brace-format +msgid "Invalid datetime for the timezone \"{timezone}\"." +msgstr "" + +#: fields.py:1151 +msgid "Datetime value out of range." +msgstr "" + +#: fields.py:1236 +#, python-brace-format msgid "Date has wrong format. Use one of these formats instead: {format}." msgstr "La data è in un formato errato. Usa uno dei seguenti formati: {format}." -#: fields.py:1104 +#: fields.py:1237 msgid "Expected a date but got a datetime." msgstr "Atteso un oggetto di tipo date ma l'oggetto ricevuto è di tipo datetime." -#: fields.py:1170 +#: fields.py:1303 +#, python-brace-format msgid "Time has wrong format. Use one of these formats instead: {format}." msgstr "L'orario ha un formato errato. Usa uno dei seguenti formati: {format}." -#: fields.py:1232 +#: fields.py:1365 +#, python-brace-format msgid "Duration has wrong format. Use one of these formats instead: {format}." msgstr "La durata è in un formato errato. Usa uno dei seguenti formati: {format}." -#: fields.py:1251 fields.py:1300 +#: fields.py:1399 fields.py:1456 +#, python-brace-format msgid "\"{input}\" is not a valid choice." msgstr "\"{input}\" non è una scelta valida." -#: fields.py:1254 relations.py:71 relations.py:441 +#: fields.py:1402 +#, python-brace-format msgid "More than {count} items..." msgstr "Più di {count} oggetti..." -#: fields.py:1301 fields.py:1448 relations.py:437 serializers.py:524 +#: fields.py:1457 fields.py:1603 relations.py:485 serializers.py:570 +#, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "Attesa una lista di oggetti ma l'oggetto ricevuto è di tipo \"{input_type}\"." -#: fields.py:1302 +#: fields.py:1458 msgid "This selection may not be empty." -msgstr "Questa selezione potrebbe non essere vuota." +msgstr "Questa selezione non può essere vuota." -#: fields.py:1339 +#: fields.py:1495 +#, python-brace-format msgid "\"{input}\" is not a valid path choice." msgstr "\"{input}\" non è un percorso valido." -#: fields.py:1358 +#: fields.py:1514 msgid "No file was submitted." msgstr "Non è stato inviato alcun file." -#: fields.py:1359 +#: fields.py:1515 msgid "" "The submitted data was not a file. Check the encoding type on the form." msgstr "I dati inviati non corrispondono ad un file. Si prega di controllare il tipo di codifica nel form." -#: fields.py:1360 +#: fields.py:1516 msgid "No filename could be determined." msgstr "Il nome del file non può essere determinato." -#: fields.py:1361 +#: fields.py:1517 msgid "The submitted file is empty." msgstr "Il file inviato è vuoto." -#: fields.py:1362 +#: fields.py:1518 +#, python-brace-format msgid "" "Ensure this filename has at most {max_length} characters (it has {length})." msgstr "Assicurati che il nome del file abbia, al più, {max_length} caratteri (attualmente ne ha {length})." -#: fields.py:1410 +#: fields.py:1566 msgid "" "Upload a valid image. The file you uploaded was either not an image or a " "corrupted image." msgstr "Invia un'immagine valida. Il file che hai inviato non era un'immagine o era corrotto." -#: fields.py:1449 relations.py:438 serializers.py:525 +#: fields.py:1604 relations.py:486 serializers.py:571 msgid "This list may not be empty." -msgstr "Questa lista potrebbe non essere vuota." +msgstr "Questa lista non può essere vuota." -#: fields.py:1502 +#: fields.py:1605 +#, python-brace-format +msgid "Ensure this field has at least {min_length} elements." +msgstr "" + +#: fields.py:1606 +#, python-brace-format +msgid "Ensure this field has no more than {max_length} elements." +msgstr "" + +#: fields.py:1682 +#, python-brace-format msgid "Expected a dictionary of items but got type \"{input_type}\"." msgstr "Era atteso un dizionario di oggetti ma il dato ricevuto è di tipo \"{input_type}\"." -#: fields.py:1549 +#: fields.py:1683 +msgid "This dictionary may not be empty." +msgstr "" + +#: fields.py:1755 msgid "Value must be valid JSON." msgstr "Il valore deve essere un JSON valido." -#: filters.py:36 templates/rest_framework/filters/django_filter.html:5 -msgid "Submit" -msgstr "Invia" +#: filters.py:49 templates/rest_framework/filters/search.html:2 +msgid "Search" +msgstr "Cerca" -#: filters.py:336 +#: filters.py:50 +msgid "A search term." +msgstr "" + +#: filters.py:180 templates/rest_framework/filters/ordering.html:3 +msgid "Ordering" +msgstr "Ordinamento" + +#: filters.py:181 +msgid "Which field to use when ordering the results." +msgstr "" + +#: filters.py:287 msgid "ascending" -msgstr "" +msgstr "ascendente" -#: filters.py:337 +#: filters.py:288 msgid "descending" +msgstr "discendente" + +#: pagination.py:174 +msgid "A page number within the paginated result set." msgstr "" -#: pagination.py:193 +#: pagination.py:179 pagination.py:372 pagination.py:590 +msgid "Number of results to return per page." +msgstr "" + +#: pagination.py:189 msgid "Invalid page." +msgstr "Pagina non valida." + +#: pagination.py:374 +msgid "The initial index from which to return the results." msgstr "" -#: pagination.py:427 +#: pagination.py:581 +msgid "The pagination cursor value." +msgstr "" + +#: pagination.py:583 msgid "Invalid cursor" msgstr "Cursore non valido" -#: relations.py:207 +#: relations.py:246 +#, python-brace-format msgid "Invalid pk \"{pk_value}\" - object does not exist." msgstr "Pk \"{pk_value}\" non valido - l'oggetto non esiste." -#: relations.py:208 +#: relations.py:247 +#, python-brace-format msgid "Incorrect type. Expected pk value, received {data_type}." msgstr "Tipo non corretto. Era atteso un valore pk, ma è stato ricevuto {data_type}." -#: relations.py:240 +#: relations.py:280 msgid "Invalid hyperlink - No URL match." msgstr "Collegamento non valido - Nessuna corrispondenza di URL." -#: relations.py:241 +#: relations.py:281 msgid "Invalid hyperlink - Incorrect URL match." msgstr "Collegamento non valido - Corrispondenza di URL non corretta." -#: relations.py:242 +#: relations.py:282 msgid "Invalid hyperlink - Object does not exist." msgstr "Collegamento non valido - L'oggetto non esiste." -#: relations.py:243 +#: relations.py:283 +#, python-brace-format msgid "Incorrect type. Expected URL string, received {data_type}." msgstr "Tipo non corretto. Era attesa una stringa URL, ma è stato ricevuto {data_type}." -#: relations.py:401 +#: relations.py:448 +#, python-brace-format msgid "Object with {slug_name}={value} does not exist." msgstr "L'oggetto con {slug_name}={value} non esiste." -#: relations.py:402 +#: relations.py:449 msgid "Invalid value." msgstr "Valore non valido." -#: serializers.py:326 +#: schemas/utils.py:32 +msgid "unique integer value" +msgstr "" + +#: schemas/utils.py:34 +msgid "UUID string" +msgstr "" + +#: schemas/utils.py:36 +msgid "unique value" +msgstr "" + +#: schemas/utils.py:38 +#, python-brace-format +msgid "A {value_type} identifying this {name}." +msgstr "" + +#: serializers.py:337 +#, python-brace-format msgid "Invalid data. Expected a dictionary, but got {datatype}." msgstr "Dati non validi. Era atteso un dizionario, ma si è ricevuto {datatype}." #: templates/rest_framework/admin.html:116 -#: templates/rest_framework/base.html:128 +#: templates/rest_framework/base.html:136 +msgid "Extra Actions" +msgstr "" + +#: templates/rest_framework/admin.html:130 +#: templates/rest_framework/base.html:150 msgid "Filters" msgstr "Filtri" -#: templates/rest_framework/filters/django_filter.html:2 -#: templates/rest_framework/filters/django_filter_crispyforms.html:4 -msgid "Field filters" -msgstr "Filtri per il campo" +#: templates/rest_framework/base.html:37 +msgid "navbar" +msgstr "" -#: templates/rest_framework/filters/ordering.html:3 -msgid "Ordering" -msgstr "Ordinamento" +#: templates/rest_framework/base.html:75 +msgid "content" +msgstr "" -#: templates/rest_framework/filters/search.html:2 -msgid "Search" -msgstr "Cerca" +#: templates/rest_framework/base.html:78 +msgid "request form" +msgstr "" -#: templates/rest_framework/horizontal/radio.html:2 -#: templates/rest_framework/inline/radio.html:2 -#: templates/rest_framework/vertical/radio.html:2 +#: templates/rest_framework/base.html:157 +msgid "main content" +msgstr "" + +#: templates/rest_framework/base.html:173 +msgid "request info" +msgstr "" + +#: templates/rest_framework/base.html:177 +msgid "response info" +msgstr "" + +#: templates/rest_framework/horizontal/radio.html:4 +#: templates/rest_framework/inline/radio.html:3 +#: templates/rest_framework/vertical/radio.html:3 msgid "None" msgstr "Nessuno" -#: templates/rest_framework/horizontal/select_multiple.html:2 -#: templates/rest_framework/inline/select_multiple.html:2 -#: templates/rest_framework/vertical/select_multiple.html:2 +#: templates/rest_framework/horizontal/select_multiple.html:4 +#: templates/rest_framework/inline/select_multiple.html:3 +#: templates/rest_framework/vertical/select_multiple.html:3 msgid "No items to select." msgstr "Nessun elemento da selezionare." -#: validators.py:43 +#: validators.py:39 msgid "This field must be unique." msgstr "Questo campo deve essere unico." -#: validators.py:97 +#: validators.py:89 +#, python-brace-format msgid "The fields {field_names} must make a unique set." msgstr "I campi {field_names} devono costituire un insieme unico." -#: validators.py:245 +#: validators.py:171 +#, python-brace-format +msgid "Surrogate characters are not allowed: U+{code_point:X}." +msgstr "" + +#: validators.py:243 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" date." msgstr "Questo campo deve essere unico per la data \"{date_field}\"." -#: validators.py:260 +#: validators.py:258 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" month." msgstr "Questo campo deve essere unico per il mese \"{date_field}\"." -#: validators.py:273 +#: validators.py:271 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" year." msgstr "Questo campo deve essere unico per l'anno \"{date_field}\"." -#: versioning.py:42 +#: versioning.py:40 msgid "Invalid version in \"Accept\" header." msgstr "Versione non valida nell'header \"Accept\"." -#: versioning.py:73 +#: versioning.py:71 msgid "Invalid version in URL path." msgstr "Versione non valida nella sequenza URL." -#: versioning.py:115 +#: versioning.py:116 msgid "Invalid version in URL path. Does not match any version namespace." -msgstr "" +msgstr "Versione non valida nell'URL path. Non corrisponde con nessun namespace di versione." -#: versioning.py:147 +#: versioning.py:148 msgid "Invalid version in hostname." msgstr "Versione non valida nel nome dell'host." -#: versioning.py:169 +#: versioning.py:170 msgid "Invalid version in query parameter." msgstr "Versione non valida nel parametro della query." - -#: views.py:88 -msgid "Permission denied." -msgstr "Permesso negato." diff --git a/rest_framework/locale/ja/LC_MESSAGES/django.mo b/rest_framework/locale/ja/LC_MESSAGES/django.mo index 5b9dbd8da62bf95a71c3f4a6e24ce0ddcb47d3c2..e949a57f792568f3e4200b448b49a1f59b8b6bab 100644 GIT binary patch delta 2239 zcmYk-TWnNC9LMq5cH3?*T*~&gP-Kf}Tj}-!Y%kktE3{y{RSLGWwMx4I#cJ(J3l$+| zwJ5|(3A%yk111o_`-54Hi3w5B#Q0!hf+REnQXWW5#GuBQs4@8coik0Gbk1jH&Yn4Q z`OoRq;hRH=t4qAc3~7X1s+?}jL7B;gRN*rwh?RH;c3}xVjr#q|xD3x?4xYylevei7 z4`yLSwlV9m7B}LgYr=d^VG|7=o^HcV+=j1U175>s4CERU#XgMSN!0zz*o_5w#@voE zT!Js52Kc6J|I|8*>hE6+n}jh<3)~ULQ8Ro7^@0=Fh?lSx^A{Sk0k>c^9z*`jH(d0) z3s`}9i;OA5Fy4jzNEc=rYw;*n<5$?p`^~Qu?#9Ssx5It7l=@*?KZTmv$EX=yL@nj- zwjR!R?{CF)+NV$}upe*38B~8CVmW?`MR*evK?<4t+K=Vv#b#vHO&iu=6xl{|!1^Mp zgBetqoW^4O0BiAU)Rz8%8gL7p>;53Bz8e)YNBpdRJ%#saaP}Hi4-~i~?m_+VNetp) z)PUYat-vMBz-5K*K+146^$M)RUL3?jsEN&C0I#DabgPi{SA&n~tihE?Jeoe#3Jl|0 z9%G)sdg@+6U$M}P+S>yd!n4*Nkx830I@SF`+=6Y$E}J)SJD#$75^RhbM(|<$0;5>U zw0rS!d;rg3KjyK1L%0*e_@(tv+)uq~xiRhd4r%~5umy_=1WlmV`YNiw#CZx2QCPZy z&T%j5!D-xqAK@dIA2enZ<2Zt|sDVZZb-FNza1hU++HYY8MpwG^*O57xE7*m9AuE$G z?SyumhU54cX0CEOdcbL|5qregIvyrjz=q(Ox%S`!i-}h9<}Y?q4x3z)Bxvfdp?I>D^Y?S*nl(m94ba~ zE8Y7|$RlO|D|o+op27gWXH8@MRUbl){1emzKcimgC&aa)X=#)KXmrmzmjP)m3cwF1|yKcR7LfG<1#UB$ z_dBVHt5!xwe1tqq*2G8&v)C;-(aZ<8sF%P28mfMl9w3D=gRoegmr+cX=ij@=-god*f3YY@2l9rAwbxwsBBV>I$ipckq zl@uRa$$ezv+S#T~vv@wYZu*A!V7UR_Jd>5fhA3H46I#wW*O zd*Tz3;6Q9@^wEjn=82v0-Fu%6w(N_$rM9ur@%YqeER|i7?Me0o##6rq(y~&E%69mY RM=JYMH!3|D$?}@d{sZ9P-bMfb delta 2607 zcmZYAX>1f_9LMpecMFuGlwP!SED9Cd(gHm!&_X#&Yq?P<*S6ilgk{&Ttq@Q*v>wy~ zRyHL{AaWR^@Pfn|5Mo3zL1QHGh*F8m`Cs!TKG9WhSzZ%4oNX43m-?_Ux#CH0}jDm zSd6b=5q^kC_&e4a6EZi+%%`G=)-s3-@I21K*rCR(!Z}!phj2Q6hYdJZlE?@NKNcpKuOl zjWDJJ*CJJ>7uD_%7UK7)nY@paaNJ1xp?_0PrWBt>Jzx*k<5`@EF{7dnti>G4O>Wsn zjbsOEWQUO{HRs&&efRflh95`$Ow>%w=AxxrfgwFGNM<7L#|%7!7GB2DcpKv}mIA9{ zl5jGnA=|*zxi%n8%?i|WHleoBir~#CXiMDG*i}GgF3-+KhBbY$>KI(;HdAlbtC4>1dBU4VrYTSex>1UXY zmt22Cjr5*dj$=4eDCZ&j*DOKJ%o;oqV~iKIbSXTf0vDk6%8RJ`K0)n)ze8k-$>cH& zxd=6dJ5UXJaVefb_KitqI@V*B>vq>GxR&~IrcI~f0ItAm*o0H_*k9O%&G-wJW2l0i zpo|Z9;&GgddHK;7Xu%nj_n}7em1~R@eP9)?p}r4!2lFR#@=Ow2T?0tRR;fgY5c-1YBf7IO*xQO~*)C^t002Xpq+wo1*^Zr3? zws8}TVfoEsRN3noGUgx|-S`Dg#Y&DsEpEX?JcSy`2dEjiiW+G;hq?w!QA-y<-G2mW zV!lP)e-{}vpUCLsi;4MbUxS7}5<#$*AKmQEPn{*JA}wABO#|$5FqZM*V&Z_hAEH ztrYwjpTr32d3l^c-QR@Muo*S8eW)4uW-{xq%#T#Wpmu0A!RNpXB_1UGgHZ>(my?FL z3Qf6^HZfbsNqWf!LbITxSy)6Q5cvcX<$O10)4#KMC>u_MGrh_)Fy}aJ#03O1=ZpxP zZ@V^9Dlwm6e>rI`R~@-lLPvNZp|m)Pvv-o+JS*s=bz1)=Zb2WSId0xUCdE0cvDi*% zkE|lJ)=F^%-x+60bz+o85_}YmhiD^`2qkU6QBE#;@j^Ti+Q3C?^c11JppV6LqJ_|! ztt2Xm3B)pDCZSYA=-fY?W>Lr>IH^w39?|l0GM!Y%HP_ASKOyLV;xmEq|cH@>tJ#e0H1F5(xOb9)C%=FnM8K!7eI0z5j2u za%KJ80e^B_!cecT&1$!O9o}uh0e@^^vc@Kj=9W{D?w&|@f28Y#@?94OI`VzVi8tPR z|K?kL;iVHZ!&OD2!gnUlOT6)V-{7m~2Pz6<6LRRKi^lKLSEPGSWcS`bUOL8`4DLM` Mt}o6HR~CQtFR>O}8UO$Q diff --git a/rest_framework/locale/ja/LC_MESSAGES/django.po b/rest_framework/locale/ja/LC_MESSAGES/django.po index a5e72d9a1..6b8d71429 100644 --- a/rest_framework/locale/ja/LC_MESSAGES/django.po +++ b/rest_framework/locale/ja/LC_MESSAGES/django.po @@ -9,9 +9,9 @@ msgid "" msgstr "" "Project-Id-Version: Django REST framework\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-07-12 16:13+0100\n" -"PO-Revision-Date: 2017-08-03 14:58+0000\n" -"Last-Translator: Kouichi Nishizawa \n" +"POT-Creation-Date: 2020-10-13 21:45+0200\n" +"PO-Revision-Date: 2020-10-13 19:45+0000\n" +"Last-Translator: Xavier Ordoquy \n" "Language-Team: Japanese (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/ja/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,40 +19,40 @@ msgstr "" "Language: ja\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: authentication.py:73 +#: authentication.py:70 msgid "Invalid basic header. No credentials provided." msgstr "不正な基本ヘッダです。認証情報が含まれていません。" -#: authentication.py:76 +#: authentication.py:73 msgid "Invalid basic header. Credentials string should not contain spaces." msgstr "不正な基本ヘッダです。認証情報文字列に空白を含めてはいけません。" -#: authentication.py:82 +#: authentication.py:83 msgid "Invalid basic header. Credentials not correctly base64 encoded." msgstr "不正な基本ヘッダです。認証情報がBASE64で正しくエンコードされていません。" -#: authentication.py:99 +#: authentication.py:101 msgid "Invalid username/password." msgstr "ユーザ名かパスワードが違います。" -#: authentication.py:102 authentication.py:198 +#: authentication.py:104 authentication.py:206 msgid "User inactive or deleted." msgstr "ユーザが無効か削除されています。" -#: authentication.py:176 +#: authentication.py:184 msgid "Invalid token header. No credentials provided." msgstr "不正なトークンヘッダです。認証情報が含まれていません。" -#: authentication.py:179 +#: authentication.py:187 msgid "Invalid token header. Token string should not contain spaces." msgstr "不正なトークンヘッダです。トークン文字列に空白を含めてはいけません。" -#: authentication.py:185 +#: authentication.py:193 msgid "" "Invalid token header. Token string should not contain invalid characters." msgstr "不正なトークンヘッダです。トークン文字列に不正な文字を含めてはいけません。" -#: authentication.py:195 +#: authentication.py:203 msgid "Invalid token." msgstr "不正なトークンです。" @@ -60,382 +60,515 @@ msgstr "不正なトークンです。" msgid "Auth Token" msgstr "認証トークン" -#: authtoken/models.py:15 +#: authtoken/models.py:13 msgid "Key" msgstr "キー" -#: authtoken/models.py:18 +#: authtoken/models.py:16 msgid "User" msgstr "ユーザ" -#: authtoken/models.py:20 +#: authtoken/models.py:18 msgid "Created" msgstr "作成された" -#: authtoken/models.py:29 +#: authtoken/models.py:27 authtoken/serializers.py:19 msgid "Token" msgstr "トークン" -#: authtoken/models.py:30 +#: authtoken/models.py:28 msgid "Tokens" msgstr "トークン" -#: authtoken/serializers.py:8 +#: authtoken/serializers.py:9 msgid "Username" msgstr "ユーザ名" -#: authtoken/serializers.py:9 +#: authtoken/serializers.py:13 msgid "Password" msgstr "パスワード" -#: authtoken/serializers.py:20 -msgid "User account is disabled." -msgstr "ユーザアカウントが無効化されています。" - -#: authtoken/serializers.py:23 +#: authtoken/serializers.py:35 msgid "Unable to log in with provided credentials." msgstr "提供された認証情報でログインできません。" -#: authtoken/serializers.py:26 +#: authtoken/serializers.py:38 msgid "Must include \"username\" and \"password\"." msgstr "\"username\"と\"password\"を含まなければなりません。" -#: exceptions.py:49 +#: exceptions.py:102 msgid "A server error occurred." msgstr "サーバエラーが発生しました。" -#: exceptions.py:84 +#: exceptions.py:142 +msgid "Invalid input." +msgstr "" + +#: exceptions.py:161 msgid "Malformed request." msgstr "不正な形式のリクエストです。" -#: exceptions.py:89 +#: exceptions.py:167 msgid "Incorrect authentication credentials." msgstr "認証情報が正しくありません。" -#: exceptions.py:94 +#: exceptions.py:173 msgid "Authentication credentials were not provided." msgstr "認証情報が含まれていません。" -#: exceptions.py:99 +#: exceptions.py:179 msgid "You do not have permission to perform this action." msgstr "このアクションを実行する権限がありません。" -#: exceptions.py:104 views.py:81 +#: exceptions.py:185 msgid "Not found." msgstr "見つかりませんでした。" -#: exceptions.py:109 +#: exceptions.py:191 +#, python-brace-format msgid "Method \"{method}\" not allowed." msgstr "メソッド \"{method}\" は許されていません。" -#: exceptions.py:120 +#: exceptions.py:202 msgid "Could not satisfy the request Accept header." msgstr "リクエストのAcceptヘッダを満たすことができませんでした。" -#: exceptions.py:132 +#: exceptions.py:212 +#, python-brace-format msgid "Unsupported media type \"{media_type}\" in request." msgstr "リクエストのメディアタイプ \"{media_type}\" はサポートされていません。" -#: exceptions.py:145 +#: exceptions.py:223 msgid "Request was throttled." msgstr "リクエストの処理は絞られました。" -#: fields.py:269 relations.py:206 relations.py:239 validators.py:98 -#: validators.py:181 +#: exceptions.py:224 +#, python-brace-format +msgid "Expected available in {wait} second." +msgstr "" + +#: exceptions.py:225 +#, python-brace-format +msgid "Expected available in {wait} seconds." +msgstr "" + +#: fields.py:316 relations.py:245 relations.py:279 validators.py:90 +#: validators.py:183 msgid "This field is required." msgstr "この項目は必須です。" -#: fields.py:270 +#: fields.py:317 msgid "This field may not be null." msgstr "この項目はnullにできません。" -#: fields.py:608 fields.py:639 -msgid "\"{input}\" is not a valid boolean." -msgstr "\"{input}\" は有効なブーリアンではありません。" +#: fields.py:701 +msgid "Must be a valid boolean." +msgstr "" -#: fields.py:674 +#: fields.py:766 +msgid "Not a valid string." +msgstr "" + +#: fields.py:767 msgid "This field may not be blank." msgstr "この項目は空にできません。" -#: fields.py:675 fields.py:1675 +#: fields.py:768 fields.py:1881 +#, python-brace-format msgid "Ensure this field has no more than {max_length} characters." msgstr "この項目が{max_length}文字より長くならないようにしてください。" -#: fields.py:676 +#: fields.py:769 +#, python-brace-format msgid "Ensure this field has at least {min_length} characters." msgstr "この項目は少なくとも{min_length}文字以上にしてください。" -#: fields.py:713 +#: fields.py:816 msgid "Enter a valid email address." msgstr "有効なメールアドレスを入力してください。" -#: fields.py:724 +#: fields.py:827 msgid "This value does not match the required pattern." msgstr "この値は所要のパターンにマッチしません。" -#: fields.py:735 +#: fields.py:838 msgid "" "Enter a valid \"slug\" consisting of letters, numbers, underscores or " "hyphens." msgstr "文字、数字、アンダースコア、またはハイフンから成る有効な \"slug\" を入力してください。" -#: fields.py:747 +#: fields.py:839 +msgid "" +"Enter a valid \"slug\" consisting of Unicode letters, numbers, underscores, " +"or hyphens." +msgstr "" + +#: fields.py:854 msgid "Enter a valid URL." msgstr "有効なURLを入力してください。" -#: fields.py:760 -msgid "\"{value}\" is not a valid UUID." -msgstr "\"{value}\" は有効なUUIDではありません。" +#: fields.py:867 +msgid "Must be a valid UUID." +msgstr "" -#: fields.py:796 +#: fields.py:903 msgid "Enter a valid IPv4 or IPv6 address." msgstr "有効なIPv4またはIPv6アドレスを入力してください。" -#: fields.py:821 +#: fields.py:931 msgid "A valid integer is required." msgstr "有効な整数を入力してください。" -#: fields.py:822 fields.py:857 fields.py:891 +#: fields.py:932 fields.py:969 fields.py:1005 fields.py:1366 +#, python-brace-format msgid "Ensure this value is less than or equal to {max_value}." msgstr "この値は{max_value}以下にしてください。" -#: fields.py:823 fields.py:858 fields.py:892 +#: fields.py:933 fields.py:970 fields.py:1006 fields.py:1367 +#, python-brace-format msgid "Ensure this value is greater than or equal to {min_value}." msgstr "この値は{min_value}以上にしてください。" -#: fields.py:824 fields.py:859 fields.py:896 +#: fields.py:934 fields.py:971 fields.py:1010 msgid "String value too large." msgstr "文字列が長過ぎます。" -#: fields.py:856 fields.py:890 +#: fields.py:968 fields.py:1004 msgid "A valid number is required." msgstr "有効な数値を入力してください。" -#: fields.py:893 +#: fields.py:1007 +#, python-brace-format msgid "Ensure that there are no more than {max_digits} digits in total." msgstr "合計で最大{max_digits}桁以下になるようにしてください。" -#: fields.py:894 +#: fields.py:1008 +#, python-brace-format msgid "" "Ensure that there are no more than {max_decimal_places} decimal places." msgstr "小数点以下の桁数を{max_decimal_places}を超えないようにしてください。" -#: fields.py:895 +#: fields.py:1009 +#, python-brace-format msgid "" "Ensure that there are no more than {max_whole_digits} digits before the " "decimal point." msgstr "整数部の桁数を{max_whole_digits}を超えないようにしてください。" -#: fields.py:1025 +#: fields.py:1148 +#, python-brace-format msgid "Datetime has wrong format. Use one of these formats instead: {format}." msgstr "日時の形式が違います。以下のどれかの形式にしてください: {format}。" -#: fields.py:1026 +#: fields.py:1149 msgid "Expected a datetime but got a date." msgstr "日付ではなく日時を入力してください。" -#: fields.py:1103 +#: fields.py:1150 +#, python-brace-format +msgid "Invalid datetime for the timezone \"{timezone}\"." +msgstr "" + +#: fields.py:1151 +msgid "Datetime value out of range." +msgstr "" + +#: fields.py:1236 +#, python-brace-format msgid "Date has wrong format. Use one of these formats instead: {format}." msgstr "日付の形式が違います。以下のどれかの形式にしてください: {format}。" -#: fields.py:1104 +#: fields.py:1237 msgid "Expected a date but got a datetime." msgstr "日時ではなく日付を入力してください。" -#: fields.py:1170 +#: fields.py:1303 +#, python-brace-format msgid "Time has wrong format. Use one of these formats instead: {format}." msgstr "時刻の形式が違います。以下のどれかの形式にしてください: {format}。" -#: fields.py:1232 +#: fields.py:1365 +#, python-brace-format msgid "Duration has wrong format. Use one of these formats instead: {format}." msgstr "機関の形式が違います。以下のどれかの形式にしてください: {format}。" -#: fields.py:1251 fields.py:1300 +#: fields.py:1399 fields.py:1456 +#, python-brace-format msgid "\"{input}\" is not a valid choice." msgstr "\"{input}\"は有効な選択肢ではありません。" -#: fields.py:1254 relations.py:71 relations.py:441 +#: fields.py:1402 +#, python-brace-format msgid "More than {count} items..." msgstr " {count} 個より多い..." -#: fields.py:1301 fields.py:1448 relations.py:437 serializers.py:524 +#: fields.py:1457 fields.py:1603 relations.py:485 serializers.py:570 +#, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "\"{input_type}\" 型のデータではなく項目のリストを入力してください。" -#: fields.py:1302 +#: fields.py:1458 msgid "This selection may not be empty." msgstr "空でない項目を選択してください。" -#: fields.py:1339 +#: fields.py:1495 +#, python-brace-format msgid "\"{input}\" is not a valid path choice." msgstr "\"{input}\"は有効なパスの選択肢ではありません。" -#: fields.py:1358 +#: fields.py:1514 msgid "No file was submitted." msgstr "ファイルが添付されていません。" -#: fields.py:1359 +#: fields.py:1515 msgid "" "The submitted data was not a file. Check the encoding type on the form." msgstr "添付されたデータはファイルではありません。フォームのエンコーディングタイプを確認してください。" -#: fields.py:1360 +#: fields.py:1516 msgid "No filename could be determined." msgstr "ファイル名が取得できませんでした。" -#: fields.py:1361 +#: fields.py:1517 msgid "The submitted file is empty." msgstr "添付ファイルの中身が空でした。" -#: fields.py:1362 +#: fields.py:1518 +#, python-brace-format msgid "" "Ensure this filename has at most {max_length} characters (it has {length})." msgstr "ファイル名は最大{max_length}文字にしてください({length}文字でした)。" -#: fields.py:1410 +#: fields.py:1566 msgid "" "Upload a valid image. The file you uploaded was either not an image or a " "corrupted image." msgstr "有効な画像をアップロードしてください。アップロードされたファイルは画像でないか壊れた画像です。" -#: fields.py:1449 relations.py:438 serializers.py:525 +#: fields.py:1604 relations.py:486 serializers.py:571 msgid "This list may not be empty." msgstr "リストは空ではいけません。" -#: fields.py:1502 +#: fields.py:1605 +#, python-brace-format +msgid "Ensure this field has at least {min_length} elements." +msgstr "" + +#: fields.py:1606 +#, python-brace-format +msgid "Ensure this field has no more than {max_length} elements." +msgstr "" + +#: fields.py:1682 +#, python-brace-format msgid "Expected a dictionary of items but got type \"{input_type}\"." msgstr "\"{input_type}\" 型のデータではなく項目の辞書を入力してください。" -#: fields.py:1549 +#: fields.py:1683 +msgid "This dictionary may not be empty." +msgstr "" + +#: fields.py:1755 msgid "Value must be valid JSON." msgstr "値は有効なJSONでなければなりません。" -#: filters.py:36 templates/rest_framework/filters/django_filter.html:5 -msgid "Submit" -msgstr "提出" +#: filters.py:49 templates/rest_framework/filters/search.html:2 +msgid "Search" +msgstr "検索" -#: filters.py:336 +#: filters.py:50 +msgid "A search term." +msgstr "" + +#: filters.py:180 templates/rest_framework/filters/ordering.html:3 +msgid "Ordering" +msgstr "順序" + +#: filters.py:181 +msgid "Which field to use when ordering the results." +msgstr "" + +#: filters.py:287 msgid "ascending" msgstr "昇順" -#: filters.py:337 +#: filters.py:288 msgid "descending" msgstr "降順" -#: pagination.py:193 +#: pagination.py:174 +msgid "A page number within the paginated result set." +msgstr "" + +#: pagination.py:179 pagination.py:372 pagination.py:590 +msgid "Number of results to return per page." +msgstr "" + +#: pagination.py:189 msgid "Invalid page." msgstr "不正なページです。" -#: pagination.py:427 +#: pagination.py:374 +msgid "The initial index from which to return the results." +msgstr "" + +#: pagination.py:581 +msgid "The pagination cursor value." +msgstr "" + +#: pagination.py:583 msgid "Invalid cursor" msgstr "カーソルが不正です。" -#: relations.py:207 +#: relations.py:246 +#, python-brace-format msgid "Invalid pk \"{pk_value}\" - object does not exist." msgstr "主キー \"{pk_value}\" は不正です - データが存在しません。" -#: relations.py:208 +#: relations.py:247 +#, python-brace-format msgid "Incorrect type. Expected pk value, received {data_type}." msgstr "不正な型です。{data_type} 型ではなく主キーの値を入力してください。" -#: relations.py:240 +#: relations.py:280 msgid "Invalid hyperlink - No URL match." msgstr "ハイパーリンクが不正です - URLにマッチしません。" -#: relations.py:241 +#: relations.py:281 msgid "Invalid hyperlink - Incorrect URL match." msgstr "ハイパーリンクが不正です - 不正なURLにマッチします。" -#: relations.py:242 +#: relations.py:282 msgid "Invalid hyperlink - Object does not exist." msgstr "ハイパーリンクが不正です - リンク先が存在しません。" -#: relations.py:243 +#: relations.py:283 +#, python-brace-format msgid "Incorrect type. Expected URL string, received {data_type}." msgstr "不正なデータ型です。{data_type} 型ではなくURL文字列を入力してください。" -#: relations.py:401 +#: relations.py:448 +#, python-brace-format msgid "Object with {slug_name}={value} does not exist." msgstr "{slug_name}={value} のデータが存在しません。" -#: relations.py:402 +#: relations.py:449 msgid "Invalid value." msgstr "不正な値です。" -#: serializers.py:326 +#: schemas/utils.py:32 +msgid "unique integer value" +msgstr "" + +#: schemas/utils.py:34 +msgid "UUID string" +msgstr "" + +#: schemas/utils.py:36 +msgid "unique value" +msgstr "" + +#: schemas/utils.py:38 +#, python-brace-format +msgid "A {value_type} identifying this {name}." +msgstr "" + +#: serializers.py:337 +#, python-brace-format msgid "Invalid data. Expected a dictionary, but got {datatype}." msgstr "不正なデータです。{datatype} 型ではなく辞書を入力してください。" #: templates/rest_framework/admin.html:116 -#: templates/rest_framework/base.html:128 +#: templates/rest_framework/base.html:136 +msgid "Extra Actions" +msgstr "" + +#: templates/rest_framework/admin.html:130 +#: templates/rest_framework/base.html:150 msgid "Filters" msgstr "フィルタ" -#: templates/rest_framework/filters/django_filter.html:2 -#: templates/rest_framework/filters/django_filter_crispyforms.html:4 -msgid "Field filters" -msgstr "フィールドフィルタ" +#: templates/rest_framework/base.html:37 +msgid "navbar" +msgstr "" -#: templates/rest_framework/filters/ordering.html:3 -msgid "Ordering" -msgstr "順序" +#: templates/rest_framework/base.html:75 +msgid "content" +msgstr "" -#: templates/rest_framework/filters/search.html:2 -msgid "Search" -msgstr "検索" +#: templates/rest_framework/base.html:78 +msgid "request form" +msgstr "" -#: templates/rest_framework/horizontal/radio.html:2 -#: templates/rest_framework/inline/radio.html:2 -#: templates/rest_framework/vertical/radio.html:2 +#: templates/rest_framework/base.html:157 +msgid "main content" +msgstr "" + +#: templates/rest_framework/base.html:173 +msgid "request info" +msgstr "" + +#: templates/rest_framework/base.html:177 +msgid "response info" +msgstr "" + +#: templates/rest_framework/horizontal/radio.html:4 +#: templates/rest_framework/inline/radio.html:3 +#: templates/rest_framework/vertical/radio.html:3 msgid "None" msgstr "なし" -#: templates/rest_framework/horizontal/select_multiple.html:2 -#: templates/rest_framework/inline/select_multiple.html:2 -#: templates/rest_framework/vertical/select_multiple.html:2 +#: templates/rest_framework/horizontal/select_multiple.html:4 +#: templates/rest_framework/inline/select_multiple.html:3 +#: templates/rest_framework/vertical/select_multiple.html:3 msgid "No items to select." msgstr "選択する項目がありません。" -#: validators.py:43 +#: validators.py:39 msgid "This field must be unique." msgstr "この項目は一意でなければなりません。" -#: validators.py:97 +#: validators.py:89 +#, python-brace-format msgid "The fields {field_names} must make a unique set." msgstr "項目 {field_names} は一意な組でなければなりません。" -#: validators.py:245 +#: validators.py:171 +#, python-brace-format +msgid "Surrogate characters are not allowed: U+{code_point:X}." +msgstr "" + +#: validators.py:243 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" date." msgstr "この項目は \"{date_field}\" の日に対して一意でなければなりません。" -#: validators.py:260 +#: validators.py:258 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" month." msgstr "この項目は \"{date_field}\" の月に対して一意でなければなりません。" -#: validators.py:273 +#: validators.py:271 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" year." msgstr "この項目は \"{date_field}\" の年に対して一意でなければなりません。" -#: versioning.py:42 +#: versioning.py:40 msgid "Invalid version in \"Accept\" header." msgstr "\"Accept\" 内のバージョンが不正です。" -#: versioning.py:73 +#: versioning.py:71 msgid "Invalid version in URL path." msgstr "URLパス内のバージョンが不正です。" -#: versioning.py:115 +#: versioning.py:116 msgid "Invalid version in URL path. Does not match any version namespace." msgstr "不正なバージョンのURLのパスです。どのバージョンの名前空間にも一致しません。" -#: versioning.py:147 +#: versioning.py:148 msgid "Invalid version in hostname." msgstr "ホスト名内のバージョンが不正です。" -#: versioning.py:169 +#: versioning.py:170 msgid "Invalid version in query parameter." msgstr "クエリパラメータ内のバージョンが不正です。" - -#: views.py:88 -msgid "Permission denied." -msgstr "権限がありません。" diff --git a/rest_framework/locale/ko_KR/LC_MESSAGES/django.mo b/rest_framework/locale/ko_KR/LC_MESSAGES/django.mo index 570ff6f538532729f73753ecc2bf9135aa3de88f..c3aeb27a96e5c3b3ef9e61ac79e9ad229463ec7c 100644 GIT binary patch delta 2349 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 GpZf<{iC`1} diff --git a/rest_framework/locale/ko_KR/LC_MESSAGES/django.po b/rest_framework/locale/ko_KR/LC_MESSAGES/django.po index 43dbe0cdd..722dc2c82 100644 --- a/rest_framework/locale/ko_KR/LC_MESSAGES/django.po +++ b/rest_framework/locale/ko_KR/LC_MESSAGES/django.po @@ -4,15 +4,16 @@ # # Translators: # GarakdongBigBoy , 2017 +# Hochul Kwak , 2018 # Joon Hwan 김준환 , 2017 # SUN CHOI , 2015 msgid "" msgstr "" "Project-Id-Version: Django REST framework\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-07-12 16:13+0100\n" -"PO-Revision-Date: 2017-09-28 09:41+0000\n" -"Last-Translator: GarakdongBigBoy \n" +"POT-Creation-Date: 2020-10-13 21:45+0200\n" +"PO-Revision-Date: 2020-10-13 19:45+0000\n" +"Last-Translator: Xavier Ordoquy \n" "Language-Team: Korean (Korea) (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/ko_KR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,423 +21,556 @@ msgstr "" "Language: ko_KR\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: authentication.py:73 +#: authentication.py:70 msgid "Invalid basic header. No credentials provided." msgstr "기본 헤더(basic header)가 유효하지 않습니다. 인증데이터(credentials)가 제공되지 않았습니다." -#: authentication.py:76 +#: authentication.py:73 msgid "Invalid basic header. Credentials string should not contain spaces." msgstr "기본 헤더(basic header)가 유효하지 않습니다. 인증데이터(credentials) 문자열은 빈칸(spaces)을 포함하지 않아야 합니다." -#: authentication.py:82 +#: authentication.py:83 msgid "Invalid basic header. Credentials not correctly base64 encoded." msgstr "기본 헤더(basic header)가 유효하지 않습니다. 인증데이터(credentials)가 base64로 적절히 부호화(encode)되지 않았습니다." -#: authentication.py:99 +#: authentication.py:101 msgid "Invalid username/password." msgstr "아이디/비밀번호가 유효하지 않습니다." -#: authentication.py:102 authentication.py:198 +#: authentication.py:104 authentication.py:206 msgid "User inactive or deleted." msgstr "계정이 중지되었거나 삭제되었습니다." -#: authentication.py:176 +#: authentication.py:184 msgid "Invalid token header. No credentials provided." msgstr "토큰 헤더가 유효하지 않습니다. 인증데이터(credentials)가 제공되지 않았습니다." -#: authentication.py:179 +#: authentication.py:187 msgid "Invalid token header. Token string should not contain spaces." msgstr "토큰 헤더가 유효하지 않습니다. 토큰 문자열은 빈칸(spaces)을 포함하지 않아야 합니다." -#: authentication.py:185 +#: authentication.py:193 msgid "" "Invalid token header. Token string should not contain invalid characters." msgstr "토큰 헤더가 유효하지 않습니다. 토큰 문자열은 유효하지 않은 문자를 포함하지 않아야 합니다." -#: authentication.py:195 +#: authentication.py:203 msgid "Invalid token." msgstr "토큰이 유효하지 않습니다." #: authtoken/apps.py:7 msgid "Auth Token" -msgstr "" +msgstr "인증 토큰" -#: authtoken/models.py:15 +#: authtoken/models.py:13 msgid "Key" -msgstr "" +msgstr "키" + +#: authtoken/models.py:16 +msgid "User" +msgstr "유저" #: authtoken/models.py:18 -msgid "User" -msgstr "" - -#: authtoken/models.py:20 msgid "Created" -msgstr "" +msgstr "생성됨" -#: authtoken/models.py:29 +#: authtoken/models.py:27 authtoken/serializers.py:19 msgid "Token" -msgstr "" +msgstr "토큰" -#: authtoken/models.py:30 +#: authtoken/models.py:28 msgid "Tokens" msgstr "" -#: authtoken/serializers.py:8 -msgid "Username" -msgstr "" - #: authtoken/serializers.py:9 +msgid "Username" +msgstr "유저이름" + +#: authtoken/serializers.py:13 msgid "Password" -msgstr "" +msgstr "비밀번호" -#: authtoken/serializers.py:20 -msgid "User account is disabled." -msgstr "사용자 계정을 사용할 수 없습니다." - -#: authtoken/serializers.py:23 +#: authtoken/serializers.py:35 msgid "Unable to log in with provided credentials." msgstr "제공된 인증데이터(credentials)로는 로그인할 수 없습니다." -#: authtoken/serializers.py:26 +#: authtoken/serializers.py:38 msgid "Must include \"username\" and \"password\"." msgstr "\"아이디\"와 \"비밀번호\"를 포함해야 합니다." -#: exceptions.py:49 +#: exceptions.py:102 msgid "A server error occurred." msgstr "서버 장애가 발생했습니다." -#: exceptions.py:84 +#: exceptions.py:142 +msgid "Invalid input." +msgstr "" + +#: exceptions.py:161 msgid "Malformed request." msgstr "잘못된 요청입니다." -#: exceptions.py:89 +#: exceptions.py:167 msgid "Incorrect authentication credentials." msgstr "자격 인증데이터(authentication credentials)가 정확하지 않습니다." -#: exceptions.py:94 +#: exceptions.py:173 msgid "Authentication credentials were not provided." msgstr "자격 인증데이터(authentication credentials)가 제공되지 않았습니다." -#: exceptions.py:99 +#: exceptions.py:179 msgid "You do not have permission to perform this action." msgstr "이 작업을 수행할 권한(permission)이 없습니다." -#: exceptions.py:104 views.py:81 +#: exceptions.py:185 msgid "Not found." msgstr "찾을 수 없습니다." -#: exceptions.py:109 +#: exceptions.py:191 +#, python-brace-format msgid "Method \"{method}\" not allowed." msgstr "메소드(Method) \"{method}\"는 허용되지 않습니다." -#: exceptions.py:120 +#: exceptions.py:202 msgid "Could not satisfy the request Accept header." msgstr "Accept header 요청을 만족할 수 없습니다." -#: exceptions.py:132 +#: exceptions.py:212 +#, python-brace-format msgid "Unsupported media type \"{media_type}\" in request." msgstr "요청된 \"{media_type}\"가 지원되지 않는 미디어 형태입니다." -#: exceptions.py:145 +#: exceptions.py:223 msgid "Request was throttled." msgstr "요청이 지연(throttled)되었습니다." -#: fields.py:269 relations.py:206 relations.py:239 validators.py:98 -#: validators.py:181 +#: exceptions.py:224 +#, python-brace-format +msgid "Expected available in {wait} second." +msgstr "" + +#: exceptions.py:225 +#, python-brace-format +msgid "Expected available in {wait} seconds." +msgstr "" + +#: fields.py:316 relations.py:245 relations.py:279 validators.py:90 +#: validators.py:183 msgid "This field is required." msgstr "이 필드는 필수 항목입니다." -#: fields.py:270 +#: fields.py:317 msgid "This field may not be null." msgstr "이 필드는 null일 수 없습니다." -#: fields.py:608 fields.py:639 -msgid "\"{input}\" is not a valid boolean." -msgstr "\"{input}\"이 유효하지 않은 부울(boolean)입니다." +#: fields.py:701 +msgid "Must be a valid boolean." +msgstr "" -#: fields.py:674 +#: fields.py:766 +msgid "Not a valid string." +msgstr "" + +#: fields.py:767 msgid "This field may not be blank." msgstr "이 필드는 blank일 수 없습니다." -#: fields.py:675 fields.py:1675 +#: fields.py:768 fields.py:1881 +#, python-brace-format msgid "Ensure this field has no more than {max_length} characters." msgstr "이 필드의 글자 수가 {max_length} 이하인지 확인하십시오." -#: fields.py:676 +#: fields.py:769 +#, python-brace-format msgid "Ensure this field has at least {min_length} characters." msgstr "이 필드의 글자 수가 적어도 {min_length} 이상인지 확인하십시오." -#: fields.py:713 +#: fields.py:816 msgid "Enter a valid email address." msgstr "유효한 이메일 주소를 입력하십시오." -#: fields.py:724 +#: fields.py:827 msgid "This value does not match the required pattern." msgstr "형식에 맞지 않는 값입니다." -#: fields.py:735 +#: fields.py:838 msgid "" "Enter a valid \"slug\" consisting of letters, numbers, underscores or " "hyphens." msgstr "문자, 숫자, 밑줄( _ ) 또는 하이픈( - )으로 이루어진 유효한 \"slug\"를 입력하십시오." -#: fields.py:747 +#: fields.py:839 +msgid "" +"Enter a valid \"slug\" consisting of Unicode letters, numbers, underscores, " +"or hyphens." +msgstr "" + +#: fields.py:854 msgid "Enter a valid URL." msgstr "유효한 URL을 입력하십시오." -#: fields.py:760 -msgid "\"{value}\" is not a valid UUID." -msgstr "\"{value}\"가 유효하지 않은 UUID 입니다." +#: fields.py:867 +msgid "Must be a valid UUID." +msgstr "" -#: fields.py:796 +#: fields.py:903 msgid "Enter a valid IPv4 or IPv6 address." msgstr "유효한 IPv4 또는 IPv6 주소를 입력하십시오." -#: fields.py:821 +#: fields.py:931 msgid "A valid integer is required." msgstr "유효한 정수(integer)를 넣어주세요." -#: fields.py:822 fields.py:857 fields.py:891 +#: fields.py:932 fields.py:969 fields.py:1005 fields.py:1366 +#, python-brace-format msgid "Ensure this value is less than or equal to {max_value}." msgstr "이 값이 {max_value}보다 작거나 같은지 확인하십시오." -#: fields.py:823 fields.py:858 fields.py:892 +#: fields.py:933 fields.py:970 fields.py:1006 fields.py:1367 +#, python-brace-format msgid "Ensure this value is greater than or equal to {min_value}." msgstr "이 값이 {min_value}보다 크거나 같은지 확인하십시오." -#: fields.py:824 fields.py:859 fields.py:896 +#: fields.py:934 fields.py:971 fields.py:1010 msgid "String value too large." msgstr "문자열 값이 너무 큽니다." -#: fields.py:856 fields.py:890 +#: fields.py:968 fields.py:1004 msgid "A valid number is required." msgstr "유효한 숫자를 넣어주세요." -#: fields.py:893 +#: fields.py:1007 +#, python-brace-format msgid "Ensure that there are no more than {max_digits} digits in total." msgstr "전체 숫자(digits)가 {max_digits} 이하인지 확인하십시오." -#: fields.py:894 +#: fields.py:1008 +#, python-brace-format msgid "" "Ensure that there are no more than {max_decimal_places} decimal places." msgstr "소수점 자릿수가 {max_decimal_places} 이하인지 확인하십시오." -#: fields.py:895 +#: fields.py:1009 +#, python-brace-format msgid "" "Ensure that there are no more than {max_whole_digits} digits before the " "decimal point." msgstr "소수점 자리 앞에 숫자(digits)가 {max_whole_digits} 이하인지 확인하십시오." -#: fields.py:1025 +#: fields.py:1148 +#, python-brace-format msgid "Datetime has wrong format. Use one of these formats instead: {format}." msgstr "Datetime의 포멧이 잘못되었습니다. 이 형식들 중 한가지를 사용하세요: {format}." -#: fields.py:1026 +#: fields.py:1149 msgid "Expected a datetime but got a date." msgstr "예상된 datatime 대신 date를 받았습니다." -#: fields.py:1103 +#: fields.py:1150 +#, python-brace-format +msgid "Invalid datetime for the timezone \"{timezone}\"." +msgstr "" + +#: fields.py:1151 +msgid "Datetime value out of range." +msgstr "" + +#: fields.py:1236 +#, python-brace-format msgid "Date has wrong format. Use one of these formats instead: {format}." msgstr "Date의 포멧이 잘못되었습니다. 이 형식들 중 한가지를 사용하세요: {format}." -#: fields.py:1104 +#: fields.py:1237 msgid "Expected a date but got a datetime." msgstr "예상된 date 대신 datetime을 받았습니다." -#: fields.py:1170 +#: fields.py:1303 +#, python-brace-format msgid "Time has wrong format. Use one of these formats instead: {format}." msgstr "Time의 포멧이 잘못되었습니다. 이 형식들 중 한가지를 사용하세요: {format}." -#: fields.py:1232 +#: fields.py:1365 +#, python-brace-format msgid "Duration has wrong format. Use one of these formats instead: {format}." msgstr "Duration의 포멧이 잘못되었습니다. 이 형식들 중 한가지를 사용하세요: {format}." -#: fields.py:1251 fields.py:1300 +#: fields.py:1399 fields.py:1456 +#, python-brace-format msgid "\"{input}\" is not a valid choice." msgstr "\"{input}\"이 유효하지 않은 선택(choice)입니다." -#: fields.py:1254 relations.py:71 relations.py:441 +#: fields.py:1402 +#, python-brace-format msgid "More than {count} items..." msgstr "" -#: fields.py:1301 fields.py:1448 relations.py:437 serializers.py:524 +#: fields.py:1457 fields.py:1603 relations.py:485 serializers.py:570 +#, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "아이템 리스트가 예상되었으나 \"{input_type}\"를 받았습니다." -#: fields.py:1302 +#: fields.py:1458 msgid "This selection may not be empty." msgstr "이 선택 항목은 비워 둘 수 없습니다." -#: fields.py:1339 +#: fields.py:1495 +#, python-brace-format msgid "\"{input}\" is not a valid path choice." msgstr "\"{input}\"이 유효하지 않은 경로 선택입니다." -#: fields.py:1358 +#: fields.py:1514 msgid "No file was submitted." msgstr "파일이 제출되지 않았습니다." -#: fields.py:1359 +#: fields.py:1515 msgid "" "The submitted data was not a file. Check the encoding type on the form." msgstr "제출된 데이터는 파일이 아닙니다. 제출된 서식의 인코딩 형식을 확인하세요." -#: fields.py:1360 +#: fields.py:1516 msgid "No filename could be determined." msgstr "파일명을 알 수 없습니다." -#: fields.py:1361 +#: fields.py:1517 msgid "The submitted file is empty." msgstr "제출한 파일이 비어있습니다." -#: fields.py:1362 +#: fields.py:1518 +#, python-brace-format msgid "" "Ensure this filename has at most {max_length} characters (it has {length})." msgstr "이 파일명의 글자수가 최대 {max_length}를 넘지 않는지 확인하십시오. (이것은 {length}가 있습니다)." -#: fields.py:1410 +#: fields.py:1566 msgid "" "Upload a valid image. The file you uploaded was either not an image or a " "corrupted image." msgstr "유효한 이미지 파일을 업로드 하십시오. 업로드 하신 파일은 이미지 파일이 아니거나 손상된 이미지 파일입니다." -#: fields.py:1449 relations.py:438 serializers.py:525 +#: fields.py:1604 relations.py:486 serializers.py:571 msgid "This list may not be empty." msgstr "이 리스트는 비워 둘 수 없습니다." -#: fields.py:1502 +#: fields.py:1605 +#, python-brace-format +msgid "Ensure this field has at least {min_length} elements." +msgstr "" + +#: fields.py:1606 +#, python-brace-format +msgid "Ensure this field has no more than {max_length} elements." +msgstr "" + +#: fields.py:1682 +#, python-brace-format msgid "Expected a dictionary of items but got type \"{input_type}\"." msgstr "아이템 딕셔너리가 예상되었으나 \"{input_type}\" 타입을 받았습니다." -#: fields.py:1549 +#: fields.py:1683 +msgid "This dictionary may not be empty." +msgstr "" + +#: fields.py:1755 msgid "Value must be valid JSON." msgstr "Value 는 유효한 JSON형식이어야 합니다." -#: filters.py:36 templates/rest_framework/filters/django_filter.html:5 -msgid "Submit" +#: filters.py:49 templates/rest_framework/filters/search.html:2 +msgid "Search" +msgstr "검색" + +#: filters.py:50 +msgid "A search term." msgstr "" -#: filters.py:336 +#: filters.py:180 templates/rest_framework/filters/ordering.html:3 +msgid "Ordering" +msgstr "순서" + +#: filters.py:181 +msgid "Which field to use when ordering the results." +msgstr "" + +#: filters.py:287 msgid "ascending" msgstr "오름차순" -#: filters.py:337 +#: filters.py:288 msgid "descending" msgstr "내림차순" -#: pagination.py:193 +#: pagination.py:174 +msgid "A page number within the paginated result set." +msgstr "" + +#: pagination.py:179 pagination.py:372 pagination.py:590 +msgid "Number of results to return per page." +msgstr "" + +#: pagination.py:189 msgid "Invalid page." msgstr "페이지가 유효하지 않습니다." -#: pagination.py:427 +#: pagination.py:374 +msgid "The initial index from which to return the results." +msgstr "" + +#: pagination.py:581 +msgid "The pagination cursor value." +msgstr "" + +#: pagination.py:583 msgid "Invalid cursor" msgstr "커서(cursor)가 유효하지 않습니다." -#: relations.py:207 +#: relations.py:246 +#, python-brace-format msgid "Invalid pk \"{pk_value}\" - object does not exist." msgstr "유효하지 않은 pk \"{pk_value}\" - 객체가 존재하지 않습니다." -#: relations.py:208 +#: relations.py:247 +#, python-brace-format msgid "Incorrect type. Expected pk value, received {data_type}." msgstr "잘못된 형식입니다. pk 값 대신 {data_type}를 받았습니다." -#: relations.py:240 +#: relations.py:280 msgid "Invalid hyperlink - No URL match." msgstr "유효하지 않은 하이퍼링크 - 일치하는 URL이 없습니다." -#: relations.py:241 +#: relations.py:281 msgid "Invalid hyperlink - Incorrect URL match." msgstr "유효하지 않은 하이퍼링크 - URL이 일치하지 않습니다." -#: relations.py:242 +#: relations.py:282 msgid "Invalid hyperlink - Object does not exist." msgstr "유효하지 않은 하이퍼링크 - 객체가 존재하지 않습니다." -#: relations.py:243 +#: relations.py:283 +#, python-brace-format msgid "Incorrect type. Expected URL string, received {data_type}." msgstr "잘못된 형식입니다. URL 문자열을 예상했으나 {data_type}을 받았습니다." -#: relations.py:401 +#: relations.py:448 +#, python-brace-format msgid "Object with {slug_name}={value} does not exist." msgstr "{slug_name}={value} 객체가 존재하지 않습니다." -#: relations.py:402 +#: relations.py:449 msgid "Invalid value." msgstr "값이 유효하지 않습니다." -#: serializers.py:326 +#: schemas/utils.py:32 +msgid "unique integer value" +msgstr "" + +#: schemas/utils.py:34 +msgid "UUID string" +msgstr "" + +#: schemas/utils.py:36 +msgid "unique value" +msgstr "" + +#: schemas/utils.py:38 +#, python-brace-format +msgid "A {value_type} identifying this {name}." +msgstr "" + +#: serializers.py:337 +#, python-brace-format msgid "Invalid data. Expected a dictionary, but got {datatype}." msgstr "유효하지 않은 데이터. 딕셔너리(dictionary)대신 {datatype}를 받았습니다." #: templates/rest_framework/admin.html:116 -#: templates/rest_framework/base.html:128 +#: templates/rest_framework/base.html:136 +msgid "Extra Actions" +msgstr "" + +#: templates/rest_framework/admin.html:130 +#: templates/rest_framework/base.html:150 msgid "Filters" +msgstr "필터" + +#: templates/rest_framework/base.html:37 +msgid "navbar" msgstr "" -#: templates/rest_framework/filters/django_filter.html:2 -#: templates/rest_framework/filters/django_filter_crispyforms.html:4 -msgid "Field filters" +#: templates/rest_framework/base.html:75 +msgid "content" msgstr "" -#: templates/rest_framework/filters/ordering.html:3 -msgid "Ordering" +#: templates/rest_framework/base.html:78 +msgid "request form" msgstr "" -#: templates/rest_framework/filters/search.html:2 -msgid "Search" -msgstr "검색" +#: templates/rest_framework/base.html:157 +msgid "main content" +msgstr "" -#: templates/rest_framework/horizontal/radio.html:2 -#: templates/rest_framework/inline/radio.html:2 -#: templates/rest_framework/vertical/radio.html:2 +#: templates/rest_framework/base.html:173 +msgid "request info" +msgstr "" + +#: templates/rest_framework/base.html:177 +msgid "response info" +msgstr "" + +#: templates/rest_framework/horizontal/radio.html:4 +#: templates/rest_framework/inline/radio.html:3 +#: templates/rest_framework/vertical/radio.html:3 msgid "None" msgstr "" -#: templates/rest_framework/horizontal/select_multiple.html:2 -#: templates/rest_framework/inline/select_multiple.html:2 -#: templates/rest_framework/vertical/select_multiple.html:2 +#: templates/rest_framework/horizontal/select_multiple.html:4 +#: templates/rest_framework/inline/select_multiple.html:3 +#: templates/rest_framework/vertical/select_multiple.html:3 msgid "No items to select." msgstr "선택할 아이템이 없습니다." -#: validators.py:43 +#: validators.py:39 msgid "This field must be unique." msgstr "이 필드는 반드시 고유(unique)해야 합니다." -#: validators.py:97 +#: validators.py:89 +#, python-brace-format msgid "The fields {field_names} must make a unique set." msgstr "필드 {field_names} 는 반드시 고유(unique)해야 합니다." -#: validators.py:245 +#: validators.py:171 +#, python-brace-format +msgid "Surrogate characters are not allowed: U+{code_point:X}." +msgstr "" + +#: validators.py:243 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" date." msgstr "이 필드는 고유(unique)한 \"{date_field}\" 날짜를 갖습니다." -#: validators.py:260 +#: validators.py:258 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" month." msgstr "이 필드는 고유(unique)한 \"{date_field}\" 월을 갖습니다. " -#: validators.py:273 +#: validators.py:271 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" year." msgstr "이 필드는 고유(unique)한 \"{date_field}\" 년을 갖습니다. " -#: versioning.py:42 +#: versioning.py:40 msgid "Invalid version in \"Accept\" header." msgstr "\"Accept\" 헤더(header)의 버전이 유효하지 않습니다." -#: versioning.py:73 +#: versioning.py:71 msgid "Invalid version in URL path." msgstr "URL path의 버전이 유효하지 않습니다." -#: versioning.py:115 +#: versioning.py:116 msgid "Invalid version in URL path. Does not match any version namespace." msgstr "URL 경로에 유효하지 않은 버전이 있습니다. 버전 네임 스페이스와 일치하지 않습니다." -#: versioning.py:147 +#: versioning.py:148 msgid "Invalid version in hostname." msgstr "hostname내 버전이 유효하지 않습니다." -#: versioning.py:169 +#: versioning.py:170 msgid "Invalid version in query parameter." msgstr "쿼리 파라메터내 버전이 유효하지 않습니다." - -#: views.py:88 -msgid "Permission denied." -msgstr "사용 권한이 거부되었습니다." diff --git a/rest_framework/locale/lt/LC_MESSAGES/django.mo b/rest_framework/locale/lt/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..b43a6a8a4dfe2dd8777393c186c605423e76089c GIT binary patch literal 5056 zcmcInTWlmp741L*#6VcWb9v>)u$wjUj2~G-GP~aFn^^3_^4cpNLZ)WAJX7wTs!mn4 z?ZL75T7e<~0wr2LF%nY5O02~40UxY{G$SE|_&`JgK9KkW34tKLd~j}cduF`06-!H6 z?m69E_ujhiy8g?f555xNdJ^}?aQg?M=mhY$Z@~|)pT9MV2>1)&hk<_vGTrOIj{*-p z7)2G}IB*>JCE(kE-vFKkeg}9F`1=wMKNLlu!~0i(r-82muLJ)M{4DVF+lu|yfi=AU z49MUA1-t}&0>VED^uR}f-v_cjx61FoF7Y40Blv#k9Z~dd;L|{;9GwR;-}Asv0KW_z z0e%gLzvu>jJ_!6a@I$~KmH0~_@ADdv?fwstfR8*JMH9dYAlthHoC5w32$Q2f01pHI z1O!X;I`9a5`(NNuypO)C*k=}a4DSN?ao|fp*8f%DH1Kyom=rw#W4;J{82A-nqr_hU zuj2i&M+*NL-~!%n0iOp(?gzYcs1_+udJ_Zwgp`0oK(_afK&T%5707=5Cy?bogdngVj{rHIXMntq1dah; zF7Ymq?fn~&^Wp6Kig;}TS-)=rp;~ksh|~=+0)&hG#lGbIm=+?!#dflo4tVEguWMx=SjLw@G?!X4py zCw`FwvjJ{xwu9*l+JR$IZDcrHl75nid4naXc^Uz)#wa4X;-Bs zX|1tj8jajq8S_FxsI-?&tb^am7jm^@QRnUYuC?5^r1q*IyfT^^VBlAgI$D!f1}!pc zR#nW~oHKbEhi?w_Zn;C?4m(Nb=}e;`GfyokVrfBarSLM2&f}L_0s^hkO+Z3NQ zZM4PuQY;&)Ez+ed6%FY&seGs6y&4@@j%q5;`~l$~^2Uqw-~!fKCY4JCdtXdl!o6&T z94KaxKSN@XMaxPe;_NRNn@WK&Z?u(ON~Lc4)+RDjSkds(y8ZaHxz{gm#EVqUC8uyR zWRPV~YeK#wqeTki3l#zxlB4fNaP(PI>D*p?2+M#EYWGWQ)TMcIlp01m<-9_oA~93x z*|c#gN(T?QMsB+XJm*-WRwqOG1lxy&&CabJ=Vjp2B;pvIz+#o zNw_wKjxpCzJ@?cMU4dV@9w1;RO(>F`bk%59LthI~B=)U#rh;S8YckP<+|SESbXlZa zflz>Z2`aoAU6#IOVjA6OhX-`3(5BMVtZ{$10_~O!d{m9*gmY`g#?gGiOKZp>-?GO0 zlu567%T6u==8d6LSl)P{)z3OS44T-`_qOPSZR>DJDs-}gX=qXBDT*X8I+?y{)=_(7RMk8}qEAw(yF=vH4ca5eerza~@_YTv_gF!Yk8m5CMMR_)~cT6s%5#(OcQa?zk(w2mA?L!slC5XAS1#K6RDpV8@W7t z`NF^xQ`O0la|Si1p*x&hBQMwe1RAo^CqgfC($6d|T&z4ZpkrN@rL9~*8O6xi8a-22 zzHdp5Qa>`6;%G@L7f~**Mmh_xZszz2G<#l|Ii~3dO-<6w3{BC|qg1|6(kVEVUVM>? z^+`HOQ&VH~98FSfn}|-$&@?lZGEUAsJ9Z!$Q;-pO={B`sZ4_uGoI+hDIJeNSx<6U%B&M7>l%WKEibWMAtr7+LZ9e2=F?M*B8RV==dRy)8 z%>f}Qe|ra)2-W?T$|3$t&Vf+NDiIB}VjRV}X-nNf2}*}Gm3W1oA~O-xKmkf<1`f)5 zccDw}z*7z#LL+B-TfTb}g0JOCZoMcbkDWSE2j*%tPd3<;Gl!|t6_Lj#QRuSBV%@z# zs<%bGE!DeI()8}^Igq?L(zoZ7H%0m!W}qYl*~@W^E>z?|Eb^ujIh>>R9$z?e9`S)o z5amSFQ<*Bmo&JFG$}wgj=it0MCzyc*%B+&TErFw=P^f!*521*o!}*dYd<5lI!A5lW z-ra$@Llcct?Yc=3_yY>s<+tte<_!c5>Llc3j0xKz5(r3LP}*s76rk4jw6e>~FzOx= zY|?HSLlY0`S-OzqMgAkr%dyAH#QE-x@!%fqySGuW30agoywtlhPG#BhVk4zy zI5jcn6f;wphjvyGAK=5}Oft*@%Xc=hD>!0t9%@7ca`*07+@|_1F3WKyW(tjHUL;U! zu%^i6JW}PD-}_Ar4HaXRiIJQ`b5+r&QW+w^y_vVLICMdN4dOk5jpN8gi)AkqTnkvP z$DKe^%vU>&p^OKJv0#&{~39A*GON(3H`6j7H-LgV;R={(ss#pE)?| z5_U&, 2019 +msgid "" +msgstr "" +"Project-Id-Version: Django REST framework\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-10-13 21:45+0200\n" +"PO-Revision-Date: 2020-10-13 19:45+0000\n" +"Last-Translator: Xavier Ordoquy \n" +"Language-Team: Lithuanian (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/lt/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: lt\n" +"Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);\n" + +#: authentication.py:70 +msgid "Invalid basic header. No credentials provided." +msgstr "" + +#: authentication.py:73 +msgid "Invalid basic header. Credentials string should not contain spaces." +msgstr "" + +#: authentication.py:83 +msgid "Invalid basic header. Credentials not correctly base64 encoded." +msgstr "" + +#: authentication.py:101 +msgid "Invalid username/password." +msgstr "" + +#: authentication.py:104 authentication.py:206 +msgid "User inactive or deleted." +msgstr "Vartotojas neaktyvus arba pašalintas." + +#: authentication.py:184 +msgid "Invalid token header. No credentials provided." +msgstr "" + +#: authentication.py:187 +msgid "Invalid token header. Token string should not contain spaces." +msgstr "" + +#: authentication.py:193 +msgid "" +"Invalid token header. Token string should not contain invalid characters." +msgstr "" + +#: authentication.py:203 +msgid "Invalid token." +msgstr "" + +#: authtoken/apps.py:7 +msgid "Auth Token" +msgstr "" + +#: authtoken/models.py:13 +msgid "Key" +msgstr "Raktas" + +#: authtoken/models.py:16 +msgid "User" +msgstr "Vartotojas" + +#: authtoken/models.py:18 +msgid "Created" +msgstr "Sukurta" + +#: authtoken/models.py:27 authtoken/serializers.py:19 +msgid "Token" +msgstr "" + +#: authtoken/models.py:28 +msgid "Tokens" +msgstr "" + +#: authtoken/serializers.py:9 +msgid "Username" +msgstr "Vartotojo vardas" + +#: authtoken/serializers.py:13 +msgid "Password" +msgstr "Slaptažodis" + +#: authtoken/serializers.py:35 +msgid "Unable to log in with provided credentials." +msgstr "" + +#: authtoken/serializers.py:38 +msgid "Must include \"username\" and \"password\"." +msgstr "" + +#: exceptions.py:102 +msgid "A server error occurred." +msgstr "Įvyko serverio klaida." + +#: exceptions.py:142 +msgid "Invalid input." +msgstr "" + +#: exceptions.py:161 +msgid "Malformed request." +msgstr "Netinkamai suformuota užklausa." + +#: exceptions.py:167 +msgid "Incorrect authentication credentials." +msgstr "Neteisingi autentifikacijos duomenys." + +#: exceptions.py:173 +msgid "Authentication credentials were not provided." +msgstr "Autentifikacijos duomenys nesuteikti." + +#: exceptions.py:179 +msgid "You do not have permission to perform this action." +msgstr "" + +#: exceptions.py:185 +msgid "Not found." +msgstr "Nerasta." + +#: exceptions.py:191 +#, python-brace-format +msgid "Method \"{method}\" not allowed." +msgstr "Metodas \"{method}\" yra neleidžiamas." + +#: exceptions.py:202 +msgid "Could not satisfy the request Accept header." +msgstr "Nepavyko patenkinti užklausos Accept antraštės." + +#: exceptions.py:212 +#, python-brace-format +msgid "Unsupported media type \"{media_type}\" in request." +msgstr "Nepalaikomas duomenų formatas \"{media_type}\" užklausoje." + +#: exceptions.py:223 +msgid "Request was throttled." +msgstr "Užklausa pristabdyta." + +#: exceptions.py:224 +#, python-brace-format +msgid "Expected available in {wait} second." +msgstr "" + +#: exceptions.py:225 +#, python-brace-format +msgid "Expected available in {wait} seconds." +msgstr "" + +#: fields.py:316 relations.py:245 relations.py:279 validators.py:90 +#: validators.py:183 +msgid "This field is required." +msgstr "Šis laukas yra privalomas." + +#: fields.py:317 +msgid "This field may not be null." +msgstr "Šis laukas negali būti nustatytas kaip null." + +#: fields.py:701 +msgid "Must be a valid boolean." +msgstr "" + +#: fields.py:766 +msgid "Not a valid string." +msgstr "" + +#: fields.py:767 +msgid "This field may not be blank." +msgstr "Šis laukas negali būti tuščias." + +#: fields.py:768 fields.py:1881 +#, python-brace-format +msgid "Ensure this field has no more than {max_length} characters." +msgstr "Patikrinkite, ar šis laukas turi ne daugiau nei {max_length} simbolių." + +#: fields.py:769 +#, python-brace-format +msgid "Ensure this field has at least {min_length} characters." +msgstr "Patikrinkite, ar šis laukas turi ne mažiau nei {min_length} simbolių." + +#: fields.py:816 +msgid "Enter a valid email address." +msgstr "Įveskite tinkamą el. pašto adresą." + +#: fields.py:827 +msgid "This value does not match the required pattern." +msgstr "Ši vertė neatitinka nustatyto šablono." + +#: fields.py:838 +msgid "" +"Enter a valid \"slug\" consisting of letters, numbers, underscores or " +"hyphens." +msgstr "Įveskite tinkamą \"slug\" tekstą, turintį tik raidžių, skaičių, pabraukimų arba brūkšnelių." + +#: fields.py:839 +msgid "" +"Enter a valid \"slug\" consisting of Unicode letters, numbers, underscores, " +"or hyphens." +msgstr "" + +#: fields.py:854 +msgid "Enter a valid URL." +msgstr "Įveskite tinkamą URL adresą." + +#: fields.py:867 +msgid "Must be a valid UUID." +msgstr "" + +#: fields.py:903 +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Įveskite tinkamą IPv4 arba IPv6 adresą." + +#: fields.py:931 +msgid "A valid integer is required." +msgstr "Reikiama tinkama integer tipo reikšmė." + +#: fields.py:932 fields.py:969 fields.py:1005 fields.py:1366 +#, python-brace-format +msgid "Ensure this value is less than or equal to {max_value}." +msgstr "Patikrinkite, ar ši reikšmė yra mažesnė arba lygi {max_value}." + +#: fields.py:933 fields.py:970 fields.py:1006 fields.py:1367 +#, python-brace-format +msgid "Ensure this value is greater than or equal to {min_value}." +msgstr "Patikrinkite, ar ši reikšmė yra didesnė arba lygi {min_value}." + +#: fields.py:934 fields.py:971 fields.py:1010 +msgid "String value too large." +msgstr "String tipo reikšmė per ilga." + +#: fields.py:968 fields.py:1004 +msgid "A valid number is required." +msgstr "Reikiamas tinkamas skaičius." + +#: fields.py:1007 +#, python-brace-format +msgid "Ensure that there are no more than {max_digits} digits in total." +msgstr "Patikrinkite, ar nėra daugiau nei {max_digits} skaitmenų." + +#: fields.py:1008 +#, python-brace-format +msgid "" +"Ensure that there are no more than {max_decimal_places} decimal places." +msgstr "Patikrinkite, ar nėra daugiau nei {max_decimal_places} skaitmenų po kablelio." + +#: fields.py:1009 +#, python-brace-format +msgid "" +"Ensure that there are no more than {max_whole_digits} digits before the " +"decimal point." +msgstr "Patikrinkite, ar nėra daugiau nei {max_whole_digits} skaitmenų priešais kablelį." + +#: fields.py:1148 +#, python-brace-format +msgid "Datetime has wrong format. Use one of these formats instead: {format}." +msgstr "Datetime tipo reikšmė yra netinkamo formato. Naudokite vieną iš šių formatų: {format}." + +#: fields.py:1149 +msgid "Expected a datetime but got a date." +msgstr "Tikėtasi datetime, gauta date tipo reikšmė." + +#: fields.py:1150 +#, python-brace-format +msgid "Invalid datetime for the timezone \"{timezone}\"." +msgstr "" + +#: fields.py:1151 +msgid "Datetime value out of range." +msgstr "" + +#: fields.py:1236 +#, python-brace-format +msgid "Date has wrong format. Use one of these formats instead: {format}." +msgstr "Date tipo reikšmė yra netinkamo formato. Naudokite vieną iš šių formatų: {format}." + +#: fields.py:1237 +msgid "Expected a date but got a datetime." +msgstr "Tikėtasi date, gauta datetime tipo reikšmė." + +#: fields.py:1303 +#, python-brace-format +msgid "Time has wrong format. Use one of these formats instead: {format}." +msgstr "Time tipo reikšmė yra netinkamo formato. Naudokite vieną iš šių formatų: {format}." + +#: fields.py:1365 +#, python-brace-format +msgid "Duration has wrong format. Use one of these formats instead: {format}." +msgstr "Duration tipo reikšmė yra netinkamo formato. Naudokite vieną iš šių formatų: {format}." + +#: fields.py:1399 fields.py:1456 +#, python-brace-format +msgid "\"{input}\" is not a valid choice." +msgstr "\"{input}\" nėra tinkamas pasirinkimas." + +#: fields.py:1402 +#, python-brace-format +msgid "More than {count} items..." +msgstr "" + +#: fields.py:1457 fields.py:1603 relations.py:485 serializers.py:570 +#, python-brace-format +msgid "Expected a list of items but got type \"{input_type}\"." +msgstr "" + +#: fields.py:1458 +msgid "This selection may not be empty." +msgstr "Šis pasirinkimas negali būti tuščias." + +#: fields.py:1495 +#, python-brace-format +msgid "\"{input}\" is not a valid path choice." +msgstr "" + +#: fields.py:1514 +msgid "No file was submitted." +msgstr "" + +#: fields.py:1515 +msgid "" +"The submitted data was not a file. Check the encoding type on the form." +msgstr "" + +#: fields.py:1516 +msgid "No filename could be determined." +msgstr "" + +#: fields.py:1517 +msgid "The submitted file is empty." +msgstr "" + +#: fields.py:1518 +#, python-brace-format +msgid "" +"Ensure this filename has at most {max_length} characters (it has {length})." +msgstr "" + +#: fields.py:1566 +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" + +#: fields.py:1604 relations.py:486 serializers.py:571 +msgid "This list may not be empty." +msgstr "" + +#: fields.py:1605 +#, python-brace-format +msgid "Ensure this field has at least {min_length} elements." +msgstr "" + +#: fields.py:1606 +#, python-brace-format +msgid "Ensure this field has no more than {max_length} elements." +msgstr "" + +#: fields.py:1682 +#, python-brace-format +msgid "Expected a dictionary of items but got type \"{input_type}\"." +msgstr "" + +#: fields.py:1683 +msgid "This dictionary may not be empty." +msgstr "" + +#: fields.py:1755 +msgid "Value must be valid JSON." +msgstr "" + +#: filters.py:49 templates/rest_framework/filters/search.html:2 +msgid "Search" +msgstr "" + +#: filters.py:50 +msgid "A search term." +msgstr "" + +#: filters.py:180 templates/rest_framework/filters/ordering.html:3 +msgid "Ordering" +msgstr "" + +#: filters.py:181 +msgid "Which field to use when ordering the results." +msgstr "" + +#: filters.py:287 +msgid "ascending" +msgstr "" + +#: filters.py:288 +msgid "descending" +msgstr "" + +#: pagination.py:174 +msgid "A page number within the paginated result set." +msgstr "" + +#: pagination.py:179 pagination.py:372 pagination.py:590 +msgid "Number of results to return per page." +msgstr "" + +#: pagination.py:189 +msgid "Invalid page." +msgstr "Netinkamas puslapis." + +#: pagination.py:374 +msgid "The initial index from which to return the results." +msgstr "" + +#: pagination.py:581 +msgid "The pagination cursor value." +msgstr "" + +#: pagination.py:583 +msgid "Invalid cursor" +msgstr "" + +#: relations.py:246 +#, python-brace-format +msgid "Invalid pk \"{pk_value}\" - object does not exist." +msgstr "" + +#: relations.py:247 +#, python-brace-format +msgid "Incorrect type. Expected pk value, received {data_type}." +msgstr "" + +#: relations.py:280 +msgid "Invalid hyperlink - No URL match." +msgstr "" + +#: relations.py:281 +msgid "Invalid hyperlink - Incorrect URL match." +msgstr "" + +#: relations.py:282 +msgid "Invalid hyperlink - Object does not exist." +msgstr "" + +#: relations.py:283 +#, python-brace-format +msgid "Incorrect type. Expected URL string, received {data_type}." +msgstr "" + +#: relations.py:448 +#, python-brace-format +msgid "Object with {slug_name}={value} does not exist." +msgstr "" + +#: relations.py:449 +msgid "Invalid value." +msgstr "" + +#: schemas/utils.py:32 +msgid "unique integer value" +msgstr "" + +#: schemas/utils.py:34 +msgid "UUID string" +msgstr "" + +#: schemas/utils.py:36 +msgid "unique value" +msgstr "" + +#: schemas/utils.py:38 +#, python-brace-format +msgid "A {value_type} identifying this {name}." +msgstr "" + +#: serializers.py:337 +#, python-brace-format +msgid "Invalid data. Expected a dictionary, but got {datatype}." +msgstr "" + +#: templates/rest_framework/admin.html:116 +#: templates/rest_framework/base.html:136 +msgid "Extra Actions" +msgstr "" + +#: templates/rest_framework/admin.html:130 +#: templates/rest_framework/base.html:150 +msgid "Filters" +msgstr "" + +#: templates/rest_framework/base.html:37 +msgid "navbar" +msgstr "" + +#: templates/rest_framework/base.html:75 +msgid "content" +msgstr "" + +#: templates/rest_framework/base.html:78 +msgid "request form" +msgstr "" + +#: templates/rest_framework/base.html:157 +msgid "main content" +msgstr "" + +#: templates/rest_framework/base.html:173 +msgid "request info" +msgstr "" + +#: templates/rest_framework/base.html:177 +msgid "response info" +msgstr "" + +#: templates/rest_framework/horizontal/radio.html:4 +#: templates/rest_framework/inline/radio.html:3 +#: templates/rest_framework/vertical/radio.html:3 +msgid "None" +msgstr "" + +#: templates/rest_framework/horizontal/select_multiple.html:4 +#: templates/rest_framework/inline/select_multiple.html:3 +#: templates/rest_framework/vertical/select_multiple.html:3 +msgid "No items to select." +msgstr "" + +#: validators.py:39 +msgid "This field must be unique." +msgstr "" + +#: validators.py:89 +#, python-brace-format +msgid "The fields {field_names} must make a unique set." +msgstr "" + +#: validators.py:171 +#, python-brace-format +msgid "Surrogate characters are not allowed: U+{code_point:X}." +msgstr "" + +#: validators.py:243 +#, python-brace-format +msgid "This field must be unique for the \"{date_field}\" date." +msgstr "" + +#: validators.py:258 +#, python-brace-format +msgid "This field must be unique for the \"{date_field}\" month." +msgstr "" + +#: validators.py:271 +#, python-brace-format +msgid "This field must be unique for the \"{date_field}\" year." +msgstr "" + +#: versioning.py:40 +msgid "Invalid version in \"Accept\" header." +msgstr "" + +#: versioning.py:71 +msgid "Invalid version in URL path." +msgstr "" + +#: versioning.py:116 +msgid "Invalid version in URL path. Does not match any version namespace." +msgstr "" + +#: versioning.py:148 +msgid "Invalid version in hostname." +msgstr "" + +#: versioning.py:170 +msgid "Invalid version in query parameter." +msgstr "" diff --git a/rest_framework/locale/lv/LC_MESSAGES/django.mo b/rest_framework/locale/lv/LC_MESSAGES/django.mo index b4accc34ef160c63fdff67361e4f0154487a6ba6..7ee7172407f2e4b860d57c55ce1d73a04f42f0a7 100644 GIT binary patch delta 2243 zcmYk-S!`5Q9LMp0ZKoTxKnpEn3%x~aJJKDdc7wK5C|#g*14=;{mzc7Rw6zpX9HJn> zST#;ad?9YdAmEmXA^Knu?J1pncMBzmA&O`=}YsqL%W8-wrSK zKJUk5?oXmt;Bj1m)2RL~Vkut1Jp2`74wY1%&c#wp!6szYtre@V8`(yC!uL3;gK1Qn z%wRrVz-s&ywWYtK2HZ^N`g|DGK8(tl=W|*AIx6S6;qEo69bDp#cq{6`{pjFH)PT;R zR$vYTSg_O^NHMOWU4}I{h{N~{YGOZN5U-&obZaT=uN&!1rxsTt`DjC^71)E9lg##E z5$y_6UpcZF^}TTn;WRGCOQ@O7qW1U~RKJBhtbTj3ABS-lUW`%cqmsb}ZN?E)F1&?Z z_%mu{YFUPLxDU7KbL>Q|=O*aF2QZFz;h)H2S^=X{4pgC5ZVPIQp2RH}dzVTNm48rs z+0D~;V?QeEk765sh(mZ22e6Oj(D%+Fd1N&Tzo;-Z-puk>aXM#gG8aRW}Fw&Y{f-v5N!+eI817RiFh*es0d zZwSlr2s%3dGgP!>pCgmA>lnZcZt{+>g{YYnBJUdOK&{jOx&uMI;igbObPTm+uVM?% zp`KgDC`kvaL$!OcfZw-+RP^8}Y{M^bEiPamG~!Nla6jsc&!P74JSum-L(RB?!>uH% zL+x!VY9KG5a^?yusaKSF{f026J?W;xAZ^6=7^cxai|X)gOu}SBd(N@`uXIr3G`U4@ zIXyo}G!fbkl?Fm9tHJCg_7HUhC1$+D+!E%hMA}7YwDW~QyJvX~YV;1FvXj_AXazVV zZVqh6ZbC&{rJ`g_cWY+%VYXjy#&Yfd|4SQ$CcCWmQ7q+i7fqoF`)!g(KcxBR8l?MYdu#Tn~g+~d&m1X zs|+9U+ac6RQc?c!3UEu8uc##23FQ$7#lp(Sd}6)?sOY%Om#tJ<{Kjp#o=A(INnakn znqHX*Wh4a>_1T4i_#?S>iJ9Eee_J2efBYr?ClDVaTy@rjDTvB;tE z1Cfd7SfjHeGCBJ2nA1DaFnTcYM}Bise0Q)aaV|I) XNK6;yq{iPVX;1uB@=|jALg>W57r@%^ delta 2558 zcmZYAU2Icj9LMoz>)v31SYR8Ijl)13Fa`t0aIlRH*ch9*!2o#?Y}d1Tq_o)60SRg~ zh)O^t*2RQiQ1L>;jY$avyb|l%1sA?0MiU|tF(k%B??f*A{!S0k#3%iq&-0v~KJVx0 zrNIw}($|AUV}>+B%pm#$#vH?EO1O~TE;D8pzJnHif)C)y)mT_=%vM~3EqEGN;@8-RlO`C`iaSu> zk6}Mv!`WCp(U>5%qdGWL=xUx*Rp)c2q+VT!Ck?1HZ>L zSaqKG+xNPpFaJ@yh{*vxIUDvVYA0YG!ueg#u%2R0GviG84N|duRkTpcBZ)yr1SekIYr9 z!QYVIn(+)vd!Y{1&>*Uz7jYAw#9ep;2eF-6AHh?oJ#!s5;0&g*1*6!GXK|~(NA0n6 zGp(*y2E+IT&cOxj5LU$upf*c{i>CAlYVESP5pSYix1|h|H_kkdn&MY+F1~>s_z`yE z-?#hc|$ff_(RK8j=5jlUq< z!!+=U@DtOC8qhFmfCsUL_RSeG>$q_RwMP0@Yd06Q=9^G!wiD^RIf$z8O>Dr+XyGm7 zV@j!nNihvrjD4t?8AJ_aH3qLwO$nwf8X|H4wrwey+(ab)H)F9o=bXeG2xnxcD2 zqtkPmZY4E#FD>;m&B&5_X%*K#g8q5wF|HekVnQ=YbKbepsrA?Eqof&F=jHPMSi8tS zLG%#X51JVzEfwd8_aD)XtcI7?avdUui6F6_P|~JUT27RCx%?}y?Bld=2K<{kh}QUd z3l|YPi9%w8(3)zxHN{E+qLR=WZzq%{6WaA5B0^}Im9!jsyY3~MOc9aZ!$rGOhX>2= zt?x<<6Uzv_t6FRJkazHC11Yr=JG|V#m(^q|h}r(F-B?0s?UlL+&K)o5pOLiLJLNd^ zy!5blCx0I3MlYcaq@+{OOLd2x`2Nwh!{r{)7Z0TK_jh6+A%k5ai8gXJNJLzWQ6K56&2khiN$90`V+=|$7$Br~+P6S&@ zHjjq)IjQW`V0~a}Xm~g=8c(U|h~tLBF+Fs1+K-c(S{5!|v2by-)wHCwX=&zKMPD=k%2I+Ae*Mrm|<} dWCGJd*4{)sjwE)z|;%uxMn{{V#IEJFYQ diff --git a/rest_framework/locale/lv/LC_MESSAGES/django.po b/rest_framework/locale/lv/LC_MESSAGES/django.po index 2bc978866..876f6f367 100644 --- a/rest_framework/locale/lv/LC_MESSAGES/django.po +++ b/rest_framework/locale/lv/LC_MESSAGES/django.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: Django REST framework\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-07-12 16:13+0100\n" -"PO-Revision-Date: 2017-08-05 12:13+0000\n" -"Last-Translator: peterisb \n" +"POT-Creation-Date: 2020-10-13 21:45+0200\n" +"PO-Revision-Date: 2020-10-13 19:45+0000\n" +"Last-Translator: Xavier Ordoquy \n" "Language-Team: Latvian (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/lv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,40 +18,40 @@ msgstr "" "Language: lv\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);\n" -#: authentication.py:73 +#: authentication.py:70 msgid "Invalid basic header. No credentials provided." msgstr "Nederīgs pieprasījuma sākums. Akreditācijas parametri nav nodrošināti." -#: authentication.py:76 +#: authentication.py:73 msgid "Invalid basic header. Credentials string should not contain spaces." msgstr "Nederīgs pieprasījuma sākums. Akreditācijas parametriem jābūt bez atstarpēm." -#: authentication.py:82 +#: authentication.py:83 msgid "Invalid basic header. Credentials not correctly base64 encoded." msgstr "Nederīgs pieprasījuma sākums. Akreditācijas parametri nav korekti base64 kodēti." -#: authentication.py:99 +#: authentication.py:101 msgid "Invalid username/password." msgstr "Nederīgs lietotājvārds/parole." -#: authentication.py:102 authentication.py:198 +#: authentication.py:104 authentication.py:206 msgid "User inactive or deleted." msgstr "Lietotājs neaktīvs vai dzēsts." -#: authentication.py:176 +#: authentication.py:184 msgid "Invalid token header. No credentials provided." msgstr "Nederīgs pilnvaras sākums. Akreditācijas parametri nav nodrošināti." -#: authentication.py:179 +#: authentication.py:187 msgid "Invalid token header. Token string should not contain spaces." msgstr "Nederīgs pilnvaras sākums. Pilnvaras parametros nevar būt tukšumi." -#: authentication.py:185 +#: authentication.py:193 msgid "" "Invalid token header. Token string should not contain invalid characters." msgstr "Nederīgs pilnvaras sākums. Pilnvaras parametros nevar būt nederīgas zīmes." -#: authentication.py:195 +#: authentication.py:203 msgid "Invalid token." msgstr "Nederīga pilnavara." @@ -59,382 +59,515 @@ msgstr "Nederīga pilnavara." msgid "Auth Token" msgstr "Autorizācijas pilnvara" -#: authtoken/models.py:15 +#: authtoken/models.py:13 msgid "Key" msgstr "Atslēga" -#: authtoken/models.py:18 +#: authtoken/models.py:16 msgid "User" msgstr "Lietotājs" -#: authtoken/models.py:20 +#: authtoken/models.py:18 msgid "Created" msgstr "Izveidots" -#: authtoken/models.py:29 +#: authtoken/models.py:27 authtoken/serializers.py:19 msgid "Token" msgstr "Pilnvara" -#: authtoken/models.py:30 +#: authtoken/models.py:28 msgid "Tokens" msgstr "Pilnvaras" -#: authtoken/serializers.py:8 +#: authtoken/serializers.py:9 msgid "Username" msgstr "Lietotājvārds" -#: authtoken/serializers.py:9 +#: authtoken/serializers.py:13 msgid "Password" msgstr "Parole" -#: authtoken/serializers.py:20 -msgid "User account is disabled." -msgstr "Lietotāja konts ir atslēgts." - -#: authtoken/serializers.py:23 +#: authtoken/serializers.py:35 msgid "Unable to log in with provided credentials." msgstr "Neiespējami pieteikties sistēmā ar nodrošinātajiem akreditācijas datiem." -#: authtoken/serializers.py:26 +#: authtoken/serializers.py:38 msgid "Must include \"username\" and \"password\"." msgstr "Jābūt iekļautam \"username\" un \"password\"." -#: exceptions.py:49 +#: exceptions.py:102 msgid "A server error occurred." msgstr "Notikusi servera kļūda." -#: exceptions.py:84 +#: exceptions.py:142 +msgid "Invalid input." +msgstr "" + +#: exceptions.py:161 msgid "Malformed request." msgstr "Nenoformēts pieprasījums." -#: exceptions.py:89 +#: exceptions.py:167 msgid "Incorrect authentication credentials." msgstr "Nekorekti autentifikācijas parametri." -#: exceptions.py:94 +#: exceptions.py:173 msgid "Authentication credentials were not provided." msgstr "Netika nodrošināti autorizācijas parametri." -#: exceptions.py:99 +#: exceptions.py:179 msgid "You do not have permission to perform this action." msgstr "Tev nav tiesību veikt šo darbību." -#: exceptions.py:104 views.py:81 +#: exceptions.py:185 msgid "Not found." msgstr "Nav atrasts." -#: exceptions.py:109 +#: exceptions.py:191 +#, python-brace-format msgid "Method \"{method}\" not allowed." msgstr "Metode \"{method}\" nav atļauta." -#: exceptions.py:120 +#: exceptions.py:202 msgid "Could not satisfy the request Accept header." msgstr "Nevarēja apmierināt pieprasījuma Accept header." -#: exceptions.py:132 +#: exceptions.py:212 +#, python-brace-format msgid "Unsupported media type \"{media_type}\" in request." msgstr "Pieprasījumā neatbalstīts datu tips \"{media_type}\" ." -#: exceptions.py:145 +#: exceptions.py:223 msgid "Request was throttled." msgstr "Pieprasījums tika apturēts." -#: fields.py:269 relations.py:206 relations.py:239 validators.py:98 -#: validators.py:181 +#: exceptions.py:224 +#, python-brace-format +msgid "Expected available in {wait} second." +msgstr "" + +#: exceptions.py:225 +#, python-brace-format +msgid "Expected available in {wait} seconds." +msgstr "" + +#: fields.py:316 relations.py:245 relations.py:279 validators.py:90 +#: validators.py:183 msgid "This field is required." msgstr "Šis lauks ir obligāts." -#: fields.py:270 +#: fields.py:317 msgid "This field may not be null." msgstr "Šis lauks nevar būt null." -#: fields.py:608 fields.py:639 -msgid "\"{input}\" is not a valid boolean." -msgstr "\"{input}\" ir nederīga loģiskā vērtība." +#: fields.py:701 +msgid "Must be a valid boolean." +msgstr "" -#: fields.py:674 +#: fields.py:766 +msgid "Not a valid string." +msgstr "" + +#: fields.py:767 msgid "This field may not be blank." msgstr "Šis lauks nevar būt tukšs." -#: fields.py:675 fields.py:1675 +#: fields.py:768 fields.py:1881 +#, python-brace-format msgid "Ensure this field has no more than {max_length} characters." msgstr "Pārliecinies, ka laukā nav vairāk par {max_length} zīmēm." -#: fields.py:676 +#: fields.py:769 +#, python-brace-format msgid "Ensure this field has at least {min_length} characters." msgstr "Pārliecinies, ka laukā ir vismaz {min_length} zīmes." -#: fields.py:713 +#: fields.py:816 msgid "Enter a valid email address." msgstr "Ievadi derīgu e-pasta adresi." -#: fields.py:724 +#: fields.py:827 msgid "This value does not match the required pattern." msgstr "Šī vērtība neatbilst prasītajam pierakstam." -#: fields.py:735 +#: fields.py:838 msgid "" "Enter a valid \"slug\" consisting of letters, numbers, underscores or " "hyphens." msgstr "Ievadi derīgu \"slug\" vērtību, kura sastāv no burtiem, skaitļiem, apakš-svītras vai defises." -#: fields.py:747 +#: fields.py:839 +msgid "" +"Enter a valid \"slug\" consisting of Unicode letters, numbers, underscores, " +"or hyphens." +msgstr "" + +#: fields.py:854 msgid "Enter a valid URL." msgstr "Ievadi derīgu URL." -#: fields.py:760 -msgid "\"{value}\" is not a valid UUID." -msgstr "\"{value}\" ir nedrīgs UUID." +#: fields.py:867 +msgid "Must be a valid UUID." +msgstr "" -#: fields.py:796 +#: fields.py:903 msgid "Enter a valid IPv4 or IPv6 address." msgstr "Ievadi derīgu IPv4 vai IPv6 adresi." -#: fields.py:821 +#: fields.py:931 msgid "A valid integer is required." msgstr "Prasīta ir derīga skaitliska vērtība." -#: fields.py:822 fields.py:857 fields.py:891 +#: fields.py:932 fields.py:969 fields.py:1005 fields.py:1366 +#, python-brace-format msgid "Ensure this value is less than or equal to {max_value}." msgstr "Pārliecinies, ka šī vērtība ir mazāka vai vienāda ar {max_value}." -#: fields.py:823 fields.py:858 fields.py:892 +#: fields.py:933 fields.py:970 fields.py:1006 fields.py:1367 +#, python-brace-format msgid "Ensure this value is greater than or equal to {min_value}." msgstr "Pārliecinies, ka šī vērtība ir lielāka vai vienāda ar {min_value}." -#: fields.py:824 fields.py:859 fields.py:896 +#: fields.py:934 fields.py:971 fields.py:1010 msgid "String value too large." msgstr "Teksta vērtība pārāk liela." -#: fields.py:856 fields.py:890 +#: fields.py:968 fields.py:1004 msgid "A valid number is required." msgstr "Derīgs skaitlis ir prasīts." -#: fields.py:893 +#: fields.py:1007 +#, python-brace-format msgid "Ensure that there are no more than {max_digits} digits in total." msgstr "Pārliecinies, ka nav vairāk par {max_digits} zīmēm kopā." -#: fields.py:894 +#: fields.py:1008 +#, python-brace-format msgid "" "Ensure that there are no more than {max_decimal_places} decimal places." msgstr "Pārliecinies, ka nav vairāk par {max_decimal_places} decimālajām zīmēm." -#: fields.py:895 +#: fields.py:1009 +#, python-brace-format msgid "" "Ensure that there are no more than {max_whole_digits} digits before the " "decimal point." msgstr "Pārliecinies, ka nav vairāk par {max_whole_digits} zīmēm pirms komata." -#: fields.py:1025 +#: fields.py:1148 +#, python-brace-format msgid "Datetime has wrong format. Use one of these formats instead: {format}." msgstr "Datuma un laika formāts ir nepareizs. Lieto vienu no norādītajiem formātiem: \"{format}.\"" -#: fields.py:1026 +#: fields.py:1149 msgid "Expected a datetime but got a date." msgstr "Tika gaidīts datums un laiks, saņemts datums.." -#: fields.py:1103 +#: fields.py:1150 +#, python-brace-format +msgid "Invalid datetime for the timezone \"{timezone}\"." +msgstr "" + +#: fields.py:1151 +msgid "Datetime value out of range." +msgstr "" + +#: fields.py:1236 +#, python-brace-format msgid "Date has wrong format. Use one of these formats instead: {format}." msgstr "Datumam ir nepareizs formāts. Lieto vienu no norādītajiem formātiem: {format}." -#: fields.py:1104 +#: fields.py:1237 msgid "Expected a date but got a datetime." msgstr "Tika gaidīts datums, saņemts datums un laiks." -#: fields.py:1170 +#: fields.py:1303 +#, python-brace-format msgid "Time has wrong format. Use one of these formats instead: {format}." msgstr "Laikam ir nepareizs formāts. Lieto vienu no norādītajiem formātiem: {format}." -#: fields.py:1232 +#: fields.py:1365 +#, python-brace-format msgid "Duration has wrong format. Use one of these formats instead: {format}." msgstr "Ilgumam ir nepreizs formāts. Lieto vienu no norādītajiem formātiem: {format}." -#: fields.py:1251 fields.py:1300 +#: fields.py:1399 fields.py:1456 +#, python-brace-format msgid "\"{input}\" is not a valid choice." msgstr "\"{input}\" ir nederīga izvēle." -#: fields.py:1254 relations.py:71 relations.py:441 +#: fields.py:1402 +#, python-brace-format msgid "More than {count} items..." msgstr "Vairāk par {count} ierakstiem..." -#: fields.py:1301 fields.py:1448 relations.py:437 serializers.py:524 +#: fields.py:1457 fields.py:1603 relations.py:485 serializers.py:570 +#, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "Tika gaidīts saraksts ar ierakstiem, bet tika saņemts \"{input_type}\" tips." -#: fields.py:1302 +#: fields.py:1458 msgid "This selection may not be empty." msgstr "Šī daļa nevar būt tukša." -#: fields.py:1339 +#: fields.py:1495 +#, python-brace-format msgid "\"{input}\" is not a valid path choice." msgstr "\"{input}\" ir nederīga ceļa izvēle." -#: fields.py:1358 +#: fields.py:1514 msgid "No file was submitted." msgstr "Neviens fails netika pievienots." -#: fields.py:1359 +#: fields.py:1515 msgid "" "The submitted data was not a file. Check the encoding type on the form." msgstr "Pievienotie dati nebija fails. Pārbaudi kodējuma tipu formā." -#: fields.py:1360 +#: fields.py:1516 msgid "No filename could be determined." msgstr "Faila nosaukums nevar tikt noteikts." -#: fields.py:1361 +#: fields.py:1517 msgid "The submitted file is empty." msgstr "Pievienotais fails ir tukšs." -#: fields.py:1362 +#: fields.py:1518 +#, python-brace-format msgid "" "Ensure this filename has at most {max_length} characters (it has {length})." msgstr "Pārliecinies, ka faila nosaukumā ir vismaz {max_length} zīmes (tajā ir {length})." -#: fields.py:1410 +#: fields.py:1566 msgid "" "Upload a valid image. The file you uploaded was either not an image or a " "corrupted image." msgstr "Augšupielādē derīgu attēlu. Pievienotā datne nebija attēls vai bojāts attēls." -#: fields.py:1449 relations.py:438 serializers.py:525 +#: fields.py:1604 relations.py:486 serializers.py:571 msgid "This list may not be empty." msgstr "Šis saraksts nevar būt tukšs." -#: fields.py:1502 +#: fields.py:1605 +#, python-brace-format +msgid "Ensure this field has at least {min_length} elements." +msgstr "" + +#: fields.py:1606 +#, python-brace-format +msgid "Ensure this field has no more than {max_length} elements." +msgstr "" + +#: fields.py:1682 +#, python-brace-format msgid "Expected a dictionary of items but got type \"{input_type}\"." msgstr "Tika gaidīta vārdnīca ar ierakstiem, bet tika saņemts \"{input_type}\" tips." -#: fields.py:1549 +#: fields.py:1683 +msgid "This dictionary may not be empty." +msgstr "" + +#: fields.py:1755 msgid "Value must be valid JSON." msgstr "Vērtībai ir jābūt derīgam JSON." -#: filters.py:36 templates/rest_framework/filters/django_filter.html:5 -msgid "Submit" -msgstr "Iesniegt" +#: filters.py:49 templates/rest_framework/filters/search.html:2 +msgid "Search" +msgstr "Meklēt" -#: filters.py:336 +#: filters.py:50 +msgid "A search term." +msgstr "" + +#: filters.py:180 templates/rest_framework/filters/ordering.html:3 +msgid "Ordering" +msgstr "Kārtošana" + +#: filters.py:181 +msgid "Which field to use when ordering the results." +msgstr "" + +#: filters.py:287 msgid "ascending" msgstr "augoši" -#: filters.py:337 +#: filters.py:288 msgid "descending" msgstr "dilstoši" -#: pagination.py:193 +#: pagination.py:174 +msgid "A page number within the paginated result set." +msgstr "" + +#: pagination.py:179 pagination.py:372 pagination.py:590 +msgid "Number of results to return per page." +msgstr "" + +#: pagination.py:189 msgid "Invalid page." msgstr "Nederīga lapa." -#: pagination.py:427 +#: pagination.py:374 +msgid "The initial index from which to return the results." +msgstr "" + +#: pagination.py:581 +msgid "The pagination cursor value." +msgstr "" + +#: pagination.py:583 msgid "Invalid cursor" msgstr "Nederīgs kursors" -#: relations.py:207 +#: relations.py:246 +#, python-brace-format msgid "Invalid pk \"{pk_value}\" - object does not exist." msgstr "Nederīga pk \"{pk_value}\" - objekts neeksistē." -#: relations.py:208 +#: relations.py:247 +#, python-brace-format msgid "Incorrect type. Expected pk value, received {data_type}." msgstr "Nepareizs tips. Tika gaidīta pk vērtība, saņemts {data_type}." -#: relations.py:240 +#: relations.py:280 msgid "Invalid hyperlink - No URL match." msgstr "Nederīga hipersaite - Nav URL sakritība." -#: relations.py:241 +#: relations.py:281 msgid "Invalid hyperlink - Incorrect URL match." msgstr "Nederīga hipersaite - Nederīga URL sakritība." -#: relations.py:242 +#: relations.py:282 msgid "Invalid hyperlink - Object does not exist." msgstr "Nederīga hipersaite - Objekts neeksistē." -#: relations.py:243 +#: relations.py:283 +#, python-brace-format msgid "Incorrect type. Expected URL string, received {data_type}." msgstr "Nepareizs tips. Tika gaidīts URL teksts, saņemts {data_type}." -#: relations.py:401 +#: relations.py:448 +#, python-brace-format msgid "Object with {slug_name}={value} does not exist." msgstr "Objekts ar {slug_name}={value} neeksistē." -#: relations.py:402 +#: relations.py:449 msgid "Invalid value." msgstr "Nedrīga vērtība." -#: serializers.py:326 +#: schemas/utils.py:32 +msgid "unique integer value" +msgstr "" + +#: schemas/utils.py:34 +msgid "UUID string" +msgstr "" + +#: schemas/utils.py:36 +msgid "unique value" +msgstr "" + +#: schemas/utils.py:38 +#, python-brace-format +msgid "A {value_type} identifying this {name}." +msgstr "" + +#: serializers.py:337 +#, python-brace-format msgid "Invalid data. Expected a dictionary, but got {datatype}." msgstr "Nederīgi dati. Tika gaidīta vārdnīca, saņemts {datatype}." #: templates/rest_framework/admin.html:116 -#: templates/rest_framework/base.html:128 +#: templates/rest_framework/base.html:136 +msgid "Extra Actions" +msgstr "" + +#: templates/rest_framework/admin.html:130 +#: templates/rest_framework/base.html:150 msgid "Filters" msgstr "Filtri" -#: templates/rest_framework/filters/django_filter.html:2 -#: templates/rest_framework/filters/django_filter_crispyforms.html:4 -msgid "Field filters" -msgstr "Lauka filtri" +#: templates/rest_framework/base.html:37 +msgid "navbar" +msgstr "" -#: templates/rest_framework/filters/ordering.html:3 -msgid "Ordering" -msgstr "Kārtošana" +#: templates/rest_framework/base.html:75 +msgid "content" +msgstr "" -#: templates/rest_framework/filters/search.html:2 -msgid "Search" -msgstr "Meklēt" +#: templates/rest_framework/base.html:78 +msgid "request form" +msgstr "" -#: templates/rest_framework/horizontal/radio.html:2 -#: templates/rest_framework/inline/radio.html:2 -#: templates/rest_framework/vertical/radio.html:2 +#: templates/rest_framework/base.html:157 +msgid "main content" +msgstr "" + +#: templates/rest_framework/base.html:173 +msgid "request info" +msgstr "" + +#: templates/rest_framework/base.html:177 +msgid "response info" +msgstr "" + +#: templates/rest_framework/horizontal/radio.html:4 +#: templates/rest_framework/inline/radio.html:3 +#: templates/rest_framework/vertical/radio.html:3 msgid "None" msgstr "Nekas" -#: templates/rest_framework/horizontal/select_multiple.html:2 -#: templates/rest_framework/inline/select_multiple.html:2 -#: templates/rest_framework/vertical/select_multiple.html:2 +#: templates/rest_framework/horizontal/select_multiple.html:4 +#: templates/rest_framework/inline/select_multiple.html:3 +#: templates/rest_framework/vertical/select_multiple.html:3 msgid "No items to select." msgstr "Nav ierakstu, ko izvēlēties." -#: validators.py:43 +#: validators.py:39 msgid "This field must be unique." msgstr "Šim laukam ir jābūt unikālam." -#: validators.py:97 +#: validators.py:89 +#, python-brace-format msgid "The fields {field_names} must make a unique set." msgstr "Laukiem {field_names} jāveido unikālas kombinācijas." -#: validators.py:245 +#: validators.py:171 +#, python-brace-format +msgid "Surrogate characters are not allowed: U+{code_point:X}." +msgstr "" + +#: validators.py:243 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" date." msgstr "Šim laukam ir jābūt unikālam priekš \"{date_field}\" datuma." -#: validators.py:260 +#: validators.py:258 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" month." msgstr "Šim laukam ir jābūt unikālam priekš \"{date_field}\" mēneša." -#: validators.py:273 +#: validators.py:271 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" year." msgstr "Šim laukam ir jābūt unikālam priekš \"{date_field}\" gada." -#: versioning.py:42 +#: versioning.py:40 msgid "Invalid version in \"Accept\" header." msgstr "Nederīga versija \"Accept\" galvenē." -#: versioning.py:73 +#: versioning.py:71 msgid "Invalid version in URL path." msgstr "Nederīga versija URL ceļā." -#: versioning.py:115 +#: versioning.py:116 msgid "Invalid version in URL path. Does not match any version namespace." msgstr "Nederīga versija URL ceļā. Nav atbilstības esošo versiju telpā." -#: versioning.py:147 +#: versioning.py:148 msgid "Invalid version in hostname." msgstr "Nederīga versija servera nosaukumā." -#: versioning.py:169 +#: versioning.py:170 msgid "Invalid version in query parameter." msgstr "Nederīga versija pieprasījuma parametros." - -#: views.py:88 -msgid "Permission denied." -msgstr "Pieeja liegta." diff --git a/rest_framework/locale/mk/LC_MESSAGES/django.mo b/rest_framework/locale/mk/LC_MESSAGES/django.mo index 752263456cfbeed993de97e6ba73c4e06629f66f..4c13e5a3df71ee2357544a6a7386ed8cdce59f37 100644 GIT binary patch delta 2126 zcmYk+e@xVM9LMp`!2ySWA_$&^_*GK`4?Pe#yd+LdH~|%s0Iw;Xp~l8Qk6*gET{Two z$69&$hkrC}%Qo}JTE`kK*3YdUD_yQ!t2uMEwYg>g=$0!td%nKkWA@p-zmL!7b9dkG z=g0f={dV`yyW%$r+$RksLX;4HrWq5*=?pHEsVrkG{1CnP3+i`w@KMb77&8lfScw7j z;U3(8C$I^xVKbIw8xz7l?9!voQVGy;A0NjW?$(O?F^JQs@BhX&T%BXgQap?Wcm_3~ zWUBxBly_10^X3{;i=D`r%~4#2Corg~PEo0+;|?~WFVC2bIDo70J)DidqJH-muD~)n z7h^kCU<~=nyor81kE`%HHek*i=RTY95!yX!YpI8+XhtugX7Ubd>Apy{GxMGAm!f9e zjHMVs-RKaO;Tu?t(`exjScrGgjh?yAR^{Pp+Fp#aEhbDwcA#z$!Av}W^YI}1@io*Q zeuf%oHlxw^%TetoP&x4o*5Np6>n^3*f1n1ukWuM(^@XgzM$$=#W;}t)yRT3KxQr|D zN323K&zK!hjhfMMT!62mCU8F0p2TX}SCF(at|DjVIryoINunn7Q!(qW0eF~(lBFJN za0Ioa=Wrcf#de&{5g5Q;d;!11UfjYcI`ATn;sXrhDAVo4k8wX1GVMN`z-RGRoXR+r z7S>P6^*JuVe^E0oUFgiX9iz10#l4tI0z8kyNZy+3s2ShFr?F&_V+@bd{u*D!?G}^6 z-%!aJ?ST4jBV&9Q+Hzr>PC~uGfnwp>_3K)k9mbl2rr;k z@HS3i1!u1of5#_v{ueAKA?VnJ0X&T5IEjsT1GP1!?1vr@K_8w%UJ2$)T!B|n5Bdj{ z!~r@vd1fm%<4(-Sv#9%jfctd*Z&DefBTTPu@CoVx_i-(jbGSF*bGQ@FVJ~KpnNi$_ z+PZJB0n_+%7(+OSM^FR3hq;(u>1<6tHt>A2m&#lCHfn@TY>Ys zw&?IkWoIlpI6M#?8Hxq1p6FQro|v^Q);Dxu^pLgg;E+=b4fGEVjrB*9mx{|=i3jtm clHJ~$S;;PIG&^yxd?I#UN=P&YO*94#CPw`J_O|IC#z}wonVH+& z*_rvx_44KmZ9U&*CA}b&t;95qM3G0;6h0^gV?^??5Dl!y85qRL_!R1WZ{SoshvV>D z^x#iejFZNSEX5jJfluH{kskSiN;Mrh+_etZ;R5W(h4=&3V}7bgCAOn}{}wjjRlFTN zX(CzJg!)2$)c(DWM^T^m8P3Dxbdhw%mxWYZbkyQ3Y(gFAA*{gTScN}h4Hk_T@nRVH zlf!)Ib^Ta?KccSKgb5;ZuoSsfHew0xLNC6Iiy2=&r@}olCPQQj=AyRCP-n0Nbw&Zy zCG2(D=bi7bq0T%dGrl!>sL!du+1QMeup1409w%Z9dy=SpLWNb9i+C4)jcl8^c&eI# zIzS#D`k-Re^r*pHtaI9JSVG%G_Erv|zW6oN>ux#iTt?SiDWAyt&!^HzhwkY<)b9zm3ska$ zC3BZxKi1=~s9U@6j`*?d#5O(uLsaxZZqA;*$cuOnzK47ze_%CEVZC)JTX7H%;yi3( zotNQ0WD(>dYA#(z-760qdfp#L>E=N(1<7q6$ z3%C+*Vg^>vi4W9-dR;f}!2P%ze@A_uNrvkE$M9~vgv%LU(&^oV&A0{MMIUB*;(Hpw z#kAkXRd^jkIG1%Fhp%HA_M>juDb(vT$jl?S8udkgLw)gtlDM_lLw?BtD!L^7sBiiU zW?&&1q*h`ARuc_GCNWaHg;v zXjI4P?!(AjQAB4#*b_yZv` z;P>{mWG+Z)?rLi{qp@c*U5VMgZQH_Kp{Ne+HzU5bpkDM`_Lauc1)h=$Psv=Pw7ha& zMNtW5T!SwX^{naig(5*;G~8KftT2OShq27$ah>7akq1p<5iekN_(yxn%Bpv?`^;c$ zAZK<$;pkkgGuBB%|BhP&)(6(0b;3Gnof)0;SCh(Sjn4UhuD0i%l6%dSWpKrSVGUVl z^k$34NN?=!mIz{u8FZ{Nm($I}lE@3n^P pJ9@3b*!KkwC+8lqPTM!1;xWBCiape+z7}tBqBY=+t@9=({0pP?hLQjP diff --git a/rest_framework/locale/mk/LC_MESSAGES/django.po b/rest_framework/locale/mk/LC_MESSAGES/django.po index 0e59663d0..03f313523 100644 --- a/rest_framework/locale/mk/LC_MESSAGES/django.po +++ b/rest_framework/locale/mk/LC_MESSAGES/django.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: Django REST framework\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-07-12 16:13+0100\n" -"PO-Revision-Date: 2017-08-03 14:58+0000\n" -"Last-Translator: Filip Dimitrovski \n" +"POT-Creation-Date: 2020-10-13 21:45+0200\n" +"PO-Revision-Date: 2020-10-13 19:45+0000\n" +"Last-Translator: Xavier Ordoquy \n" "Language-Team: Macedonian (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/mk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,40 +18,40 @@ msgstr "" "Language: mk\n" "Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n" -#: authentication.py:73 +#: authentication.py:70 msgid "Invalid basic header. No credentials provided." msgstr "Невалиден основен header. Не се внесени податоци за автентикација." -#: authentication.py:76 +#: authentication.py:73 msgid "Invalid basic header. Credentials string should not contain spaces." msgstr "Невалиден основен header. Автентикационата низа не треба да содржи празни места." -#: authentication.py:82 +#: authentication.py:83 msgid "Invalid basic header. Credentials not correctly base64 encoded." msgstr "Невалиден основен header. Податоците за автентикација не се енкодирани со base64." -#: authentication.py:99 +#: authentication.py:101 msgid "Invalid username/password." msgstr "Невалидно корисничко име/лозинка." -#: authentication.py:102 authentication.py:198 +#: authentication.py:104 authentication.py:206 msgid "User inactive or deleted." msgstr "Корисникот е деактивиран или избришан." -#: authentication.py:176 +#: authentication.py:184 msgid "Invalid token header. No credentials provided." msgstr "Невалиден токен header. Не се внесени податоци за најава." -#: authentication.py:179 +#: authentication.py:187 msgid "Invalid token header. Token string should not contain spaces." msgstr "Невалиден токен во header. Токенот не треба да содржи празни места." -#: authentication.py:185 +#: authentication.py:193 msgid "" "Invalid token header. Token string should not contain invalid characters." msgstr "" -#: authentication.py:195 +#: authentication.py:203 msgid "Invalid token." msgstr "Невалиден токен." @@ -59,382 +59,515 @@ msgstr "Невалиден токен." msgid "Auth Token" msgstr "Автентикациски токен" -#: authtoken/models.py:15 +#: authtoken/models.py:13 msgid "Key" msgstr "" -#: authtoken/models.py:18 +#: authtoken/models.py:16 msgid "User" msgstr "Корисник" -#: authtoken/models.py:20 +#: authtoken/models.py:18 msgid "Created" msgstr "" -#: authtoken/models.py:29 +#: authtoken/models.py:27 authtoken/serializers.py:19 msgid "Token" msgstr "Токен" -#: authtoken/models.py:30 +#: authtoken/models.py:28 msgid "Tokens" msgstr "Токени" -#: authtoken/serializers.py:8 +#: authtoken/serializers.py:9 msgid "Username" msgstr "Корисничко име" -#: authtoken/serializers.py:9 +#: authtoken/serializers.py:13 msgid "Password" msgstr "Лозинка" -#: authtoken/serializers.py:20 -msgid "User account is disabled." -msgstr "Сметката на корисникот е деактивирана." - -#: authtoken/serializers.py:23 +#: authtoken/serializers.py:35 msgid "Unable to log in with provided credentials." msgstr "Не може да се најавите со податоците за најава." -#: authtoken/serializers.py:26 +#: authtoken/serializers.py:38 msgid "Must include \"username\" and \"password\"." msgstr "Мора да се внесе „username“ и „password“." -#: exceptions.py:49 +#: exceptions.py:102 msgid "A server error occurred." msgstr "Настана серверска грешка." -#: exceptions.py:84 +#: exceptions.py:142 +msgid "Invalid input." +msgstr "" + +#: exceptions.py:161 msgid "Malformed request." msgstr "Неправилен request." -#: exceptions.py:89 +#: exceptions.py:167 msgid "Incorrect authentication credentials." msgstr "Неточни податоци за најава." -#: exceptions.py:94 +#: exceptions.py:173 msgid "Authentication credentials were not provided." msgstr "Не се внесени податоци за најава." -#: exceptions.py:99 +#: exceptions.py:179 msgid "You do not have permission to perform this action." msgstr "Немате дозвола да го сторите ова." -#: exceptions.py:104 views.py:81 +#: exceptions.py:185 msgid "Not found." msgstr "Не е пронајдено ништо." -#: exceptions.py:109 +#: exceptions.py:191 +#, python-brace-format msgid "Method \"{method}\" not allowed." msgstr "Методата \"{method}\" не е дозволена." -#: exceptions.py:120 +#: exceptions.py:202 msgid "Could not satisfy the request Accept header." msgstr "Не може да се исполни барањето на Accept header-от." -#: exceptions.py:132 +#: exceptions.py:212 +#, python-brace-format msgid "Unsupported media type \"{media_type}\" in request." msgstr "Media типот „{media_type}“ не е поддржан." -#: exceptions.py:145 +#: exceptions.py:223 msgid "Request was throttled." msgstr "Request-от е забранет заради ограничувања." -#: fields.py:269 relations.py:206 relations.py:239 validators.py:98 -#: validators.py:181 +#: exceptions.py:224 +#, python-brace-format +msgid "Expected available in {wait} second." +msgstr "" + +#: exceptions.py:225 +#, python-brace-format +msgid "Expected available in {wait} seconds." +msgstr "" + +#: fields.py:316 relations.py:245 relations.py:279 validators.py:90 +#: validators.py:183 msgid "This field is required." msgstr "Ова поле е задолжително." -#: fields.py:270 +#: fields.py:317 msgid "This field may not be null." msgstr "Ова поле не смее да биде недефинирано." -#: fields.py:608 fields.py:639 -msgid "\"{input}\" is not a valid boolean." -msgstr "\"{input}\" не е валиден boolean." +#: fields.py:701 +msgid "Must be a valid boolean." +msgstr "" -#: fields.py:674 +#: fields.py:766 +msgid "Not a valid string." +msgstr "" + +#: fields.py:767 msgid "This field may not be blank." msgstr "Ова поле не смее да биде празно." -#: fields.py:675 fields.py:1675 +#: fields.py:768 fields.py:1881 +#, python-brace-format msgid "Ensure this field has no more than {max_length} characters." msgstr "Ова поле не смее да има повеќе од {max_length} знаци." -#: fields.py:676 +#: fields.py:769 +#, python-brace-format msgid "Ensure this field has at least {min_length} characters." msgstr "Ова поле мора да има барем {min_length} знаци." -#: fields.py:713 +#: fields.py:816 msgid "Enter a valid email address." msgstr "Внесете валидна email адреса." -#: fields.py:724 +#: fields.py:827 msgid "This value does not match the required pattern." msgstr "Ова поле не е по правилната шема/барање." -#: fields.py:735 +#: fields.py:838 msgid "" "Enter a valid \"slug\" consisting of letters, numbers, underscores or " "hyphens." msgstr "Внесете валидно име што содржи букви, бројки, долни црти или црти." -#: fields.py:747 +#: fields.py:839 +msgid "" +"Enter a valid \"slug\" consisting of Unicode letters, numbers, underscores, " +"or hyphens." +msgstr "" + +#: fields.py:854 msgid "Enter a valid URL." msgstr "Внесете валиден URL." -#: fields.py:760 -msgid "\"{value}\" is not a valid UUID." -msgstr "\"{value}\" не е валиден UUID." +#: fields.py:867 +msgid "Must be a valid UUID." +msgstr "" -#: fields.py:796 +#: fields.py:903 msgid "Enter a valid IPv4 or IPv6 address." msgstr "Внеси валидна IPv4 или IPv6 адреса." -#: fields.py:821 +#: fields.py:931 msgid "A valid integer is required." msgstr "Задолжителен е валиден цел број." -#: fields.py:822 fields.py:857 fields.py:891 +#: fields.py:932 fields.py:969 fields.py:1005 fields.py:1366 +#, python-brace-format msgid "Ensure this value is less than or equal to {max_value}." msgstr "Вредноста треба да биде помала или еднаква на {max_value}." -#: fields.py:823 fields.py:858 fields.py:892 +#: fields.py:933 fields.py:970 fields.py:1006 fields.py:1367 +#, python-brace-format msgid "Ensure this value is greater than or equal to {min_value}." msgstr "Вредноста треба да биде поголема или еднаква на {min_value}." -#: fields.py:824 fields.py:859 fields.py:896 +#: fields.py:934 fields.py:971 fields.py:1010 msgid "String value too large." msgstr "Вредноста е преголема." -#: fields.py:856 fields.py:890 +#: fields.py:968 fields.py:1004 msgid "A valid number is required." msgstr "Задолжителен е валиден број." -#: fields.py:893 +#: fields.py:1007 +#, python-brace-format msgid "Ensure that there are no more than {max_digits} digits in total." msgstr "Не смее да има повеќе од {max_digits} цифри вкупно." -#: fields.py:894 +#: fields.py:1008 +#, python-brace-format msgid "" "Ensure that there are no more than {max_decimal_places} decimal places." msgstr "Не смее да има повеќе од {max_decimal_places} децимални места." -#: fields.py:895 +#: fields.py:1009 +#, python-brace-format msgid "" "Ensure that there are no more than {max_whole_digits} digits before the " "decimal point." msgstr "Не смее да има повеќе од {max_whole_digits} цифри пред децималната точка." -#: fields.py:1025 +#: fields.py:1148 +#, python-brace-format msgid "Datetime has wrong format. Use one of these formats instead: {format}." msgstr "Датата и времето се со погрешен формат. Користете го овој формат: {format}." -#: fields.py:1026 +#: fields.py:1149 msgid "Expected a datetime but got a date." msgstr "Очекувано беше дата и време, а внесено беше само дата." -#: fields.py:1103 +#: fields.py:1150 +#, python-brace-format +msgid "Invalid datetime for the timezone \"{timezone}\"." +msgstr "" + +#: fields.py:1151 +msgid "Datetime value out of range." +msgstr "" + +#: fields.py:1236 +#, python-brace-format msgid "Date has wrong format. Use one of these formats instead: {format}." msgstr "Датата е со погрешен формат. Користете го овој формат: {format}." -#: fields.py:1104 +#: fields.py:1237 msgid "Expected a date but got a datetime." msgstr "Очекувана беше дата, а внесени беа и дата и време." -#: fields.py:1170 +#: fields.py:1303 +#, python-brace-format msgid "Time has wrong format. Use one of these formats instead: {format}." msgstr "Времето е со погрешен формат. Користете го овој формат: {format}." -#: fields.py:1232 +#: fields.py:1365 +#, python-brace-format msgid "Duration has wrong format. Use one of these formats instead: {format}." msgstr "" -#: fields.py:1251 fields.py:1300 +#: fields.py:1399 fields.py:1456 +#, python-brace-format msgid "\"{input}\" is not a valid choice." msgstr "„{input}“ не е валиден избор." -#: fields.py:1254 relations.py:71 relations.py:441 +#: fields.py:1402 +#, python-brace-format msgid "More than {count} items..." msgstr "Повеќе од {count} ставки..." -#: fields.py:1301 fields.py:1448 relations.py:437 serializers.py:524 +#: fields.py:1457 fields.py:1603 relations.py:485 serializers.py:570 +#, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "Очекувана беше листа од ставки, а внесено беше „{input_type}“." -#: fields.py:1302 +#: fields.py:1458 msgid "This selection may not be empty." msgstr "" -#: fields.py:1339 +#: fields.py:1495 +#, python-brace-format msgid "\"{input}\" is not a valid path choice." msgstr "" -#: fields.py:1358 +#: fields.py:1514 msgid "No file was submitted." msgstr "Ниеден фајл не е качен (upload-иран)." -#: fields.py:1359 +#: fields.py:1515 msgid "" "The submitted data was not a file. Check the encoding type on the form." msgstr "Испратените податоци не се фајл. Проверете го encoding-от на формата." -#: fields.py:1360 +#: fields.py:1516 msgid "No filename could be determined." msgstr "Не може да се открие име на фајлот." -#: fields.py:1361 +#: fields.py:1517 msgid "The submitted file is empty." msgstr "Качениот (upload-иран) фајл е празен." -#: fields.py:1362 +#: fields.py:1518 +#, python-brace-format msgid "" "Ensure this filename has at most {max_length} characters (it has {length})." msgstr "Името на фајлот треба да има највеќе {max_length} знаци (а има {length})." -#: fields.py:1410 +#: fields.py:1566 msgid "" "Upload a valid image. The file you uploaded was either not an image or a " "corrupted image." msgstr "Качете (upload-ирајте) валидна слика. Фајлот што го качивте не е валидна слика или е расипан." -#: fields.py:1449 relations.py:438 serializers.py:525 +#: fields.py:1604 relations.py:486 serializers.py:571 msgid "This list may not be empty." msgstr "Оваа листа не смее да биде празна." -#: fields.py:1502 +#: fields.py:1605 +#, python-brace-format +msgid "Ensure this field has at least {min_length} elements." +msgstr "" + +#: fields.py:1606 +#, python-brace-format +msgid "Ensure this field has no more than {max_length} elements." +msgstr "" + +#: fields.py:1682 +#, python-brace-format msgid "Expected a dictionary of items but got type \"{input_type}\"." msgstr "Очекуван беше dictionary од ставки, a внесен беше тип \"{input_type}\"." -#: fields.py:1549 +#: fields.py:1683 +msgid "This dictionary may not be empty." +msgstr "" + +#: fields.py:1755 msgid "Value must be valid JSON." msgstr "Вредноста мора да биде валиден JSON." -#: filters.py:36 templates/rest_framework/filters/django_filter.html:5 -msgid "Submit" -msgstr "Испрати" +#: filters.py:49 templates/rest_framework/filters/search.html:2 +msgid "Search" +msgstr "Пребарај" -#: filters.py:336 +#: filters.py:50 +msgid "A search term." +msgstr "" + +#: filters.py:180 templates/rest_framework/filters/ordering.html:3 +msgid "Ordering" +msgstr "Подредување" + +#: filters.py:181 +msgid "Which field to use when ordering the results." +msgstr "" + +#: filters.py:287 msgid "ascending" msgstr "растечки" -#: filters.py:337 +#: filters.py:288 msgid "descending" msgstr "опаѓачки" -#: pagination.py:193 +#: pagination.py:174 +msgid "A page number within the paginated result set." +msgstr "" + +#: pagination.py:179 pagination.py:372 pagination.py:590 +msgid "Number of results to return per page." +msgstr "" + +#: pagination.py:189 msgid "Invalid page." msgstr "Невалидна вредност за страна." -#: pagination.py:427 +#: pagination.py:374 +msgid "The initial index from which to return the results." +msgstr "" + +#: pagination.py:581 +msgid "The pagination cursor value." +msgstr "" + +#: pagination.py:583 msgid "Invalid cursor" msgstr "Невалиден покажувач (cursor)" -#: relations.py:207 +#: relations.py:246 +#, python-brace-format msgid "Invalid pk \"{pk_value}\" - object does not exist." msgstr "Невалиден pk „{pk_value}“ - објектот не постои." -#: relations.py:208 +#: relations.py:247 +#, python-brace-format msgid "Incorrect type. Expected pk value, received {data_type}." msgstr "Неточен тип. Очекувано беше pk, а внесено {data_type}." -#: relations.py:240 +#: relations.py:280 msgid "Invalid hyperlink - No URL match." msgstr "Невалиден хиперлинк - не е внесен URL." -#: relations.py:241 +#: relations.py:281 msgid "Invalid hyperlink - Incorrect URL match." msgstr "Невалиден хиперлинк - внесен е неправилен URL." -#: relations.py:242 +#: relations.py:282 msgid "Invalid hyperlink - Object does not exist." msgstr "Невалиден хиперлинк - Објектот не постои." -#: relations.py:243 +#: relations.py:283 +#, python-brace-format msgid "Incorrect type. Expected URL string, received {data_type}." msgstr "Неточен тип. Очекувано беше URL, a внесено {data_type}." -#: relations.py:401 +#: relations.py:448 +#, python-brace-format msgid "Object with {slug_name}={value} does not exist." msgstr "Објектот со {slug_name}={value} не постои." -#: relations.py:402 +#: relations.py:449 msgid "Invalid value." msgstr "Невалидна вредност." -#: serializers.py:326 +#: schemas/utils.py:32 +msgid "unique integer value" +msgstr "" + +#: schemas/utils.py:34 +msgid "UUID string" +msgstr "" + +#: schemas/utils.py:36 +msgid "unique value" +msgstr "" + +#: schemas/utils.py:38 +#, python-brace-format +msgid "A {value_type} identifying this {name}." +msgstr "" + +#: serializers.py:337 +#, python-brace-format msgid "Invalid data. Expected a dictionary, but got {datatype}." msgstr "Невалидни податоци. Очекуван беше dictionary, а внесен {datatype}." #: templates/rest_framework/admin.html:116 -#: templates/rest_framework/base.html:128 +#: templates/rest_framework/base.html:136 +msgid "Extra Actions" +msgstr "" + +#: templates/rest_framework/admin.html:130 +#: templates/rest_framework/base.html:150 msgid "Filters" msgstr "Филтри" -#: templates/rest_framework/filters/django_filter.html:2 -#: templates/rest_framework/filters/django_filter_crispyforms.html:4 -msgid "Field filters" -msgstr "Филтри на полиња" +#: templates/rest_framework/base.html:37 +msgid "navbar" +msgstr "" -#: templates/rest_framework/filters/ordering.html:3 -msgid "Ordering" -msgstr "Подредување" +#: templates/rest_framework/base.html:75 +msgid "content" +msgstr "" -#: templates/rest_framework/filters/search.html:2 -msgid "Search" -msgstr "Пребарај" +#: templates/rest_framework/base.html:78 +msgid "request form" +msgstr "" -#: templates/rest_framework/horizontal/radio.html:2 -#: templates/rest_framework/inline/radio.html:2 -#: templates/rest_framework/vertical/radio.html:2 +#: templates/rest_framework/base.html:157 +msgid "main content" +msgstr "" + +#: templates/rest_framework/base.html:173 +msgid "request info" +msgstr "" + +#: templates/rest_framework/base.html:177 +msgid "response info" +msgstr "" + +#: templates/rest_framework/horizontal/radio.html:4 +#: templates/rest_framework/inline/radio.html:3 +#: templates/rest_framework/vertical/radio.html:3 msgid "None" msgstr "Ништо" -#: templates/rest_framework/horizontal/select_multiple.html:2 -#: templates/rest_framework/inline/select_multiple.html:2 -#: templates/rest_framework/vertical/select_multiple.html:2 +#: templates/rest_framework/horizontal/select_multiple.html:4 +#: templates/rest_framework/inline/select_multiple.html:3 +#: templates/rest_framework/vertical/select_multiple.html:3 msgid "No items to select." msgstr "Нема ставки за избирање." -#: validators.py:43 +#: validators.py:39 msgid "This field must be unique." msgstr "Ова поле мора да биде уникатно." -#: validators.py:97 +#: validators.py:89 +#, python-brace-format msgid "The fields {field_names} must make a unique set." msgstr "Полињата {field_names} заедно мора да формираат уникатен збир." -#: validators.py:245 +#: validators.py:171 +#, python-brace-format +msgid "Surrogate characters are not allowed: U+{code_point:X}." +msgstr "" + +#: validators.py:243 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" date." msgstr "Ова поле мора да биде уникатно за „{date_field}“ датата." -#: validators.py:260 +#: validators.py:258 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" month." msgstr "Ова поле мора да биде уникатно за „{date_field}“ месецот." -#: validators.py:273 +#: validators.py:271 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" year." msgstr "Ова поле мора да биде уникатно за „{date_field}“ годината." -#: versioning.py:42 +#: versioning.py:40 msgid "Invalid version in \"Accept\" header." msgstr "Невалидна верзија во „Accept“ header-от." -#: versioning.py:73 +#: versioning.py:71 msgid "Invalid version in URL path." msgstr "Невалидна верзија во URL патеката." -#: versioning.py:115 +#: versioning.py:116 msgid "Invalid version in URL path. Does not match any version namespace." msgstr "Верзијата во URL патеката не е валидна. Не се согласува со ниеден version namespace (именски простор за верзии)." -#: versioning.py:147 +#: versioning.py:148 msgid "Invalid version in hostname." msgstr "Невалидна верзија во hostname-от." -#: versioning.py:169 +#: versioning.py:170 msgid "Invalid version in query parameter." msgstr "Невалидна верзија во query параметарот." - -#: views.py:88 -msgid "Permission denied." -msgstr "Барањето не е дозволено." diff --git a/rest_framework/locale/nb/LC_MESSAGES/django.mo b/rest_framework/locale/nb/LC_MESSAGES/django.mo index fc57ebb9ff00848ccf5b869e51ecb703ea8c06a4..bd983b292c4cb1c0223b45b9624554ca496ec38d 100644 GIT binary patch delta 2239 zcmYk+drZ}39LMo59uA>*0b|Hujl!lbAG?) z`99z0Tx|VnXXN`OiDO1PK&({w%#O(<-e~zLW)2qM8r*@)@eu0!CvXK$;5_^ci}4~B z;h&g{`E$)SV<|S`kZZ&~qO*+)3H-Vqo3ImKz`Jn}QZNc4Gf@8?brg_u% zE@3{V-eH!FK`g{BwOF;tz2OnOlkstH{5EQ3AEH)t8I{Uk zy>W1{`*|DsxITi)z!SI{PonNOi2?i)Gw^4OICPTub{YmS5v!4`TRq-|&B!*|lb+9_ zZg3J+CgZpa-^Eh=9JQstp(b3z&GmUVYJ3<~GcTu+{|Y*1xe(uL)HpNUopCGbi;tj# z$59hHgUY}a^y7-9?nJV29pii~!*=Y(=TQs$5i@ZXwV;2Nl7C%DVL9cPgVdvSpfb>d z?KsXOPKT5+5pKxu|h3^0K46CF3}%=q8az*fg>R zyN&^z!z$Bt{tM}lb*n?_&$>}X^(bn_L#P!!joQOW)C0~T*|zhTh~J?e_yej)Z=o_3 z;Oy#qhfvRX33=HBZ`nNGzNQnzpHQbDhh=WSeW)3~f)2iiOy0gh?fp&Mf`x0`3HPHW zHjD-M6si^`@P536+TwC5SoaNKMAh0whi$V5P!E0vQ}CSU1x#S0eG6YA31*Wlc?!)%~@&14Iu|LC_+$$nC^4z#o#`M|67Eg!W2jSrgM_9YSp%(Ln4b zI27@}?k;R5)aJX`9@Jvgwi2o(H5F@-_W%EF6N7H=f~u5-+g@TLkxr2+N;_oHAt7f$S)TagYC!wmn-TZWP3U0SnI(6P)4sIrrqo-0< zMX#ll#0usn_+ym|SNfw5rB%en(*nNeY{un=^3vimUhAE*P}PRux>DM_mhjMUarm77<4L&$<__4>Gnj-^lul`_P|G-FJIQGY~+=OUjW<~6+%u0W3 VW_5u-nw1xdh4Z%iqSJvB{{o+}-6a43 delta 2574 zcmZYATWl0n9LMp~Zf_L9S_+g)=~x8IrIiAubxW@lXra_XTP_8~DLa%&hgs9zHY&(I zX(SM%7GgpWHG(h32UA5cQ6nYB2k=3IAzlb3MB;;&7}Fr>gWuomAP=7Ozn^nXXV09= ze`deha-}PEy)f&fq3kE-6CDv_j^g1QJ}7VI8S@~%g%*zEBD{$UFn@|M#kd6Z{T7^u zdodpmVFkW`%kcxu#hl*p44zJ!U+R9MY)^*&pTqJa^w*-^Jw7}oPob% z7G~1mR7@^Df`v#Ln3mAZ$fc$SHO>GkjgH`Kd_HWyj#}{98Jxe)`YIh-K}k{i!YHb} z4V6rBT!Y6@XM8bi-$5;)YG(Sn4zy?=Kuz!{20Mb;v?oy$%4BxSaLO$9zlusV9lLM< zwbCze4t^PW1GUmSVLQTdR?;p(^4D~scBT){W*Fn3&ODz%bmpsYG4_V-!^lwPOp1y{ zY|3ALih&_#5vr`?H7cmg%?tEer$fn|6LwNv@5P7A5W z2K12yq|AF%l=TzHlVKKF#;nC^)ENz-cH#_bfN|u}Hh<$P%wT`@{c7BRG1N}Hi+T)y zL;lQU*j~V_G+qVH=l*6Jm1a8PL5DH#qrUJp=Hj2oahlu698Cew9GhTPpq`peBoEC9 za%$!nlF#NGD(NnuCj2>SL6=cSc^h-NzsY1e8XzB)?WLH7b*LLRVIJ;8Wwnhu`&Urc ze~-HH1Tv;6;BBP^tj22Gjx~53SK}qr0{+32MP)XrsV~%`lA;gS;R(#fYp9*Lj!W>>6MdJDD@DvzZJUSL|Rigr=uah-oxP))yxwCySu zp|jpiWD@%co%MD?Td5Kulpl@6E<&Y%P%ha-jL0QabiDi={8t=mSww0tAIeU>6gVE! zNz@VjgwCp$Q1Wo(W*bpYs5B6LLG9j06IH#{7KUBQ4dn%S8I%@2dEEp>?;J{Z@a!sk zRg`?)M28xbc0%t26}?1)Qg+DopBhd+S7x~h%a125+ZwSwH)i$6m{9`#F#&=G`q0N89L}D5^mhLVvg@RvC7fog*7?d z!~F-{vsH@ f<@)~EL|J>JXfW<4;}+w_9D6Y7a#t>^UHtODNQf-M diff --git a/rest_framework/locale/nb/LC_MESSAGES/django.po b/rest_framework/locale/nb/LC_MESSAGES/django.po index f572f90be..9dbaf45de 100644 --- a/rest_framework/locale/nb/LC_MESSAGES/django.po +++ b/rest_framework/locale/nb/LC_MESSAGES/django.po @@ -10,9 +10,9 @@ msgid "" msgstr "" "Project-Id-Version: Django REST framework\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-07-12 16:13+0100\n" -"PO-Revision-Date: 2017-11-28 15:25+0000\n" -"Last-Translator: Håken Lid \n" +"POT-Creation-Date: 2020-10-13 21:45+0200\n" +"PO-Revision-Date: 2020-10-13 19:45+0000\n" +"Last-Translator: Xavier Ordoquy \n" "Language-Team: Norwegian Bokmål (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/nb/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,40 +20,40 @@ msgstr "" "Language: nb\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: authentication.py:73 +#: authentication.py:70 msgid "Invalid basic header. No credentials provided." msgstr "Ugyldig basic header. Ingen legitimasjon gitt." -#: authentication.py:76 +#: authentication.py:73 msgid "Invalid basic header. Credentials string should not contain spaces." msgstr "Ugyldig basic header. Legitimasjonsstreng bør ikke inneholde mellomrom." -#: authentication.py:82 +#: authentication.py:83 msgid "Invalid basic header. Credentials not correctly base64 encoded." msgstr "Ugyldig basic header. Legitimasjonen ikke riktig Base64 kodet." -#: authentication.py:99 +#: authentication.py:101 msgid "Invalid username/password." msgstr "Ugyldig brukernavn eller passord." -#: authentication.py:102 authentication.py:198 +#: authentication.py:104 authentication.py:206 msgid "User inactive or deleted." msgstr "Bruker inaktiv eller slettet." -#: authentication.py:176 +#: authentication.py:184 msgid "Invalid token header. No credentials provided." msgstr "Ugyldig token header. Ingen legitimasjon gitt." -#: authentication.py:179 +#: authentication.py:187 msgid "Invalid token header. Token string should not contain spaces." msgstr "Ugyldig token header. Token streng skal ikke inneholde mellomrom." -#: authentication.py:185 +#: authentication.py:193 msgid "" "Invalid token header. Token string should not contain invalid characters." msgstr "Ugyldig token header. Tokenstrengen skal ikke inneholde ugyldige tegn." -#: authentication.py:195 +#: authentication.py:203 msgid "Invalid token." msgstr "Ugyldig token." @@ -61,382 +61,515 @@ msgstr "Ugyldig token." msgid "Auth Token" msgstr "Auth Token" -#: authtoken/models.py:15 +#: authtoken/models.py:13 msgid "Key" msgstr "Nøkkel" -#: authtoken/models.py:18 +#: authtoken/models.py:16 msgid "User" msgstr "Bruker" -#: authtoken/models.py:20 +#: authtoken/models.py:18 msgid "Created" msgstr "Opprettet" -#: authtoken/models.py:29 +#: authtoken/models.py:27 authtoken/serializers.py:19 msgid "Token" msgstr "Token" -#: authtoken/models.py:30 +#: authtoken/models.py:28 msgid "Tokens" msgstr "Tokener" -#: authtoken/serializers.py:8 +#: authtoken/serializers.py:9 msgid "Username" msgstr "Brukernavn" -#: authtoken/serializers.py:9 +#: authtoken/serializers.py:13 msgid "Password" msgstr "Passord" -#: authtoken/serializers.py:20 -msgid "User account is disabled." -msgstr "Brukerkonto er deaktivert." - -#: authtoken/serializers.py:23 +#: authtoken/serializers.py:35 msgid "Unable to log in with provided credentials." msgstr "Kan ikke logge inn med gitt legitimasjon." -#: authtoken/serializers.py:26 +#: authtoken/serializers.py:38 msgid "Must include \"username\" and \"password\"." msgstr "Må inneholde \"username\" og \"password\"." -#: exceptions.py:49 +#: exceptions.py:102 msgid "A server error occurred." msgstr "En serverfeil skjedde." -#: exceptions.py:84 +#: exceptions.py:142 +msgid "Invalid input." +msgstr "" + +#: exceptions.py:161 msgid "Malformed request." msgstr "Misformet forespørsel." -#: exceptions.py:89 +#: exceptions.py:167 msgid "Incorrect authentication credentials." msgstr "Ugyldig autentiseringsinformasjon." -#: exceptions.py:94 +#: exceptions.py:173 msgid "Authentication credentials were not provided." msgstr "Manglende autentiseringsinformasjon." -#: exceptions.py:99 +#: exceptions.py:179 msgid "You do not have permission to perform this action." msgstr "Du har ikke tilgang til å utføre denne handlingen." -#: exceptions.py:104 views.py:81 +#: exceptions.py:185 msgid "Not found." msgstr "Ikke funnet." -#: exceptions.py:109 +#: exceptions.py:191 +#, python-brace-format msgid "Method \"{method}\" not allowed." msgstr "Metoden \"{method}\" ikke gyldig." -#: exceptions.py:120 +#: exceptions.py:202 msgid "Could not satisfy the request Accept header." msgstr "Kunne ikke tilfredsstille request Accept header." -#: exceptions.py:132 +#: exceptions.py:212 +#, python-brace-format msgid "Unsupported media type \"{media_type}\" in request." msgstr "Ugyldig media type \"{media_type}\" i request." -#: exceptions.py:145 +#: exceptions.py:223 msgid "Request was throttled." msgstr "Forespørselen ble strupet." -#: fields.py:269 relations.py:206 relations.py:239 validators.py:98 -#: validators.py:181 +#: exceptions.py:224 +#, python-brace-format +msgid "Expected available in {wait} second." +msgstr "" + +#: exceptions.py:225 +#, python-brace-format +msgid "Expected available in {wait} seconds." +msgstr "" + +#: fields.py:316 relations.py:245 relations.py:279 validators.py:90 +#: validators.py:183 msgid "This field is required." msgstr "Dette feltet er påkrevd." -#: fields.py:270 +#: fields.py:317 msgid "This field may not be null." msgstr "Dette feltet må ikke være tomt." -#: fields.py:608 fields.py:639 -msgid "\"{input}\" is not a valid boolean." -msgstr "\"{input}\" er ikke en gyldig bolsk verdi." +#: fields.py:701 +msgid "Must be a valid boolean." +msgstr "" -#: fields.py:674 +#: fields.py:766 +msgid "Not a valid string." +msgstr "" + +#: fields.py:767 msgid "This field may not be blank." msgstr "Dette feltet må ikke være blankt." -#: fields.py:675 fields.py:1675 +#: fields.py:768 fields.py:1881 +#, python-brace-format msgid "Ensure this field has no more than {max_length} characters." msgstr "Forsikre deg om at dette feltet ikke har mer enn {max_length} tegn." -#: fields.py:676 +#: fields.py:769 +#, python-brace-format msgid "Ensure this field has at least {min_length} characters." msgstr "Forsikre deg at dette feltet har minst {min_length} tegn." -#: fields.py:713 +#: fields.py:816 msgid "Enter a valid email address." msgstr "Oppgi en gyldig epost-adresse." -#: fields.py:724 +#: fields.py:827 msgid "This value does not match the required pattern." msgstr "Denne verdien samsvarer ikke med de påkrevde mønsteret." -#: fields.py:735 +#: fields.py:838 msgid "" "Enter a valid \"slug\" consisting of letters, numbers, underscores or " "hyphens." msgstr "Skriv inn en gyldig \"slug\" som består av bokstaver, tall, understrek eller bindestrek." -#: fields.py:747 +#: fields.py:839 +msgid "" +"Enter a valid \"slug\" consisting of Unicode letters, numbers, underscores, " +"or hyphens." +msgstr "" + +#: fields.py:854 msgid "Enter a valid URL." msgstr "Skriv inn en gyldig URL." -#: fields.py:760 -msgid "\"{value}\" is not a valid UUID." -msgstr "\"{value}\" er ikke en gyldig UUID." +#: fields.py:867 +msgid "Must be a valid UUID." +msgstr "" -#: fields.py:796 +#: fields.py:903 msgid "Enter a valid IPv4 or IPv6 address." msgstr "Skriv inn en gyldig IPv4 eller IPv6-adresse." -#: fields.py:821 +#: fields.py:931 msgid "A valid integer is required." msgstr "En gyldig heltall er nødvendig." -#: fields.py:822 fields.py:857 fields.py:891 +#: fields.py:932 fields.py:969 fields.py:1005 fields.py:1366 +#, python-brace-format msgid "Ensure this value is less than or equal to {max_value}." msgstr "Sikre denne verdien er mindre enn eller lik {max_value}." -#: fields.py:823 fields.py:858 fields.py:892 +#: fields.py:933 fields.py:970 fields.py:1006 fields.py:1367 +#, python-brace-format msgid "Ensure this value is greater than or equal to {min_value}." msgstr "Sikre denne verdien er større enn eller lik {min_value}." -#: fields.py:824 fields.py:859 fields.py:896 +#: fields.py:934 fields.py:971 fields.py:1010 msgid "String value too large." msgstr "Strengverdien for stor." -#: fields.py:856 fields.py:890 +#: fields.py:968 fields.py:1004 msgid "A valid number is required." msgstr "Et gyldig nummer er nødvendig." -#: fields.py:893 +#: fields.py:1007 +#, python-brace-format msgid "Ensure that there are no more than {max_digits} digits in total." msgstr "Pass på at det ikke er flere enn {max_digits} siffer totalt." -#: fields.py:894 +#: fields.py:1008 +#, python-brace-format msgid "" "Ensure that there are no more than {max_decimal_places} decimal places." msgstr "Pass på at det ikke er flere enn {max_decimal_places} desimaler." -#: fields.py:895 +#: fields.py:1009 +#, python-brace-format msgid "" "Ensure that there are no more than {max_whole_digits} digits before the " "decimal point." msgstr "Pass på at det ikke er flere enn {max_whole_digits} siffer før komma." -#: fields.py:1025 +#: fields.py:1148 +#, python-brace-format msgid "Datetime has wrong format. Use one of these formats instead: {format}." msgstr "Datetime har feil format. Bruk et av disse formatene i stedet: {format}." -#: fields.py:1026 +#: fields.py:1149 msgid "Expected a datetime but got a date." msgstr "Forventet en datetime, men fikk en date." -#: fields.py:1103 +#: fields.py:1150 +#, python-brace-format +msgid "Invalid datetime for the timezone \"{timezone}\"." +msgstr "" + +#: fields.py:1151 +msgid "Datetime value out of range." +msgstr "" + +#: fields.py:1236 +#, python-brace-format msgid "Date has wrong format. Use one of these formats instead: {format}." msgstr "Dato har feil format. Bruk et av disse formatene i stedet: {format}." -#: fields.py:1104 +#: fields.py:1237 msgid "Expected a date but got a datetime." msgstr "Forventet en date, men fikk en datetime." -#: fields.py:1170 +#: fields.py:1303 +#, python-brace-format msgid "Time has wrong format. Use one of these formats instead: {format}." msgstr "Tid har feil format. Bruk et av disse formatene i stedet: {format}." -#: fields.py:1232 +#: fields.py:1365 +#, python-brace-format msgid "Duration has wrong format. Use one of these formats instead: {format}." msgstr "Varighet har feil format. Bruk et av disse formatene i stedet: {format}." -#: fields.py:1251 fields.py:1300 +#: fields.py:1399 fields.py:1456 +#, python-brace-format msgid "\"{input}\" is not a valid choice." msgstr "\"{input}\" er ikke et gyldig valg." -#: fields.py:1254 relations.py:71 relations.py:441 +#: fields.py:1402 +#, python-brace-format msgid "More than {count} items..." msgstr "Mer enn {count} elementer ..." -#: fields.py:1301 fields.py:1448 relations.py:437 serializers.py:524 +#: fields.py:1457 fields.py:1603 relations.py:485 serializers.py:570 +#, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "Forventet en liste over elementer, men fikk type \"{input_type}\"." -#: fields.py:1302 +#: fields.py:1458 msgid "This selection may not be empty." msgstr "Dette valget kan ikke være tomt." -#: fields.py:1339 +#: fields.py:1495 +#, python-brace-format msgid "\"{input}\" is not a valid path choice." msgstr "\"{input}\" er ikke en gyldig bane valg." -#: fields.py:1358 +#: fields.py:1514 msgid "No file was submitted." msgstr "Ingen fil ble sendt." -#: fields.py:1359 +#: fields.py:1515 msgid "" "The submitted data was not a file. Check the encoding type on the form." msgstr "De innsendte data var ikke en fil. Kontroller kodingstypen på skjemaet." -#: fields.py:1360 +#: fields.py:1516 msgid "No filename could be determined." msgstr "Kunne ikke finne filnavn." -#: fields.py:1361 +#: fields.py:1517 msgid "The submitted file is empty." msgstr "Den innsendte filen er tom." -#: fields.py:1362 +#: fields.py:1518 +#, python-brace-format msgid "" "Ensure this filename has at most {max_length} characters (it has {length})." msgstr "Sikre dette filnavnet har på det meste {max_length} tegn (det har {length})." -#: fields.py:1410 +#: fields.py:1566 msgid "" "Upload a valid image. The file you uploaded was either not an image or a " "corrupted image." msgstr "Last opp et gyldig bilde. Filen du lastet opp var enten ikke et bilde eller en ødelagt bilde." -#: fields.py:1449 relations.py:438 serializers.py:525 +#: fields.py:1604 relations.py:486 serializers.py:571 msgid "This list may not be empty." msgstr "Denne listen kan ikke være tom." -#: fields.py:1502 +#: fields.py:1605 +#, python-brace-format +msgid "Ensure this field has at least {min_length} elements." +msgstr "" + +#: fields.py:1606 +#, python-brace-format +msgid "Ensure this field has no more than {max_length} elements." +msgstr "" + +#: fields.py:1682 +#, python-brace-format msgid "Expected a dictionary of items but got type \"{input_type}\"." msgstr "Forventet en dictionary av flere ting, men fikk typen \"{input_type}\"." -#: fields.py:1549 +#: fields.py:1683 +msgid "This dictionary may not be empty." +msgstr "" + +#: fields.py:1755 msgid "Value must be valid JSON." msgstr "Verdien må være gyldig JSON." -#: filters.py:36 templates/rest_framework/filters/django_filter.html:5 -msgid "Submit" -msgstr "Send inn" +#: filters.py:49 templates/rest_framework/filters/search.html:2 +msgid "Search" +msgstr "Søk" -#: filters.py:336 +#: filters.py:50 +msgid "A search term." +msgstr "" + +#: filters.py:180 templates/rest_framework/filters/ordering.html:3 +msgid "Ordering" +msgstr "Sortering" + +#: filters.py:181 +msgid "Which field to use when ordering the results." +msgstr "" + +#: filters.py:287 msgid "ascending" msgstr "stigende" -#: filters.py:337 +#: filters.py:288 msgid "descending" msgstr "synkende" -#: pagination.py:193 +#: pagination.py:174 +msgid "A page number within the paginated result set." +msgstr "" + +#: pagination.py:179 pagination.py:372 pagination.py:590 +msgid "Number of results to return per page." +msgstr "" + +#: pagination.py:189 msgid "Invalid page." msgstr "Ugyldig side" -#: pagination.py:427 +#: pagination.py:374 +msgid "The initial index from which to return the results." +msgstr "" + +#: pagination.py:581 +msgid "The pagination cursor value." +msgstr "" + +#: pagination.py:583 msgid "Invalid cursor" msgstr "Ugyldig markør" -#: relations.py:207 +#: relations.py:246 +#, python-brace-format msgid "Invalid pk \"{pk_value}\" - object does not exist." msgstr "Ugyldig pk \"{pk_value}\" - objektet eksisterer ikke." -#: relations.py:208 +#: relations.py:247 +#, python-brace-format msgid "Incorrect type. Expected pk value, received {data_type}." msgstr "Feil type. Forventet pk verdi, fikk {data_type}." -#: relations.py:240 +#: relations.py:280 msgid "Invalid hyperlink - No URL match." msgstr "Ugyldig hyperkobling - No URL match." -#: relations.py:241 +#: relations.py:281 msgid "Invalid hyperlink - Incorrect URL match." msgstr "Ugyldig hyperkobling - Incorrect URL match." -#: relations.py:242 +#: relations.py:282 msgid "Invalid hyperlink - Object does not exist." msgstr "Ugyldig hyperkobling - Objektet eksisterer ikke." -#: relations.py:243 +#: relations.py:283 +#, python-brace-format msgid "Incorrect type. Expected URL string, received {data_type}." msgstr "Feil type. Forventet URL streng, fikk {data_type}." -#: relations.py:401 +#: relations.py:448 +#, python-brace-format msgid "Object with {slug_name}={value} does not exist." msgstr "Objekt med {slug_name}={value} finnes ikke." -#: relations.py:402 +#: relations.py:449 msgid "Invalid value." msgstr "Ugyldig verdi." -#: serializers.py:326 +#: schemas/utils.py:32 +msgid "unique integer value" +msgstr "" + +#: schemas/utils.py:34 +msgid "UUID string" +msgstr "" + +#: schemas/utils.py:36 +msgid "unique value" +msgstr "" + +#: schemas/utils.py:38 +#, python-brace-format +msgid "A {value_type} identifying this {name}." +msgstr "" + +#: serializers.py:337 +#, python-brace-format msgid "Invalid data. Expected a dictionary, but got {datatype}." msgstr "Ugyldige data. Forventet en dictionary, men fikk {datatype}." #: templates/rest_framework/admin.html:116 -#: templates/rest_framework/base.html:128 +#: templates/rest_framework/base.html:136 +msgid "Extra Actions" +msgstr "" + +#: templates/rest_framework/admin.html:130 +#: templates/rest_framework/base.html:150 msgid "Filters" msgstr "Filtre" -#: templates/rest_framework/filters/django_filter.html:2 -#: templates/rest_framework/filters/django_filter_crispyforms.html:4 -msgid "Field filters" -msgstr "Feltfiltre" +#: templates/rest_framework/base.html:37 +msgid "navbar" +msgstr "" -#: templates/rest_framework/filters/ordering.html:3 -msgid "Ordering" -msgstr "Sortering" +#: templates/rest_framework/base.html:75 +msgid "content" +msgstr "" -#: templates/rest_framework/filters/search.html:2 -msgid "Search" -msgstr "Søk" +#: templates/rest_framework/base.html:78 +msgid "request form" +msgstr "" -#: templates/rest_framework/horizontal/radio.html:2 -#: templates/rest_framework/inline/radio.html:2 -#: templates/rest_framework/vertical/radio.html:2 +#: templates/rest_framework/base.html:157 +msgid "main content" +msgstr "" + +#: templates/rest_framework/base.html:173 +msgid "request info" +msgstr "" + +#: templates/rest_framework/base.html:177 +msgid "response info" +msgstr "" + +#: templates/rest_framework/horizontal/radio.html:4 +#: templates/rest_framework/inline/radio.html:3 +#: templates/rest_framework/vertical/radio.html:3 msgid "None" msgstr "Ingen" -#: templates/rest_framework/horizontal/select_multiple.html:2 -#: templates/rest_framework/inline/select_multiple.html:2 -#: templates/rest_framework/vertical/select_multiple.html:2 +#: templates/rest_framework/horizontal/select_multiple.html:4 +#: templates/rest_framework/inline/select_multiple.html:3 +#: templates/rest_framework/vertical/select_multiple.html:3 msgid "No items to select." msgstr "Ingenting å velge." -#: validators.py:43 +#: validators.py:39 msgid "This field must be unique." msgstr "Dette feltet må være unikt." -#: validators.py:97 +#: validators.py:89 +#, python-brace-format msgid "The fields {field_names} must make a unique set." msgstr "Feltene {field_names} må gjøre et unikt sett." -#: validators.py:245 +#: validators.py:171 +#, python-brace-format +msgid "Surrogate characters are not allowed: U+{code_point:X}." +msgstr "" + +#: validators.py:243 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" date." msgstr "Dette feltet må være unikt for \"{date_field}\" dato." -#: validators.py:260 +#: validators.py:258 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" month." msgstr "Dette feltet må være unikt for \"{date_field}\" måned." -#: validators.py:273 +#: validators.py:271 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" year." msgstr "Dette feltet må være unikt for \"{date_field}\" år." -#: versioning.py:42 +#: versioning.py:40 msgid "Invalid version in \"Accept\" header." msgstr "Ugyldig versjon på \"Accept\" header." -#: versioning.py:73 +#: versioning.py:71 msgid "Invalid version in URL path." msgstr "Ugyldig versjon i URL-banen." -#: versioning.py:115 +#: versioning.py:116 msgid "Invalid version in URL path. Does not match any version namespace." msgstr "Ugyldig versjon i URL. Passer ikke med noen eksisterende versjon." -#: versioning.py:147 +#: versioning.py:148 msgid "Invalid version in hostname." msgstr "Ugyldig versjon i vertsnavn." -#: versioning.py:169 +#: versioning.py:170 msgid "Invalid version in query parameter." msgstr "Ugyldig versjon i søkeparameter." - -#: views.py:88 -msgid "Permission denied." -msgstr "Tillatelse avslått." diff --git a/rest_framework/locale/ne_NP/LC_MESSAGES/django.mo b/rest_framework/locale/ne_NP/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..a9071d09e83417e0d10cf349f5e2f9f8d9f9a2d4 GIT binary patch literal 15636 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 literal 0 HcmV?d00001 diff --git a/rest_framework/locale/ne_NP/LC_MESSAGES/django.po b/rest_framework/locale/ne_NP/LC_MESSAGES/django.po new file mode 100644 index 000000000..74b56e47e --- /dev/null +++ b/rest_framework/locale/ne_NP/LC_MESSAGES/django.po @@ -0,0 +1,574 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Shrawan Poudel , 2018 +# Xavier Ordoquy , 2020 +msgid "" +msgstr "" +"Project-Id-Version: Django REST framework\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-10-13 21:45+0200\n" +"PO-Revision-Date: 2020-10-13 19:59+0000\n" +"Last-Translator: Xavier Ordoquy \n" +"Language-Team: Nepali (Nepal) (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/ne_NP/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ne_NP\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: authentication.py:70 +msgid "Invalid basic header. No credentials provided." +msgstr "अमान्य हेडरहरू, क्रेडेन्सियलहरू प्रदान गरिएको छैन |" + +#: authentication.py:73 +msgid "Invalid basic header. Credentials string should not contain spaces." +msgstr "अमान्य हेडरहरू, क्रेडेन्सियलहरूमा स्पेस हुनु हुँदैन |" + +#: authentication.py:83 +msgid "Invalid basic header. Credentials not correctly base64 encoded." +msgstr "अमान्य हेडरहरू, क्रेडेन्सियलहरूमा सही तरिकाले base64 एन्कोड गरिएको छैन |" + +#: authentication.py:101 +msgid "Invalid username/password." +msgstr "अमान्य प्रयोगकर्तानाम/पासवर्ड |" + +#: authentication.py:104 authentication.py:206 +msgid "User inactive or deleted." +msgstr "प्रयोगकर्ता निष्क्रिय वा मेटायिएको छ |" + +#: authentication.py:184 +msgid "Invalid token header. No credentials provided." +msgstr "अमान्य टोकन हेडर । कुनै क्रेडेन्सियल प्रदान गरिएको छैन ।" + +#: authentication.py:187 +msgid "Invalid token header. Token string should not contain spaces." +msgstr "अमान्य टोकन हेडर | टोकनमा स्पेस हुनु हुँदैन |" + +#: authentication.py:193 +msgid "" +"Invalid token header. Token string should not contain invalid characters." +msgstr "अमान्य टोकन हेडर | टोकनमा अवैध अक्षरहरू हुनु हुँदैन |" + +#: authentication.py:203 +msgid "Invalid token." +msgstr "अमान्य टोकन |" + +#: authtoken/apps.py:7 +msgid "Auth Token" +msgstr "प्रयोगकर्ता प्रमाणिकरण टोकन " + +#: authtoken/models.py:13 +msgid "Key" +msgstr "मूल" + +#: authtoken/models.py:16 +msgid "User" +msgstr "प्रयोगकर्ता" + +#: authtoken/models.py:18 +msgid "Created" +msgstr "सिर्जना गरियो" + +#: authtoken/models.py:27 authtoken/serializers.py:19 +msgid "Token" +msgstr "टोकन" + +#: authtoken/models.py:28 +msgid "Tokens" +msgstr "टोकेनहरु" + +#: authtoken/serializers.py:9 +msgid "Username" +msgstr "प्रयोगकर्ताको नाम" + +#: authtoken/serializers.py:13 +msgid "Password" +msgstr "पासवर्ड" + +#: authtoken/serializers.py:35 +msgid "Unable to log in with provided credentials." +msgstr "प्रदान गरिएको क्रेडेन्सियलसँग लग इन गर्न सकिएन |" + +#: authtoken/serializers.py:38 +msgid "Must include \"username\" and \"password\"." +msgstr "\"प्रयोगकर्ताको नाम\" र \"पासवर्ड\" सामेल हुनु पर्छ |" + +#: exceptions.py:102 +msgid "A server error occurred." +msgstr "सर्भर त्रुटि देखापर्यो |" + +#: exceptions.py:142 +msgid "Invalid input." +msgstr "" + +#: exceptions.py:161 +msgid "Malformed request." +msgstr "विकृत अनुरोध |" + +#: exceptions.py:167 +msgid "Incorrect authentication credentials." +msgstr "गलत प्रमाणीकरण क्रेडेन्सियलहरू |" + +#: exceptions.py:173 +msgid "Authentication credentials were not provided." +msgstr "प्रमाणीकरण क्रेडेन्सियलहरू पयिएन | " + +#: exceptions.py:179 +msgid "You do not have permission to perform this action." +msgstr "तपाइँसँग यो कार्य गर्न अनुमति छैन |" + +#: exceptions.py:185 +msgid "Not found." +msgstr "फेला परेन |" + +#: exceptions.py:191 +#, python-brace-format +msgid "Method \"{method}\" not allowed." +msgstr "\"{method}\" गर्ने अनुमती छैन |" + +#: exceptions.py:202 +msgid "Could not satisfy the request Accept header." +msgstr "Accept Header अनुरोधलाई सन्तुष्ट गर्ने सकिएन |" + +#: exceptions.py:212 +#, python-brace-format +msgid "Unsupported media type \"{media_type}\" in request." +msgstr "असमर्थित मिडिया टाईप \"{media_type}\" अनुरोधको | " + +#: exceptions.py:223 +msgid "Request was throttled." +msgstr "अनुरोध प्रतिबन्दित गरियो |" + +#: exceptions.py:224 +#, python-brace-format +msgid "Expected available in {wait} second." +msgstr "" + +#: exceptions.py:225 +#, python-brace-format +msgid "Expected available in {wait} seconds." +msgstr "" + +#: fields.py:316 relations.py:245 relations.py:279 validators.py:90 +#: validators.py:183 +msgid "This field is required." +msgstr "यो फिल्ड आवश्यक छ |" + +#: fields.py:317 +msgid "This field may not be null." +msgstr "यो फिल्ड खाली हुनु हुँदैन |" + +#: fields.py:701 +msgid "Must be a valid boolean." +msgstr "" + +#: fields.py:766 +msgid "Not a valid string." +msgstr "" + +#: fields.py:767 +msgid "This field may not be blank." +msgstr "यो फिल्ड खाली हुन सक्दैन |" + +#: fields.py:768 fields.py:1881 +#, python-brace-format +msgid "Ensure this field has no more than {max_length} characters." +msgstr "यो फिल्डसँग {max_length} अक्षरहरू भन्दा बढी छ छैन सुनिश्चित गर्नुहोस् |" + +#: fields.py:769 +#, python-brace-format +msgid "Ensure this field has at least {min_length} characters." +msgstr "यो फिल्डमा कम से कम {min_length} अक्षरहरू छ छैन सुनिश्चित गर्नुहोस् |" + +#: fields.py:816 +msgid "Enter a valid email address." +msgstr "मान्य इमेल ठेगाना प्रविष्ट गर्नुहोस् |" + +#: fields.py:827 +msgid "This value does not match the required pattern." +msgstr "यो परिमाण आवश्यक ढाँचा मेल खाँदैन ।" + +#: fields.py:838 +msgid "" +"Enter a valid \"slug\" consisting of letters, numbers, underscores or " +"hyphens." +msgstr "अक्षरहरू, अङ्कहरू, अन्डरसेर्सहरू वा हाइफनहरू समावेश भएका एक मान्य \"slug\" प्रविष्टि गर्नुहोस् ।" + +#: fields.py:839 +msgid "" +"Enter a valid \"slug\" consisting of Unicode letters, numbers, underscores, " +"or hyphens." +msgstr "" + +#: fields.py:854 +msgid "Enter a valid URL." +msgstr "मान्य यूआरएल प्रविष्ट गर्नुहोस् ।" + +#: fields.py:867 +msgid "Must be a valid UUID." +msgstr "" + +#: fields.py:903 +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "मान्य IPv4 वा IPv6 ठेगाना प्रविष्टि गर्नुहोस् ।" + +#: fields.py:931 +msgid "A valid integer is required." +msgstr "एक मान्य पूर्णांक आवश्यक छ ।" + +#: fields.py:932 fields.py:969 fields.py:1005 fields.py:1366 +#, python-brace-format +msgid "Ensure this value is less than or equal to {max_value}." +msgstr "यो परिमाण {max_value} को भन्दा कम वा बराबर छ सुनिश्चित गर्नुहोस् ।" + +#: fields.py:933 fields.py:970 fields.py:1006 fields.py:1367 +#, python-brace-format +msgid "Ensure this value is greater than or equal to {min_value}." +msgstr "यो परिमाण {min_value} भन्दा बढी वा बराबर छ सुनिश्चित गर्नुहोस् ।" + +#: fields.py:934 fields.py:971 fields.py:1010 +msgid "String value too large." +msgstr "स्ट्रिङ परिमाण धेरै ठूलो छ ।" + +#: fields.py:968 fields.py:1004 +msgid "A valid number is required." +msgstr "एउटा मान्य अङ्कहरू आवश्यक छ ।" + +#: fields.py:1007 +#, python-brace-format +msgid "Ensure that there are no more than {max_digits} digits in total." +msgstr "सुनिश्चित गर्नुहोस् कि {max_digits} अङ्कहरू भन्दा अधिक नहोस् ।" + +#: fields.py:1008 +#, python-brace-format +msgid "" +"Ensure that there are no more than {max_decimal_places} decimal places." +msgstr "सुनिश्चित गर्नुहोस् कि {max_decimal_places} दशमलव स्थानहरू भन्दा अधिक नहोस् ।" + +#: fields.py:1009 +#, python-brace-format +msgid "" +"Ensure that there are no more than {max_whole_digits} digits before the " +"decimal point." +msgstr "सुनिश्चित गर्नुहोस् कि दशमलव बिन्दुभन्दा पहिले {max_whole_digits} अङ्कहरू भन्दा अधिक नहोस् ।" + +#: fields.py:1148 +#, python-brace-format +msgid "Datetime has wrong format. Use one of these formats instead: {format}." +msgstr "डेटटाइममा गलत ढाँचा छ । यसको सट्टामा यी मध्ये एक ढाँचा प्रयोग गर्नुहोस्: {format} ।" + +#: fields.py:1149 +msgid "Expected a datetime but got a date." +msgstr "डेटटाइम अपेक्षित भए तर मिति प्राप्त भयो ।" + +#: fields.py:1150 +#, python-brace-format +msgid "Invalid datetime for the timezone \"{timezone}\"." +msgstr "" + +#: fields.py:1151 +msgid "Datetime value out of range." +msgstr "" + +#: fields.py:1236 +#, python-brace-format +msgid "Date has wrong format. Use one of these formats instead: {format}." +msgstr "डेटमा गलत ढाँचा छ । यसको सट्टामा यी मध्ये एक ढाँचा प्रयोग गर्नुहोस्: {format} ।" + +#: fields.py:1237 +msgid "Expected a date but got a datetime." +msgstr "डेट अपेक्षित भए तर डेटाटाइम प्राप्त भयो ।" + +#: fields.py:1303 +#, python-brace-format +msgid "Time has wrong format. Use one of these formats instead: {format}." +msgstr "समयमा गलत ढाँचा छ । यसको सट्टामा यी मध्ये एक ढाँचा प्रयोग गर्नुहोस्: {format} ।" + +#: fields.py:1365 +#, python-brace-format +msgid "Duration has wrong format. Use one of these formats instead: {format}." +msgstr "अवधिमा गलत ढाँचा छ । यसको सट्टामा यी मध्ये एक ढाँचा प्रयोग गर्नुहोस्: {format} ।" + +#: fields.py:1399 fields.py:1456 +#, python-brace-format +msgid "\"{input}\" is not a valid choice." +msgstr "\"{input}\" मान्य छनौट छैन ।" + +#: fields.py:1402 +#, python-brace-format +msgid "More than {count} items..." +msgstr "{count} वस्तुहरू भन्दा बढी ..." + +#: fields.py:1457 fields.py:1603 relations.py:485 serializers.py:570 +#, python-brace-format +msgid "Expected a list of items but got type \"{input_type}\"." +msgstr "वस्तुहरूको सूची अपेक्षित तर \"{input_type}\" टाइप प्राप्त भयो ।" + +#: fields.py:1458 +msgid "This selection may not be empty." +msgstr "यो चयन रिक्त हुन सक्दैन ।" + +#: fields.py:1495 +#, python-brace-format +msgid "\"{input}\" is not a valid path choice." +msgstr "\"{input}\" मान्य मार्गको विकल्प होइन ।" + +#: fields.py:1514 +msgid "No file was submitted." +msgstr "कुनै फाइल पेश गरिएको छैन ।" + +#: fields.py:1515 +msgid "" +"The submitted data was not a file. Check the encoding type on the form." +msgstr "पेश गरिएको डेटा फाईल थिएन । एन्कोडिङ प्रकार फारममा जाँच्नुहोस् ।" + +#: fields.py:1516 +msgid "No filename could be determined." +msgstr "कुनै फाइल नाम निर्धारण गर्न सकिएन ।" + +#: fields.py:1517 +msgid "The submitted file is empty." +msgstr "पेश गरिएको फाइल खाली छ ।" + +#: fields.py:1518 +#, python-brace-format +msgid "" +"Ensure this filename has at most {max_length} characters (it has {length})." +msgstr "यो फाइल नाममा अधिक {max_length} अक्षरहरू छ छैन (यसमा {length} छ) सुनिश्चित गर्नुहोस् ।" + +#: fields.py:1566 +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "मान्य चित्र अपलोड गर्नुहोस् । तपाईंले अपलोड गर्नुभएको फाइल होइन वा चित्र वा भ्रष्ट चित्र हो ।" + +#: fields.py:1604 relations.py:486 serializers.py:571 +msgid "This list may not be empty." +msgstr "यो सूची खाली हुन सक्दैन ।" + +#: fields.py:1605 +#, python-brace-format +msgid "Ensure this field has at least {min_length} elements." +msgstr "" + +#: fields.py:1606 +#, python-brace-format +msgid "Ensure this field has no more than {max_length} elements." +msgstr "" + +#: fields.py:1682 +#, python-brace-format +msgid "Expected a dictionary of items but got type \"{input_type}\"." +msgstr "वस्तुहरूको शब्दकोशको अपेक्षित तर \"{input_type}\" टाइप प्राप्त भयो ।" + +#: fields.py:1683 +msgid "This dictionary may not be empty." +msgstr "" + +#: fields.py:1755 +msgid "Value must be valid JSON." +msgstr "परिमाण मान्य JSON हुनु पर्छ ।" + +#: filters.py:49 templates/rest_framework/filters/search.html:2 +msgid "Search" +msgstr "खोजी गर्नुहोस्" + +#: filters.py:50 +msgid "A search term." +msgstr "" + +#: filters.py:180 templates/rest_framework/filters/ordering.html:3 +msgid "Ordering" +msgstr "क्रम" + +#: filters.py:181 +msgid "Which field to use when ordering the results." +msgstr "" + +#: filters.py:287 +msgid "ascending" +msgstr "आरोहण" + +#: filters.py:288 +msgid "descending" +msgstr "अवरोहण" + +#: pagination.py:174 +msgid "A page number within the paginated result set." +msgstr "" + +#: pagination.py:179 pagination.py:372 pagination.py:590 +msgid "Number of results to return per page." +msgstr "" + +#: pagination.py:189 +msgid "Invalid page." +msgstr "अमान्य पृष्ठ ।" + +#: pagination.py:374 +msgid "The initial index from which to return the results." +msgstr "" + +#: pagination.py:581 +msgid "The pagination cursor value." +msgstr "" + +#: pagination.py:583 +msgid "Invalid cursor" +msgstr "अमान्य कर्सर" + +#: relations.py:246 +#, python-brace-format +msgid "Invalid pk \"{pk_value}\" - object does not exist." +msgstr "अमान्य pk \"{pk_value}\" - वस्तुको अस्तित्व छैन ।" + +#: relations.py:247 +#, python-brace-format +msgid "Incorrect type. Expected pk value, received {data_type}." +msgstr "गलत प्रकार। अपेक्षित pk परिमाण, {data_type} प्राप्त भयो ।" + +#: relations.py:280 +msgid "Invalid hyperlink - No URL match." +msgstr "अमान्य हाइपरलिंक - कुनै यूआरएलको मेल छैन ।" + +#: relations.py:281 +msgid "Invalid hyperlink - Incorrect URL match." +msgstr "अमान्य हाइपरलिंक - गलत यूआरएलको मेल छ ।" + +#: relations.py:282 +msgid "Invalid hyperlink - Object does not exist." +msgstr "अमान्य हाइपरलिंक - वस्तुको अस्तित्व छैन ।" + +#: relations.py:283 +#, python-brace-format +msgid "Incorrect type. Expected URL string, received {data_type}." +msgstr "गलत प्रकार। अपेक्षित यूआरएल स्ट्रिङ, {data_type} प्राप्त भयो ।" + +#: relations.py:448 +#, python-brace-format +msgid "Object with {slug_name}={value} does not exist." +msgstr "वस्तु {slug_name} = {value} सँग अस्तित्व छैन ।" + +#: relations.py:449 +msgid "Invalid value." +msgstr "अमान्य परिमाण ।" + +#: schemas/utils.py:32 +msgid "unique integer value" +msgstr "" + +#: schemas/utils.py:34 +msgid "UUID string" +msgstr "" + +#: schemas/utils.py:36 +msgid "unique value" +msgstr "" + +#: schemas/utils.py:38 +#, python-brace-format +msgid "A {value_type} identifying this {name}." +msgstr "" + +#: serializers.py:337 +#, python-brace-format +msgid "Invalid data. Expected a dictionary, but got {datatype}." +msgstr "अमान्य डेटा । एक शब्दकोश अपेक्षित, तर {datatype} प्राप्त भयो ।" + +#: templates/rest_framework/admin.html:116 +#: templates/rest_framework/base.html:136 +msgid "Extra Actions" +msgstr "" + +#: templates/rest_framework/admin.html:130 +#: templates/rest_framework/base.html:150 +msgid "Filters" +msgstr "फिल्टरहरू" + +#: templates/rest_framework/base.html:37 +msgid "navbar" +msgstr "" + +#: templates/rest_framework/base.html:75 +msgid "content" +msgstr "" + +#: templates/rest_framework/base.html:78 +msgid "request form" +msgstr "" + +#: templates/rest_framework/base.html:157 +msgid "main content" +msgstr "" + +#: templates/rest_framework/base.html:173 +msgid "request info" +msgstr "" + +#: templates/rest_framework/base.html:177 +msgid "response info" +msgstr "" + +#: templates/rest_framework/horizontal/radio.html:4 +#: templates/rest_framework/inline/radio.html:3 +#: templates/rest_framework/vertical/radio.html:3 +msgid "None" +msgstr "कुनै पनि होइन" + +#: templates/rest_framework/horizontal/select_multiple.html:4 +#: templates/rest_framework/inline/select_multiple.html:3 +#: templates/rest_framework/vertical/select_multiple.html:3 +msgid "No items to select." +msgstr "चयन गर्न वस्तुहरू छैनन् ।" + +#: validators.py:39 +msgid "This field must be unique." +msgstr "यो फिल्ड अद्वितीय हुनुपर्छ ।" + +#: validators.py:89 +#, python-brace-format +msgid "The fields {field_names} must make a unique set." +msgstr "फिल्ड {field_names} ले एक अद्वितीय सेट गर्नु पर्छ ।" + +#: validators.py:171 +#, python-brace-format +msgid "Surrogate characters are not allowed: U+{code_point:X}." +msgstr "" + +#: validators.py:243 +#, python-brace-format +msgid "This field must be unique for the \"{date_field}\" date." +msgstr "यो फिल्ड \"{date_field}\" मितिको लागि अद्वितीय हुनुपर्छ ।" + +#: validators.py:258 +#, python-brace-format +msgid "This field must be unique for the \"{date_field}\" month." +msgstr "यो फिल्ड \"{date_field}\" महिनाको लागि अद्वितीय हुनुपर्छ ।" + +#: validators.py:271 +#, python-brace-format +msgid "This field must be unique for the \"{date_field}\" year." +msgstr "यो फिल्ड \"{date_field}\" वर्षको लागि अद्वितीय हुनुपर्छ ।" + +#: versioning.py:40 +msgid "Invalid version in \"Accept\" header." +msgstr "\"Accept\" हेडरमा अमान्य संस्करण ।" + +#: versioning.py:71 +msgid "Invalid version in URL path." +msgstr "यूआरएल मार्गमा अमान्य संस्करण ।" + +#: versioning.py:116 +msgid "Invalid version in URL path. Does not match any version namespace." +msgstr "यूआरएल मार्गमा अमान्य संस्करण । कुनै पनि संस्करणको नामसँग मेल खाँदैन ।" + +#: versioning.py:148 +msgid "Invalid version in hostname." +msgstr "होस्ट नाममा अमान्य संस्करण ।" + +#: versioning.py:170 +msgid "Invalid version in query parameter." +msgstr " क्वेरी परिमितिमा अमान्य संस्करण ।" diff --git a/rest_framework/locale/nl/LC_MESSAGES/django.mo b/rest_framework/locale/nl/LC_MESSAGES/django.mo index ed74bffa0d3ab6df64a05899180d5a7f4049766b..4691ca63fffdb0a1e8a48941f95a499d7f227728 100644 GIT binary patch delta 2249 zcmYk+e@smjqH7{xN&iM+zjUjBkI?S&Q`#doMhWk8pj?zkVCFvX4+Jx{XTZpZ;|; z$NRn;)3`r^%D_vw1jkVCdml^iCg$Vsm~iOK=IIcYU^+G+S+{0<9NUp?w3mHfLA_uM zRVJ5lAzs4>euLW5Db$1;dAYvtLtP(3)y#zu`LCgKl^gC}qpk}Ucr)%oJ$M)$JcpXl z6;uZ9U=R!QyooHum0X9h3VW~*UqdbI7c9X0s0IC-NB(sqljW?!Wk@|*FDe6jaXesl z2(_n~l)fxO2Rl$J8oP$~Wm^};e{u?vS#dwdHS)26T(=QFzstnl59dSBu^9S!h3W?(iI z<6u5UaSb-$0Jh_Ms8jHl|9u^Ar;aR+O?VnrtY4$5{2nS3A;){J36+s9tY&;WO-D2N z3~O;3mBMQByc}Cl103?NPa=!52~@_uLgsF{%e?0!s8i63jBS0W37tTaY~!d5eU3|X z{(q)Z%8du8l!bXZ9oHjA+FG$3dr^CM#&--U3%i7R{zFuie}b#=7HW^R3Qc4?Qm;0I zTEOd)@$DTtH8|<}H!AfJevLHagGjdR6tY-*3stN)unVU!h%JwKr=T6Rpl(#EPvU<3 z09D+%EMM;_!h}}XL`NyyiW>MZ>Ud1}Uc~^{X+#H+OU$&*bU00J)32NcP(iC^bQIO< z2rWQId>^rw(1K|Rcdymcz}n}hi58`?uM<{m3mw)Rd37|ep)~A|pATxj1<@vocjWClE~4 zW)}sM&xLAImqR6K$@}@Y+g3#?s`y*&RMpj2M^{E@b30-~!xcS)v7b_5e(Z%4PUG>o*K0n~e>6VQAFF&eKJf9P!a%a6pfvSH!DKMCr+74&e6YMa U)wrT)R$w^QSJD_rUJqaR5ACzs{{R30 delta 2591 zcmZYAe@so4b6_Wqo6T(zF@y|3pv9L{;3 z@AG{wnN449N&gbb88Wo}#5AHKWXuVCK9>*LnS5hr;(KV}Wt@#Sa5|11V@xT|Mg4s% zPQ`sV77t@J9>e+g0p{U#Y&9lrZqixJh56hqleh*y#^snj&Y11E66CkA)8z z(}=rKzaPR59KlK~D=;R4&8P`(MqPJ3)5g3`M-RM!b@(UpW2y@MnJz)CxEb}L7&hQ( zY{4IKC6*Q$Q-gbuOXei%zG1Aw?@*Z>#d$b=Jn!NCrk&0L+<|()acswra2aMz@E_QM zWsEllV+Xa8XHhGA8%e3T7>q}Q-%nxrA+9e&Wnu*%+PW@G>w!r+bMO@`!3${N2u{S? zn1k62*cFq9k75KV1JfF~9=X+Yp`H^*mC+HLj4uV_cTfvHJCXg@UVqO8t)P68e`6zR zyaiQE30#6FQG0wT7~exJptjh*uLCW{PoXAw0=9 z?hxkSYpCyoA)JqAQCs<~?+>6Rb{RPc z<~LL=-3=^$*grK310B>>oIx$%2TW_`cj%BkQ^ayq)wS4(F%08}n2VpFR(J`O`db*o z@+yCVFQPJZ3iZ76sFhzsW%fF10{1Z=>*kVwb((o<7VaP#3BC@zVgj!zoyvgHr>68h zXv&D19?VX9t%*++8Sn9$3VR))#VBK{BMyvNq5a=XM@=(a<@NkZ-$VaNVhy1$3$0j9 zD=H@RKVmgOw!PNIr;cI|5h2zRYC48$O9(AiO<7ditNmB1)oO{AUe7-|`UZQP$R_p^ z9A)o6p|(sdM5sPmh+Tx*ctW)hCA2kpgqpTP)&HQ`bW~&MeSGkr(rh5uPP38FIqfEN zthN#L1SR4X-7-|u5#8|TzUdkH?x9qE2==%8ho~TXIs^%_86g~*r5Tf zohb5peqnmuio=e3U?BBEh2466SKM#iC#PE)(lqVuPv`Q%*6rw|95TM z*4~zJ^F!frc5lqu@ARhZ{$$22m=TV2+Wmb_GU+5-D`vZn9jh5U6{*kNI?&zcq%xNx zRiR1Io}R>jo6@UePBPlvtD9~V|5R98U%jBAdch*Ac5!1}!{A8CYTU!28kLqy#N3J diff --git a/rest_framework/locale/nl/LC_MESSAGES/django.po b/rest_framework/locale/nl/LC_MESSAGES/django.po index 370f3aa41..5f7ff05b4 100644 --- a/rest_framework/locale/nl/LC_MESSAGES/django.po +++ b/rest_framework/locale/nl/LC_MESSAGES/django.po @@ -8,13 +8,14 @@ # Mike Dingjan , 2017 # Mike Dingjan , 2015 # Hans van Luttikhuizen , 2016 +# Tom Hendrikx , 2017 msgid "" msgstr "" "Project-Id-Version: Django REST framework\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-07-12 16:13+0100\n" -"PO-Revision-Date: 2017-08-03 14:58+0000\n" -"Last-Translator: Mike Dingjan \n" +"POT-Creation-Date: 2020-10-13 21:45+0200\n" +"PO-Revision-Date: 2020-10-13 19:45+0000\n" +"Last-Translator: Xavier Ordoquy \n" "Language-Team: Dutch (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/nl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -22,40 +23,40 @@ msgstr "" "Language: nl\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: authentication.py:73 +#: authentication.py:70 msgid "Invalid basic header. No credentials provided." msgstr "Ongeldige basic header. Geen logingegevens opgegeven." -#: authentication.py:76 +#: authentication.py:73 msgid "Invalid basic header. Credentials string should not contain spaces." msgstr "Ongeldige basic header. logingegevens kunnen geen spaties bevatten." -#: authentication.py:82 +#: authentication.py:83 msgid "Invalid basic header. Credentials not correctly base64 encoded." msgstr "Ongeldige basic header. logingegevens zijn niet correct base64-versleuteld." -#: authentication.py:99 +#: authentication.py:101 msgid "Invalid username/password." msgstr "Ongeldige gebruikersnaam/wachtwoord." -#: authentication.py:102 authentication.py:198 +#: authentication.py:104 authentication.py:206 msgid "User inactive or deleted." msgstr "Gebruiker inactief of verwijderd." -#: authentication.py:176 +#: authentication.py:184 msgid "Invalid token header. No credentials provided." msgstr "Ongeldige token header. Geen logingegevens opgegeven" -#: authentication.py:179 +#: authentication.py:187 msgid "Invalid token header. Token string should not contain spaces." msgstr "Ongeldige token header. Token kan geen spaties bevatten." -#: authentication.py:185 +#: authentication.py:193 msgid "" "Invalid token header. Token string should not contain invalid characters." msgstr "Ongeldige token header. Token kan geen ongeldige karakters bevatten." -#: authentication.py:195 +#: authentication.py:203 msgid "Invalid token." msgstr "Ongeldige token." @@ -63,382 +64,515 @@ msgstr "Ongeldige token." msgid "Auth Token" msgstr "Autorisatietoken" -#: authtoken/models.py:15 +#: authtoken/models.py:13 msgid "Key" msgstr "Key" -#: authtoken/models.py:18 +#: authtoken/models.py:16 msgid "User" msgstr "Gebruiker" -#: authtoken/models.py:20 +#: authtoken/models.py:18 msgid "Created" msgstr "Aangemaakt" -#: authtoken/models.py:29 +#: authtoken/models.py:27 authtoken/serializers.py:19 msgid "Token" msgstr "Token" -#: authtoken/models.py:30 +#: authtoken/models.py:28 msgid "Tokens" msgstr "Tokens" -#: authtoken/serializers.py:8 +#: authtoken/serializers.py:9 msgid "Username" msgstr "Gebruikersnaam" -#: authtoken/serializers.py:9 +#: authtoken/serializers.py:13 msgid "Password" msgstr "Wachtwoord" -#: authtoken/serializers.py:20 -msgid "User account is disabled." -msgstr "Gebruikersaccount is gedeactiveerd." - -#: authtoken/serializers.py:23 +#: authtoken/serializers.py:35 msgid "Unable to log in with provided credentials." msgstr "Kan niet inloggen met opgegeven gegevens." -#: authtoken/serializers.py:26 +#: authtoken/serializers.py:38 msgid "Must include \"username\" and \"password\"." msgstr "Moet \"username\" en \"password\" bevatten." -#: exceptions.py:49 +#: exceptions.py:102 msgid "A server error occurred." msgstr "Er is een serverfout opgetreden." -#: exceptions.py:84 +#: exceptions.py:142 +msgid "Invalid input." +msgstr "" + +#: exceptions.py:161 msgid "Malformed request." msgstr "Ongeldig samengestelde request." -#: exceptions.py:89 +#: exceptions.py:167 msgid "Incorrect authentication credentials." msgstr "Ongeldige authenticatiegegevens." -#: exceptions.py:94 +#: exceptions.py:173 msgid "Authentication credentials were not provided." msgstr "Authenticatiegegevens zijn niet opgegeven." -#: exceptions.py:99 +#: exceptions.py:179 msgid "You do not have permission to perform this action." msgstr "Je hebt geen toestemming om deze actie uit te voeren." -#: exceptions.py:104 views.py:81 +#: exceptions.py:185 msgid "Not found." msgstr "Niet gevonden." -#: exceptions.py:109 +#: exceptions.py:191 +#, python-brace-format msgid "Method \"{method}\" not allowed." msgstr "Methode \"{method}\" niet toegestaan." -#: exceptions.py:120 +#: exceptions.py:202 msgid "Could not satisfy the request Accept header." msgstr "Kan niet voldoen aan de opgegeven Accept header." -#: exceptions.py:132 +#: exceptions.py:212 +#, python-brace-format msgid "Unsupported media type \"{media_type}\" in request." msgstr "Ongeldige media type \"{media_type}\" in aanvraag." -#: exceptions.py:145 +#: exceptions.py:223 msgid "Request was throttled." msgstr "Aanvraag was verstikt." -#: fields.py:269 relations.py:206 relations.py:239 validators.py:98 -#: validators.py:181 +#: exceptions.py:224 +#, python-brace-format +msgid "Expected available in {wait} second." +msgstr "" + +#: exceptions.py:225 +#, python-brace-format +msgid "Expected available in {wait} seconds." +msgstr "" + +#: fields.py:316 relations.py:245 relations.py:279 validators.py:90 +#: validators.py:183 msgid "This field is required." msgstr "Dit veld is vereist." -#: fields.py:270 +#: fields.py:317 msgid "This field may not be null." msgstr "Dit veld mag niet leeg zijn." -#: fields.py:608 fields.py:639 -msgid "\"{input}\" is not a valid boolean." -msgstr "\"{input}\" is een ongeldige booleanwaarde." +#: fields.py:701 +msgid "Must be a valid boolean." +msgstr "" -#: fields.py:674 +#: fields.py:766 +msgid "Not a valid string." +msgstr "" + +#: fields.py:767 msgid "This field may not be blank." msgstr "Dit veld mag niet leeg zijn." -#: fields.py:675 fields.py:1675 +#: fields.py:768 fields.py:1881 +#, python-brace-format msgid "Ensure this field has no more than {max_length} characters." msgstr "Zorg ervoor dat dit veld niet meer dan {max_length} karakters bevat." -#: fields.py:676 +#: fields.py:769 +#, python-brace-format msgid "Ensure this field has at least {min_length} characters." msgstr "Zorg ervoor dat dit veld minimaal {min_length} karakters bevat." -#: fields.py:713 +#: fields.py:816 msgid "Enter a valid email address." msgstr "Voer een geldig e-mailadres in." -#: fields.py:724 +#: fields.py:827 msgid "This value does not match the required pattern." -msgstr "Deze waarde voldoet niet aan het vereisde formaat." +msgstr "Deze waarde voldoet niet aan het vereiste formaat." -#: fields.py:735 +#: fields.py:838 msgid "" "Enter a valid \"slug\" consisting of letters, numbers, underscores or " "hyphens." msgstr "Voer een geldige \"slug\" in, bestaande uit letters, cijfers, lage streepjes of streepjes." -#: fields.py:747 +#: fields.py:839 +msgid "" +"Enter a valid \"slug\" consisting of Unicode letters, numbers, underscores, " +"or hyphens." +msgstr "" + +#: fields.py:854 msgid "Enter a valid URL." msgstr "Voer een geldige URL in." -#: fields.py:760 -msgid "\"{value}\" is not a valid UUID." -msgstr "\"{value}\" is een ongeldige UUID." +#: fields.py:867 +msgid "Must be a valid UUID." +msgstr "" -#: fields.py:796 +#: fields.py:903 msgid "Enter a valid IPv4 or IPv6 address." msgstr "Voer een geldig IPv4- of IPv6-adres in." -#: fields.py:821 +#: fields.py:931 msgid "A valid integer is required." msgstr "Een geldig getal is vereist." -#: fields.py:822 fields.py:857 fields.py:891 +#: fields.py:932 fields.py:969 fields.py:1005 fields.py:1366 +#, python-brace-format msgid "Ensure this value is less than or equal to {max_value}." msgstr "Zorg ervoor dat deze waarde kleiner is dan of gelijk is aan {max_value}." -#: fields.py:823 fields.py:858 fields.py:892 +#: fields.py:933 fields.py:970 fields.py:1006 fields.py:1367 +#, python-brace-format msgid "Ensure this value is greater than or equal to {min_value}." msgstr "Zorg ervoor dat deze waarde groter is dan of gelijk is aan {min_value}." -#: fields.py:824 fields.py:859 fields.py:896 +#: fields.py:934 fields.py:971 fields.py:1010 msgid "String value too large." msgstr "Tekstwaarde is te lang." -#: fields.py:856 fields.py:890 +#: fields.py:968 fields.py:1004 msgid "A valid number is required." msgstr "Een geldig nummer is vereist." -#: fields.py:893 +#: fields.py:1007 +#, python-brace-format msgid "Ensure that there are no more than {max_digits} digits in total." msgstr "Zorg ervoor dat er in totaal niet meer dan {max_digits} cijfers zijn." -#: fields.py:894 +#: fields.py:1008 +#, python-brace-format msgid "" "Ensure that there are no more than {max_decimal_places} decimal places." msgstr "Zorg ervoor dat er niet meer dan {max_decimal_places} cijfers achter de komma zijn." -#: fields.py:895 +#: fields.py:1009 +#, python-brace-format msgid "" "Ensure that there are no more than {max_whole_digits} digits before the " "decimal point." msgstr "Zorg ervoor dat er niet meer dan {max_whole_digits} cijfers voor de komma zijn." -#: fields.py:1025 +#: fields.py:1148 +#, python-brace-format msgid "Datetime has wrong format. Use one of these formats instead: {format}." msgstr "Datetime heeft een ongeldig formaat, gebruik 1 van de volgende formaten: {format}." -#: fields.py:1026 +#: fields.py:1149 msgid "Expected a datetime but got a date." msgstr "Verwachtte een datetime, maar kreeg een date." -#: fields.py:1103 +#: fields.py:1150 +#, python-brace-format +msgid "Invalid datetime for the timezone \"{timezone}\"." +msgstr "" + +#: fields.py:1151 +msgid "Datetime value out of range." +msgstr "" + +#: fields.py:1236 +#, python-brace-format msgid "Date has wrong format. Use one of these formats instead: {format}." msgstr "Date heeft het verkeerde formaat, gebruik 1 van deze formaten: {format}." -#: fields.py:1104 +#: fields.py:1237 msgid "Expected a date but got a datetime." msgstr "Verwachtte een date, maar kreeg een datetime." -#: fields.py:1170 +#: fields.py:1303 +#, python-brace-format msgid "Time has wrong format. Use one of these formats instead: {format}." msgstr "Time heeft het verkeerde formaat, gebruik 1 van onderstaande formaten: {format}." -#: fields.py:1232 +#: fields.py:1365 +#, python-brace-format msgid "Duration has wrong format. Use one of these formats instead: {format}." msgstr "Tijdsduur heeft een verkeerd formaat, gebruik 1 van onderstaande formaten: {format}." -#: fields.py:1251 fields.py:1300 +#: fields.py:1399 fields.py:1456 +#, python-brace-format msgid "\"{input}\" is not a valid choice." msgstr "\"{input}\" is een ongeldige keuze." -#: fields.py:1254 relations.py:71 relations.py:441 +#: fields.py:1402 +#, python-brace-format msgid "More than {count} items..." msgstr "Meer dan {count} items..." -#: fields.py:1301 fields.py:1448 relations.py:437 serializers.py:524 +#: fields.py:1457 fields.py:1603 relations.py:485 serializers.py:570 +#, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "Verwachtte een lijst met items, maar kreeg type \"{input_type}\"." -#: fields.py:1302 +#: fields.py:1458 msgid "This selection may not be empty." msgstr "Deze selectie mag niet leeg zijn." -#: fields.py:1339 +#: fields.py:1495 +#, python-brace-format msgid "\"{input}\" is not a valid path choice." msgstr "\"{input}\" is niet een geldig pad." -#: fields.py:1358 +#: fields.py:1514 msgid "No file was submitted." msgstr "Er is geen bestand opgestuurd." -#: fields.py:1359 +#: fields.py:1515 msgid "" "The submitted data was not a file. Check the encoding type on the form." msgstr "De verstuurde data was geen bestand. Controleer de encoding type op het formulier." -#: fields.py:1360 +#: fields.py:1516 msgid "No filename could be determined." msgstr "Bestandsnaam kon niet vastgesteld worden." -#: fields.py:1361 +#: fields.py:1517 msgid "The submitted file is empty." msgstr "Het verstuurde bestand is leeg." -#: fields.py:1362 +#: fields.py:1518 +#, python-brace-format msgid "" "Ensure this filename has at most {max_length} characters (it has {length})." msgstr "Zorg ervoor dat deze bestandsnaam hoogstens {max_length} karakters heeft (het heeft er {length})." -#: fields.py:1410 +#: fields.py:1566 msgid "" "Upload a valid image. The file you uploaded was either not an image or a " "corrupted image." msgstr "Upload een geldige afbeelding, de geüploade afbeelding is geen afbeelding of is beschadigd geraakt," -#: fields.py:1449 relations.py:438 serializers.py:525 +#: fields.py:1604 relations.py:486 serializers.py:571 msgid "This list may not be empty." msgstr "Deze lijst mag niet leeg zijn." -#: fields.py:1502 +#: fields.py:1605 +#, python-brace-format +msgid "Ensure this field has at least {min_length} elements." +msgstr "" + +#: fields.py:1606 +#, python-brace-format +msgid "Ensure this field has no more than {max_length} elements." +msgstr "" + +#: fields.py:1682 +#, python-brace-format msgid "Expected a dictionary of items but got type \"{input_type}\"." msgstr "Verwachtte een dictionary van items, maar kreeg type \"{input_type}\"." -#: fields.py:1549 +#: fields.py:1683 +msgid "This dictionary may not be empty." +msgstr "" + +#: fields.py:1755 msgid "Value must be valid JSON." msgstr "Waarde moet valide JSON zijn." -#: filters.py:36 templates/rest_framework/filters/django_filter.html:5 -msgid "Submit" -msgstr "Verzenden" +#: filters.py:49 templates/rest_framework/filters/search.html:2 +msgid "Search" +msgstr "Zoek" -#: filters.py:336 +#: filters.py:50 +msgid "A search term." +msgstr "" + +#: filters.py:180 templates/rest_framework/filters/ordering.html:3 +msgid "Ordering" +msgstr "Sorteer op" + +#: filters.py:181 +msgid "Which field to use when ordering the results." +msgstr "" + +#: filters.py:287 msgid "ascending" msgstr "oplopend" -#: filters.py:337 +#: filters.py:288 msgid "descending" msgstr "aflopend" -#: pagination.py:193 +#: pagination.py:174 +msgid "A page number within the paginated result set." +msgstr "" + +#: pagination.py:179 pagination.py:372 pagination.py:590 +msgid "Number of results to return per page." +msgstr "" + +#: pagination.py:189 msgid "Invalid page." msgstr "Ongeldige pagina." -#: pagination.py:427 +#: pagination.py:374 +msgid "The initial index from which to return the results." +msgstr "" + +#: pagination.py:581 +msgid "The pagination cursor value." +msgstr "" + +#: pagination.py:583 msgid "Invalid cursor" msgstr "Ongeldige cursor." -#: relations.py:207 +#: relations.py:246 +#, python-brace-format msgid "Invalid pk \"{pk_value}\" - object does not exist." msgstr "Ongeldige pk \"{pk_value}\" - object bestaat niet." -#: relations.py:208 +#: relations.py:247 +#, python-brace-format msgid "Incorrect type. Expected pk value, received {data_type}." msgstr "Ongeldig type. Verwacht een pk-waarde, ontving {data_type}." -#: relations.py:240 +#: relations.py:280 msgid "Invalid hyperlink - No URL match." msgstr "Ongeldige hyperlink - Geen overeenkomende URL." -#: relations.py:241 +#: relations.py:281 msgid "Invalid hyperlink - Incorrect URL match." msgstr "Ongeldige hyperlink - Ongeldige URL" -#: relations.py:242 +#: relations.py:282 msgid "Invalid hyperlink - Object does not exist." msgstr "Ongeldige hyperlink - Object bestaat niet." -#: relations.py:243 +#: relations.py:283 +#, python-brace-format msgid "Incorrect type. Expected URL string, received {data_type}." msgstr "Ongeldig type. Verwacht een URL, ontving {data_type}." -#: relations.py:401 +#: relations.py:448 +#, python-brace-format msgid "Object with {slug_name}={value} does not exist." msgstr "Object met {slug_name}={value} bestaat niet." -#: relations.py:402 +#: relations.py:449 msgid "Invalid value." msgstr "Ongeldige waarde." -#: serializers.py:326 +#: schemas/utils.py:32 +msgid "unique integer value" +msgstr "" + +#: schemas/utils.py:34 +msgid "UUID string" +msgstr "" + +#: schemas/utils.py:36 +msgid "unique value" +msgstr "" + +#: schemas/utils.py:38 +#, python-brace-format +msgid "A {value_type} identifying this {name}." +msgstr "" + +#: serializers.py:337 +#, python-brace-format msgid "Invalid data. Expected a dictionary, but got {datatype}." msgstr "Ongeldige data. Verwacht een dictionary, kreeg een {datatype}." #: templates/rest_framework/admin.html:116 -#: templates/rest_framework/base.html:128 +#: templates/rest_framework/base.html:136 +msgid "Extra Actions" +msgstr "" + +#: templates/rest_framework/admin.html:130 +#: templates/rest_framework/base.html:150 msgid "Filters" msgstr "Filters" -#: templates/rest_framework/filters/django_filter.html:2 -#: templates/rest_framework/filters/django_filter_crispyforms.html:4 -msgid "Field filters" -msgstr "Veldfilters" +#: templates/rest_framework/base.html:37 +msgid "navbar" +msgstr "" -#: templates/rest_framework/filters/ordering.html:3 -msgid "Ordering" -msgstr "Sorteer op" +#: templates/rest_framework/base.html:75 +msgid "content" +msgstr "" -#: templates/rest_framework/filters/search.html:2 -msgid "Search" -msgstr "Zoek" +#: templates/rest_framework/base.html:78 +msgid "request form" +msgstr "" -#: templates/rest_framework/horizontal/radio.html:2 -#: templates/rest_framework/inline/radio.html:2 -#: templates/rest_framework/vertical/radio.html:2 +#: templates/rest_framework/base.html:157 +msgid "main content" +msgstr "" + +#: templates/rest_framework/base.html:173 +msgid "request info" +msgstr "" + +#: templates/rest_framework/base.html:177 +msgid "response info" +msgstr "" + +#: templates/rest_framework/horizontal/radio.html:4 +#: templates/rest_framework/inline/radio.html:3 +#: templates/rest_framework/vertical/radio.html:3 msgid "None" msgstr "Geen" -#: templates/rest_framework/horizontal/select_multiple.html:2 -#: templates/rest_framework/inline/select_multiple.html:2 -#: templates/rest_framework/vertical/select_multiple.html:2 +#: templates/rest_framework/horizontal/select_multiple.html:4 +#: templates/rest_framework/inline/select_multiple.html:3 +#: templates/rest_framework/vertical/select_multiple.html:3 msgid "No items to select." msgstr "Geen items geselecteerd." -#: validators.py:43 +#: validators.py:39 msgid "This field must be unique." msgstr "Dit veld moet uniek zijn." -#: validators.py:97 +#: validators.py:89 +#, python-brace-format msgid "The fields {field_names} must make a unique set." msgstr "De velden {field_names} moeten een unieke set zijn." -#: validators.py:245 +#: validators.py:171 +#, python-brace-format +msgid "Surrogate characters are not allowed: U+{code_point:X}." +msgstr "" + +#: validators.py:243 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" date." msgstr "Dit veld moet uniek zijn voor de \"{date_field}\" datum." -#: validators.py:260 +#: validators.py:258 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" month." msgstr "Dit veld moet uniek zijn voor de \"{date_field}\" maand." -#: validators.py:273 +#: validators.py:271 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" year." msgstr "Dit veld moet uniek zijn voor de \"{date_field}\" year." -#: versioning.py:42 +#: versioning.py:40 msgid "Invalid version in \"Accept\" header." msgstr "Ongeldige versie in \"Accept\" header." -#: versioning.py:73 +#: versioning.py:71 msgid "Invalid version in URL path." msgstr "Ongeldige versie in URL-pad." -#: versioning.py:115 +#: versioning.py:116 msgid "Invalid version in URL path. Does not match any version namespace." msgstr "Ongeldige versie in het URL pad, komt niet overeen met een geldige versie namespace" -#: versioning.py:147 +#: versioning.py:148 msgid "Invalid version in hostname." msgstr "Ongeldige versie in hostnaam." -#: versioning.py:169 +#: versioning.py:170 msgid "Invalid version in query parameter." msgstr "Ongeldige versie in query parameter." - -#: views.py:88 -msgid "Permission denied." -msgstr "Toestemming geweigerd." diff --git a/rest_framework/locale/pl/LC_MESSAGES/django.mo b/rest_framework/locale/pl/LC_MESSAGES/django.mo index 436580b3566dd8aeb7a9b70494ada40df969625d..f265186aef076fe1a2729562bc13a39773879530 100644 GIT binary patch delta 2239 zcmYk-e@s8~<%am2K z-0oOyMa|}_XT(kJ-#D0m6bATv;*`d>d9uOWhw_+ahjQfC3rt>#e4B7)c0S&0(=J-;597A?{GE# zjq|ZM-E1RH=d}gOk{ZnTyOe;dZRRQRL6QWmbti(?2!Lz81-NAgEMs4Wd9OADNX>6woS0eRjU8o4`$Iv{p zCs4KVI;F21UqyxVH(Z4Q7STGT95`i7s8H`kt$PNw?#H+uui-9Cim}Qz2EEvYmr%u~ zZFfKf>oJZhzVGod3=+pC9QOSJpJkr1)VuI$NV9ZakO8O0WaTu04Y~e;y-T z-@awg#)*Y1y#;%by0N!VkI#ol^zCOX#2Iw3fJZ_RYC!JAUO}bi15`~+qEa;Fe?E)+ z)bh!fQqzDrdj1bG&UP&>Pg%2^e+s|EHU!Lng2$2YJUzrg@zvi(%d z!*#d}Yj6)Lb)%>a%plix^Ac023rUdfxEA&NK8b1gCZ^-Nn1so6rAoh6 z>HD2@Pw7v8c zdL6xruG}h(YN{Khu!~OJx#4d?9(%Vv#4$q8(Djv5Rk|9rWskTcFPHw%&7+D?`Cjgy zR1K&ucKdU(qErE@=)f=S+pb&e>_;7xEL%-j!);_*jyDVujFryQ(0TLHe42>Eoh4l9xLx0 zh#na{96i=QQ0MH54)r}c;A|T>*njltlTO2les2^x+;^mZs4tqB%^OdOPvwUb)r)@! XByyeh)cEnj#>D4^SCZqemX7}iAokpP delta 2596 zcmZYAS!`5Q9LMoPrz?d5EtIkpE)=jVt+dd^LQ5$KlosqlK@h38?X+HII=AV}P%BD9 z0xCibIsp@qh>4n*@Pfq}H;h1uF9cCACMGTkCPJbQJV-I@;lUIB^Ev0t<(}<- zre|Bf-a7PCcJeVp=_Y0pjXq-z;R~sJP)?^CGY8*63oqh)yos}LY=$v;xDfUK>u?6P z<5=8_Mfegf!E=~~zha#+L*^Ehb#yG@X&J`#_$k(6Ql>FmaSc}B30#5SVgqK4Go}i6 zpuRtbjd%qMaQb*-vatp=!Ddu{$aBb;H>l`^BUpxakbkByD?Zb5)QW3R19f2~zKyH! z2V8@B6O1Xwok*8CjC$?_7UFlPoxG2WaMnb|VSH0hWhrh$z2FtB$B(fZ$4rX9a1~Cc zy*bf#P%C*3wX(O6Ej6Dc+V>ORPhGZ-4-0u3&T_%!PhVsN6^A6n1g>} zGA7aBR7@H^irGjSn7V`w$fITp>ODQEG}?z#@nE8T3bo*Ob2xvU^$j|-g8a$x2dhx+ z7F061SdNELXM7>izK2>s$&~nWjcCz+7B#^`=p6h&cz&Nt%;Xw z|L0L@Mh&K-W+MC9@qhn1xT`CVT?l$2R;6m6VNaUke_=75FnMNoVB8 zuX;PKr9E^xQOP7D_R-OV8u%*mmAQ*LiYc?>TULtNv0bqQSCa00(F~4CA{)1&$#eQi8eYgo#s)JSi)10qxCbF}{gX(N-Nt7GZ9o&MJe0Q__?oyKgE{-?t)TnlNgo zj-w`iKGA<2NfUDylQE0Yxbh|km6Qd@Z$RJiJ<8`*6$pfB(^Di=;+8jhfn z>O8K&JIHaHa%Q0cTTn;lAZsu$<0d?V+wdN0p)IUV+5a96=>^xQu-oPjEW!!w^E#}? z6g+^b_$pT8>!@G0tEjU~XMeS#9%Q#o7+Jh|6Lkb%peFte>fR?adODUZX8$v&)X*^o zHOneO=c^Y!DB1-*wi3Wo8cttm5Bca9U2$_d>q^ouQ%`{ZB zb&q?s_%7_E{tU66V1C}r!TW93c`MtsOIoSQT4D>)Nods@2o+sVm2yI>R$=43^0dys zDbdii(z&Wwgp%bcB8liGbW~dj<%o)p;CIHm@7vWuQ6BN5Xl$a3NF!8qypz0I{KF4Q z&Y^Zb_)F;}3i)9+6Dx=gLif9ks2~;)N*)rDXbpT~@afjQIP*!=drBQ?i@<{k={&?6@JT z%O7(5UB$5@*%hg+(T-jxGJGMs&^Ouc>~y1{h=%TR!gfbc58a&dV^&E;(bCGIrOT|6 zsu`9V#r}wtoosK_Xt?ZS%i``(rt?lWxo#1ft)U#vqE*-Q6?EZ*5da~1@9&~%0 z&gVmy4#vLBn;H8kuWZi4H82@#w?7=Q`rN*LdmuE}YkBMVJ@0zT_$D`Kdkg8mI6N@? z*{tT&iFN&Uz>0d0I{wiE#j(u!wQ1W1M^6Tw-NPH_kN652+)%`|qNAS=Mgs0Y$O+i- T0T{^+L!{^Hobg&+P0mvTK{ diff --git a/rest_framework/locale/pl/LC_MESSAGES/django.po b/rest_framework/locale/pl/LC_MESSAGES/django.po index 611426556..9e8d3eac3 100644 --- a/rest_framework/locale/pl/LC_MESSAGES/django.po +++ b/rest_framework/locale/pl/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: -# Janusz Harkot , 2015 +# Janusz Harkot , 2015 # Piotr Jakimiak , 2015 # m_aciek , 2016 # m_aciek , 2015-2016 @@ -11,9 +11,9 @@ msgid "" msgstr "" "Project-Id-Version: Django REST framework\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-07-12 16:13+0100\n" -"PO-Revision-Date: 2017-08-03 14:58+0000\n" -"Last-Translator: m_aciek \n" +"POT-Creation-Date: 2020-10-13 21:45+0200\n" +"PO-Revision-Date: 2020-10-13 19:45+0000\n" +"Last-Translator: Xavier Ordoquy \n" "Language-Team: Polish (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/pl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,40 +21,40 @@ msgstr "" "Language: pl\n" "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" -#: authentication.py:73 +#: authentication.py:70 msgid "Invalid basic header. No credentials provided." msgstr "Niepoprawny podstawowy nagłówek. Brak danych uwierzytelniających." -#: authentication.py:76 +#: authentication.py:73 msgid "Invalid basic header. Credentials string should not contain spaces." msgstr "Niepoprawny podstawowy nagłówek. Ciąg znaków danych uwierzytelniających nie powinien zawierać spacji." -#: authentication.py:82 +#: authentication.py:83 msgid "Invalid basic header. Credentials not correctly base64 encoded." msgstr "Niepoprawny podstawowy nagłówek. Niewłaściwe kodowanie base64 danych uwierzytelniających." -#: authentication.py:99 +#: authentication.py:101 msgid "Invalid username/password." msgstr "Niepoprawna nazwa użytkownika lub hasło." -#: authentication.py:102 authentication.py:198 +#: authentication.py:104 authentication.py:206 msgid "User inactive or deleted." msgstr "Użytkownik nieaktywny lub usunięty." -#: authentication.py:176 +#: authentication.py:184 msgid "Invalid token header. No credentials provided." msgstr "Niepoprawny nagłówek tokena. Brak danych uwierzytelniających." -#: authentication.py:179 +#: authentication.py:187 msgid "Invalid token header. Token string should not contain spaces." msgstr "Niepoprawny nagłówek tokena. Token nie może zawierać odstępów." -#: authentication.py:185 +#: authentication.py:193 msgid "" "Invalid token header. Token string should not contain invalid characters." msgstr "Błędny nagłówek z tokenem. Token nie może zawierać błędnych znaków." -#: authentication.py:195 +#: authentication.py:203 msgid "Invalid token." msgstr "Niepoprawny token." @@ -62,382 +62,515 @@ msgstr "Niepoprawny token." msgid "Auth Token" msgstr "Token uwierzytelniający" -#: authtoken/models.py:15 +#: authtoken/models.py:13 msgid "Key" msgstr "Klucz" -#: authtoken/models.py:18 +#: authtoken/models.py:16 msgid "User" msgstr "Użytkownik" -#: authtoken/models.py:20 +#: authtoken/models.py:18 msgid "Created" msgstr "Stworzono" -#: authtoken/models.py:29 +#: authtoken/models.py:27 authtoken/serializers.py:19 msgid "Token" msgstr "Token" -#: authtoken/models.py:30 +#: authtoken/models.py:28 msgid "Tokens" msgstr "Tokeny" -#: authtoken/serializers.py:8 +#: authtoken/serializers.py:9 msgid "Username" msgstr "Nazwa użytkownika" -#: authtoken/serializers.py:9 +#: authtoken/serializers.py:13 msgid "Password" msgstr "Hasło" -#: authtoken/serializers.py:20 -msgid "User account is disabled." -msgstr "Konto użytkownika jest nieaktywne." - -#: authtoken/serializers.py:23 +#: authtoken/serializers.py:35 msgid "Unable to log in with provided credentials." msgstr "Podane dane uwierzytelniające nie pozwalają na zalogowanie." -#: authtoken/serializers.py:26 +#: authtoken/serializers.py:38 msgid "Must include \"username\" and \"password\"." msgstr "Musi zawierać \"username\" i \"password\"." -#: exceptions.py:49 +#: exceptions.py:102 msgid "A server error occurred." msgstr "Wystąpił błąd serwera." -#: exceptions.py:84 +#: exceptions.py:142 +msgid "Invalid input." +msgstr "" + +#: exceptions.py:161 msgid "Malformed request." msgstr "Zniekształcone żądanie." -#: exceptions.py:89 +#: exceptions.py:167 msgid "Incorrect authentication credentials." msgstr "Błędne dane uwierzytelniające." -#: exceptions.py:94 +#: exceptions.py:173 msgid "Authentication credentials were not provided." msgstr "Nie podano danych uwierzytelniających." -#: exceptions.py:99 +#: exceptions.py:179 msgid "You do not have permission to perform this action." msgstr "Nie masz uprawnień, by wykonać tę czynność." -#: exceptions.py:104 views.py:81 +#: exceptions.py:185 msgid "Not found." msgstr "Nie znaleziono." -#: exceptions.py:109 +#: exceptions.py:191 +#, python-brace-format msgid "Method \"{method}\" not allowed." msgstr "Niedozwolona metoda \"{method}\"." -#: exceptions.py:120 +#: exceptions.py:202 msgid "Could not satisfy the request Accept header." msgstr "Nie można zaspokoić nagłówka Accept żądania." -#: exceptions.py:132 +#: exceptions.py:212 +#, python-brace-format msgid "Unsupported media type \"{media_type}\" in request." msgstr "Brak wsparcia dla żądanego typu danych \"{media_type}\"." -#: exceptions.py:145 +#: exceptions.py:223 msgid "Request was throttled." msgstr "Żądanie zostało zdławione." -#: fields.py:269 relations.py:206 relations.py:239 validators.py:98 -#: validators.py:181 +#: exceptions.py:224 +#, python-brace-format +msgid "Expected available in {wait} second." +msgstr "" + +#: exceptions.py:225 +#, python-brace-format +msgid "Expected available in {wait} seconds." +msgstr "" + +#: fields.py:316 relations.py:245 relations.py:279 validators.py:90 +#: validators.py:183 msgid "This field is required." msgstr "To pole jest wymagane." -#: fields.py:270 +#: fields.py:317 msgid "This field may not be null." msgstr "Pole nie może mieć wartości null." -#: fields.py:608 fields.py:639 -msgid "\"{input}\" is not a valid boolean." -msgstr "\"{input}\" nie jest poprawną wartością logiczną." +#: fields.py:701 +msgid "Must be a valid boolean." +msgstr "" -#: fields.py:674 +#: fields.py:766 +msgid "Not a valid string." +msgstr "" + +#: fields.py:767 msgid "This field may not be blank." msgstr "To pole nie może być puste." -#: fields.py:675 fields.py:1675 +#: fields.py:768 fields.py:1881 +#, python-brace-format msgid "Ensure this field has no more than {max_length} characters." msgstr "Upewnij się, że to pole ma nie więcej niż {max_length} znaków." -#: fields.py:676 +#: fields.py:769 +#, python-brace-format msgid "Ensure this field has at least {min_length} characters." msgstr "Upewnij się, że pole ma co najmniej {min_length} znaków." -#: fields.py:713 +#: fields.py:816 msgid "Enter a valid email address." msgstr "Podaj poprawny adres e-mail." -#: fields.py:724 +#: fields.py:827 msgid "This value does not match the required pattern." msgstr "Ta wartość nie pasuje do wymaganego wzorca." -#: fields.py:735 +#: fields.py:838 msgid "" "Enter a valid \"slug\" consisting of letters, numbers, underscores or " "hyphens." msgstr "Wprowadź poprawną wartość pola typu \"slug\", składającą się ze znaków łacińskich, cyfr, podkreślenia lub myślnika." -#: fields.py:747 +#: fields.py:839 +msgid "" +"Enter a valid \"slug\" consisting of Unicode letters, numbers, underscores, " +"or hyphens." +msgstr "" + +#: fields.py:854 msgid "Enter a valid URL." msgstr "Wprowadź poprawny adres URL." -#: fields.py:760 -msgid "\"{value}\" is not a valid UUID." -msgstr "\"{value}\" nie jest poprawnym UUID." +#: fields.py:867 +msgid "Must be a valid UUID." +msgstr "" -#: fields.py:796 +#: fields.py:903 msgid "Enter a valid IPv4 or IPv6 address." msgstr "Wprowadź poprawny adres IPv4 lub IPv6." -#: fields.py:821 +#: fields.py:931 msgid "A valid integer is required." msgstr "Wymagana poprawna liczba całkowita." -#: fields.py:822 fields.py:857 fields.py:891 +#: fields.py:932 fields.py:969 fields.py:1005 fields.py:1366 +#, python-brace-format msgid "Ensure this value is less than or equal to {max_value}." msgstr "Upewnij się, że ta wartość jest mniejsza lub równa {max_value}." -#: fields.py:823 fields.py:858 fields.py:892 +#: fields.py:933 fields.py:970 fields.py:1006 fields.py:1367 +#, python-brace-format msgid "Ensure this value is greater than or equal to {min_value}." msgstr "Upewnij się, że ta wartość jest większa lub równa {min_value}." -#: fields.py:824 fields.py:859 fields.py:896 +#: fields.py:934 fields.py:971 fields.py:1010 msgid "String value too large." msgstr "Za długi ciąg znaków." -#: fields.py:856 fields.py:890 +#: fields.py:968 fields.py:1004 msgid "A valid number is required." msgstr "Wymagana poprawna liczba." -#: fields.py:893 +#: fields.py:1007 +#, python-brace-format msgid "Ensure that there are no more than {max_digits} digits in total." msgstr "Upewnij się, że liczba ma nie więcej niż {max_digits} cyfr." -#: fields.py:894 +#: fields.py:1008 +#, python-brace-format msgid "" "Ensure that there are no more than {max_decimal_places} decimal places." msgstr "Upewnij się, że liczba ma nie więcej niż {max_decimal_places} cyfr dziesiętnych." -#: fields.py:895 +#: fields.py:1009 +#, python-brace-format msgid "" "Ensure that there are no more than {max_whole_digits} digits before the " "decimal point." msgstr "Upewnij się, że liczba ma nie więcej niż {max_whole_digits} cyfr całkowitych." -#: fields.py:1025 +#: fields.py:1148 +#, python-brace-format msgid "Datetime has wrong format. Use one of these formats instead: {format}." msgstr "Wartość daty z czasem ma zły format. Użyj jednego z dostępnych formatów: {format}." -#: fields.py:1026 +#: fields.py:1149 msgid "Expected a datetime but got a date." msgstr "Oczekiwano datę z czasem, otrzymano tylko datę." -#: fields.py:1103 +#: fields.py:1150 +#, python-brace-format +msgid "Invalid datetime for the timezone \"{timezone}\"." +msgstr "" + +#: fields.py:1151 +msgid "Datetime value out of range." +msgstr "" + +#: fields.py:1236 +#, python-brace-format msgid "Date has wrong format. Use one of these formats instead: {format}." msgstr "Data ma zły format. Użyj jednego z tych formatów: {format}." -#: fields.py:1104 +#: fields.py:1237 msgid "Expected a date but got a datetime." msgstr "Oczekiwano daty a otrzymano datę z czasem." -#: fields.py:1170 +#: fields.py:1303 +#, python-brace-format msgid "Time has wrong format. Use one of these formats instead: {format}." msgstr "Błędny format czasu. Użyj jednego z dostępnych formatów: {format}" -#: fields.py:1232 +#: fields.py:1365 +#, python-brace-format msgid "Duration has wrong format. Use one of these formats instead: {format}." msgstr "Czas trwania ma zły format. Użyj w zamian jednego z tych formatów: {format}." -#: fields.py:1251 fields.py:1300 +#: fields.py:1399 fields.py:1456 +#, python-brace-format msgid "\"{input}\" is not a valid choice." msgstr "\"{input}\" nie jest poprawnym wyborem." -#: fields.py:1254 relations.py:71 relations.py:441 +#: fields.py:1402 +#, python-brace-format msgid "More than {count} items..." msgstr "Więcej niż {count} elementów..." -#: fields.py:1301 fields.py:1448 relations.py:437 serializers.py:524 +#: fields.py:1457 fields.py:1603 relations.py:485 serializers.py:570 +#, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "Oczekiwano listy elementów, a otrzymano dane typu \"{input_type}\"." -#: fields.py:1302 +#: fields.py:1458 msgid "This selection may not be empty." msgstr "Zaznaczenie nie może być puste." -#: fields.py:1339 +#: fields.py:1495 +#, python-brace-format msgid "\"{input}\" is not a valid path choice." msgstr "\"{input}\" nie jest poprawną ścieżką." -#: fields.py:1358 +#: fields.py:1514 msgid "No file was submitted." msgstr "Nie przesłano pliku." -#: fields.py:1359 +#: fields.py:1515 msgid "" "The submitted data was not a file. Check the encoding type on the form." msgstr "Przesłane dane nie były plikiem. Sprawdź typ kodowania formatki." -#: fields.py:1360 +#: fields.py:1516 msgid "No filename could be determined." msgstr "Nie można określić nazwy pliku." -#: fields.py:1361 +#: fields.py:1517 msgid "The submitted file is empty." msgstr "Przesłany plik jest pusty." -#: fields.py:1362 +#: fields.py:1518 +#, python-brace-format msgid "" "Ensure this filename has at most {max_length} characters (it has {length})." msgstr "Upewnij się, że nazwa pliku ma długość co najwyżej {max_length} znaków (aktualnie ma {length})." -#: fields.py:1410 +#: fields.py:1566 msgid "" "Upload a valid image. The file you uploaded was either not an image or a " "corrupted image." msgstr "Prześlij poprawny plik graficzny. Przesłany plik albo nie jest grafiką lub jest uszkodzony." -#: fields.py:1449 relations.py:438 serializers.py:525 +#: fields.py:1604 relations.py:486 serializers.py:571 msgid "This list may not be empty." msgstr "Lista nie może być pusta." -#: fields.py:1502 +#: fields.py:1605 +#, python-brace-format +msgid "Ensure this field has at least {min_length} elements." +msgstr "" + +#: fields.py:1606 +#, python-brace-format +msgid "Ensure this field has no more than {max_length} elements." +msgstr "" + +#: fields.py:1682 +#, python-brace-format msgid "Expected a dictionary of items but got type \"{input_type}\"." msgstr "Oczekiwano słownika, ale otrzymano \"{input_type}\"." -#: fields.py:1549 +#: fields.py:1683 +msgid "This dictionary may not be empty." +msgstr "" + +#: fields.py:1755 msgid "Value must be valid JSON." msgstr "Wartość musi być poprawnym ciągiem znaków JSON" -#: filters.py:36 templates/rest_framework/filters/django_filter.html:5 -msgid "Submit" -msgstr "Wyślij" +#: filters.py:49 templates/rest_framework/filters/search.html:2 +msgid "Search" +msgstr "Szukaj" -#: filters.py:336 +#: filters.py:50 +msgid "A search term." +msgstr "" + +#: filters.py:180 templates/rest_framework/filters/ordering.html:3 +msgid "Ordering" +msgstr "Kolejność" + +#: filters.py:181 +msgid "Which field to use when ordering the results." +msgstr "" + +#: filters.py:287 msgid "ascending" msgstr "rosnąco" -#: filters.py:337 +#: filters.py:288 msgid "descending" msgstr "malejąco" -#: pagination.py:193 +#: pagination.py:174 +msgid "A page number within the paginated result set." +msgstr "" + +#: pagination.py:179 pagination.py:372 pagination.py:590 +msgid "Number of results to return per page." +msgstr "" + +#: pagination.py:189 msgid "Invalid page." msgstr "Niepoprawna strona." -#: pagination.py:427 +#: pagination.py:374 +msgid "The initial index from which to return the results." +msgstr "" + +#: pagination.py:581 +msgid "The pagination cursor value." +msgstr "" + +#: pagination.py:583 msgid "Invalid cursor" msgstr "Niepoprawny wskaźnik" -#: relations.py:207 +#: relations.py:246 +#, python-brace-format msgid "Invalid pk \"{pk_value}\" - object does not exist." msgstr "Błędny klucz główny \"{pk_value}\" - obiekt nie istnieje." -#: relations.py:208 +#: relations.py:247 +#, python-brace-format msgid "Incorrect type. Expected pk value, received {data_type}." msgstr "Błędny typ danych. Oczekiwano wartość klucza głównego, otrzymano {data_type}." -#: relations.py:240 +#: relations.py:280 msgid "Invalid hyperlink - No URL match." msgstr "Błędny hyperlink - nie znaleziono pasującego adresu URL." -#: relations.py:241 +#: relations.py:281 msgid "Invalid hyperlink - Incorrect URL match." msgstr "Błędny hyperlink - błędne dopasowanie adresu URL." -#: relations.py:242 +#: relations.py:282 msgid "Invalid hyperlink - Object does not exist." msgstr "Błędny hyperlink - obiekt nie istnieje." -#: relations.py:243 +#: relations.py:283 +#, python-brace-format msgid "Incorrect type. Expected URL string, received {data_type}." msgstr "Błędny typ danych. Oczekiwano adresu URL, otrzymano {data_type}" -#: relations.py:401 +#: relations.py:448 +#, python-brace-format msgid "Object with {slug_name}={value} does not exist." msgstr "Obiekt z polem {slug_name}={value} nie istnieje" -#: relations.py:402 +#: relations.py:449 msgid "Invalid value." msgstr "Niepoprawna wartość." -#: serializers.py:326 +#: schemas/utils.py:32 +msgid "unique integer value" +msgstr "" + +#: schemas/utils.py:34 +msgid "UUID string" +msgstr "" + +#: schemas/utils.py:36 +msgid "unique value" +msgstr "" + +#: schemas/utils.py:38 +#, python-brace-format +msgid "A {value_type} identifying this {name}." +msgstr "" + +#: serializers.py:337 +#, python-brace-format msgid "Invalid data. Expected a dictionary, but got {datatype}." msgstr "Niepoprawne dane. Oczekiwano słownika, otrzymano {datatype}." #: templates/rest_framework/admin.html:116 -#: templates/rest_framework/base.html:128 +#: templates/rest_framework/base.html:136 +msgid "Extra Actions" +msgstr "" + +#: templates/rest_framework/admin.html:130 +#: templates/rest_framework/base.html:150 msgid "Filters" msgstr "Filtry" -#: templates/rest_framework/filters/django_filter.html:2 -#: templates/rest_framework/filters/django_filter_crispyforms.html:4 -msgid "Field filters" -msgstr "Pola filtrów" +#: templates/rest_framework/base.html:37 +msgid "navbar" +msgstr "" -#: templates/rest_framework/filters/ordering.html:3 -msgid "Ordering" -msgstr "Kolejność" +#: templates/rest_framework/base.html:75 +msgid "content" +msgstr "" -#: templates/rest_framework/filters/search.html:2 -msgid "Search" -msgstr "Szukaj" +#: templates/rest_framework/base.html:78 +msgid "request form" +msgstr "" -#: templates/rest_framework/horizontal/radio.html:2 -#: templates/rest_framework/inline/radio.html:2 -#: templates/rest_framework/vertical/radio.html:2 +#: templates/rest_framework/base.html:157 +msgid "main content" +msgstr "" + +#: templates/rest_framework/base.html:173 +msgid "request info" +msgstr "" + +#: templates/rest_framework/base.html:177 +msgid "response info" +msgstr "" + +#: templates/rest_framework/horizontal/radio.html:4 +#: templates/rest_framework/inline/radio.html:3 +#: templates/rest_framework/vertical/radio.html:3 msgid "None" msgstr "None" -#: templates/rest_framework/horizontal/select_multiple.html:2 -#: templates/rest_framework/inline/select_multiple.html:2 -#: templates/rest_framework/vertical/select_multiple.html:2 +#: templates/rest_framework/horizontal/select_multiple.html:4 +#: templates/rest_framework/inline/select_multiple.html:3 +#: templates/rest_framework/vertical/select_multiple.html:3 msgid "No items to select." msgstr "Nie wybrano wartości." -#: validators.py:43 +#: validators.py:39 msgid "This field must be unique." msgstr "Wartość dla tego pola musi być unikalna." -#: validators.py:97 +#: validators.py:89 +#, python-brace-format msgid "The fields {field_names} must make a unique set." msgstr "Pola {field_names} muszą tworzyć unikalny zestaw." -#: validators.py:245 +#: validators.py:171 +#, python-brace-format +msgid "Surrogate characters are not allowed: U+{code_point:X}." +msgstr "" + +#: validators.py:243 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" date." msgstr "To pole musi mieć unikalną wartość dla jednej daty z pola \"{date_field}\"." -#: validators.py:260 +#: validators.py:258 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" month." msgstr "To pole musi mieć unikalną wartość dla konkretnego miesiąca z pola \"{date_field}\"." -#: validators.py:273 +#: validators.py:271 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" year." msgstr "To pole musi mieć unikalną wartość dla konkretnego roku z pola \"{date_field}\"." -#: versioning.py:42 +#: versioning.py:40 msgid "Invalid version in \"Accept\" header." msgstr "Błędna wersja w nagłówku \"Accept\"." -#: versioning.py:73 +#: versioning.py:71 msgid "Invalid version in URL path." msgstr "Błędna wersja w ścieżce URL." -#: versioning.py:115 +#: versioning.py:116 msgid "Invalid version in URL path. Does not match any version namespace." msgstr "Niepoprawna wersja w ścieżce URL. Nie pasuje do przestrzeni nazw żadnej wersji." -#: versioning.py:147 +#: versioning.py:148 msgid "Invalid version in hostname." msgstr "Błędna wersja w nazwie hosta." -#: versioning.py:169 +#: versioning.py:170 msgid "Invalid version in query parameter." msgstr "Błędna wersja w parametrach zapytania." - -#: views.py:88 -msgid "Permission denied." -msgstr "Brak uprawnień." diff --git a/rest_framework/locale/pt/LC_MESSAGES/django.mo b/rest_framework/locale/pt/LC_MESSAGES/django.mo index c88991bfa6fadadcefa6b6f09f12214ec7c5ff1d..653cce97ebb8df40090f661e659d22b6d322575d 100644 GIT binary patch literal 10382 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 diff --git a/rest_framework/locale/pt/LC_MESSAGES/django.po b/rest_framework/locale/pt/LC_MESSAGES/django.po index 9f1de1938..4cdf2bc4f 100644 --- a/rest_framework/locale/pt/LC_MESSAGES/django.po +++ b/rest_framework/locale/pt/LC_MESSAGES/django.po @@ -3,13 +3,18 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Craig Blaszczyk , 2015 +# Ederson Mota Pereira , 2015 +# Filipe Rinaldi , 2015 +# Hugo Leonardo Chalhoub Mendonça , 2015 +# Jonatas Baldin , 2017 msgid "" msgstr "" "Project-Id-Version: Django REST framework\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-07-12 16:13+0100\n" -"PO-Revision-Date: 2016-07-12 15:14+0000\n" -"Last-Translator: Thomas Christie \n" +"POT-Creation-Date: 2020-10-13 21:45+0200\n" +"PO-Revision-Date: 2020-10-13 19:45+0000\n" +"Last-Translator: Xavier Ordoquy \n" "Language-Team: Portuguese (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/pt/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,423 +22,556 @@ msgstr "" "Language: pt\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: authentication.py:73 +#: authentication.py:70 msgid "Invalid basic header. No credentials provided." -msgstr "" +msgstr "Cabeçalho básico inválido. Credenciais não fornecidas." -#: authentication.py:76 +#: authentication.py:73 msgid "Invalid basic header. Credentials string should not contain spaces." -msgstr "" +msgstr "Cabeçalho básico inválido. String de credenciais não deve incluir espaços." -#: authentication.py:82 +#: authentication.py:83 msgid "Invalid basic header. Credentials not correctly base64 encoded." -msgstr "" +msgstr "Cabeçalho básico inválido. Credenciais codificadas em base64 incorretamente." -#: authentication.py:99 +#: authentication.py:101 msgid "Invalid username/password." -msgstr "" +msgstr "Usuário ou senha inválido." -#: authentication.py:102 authentication.py:198 +#: authentication.py:104 authentication.py:206 msgid "User inactive or deleted." -msgstr "" +msgstr "Usuário inativo ou removido." -#: authentication.py:176 +#: authentication.py:184 msgid "Invalid token header. No credentials provided." -msgstr "" +msgstr "Cabeçalho de token inválido. Credenciais não fornecidas." -#: authentication.py:179 +#: authentication.py:187 msgid "Invalid token header. Token string should not contain spaces." -msgstr "" +msgstr "Cabeçalho de token inválido. String de token não deve incluir espaços." -#: authentication.py:185 +#: authentication.py:193 msgid "" "Invalid token header. Token string should not contain invalid characters." -msgstr "" +msgstr "Cabeçalho de token inválido. String de token não deve possuir caracteres inválidos." -#: authentication.py:195 +#: authentication.py:203 msgid "Invalid token." -msgstr "" +msgstr "Token inválido." #: authtoken/apps.py:7 msgid "Auth Token" -msgstr "" +msgstr "Token de autenticação" -#: authtoken/models.py:15 +#: authtoken/models.py:13 msgid "Key" -msgstr "" +msgstr "Chave" + +#: authtoken/models.py:16 +msgid "User" +msgstr "Usuário" #: authtoken/models.py:18 -msgid "User" -msgstr "" - -#: authtoken/models.py:20 msgid "Created" -msgstr "" +msgstr "Criado" -#: authtoken/models.py:29 +#: authtoken/models.py:27 authtoken/serializers.py:19 msgid "Token" -msgstr "" +msgstr "Token" -#: authtoken/models.py:30 +#: authtoken/models.py:28 msgid "Tokens" -msgstr "" - -#: authtoken/serializers.py:8 -msgid "Username" -msgstr "" +msgstr "Tokens" #: authtoken/serializers.py:9 +msgid "Username" +msgstr "Nome do usuário" + +#: authtoken/serializers.py:13 msgid "Password" -msgstr "" +msgstr "Senha" -#: authtoken/serializers.py:20 -msgid "User account is disabled." -msgstr "" - -#: authtoken/serializers.py:23 +#: authtoken/serializers.py:35 msgid "Unable to log in with provided credentials." -msgstr "" +msgstr "Impossível fazer login com as credenciais fornecidas." -#: authtoken/serializers.py:26 +#: authtoken/serializers.py:38 msgid "Must include \"username\" and \"password\"." -msgstr "" +msgstr "Obrigatório incluir \"usuário\" e \"senha\"." -#: exceptions.py:49 +#: exceptions.py:102 msgid "A server error occurred." +msgstr "Ocorreu um erro de servidor." + +#: exceptions.py:142 +msgid "Invalid input." msgstr "" -#: exceptions.py:84 +#: exceptions.py:161 msgid "Malformed request." -msgstr "" +msgstr "Pedido malformado." -#: exceptions.py:89 +#: exceptions.py:167 msgid "Incorrect authentication credentials." -msgstr "" +msgstr "Credenciais de autenticação incorretas." -#: exceptions.py:94 +#: exceptions.py:173 msgid "Authentication credentials were not provided." -msgstr "" +msgstr "As credenciais de autenticação não foram fornecidas." -#: exceptions.py:99 +#: exceptions.py:179 msgid "You do not have permission to perform this action." -msgstr "" +msgstr "Você não tem permissão para executar essa ação." -#: exceptions.py:104 views.py:81 +#: exceptions.py:185 msgid "Not found." -msgstr "" +msgstr "Não encontrado." -#: exceptions.py:109 +#: exceptions.py:191 +#, python-brace-format msgid "Method \"{method}\" not allowed." -msgstr "" +msgstr "Método \"{method}\" não é permitido." -#: exceptions.py:120 +#: exceptions.py:202 msgid "Could not satisfy the request Accept header." -msgstr "" +msgstr "Não foi possível satisfazer a requisição do cabeçalho Accept." -#: exceptions.py:132 +#: exceptions.py:212 +#, python-brace-format msgid "Unsupported media type \"{media_type}\" in request." -msgstr "" +msgstr "Tipo de mídia \"{media_type}\" no pedido não é suportado." -#: exceptions.py:145 +#: exceptions.py:223 msgid "Request was throttled." +msgstr "Pedido foi limitado." + +#: exceptions.py:224 +#, python-brace-format +msgid "Expected available in {wait} second." msgstr "" -#: fields.py:269 relations.py:206 relations.py:239 validators.py:98 -#: validators.py:181 +#: exceptions.py:225 +#, python-brace-format +msgid "Expected available in {wait} seconds." +msgstr "" + +#: fields.py:316 relations.py:245 relations.py:279 validators.py:90 +#: validators.py:183 msgid "This field is required." -msgstr "" +msgstr "Este campo é obrigatório." -#: fields.py:270 +#: fields.py:317 msgid "This field may not be null." +msgstr "Este campo não pode ser nulo." + +#: fields.py:701 +msgid "Must be a valid boolean." msgstr "" -#: fields.py:608 fields.py:639 -msgid "\"{input}\" is not a valid boolean." +#: fields.py:766 +msgid "Not a valid string." msgstr "" -#: fields.py:674 +#: fields.py:767 msgid "This field may not be blank." -msgstr "" +msgstr "Este campo não pode ser em branco." -#: fields.py:675 fields.py:1675 +#: fields.py:768 fields.py:1881 +#, python-brace-format msgid "Ensure this field has no more than {max_length} characters." -msgstr "" +msgstr "Certifique-se de que este campo não tenha mais de {max_length} caracteres." -#: fields.py:676 +#: fields.py:769 +#, python-brace-format msgid "Ensure this field has at least {min_length} characters." -msgstr "" +msgstr "Certifique-se de que este campo tenha mais de {min_length} caracteres." -#: fields.py:713 +#: fields.py:816 msgid "Enter a valid email address." -msgstr "" +msgstr "Insira um endereço de email válido." -#: fields.py:724 +#: fields.py:827 msgid "This value does not match the required pattern." -msgstr "" +msgstr "Este valor não corresponde ao padrão exigido." -#: fields.py:735 +#: fields.py:838 msgid "" "Enter a valid \"slug\" consisting of letters, numbers, underscores or " "hyphens." +msgstr "Entrar um \"slug\" válido que consista de letras, números, sublinhados ou hífens." + +#: fields.py:839 +msgid "" +"Enter a valid \"slug\" consisting of Unicode letters, numbers, underscores, " +"or hyphens." msgstr "" -#: fields.py:747 +#: fields.py:854 msgid "Enter a valid URL." +msgstr "Entrar um URL válido." + +#: fields.py:867 +msgid "Must be a valid UUID." msgstr "" -#: fields.py:760 -msgid "\"{value}\" is not a valid UUID." -msgstr "" - -#: fields.py:796 +#: fields.py:903 msgid "Enter a valid IPv4 or IPv6 address." -msgstr "" +msgstr "Informe um endereço IPv4 ou IPv6 válido." -#: fields.py:821 +#: fields.py:931 msgid "A valid integer is required." -msgstr "" +msgstr "Um número inteiro válido é exigido." -#: fields.py:822 fields.py:857 fields.py:891 +#: fields.py:932 fields.py:969 fields.py:1005 fields.py:1366 +#, python-brace-format msgid "Ensure this value is less than or equal to {max_value}." -msgstr "" +msgstr "Certifique-se de que este valor seja inferior ou igual a {max_value}." -#: fields.py:823 fields.py:858 fields.py:892 +#: fields.py:933 fields.py:970 fields.py:1006 fields.py:1367 +#, python-brace-format msgid "Ensure this value is greater than or equal to {min_value}." -msgstr "" +msgstr "Certifque-se de que este valor seja maior ou igual a {min_value}." -#: fields.py:824 fields.py:859 fields.py:896 +#: fields.py:934 fields.py:971 fields.py:1010 msgid "String value too large." -msgstr "" +msgstr "Valor da string é muito grande." -#: fields.py:856 fields.py:890 +#: fields.py:968 fields.py:1004 msgid "A valid number is required." -msgstr "" +msgstr "Um número válido é necessário." -#: fields.py:893 +#: fields.py:1007 +#, python-brace-format msgid "Ensure that there are no more than {max_digits} digits in total." -msgstr "" +msgstr "Certifique-se de que não haja mais de {max_digits} dígitos no total." -#: fields.py:894 +#: fields.py:1008 +#, python-brace-format msgid "" "Ensure that there are no more than {max_decimal_places} decimal places." -msgstr "" +msgstr "Certifique-se de que não haja mais de {max_decimal_places} casas decimais." -#: fields.py:895 +#: fields.py:1009 +#, python-brace-format msgid "" "Ensure that there are no more than {max_whole_digits} digits before the " "decimal point." -msgstr "" +msgstr "Certifique-se de que não haja mais de {max_whole_digits} dígitos antes do ponto decimal." -#: fields.py:1025 +#: fields.py:1148 +#, python-brace-format msgid "Datetime has wrong format. Use one of these formats instead: {format}." -msgstr "" +msgstr "Formato inválido para data e hora. Use um dos formatos a seguir: {format}." -#: fields.py:1026 +#: fields.py:1149 msgid "Expected a datetime but got a date." +msgstr "Necessário uma data e hora mas recebeu uma data." + +#: fields.py:1150 +#, python-brace-format +msgid "Invalid datetime for the timezone \"{timezone}\"." msgstr "" -#: fields.py:1103 +#: fields.py:1151 +msgid "Datetime value out of range." +msgstr "" + +#: fields.py:1236 +#, python-brace-format msgid "Date has wrong format. Use one of these formats instead: {format}." -msgstr "" +msgstr "Formato inválido para data. Use um dos formatos a seguir: {format}." -#: fields.py:1104 +#: fields.py:1237 msgid "Expected a date but got a datetime." -msgstr "" +msgstr "Necessário uma data mas recebeu uma data e hora." -#: fields.py:1170 +#: fields.py:1303 +#, python-brace-format msgid "Time has wrong format. Use one of these formats instead: {format}." -msgstr "" +msgstr "Formato inválido para Tempo. Use um dos formatos a seguir: {format}." -#: fields.py:1232 +#: fields.py:1365 +#, python-brace-format msgid "Duration has wrong format. Use one of these formats instead: {format}." -msgstr "" +msgstr "Formato inválido para Duração. Use um dos formatos a seguir: {format}." -#: fields.py:1251 fields.py:1300 +#: fields.py:1399 fields.py:1456 +#, python-brace-format msgid "\"{input}\" is not a valid choice." -msgstr "" +msgstr "\"{input}\" não é um escolha válido." -#: fields.py:1254 relations.py:71 relations.py:441 +#: fields.py:1402 +#, python-brace-format msgid "More than {count} items..." -msgstr "" +msgstr "Mais de {count} itens..." -#: fields.py:1301 fields.py:1448 relations.py:437 serializers.py:524 +#: fields.py:1457 fields.py:1603 relations.py:485 serializers.py:570 +#, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." -msgstr "" +msgstr "Necessário uma lista de itens, mas recebeu tipo \"{input_type}\"." -#: fields.py:1302 +#: fields.py:1458 msgid "This selection may not be empty." -msgstr "" +msgstr "Esta seleção não pode estar vazia." -#: fields.py:1339 +#: fields.py:1495 +#, python-brace-format msgid "\"{input}\" is not a valid path choice." -msgstr "" +msgstr "\"{input}\" não é uma escolha válida para um caminho." -#: fields.py:1358 +#: fields.py:1514 msgid "No file was submitted." -msgstr "" +msgstr "Nenhum arquivo foi submetido." -#: fields.py:1359 +#: fields.py:1515 msgid "" "The submitted data was not a file. Check the encoding type on the form." -msgstr "" +msgstr "O dado submetido não é um arquivo. Certifique-se do tipo de codificação no formulário." -#: fields.py:1360 +#: fields.py:1516 msgid "No filename could be determined." -msgstr "" +msgstr "Nome do arquivo não pode ser determinado." -#: fields.py:1361 +#: fields.py:1517 msgid "The submitted file is empty." -msgstr "" +msgstr "O arquivo submetido está vázio." -#: fields.py:1362 +#: fields.py:1518 +#, python-brace-format msgid "" "Ensure this filename has at most {max_length} characters (it has {length})." -msgstr "" +msgstr "Certifique-se de que o nome do arquivo tem menos de {max_length} caracteres (tem {length})." -#: fields.py:1410 +#: fields.py:1566 msgid "" "Upload a valid image. The file you uploaded was either not an image or a " "corrupted image." -msgstr "" +msgstr "Fazer upload de uma imagem válida. O arquivo enviado não é um arquivo de imagem ou está corrompido." -#: fields.py:1449 relations.py:438 serializers.py:525 +#: fields.py:1604 relations.py:486 serializers.py:571 msgid "This list may not be empty." +msgstr "Esta lista não pode estar vazia." + +#: fields.py:1605 +#, python-brace-format +msgid "Ensure this field has at least {min_length} elements." msgstr "" -#: fields.py:1502 +#: fields.py:1606 +#, python-brace-format +msgid "Ensure this field has no more than {max_length} elements." +msgstr "" + +#: fields.py:1682 +#, python-brace-format msgid "Expected a dictionary of items but got type \"{input_type}\"." +msgstr "Esperado um dicionário de itens mas recebeu tipo \"{input_type}\"." + +#: fields.py:1683 +msgid "This dictionary may not be empty." msgstr "" -#: fields.py:1549 +#: fields.py:1755 msgid "Value must be valid JSON." +msgstr "Valor devo ser JSON válido." + +#: filters.py:49 templates/rest_framework/filters/search.html:2 +msgid "Search" +msgstr "Buscar" + +#: filters.py:50 +msgid "A search term." msgstr "" -#: filters.py:36 templates/rest_framework/filters/django_filter.html:5 -msgid "Submit" +#: filters.py:180 templates/rest_framework/filters/ordering.html:3 +msgid "Ordering" +msgstr "Ordenando" + +#: filters.py:181 +msgid "Which field to use when ordering the results." msgstr "" -#: filters.py:336 +#: filters.py:287 msgid "ascending" -msgstr "" +msgstr "ascendente" -#: filters.py:337 +#: filters.py:288 msgid "descending" +msgstr "descendente" + +#: pagination.py:174 +msgid "A page number within the paginated result set." msgstr "" -#: pagination.py:193 +#: pagination.py:179 pagination.py:372 pagination.py:590 +msgid "Number of results to return per page." +msgstr "" + +#: pagination.py:189 msgid "Invalid page." +msgstr "Página inválida." + +#: pagination.py:374 +msgid "The initial index from which to return the results." msgstr "" -#: pagination.py:427 +#: pagination.py:581 +msgid "The pagination cursor value." +msgstr "" + +#: pagination.py:583 msgid "Invalid cursor" -msgstr "" +msgstr "Cursor inválido" -#: relations.py:207 +#: relations.py:246 +#, python-brace-format msgid "Invalid pk \"{pk_value}\" - object does not exist." -msgstr "" +msgstr "Pk inválido \"{pk_value}\" - objeto não existe." -#: relations.py:208 +#: relations.py:247 +#, python-brace-format msgid "Incorrect type. Expected pk value, received {data_type}." -msgstr "" +msgstr "Tipo incorreto. Esperado valor pk, recebeu {data_type}." -#: relations.py:240 +#: relations.py:280 msgid "Invalid hyperlink - No URL match." -msgstr "" +msgstr "Hyperlink inválido - Sem combinação para a URL." -#: relations.py:241 +#: relations.py:281 msgid "Invalid hyperlink - Incorrect URL match." -msgstr "" +msgstr "Hyperlink inválido - Combinação URL incorreta." -#: relations.py:242 +#: relations.py:282 msgid "Invalid hyperlink - Object does not exist." -msgstr "" +msgstr "Hyperlink inválido - Objeto não existe." -#: relations.py:243 +#: relations.py:283 +#, python-brace-format msgid "Incorrect type. Expected URL string, received {data_type}." -msgstr "" +msgstr "Tipo incorreto. Necessário string URL, recebeu {data_type}." -#: relations.py:401 +#: relations.py:448 +#, python-brace-format msgid "Object with {slug_name}={value} does not exist." -msgstr "" +msgstr "Objeto com {slug_name}={value} não existe." -#: relations.py:402 +#: relations.py:449 msgid "Invalid value." +msgstr "Valor inválido." + +#: schemas/utils.py:32 +msgid "unique integer value" msgstr "" -#: serializers.py:326 -msgid "Invalid data. Expected a dictionary, but got {datatype}." +#: schemas/utils.py:34 +msgid "UUID string" msgstr "" +#: schemas/utils.py:36 +msgid "unique value" +msgstr "" + +#: schemas/utils.py:38 +#, python-brace-format +msgid "A {value_type} identifying this {name}." +msgstr "" + +#: serializers.py:337 +#, python-brace-format +msgid "Invalid data. Expected a dictionary, but got {datatype}." +msgstr "Dado inválido. Necessário um dicionário mas recebeu {datatype}." + #: templates/rest_framework/admin.html:116 -#: templates/rest_framework/base.html:128 +#: templates/rest_framework/base.html:136 +msgid "Extra Actions" +msgstr "" + +#: templates/rest_framework/admin.html:130 +#: templates/rest_framework/base.html:150 msgid "Filters" +msgstr "Filtra" + +#: templates/rest_framework/base.html:37 +msgid "navbar" msgstr "" -#: templates/rest_framework/filters/django_filter.html:2 -#: templates/rest_framework/filters/django_filter_crispyforms.html:4 -msgid "Field filters" +#: templates/rest_framework/base.html:75 +msgid "content" msgstr "" -#: templates/rest_framework/filters/ordering.html:3 -msgid "Ordering" +#: templates/rest_framework/base.html:78 +msgid "request form" msgstr "" -#: templates/rest_framework/filters/search.html:2 -msgid "Search" +#: templates/rest_framework/base.html:157 +msgid "main content" msgstr "" -#: templates/rest_framework/horizontal/radio.html:2 -#: templates/rest_framework/inline/radio.html:2 -#: templates/rest_framework/vertical/radio.html:2 +#: templates/rest_framework/base.html:173 +msgid "request info" +msgstr "" + +#: templates/rest_framework/base.html:177 +msgid "response info" +msgstr "" + +#: templates/rest_framework/horizontal/radio.html:4 +#: templates/rest_framework/inline/radio.html:3 +#: templates/rest_framework/vertical/radio.html:3 msgid "None" -msgstr "" +msgstr "Nenhum(a/as)" -#: templates/rest_framework/horizontal/select_multiple.html:2 -#: templates/rest_framework/inline/select_multiple.html:2 -#: templates/rest_framework/vertical/select_multiple.html:2 +#: templates/rest_framework/horizontal/select_multiple.html:4 +#: templates/rest_framework/inline/select_multiple.html:3 +#: templates/rest_framework/vertical/select_multiple.html:3 msgid "No items to select." -msgstr "" +msgstr "Nenhum item para escholher." -#: validators.py:43 +#: validators.py:39 msgid "This field must be unique." -msgstr "" +msgstr "Esse campo deve ser único." -#: validators.py:97 +#: validators.py:89 +#, python-brace-format msgid "The fields {field_names} must make a unique set." +msgstr "Os campos {field_names} devem criar um set único." + +#: validators.py:171 +#, python-brace-format +msgid "Surrogate characters are not allowed: U+{code_point:X}." msgstr "" -#: validators.py:245 +#: validators.py:243 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" date." -msgstr "" +msgstr "O campo \"{date_field}\" deve ser único para a data." -#: validators.py:260 +#: validators.py:258 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" month." -msgstr "" +msgstr "O campo \"{date_field}\" deve ser único para o mês." -#: validators.py:273 +#: validators.py:271 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" year." -msgstr "" +msgstr "O campo \"{date_field}\" deve ser único para o ano." -#: versioning.py:42 +#: versioning.py:40 msgid "Invalid version in \"Accept\" header." -msgstr "" +msgstr "Versão inválida no cabeçalho \"Accept\"." -#: versioning.py:73 +#: versioning.py:71 msgid "Invalid version in URL path." -msgstr "" +msgstr "Versão inválida no caminho de URL." -#: versioning.py:115 +#: versioning.py:116 msgid "Invalid version in URL path. Does not match any version namespace." -msgstr "" +msgstr "Versão inválida no caminho da URL. Não corresponde a nenhuma versão do namespace." -#: versioning.py:147 +#: versioning.py:148 msgid "Invalid version in hostname." -msgstr "" +msgstr "Versão inválida no hostname." -#: versioning.py:169 +#: versioning.py:170 msgid "Invalid version in query parameter." -msgstr "" - -#: views.py:88 -msgid "Permission denied." -msgstr "" +msgstr "Versão inválida no parâmetro de query." diff --git a/rest_framework/locale/pt_BR/LC_MESSAGES/django.mo b/rest_framework/locale/pt_BR/LC_MESSAGES/django.mo index 008629823ddf0a55141d9d8e1bcae86c9d7189a6..5a6e3788e651dfed18d4d5cb4efe1ab658b6ed59 100644 GIT binary patch delta 2242 zcmYk-YfRO39LMqR;cyU+`6Yy@8t1JZdR_bFYJ| zo#*}N<^B|E1s=r>ID=~Mbu7b=F%N&nn4d}--_FJ|OvOfI)vX1$Vi&TF_L%FFs0LtMA;%gYdE2u5~12y0#8rSm?)b&wR&Ya0+{p+c`%8le+qptIFoDuIseeogm<4M$j zUO}zE0{XBp*BM9&ZsEEdYj6NZ@C0gN-(o&4q9*iDF6*xw=}e~gY`LCxe7?8TH~$9@cPeICg}`wBJFpHLmu_?;C!h-&Y7BpvJn)D~XDM*25z z2}gt*&De=Apc?!hnT-AJUau;38Y;n?x!;9@cmx@nU3H%?qH-dOBcl#;Q7cf6?1uHA zR%jH9bpD@pZ(KrF)xJdD4R!-HkW_k8Qsts@qZQRb7m|P0huYf*(2oyeEuKMb)n#N3 zR>UaOelyavg>eJ@Ta3y!Jm>m3s(~~zODoWTYG4R?WYef6JcsT08Tv4X!<~i&s3a{x zme_`I6rV$7{a?tgn~%3uOf%d_MIF^)9rmHJ{{*hUXV8OQqMOjNE|oo0I8Di-x13gJ zfKbO;HI)WJTckWXKJ_fy+jAWX-}5De6|po>R)@Sj8q|4tS4D>_R_5;e_*udyNP1=W)&)- z!tS+>S+85)iP}~M5yERyi9tMtUf`Fj&r^MCZEL?;sO V7ys&uU)j`{@NGWkjlWoN_Fw;|*lYj* delta 2599 zcmZYATWl0n9LMp~%l1MkmqKYlTZXnk!M3zuTPVdTz_*{^WNhxn~UR0P!fXDaV*ocr1?(+S>)j%)|3&;W*C6J6MU63XLhpMX29* z;v={ZC*e`7$LFyQFJnIbfStx9&ChgtI8evgGKTB$8m__YB4c)77q;SAT#2`FBTkuY zOdAfMzCVMTa007wPO&j1*p8au7SwUqGil7LbacTh*o?m+f2MXyW~MEujN4H+3gU8n z3p?;@?85S?#x&qwTd7IE;d=NFkQ|PS-1{gm?O(>h$J%)v|SpOzE%^cW` z!>CMe;B36*`#mbt2mUyRbe1x%KU<-z^3NN4%yp^Q0 zfXRtb-~|JMOMK&YL6RnCGN+aIEEYW zKI(cMJR&4*`cUH$)OAi^4fSU((%H^|2_z{~U6VPX6IC=})D5Gkl{krdGX1C<+o+m|Vj;eX0q$=u($NjxM+(~9KrP{yXyLd1_%GB-1QulW za5=IV<~7s}uOK;?+o(kTz-3s)=uaJ^WV0Hf!-O_{=sKZb;E<Qp4=q0AALsR8?t?H=b9!kWIS6NQXawBoewhr52Cuj{uBH@tjHl%6` z)>l*=WVT;DqC$Xe{j(&kdCHg`y))EapU9D;RQ}P_QBO zVo7V>w#49w6HnhPsm+;b4-G{UZd|txIx%}Ntds7Pelw-1wZ3U-ePfH&xT39jS!!Zd zS+tw_5>6+|e+|sAnX5Hqj~t4a9+HXLrYrSlc}4oU%G-fyUOxJ< z8ydEQc0;PKraiCQJ?z-g^h-5Ia^`kL+_-mzL@Y6WKI%lc8fiIUC+?k}Tl>a8W`R3^ diff --git a/rest_framework/locale/pt_BR/LC_MESSAGES/django.po b/rest_framework/locale/pt_BR/LC_MESSAGES/django.po index 9489f20a0..40651552d 100644 --- a/rest_framework/locale/pt_BR/LC_MESSAGES/django.po +++ b/rest_framework/locale/pt_BR/LC_MESSAGES/django.po @@ -3,6 +3,7 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Cloves Oliveira , 2020 # Craig Blaszczyk , 2015 # Ederson Mota Pereira , 2015 # Filipe Rinaldi , 2015 @@ -12,9 +13,9 @@ msgid "" msgstr "" "Project-Id-Version: Django REST framework\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-07-12 16:13+0100\n" -"PO-Revision-Date: 2017-12-06 09:53+0000\n" -"Last-Translator: Jonatas Baldin \n" +"POT-Creation-Date: 2020-10-13 21:45+0200\n" +"PO-Revision-Date: 2020-10-13 19:45+0000\n" +"Last-Translator: Xavier Ordoquy \n" "Language-Team: Portuguese (Brazil) (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/pt_BR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -22,40 +23,40 @@ msgstr "" "Language: pt_BR\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: authentication.py:73 +#: authentication.py:70 msgid "Invalid basic header. No credentials provided." msgstr "Cabeçalho básico inválido. Credenciais não fornecidas." -#: authentication.py:76 +#: authentication.py:73 msgid "Invalid basic header. Credentials string should not contain spaces." msgstr "Cabeçalho básico inválido. String de credenciais não deve incluir espaços." -#: authentication.py:82 +#: authentication.py:83 msgid "Invalid basic header. Credentials not correctly base64 encoded." msgstr "Cabeçalho básico inválido. Credenciais codificadas em base64 incorretamente." -#: authentication.py:99 +#: authentication.py:101 msgid "Invalid username/password." msgstr "Usuário ou senha inválido." -#: authentication.py:102 authentication.py:198 +#: authentication.py:104 authentication.py:206 msgid "User inactive or deleted." msgstr "Usuário inativo ou removido." -#: authentication.py:176 +#: authentication.py:184 msgid "Invalid token header. No credentials provided." msgstr "Cabeçalho de token inválido. Credenciais não fornecidas." -#: authentication.py:179 +#: authentication.py:187 msgid "Invalid token header. Token string should not contain spaces." msgstr "Cabeçalho de token inválido. String de token não deve incluir espaços." -#: authentication.py:185 +#: authentication.py:193 msgid "" "Invalid token header. Token string should not contain invalid characters." msgstr "Cabeçalho de token inválido. String de token não deve possuir caracteres inválidos." -#: authentication.py:195 +#: authentication.py:203 msgid "Invalid token." msgstr "Token inválido." @@ -63,382 +64,515 @@ msgstr "Token inválido." msgid "Auth Token" msgstr "Token de autenticação" -#: authtoken/models.py:15 +#: authtoken/models.py:13 msgid "Key" msgstr "Chave" -#: authtoken/models.py:18 +#: authtoken/models.py:16 msgid "User" msgstr "Usuário" -#: authtoken/models.py:20 +#: authtoken/models.py:18 msgid "Created" msgstr "Criado" -#: authtoken/models.py:29 +#: authtoken/models.py:27 authtoken/serializers.py:19 msgid "Token" msgstr "Token" -#: authtoken/models.py:30 +#: authtoken/models.py:28 msgid "Tokens" msgstr "Tokens" -#: authtoken/serializers.py:8 +#: authtoken/serializers.py:9 msgid "Username" msgstr "Nome do usuário" -#: authtoken/serializers.py:9 +#: authtoken/serializers.py:13 msgid "Password" msgstr "Senha" -#: authtoken/serializers.py:20 -msgid "User account is disabled." -msgstr "Conta de usuário desabilitada." - -#: authtoken/serializers.py:23 +#: authtoken/serializers.py:35 msgid "Unable to log in with provided credentials." msgstr "Impossível fazer login com as credenciais fornecidas." -#: authtoken/serializers.py:26 +#: authtoken/serializers.py:38 msgid "Must include \"username\" and \"password\"." msgstr "Obrigatório incluir \"usuário\" e \"senha\"." -#: exceptions.py:49 +#: exceptions.py:102 msgid "A server error occurred." msgstr "Ocorreu um erro de servidor." -#: exceptions.py:84 +#: exceptions.py:142 +msgid "Invalid input." +msgstr "" + +#: exceptions.py:161 msgid "Malformed request." msgstr "Pedido malformado." -#: exceptions.py:89 +#: exceptions.py:167 msgid "Incorrect authentication credentials." msgstr "Credenciais de autenticação incorretas." -#: exceptions.py:94 +#: exceptions.py:173 msgid "Authentication credentials were not provided." msgstr "As credenciais de autenticação não foram fornecidas." -#: exceptions.py:99 +#: exceptions.py:179 msgid "You do not have permission to perform this action." msgstr "Você não tem permissão para executar essa ação." -#: exceptions.py:104 views.py:81 +#: exceptions.py:185 msgid "Not found." msgstr "Não encontrado." -#: exceptions.py:109 +#: exceptions.py:191 +#, python-brace-format msgid "Method \"{method}\" not allowed." msgstr "Método \"{method}\" não é permitido." -#: exceptions.py:120 +#: exceptions.py:202 msgid "Could not satisfy the request Accept header." msgstr "Não foi possível satisfazer a requisição do cabeçalho Accept." -#: exceptions.py:132 +#: exceptions.py:212 +#, python-brace-format msgid "Unsupported media type \"{media_type}\" in request." msgstr "Tipo de mídia \"{media_type}\" no pedido não é suportado." -#: exceptions.py:145 +#: exceptions.py:223 msgid "Request was throttled." msgstr "Pedido foi limitado." -#: fields.py:269 relations.py:206 relations.py:239 validators.py:98 -#: validators.py:181 +#: exceptions.py:224 +#, python-brace-format +msgid "Expected available in {wait} second." +msgstr "" + +#: exceptions.py:225 +#, python-brace-format +msgid "Expected available in {wait} seconds." +msgstr "" + +#: fields.py:316 relations.py:245 relations.py:279 validators.py:90 +#: validators.py:183 msgid "This field is required." msgstr "Este campo é obrigatório." -#: fields.py:270 +#: fields.py:317 msgid "This field may not be null." msgstr "Este campo não pode ser nulo." -#: fields.py:608 fields.py:639 -msgid "\"{input}\" is not a valid boolean." -msgstr "\"{input}\" não é um valor boleano válido." +#: fields.py:701 +msgid "Must be a valid boolean." +msgstr "" -#: fields.py:674 +#: fields.py:766 +msgid "Not a valid string." +msgstr "" + +#: fields.py:767 msgid "This field may not be blank." msgstr "Este campo não pode ser em branco." -#: fields.py:675 fields.py:1675 +#: fields.py:768 fields.py:1881 +#, python-brace-format msgid "Ensure this field has no more than {max_length} characters." msgstr "Certifique-se de que este campo não tenha mais de {max_length} caracteres." -#: fields.py:676 +#: fields.py:769 +#, python-brace-format msgid "Ensure this field has at least {min_length} characters." msgstr "Certifique-se de que este campo tenha mais de {min_length} caracteres." -#: fields.py:713 +#: fields.py:816 msgid "Enter a valid email address." msgstr "Insira um endereço de email válido." -#: fields.py:724 +#: fields.py:827 msgid "This value does not match the required pattern." msgstr "Este valor não corresponde ao padrão exigido." -#: fields.py:735 +#: fields.py:838 msgid "" "Enter a valid \"slug\" consisting of letters, numbers, underscores or " "hyphens." msgstr "Entrar um \"slug\" válido que consista de letras, números, sublinhados ou hífens." -#: fields.py:747 +#: fields.py:839 +msgid "" +"Enter a valid \"slug\" consisting of Unicode letters, numbers, underscores, " +"or hyphens." +msgstr "" + +#: fields.py:854 msgid "Enter a valid URL." msgstr "Entrar um URL válido." -#: fields.py:760 -msgid "\"{value}\" is not a valid UUID." -msgstr "\"{value}\" não é um UUID válido." +#: fields.py:867 +msgid "Must be a valid UUID." +msgstr "" -#: fields.py:796 +#: fields.py:903 msgid "Enter a valid IPv4 or IPv6 address." msgstr "Informe um endereço IPv4 ou IPv6 válido." -#: fields.py:821 +#: fields.py:931 msgid "A valid integer is required." msgstr "Um número inteiro válido é exigido." -#: fields.py:822 fields.py:857 fields.py:891 +#: fields.py:932 fields.py:969 fields.py:1005 fields.py:1366 +#, python-brace-format msgid "Ensure this value is less than or equal to {max_value}." msgstr "Certifique-se de que este valor seja inferior ou igual a {max_value}." -#: fields.py:823 fields.py:858 fields.py:892 +#: fields.py:933 fields.py:970 fields.py:1006 fields.py:1367 +#, python-brace-format msgid "Ensure this value is greater than or equal to {min_value}." msgstr "Certifque-se de que este valor seja maior ou igual a {min_value}." -#: fields.py:824 fields.py:859 fields.py:896 +#: fields.py:934 fields.py:971 fields.py:1010 msgid "String value too large." msgstr "Valor da string é muito grande." -#: fields.py:856 fields.py:890 +#: fields.py:968 fields.py:1004 msgid "A valid number is required." msgstr "Um número válido é necessário." -#: fields.py:893 +#: fields.py:1007 +#, python-brace-format msgid "Ensure that there are no more than {max_digits} digits in total." msgstr "Certifique-se de que não haja mais de {max_digits} dígitos no total." -#: fields.py:894 +#: fields.py:1008 +#, python-brace-format msgid "" "Ensure that there are no more than {max_decimal_places} decimal places." msgstr "Certifique-se de que não haja mais de {max_decimal_places} casas decimais." -#: fields.py:895 +#: fields.py:1009 +#, python-brace-format msgid "" "Ensure that there are no more than {max_whole_digits} digits before the " "decimal point." msgstr "Certifique-se de que não haja mais de {max_whole_digits} dígitos antes do ponto decimal." -#: fields.py:1025 +#: fields.py:1148 +#, python-brace-format msgid "Datetime has wrong format. Use one of these formats instead: {format}." msgstr "Formato inválido para data e hora. Use um dos formatos a seguir: {format}." -#: fields.py:1026 +#: fields.py:1149 msgid "Expected a datetime but got a date." msgstr "Necessário uma data e hora mas recebeu uma data." -#: fields.py:1103 +#: fields.py:1150 +#, python-brace-format +msgid "Invalid datetime for the timezone \"{timezone}\"." +msgstr "" + +#: fields.py:1151 +msgid "Datetime value out of range." +msgstr "" + +#: fields.py:1236 +#, python-brace-format msgid "Date has wrong format. Use one of these formats instead: {format}." msgstr "Formato inválido para data. Use um dos formatos a seguir: {format}." -#: fields.py:1104 +#: fields.py:1237 msgid "Expected a date but got a datetime." msgstr "Necessário uma data mas recebeu uma data e hora." -#: fields.py:1170 +#: fields.py:1303 +#, python-brace-format msgid "Time has wrong format. Use one of these formats instead: {format}." msgstr "Formato inválido para Tempo. Use um dos formatos a seguir: {format}." -#: fields.py:1232 +#: fields.py:1365 +#, python-brace-format msgid "Duration has wrong format. Use one of these formats instead: {format}." msgstr "Formato inválido para Duração. Use um dos formatos a seguir: {format}." -#: fields.py:1251 fields.py:1300 +#: fields.py:1399 fields.py:1456 +#, python-brace-format msgid "\"{input}\" is not a valid choice." msgstr "\"{input}\" não é um escolha válido." -#: fields.py:1254 relations.py:71 relations.py:441 +#: fields.py:1402 +#, python-brace-format msgid "More than {count} items..." msgstr "Mais de {count} itens..." -#: fields.py:1301 fields.py:1448 relations.py:437 serializers.py:524 +#: fields.py:1457 fields.py:1603 relations.py:485 serializers.py:570 +#, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "Necessário uma lista de itens, mas recebeu tipo \"{input_type}\"." -#: fields.py:1302 +#: fields.py:1458 msgid "This selection may not be empty." msgstr "Esta seleção não pode estar vazia." -#: fields.py:1339 +#: fields.py:1495 +#, python-brace-format msgid "\"{input}\" is not a valid path choice." msgstr "\"{input}\" não é uma escolha válida para um caminho." -#: fields.py:1358 +#: fields.py:1514 msgid "No file was submitted." msgstr "Nenhum arquivo foi submetido." -#: fields.py:1359 +#: fields.py:1515 msgid "" "The submitted data was not a file. Check the encoding type on the form." msgstr "O dado submetido não é um arquivo. Certifique-se do tipo de codificação no formulário." -#: fields.py:1360 +#: fields.py:1516 msgid "No filename could be determined." msgstr "Nome do arquivo não pode ser determinado." -#: fields.py:1361 +#: fields.py:1517 msgid "The submitted file is empty." msgstr "O arquivo submetido está vázio." -#: fields.py:1362 +#: fields.py:1518 +#, python-brace-format msgid "" "Ensure this filename has at most {max_length} characters (it has {length})." msgstr "Certifique-se de que o nome do arquivo tem menos de {max_length} caracteres (tem {length})." -#: fields.py:1410 +#: fields.py:1566 msgid "" "Upload a valid image. The file you uploaded was either not an image or a " "corrupted image." msgstr "Fazer upload de uma imagem válida. O arquivo enviado não é um arquivo de imagem ou está corrompido." -#: fields.py:1449 relations.py:438 serializers.py:525 +#: fields.py:1604 relations.py:486 serializers.py:571 msgid "This list may not be empty." msgstr "Esta lista não pode estar vazia." -#: fields.py:1502 +#: fields.py:1605 +#, python-brace-format +msgid "Ensure this field has at least {min_length} elements." +msgstr "" + +#: fields.py:1606 +#, python-brace-format +msgid "Ensure this field has no more than {max_length} elements." +msgstr "" + +#: fields.py:1682 +#, python-brace-format msgid "Expected a dictionary of items but got type \"{input_type}\"." msgstr "Esperado um dicionário de itens mas recebeu tipo \"{input_type}\"." -#: fields.py:1549 +#: fields.py:1683 +msgid "This dictionary may not be empty." +msgstr "" + +#: fields.py:1755 msgid "Value must be valid JSON." msgstr "Valor devo ser JSON válido." -#: filters.py:36 templates/rest_framework/filters/django_filter.html:5 -msgid "Submit" -msgstr "Enviar" +#: filters.py:49 templates/rest_framework/filters/search.html:2 +msgid "Search" +msgstr "Buscar" -#: filters.py:336 +#: filters.py:50 +msgid "A search term." +msgstr "" + +#: filters.py:180 templates/rest_framework/filters/ordering.html:3 +msgid "Ordering" +msgstr "Ordenando" + +#: filters.py:181 +msgid "Which field to use when ordering the results." +msgstr "" + +#: filters.py:287 msgid "ascending" msgstr "ascendente" -#: filters.py:337 +#: filters.py:288 msgid "descending" msgstr "descendente" -#: pagination.py:193 +#: pagination.py:174 +msgid "A page number within the paginated result set." +msgstr "" + +#: pagination.py:179 pagination.py:372 pagination.py:590 +msgid "Number of results to return per page." +msgstr "" + +#: pagination.py:189 msgid "Invalid page." msgstr "Página inválida." -#: pagination.py:427 +#: pagination.py:374 +msgid "The initial index from which to return the results." +msgstr "" + +#: pagination.py:581 +msgid "The pagination cursor value." +msgstr "" + +#: pagination.py:583 msgid "Invalid cursor" msgstr "Cursor inválido" -#: relations.py:207 +#: relations.py:246 +#, python-brace-format msgid "Invalid pk \"{pk_value}\" - object does not exist." msgstr "Pk inválido \"{pk_value}\" - objeto não existe." -#: relations.py:208 +#: relations.py:247 +#, python-brace-format msgid "Incorrect type. Expected pk value, received {data_type}." msgstr "Tipo incorreto. Esperado valor pk, recebeu {data_type}." -#: relations.py:240 +#: relations.py:280 msgid "Invalid hyperlink - No URL match." msgstr "Hyperlink inválido - Sem combinação para a URL." -#: relations.py:241 +#: relations.py:281 msgid "Invalid hyperlink - Incorrect URL match." msgstr "Hyperlink inválido - Combinação URL incorreta." -#: relations.py:242 +#: relations.py:282 msgid "Invalid hyperlink - Object does not exist." msgstr "Hyperlink inválido - Objeto não existe." -#: relations.py:243 +#: relations.py:283 +#, python-brace-format msgid "Incorrect type. Expected URL string, received {data_type}." msgstr "Tipo incorreto. Necessário string URL, recebeu {data_type}." -#: relations.py:401 +#: relations.py:448 +#, python-brace-format msgid "Object with {slug_name}={value} does not exist." msgstr "Objeto com {slug_name}={value} não existe." -#: relations.py:402 +#: relations.py:449 msgid "Invalid value." msgstr "Valor inválido." -#: serializers.py:326 +#: schemas/utils.py:32 +msgid "unique integer value" +msgstr "" + +#: schemas/utils.py:34 +msgid "UUID string" +msgstr "" + +#: schemas/utils.py:36 +msgid "unique value" +msgstr "" + +#: schemas/utils.py:38 +#, python-brace-format +msgid "A {value_type} identifying this {name}." +msgstr "" + +#: serializers.py:337 +#, python-brace-format msgid "Invalid data. Expected a dictionary, but got {datatype}." msgstr "Dado inválido. Necessário um dicionário mas recebeu {datatype}." #: templates/rest_framework/admin.html:116 -#: templates/rest_framework/base.html:128 +#: templates/rest_framework/base.html:136 +msgid "Extra Actions" +msgstr "" + +#: templates/rest_framework/admin.html:130 +#: templates/rest_framework/base.html:150 msgid "Filters" -msgstr "Filtra" +msgstr "Filtros" -#: templates/rest_framework/filters/django_filter.html:2 -#: templates/rest_framework/filters/django_filter_crispyforms.html:4 -msgid "Field filters" -msgstr "Filtra de campo" +#: templates/rest_framework/base.html:37 +msgid "navbar" +msgstr "" -#: templates/rest_framework/filters/ordering.html:3 -msgid "Ordering" -msgstr "Ordenando" +#: templates/rest_framework/base.html:75 +msgid "content" +msgstr "" -#: templates/rest_framework/filters/search.html:2 -msgid "Search" -msgstr "Buscar" +#: templates/rest_framework/base.html:78 +msgid "request form" +msgstr "" -#: templates/rest_framework/horizontal/radio.html:2 -#: templates/rest_framework/inline/radio.html:2 -#: templates/rest_framework/vertical/radio.html:2 +#: templates/rest_framework/base.html:157 +msgid "main content" +msgstr "" + +#: templates/rest_framework/base.html:173 +msgid "request info" +msgstr "" + +#: templates/rest_framework/base.html:177 +msgid "response info" +msgstr "" + +#: templates/rest_framework/horizontal/radio.html:4 +#: templates/rest_framework/inline/radio.html:3 +#: templates/rest_framework/vertical/radio.html:3 msgid "None" msgstr "Nenhum(a/as)" -#: templates/rest_framework/horizontal/select_multiple.html:2 -#: templates/rest_framework/inline/select_multiple.html:2 -#: templates/rest_framework/vertical/select_multiple.html:2 +#: templates/rest_framework/horizontal/select_multiple.html:4 +#: templates/rest_framework/inline/select_multiple.html:3 +#: templates/rest_framework/vertical/select_multiple.html:3 msgid "No items to select." msgstr "Nenhum item para escholher." -#: validators.py:43 +#: validators.py:39 msgid "This field must be unique." msgstr "Esse campo deve ser único." -#: validators.py:97 +#: validators.py:89 +#, python-brace-format msgid "The fields {field_names} must make a unique set." msgstr "Os campos {field_names} devem criar um set único." -#: validators.py:245 +#: validators.py:171 +#, python-brace-format +msgid "Surrogate characters are not allowed: U+{code_point:X}." +msgstr "" + +#: validators.py:243 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" date." msgstr "O campo \"{date_field}\" deve ser único para a data." -#: validators.py:260 +#: validators.py:258 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" month." msgstr "O campo \"{date_field}\" deve ser único para o mês." -#: validators.py:273 +#: validators.py:271 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" year." msgstr "O campo \"{date_field}\" deve ser único para o ano." -#: versioning.py:42 +#: versioning.py:40 msgid "Invalid version in \"Accept\" header." msgstr "Versão inválida no cabeçalho \"Accept\"." -#: versioning.py:73 +#: versioning.py:71 msgid "Invalid version in URL path." msgstr "Versão inválida no caminho de URL." -#: versioning.py:115 +#: versioning.py:116 msgid "Invalid version in URL path. Does not match any version namespace." msgstr "Versão inválida no caminho da URL. Não corresponde a nenhuma versão do namespace." -#: versioning.py:147 +#: versioning.py:148 msgid "Invalid version in hostname." msgstr "Versão inválida no hostname." -#: versioning.py:169 +#: versioning.py:170 msgid "Invalid version in query parameter." msgstr "Versão inválida no parâmetro de query." - -#: views.py:88 -msgid "Permission denied." -msgstr "Permissão negada." diff --git a/rest_framework/locale/ro/LC_MESSAGES/django.mo b/rest_framework/locale/ro/LC_MESSAGES/django.mo index 0d6f6f942f6f06ee70e7c98f5953e43e51ad93df..0c9fb9c560564aef7eedc70fb9bb634d02ccf74a 100644 GIT binary patch delta 2438 zcmYk-eQXp(7{~D`SIQLuE%b$2puj|^bXoy0WrA* zkOm0ExMBojqQ)2^5MNG%O87&>h*1)aAwYr(CX%R$qTwH6jDCN+i*eGq&&=%G>@&}7 zZ#P|Dll*>o`Y}Vi7*@irGVq8IKVh zj?bbd_);+bLEv@N{r<)ZlQd?|P=AJT)En+ZJ>V651h3&d%o=7)9j?L>Jcj(4i~Q)k zZ?PDMJZQ{VtiUO_4!MQdi>3G+mf$DY!1K)=8gsGgA^(QE@L~G>LH~8so4t#AqbsOT z{u%Tuvi#$#F~oQuDgsaA7(9Zy-)WqLpJOimj!8=+gR@8ABuvL@B0Q)>Yq+_NZ$R~TpmOHu2;yH!<1GffwMO;xv;7&bM4i}) z7W+{XI*E$FH5`ZqIsQb(;#B&@ScXlw0S};F>?Y>pPpB9ACx`fJAk6E`#BoSInr2i4 zTJeiCW1d3gMmedkwQa%C_zWt`Bm!F9L^PbFzI)5v6j z7GoOHC&#DGy*Jz8!cQ8|f!U zGkrav1GScC(Bk{3tiOVfVosqk>#+$t@C?>tuJx04Bd(&~iJHK9R78J8O<)XRBOS~l zRQ9(ZOPDkVX*|imSGW#mjPq~Uj}z&?h`R7R>PBB9rHG!SReDKWS#6B2|N|o~aAQHzB8* zEvN?^MlJ1UsHG_2ZHT(5L{`Z(NuF`F*;b63r{iL0WNrkA9hGxDAb>Uvj#1ByyT);F8QI&MM=6+d3 zBPZx6YPzn8T20kfR8cfYBX5gu##X8(MoAhzVqVdM`5<{&yw)G`et9`>FKZilvk#87 zU_Dhyr|=SGFMpPx3jY?oqU{zA+6$1cv{w}IXNo-)8WN5{a+ye`O`D zc|mUg&ZiD?yTYU0)8UfTy>QyVRCw46Avc+oS!5T)ogN#D_u8&VZ(E0r#CF?0r@JQ_ zkJ(tH%jwx3X>(HjSuJVq-Qks~vJsO)Zg*~HcBH4xiM2;#TTQ!jzvGU%G zX4$eiRpk|KZC;*TAL)xa-F8KHdwfS?x2@R~_gl5wqOo{iG?LnxH$Tn&Ze(SuJb!jZ zYENM@y{;{?&579N)k{n4@`UYi?DlwXceKyBbiCKGZ3!ETwnY;$%k(b298K7E$Ho#} zj*V>dXP<~gqwcNo)dMc>b4N`$TbQsByCvS!Yq?2Rlo#f5%k^8LmyRJ)_eaw)%+Kf(I_zh delta 2605 zcmZY9S!`5Q9LMofrj(X$($WQia_Iu4($dlbr7VS(rKRj`kwup2^j0pJ&d|;bCZL%I z1%wzN85E472`Cc6i;jsgCL~l1Zq-QChye^yiSa>Wga`>Het$DpiSeZW`J8im?zv|l z?!46%y^)vtydn9B2}Fa(m_xWSjUUqPbYmvt09qKs3Va(&@H;HVd#LyGGK?9IGjKF^ zU^Q;Q>G%we!Z)$Sn5cP|%rYL_cWvdZ<&+QOBD{hdFhA3nIk*ew;c4u^8`y+ZS;_y~ zxRUZIEW=+g4|B4U9h{7MzA$0bm>x1}@Bq%jA>_~84zeF{dJI0uYu>@6~ ziyBEAYU=&2hur69(ZlmkP&4p3YRPV*+R?-4R2)yH5L?m0&6tn-Fcps?t6+}f415(? zZu5ofx5%Hl$&cE(joLn$G*X0lsB#t7VjXIUd-7R-_58eB@iMCXJ!%u($JtmsHo3NI zQ00TD5nM#oyNVXxL3OaOAhEg3G8{?y5UK-5@ezCh>u{)m`QJq5HV-t?)pUOxcDnYX zMtaaKAH$iH&*R4_##~1&!5bU_or+IUYy3M}m``I9u>m#p>)rAI@~Sx+B~wl2EH>a* zs2*o9yiUx;t?0vUyo7C7#IQAmJ8(Om!zGx`^l9&`LK{z@PQzcg3RlpZ$M7WTyU{yj zXw#I@J?+wkI2#{#eFaxg{u=cGYZ9G88#Sd7wD3u6##6Wuuj59XU>UO$Be)cApf+zg z)3i?Kzn+YGvL7|Iaa2ccA^XVWmL^X{DRN<$b=ZT)@lpH})!-V|VG3?Ty|*9L&Pk*x zbIC3LfHjn}$~Dtb&ORBvuo!8}bfJY$;9NZEmapJ+%738Fuf>9AV+XQ*%qGApTV7PZ!^Q7^oPtdhBiETg&RdJpGQF60c$ zPS<0o5f3ASHNPQMO+M41rENmBKY-DZWG<6Q$6=g>-=HdHO*5t!TT$o#9MV@4N4A5x ziki8*$fTG|rbX}9VhU~`G$2l~;g^pG5Gz#3o*ZYY8RI*pfspxxcoM-%czebO-1nN_=0Nr-0B}E+sTVrB*^mu!qnn zmlH~>lO$$Hv!=uZB$AHS8aJ;Crp3)$sEcVcF@jLy#F}o6UsI{%A#`2p_~_^;arGN6 zHM4{85u*qttuNR3e^M%?ZA2Eal3>{rXTAx&gzlFvLP`69<7cAUI7$nMO^MutpJuX! zM49_&E2a@zYo*1+ghVcRJu9oDrA@2UNUSG1R3Nnxx;vC+CZXxleNJF^B>YsV<%Fz2 zFl>3PJzl@lYxM+!e%l+UiB+bzO)TBV!-)O=THW34OX7ia&&W*M-)r?b{;)k5iU+b! zc;animZs#bwFmp1P{;`etX@0d*u6Ee=kn&Hbw+ynop5|8uhKKt>+=O8fv~>c>x8^L zepULhU?8@uusf%2PIYZ#b#1*>*U&VpF*aOSWOeNf_IpEC>&`(Z6n1QDemK~_i14`& z;;BU~DPtmme@2iTPfe`8xP8)taRefk9SYkP^)!ZLrTE_BxoH`e@BP#LyCZ{6{6fir z)Yy@-(%4&N@02(`N45K$k6v`_L5l{wR$nj_wn7nx7<;z-y@KRuok+m82JODcUT^q= zr)y#@73~?F)Ct=ko^fJ_D_$BAio`3Ycsv!Y!9Y0TXJ)KO*zr5m4-O`~)obtd`ohj0 LZ@4B_HSNgXP18*# diff --git a/rest_framework/locale/ro/LC_MESSAGES/django.po b/rest_framework/locale/ro/LC_MESSAGES/django.po index d144d847e..0c9e900e3 100644 --- a/rest_framework/locale/ro/LC_MESSAGES/django.po +++ b/rest_framework/locale/ro/LC_MESSAGES/django.po @@ -3,14 +3,15 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Bogdan Mateescu, 2019 # Elena-Adela Neacsu , 2016 msgid "" msgstr "" "Project-Id-Version: Django REST framework\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-07-12 16:13+0100\n" -"PO-Revision-Date: 2017-08-03 14:58+0000\n" -"Last-Translator: Thomas Christie \n" +"POT-Creation-Date: 2020-10-13 21:45+0200\n" +"PO-Revision-Date: 2020-10-13 19:45+0000\n" +"Last-Translator: Xavier Ordoquy \n" "Language-Team: Romanian (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/ro/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,40 +19,40 @@ msgstr "" "Language: ro\n" "Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" -#: authentication.py:73 +#: authentication.py:70 msgid "Invalid basic header. No credentials provided." msgstr "Antet de bază invalid. Datele de autentificare nu au fost furnizate." -#: authentication.py:76 +#: authentication.py:73 msgid "Invalid basic header. Credentials string should not contain spaces." msgstr "Antet de bază invalid. Şirul de caractere cu datele de autentificare nu trebuie să conțină spații." -#: authentication.py:82 +#: authentication.py:83 msgid "Invalid basic header. Credentials not correctly base64 encoded." msgstr "Antet de bază invalid. Datele de autentificare nu au fost corect codificate în base64." -#: authentication.py:99 +#: authentication.py:101 msgid "Invalid username/password." msgstr "Nume utilizator / Parolă invalid(ă)." -#: authentication.py:102 authentication.py:198 +#: authentication.py:104 authentication.py:206 msgid "User inactive or deleted." msgstr "Utilizator inactiv sau șters." -#: authentication.py:176 +#: authentication.py:184 msgid "Invalid token header. No credentials provided." msgstr "Antet token invalid. Datele de autentificare nu au fost furnizate." -#: authentication.py:179 +#: authentication.py:187 msgid "Invalid token header. Token string should not contain spaces." msgstr "Antet token invalid. Şirul de caractere pentru token nu trebuie să conțină spații." -#: authentication.py:185 +#: authentication.py:193 msgid "" "Invalid token header. Token string should not contain invalid characters." msgstr "Antet token invalid. Şirul de caractere pentru token nu trebuie să conțină caractere nevalide." -#: authentication.py:195 +#: authentication.py:203 msgid "Invalid token." msgstr "Token nevalid." @@ -59,382 +60,515 @@ msgstr "Token nevalid." msgid "Auth Token" msgstr "Token de autentificare" -#: authtoken/models.py:15 +#: authtoken/models.py:13 msgid "Key" msgstr "Cheie" -#: authtoken/models.py:18 +#: authtoken/models.py:16 msgid "User" msgstr "Utilizator" -#: authtoken/models.py:20 +#: authtoken/models.py:18 msgid "Created" msgstr "Creat" -#: authtoken/models.py:29 +#: authtoken/models.py:27 authtoken/serializers.py:19 msgid "Token" msgstr "Token" -#: authtoken/models.py:30 +#: authtoken/models.py:28 msgid "Tokens" msgstr "Tokenuri" -#: authtoken/serializers.py:8 +#: authtoken/serializers.py:9 msgid "Username" msgstr "Nume de utilizator" -#: authtoken/serializers.py:9 +#: authtoken/serializers.py:13 msgid "Password" msgstr "Parola" -#: authtoken/serializers.py:20 -msgid "User account is disabled." -msgstr "Contul de utilizator este dezactivat." - -#: authtoken/serializers.py:23 +#: authtoken/serializers.py:35 msgid "Unable to log in with provided credentials." msgstr "Nu se poate conecta cu datele de conectare furnizate." -#: authtoken/serializers.py:26 +#: authtoken/serializers.py:38 msgid "Must include \"username\" and \"password\"." msgstr "Trebuie să includă \"numele de utilizator\" și \"parola\"." -#: exceptions.py:49 +#: exceptions.py:102 msgid "A server error occurred." msgstr "A apărut o eroare pe server." -#: exceptions.py:84 +#: exceptions.py:142 +msgid "Invalid input." +msgstr "" + +#: exceptions.py:161 msgid "Malformed request." msgstr "Cerere incorectă." -#: exceptions.py:89 +#: exceptions.py:167 msgid "Incorrect authentication credentials." msgstr "Date de autentificare incorecte." -#: exceptions.py:94 +#: exceptions.py:173 msgid "Authentication credentials were not provided." msgstr "Datele de autentificare nu au fost furnizate." -#: exceptions.py:99 +#: exceptions.py:179 msgid "You do not have permission to perform this action." msgstr "Nu aveți permisiunea de a efectua această acțiune." -#: exceptions.py:104 views.py:81 +#: exceptions.py:185 msgid "Not found." msgstr "Nu a fost găsit(ă)." -#: exceptions.py:109 +#: exceptions.py:191 +#, python-brace-format msgid "Method \"{method}\" not allowed." msgstr "Metoda \"{method}\" nu este permisa." -#: exceptions.py:120 +#: exceptions.py:202 msgid "Could not satisfy the request Accept header." msgstr "Antetul Accept al cererii nu a putut fi îndeplinit." -#: exceptions.py:132 +#: exceptions.py:212 +#, python-brace-format msgid "Unsupported media type \"{media_type}\" in request." msgstr "Cererea conține tipul media neacceptat \"{media_type}\"" -#: exceptions.py:145 +#: exceptions.py:223 msgid "Request was throttled." msgstr "Cererea a fost gâtuită." -#: fields.py:269 relations.py:206 relations.py:239 validators.py:98 -#: validators.py:181 +#: exceptions.py:224 +#, python-brace-format +msgid "Expected available in {wait} second." +msgstr "" + +#: exceptions.py:225 +#, python-brace-format +msgid "Expected available in {wait} seconds." +msgstr "" + +#: fields.py:316 relations.py:245 relations.py:279 validators.py:90 +#: validators.py:183 msgid "This field is required." msgstr "Acest câmp este obligatoriu." -#: fields.py:270 +#: fields.py:317 msgid "This field may not be null." msgstr "Acest câmp nu poate fi nul." -#: fields.py:608 fields.py:639 -msgid "\"{input}\" is not a valid boolean." -msgstr "\"{input}\" nu este un boolean valid." +#: fields.py:701 +msgid "Must be a valid boolean." +msgstr "" -#: fields.py:674 +#: fields.py:766 +msgid "Not a valid string." +msgstr "" + +#: fields.py:767 msgid "This field may not be blank." msgstr "Acest câmp nu poate fi gol." -#: fields.py:675 fields.py:1675 +#: fields.py:768 fields.py:1881 +#, python-brace-format msgid "Ensure this field has no more than {max_length} characters." msgstr "Asigurați-vă că acest câmp nu are mai mult de {max_length} caractere." -#: fields.py:676 +#: fields.py:769 +#, python-brace-format msgid "Ensure this field has at least {min_length} characters." msgstr "Asigurați-vă că acest câmp are cel puțin{min_length} caractere." -#: fields.py:713 +#: fields.py:816 msgid "Enter a valid email address." msgstr "Introduceți o adresă de email validă." -#: fields.py:724 +#: fields.py:827 msgid "This value does not match the required pattern." msgstr "Această valoare nu se potrivește cu şablonul cerut." -#: fields.py:735 +#: fields.py:838 msgid "" "Enter a valid \"slug\" consisting of letters, numbers, underscores or " "hyphens." msgstr "Introduceți un \"slug\" valid format din litere, numere, caractere de subliniere sau cratime." -#: fields.py:747 +#: fields.py:839 +msgid "" +"Enter a valid \"slug\" consisting of Unicode letters, numbers, underscores, " +"or hyphens." +msgstr "" + +#: fields.py:854 msgid "Enter a valid URL." msgstr "Introduceți un URL valid." -#: fields.py:760 -msgid "\"{value}\" is not a valid UUID." -msgstr "\"{value}\" nu este un UUID valid." +#: fields.py:867 +msgid "Must be a valid UUID." +msgstr "" -#: fields.py:796 +#: fields.py:903 msgid "Enter a valid IPv4 or IPv6 address." msgstr "Introduceți o adresă IPv4 sau IPv6 validă." -#: fields.py:821 +#: fields.py:931 msgid "A valid integer is required." msgstr "Este necesar un întreg valid." -#: fields.py:822 fields.py:857 fields.py:891 +#: fields.py:932 fields.py:969 fields.py:1005 fields.py:1366 +#, python-brace-format msgid "Ensure this value is less than or equal to {max_value}." msgstr "Asigurați-vă că această valoare este mai mică sau egală cu {max_value}." -#: fields.py:823 fields.py:858 fields.py:892 +#: fields.py:933 fields.py:970 fields.py:1006 fields.py:1367 +#, python-brace-format msgid "Ensure this value is greater than or equal to {min_value}." msgstr "Asigurați-vă că această valoare este mai mare sau egală cu {min_value}." -#: fields.py:824 fields.py:859 fields.py:896 +#: fields.py:934 fields.py:971 fields.py:1010 msgid "String value too large." msgstr "Valoare șir de caractere prea mare." -#: fields.py:856 fields.py:890 +#: fields.py:968 fields.py:1004 msgid "A valid number is required." msgstr "Este necesar un număr valid." -#: fields.py:893 +#: fields.py:1007 +#, python-brace-format msgid "Ensure that there are no more than {max_digits} digits in total." msgstr "Asigurați-vă că nu există mai mult de {max_digits} cifre în total." -#: fields.py:894 +#: fields.py:1008 +#, python-brace-format msgid "" "Ensure that there are no more than {max_decimal_places} decimal places." msgstr "Asigurați-vă că nu există mai mult de {max_decimal_places} zecimale." -#: fields.py:895 +#: fields.py:1009 +#, python-brace-format msgid "" "Ensure that there are no more than {max_whole_digits} digits before the " "decimal point." msgstr "Asigurați-vă că nu există mai mult de {max_whole_digits} cifre înainte de punctul zecimal." -#: fields.py:1025 +#: fields.py:1148 +#, python-brace-format msgid "Datetime has wrong format. Use one of these formats instead: {format}." msgstr "Câmpul datetime are format greșit. Utilizați unul dintre aceste formate în loc: {format}." -#: fields.py:1026 +#: fields.py:1149 msgid "Expected a datetime but got a date." msgstr "Se aștepta un câmp datetime, dar s-a primit o dată." -#: fields.py:1103 +#: fields.py:1150 +#, python-brace-format +msgid "Invalid datetime for the timezone \"{timezone}\"." +msgstr "" + +#: fields.py:1151 +msgid "Datetime value out of range." +msgstr "" + +#: fields.py:1236 +#, python-brace-format msgid "Date has wrong format. Use one of these formats instead: {format}." msgstr "Data are formatul greșit. Utilizați unul dintre aceste formate în loc: {format}." -#: fields.py:1104 +#: fields.py:1237 msgid "Expected a date but got a datetime." msgstr "Se aștepta o dată, dar s-a primit un câmp datetime." -#: fields.py:1170 +#: fields.py:1303 +#, python-brace-format msgid "Time has wrong format. Use one of these formats instead: {format}." msgstr "Timpul are formatul greșit. Utilizați unul dintre aceste formate în loc: {format}." -#: fields.py:1232 +#: fields.py:1365 +#, python-brace-format msgid "Duration has wrong format. Use one of these formats instead: {format}." msgstr "Durata are formatul greșit. Utilizați unul dintre aceste formate în loc: {format}." -#: fields.py:1251 fields.py:1300 +#: fields.py:1399 fields.py:1456 +#, python-brace-format msgid "\"{input}\" is not a valid choice." msgstr "\"{input}\" nu este o opțiune validă." -#: fields.py:1254 relations.py:71 relations.py:441 +#: fields.py:1402 +#, python-brace-format msgid "More than {count} items..." msgstr "Mai mult de {count} articole ..." -#: fields.py:1301 fields.py:1448 relations.py:437 serializers.py:524 +#: fields.py:1457 fields.py:1603 relations.py:485 serializers.py:570 +#, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "Se aștepta o listă de elemente, dar s-a primit tip \"{input_type}\"." -#: fields.py:1302 +#: fields.py:1458 msgid "This selection may not be empty." msgstr "Această selecție nu poate fi goală." -#: fields.py:1339 +#: fields.py:1495 +#, python-brace-format msgid "\"{input}\" is not a valid path choice." msgstr "\"{input}\" nu este o cale validă." -#: fields.py:1358 +#: fields.py:1514 msgid "No file was submitted." -msgstr "Nici un fișier nu a fost sumis." +msgstr "Nu a fost trimis nici un fișier." -#: fields.py:1359 +#: fields.py:1515 msgid "" "The submitted data was not a file. Check the encoding type on the form." msgstr "Datele prezentate nu sunt un fișier. Verificați tipul de codificare de pe formular." -#: fields.py:1360 +#: fields.py:1516 msgid "No filename could be determined." msgstr "Numele fișierului nu a putut fi determinat." -#: fields.py:1361 +#: fields.py:1517 msgid "The submitted file is empty." -msgstr "Fișierul sumis este gol." +msgstr "Fișierul trimis este gol." -#: fields.py:1362 +#: fields.py:1518 +#, python-brace-format msgid "" "Ensure this filename has at most {max_length} characters (it has {length})." msgstr "Asigurați-vă că acest nume de fișier are cel mult {max_length} caractere (momentan are {length})." -#: fields.py:1410 +#: fields.py:1566 msgid "" "Upload a valid image. The file you uploaded was either not an image or a " "corrupted image." msgstr "Încărcați o imagine validă. Fișierul încărcat a fost fie nu o imagine sau o imagine coruptă." -#: fields.py:1449 relations.py:438 serializers.py:525 +#: fields.py:1604 relations.py:486 serializers.py:571 msgid "This list may not be empty." msgstr "Această listă nu poate fi goală." -#: fields.py:1502 +#: fields.py:1605 +#, python-brace-format +msgid "Ensure this field has at least {min_length} elements." +msgstr "" + +#: fields.py:1606 +#, python-brace-format +msgid "Ensure this field has no more than {max_length} elements." +msgstr "" + +#: fields.py:1682 +#, python-brace-format msgid "Expected a dictionary of items but got type \"{input_type}\"." msgstr "Se aștepta un dicționar de obiecte, dar s-a primit tipul \"{input_type}\"." -#: fields.py:1549 +#: fields.py:1683 +msgid "This dictionary may not be empty." +msgstr "" + +#: fields.py:1755 msgid "Value must be valid JSON." msgstr "Valoarea trebuie să fie JSON valid." -#: filters.py:36 templates/rest_framework/filters/django_filter.html:5 -msgid "Submit" -msgstr "Sumiteţi" +#: filters.py:49 templates/rest_framework/filters/search.html:2 +msgid "Search" +msgstr "Căutare" -#: filters.py:336 +#: filters.py:50 +msgid "A search term." +msgstr "" + +#: filters.py:180 templates/rest_framework/filters/ordering.html:3 +msgid "Ordering" +msgstr "Ordonare" + +#: filters.py:181 +msgid "Which field to use when ordering the results." +msgstr "" + +#: filters.py:287 msgid "ascending" -msgstr "" +msgstr "ascendent" -#: filters.py:337 +#: filters.py:288 msgid "descending" +msgstr "descendent" + +#: pagination.py:174 +msgid "A page number within the paginated result set." msgstr "" -#: pagination.py:193 +#: pagination.py:179 pagination.py:372 pagination.py:590 +msgid "Number of results to return per page." +msgstr "" + +#: pagination.py:189 msgid "Invalid page." msgstr "Pagină nevalidă." -#: pagination.py:427 +#: pagination.py:374 +msgid "The initial index from which to return the results." +msgstr "" + +#: pagination.py:581 +msgid "The pagination cursor value." +msgstr "" + +#: pagination.py:583 msgid "Invalid cursor" msgstr "Cursor nevalid" -#: relations.py:207 +#: relations.py:246 +#, python-brace-format msgid "Invalid pk \"{pk_value}\" - object does not exist." msgstr "Pk \"{pk_value}\" nevalid - obiectul nu există." -#: relations.py:208 +#: relations.py:247 +#, python-brace-format msgid "Incorrect type. Expected pk value, received {data_type}." msgstr "Tip incorect. Se aștepta un pk, dar s-a primit \"{data_type}\"." -#: relations.py:240 +#: relations.py:280 msgid "Invalid hyperlink - No URL match." msgstr "Hyperlink nevalid - Nici un URL nu se potrivește." -#: relations.py:241 +#: relations.py:281 msgid "Invalid hyperlink - Incorrect URL match." msgstr "Hyperlink nevalid - Potrivire URL incorectă." -#: relations.py:242 +#: relations.py:282 msgid "Invalid hyperlink - Object does not exist." msgstr "Hyperlink nevalid - Obiectul nu există." -#: relations.py:243 +#: relations.py:283 +#, python-brace-format msgid "Incorrect type. Expected URL string, received {data_type}." msgstr "Tip incorect. Se aștepta un URL, dar s-a primit \"{data_type}\"." -#: relations.py:401 +#: relations.py:448 +#, python-brace-format msgid "Object with {slug_name}={value} does not exist." msgstr "Obiectul cu {slug_name}={value} nu există." -#: relations.py:402 +#: relations.py:449 msgid "Invalid value." msgstr "Valoare nevalidă." -#: serializers.py:326 +#: schemas/utils.py:32 +msgid "unique integer value" +msgstr "" + +#: schemas/utils.py:34 +msgid "UUID string" +msgstr "" + +#: schemas/utils.py:36 +msgid "unique value" +msgstr "" + +#: schemas/utils.py:38 +#, python-brace-format +msgid "A {value_type} identifying this {name}." +msgstr "" + +#: serializers.py:337 +#, python-brace-format msgid "Invalid data. Expected a dictionary, but got {datatype}." msgstr "Date nevalide. Se aștepta un dicționar de obiecte, dar s-a primit \"{datatype}\"." #: templates/rest_framework/admin.html:116 -#: templates/rest_framework/base.html:128 +#: templates/rest_framework/base.html:136 +msgid "Extra Actions" +msgstr "" + +#: templates/rest_framework/admin.html:130 +#: templates/rest_framework/base.html:150 msgid "Filters" msgstr "Filtre" -#: templates/rest_framework/filters/django_filter.html:2 -#: templates/rest_framework/filters/django_filter_crispyforms.html:4 -msgid "Field filters" -msgstr "Filtre câmpuri" +#: templates/rest_framework/base.html:37 +msgid "navbar" +msgstr "" -#: templates/rest_framework/filters/ordering.html:3 -msgid "Ordering" -msgstr "Ordonare" +#: templates/rest_framework/base.html:75 +msgid "content" +msgstr "" -#: templates/rest_framework/filters/search.html:2 -msgid "Search" -msgstr "Căutare" +#: templates/rest_framework/base.html:78 +msgid "request form" +msgstr "" -#: templates/rest_framework/horizontal/radio.html:2 -#: templates/rest_framework/inline/radio.html:2 -#: templates/rest_framework/vertical/radio.html:2 +#: templates/rest_framework/base.html:157 +msgid "main content" +msgstr "" + +#: templates/rest_framework/base.html:173 +msgid "request info" +msgstr "" + +#: templates/rest_framework/base.html:177 +msgid "response info" +msgstr "" + +#: templates/rest_framework/horizontal/radio.html:4 +#: templates/rest_framework/inline/radio.html:3 +#: templates/rest_framework/vertical/radio.html:3 msgid "None" msgstr "Nici unul/una" -#: templates/rest_framework/horizontal/select_multiple.html:2 -#: templates/rest_framework/inline/select_multiple.html:2 -#: templates/rest_framework/vertical/select_multiple.html:2 +#: templates/rest_framework/horizontal/select_multiple.html:4 +#: templates/rest_framework/inline/select_multiple.html:3 +#: templates/rest_framework/vertical/select_multiple.html:3 msgid "No items to select." msgstr "Nu există elemente pentru a fi selectate." -#: validators.py:43 +#: validators.py:39 msgid "This field must be unique." msgstr "Acest câmp trebuie să fie unic." -#: validators.py:97 +#: validators.py:89 +#, python-brace-format msgid "The fields {field_names} must make a unique set." msgstr "Câmpurile {field_names} trebuie să formeze un set unic." -#: validators.py:245 +#: validators.py:171 +#, python-brace-format +msgid "Surrogate characters are not allowed: U+{code_point:X}." +msgstr "" + +#: validators.py:243 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" date." msgstr "Acest câmp trebuie să fie unic pentru data \"{date_field}\"." -#: validators.py:260 +#: validators.py:258 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" month." msgstr "Acest câmp trebuie să fie unic pentru luna \"{date_field}\"." -#: validators.py:273 +#: validators.py:271 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" year." msgstr "Acest câmp trebuie să fie unic pentru anul \"{date_field}\"." -#: versioning.py:42 +#: versioning.py:40 msgid "Invalid version in \"Accept\" header." msgstr "Versiune nevalidă în antetul \"Accept\"." -#: versioning.py:73 +#: versioning.py:71 msgid "Invalid version in URL path." msgstr "Versiune nevalidă în calea URL." -#: versioning.py:115 +#: versioning.py:116 msgid "Invalid version in URL path. Does not match any version namespace." -msgstr "" +msgstr "Versiune nevalidă în calea URL. Nu se potrivește cu niciun spațiu de nume al versiunii." -#: versioning.py:147 +#: versioning.py:148 msgid "Invalid version in hostname." msgstr "Versiune nevalidă în numele de gazdă." -#: versioning.py:169 +#: versioning.py:170 msgid "Invalid version in query parameter." -msgstr "Versiune nevalid în parametrul de interogare." - -#: views.py:88 -msgid "Permission denied." -msgstr "Permisiune refuzată." +msgstr "Versiune nevalidă în parametrul de interogare." diff --git a/rest_framework/locale/ru/LC_MESSAGES/django.mo b/rest_framework/locale/ru/LC_MESSAGES/django.mo index 85918d65abc9769451f01eb9ecc1add82728bfcb..82688a41205544a65abef56ffcbdd70f883c70f4 100644 GIT binary patch delta 2405 zcmZYAeN0tl9Ki7hE-x2_EAIsOa?lh|AYKF!C_)?)U2rJAt=Yw!(}&u6g((-W0i zhHgy7V<-!J*}ndv?T;w)-N#B5P-<egPngjQ69|%;_}pUq$CVE|_PHGR{u7R=fq} z#(vcBILd_*u@5GBReaXsG0ow$ztQ*Y{ZJb=?Uj!Oe< zZ;(z9<${a+bl?<@;4SRM_C?k!dI{zJ91eCHp0xcH&oQoDVlDJ4N-^eY6f8DjEuOQz ziXO%R7o{pI96_mO11s?swqeFnrH)`99>X~#X=;#)^x_>{fn5)hB|L)N_y=yrmgQE) zUd2MjbJ&mRJTxj(9j5aV7yiNtJVE|=R>iS=nP3&lYcz)I@jO=H9LoK9%vz5@Y{r}D z#6liot*RW0umk0_JBo5tGq^&w@;jY6E+kVq#kd*etR|59QZL{m7({suXYJ2rRw=S1 zoQL%&HL(c~;y7-{yC^$vW^$>G11K8^Vu_^k8XdXO!SZ(DE|l>lT#Kp9Dhq5u`GZp^ zXa6b6^J%uFR}7qqO-J>PeJ(kk&-F%$}9eA~S#X1wpc~!ydC~v$EwV z)wg)!L0QL=8d0%x}caC~X1JM#!ryHM57|m5%cY+l!C}2A}y9q zT4aDy5B2sq8XJjteZaX$pLUjn{&q&ihMcZ54n2^Puv}~MdxkZie?%K_kM#6uZr_+T z>KPjL`hA+uJ>VH0boY2d$5XnZ^n0mQp|Z4mhdz|qpY9&+@%VbZzJ03K6Y1)+nVqik z(&93HDzvh-HLEN2hO8`YyL;5@8PZyZdj0zkjA?a;{8q2w8L!Vj>UD=Evc8GZU&-zX zt;v~jhN71Z#Ou{76CIin)ZZyxyv+FA_*gS88z0cQYE;csdAi(GQnD0iUT+wBPbK5XDT%wC!w@w zqdZ9?%GP^h4#xW5K@}Kcr=SkvbbJFj zZgnl@b>vUo;Ue?gM@gSlCdow$O1lKhu>$3Y9a)^eto&qb;1!hiZImQ>h_lc-HhQ)# zDD451Cm2B)_akcf0A+zW*+z1yC73{a5M=?w_&6TM3cQ@n{;#8QpALD_W|lt=TVr;i zJn2BJ{R+;YeG*IKl==yuqMgc@8qtX@_#R5GJVaSgHLI0eX-7%o<0w0SJ4mITN)nH; z0h^G7RqtXSeuU4Wjcw`1<0x(GM5Wp=gaN#VF5JigZ^qA1#urYGF7Qyy-|;a0^;&en z!JAYhJBvuoRoIMk@y(bw(M{W05MAIdZHgnJ!zCL4`L))#46p#kKe~vUpXp_(J{wB&wynHGv-GMILhimX2eu}lE zycOeSMw2EFYiYZ1G9JT4_yw-Sq)Memq0Au*$s$sTe~ZkOLa-6Cj_7t66)wzS6iF&M z7AcaD%LqwSDe@Fci3CCxz=;{Z2el{*kRn^Y*r-L1YXkL7#1ev&Gk%DS`3ekwi$zCo+xNqf0#1jf5QK3PN(GiI_v!2~I^lNl1}|UPS~Y zL8Qzl))}=&mxWYwh$*qIXE2eF*G-C?`2?dDeN&`LE*ifNQm-La6U(JRX(ZB(TJ%?x zDpMEqdwkt}f#(Y}Pp{_l2Q<63-R||cG>6~sb=!Sqq2lDmi3R<1_PPH*s;zD5;;=8- zl#uH7y0k4GZ@}Ht8}_BWW(qfE){nBRboX?5dV4*7pXPG=JZ@K6Xvk8X*xKjl@&v+{ zEybp>cBj+d=L^XFU7lXM!z+V+&fXU4$Z0cIRF{_5l$OubDk|qx)r7vy$t`T?@wEGU zc4|$Y-mT89ZeOQgo7dh$qtoB%57f4I**)HHeD0T{Qcg!+&@bp`^)sQ*tu3LeR%gn8 z&k@QjwI#^n%fhyCXOdGj{gOUn3_c&emj7H*_{y|~xCsaKk;tCNUZ%OE=^yK-^h=T5 z`q{`Jb6yOMvH3G!kL)%2PU&a#a||2`@3dV_7=JV}z_7jgMg3G{IQC6G-xC=MEi2Bm VjPTJX`i02LGE4@Qg%-_t@DJ8-ZFc|w diff --git a/rest_framework/locale/ru/LC_MESSAGES/django.po b/rest_framework/locale/ru/LC_MESSAGES/django.po index 7e09b227e..30df5d496 100644 --- a/rest_framework/locale/ru/LC_MESSAGES/django.po +++ b/rest_framework/locale/ru/LC_MESSAGES/django.po @@ -3,18 +3,20 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Anton Bazhanov , 2018 # Grigory Mishchenko , 2017 # Kirill Tarasenko, 2015 # koodjo , 2015 # Mike TUMS , 2015 # Sergei Sinitsyn , 2016 +# Val Grom , 2020 msgid "" msgstr "" "Project-Id-Version: Django REST framework\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-07-12 16:13+0100\n" -"PO-Revision-Date: 2017-08-03 14:58+0000\n" -"Last-Translator: Grigory Mishchenko \n" +"POT-Creation-Date: 2020-10-13 21:45+0200\n" +"PO-Revision-Date: 2020-10-13 19:45+0000\n" +"Last-Translator: Xavier Ordoquy \n" "Language-Team: Russian (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -22,40 +24,40 @@ msgstr "" "Language: ru\n" "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" -#: authentication.py:73 +#: authentication.py:70 msgid "Invalid basic header. No credentials provided." msgstr "Недопустимый заголовок. Не предоставлены учетные данные." -#: authentication.py:76 +#: authentication.py:73 msgid "Invalid basic header. Credentials string should not contain spaces." msgstr "Недопустимый заголовок. Учетные данные не должны содержать пробелов." -#: authentication.py:82 +#: authentication.py:83 msgid "Invalid basic header. Credentials not correctly base64 encoded." msgstr "Недопустимый заголовок. Учетные данные некорректно закодированны в base64." -#: authentication.py:99 +#: authentication.py:101 msgid "Invalid username/password." msgstr "Недопустимые имя пользователя или пароль." -#: authentication.py:102 authentication.py:198 +#: authentication.py:104 authentication.py:206 msgid "User inactive or deleted." msgstr "Пользователь неактивен или удален." -#: authentication.py:176 +#: authentication.py:184 msgid "Invalid token header. No credentials provided." msgstr "Недопустимый заголовок токена. Не предоставлены учетные данные." -#: authentication.py:179 +#: authentication.py:187 msgid "Invalid token header. Token string should not contain spaces." msgstr "Недопустимый заголовок токена. Токен не должен содержать пробелов." -#: authentication.py:185 +#: authentication.py:193 msgid "" "Invalid token header. Token string should not contain invalid characters." msgstr "Недопустимый заголовок токена. Токен не должен содержать недопустимые символы." -#: authentication.py:195 +#: authentication.py:203 msgid "Invalid token." msgstr "Недопустимый токен." @@ -63,382 +65,515 @@ msgstr "Недопустимый токен." msgid "Auth Token" msgstr "Токен аутентификации" -#: authtoken/models.py:15 +#: authtoken/models.py:13 msgid "Key" msgstr "Ключ" -#: authtoken/models.py:18 +#: authtoken/models.py:16 msgid "User" msgstr "Пользователь" -#: authtoken/models.py:20 +#: authtoken/models.py:18 msgid "Created" msgstr "Создан" -#: authtoken/models.py:29 +#: authtoken/models.py:27 authtoken/serializers.py:19 msgid "Token" msgstr "Токен" -#: authtoken/models.py:30 +#: authtoken/models.py:28 msgid "Tokens" msgstr "Токены" -#: authtoken/serializers.py:8 +#: authtoken/serializers.py:9 msgid "Username" msgstr "Имя пользователя" -#: authtoken/serializers.py:9 +#: authtoken/serializers.py:13 msgid "Password" msgstr "Пароль" -#: authtoken/serializers.py:20 -msgid "User account is disabled." -msgstr "Учетная запись пользователя отключена." - -#: authtoken/serializers.py:23 +#: authtoken/serializers.py:35 msgid "Unable to log in with provided credentials." msgstr "Невозможно войти с предоставленными учетными данными." -#: authtoken/serializers.py:26 +#: authtoken/serializers.py:38 msgid "Must include \"username\" and \"password\"." msgstr "Должен включать \"username\" и \"password\"." -#: exceptions.py:49 +#: exceptions.py:102 msgid "A server error occurred." msgstr "Произошла ошибка сервера." -#: exceptions.py:84 +#: exceptions.py:142 +msgid "Invalid input." +msgstr "" + +#: exceptions.py:161 msgid "Malformed request." msgstr "Искаженный запрос." -#: exceptions.py:89 +#: exceptions.py:167 msgid "Incorrect authentication credentials." msgstr "Некорректные учетные данные." -#: exceptions.py:94 +#: exceptions.py:173 msgid "Authentication credentials were not provided." msgstr "Учетные данные не были предоставлены." -#: exceptions.py:99 +#: exceptions.py:179 msgid "You do not have permission to perform this action." msgstr "У вас нет прав для выполнения этой операции." -#: exceptions.py:104 views.py:81 +#: exceptions.py:185 msgid "Not found." msgstr "Не найдено." -#: exceptions.py:109 +#: exceptions.py:191 +#, python-brace-format msgid "Method \"{method}\" not allowed." msgstr "Метод \"{method}\" не разрешен." -#: exceptions.py:120 +#: exceptions.py:202 msgid "Could not satisfy the request Accept header." msgstr "Невозможно удовлетворить \"Accept\" заголовок запроса." -#: exceptions.py:132 +#: exceptions.py:212 +#, python-brace-format msgid "Unsupported media type \"{media_type}\" in request." msgstr "Неподдерживаемый тип данных \"{media_type}\" в запросе." -#: exceptions.py:145 +#: exceptions.py:223 msgid "Request was throttled." msgstr "Запрос был проигнорирован." -#: fields.py:269 relations.py:206 relations.py:239 validators.py:98 -#: validators.py:181 +#: exceptions.py:224 +#, python-brace-format +msgid "Expected available in {wait} second." +msgstr "" + +#: exceptions.py:225 +#, python-brace-format +msgid "Expected available in {wait} seconds." +msgstr "" + +#: fields.py:316 relations.py:245 relations.py:279 validators.py:90 +#: validators.py:183 msgid "This field is required." msgstr "Это поле обязательно." -#: fields.py:270 +#: fields.py:317 msgid "This field may not be null." msgstr "Это поле не может быть null." -#: fields.py:608 fields.py:639 -msgid "\"{input}\" is not a valid boolean." -msgstr "\"{input}\" не является корректным булевым значением." +#: fields.py:701 +msgid "Must be a valid boolean." +msgstr "" -#: fields.py:674 +#: fields.py:766 +msgid "Not a valid string." +msgstr "" + +#: fields.py:767 msgid "This field may not be blank." msgstr "Это поле не может быть пустым." -#: fields.py:675 fields.py:1675 +#: fields.py:768 fields.py:1881 +#, python-brace-format msgid "Ensure this field has no more than {max_length} characters." msgstr "Убедитесь, что в этом поле не больше {max_length} символов." -#: fields.py:676 +#: fields.py:769 +#, python-brace-format msgid "Ensure this field has at least {min_length} characters." msgstr "Убедитесь, что в этом поле как минимум {min_length} символов." -#: fields.py:713 +#: fields.py:816 msgid "Enter a valid email address." msgstr "Введите корректный адрес электронной почты." -#: fields.py:724 +#: fields.py:827 msgid "This value does not match the required pattern." msgstr "Значение не соответствует требуемому паттерну." -#: fields.py:735 +#: fields.py:838 msgid "" "Enter a valid \"slug\" consisting of letters, numbers, underscores or " "hyphens." msgstr "Введите корректный \"slug\", состоящий из букв, цифр, знаков подчеркивания или дефисов." -#: fields.py:747 +#: fields.py:839 +msgid "" +"Enter a valid \"slug\" consisting of Unicode letters, numbers, underscores, " +"or hyphens." +msgstr "" + +#: fields.py:854 msgid "Enter a valid URL." msgstr "Введите корректный URL." -#: fields.py:760 -msgid "\"{value}\" is not a valid UUID." -msgstr "\"{value}\" не является корректным UUID." +#: fields.py:867 +msgid "Must be a valid UUID." +msgstr "" -#: fields.py:796 +#: fields.py:903 msgid "Enter a valid IPv4 or IPv6 address." msgstr "Введите действительный адрес IPv4 или IPv6." -#: fields.py:821 +#: fields.py:931 msgid "A valid integer is required." msgstr "Требуется целочисленное значение." -#: fields.py:822 fields.py:857 fields.py:891 +#: fields.py:932 fields.py:969 fields.py:1005 fields.py:1366 +#, python-brace-format msgid "Ensure this value is less than or equal to {max_value}." msgstr "Убедитесь, что значение меньше или равно {max_value}." -#: fields.py:823 fields.py:858 fields.py:892 +#: fields.py:933 fields.py:970 fields.py:1006 fields.py:1367 +#, python-brace-format msgid "Ensure this value is greater than or equal to {min_value}." msgstr "Убедитесь, что значение больше или равно {min_value}." -#: fields.py:824 fields.py:859 fields.py:896 +#: fields.py:934 fields.py:971 fields.py:1010 msgid "String value too large." msgstr "Слишком длинное значение." -#: fields.py:856 fields.py:890 +#: fields.py:968 fields.py:1004 msgid "A valid number is required." msgstr "Требуется численное значение." -#: fields.py:893 +#: fields.py:1007 +#, python-brace-format msgid "Ensure that there are no more than {max_digits} digits in total." msgstr "Убедитесь, что в числе не больше {max_digits} знаков." -#: fields.py:894 +#: fields.py:1008 +#, python-brace-format msgid "" "Ensure that there are no more than {max_decimal_places} decimal places." msgstr "Убедитесь, что в числе не больше {max_decimal_places} знаков в дробной части." -#: fields.py:895 +#: fields.py:1009 +#, python-brace-format msgid "" "Ensure that there are no more than {max_whole_digits} digits before the " "decimal point." msgstr "Убедитесь, что в числе не больше {max_whole_digits} знаков в целой части." -#: fields.py:1025 +#: fields.py:1148 +#, python-brace-format msgid "Datetime has wrong format. Use one of these formats instead: {format}." msgstr "Неправильный формат datetime. Используйте один из этих форматов: {format}." -#: fields.py:1026 +#: fields.py:1149 msgid "Expected a datetime but got a date." msgstr "Ожидался datetime, но был получен date." -#: fields.py:1103 +#: fields.py:1150 +#, python-brace-format +msgid "Invalid datetime for the timezone \"{timezone}\"." +msgstr "" + +#: fields.py:1151 +msgid "Datetime value out of range." +msgstr "" + +#: fields.py:1236 +#, python-brace-format msgid "Date has wrong format. Use one of these formats instead: {format}." msgstr "Неправильный формат date. Используйте один из этих форматов: {format}." -#: fields.py:1104 +#: fields.py:1237 msgid "Expected a date but got a datetime." msgstr "Ожидался date, но был получен datetime." -#: fields.py:1170 +#: fields.py:1303 +#, python-brace-format msgid "Time has wrong format. Use one of these formats instead: {format}." msgstr "Неправильный формат времени. Используйте один из этих форматов: {format}." -#: fields.py:1232 +#: fields.py:1365 +#, python-brace-format msgid "Duration has wrong format. Use one of these formats instead: {format}." msgstr "Неправильный формат. Используйте один из этих форматов: {format}." -#: fields.py:1251 fields.py:1300 +#: fields.py:1399 fields.py:1456 +#, python-brace-format msgid "\"{input}\" is not a valid choice." msgstr "\"{input}\" не является корректным значением." -#: fields.py:1254 relations.py:71 relations.py:441 +#: fields.py:1402 +#, python-brace-format msgid "More than {count} items..." msgstr "Элементов больше чем {count}" -#: fields.py:1301 fields.py:1448 relations.py:437 serializers.py:524 +#: fields.py:1457 fields.py:1603 relations.py:485 serializers.py:570 +#, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "Ожидался list со значениями, но был получен \"{input_type}\"." -#: fields.py:1302 +#: fields.py:1458 msgid "This selection may not be empty." msgstr "Выбор не может быть пустым." -#: fields.py:1339 +#: fields.py:1495 +#, python-brace-format msgid "\"{input}\" is not a valid path choice." msgstr "\"{input}\" не является корректным путем до файла" -#: fields.py:1358 +#: fields.py:1514 msgid "No file was submitted." msgstr "Не был загружен файл." -#: fields.py:1359 +#: fields.py:1515 msgid "" "The submitted data was not a file. Check the encoding type on the form." msgstr "Загруженный файл не является корректным файлом." -#: fields.py:1360 +#: fields.py:1516 msgid "No filename could be determined." msgstr "Невозможно определить имя файла." -#: fields.py:1361 +#: fields.py:1517 msgid "The submitted file is empty." msgstr "Загруженный файл пуст." -#: fields.py:1362 +#: fields.py:1518 +#, python-brace-format msgid "" "Ensure this filename has at most {max_length} characters (it has {length})." msgstr "Убедитесь, что имя файла меньше {max_length} символов (сейчас {length})." -#: fields.py:1410 +#: fields.py:1566 msgid "" "Upload a valid image. The file you uploaded was either not an image or a " "corrupted image." msgstr "Загрузите корректное изображение. Загруженный файл не является изображением, либо является испорченным." -#: fields.py:1449 relations.py:438 serializers.py:525 +#: fields.py:1604 relations.py:486 serializers.py:571 msgid "This list may not be empty." msgstr "Этот список не может быть пустым." -#: fields.py:1502 +#: fields.py:1605 +#, python-brace-format +msgid "Ensure this field has at least {min_length} elements." +msgstr "" + +#: fields.py:1606 +#, python-brace-format +msgid "Ensure this field has no more than {max_length} elements." +msgstr "" + +#: fields.py:1682 +#, python-brace-format msgid "Expected a dictionary of items but got type \"{input_type}\"." msgstr "Ожидался словарь со значениями, но был получен \"{input_type}\"." -#: fields.py:1549 +#: fields.py:1683 +msgid "This dictionary may not be empty." +msgstr "" + +#: fields.py:1755 msgid "Value must be valid JSON." msgstr "Значение должно быть правильным JSON." -#: filters.py:36 templates/rest_framework/filters/django_filter.html:5 -msgid "Submit" -msgstr "Отправить" +#: filters.py:49 templates/rest_framework/filters/search.html:2 +msgid "Search" +msgstr "Поиск" -#: filters.py:336 +#: filters.py:50 +msgid "A search term." +msgstr "" + +#: filters.py:180 templates/rest_framework/filters/ordering.html:3 +msgid "Ordering" +msgstr "Порядок сортировки" + +#: filters.py:181 +msgid "Which field to use when ordering the results." +msgstr "" + +#: filters.py:287 msgid "ascending" -msgstr "" +msgstr "по возрастанию" -#: filters.py:337 +#: filters.py:288 msgid "descending" +msgstr "по убыванию" + +#: pagination.py:174 +msgid "A page number within the paginated result set." msgstr "" -#: pagination.py:193 +#: pagination.py:179 pagination.py:372 pagination.py:590 +msgid "Number of results to return per page." +msgstr "" + +#: pagination.py:189 msgid "Invalid page." msgstr "Неправильная страница" -#: pagination.py:427 +#: pagination.py:374 +msgid "The initial index from which to return the results." +msgstr "" + +#: pagination.py:581 +msgid "The pagination cursor value." +msgstr "" + +#: pagination.py:583 msgid "Invalid cursor" msgstr "Не корректный курсор" -#: relations.py:207 +#: relations.py:246 +#, python-brace-format msgid "Invalid pk \"{pk_value}\" - object does not exist." msgstr "Недопустимый первичный ключ \"{pk_value}\" - объект не существует." -#: relations.py:208 +#: relations.py:247 +#, python-brace-format msgid "Incorrect type. Expected pk value, received {data_type}." msgstr "Некорректный тип. Ожидалось значение первичного ключа, получен {data_type}." -#: relations.py:240 +#: relations.py:280 msgid "Invalid hyperlink - No URL match." msgstr "Недопустимая ссылка - нет совпадения по URL." -#: relations.py:241 +#: relations.py:281 msgid "Invalid hyperlink - Incorrect URL match." msgstr "Недопустимая ссылка - некорректное совпадение по URL," -#: relations.py:242 +#: relations.py:282 msgid "Invalid hyperlink - Object does not exist." msgstr "Недопустимая ссылка - объект не существует." -#: relations.py:243 +#: relations.py:283 +#, python-brace-format msgid "Incorrect type. Expected URL string, received {data_type}." msgstr "Некорректный тип. Ожидался URL, получен {data_type}." -#: relations.py:401 +#: relations.py:448 +#, python-brace-format msgid "Object with {slug_name}={value} does not exist." msgstr "Объект с {slug_name}={value} не существует." -#: relations.py:402 +#: relations.py:449 msgid "Invalid value." msgstr "Недопустимое значение." -#: serializers.py:326 +#: schemas/utils.py:32 +msgid "unique integer value" +msgstr "" + +#: schemas/utils.py:34 +msgid "UUID string" +msgstr "" + +#: schemas/utils.py:36 +msgid "unique value" +msgstr "" + +#: schemas/utils.py:38 +#, python-brace-format +msgid "A {value_type} identifying this {name}." +msgstr "" + +#: serializers.py:337 +#, python-brace-format msgid "Invalid data. Expected a dictionary, but got {datatype}." msgstr "Недопустимые данные. Ожидался dictionary, но был получен {datatype}." #: templates/rest_framework/admin.html:116 -#: templates/rest_framework/base.html:128 +#: templates/rest_framework/base.html:136 +msgid "Extra Actions" +msgstr "" + +#: templates/rest_framework/admin.html:130 +#: templates/rest_framework/base.html:150 msgid "Filters" msgstr "Фильтры" -#: templates/rest_framework/filters/django_filter.html:2 -#: templates/rest_framework/filters/django_filter_crispyforms.html:4 -msgid "Field filters" -msgstr "Фильтры полей" +#: templates/rest_framework/base.html:37 +msgid "navbar" +msgstr "" -#: templates/rest_framework/filters/ordering.html:3 -msgid "Ordering" -msgstr "Порядок сортировки" +#: templates/rest_framework/base.html:75 +msgid "content" +msgstr "" -#: templates/rest_framework/filters/search.html:2 -msgid "Search" -msgstr "Поиск" +#: templates/rest_framework/base.html:78 +msgid "request form" +msgstr "" -#: templates/rest_framework/horizontal/radio.html:2 -#: templates/rest_framework/inline/radio.html:2 -#: templates/rest_framework/vertical/radio.html:2 +#: templates/rest_framework/base.html:157 +msgid "main content" +msgstr "" + +#: templates/rest_framework/base.html:173 +msgid "request info" +msgstr "" + +#: templates/rest_framework/base.html:177 +msgid "response info" +msgstr "" + +#: templates/rest_framework/horizontal/radio.html:4 +#: templates/rest_framework/inline/radio.html:3 +#: templates/rest_framework/vertical/radio.html:3 msgid "None" msgstr "Ничего" -#: templates/rest_framework/horizontal/select_multiple.html:2 -#: templates/rest_framework/inline/select_multiple.html:2 -#: templates/rest_framework/vertical/select_multiple.html:2 +#: templates/rest_framework/horizontal/select_multiple.html:4 +#: templates/rest_framework/inline/select_multiple.html:3 +#: templates/rest_framework/vertical/select_multiple.html:3 msgid "No items to select." msgstr "Нет элементов для выбора" -#: validators.py:43 +#: validators.py:39 msgid "This field must be unique." msgstr "Это поле должно быть уникально." -#: validators.py:97 +#: validators.py:89 +#, python-brace-format msgid "The fields {field_names} must make a unique set." msgstr "Поля {field_names} должны производить массив с уникальными значениями." -#: validators.py:245 +#: validators.py:171 +#, python-brace-format +msgid "Surrogate characters are not allowed: U+{code_point:X}." +msgstr "" + +#: validators.py:243 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" date." msgstr "Это поле должно быть уникально для даты \"{date_field}\"." -#: validators.py:260 +#: validators.py:258 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" month." msgstr "Это поле должно быть уникально для месяца \"{date_field}\"." -#: validators.py:273 +#: validators.py:271 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" year." msgstr "Это поле должно быть уникально для года \"{date_field}\"." -#: versioning.py:42 +#: versioning.py:40 msgid "Invalid version in \"Accept\" header." msgstr "Недопустимая версия в заголовке \"Accept\"." -#: versioning.py:73 +#: versioning.py:71 msgid "Invalid version in URL path." msgstr "Недопустимая версия в пути URL." -#: versioning.py:115 +#: versioning.py:116 msgid "Invalid version in URL path. Does not match any version namespace." -msgstr "" +msgstr "Недопустимая версия в пути URL. Не соответствует ни одному version namespace." -#: versioning.py:147 +#: versioning.py:148 msgid "Invalid version in hostname." msgstr "Недопустимая версия в имени хоста." -#: versioning.py:169 +#: versioning.py:170 msgid "Invalid version in query parameter." msgstr "Недопустимая версия в параметре запроса." - -#: views.py:88 -msgid "Permission denied." -msgstr "Доступ запрещен" diff --git a/rest_framework/locale/ru_RU/LC_MESSAGES/django.mo b/rest_framework/locale/ru_RU/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..d6da8f432d9025af1a83c7c408f46d16e8368f68 GIT binary patch literal 5208 zcmb`JTWlOx8OH}GHxr;K_iIm68rf=g?RA}!ZoFw|E)X?ogX>g8s$|By$Gg+)&TQsl z$4Vn5ahf!;8w&&~0;PajAzna^V<%3WY#w;yX-2>cAYSMLPdp(34@msJGkdWeCrtyB ztp9W7obUGkE;E05=z$+vTwmk&WqyP2v#hP)OYi3oSKkLLOMyA?^WYFD=Z=8i1YZMp zf-(3axbXqY`Z`zvw}U?ep9TL6=E3d{ru#*3KkJ`>kAi;#9|AXgDAoTk_+i$A;1|K& z;3vQl5L1>5eirn>F7Q0~5%331ya;-YrIuCvU zya0;6UxNMMCGex*JD}M6JGc#w{tdpsx}S$)?=090z6D0$??Bn#_c6-~z>A;{ZrqUK z8E~5QKf&*UQy)+99q_lT_Ym~Azz07Gci>_0+u&(X`1n2eNARzpi0juovi-@ zJ_hdCNUUH9#FRA&J`SD*H-Youli(kkxPfHsV!aDo2G4<#|6QL-^}Yl?%=#i&0dIoB z>t>9627Csjlq|wEb^%jkf?{7Ts4+Ue0*VYFn2S;{+)ExLCz5a6GMD5WSB%e+59qhP z$`87Xf5M4el3T?Ox2#9_$psawF3H#0>roy^9F)hZOKOO8WB9n^)}!#mCglXm^+IK< zal7i2RI%bYMV+<2p#trXYhP*K_k86Qi;?f^l5C_09XHfv_L2AX(a15Id)y%MwF)bC z$REwE&Cm5z%}XD<>UhmQHd4|>r)F12>Q%d_gA=N`R_Qux-LoF2?1Un3P&uv&z0j`S zyMl>|SJfk_cw5b=9!uTT9mhQ4U7?n!#~fWPsfryaf~{&h2#L*cN2=N_hm{jBY5R6D z)P8U$x!ZYpcUex@HQh2>^Ndv(yt?8F^Jt2zkQlf$8ooakv%>()LuE$oQG z7mj=Db`VT>J~iLkGBIVXXZ57@oJRpvwVELRK{Q%(2!WH&(Mn?;?q{v%ePSR&>tIul zHC)l1v#B`r>smdW%(B_8DQ-F~wc>fro;1BWs?})Kc8{zQTCwRyRa#)BU__Z96}isQ zh~_?2uX=W=ofKNJtg}koGciqik&4U_T`~b`N18dE6RtAHg?F1g`hHX=^7J8^ApbkLs?3VLjj5 zJ25el4Mn>%rjLneZ^=ZFp{B!3JBmzh{pY=ugR#@=M^rchLrE^%*R{)| z3tWPjtP^FZkA=OATgTmQCRL!r!lB{4nQfhO;?9`%Gke^kC%os?woxZ+hm=>wR@cF5 zQ=D?R%t<%c-YTpW-;{9fkhZ)?i^k zZjD6WV6I=i@=7YQBR9~4NUkYTDD=seIk%&*wIlviPy0D~G1Ia+SU|(msviYU^lb04 z;y2=(@mz8)UIdqtS=D?YDwd1MX_cHxPO`TUFDd>s;#EKkLOT;o|7DtzjJJUU+zUA#}^d}dCa4wcsZHDXoH8ivxMAo z+~E9MC~BX__RJRc#T2%aX>maGEsKM=tT^3ZwaD$duh`@)y3ZshMf6tOFlLatiW9ez zSrfvw|AW=$3%O(Mf7iMC9o^9^aR|AP^j_jfUQbE93T^EI5b{q!;DXV3MUvE{^#=Ok z*U-A+?apaRffNYoY4-1&u=i+kO(t8f_WLp^^*XDPGo<+%o|?K`FU)(isk-rEF}_Bn z&LyYRicgEX)a#wXPfIqLp=+o_Dp?+=W?#?|t3N>Q$AC%RT@9@GQdvC`#3gC`<@kzp zrzsCJ0UFXR$&4~BBfWcFT5>7AN(&}atmbLdX0vg(rcO-r#S3)u_XzYlatsm-$OvL# z+F6S5jF|)!))r~^SEV$ud!DB}hKEi(btCP31d_JHU%VP6Gh zdZ#o9?P6D^x!G4tddUvrJisS2B27A$vMPR)BArXKxGXul!J*5Dkb+CR8BArI!^Qda z=*B^*@5T7C=rfT`y(`HWFoSy4xI*g3L~|iIXT=vK0%>Y-__EY$r`>smFrL9TW!fOD zR%#>xNTBKG;)yAzB`TNbj1cyi8B#jj$tlAvuRz1pJY3I7R@%hL`){rGw8UEeKwJ76 zMH@UOv%+mN53P4#nx=S>Bfnw`pH1E*3geaVeTCv&!FNk5LEgB3v9%ur&3c(#F$Uz_ z*-r8l{z$_~MVem1^c$=$Q-D(hc9-`&a#Dns4Cw@8G%ZqGZyU;&scR`@qLWw zDa5vR85Nupa^_7*T}e~bYGuO~4A0}5zD%k4Q, 2018-2019 +msgid "" +msgstr "" +"Project-Id-Version: Django REST framework\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-10-13 21:45+0200\n" +"PO-Revision-Date: 2020-10-13 19:45+0000\n" +"Last-Translator: Xavier Ordoquy \n" +"Language-Team: Russian (Russia) (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/ru_RU/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ru_RU\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" + +#: authentication.py:70 +msgid "Invalid basic header. No credentials provided." +msgstr "" + +#: authentication.py:73 +msgid "Invalid basic header. Credentials string should not contain spaces." +msgstr "" + +#: authentication.py:83 +msgid "Invalid basic header. Credentials not correctly base64 encoded." +msgstr "" + +#: authentication.py:101 +msgid "Invalid username/password." +msgstr "Пожалуйста, введите корректные имя пользователя и пароль учётной записи. Оба поля могут быть чувствительны к регистру." + +#: authentication.py:104 authentication.py:206 +msgid "User inactive or deleted." +msgstr "Пользователь неактивен или удален." + +#: authentication.py:184 +msgid "Invalid token header. No credentials provided." +msgstr "" + +#: authentication.py:187 +msgid "Invalid token header. Token string should not contain spaces." +msgstr "" + +#: authentication.py:193 +msgid "" +"Invalid token header. Token string should not contain invalid characters." +msgstr "" + +#: authentication.py:203 +msgid "Invalid token." +msgstr "" + +#: authtoken/apps.py:7 +msgid "Auth Token" +msgstr "" + +#: authtoken/models.py:13 +msgid "Key" +msgstr "Ключ" + +#: authtoken/models.py:16 +msgid "User" +msgstr "Пользователь" + +#: authtoken/models.py:18 +msgid "Created" +msgstr "" + +#: authtoken/models.py:27 authtoken/serializers.py:19 +msgid "Token" +msgstr "" + +#: authtoken/models.py:28 +msgid "Tokens" +msgstr "" + +#: authtoken/serializers.py:9 +msgid "Username" +msgstr "Имя пользователя" + +#: authtoken/serializers.py:13 +msgid "Password" +msgstr "Пароль" + +#: authtoken/serializers.py:35 +msgid "Unable to log in with provided credentials." +msgstr "" + +#: authtoken/serializers.py:38 +msgid "Must include \"username\" and \"password\"." +msgstr "" + +#: exceptions.py:102 +msgid "A server error occurred." +msgstr "Ошибка сервера." + +#: exceptions.py:142 +msgid "Invalid input." +msgstr "" + +#: exceptions.py:161 +msgid "Malformed request." +msgstr "" + +#: exceptions.py:167 +msgid "Incorrect authentication credentials." +msgstr "" + +#: exceptions.py:173 +msgid "Authentication credentials were not provided." +msgstr "" + +#: exceptions.py:179 +msgid "You do not have permission to perform this action." +msgstr "У вас недостаточно прав для выполнения данного действия." + +#: exceptions.py:185 +msgid "Not found." +msgstr "Страница не найдена." + +#: exceptions.py:191 +#, python-brace-format +msgid "Method \"{method}\" not allowed." +msgstr "" + +#: exceptions.py:202 +msgid "Could not satisfy the request Accept header." +msgstr "" + +#: exceptions.py:212 +#, python-brace-format +msgid "Unsupported media type \"{media_type}\" in request." +msgstr "" + +#: exceptions.py:223 +msgid "Request was throttled." +msgstr "" + +#: exceptions.py:224 +#, python-brace-format +msgid "Expected available in {wait} second." +msgstr "" + +#: exceptions.py:225 +#, python-brace-format +msgid "Expected available in {wait} seconds." +msgstr "" + +#: fields.py:316 relations.py:245 relations.py:279 validators.py:90 +#: validators.py:183 +msgid "This field is required." +msgstr "Обязательное поле." + +#: fields.py:317 +msgid "This field may not be null." +msgstr "Это поле не может быть пустым." + +#: fields.py:701 +msgid "Must be a valid boolean." +msgstr "" + +#: fields.py:766 +msgid "Not a valid string." +msgstr "" + +#: fields.py:767 +msgid "This field may not be blank." +msgstr "Это поле не может быть пустым." + +#: fields.py:768 fields.py:1881 +#, python-brace-format +msgid "Ensure this field has no more than {max_length} characters." +msgstr "Убедитесь, что это значение содержит не более {max_length} символов." + +#: fields.py:769 +#, python-brace-format +msgid "Ensure this field has at least {min_length} characters." +msgstr "Убедитесь, что это значение содержит не менее {min_length} символов." + +#: fields.py:816 +msgid "Enter a valid email address." +msgstr "Введите правильный адрес электронной почты." + +#: fields.py:827 +msgid "This value does not match the required pattern." +msgstr "" + +#: fields.py:838 +msgid "" +"Enter a valid \"slug\" consisting of letters, numbers, underscores or " +"hyphens." +msgstr "Значение должно состоять только из букв, цифр, символов подчёркивания или дефисов, входящих в стандарт Юникод." + +#: fields.py:839 +msgid "" +"Enter a valid \"slug\" consisting of Unicode letters, numbers, underscores, " +"or hyphens." +msgstr "" + +#: fields.py:854 +msgid "Enter a valid URL." +msgstr "Введите правильный URL." + +#: fields.py:867 +msgid "Must be a valid UUID." +msgstr "" + +#: fields.py:903 +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "Введите действительный IPv4 или IPv6 адрес." + +#: fields.py:931 +msgid "A valid integer is required." +msgstr "Введите правильное число." + +#: fields.py:932 fields.py:969 fields.py:1005 fields.py:1366 +#, python-brace-format +msgid "Ensure this value is less than or equal to {max_value}." +msgstr "Убедитесь, что это значение меньше либо равно {max_value}." + +#: fields.py:933 fields.py:970 fields.py:1006 fields.py:1367 +#, python-brace-format +msgid "Ensure this value is greater than or equal to {min_value}." +msgstr "Убедитесь, что это значение больше либо равно {min_value}." + +#: fields.py:934 fields.py:971 fields.py:1010 +msgid "String value too large." +msgstr "" + +#: fields.py:968 fields.py:1004 +msgid "A valid number is required." +msgstr "" + +#: fields.py:1007 +#, python-brace-format +msgid "Ensure that there are no more than {max_digits} digits in total." +msgstr "Убедитесь, что вы ввели не более {max_digits} цифры." + +#: fields.py:1008 +#, python-brace-format +msgid "" +"Ensure that there are no more than {max_decimal_places} decimal places." +msgstr "Убедитесь, что вы ввели не более {max_decimal_places} цифры после запятой." + +#: fields.py:1009 +#, python-brace-format +msgid "" +"Ensure that there are no more than {max_whole_digits} digits before the " +"decimal point." +msgstr "Убедитесь, что вы ввели не более {max_whole_digits} цифры перед запятой." + +#: fields.py:1148 +#, python-brace-format +msgid "Datetime has wrong format. Use one of these formats instead: {format}." +msgstr "" + +#: fields.py:1149 +msgid "Expected a datetime but got a date." +msgstr "" + +#: fields.py:1150 +#, python-brace-format +msgid "Invalid datetime for the timezone \"{timezone}\"." +msgstr "" + +#: fields.py:1151 +msgid "Datetime value out of range." +msgstr "" + +#: fields.py:1236 +#, python-brace-format +msgid "Date has wrong format. Use one of these formats instead: {format}." +msgstr "" + +#: fields.py:1237 +msgid "Expected a date but got a datetime." +msgstr "" + +#: fields.py:1303 +#, python-brace-format +msgid "Time has wrong format. Use one of these formats instead: {format}." +msgstr "" + +#: fields.py:1365 +#, python-brace-format +msgid "Duration has wrong format. Use one of these formats instead: {format}." +msgstr "" + +#: fields.py:1399 fields.py:1456 +#, python-brace-format +msgid "\"{input}\" is not a valid choice." +msgstr "Значения {input} нет среди допустимых вариантов." + +#: fields.py:1402 +#, python-brace-format +msgid "More than {count} items..." +msgstr "" + +#: fields.py:1457 fields.py:1603 relations.py:485 serializers.py:570 +#, python-brace-format +msgid "Expected a list of items but got type \"{input_type}\"." +msgstr "" + +#: fields.py:1458 +msgid "This selection may not be empty." +msgstr "" + +#: fields.py:1495 +#, python-brace-format +msgid "\"{input}\" is not a valid path choice." +msgstr "" + +#: fields.py:1514 +msgid "No file was submitted." +msgstr "Ни одного файла не было отправлено." + +#: fields.py:1515 +msgid "" +"The submitted data was not a file. Check the encoding type on the form." +msgstr "" + +#: fields.py:1516 +msgid "No filename could be determined." +msgstr "" + +#: fields.py:1517 +msgid "The submitted file is empty." +msgstr "Отправленный файл пуст." + +#: fields.py:1518 +#, python-brace-format +msgid "" +"Ensure this filename has at most {max_length} characters (it has {length})." +msgstr "Убедитесь, что это имя файла содержит не более {max_length} символов (сейчас {length})." + +#: fields.py:1566 +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "Загрузите правильное изображение. Файл, который вы загрузили, поврежден или не является изображением." + +#: fields.py:1604 relations.py:486 serializers.py:571 +msgid "This list may not be empty." +msgstr "" + +#: fields.py:1605 +#, python-brace-format +msgid "Ensure this field has at least {min_length} elements." +msgstr "" + +#: fields.py:1606 +#, python-brace-format +msgid "Ensure this field has no more than {max_length} elements." +msgstr "" + +#: fields.py:1682 +#, python-brace-format +msgid "Expected a dictionary of items but got type \"{input_type}\"." +msgstr "" + +#: fields.py:1683 +msgid "This dictionary may not be empty." +msgstr "" + +#: fields.py:1755 +msgid "Value must be valid JSON." +msgstr "" + +#: filters.py:49 templates/rest_framework/filters/search.html:2 +msgid "Search" +msgstr "" + +#: filters.py:50 +msgid "A search term." +msgstr "" + +#: filters.py:180 templates/rest_framework/filters/ordering.html:3 +msgid "Ordering" +msgstr "Сортировка" + +#: filters.py:181 +msgid "Which field to use when ordering the results." +msgstr "" + +#: filters.py:287 +msgid "ascending" +msgstr "по возрастанию" + +#: filters.py:288 +msgid "descending" +msgstr "по убыванию" + +#: pagination.py:174 +msgid "A page number within the paginated result set." +msgstr "" + +#: pagination.py:179 pagination.py:372 pagination.py:590 +msgid "Number of results to return per page." +msgstr "" + +#: pagination.py:189 +msgid "Invalid page." +msgstr "" + +#: pagination.py:374 +msgid "The initial index from which to return the results." +msgstr "" + +#: pagination.py:581 +msgid "The pagination cursor value." +msgstr "" + +#: pagination.py:583 +msgid "Invalid cursor" +msgstr "" + +#: relations.py:246 +#, python-brace-format +msgid "Invalid pk \"{pk_value}\" - object does not exist." +msgstr "" + +#: relations.py:247 +#, python-brace-format +msgid "Incorrect type. Expected pk value, received {data_type}." +msgstr "" + +#: relations.py:280 +msgid "Invalid hyperlink - No URL match." +msgstr "" + +#: relations.py:281 +msgid "Invalid hyperlink - Incorrect URL match." +msgstr "" + +#: relations.py:282 +msgid "Invalid hyperlink - Object does not exist." +msgstr "" + +#: relations.py:283 +#, python-brace-format +msgid "Incorrect type. Expected URL string, received {data_type}." +msgstr "" + +#: relations.py:448 +#, python-brace-format +msgid "Object with {slug_name}={value} does not exist." +msgstr "" + +#: relations.py:449 +msgid "Invalid value." +msgstr "Введите правильное значение." + +#: schemas/utils.py:32 +msgid "unique integer value" +msgstr "" + +#: schemas/utils.py:34 +msgid "UUID string" +msgstr "" + +#: schemas/utils.py:36 +msgid "unique value" +msgstr "" + +#: schemas/utils.py:38 +#, python-brace-format +msgid "A {value_type} identifying this {name}." +msgstr "" + +#: serializers.py:337 +#, python-brace-format +msgid "Invalid data. Expected a dictionary, but got {datatype}." +msgstr "" + +#: templates/rest_framework/admin.html:116 +#: templates/rest_framework/base.html:136 +msgid "Extra Actions" +msgstr "" + +#: templates/rest_framework/admin.html:130 +#: templates/rest_framework/base.html:150 +msgid "Filters" +msgstr "Фильтры" + +#: templates/rest_framework/base.html:37 +msgid "navbar" +msgstr "" + +#: templates/rest_framework/base.html:75 +msgid "content" +msgstr "" + +#: templates/rest_framework/base.html:78 +msgid "request form" +msgstr "" + +#: templates/rest_framework/base.html:157 +msgid "main content" +msgstr "" + +#: templates/rest_framework/base.html:173 +msgid "request info" +msgstr "" + +#: templates/rest_framework/base.html:177 +msgid "response info" +msgstr "" + +#: templates/rest_framework/horizontal/radio.html:4 +#: templates/rest_framework/inline/radio.html:3 +#: templates/rest_framework/vertical/radio.html:3 +msgid "None" +msgstr "" + +#: templates/rest_framework/horizontal/select_multiple.html:4 +#: templates/rest_framework/inline/select_multiple.html:3 +#: templates/rest_framework/vertical/select_multiple.html:3 +msgid "No items to select." +msgstr "" + +#: validators.py:39 +msgid "This field must be unique." +msgstr "Значения поля должны быть уникальны." + +#: validators.py:89 +#, python-brace-format +msgid "The fields {field_names} must make a unique set." +msgstr "" + +#: validators.py:171 +#, python-brace-format +msgid "Surrogate characters are not allowed: U+{code_point:X}." +msgstr "" + +#: validators.py:243 +#, python-brace-format +msgid "This field must be unique for the \"{date_field}\" date." +msgstr "" + +#: validators.py:258 +#, python-brace-format +msgid "This field must be unique for the \"{date_field}\" month." +msgstr "" + +#: validators.py:271 +#, python-brace-format +msgid "This field must be unique for the \"{date_field}\" year." +msgstr "" + +#: versioning.py:40 +msgid "Invalid version in \"Accept\" header." +msgstr "" + +#: versioning.py:71 +msgid "Invalid version in URL path." +msgstr "" + +#: versioning.py:116 +msgid "Invalid version in URL path. Does not match any version namespace." +msgstr "" + +#: versioning.py:148 +msgid "Invalid version in hostname." +msgstr "" + +#: versioning.py:170 +msgid "Invalid version in query parameter." +msgstr "" diff --git a/rest_framework/locale/sk/LC_MESSAGES/django.mo b/rest_framework/locale/sk/LC_MESSAGES/django.mo index c82ae3e09733c4e8a03e23eec9a04bfdbba7635c..561c98e98847ec949c767ff3a251f017130b8dc9 100644 GIT binary patch delta 1748 zcmY+^eQ4EH9LMpmYtD!1u5LG{*0!@vHy^fn@7;rW@9yq(o6f02G!res4V89tY;NK# zur5(*#QN(p{}6*Dk_Lg;`e%v{K?s8X7!m|#5R%A(#0V*)e1Cqw+hm9Py{~hAkLR54 zIlnWVw>r}I3Ufz|(m}jT?94Ii!I514C=2q;94^Gg7(rdP1z*Bmti=zp2EWEu{24c5 z#Vr5XDNNG7h`aDHt~EA@^;h-3eX0D^A{vUh`qYSeJzrbd^kNdHlw`s&DumaCvCw{k>`AgpTU@iWJn!%;yA%UB5FMf>e_#jP1 z+oYz1Erv(X;R!6l^Qg6O3Cr-8tU1i17Gnjj!!FcJp28OV3U&Qt_IN%GJwJp=Y(>p@ z`U5I8RIcJqoWwUV>Bt*?iOjCuKz{a9)_<{$c3HW%zF~w z!vtQ#VeS9_sA$m)SNgdb!x^--AYULf?M*~0!E739a9XLF*77@}RA{v9Xm1^8AS;RW z1pTpD1WUl?YyYb^|Ceei>b(lvda7t-d}l04C@rLas%T5r6ZG3lNgQK@3S;wjfY;!U zb!>d!yuw=7_@5W$LxnG=wEEj-PbN*fU(>WFqig*9t438hUb&{t54 zF+iv&-Hr$oOUn3T4SF94eeJZrwV+BfU3n#$k-XXC<9QSLnUjT|7DPg|VSe>4ye`_% zmej#to+ z>uW^zVi*T-67R)V@c>@Mgh)v`H;5djqk#Ky4STVwR^)!{!zez7di^4f;$PT^$vSrc zk7FzClNHaQ{?8}ag@5B+7}@Cl-y_(=`(>F*KNr5hLEOAaB!Ca%W;~5Ocoy67Q`C%H z!w&S;iv+PB^|?8W&y{u!ojTC%*u?uKsug^=a-oPivlmcPy@I=N4Y%Vp zG+4Vugh@#U?!zwB>uJ0NpGFMo;5*wKI1m-b;m+%D) zuAyck!0>&T#1Wju1ip(8;U74Lqol>)In<1NjGF2y{$vu9IE*W(FZ>mmyaY+RK0m1W z_fuKMeYlFc8GpmaFx)IMglADdpRbTCOB4As7{G1#0O}q|;ZA(M;tJ{}{S5EM-%&Fe zO;FJXmiW;N@1VZmYfRuzs43rT-0yiB$7wI&G+sf*Bx5b^=F1^n@=V3^I7s^v z>Q}Uhw07Yz^1hNRQqh^ef`{=-OyI6oHxo0sK>H2U0q*2SH`5Sut2~A4PzT8^PBwL> zS~T@K%K#B3w6JBI&$tF7`u$%oES-~jZ4VIaLAgmA6qZeP6S}rKi#CES;0*jej1m7Y zoKH?BwOY+p*|)f0W#`kUd?r&ccCKhFLq}%HOiYXnT?l$U z*tpF~rE>FjQE!;a6s+Uf^i=uBhS!Ee`~ATle=ux9k!V-Xo*<=e)G8GH<9W+2WUXQ@ zA2s7Mxml}V250h_LNSvzv0`pEL8K}j<`IT-FWbJ_X4m5sOC@px#r={G?WHSKm^ zywkL`89Nq_XlIDd&fYrlEoSVw`67cpk#>h`uYP21%&W=U{jYi1yp`ML7?8dCraP}g U-uRZ\n" +"POT-Creation-Date: 2020-10-13 21:45+0200\n" +"PO-Revision-Date: 2020-10-13 19:45+0000\n" +"Last-Translator: Xavier Ordoquy \n" "Language-Team: Slovak (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/sk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: sk\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);\n" -#: authentication.py:73 +#: authentication.py:70 msgid "Invalid basic header. No credentials provided." msgstr "Nesprávna hlavička. Neboli poskytnuté prihlasovacie údaje." -#: authentication.py:76 +#: authentication.py:73 msgid "Invalid basic header. Credentials string should not contain spaces." msgstr "Nesprávna hlavička. Prihlasovacie údaje nesmú obsahovať medzery." -#: authentication.py:82 +#: authentication.py:83 msgid "Invalid basic header. Credentials not correctly base64 encoded." msgstr "Nesprávna hlavička. Prihlasovacie údaje nie sú správne zakódované pomocou metódy base64." -#: authentication.py:99 +#: authentication.py:101 msgid "Invalid username/password." msgstr "Nesprávne prihlasovacie údaje." -#: authentication.py:102 authentication.py:198 +#: authentication.py:104 authentication.py:206 msgid "User inactive or deleted." msgstr "Daný používateľ je neaktívny, alebo zmazaný." -#: authentication.py:176 +#: authentication.py:184 msgid "Invalid token header. No credentials provided." msgstr "Nesprávna token hlavička. Neboli poskytnuté prihlasovacie údaje." -#: authentication.py:179 +#: authentication.py:187 msgid "Invalid token header. Token string should not contain spaces." msgstr "Nesprávna token hlavička. Token hlavička nesmie obsahovať medzery." -#: authentication.py:185 +#: authentication.py:193 msgid "" "Invalid token header. Token string should not contain invalid characters." msgstr "" -#: authentication.py:195 +#: authentication.py:203 msgid "Invalid token." msgstr "Nesprávny token." @@ -59,382 +59,515 @@ msgstr "Nesprávny token." msgid "Auth Token" msgstr "" -#: authtoken/models.py:15 +#: authtoken/models.py:13 msgid "Key" msgstr "" -#: authtoken/models.py:18 +#: authtoken/models.py:16 msgid "User" msgstr "" -#: authtoken/models.py:20 +#: authtoken/models.py:18 msgid "Created" msgstr "" -#: authtoken/models.py:29 +#: authtoken/models.py:27 authtoken/serializers.py:19 msgid "Token" msgstr "" -#: authtoken/models.py:30 +#: authtoken/models.py:28 msgid "Tokens" msgstr "" -#: authtoken/serializers.py:8 +#: authtoken/serializers.py:9 msgid "Username" msgstr "" -#: authtoken/serializers.py:9 +#: authtoken/serializers.py:13 msgid "Password" msgstr "" -#: authtoken/serializers.py:20 -msgid "User account is disabled." -msgstr "Daný používateľ je zablokovaný." - -#: authtoken/serializers.py:23 +#: authtoken/serializers.py:35 msgid "Unable to log in with provided credentials." msgstr "S danými prihlasovacími údajmi nebolo možné sa prihlásiť." -#: authtoken/serializers.py:26 +#: authtoken/serializers.py:38 msgid "Must include \"username\" and \"password\"." msgstr "Musí obsahovať parametre \"používateľské meno\" a \"heslo\"." -#: exceptions.py:49 +#: exceptions.py:102 msgid "A server error occurred." msgstr "Vyskytla sa chyba na strane servera." -#: exceptions.py:84 +#: exceptions.py:142 +msgid "Invalid input." +msgstr "" + +#: exceptions.py:161 msgid "Malformed request." msgstr "Požiadavok má nesprávny formát, alebo je poškodený." -#: exceptions.py:89 +#: exceptions.py:167 msgid "Incorrect authentication credentials." msgstr "Nesprávne prihlasovacie údaje." -#: exceptions.py:94 +#: exceptions.py:173 msgid "Authentication credentials were not provided." msgstr "Prihlasovacie údaje neboli zadané." -#: exceptions.py:99 +#: exceptions.py:179 msgid "You do not have permission to perform this action." msgstr "K danej akcii nemáte oprávnenie." -#: exceptions.py:104 views.py:81 +#: exceptions.py:185 msgid "Not found." msgstr "Nebolo nájdené." -#: exceptions.py:109 +#: exceptions.py:191 +#, python-brace-format msgid "Method \"{method}\" not allowed." msgstr "Metóda \"{method}\" nie je povolená." -#: exceptions.py:120 +#: exceptions.py:202 msgid "Could not satisfy the request Accept header." msgstr "Nie je možné vyhovieť požiadavku v hlavičke \"Accept\"." -#: exceptions.py:132 +#: exceptions.py:212 +#, python-brace-format msgid "Unsupported media type \"{media_type}\" in request." msgstr "Požiadavok obsahuje nepodporovaný media type: \"{media_type}\"." -#: exceptions.py:145 +#: exceptions.py:223 msgid "Request was throttled." msgstr "Požiadavok bol obmedzený, z dôvodu prekročenia limitu." -#: fields.py:269 relations.py:206 relations.py:239 validators.py:98 -#: validators.py:181 +#: exceptions.py:224 +#, python-brace-format +msgid "Expected available in {wait} second." +msgstr "" + +#: exceptions.py:225 +#, python-brace-format +msgid "Expected available in {wait} seconds." +msgstr "" + +#: fields.py:316 relations.py:245 relations.py:279 validators.py:90 +#: validators.py:183 msgid "This field is required." msgstr "Toto pole je povinné." -#: fields.py:270 +#: fields.py:317 msgid "This field may not be null." msgstr "Toto pole nemôže byť nulové." -#: fields.py:608 fields.py:639 -msgid "\"{input}\" is not a valid boolean." -msgstr "\"{input}\" je validný boolean." +#: fields.py:701 +msgid "Must be a valid boolean." +msgstr "" -#: fields.py:674 +#: fields.py:766 +msgid "Not a valid string." +msgstr "" + +#: fields.py:767 msgid "This field may not be blank." msgstr "Toto pole nemože byť prázdne." -#: fields.py:675 fields.py:1675 +#: fields.py:768 fields.py:1881 +#, python-brace-format msgid "Ensure this field has no more than {max_length} characters." msgstr "Uistite sa, že toto pole nemá viac ako {max_length} znakov." -#: fields.py:676 +#: fields.py:769 +#, python-brace-format msgid "Ensure this field has at least {min_length} characters." msgstr "Uistite sa, že toto pole má viac ako {min_length} znakov." -#: fields.py:713 +#: fields.py:816 msgid "Enter a valid email address." msgstr "Vložte správnu emailovú adresu." -#: fields.py:724 +#: fields.py:827 msgid "This value does not match the required pattern." msgstr "Toto pole nezodpovedá požadovanému formátu." -#: fields.py:735 +#: fields.py:838 msgid "" "Enter a valid \"slug\" consisting of letters, numbers, underscores or " "hyphens." msgstr "Zadajte platný \"slug\", ktorý obsahuje len malé písmená, čísla, spojovník alebopodtržítko." -#: fields.py:747 +#: fields.py:839 +msgid "" +"Enter a valid \"slug\" consisting of Unicode letters, numbers, underscores, " +"or hyphens." +msgstr "" + +#: fields.py:854 msgid "Enter a valid URL." msgstr "Zadajte platnú URL adresu." -#: fields.py:760 -msgid "\"{value}\" is not a valid UUID." -msgstr "\"{value}\" nie je platné UUID." +#: fields.py:867 +msgid "Must be a valid UUID." +msgstr "" -#: fields.py:796 +#: fields.py:903 msgid "Enter a valid IPv4 or IPv6 address." msgstr "" -#: fields.py:821 +#: fields.py:931 msgid "A valid integer is required." msgstr "Je vyžadované celé číslo." -#: fields.py:822 fields.py:857 fields.py:891 +#: fields.py:932 fields.py:969 fields.py:1005 fields.py:1366 +#, python-brace-format msgid "Ensure this value is less than or equal to {max_value}." msgstr "Uistite sa, že hodnota je menšia alebo rovná {max_value}." -#: fields.py:823 fields.py:858 fields.py:892 +#: fields.py:933 fields.py:970 fields.py:1006 fields.py:1367 +#, python-brace-format msgid "Ensure this value is greater than or equal to {min_value}." msgstr "Uistite sa, že hodnota je väčšia alebo rovná {min_value}." -#: fields.py:824 fields.py:859 fields.py:896 +#: fields.py:934 fields.py:971 fields.py:1010 msgid "String value too large." msgstr "Zadaný textový reťazec je príliš dlhý." -#: fields.py:856 fields.py:890 +#: fields.py:968 fields.py:1004 msgid "A valid number is required." msgstr "Je vyžadované číslo." -#: fields.py:893 +#: fields.py:1007 +#, python-brace-format msgid "Ensure that there are no more than {max_digits} digits in total." msgstr "Uistite sa, že hodnota neobsahuje viac ako {max_digits} cifier." -#: fields.py:894 +#: fields.py:1008 +#, python-brace-format msgid "" "Ensure that there are no more than {max_decimal_places} decimal places." msgstr "Uistite sa, že hodnota neobsahuje viac ako {max_decimal_places} desatinných miest." -#: fields.py:895 +#: fields.py:1009 +#, python-brace-format msgid "" "Ensure that there are no more than {max_whole_digits} digits before the " "decimal point." msgstr "Uistite sa, že hodnota neobsahuje viac ako {max_whole_digits} cifier pred desatinnou čiarkou." -#: fields.py:1025 +#: fields.py:1148 +#, python-brace-format msgid "Datetime has wrong format. Use one of these formats instead: {format}." msgstr "Nesprávny formát dátumu a času. Prosím použite jeden z nasledujúcich formátov: {format}." -#: fields.py:1026 +#: fields.py:1149 msgid "Expected a datetime but got a date." msgstr "Vložený len dátum - date namiesto dátumu a času - datetime." -#: fields.py:1103 +#: fields.py:1150 +#, python-brace-format +msgid "Invalid datetime for the timezone \"{timezone}\"." +msgstr "" + +#: fields.py:1151 +msgid "Datetime value out of range." +msgstr "" + +#: fields.py:1236 +#, python-brace-format msgid "Date has wrong format. Use one of these formats instead: {format}." msgstr "Nesprávny formát dátumu. Prosím použite jeden z nasledujúcich formátov: {format}." -#: fields.py:1104 +#: fields.py:1237 msgid "Expected a date but got a datetime." msgstr "Vložený dátum a čas - datetime namiesto jednoduchého dátumu - date." -#: fields.py:1170 +#: fields.py:1303 +#, python-brace-format msgid "Time has wrong format. Use one of these formats instead: {format}." msgstr "Nesprávny formát času. Prosím použite jeden z nasledujúcich formátov: {format}." -#: fields.py:1232 +#: fields.py:1365 +#, python-brace-format msgid "Duration has wrong format. Use one of these formats instead: {format}." msgstr "" -#: fields.py:1251 fields.py:1300 +#: fields.py:1399 fields.py:1456 +#, python-brace-format msgid "\"{input}\" is not a valid choice." msgstr "\"{input}\" je nesprávny výber z daných možností." -#: fields.py:1254 relations.py:71 relations.py:441 +#: fields.py:1402 +#, python-brace-format msgid "More than {count} items..." msgstr "" -#: fields.py:1301 fields.py:1448 relations.py:437 serializers.py:524 +#: fields.py:1457 fields.py:1603 relations.py:485 serializers.py:570 +#, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "Bol očakávaný zoznam položiek, no namiesto toho bol nájdený \"{input_type}\"." -#: fields.py:1302 +#: fields.py:1458 msgid "This selection may not be empty." msgstr "" -#: fields.py:1339 +#: fields.py:1495 +#, python-brace-format msgid "\"{input}\" is not a valid path choice." msgstr "" -#: fields.py:1358 +#: fields.py:1514 msgid "No file was submitted." msgstr "Nebol odoslaný žiadny súbor." -#: fields.py:1359 +#: fields.py:1515 msgid "" "The submitted data was not a file. Check the encoding type on the form." msgstr "Odoslané dáta neobsahujú súbor. Prosím skontrolujte kódovanie - encoding type daného formuláru." -#: fields.py:1360 +#: fields.py:1516 msgid "No filename could be determined." msgstr "Nebolo možné určiť meno súboru." -#: fields.py:1361 +#: fields.py:1517 msgid "The submitted file is empty." msgstr "Odoslaný súbor je prázdny." -#: fields.py:1362 +#: fields.py:1518 +#, python-brace-format msgid "" "Ensure this filename has at most {max_length} characters (it has {length})." msgstr "Uistite sa, že meno súboru neobsahuje viac ako {max_length} znakov. (V skutočnosti ich má {length})." -#: fields.py:1410 +#: fields.py:1566 msgid "" "Upload a valid image. The file you uploaded was either not an image or a " "corrupted image." msgstr "Uploadujte prosím obrázok. Súbor, ktorý ste uploadovali buď nie je obrázok, alebo daný obrázok je poškodený." -#: fields.py:1449 relations.py:438 serializers.py:525 +#: fields.py:1604 relations.py:486 serializers.py:571 msgid "This list may not be empty." msgstr "" -#: fields.py:1502 +#: fields.py:1605 +#, python-brace-format +msgid "Ensure this field has at least {min_length} elements." +msgstr "" + +#: fields.py:1606 +#, python-brace-format +msgid "Ensure this field has no more than {max_length} elements." +msgstr "" + +#: fields.py:1682 +#, python-brace-format msgid "Expected a dictionary of items but got type \"{input_type}\"." msgstr "Bol očakávaný slovník položiek, no namiesto toho bol nájdený \"{input_type}\"." -#: fields.py:1549 +#: fields.py:1683 +msgid "This dictionary may not be empty." +msgstr "" + +#: fields.py:1755 msgid "Value must be valid JSON." msgstr "" -#: filters.py:36 templates/rest_framework/filters/django_filter.html:5 -msgid "Submit" +#: filters.py:49 templates/rest_framework/filters/search.html:2 +msgid "Search" msgstr "" -#: filters.py:336 +#: filters.py:50 +msgid "A search term." +msgstr "" + +#: filters.py:180 templates/rest_framework/filters/ordering.html:3 +msgid "Ordering" +msgstr "" + +#: filters.py:181 +msgid "Which field to use when ordering the results." +msgstr "" + +#: filters.py:287 msgid "ascending" msgstr "" -#: filters.py:337 +#: filters.py:288 msgid "descending" msgstr "" -#: pagination.py:193 +#: pagination.py:174 +msgid "A page number within the paginated result set." +msgstr "" + +#: pagination.py:179 pagination.py:372 pagination.py:590 +msgid "Number of results to return per page." +msgstr "" + +#: pagination.py:189 msgid "Invalid page." msgstr "" -#: pagination.py:427 +#: pagination.py:374 +msgid "The initial index from which to return the results." +msgstr "" + +#: pagination.py:581 +msgid "The pagination cursor value." +msgstr "" + +#: pagination.py:583 msgid "Invalid cursor" msgstr "Nesprávny kurzor." -#: relations.py:207 +#: relations.py:246 +#, python-brace-format msgid "Invalid pk \"{pk_value}\" - object does not exist." msgstr "Nesprávny primárny kľúč \"{pk_value}\" - objekt s daným primárnym kľúčom neexistuje." -#: relations.py:208 +#: relations.py:247 +#, python-brace-format msgid "Incorrect type. Expected pk value, received {data_type}." msgstr "Nesprávny typ. Bol prijatý {data_type} namiesto primárneho kľúča." -#: relations.py:240 +#: relations.py:280 msgid "Invalid hyperlink - No URL match." msgstr "Nesprávny hypertextový odkaz - žiadna zhoda." -#: relations.py:241 +#: relations.py:281 msgid "Invalid hyperlink - Incorrect URL match." msgstr "Nesprávny hypertextový odkaz - chybná URL." -#: relations.py:242 +#: relations.py:282 msgid "Invalid hyperlink - Object does not exist." msgstr "Nesprávny hypertextový odkaz - požadovný objekt neexistuje." -#: relations.py:243 +#: relations.py:283 +#, python-brace-format msgid "Incorrect type. Expected URL string, received {data_type}." msgstr "Nesprávny typ {data_type}. Požadovaný typ: hypertextový odkaz." -#: relations.py:401 +#: relations.py:448 +#, python-brace-format msgid "Object with {slug_name}={value} does not exist." msgstr "Objekt, ktorého atribút \"{slug_name}\" je \"{value}\" neexistuje." -#: relations.py:402 +#: relations.py:449 msgid "Invalid value." msgstr "Nesprávna hodnota." -#: serializers.py:326 +#: schemas/utils.py:32 +msgid "unique integer value" +msgstr "" + +#: schemas/utils.py:34 +msgid "UUID string" +msgstr "" + +#: schemas/utils.py:36 +msgid "unique value" +msgstr "" + +#: schemas/utils.py:38 +#, python-brace-format +msgid "A {value_type} identifying this {name}." +msgstr "" + +#: serializers.py:337 +#, python-brace-format msgid "Invalid data. Expected a dictionary, but got {datatype}." msgstr "Bol očakávaný slovník položiek, no namiesto toho bol nájdený \"{datatype}\"." #: templates/rest_framework/admin.html:116 -#: templates/rest_framework/base.html:128 +#: templates/rest_framework/base.html:136 +msgid "Extra Actions" +msgstr "" + +#: templates/rest_framework/admin.html:130 +#: templates/rest_framework/base.html:150 msgid "Filters" msgstr "" -#: templates/rest_framework/filters/django_filter.html:2 -#: templates/rest_framework/filters/django_filter_crispyforms.html:4 -msgid "Field filters" +#: templates/rest_framework/base.html:37 +msgid "navbar" msgstr "" -#: templates/rest_framework/filters/ordering.html:3 -msgid "Ordering" +#: templates/rest_framework/base.html:75 +msgid "content" msgstr "" -#: templates/rest_framework/filters/search.html:2 -msgid "Search" +#: templates/rest_framework/base.html:78 +msgid "request form" msgstr "" -#: templates/rest_framework/horizontal/radio.html:2 -#: templates/rest_framework/inline/radio.html:2 -#: templates/rest_framework/vertical/radio.html:2 +#: templates/rest_framework/base.html:157 +msgid "main content" +msgstr "" + +#: templates/rest_framework/base.html:173 +msgid "request info" +msgstr "" + +#: templates/rest_framework/base.html:177 +msgid "response info" +msgstr "" + +#: templates/rest_framework/horizontal/radio.html:4 +#: templates/rest_framework/inline/radio.html:3 +#: templates/rest_framework/vertical/radio.html:3 msgid "None" msgstr "" -#: templates/rest_framework/horizontal/select_multiple.html:2 -#: templates/rest_framework/inline/select_multiple.html:2 -#: templates/rest_framework/vertical/select_multiple.html:2 +#: templates/rest_framework/horizontal/select_multiple.html:4 +#: templates/rest_framework/inline/select_multiple.html:3 +#: templates/rest_framework/vertical/select_multiple.html:3 msgid "No items to select." msgstr "" -#: validators.py:43 +#: validators.py:39 msgid "This field must be unique." msgstr "Táto položka musí byť unikátna." -#: validators.py:97 +#: validators.py:89 +#, python-brace-format msgid "The fields {field_names} must make a unique set." msgstr "Dané položky: {field_names} musia tvoriť musia spolu tvoriť unikátnu množinu." -#: validators.py:245 +#: validators.py:171 +#, python-brace-format +msgid "Surrogate characters are not allowed: U+{code_point:X}." +msgstr "" + +#: validators.py:243 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" date." msgstr "Položka musí byť pre špecifický deň \"{date_field}\" unikátna." -#: validators.py:260 +#: validators.py:258 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" month." msgstr "Položka musí byť pre mesiac \"{date_field}\" unikátna." -#: validators.py:273 +#: validators.py:271 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" year." msgstr "Položka musí byť pre rok \"{date_field}\" unikátna." -#: versioning.py:42 +#: versioning.py:40 msgid "Invalid version in \"Accept\" header." msgstr "Nesprávna verzia v \"Accept\" hlavičke." -#: versioning.py:73 +#: versioning.py:71 msgid "Invalid version in URL path." msgstr "Nesprávna verzia v URL adrese." -#: versioning.py:115 +#: versioning.py:116 msgid "Invalid version in URL path. Does not match any version namespace." msgstr "" -#: versioning.py:147 +#: versioning.py:148 msgid "Invalid version in hostname." msgstr "Nesprávna verzia v \"hostname\"." -#: versioning.py:169 +#: versioning.py:170 msgid "Invalid version in query parameter." msgstr "Nesprávna verzia v parametri požiadavku." - -#: views.py:88 -msgid "Permission denied." -msgstr "" diff --git a/rest_framework/locale/sl/LC_MESSAGES/django.mo b/rest_framework/locale/sl/LC_MESSAGES/django.mo index 33aba7cf4cf2c5b5626d26774d5915b2daedfe53..7ec83f821634b41b2c0a9f5ffef75ec33aedf0d6 100644 GIT binary patch delta 2244 zcmYk+e@vBC9LMo5!R3b%#YK^;Xcr@afE%C}`7MfR{78`aA!f?$#~OuR1tYVzXO`w_ zgIag4+G0_o#>ju#t<{?UXl=GyYpc<8W2RfS{-|ip*{n5sf1dleb;kF;&hzlx^PF?O z-*bQKI<~{PiM99JAV66ElpWR`@jP1(R5V7jP41XPLF&P7L8Gfu;;M?U&Rof#a7;Lf6!^fy4w>29>JAdpY*QZMXl^Z)QaX%TluGV z9nMbtzZ;XeKZe?YqqqjgQRAJ)B0P_|xPVTOPAX65U=gNZJ+kZ8jQ3zWl16*h^EhgN zaa5U1;|lx$EAVqvO0S_N+`!=a{{ZUx5UOS-a@hZBI!w=Ge|aV9!v07+<>{fMB}z&8}?!^PC0Zs=v+rtWebT? z(KxsjXHhFzKn+yDcHEDBsQc5NKcL1*XMfjWFKU9%p(gkms^~sJ?a;b;ClQTNwY0t4f@#zy|5kmiXBAl!~{}r_9-fbUm+=X z>~A_6xGHG28IPg{JcAnOTO`eP4T~^?+0nI1)E0K5UND1Y_#J8?i>Pr@$rp380BS-t zSdM*|r}KZDjs}=SRq1(5!5>jI@Du7>FQCqG9%oTSw+_jQm0=ogM^2=5Vm%JxW_%0v z+$GdPZXmmFS*&g)@3&Gq+LCRkoQ|Q6(G2Rri>LvvBb#N}{7R`tD)BztgIe)>sEM3L z?Zii@ajsw|`Y8+*;ls%0*f2Vp@q~BdZRF3+^1+Xp{et?!Uzmi+go;etdb25YDl|3i zj-Kx!v;!(MwOT?c&=DUb_7SQrn&WPndSOBZvWMs+ZZ_pyyQ1n>I)a4SZsJ~IC!yV8 zk=9SBIMtRWum@0QU2Q9&g{d_VWy=5moANc_-B5LFH+B(CgmR~*Emb`{M5GXPL>0kL zgnKl>{SD|w6)5Spy+kX)DR-OF)=XsT{mO;%sYZ%zhucf!)a$xO%dHV^s0P$j#TrclWaax}kLOg!r*n#uV^?$M+NvtbEBRX=tgNlu5H78tE$N7i9xm@0i5wUm zjvS7T)CG4%#)cjn33iS=8a?#XGr@)<(L}F#c<4ZMY$y_XB)Y#T{`-oyq*#9-6rT#@ Y`{G}&dBqpoUsxTVE%YbHE*Fje2Ra4c5C8xG delta 2549 zcmZYATWl0n9LMp~ZnrHIS}hbxu`rZdxwKMfX|1-U7lD?F1qw(7ako3vDcc#cyKO|o zl?Mz2A;yX^-~|#)3@^r%p!gsW&}a-V5)BE7(MV!^z!)Mv)SCGH%?{zg6aMo#b2>Y7 z&j0*pIJEIjPx`0goRfyOhj@hO4jFS4U(V$~JCkqBJUojQUd4rY8|UEUNye1o64dY8 za5nD7$#?*(@HJeH7cdWh!8T*k=65=48CcHMGKuT(b6kVj1;%W{cC5!!_&9!#8?bPS zF^$-V`uj=j#_KpA%cdGrjLoPCZbFT_zG-9Lq@x>N#5%l-{4nVGIet+*NWpcppb z2iSr)u^mf`jH$+*$dEaPy6zNK;tf|G?K=2CDz5&V4?%MUT$gvvxK2W?$1rgg(4oyB+pXW&J&@H$Sz zKQITgIbl~!9zKf2NEw*6zzxWyrWbXe0aO{if-~`OaQ+@@!RMy2|Jv&x7|;sJr)Mr~ zM4fL&6_ban@fd24uLS4gs0GxNWUlK*i}M#y6FiE3Mlj6z1ZqOr%x)P@nnC_+=+rT= z0|!tm{Ss&4*MUEyRyrP>hgi-^&dZVdH9e@z^x@?!V{BB47jlzw?7#|)q9%M8nTt7- zrn7*~MVyPbkoqwH;1Vq0>RPNrJ!lZSFoj$3GOF53NRx^-$FEwGSu>OO1m zDI7+Pr>_Q`d#D>NX1a?og__}M)C50473Ytr)P-4|wyp-7aX<1#n$J)vzJ{vy?{GEV z!6sb5D)qZ4^7^LDc{-~Y_#0I`ORdan(}a5P2=YvG8kLbtNMV~_QG0w3>v17Z(~Wmw zD}IQ&-*2ek4%CGDu?i2N zzJMR2e*X=!{pK#_;AEbz+9*PO2g*?2mv#*Ee6xv;QoSA7PBVmgcm(+bm^V-pIg8rk zkFXVQqpn}X*GVgDMRw6_Lyad<89IU5>n~8R-JhuI=CRNI``=85?3*2^;@OYu@f_yj z9n^&WLS<$Gb)zNZ@oDTs73X9l?(I?Fo()m!ED8JVSI5VL}VlB9)<5?f)h^YTDB$ z{a$8YchY~JSVt@)v|=^QT-&8RTuYEmzjbizCHe`~i!!LD45{fY$oG4hI#G9*_P-|> z)E>15eG9dB&l1_h9)efd|DRArs1_nrXf4DJLQUybEkuYIkw>U$JM`AvZ#JDABE6f# z6ha>bw#jTHRAf=2me8A_*Gv1hnb13|)=c#Iy$6RibooH~HK5Vwh+Kj?^;;W96`oo{ zhAsX_g^!)z9^<%$=+2z_{|goc{gr{H;(+7s8%`apu$-jjdMPVnjYQ&3%!+zm+>W@_ zqm}vV%PS5rIBfs_s;yf)JI37nP`JR3$E-b0JY^@6WA4`HNEXnLf--y3#QdUVW5Mxt?Dbi3qMVNHG2iiWBctE`&Z#=3^l z>oaB+txMPgUczd3hPZFU9h)?>E33eEAI!6*w5{yHJYB~cvEzf05iap3`D$r-IL}U4 z`@Hzz*gNHKg-bfT5&E_}Xj?BuMiS_H)uYSi*XN`XF=uS|{F2b@ug>mutVHD6@nP5E TI?uI-yaDgpaht^KUG(;Ua?K=& diff --git a/rest_framework/locale/sl/LC_MESSAGES/django.po b/rest_framework/locale/sl/LC_MESSAGES/django.po index 9af0fc8fc..205190383 100644 --- a/rest_framework/locale/sl/LC_MESSAGES/django.po +++ b/rest_framework/locale/sl/LC_MESSAGES/django.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: Django REST framework\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-07-12 16:13+0100\n" -"PO-Revision-Date: 2017-08-03 14:58+0000\n" -"Last-Translator: Gregor Cimerman\n" +"POT-Creation-Date: 2020-10-13 21:45+0200\n" +"PO-Revision-Date: 2020-10-13 19:45+0000\n" +"Last-Translator: Xavier Ordoquy \n" "Language-Team: Slovenian (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/sl/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -18,40 +18,40 @@ msgstr "" "Language: sl\n" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" -#: authentication.py:73 +#: authentication.py:70 msgid "Invalid basic header. No credentials provided." msgstr "Napačno enostavno zagalvje. Ni podanih poverilnic." -#: authentication.py:76 +#: authentication.py:73 msgid "Invalid basic header. Credentials string should not contain spaces." msgstr "Napačno enostavno zaglavje. Poverilniški niz ne sme vsebovati presledkov." -#: authentication.py:82 +#: authentication.py:83 msgid "Invalid basic header. Credentials not correctly base64 encoded." msgstr "Napačno enostavno zaglavje. Poverilnice niso pravilno base64 kodirane." -#: authentication.py:99 +#: authentication.py:101 msgid "Invalid username/password." msgstr "Napačno uporabniško ime ali geslo." -#: authentication.py:102 authentication.py:198 +#: authentication.py:104 authentication.py:206 msgid "User inactive or deleted." msgstr "Uporabnik neaktiven ali izbrisan." -#: authentication.py:176 +#: authentication.py:184 msgid "Invalid token header. No credentials provided." msgstr "Neveljaven žeton v zaglavju. Ni vsebovanih poverilnic." -#: authentication.py:179 +#: authentication.py:187 msgid "Invalid token header. Token string should not contain spaces." msgstr "Neveljaven žeton v zaglavju. Žeton ne sme vsebovati presledkov." -#: authentication.py:185 +#: authentication.py:193 msgid "" "Invalid token header. Token string should not contain invalid characters." msgstr "Neveljaven žeton v zaglavju. Žeton ne sme vsebovati napačnih znakov." -#: authentication.py:195 +#: authentication.py:203 msgid "Invalid token." msgstr "Neveljaven žeton." @@ -59,382 +59,515 @@ msgstr "Neveljaven žeton." msgid "Auth Token" msgstr "Prijavni žeton" -#: authtoken/models.py:15 +#: authtoken/models.py:13 msgid "Key" msgstr "Ključ" -#: authtoken/models.py:18 +#: authtoken/models.py:16 msgid "User" msgstr "Uporabnik" -#: authtoken/models.py:20 +#: authtoken/models.py:18 msgid "Created" msgstr "Ustvarjen" -#: authtoken/models.py:29 +#: authtoken/models.py:27 authtoken/serializers.py:19 msgid "Token" msgstr "Žeton" -#: authtoken/models.py:30 +#: authtoken/models.py:28 msgid "Tokens" msgstr "Žetoni" -#: authtoken/serializers.py:8 +#: authtoken/serializers.py:9 msgid "Username" msgstr "Uporabniško ime" -#: authtoken/serializers.py:9 +#: authtoken/serializers.py:13 msgid "Password" msgstr "Geslo" -#: authtoken/serializers.py:20 -msgid "User account is disabled." -msgstr "Uporabniški račun je onemogočen." - -#: authtoken/serializers.py:23 +#: authtoken/serializers.py:35 msgid "Unable to log in with provided credentials." msgstr "Neuspešna prijava s podanimi poverilnicami." -#: authtoken/serializers.py:26 +#: authtoken/serializers.py:38 msgid "Must include \"username\" and \"password\"." msgstr "Mora vsebovati \"uporabniško ime\" in \"geslo\"." -#: exceptions.py:49 +#: exceptions.py:102 msgid "A server error occurred." msgstr "Napaka na strežniku." -#: exceptions.py:84 +#: exceptions.py:142 +msgid "Invalid input." +msgstr "" + +#: exceptions.py:161 msgid "Malformed request." msgstr "Okvarjen zahtevek." -#: exceptions.py:89 +#: exceptions.py:167 msgid "Incorrect authentication credentials." msgstr "Napačni avtentikacijski podatki." -#: exceptions.py:94 +#: exceptions.py:173 msgid "Authentication credentials were not provided." msgstr "Avtentikacijski podatki niso bili podani." -#: exceptions.py:99 +#: exceptions.py:179 msgid "You do not have permission to perform this action." msgstr "Nimate dovoljenj za izvedbo te akcije." -#: exceptions.py:104 views.py:81 +#: exceptions.py:185 msgid "Not found." msgstr "Ni najdeno" -#: exceptions.py:109 +#: exceptions.py:191 +#, python-brace-format msgid "Method \"{method}\" not allowed." msgstr "Metoda \"{method}\" ni dovoljena" -#: exceptions.py:120 +#: exceptions.py:202 msgid "Could not satisfy the request Accept header." msgstr "Ni bilo mogoče zagotoviti zaglavja Accept zahtevka." -#: exceptions.py:132 +#: exceptions.py:212 +#, python-brace-format msgid "Unsupported media type \"{media_type}\" in request." msgstr "Nepodprt medijski tip \"{media_type}\" v zahtevku." -#: exceptions.py:145 +#: exceptions.py:223 msgid "Request was throttled." msgstr "Zahtevek je bil pridržan." -#: fields.py:269 relations.py:206 relations.py:239 validators.py:98 -#: validators.py:181 +#: exceptions.py:224 +#, python-brace-format +msgid "Expected available in {wait} second." +msgstr "" + +#: exceptions.py:225 +#, python-brace-format +msgid "Expected available in {wait} seconds." +msgstr "" + +#: fields.py:316 relations.py:245 relations.py:279 validators.py:90 +#: validators.py:183 msgid "This field is required." msgstr "To polje je obvezno." -#: fields.py:270 +#: fields.py:317 msgid "This field may not be null." msgstr "To polje ne sme biti null." -#: fields.py:608 fields.py:639 -msgid "\"{input}\" is not a valid boolean." -msgstr "\"{input}\" ni veljaven boolean." +#: fields.py:701 +msgid "Must be a valid boolean." +msgstr "" -#: fields.py:674 +#: fields.py:766 +msgid "Not a valid string." +msgstr "" + +#: fields.py:767 msgid "This field may not be blank." msgstr "To polje ne sme biti prazno." -#: fields.py:675 fields.py:1675 +#: fields.py:768 fields.py:1881 +#, python-brace-format msgid "Ensure this field has no more than {max_length} characters." msgstr "To polje ne sme biti daljše od {max_length} znakov." -#: fields.py:676 +#: fields.py:769 +#, python-brace-format msgid "Ensure this field has at least {min_length} characters." msgstr "To polje mora vsebovati vsaj {min_length} znakov." -#: fields.py:713 +#: fields.py:816 msgid "Enter a valid email address." msgstr "Vnesite veljaven elektronski naslov." -#: fields.py:724 +#: fields.py:827 msgid "This value does not match the required pattern." msgstr "Ta vrednost ne ustreza zahtevanemu vzorcu." -#: fields.py:735 +#: fields.py:838 msgid "" "Enter a valid \"slug\" consisting of letters, numbers, underscores or " "hyphens." msgstr "Vnesite veljaven \"slug\", ki vsebuje črke, številke, podčrtaje ali vezaje." -#: fields.py:747 +#: fields.py:839 +msgid "" +"Enter a valid \"slug\" consisting of Unicode letters, numbers, underscores, " +"or hyphens." +msgstr "" + +#: fields.py:854 msgid "Enter a valid URL." msgstr "Vnesite veljaven URL." -#: fields.py:760 -msgid "\"{value}\" is not a valid UUID." -msgstr "\"{value}\" ni veljaven UUID" +#: fields.py:867 +msgid "Must be a valid UUID." +msgstr "" -#: fields.py:796 +#: fields.py:903 msgid "Enter a valid IPv4 or IPv6 address." msgstr "Vnesite veljaven IPv4 ali IPv6 naslov." -#: fields.py:821 +#: fields.py:931 msgid "A valid integer is required." msgstr "Zahtevano je veljavno celo število." -#: fields.py:822 fields.py:857 fields.py:891 +#: fields.py:932 fields.py:969 fields.py:1005 fields.py:1366 +#, python-brace-format msgid "Ensure this value is less than or equal to {max_value}." msgstr "Vrednost mora biti manjša ali enaka {max_value}." -#: fields.py:823 fields.py:858 fields.py:892 +#: fields.py:933 fields.py:970 fields.py:1006 fields.py:1367 +#, python-brace-format msgid "Ensure this value is greater than or equal to {min_value}." msgstr "Vrednost mora biti večija ali enaka {min_value}." -#: fields.py:824 fields.py:859 fields.py:896 +#: fields.py:934 fields.py:971 fields.py:1010 msgid "String value too large." msgstr "Niz je prevelik." -#: fields.py:856 fields.py:890 +#: fields.py:968 fields.py:1004 msgid "A valid number is required." msgstr "Zahtevano je veljavno število." -#: fields.py:893 +#: fields.py:1007 +#, python-brace-format msgid "Ensure that there are no more than {max_digits} digits in total." msgstr "Vnesete lahko največ {max_digits} števk." -#: fields.py:894 +#: fields.py:1008 +#, python-brace-format msgid "" "Ensure that there are no more than {max_decimal_places} decimal places." msgstr "Vnesete lahko največ {max_decimal_places} decimalnih mest." -#: fields.py:895 +#: fields.py:1009 +#, python-brace-format msgid "" "Ensure that there are no more than {max_whole_digits} digits before the " "decimal point." msgstr "Vnesete lahko največ {max_whole_digits} števk pred decimalno piko." -#: fields.py:1025 +#: fields.py:1148 +#, python-brace-format msgid "Datetime has wrong format. Use one of these formats instead: {format}." msgstr "Datim in čas v napačnem formatu. Uporabite eno izmed naslednjih formatov: {format}." -#: fields.py:1026 +#: fields.py:1149 msgid "Expected a datetime but got a date." msgstr "Pričakovan datum in čas, prejet le datum." -#: fields.py:1103 +#: fields.py:1150 +#, python-brace-format +msgid "Invalid datetime for the timezone \"{timezone}\"." +msgstr "" + +#: fields.py:1151 +msgid "Datetime value out of range." +msgstr "" + +#: fields.py:1236 +#, python-brace-format msgid "Date has wrong format. Use one of these formats instead: {format}." msgstr "Datum je v napačnem formatu. Uporabnite enega izmed naslednjih: {format}." -#: fields.py:1104 +#: fields.py:1237 msgid "Expected a date but got a datetime." msgstr "Pričakovan datum vendar prejet datum in čas." -#: fields.py:1170 +#: fields.py:1303 +#, python-brace-format msgid "Time has wrong format. Use one of these formats instead: {format}." msgstr "Čas je v napačnem formatu. Uporabite enega izmed naslednjih: {format}." -#: fields.py:1232 +#: fields.py:1365 +#, python-brace-format msgid "Duration has wrong format. Use one of these formats instead: {format}." msgstr "Trajanje je v napačnem formatu. Uporabite enega izmed naslednjih: {format}." -#: fields.py:1251 fields.py:1300 +#: fields.py:1399 fields.py:1456 +#, python-brace-format msgid "\"{input}\" is not a valid choice." msgstr "\"{input}\" ni veljavna izbira." -#: fields.py:1254 relations.py:71 relations.py:441 +#: fields.py:1402 +#, python-brace-format msgid "More than {count} items..." msgstr "Več kot {count} elementov..." -#: fields.py:1301 fields.py:1448 relations.py:437 serializers.py:524 +#: fields.py:1457 fields.py:1603 relations.py:485 serializers.py:570 +#, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "Pričakovan seznam elementov vendar prejet tip \"{input_type}\"." -#: fields.py:1302 +#: fields.py:1458 msgid "This selection may not be empty." msgstr "Ta izbria ne sme ostati prazna." -#: fields.py:1339 +#: fields.py:1495 +#, python-brace-format msgid "\"{input}\" is not a valid path choice." msgstr "\"{input}\" ni veljavna izbira poti." -#: fields.py:1358 +#: fields.py:1514 msgid "No file was submitted." msgstr "Datoteka ni bila oddana." -#: fields.py:1359 +#: fields.py:1515 msgid "" "The submitted data was not a file. Check the encoding type on the form." msgstr "Oddani podatki niso datoteka. Preverite vrsto kodiranja na formi." -#: fields.py:1360 +#: fields.py:1516 msgid "No filename could be determined." msgstr "Imena datoteke ni bilo mogoče določiti." -#: fields.py:1361 +#: fields.py:1517 msgid "The submitted file is empty." msgstr "Oddana datoteka je prazna." -#: fields.py:1362 +#: fields.py:1518 +#, python-brace-format msgid "" "Ensure this filename has at most {max_length} characters (it has {length})." msgstr "Ime datoteke lahko vsebuje največ {max_length} znakov (ta jih ima {length})." -#: fields.py:1410 +#: fields.py:1566 msgid "" "Upload a valid image. The file you uploaded was either not an image or a " "corrupted image." msgstr "Naložite veljavno sliko. Naložena datoteka ni bila slika ali pa je okvarjena." -#: fields.py:1449 relations.py:438 serializers.py:525 +#: fields.py:1604 relations.py:486 serializers.py:571 msgid "This list may not be empty." msgstr "Seznam ne sme biti prazen." -#: fields.py:1502 +#: fields.py:1605 +#, python-brace-format +msgid "Ensure this field has at least {min_length} elements." +msgstr "" + +#: fields.py:1606 +#, python-brace-format +msgid "Ensure this field has no more than {max_length} elements." +msgstr "" + +#: fields.py:1682 +#, python-brace-format msgid "Expected a dictionary of items but got type \"{input_type}\"." msgstr "Pričakovan je slovar elementov, prejet element je tipa \"{input_type}\"." -#: fields.py:1549 +#: fields.py:1683 +msgid "This dictionary may not be empty." +msgstr "" + +#: fields.py:1755 msgid "Value must be valid JSON." msgstr "Vrednost mora biti veljaven JSON." -#: filters.py:36 templates/rest_framework/filters/django_filter.html:5 -msgid "Submit" -msgstr "Potrdi" +#: filters.py:49 templates/rest_framework/filters/search.html:2 +msgid "Search" +msgstr "Iskanje" -#: filters.py:336 +#: filters.py:50 +msgid "A search term." +msgstr "" + +#: filters.py:180 templates/rest_framework/filters/ordering.html:3 +msgid "Ordering" +msgstr "Razvrščanje" + +#: filters.py:181 +msgid "Which field to use when ordering the results." +msgstr "" + +#: filters.py:287 msgid "ascending" msgstr "naraščujoče" -#: filters.py:337 +#: filters.py:288 msgid "descending" msgstr "padajoče" -#: pagination.py:193 +#: pagination.py:174 +msgid "A page number within the paginated result set." +msgstr "" + +#: pagination.py:179 pagination.py:372 pagination.py:590 +msgid "Number of results to return per page." +msgstr "" + +#: pagination.py:189 msgid "Invalid page." msgstr "Neveljavna stran." -#: pagination.py:427 +#: pagination.py:374 +msgid "The initial index from which to return the results." +msgstr "" + +#: pagination.py:581 +msgid "The pagination cursor value." +msgstr "" + +#: pagination.py:583 msgid "Invalid cursor" msgstr "Neveljaven kazalec" -#: relations.py:207 +#: relations.py:246 +#, python-brace-format msgid "Invalid pk \"{pk_value}\" - object does not exist." msgstr "Neveljaven pk \"{pk_value}\" - objekt ne obstaja." -#: relations.py:208 +#: relations.py:247 +#, python-brace-format msgid "Incorrect type. Expected pk value, received {data_type}." msgstr "Neveljaven tip. Pričakovana vrednost pk, prejet {data_type}." -#: relations.py:240 +#: relations.py:280 msgid "Invalid hyperlink - No URL match." msgstr "Neveljavna povezava - Ni URL." -#: relations.py:241 +#: relations.py:281 msgid "Invalid hyperlink - Incorrect URL match." msgstr "Ni veljavna povezava - Napačen URL." -#: relations.py:242 +#: relations.py:282 msgid "Invalid hyperlink - Object does not exist." msgstr "Ni veljavna povezava - Objekt ne obstaja." -#: relations.py:243 +#: relations.py:283 +#, python-brace-format msgid "Incorrect type. Expected URL string, received {data_type}." msgstr "Napačen tip. Pričakovan URL niz, prejet {data_type}." -#: relations.py:401 +#: relations.py:448 +#, python-brace-format msgid "Object with {slug_name}={value} does not exist." msgstr "Objekt z {slug_name}={value} ne obstaja." -#: relations.py:402 +#: relations.py:449 msgid "Invalid value." msgstr "Neveljavna vrednost." -#: serializers.py:326 +#: schemas/utils.py:32 +msgid "unique integer value" +msgstr "" + +#: schemas/utils.py:34 +msgid "UUID string" +msgstr "" + +#: schemas/utils.py:36 +msgid "unique value" +msgstr "" + +#: schemas/utils.py:38 +#, python-brace-format +msgid "A {value_type} identifying this {name}." +msgstr "" + +#: serializers.py:337 +#, python-brace-format msgid "Invalid data. Expected a dictionary, but got {datatype}." msgstr "Napačni podatki. Pričakovan slovar, prejet {datatype}." #: templates/rest_framework/admin.html:116 -#: templates/rest_framework/base.html:128 +#: templates/rest_framework/base.html:136 +msgid "Extra Actions" +msgstr "" + +#: templates/rest_framework/admin.html:130 +#: templates/rest_framework/base.html:150 msgid "Filters" msgstr "Filtri" -#: templates/rest_framework/filters/django_filter.html:2 -#: templates/rest_framework/filters/django_filter_crispyforms.html:4 -msgid "Field filters" -msgstr "Filter polj" +#: templates/rest_framework/base.html:37 +msgid "navbar" +msgstr "" -#: templates/rest_framework/filters/ordering.html:3 -msgid "Ordering" -msgstr "Razvrščanje" +#: templates/rest_framework/base.html:75 +msgid "content" +msgstr "" -#: templates/rest_framework/filters/search.html:2 -msgid "Search" -msgstr "Iskanje" +#: templates/rest_framework/base.html:78 +msgid "request form" +msgstr "" -#: templates/rest_framework/horizontal/radio.html:2 -#: templates/rest_framework/inline/radio.html:2 -#: templates/rest_framework/vertical/radio.html:2 +#: templates/rest_framework/base.html:157 +msgid "main content" +msgstr "" + +#: templates/rest_framework/base.html:173 +msgid "request info" +msgstr "" + +#: templates/rest_framework/base.html:177 +msgid "response info" +msgstr "" + +#: templates/rest_framework/horizontal/radio.html:4 +#: templates/rest_framework/inline/radio.html:3 +#: templates/rest_framework/vertical/radio.html:3 msgid "None" msgstr "None" -#: templates/rest_framework/horizontal/select_multiple.html:2 -#: templates/rest_framework/inline/select_multiple.html:2 -#: templates/rest_framework/vertical/select_multiple.html:2 +#: templates/rest_framework/horizontal/select_multiple.html:4 +#: templates/rest_framework/inline/select_multiple.html:3 +#: templates/rest_framework/vertical/select_multiple.html:3 msgid "No items to select." msgstr "Ni elementov za izbiro." -#: validators.py:43 +#: validators.py:39 msgid "This field must be unique." msgstr "To polje mora biti unikatno." -#: validators.py:97 +#: validators.py:89 +#, python-brace-format msgid "The fields {field_names} must make a unique set." msgstr "Polja {field_names} morajo skupaj sestavljati unikaten niz." -#: validators.py:245 +#: validators.py:171 +#, python-brace-format +msgid "Surrogate characters are not allowed: U+{code_point:X}." +msgstr "" + +#: validators.py:243 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" date." msgstr "Polje mora biti unikatno za \"{date_field}\" dan." -#: validators.py:260 +#: validators.py:258 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" month." msgstr "Polje mora biti unikatno za \"{date_field} mesec.\"" -#: validators.py:273 +#: validators.py:271 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" year." msgstr "Polje mora biti unikatno za \"{date_field}\" leto." -#: versioning.py:42 +#: versioning.py:40 msgid "Invalid version in \"Accept\" header." msgstr "Neveljavna verzija v \"Accept\" zaglavju." -#: versioning.py:73 +#: versioning.py:71 msgid "Invalid version in URL path." msgstr "Neveljavna različca v poti URL." -#: versioning.py:115 +#: versioning.py:116 msgid "Invalid version in URL path. Does not match any version namespace." msgstr "Neveljavna različica v poti URL. Se ne ujema z nobeno različico imenskega prostora." -#: versioning.py:147 +#: versioning.py:148 msgid "Invalid version in hostname." msgstr "Neveljavna različica v imenu gostitelja." -#: versioning.py:169 +#: versioning.py:170 msgid "Invalid version in query parameter." msgstr "Neveljavna verzija v poizvedbenem parametru." - -#: views.py:88 -msgid "Permission denied." -msgstr "Dovoljenje zavrnjeno." diff --git a/rest_framework/locale/sv/LC_MESSAGES/django.mo b/rest_framework/locale/sv/LC_MESSAGES/django.mo index 7abf311b9686b66f9707b29da53763576aa6e928..fb1a9f6f9e3f6ec7ddc3294224384284e7f8d122 100644 GIT binary patch delta 2244 zcmYk-e@s-yzt z(rPz1tudEl%~fl2H#gV%qaSXyR;^`hxUp7$_(%VQYq`amtM})eW9!-dp4ao7bMJYc z^E}_@+}Xal-uTZ;)6N)WFHxvSHG5H}bD&gYnmJgBW!Q!H;t|yMU&R&p9%kVeScBhT zHU5nmSh2`#1J>bY9QTadCsaB(k;1Pd*ooWmHGBwv#TE=MHtWU#4CA|~>vPzH`PpWr z7{#UdGHQTl{qvW7ucPjF8$%X1YhL1wFot@gJq<_0fWgUj^@osn=@1uRnZ(l$?*(KBy&7h|8 z55FDC^{)3}D(5FqGw>YVkCUkTeTe1w6&Bz;#vLl@d^-=zF%4UgS+@wT#%^R8?Rnpq zP&b%FrO7ld#}BX$zeFwRpQr)1a&uiDM758ia_03s=D&%``8}D&D3f->%=DP#*=aX#J8yAD&VdW z+=c!44mROUT#w~U$2L5OoA3(iceimnwllw4KWKrO*EYB&6VmAHV~1*ML+g!LF9 z|13&HFN6!&j=v#^ZB^_cKGw=X?LAnEG2~vBz;;X`W3gMPj`K^r2Zv);(eN7b>Zi(3|#m9%>(#U{`-sCHoIxdZBfZm=wP9RqvY(2BW2j_Hpti?1zSl5?b}FG9U|auJI;gRm+@gDF zW|X)sgqA}^d88#$9_=ND3H3vXyKAdjh{z>|2xan}Lf`ImYTIe_4xzG(c$m->Yh5)X zI|ywnmBk+R80ukEHW6A2rZ$ezms5>yX6s%5h7dt7ZXY_6|KvoZp~Xuzv}+M=*_p8DDqF%pb|^l zQAJtZ>(;#dQ8KD@dALXY@oXg6)kdCMh!>OlZU(mmIO@f5r);It<~Q!b4Mav_DsyFG zF0(dSxhN%&T$@uENIa3(l$_2hPfgq?nCV(mS5wcY!KrT!H-@U}C|Nzx@nbdpW6{Io zqtRorv9Plz=9Y|bWwL2LsJDr-iTJhGuApza> delta 2559 zcmZYATWl0n9LMp~ZnqaMEi6z9S~?b#7D}N&DHhpoF9M|qg+h^v;I=!I$!>SCJ4H#+ zO*9Y@A<@bU7e!O!gT9yw3Oq@Ti7_M!A;EaVga_q;5E36G#Q6Qq4)MX0{mSrW;$a0Z-y8yow!IJjs|w z>_L5h0yp3loQtz38xz7Xs)L(R=aZfpW8R^n8=l8{yoY>DRdKebD^Md2qaGB)mH0k3 z;SFrXvJzuzaVK)h97SDs607hUY9=4x0-Q62=kR>fPGt#hN8R8JY{xHfHReps-mnR0 z)86Q}9n?r(Mvd$=GNtB%-+thKKa1f9IKLV-6U`j7bXzf_8>Xqu$KzOv=h4C|I1TS$ z9_G?uRZIac#t@PQrp31dxzub$-KQUwMz7*bJmj~}pawiTjrG@BU+08IP(D3-VI!)& z1(i%GT!BYXYkb*n-$xCgZbtUH4QSEci|XJJ^kxKuv>%{4luPdxVo@pcUq_{$6FaaU zHPWwe7JlP<6E)KNemlT$meMXq^4D~tW~K+<%rVABb>J>rLrY|Fv*p-^Y9By#{7lBL zeCc})nGACWYcQ9qp2Wqdo;#@A*oVsgi+($wX=>uA(|}A9;o;CS%m0YTs_u(!Gum{0`ZXW>Q7Aqh-j)RB+G$ny>*6 zptk2{_?-6tKU5-|=&_7pXP8qM#!padbQ`sOO4&Qr*o4}i4r+>D!U%qhdVlV2>SweR<00ghl1&o`&2XyhMZBc8)Nyo;=k`3u#N5N{zR>nzk7 zb|A}Z&LDj-7f?(03-U3+C$cZ7g&3h7$JO{L>iXN5QKgt)$)%_tcH*-^DFhp3VP)!jvWNg^UAXv*Ap5H>ElP}z*&-&F*h6Toy9rIPN`T-!0SI5Dd?l}gyrWbH^* z;kxq5VNMR&|G#S6w)VEMWMLpU(N4syJx;>42h(H8$rZs+r#(2}q|;6+X~pcMW5;So z-U>D3cMbIpIPTcxP*q@hw68BUlyvpzn3In7CUnuQ89x=*H7r`Pa?z4yR^9T(`jsPB zN@q@4pNhtv0jnz&vj-DH$=F!YOe?3v>t#CbTKmUG2V?d~P1!u6q4HseElyib(zPwy zb*+B-=k&Xl*XwB6U~t0tXu{3*dhCbt\n" "Language-Team: Swedish (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/sv/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,40 +19,40 @@ msgstr "" "Language: sv\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: authentication.py:73 +#: authentication.py:70 msgid "Invalid basic header. No credentials provided." msgstr "Ogiltig \"basic\"-header. Inga användaruppgifter tillhandahölls." -#: authentication.py:76 +#: authentication.py:73 msgid "Invalid basic header. Credentials string should not contain spaces." msgstr "Ogiltig \"basic\"-header. Strängen för användaruppgifterna ska inte innehålla mellanslag." -#: authentication.py:82 +#: authentication.py:83 msgid "Invalid basic header. Credentials not correctly base64 encoded." msgstr "Ogiltig \"basic\"-header. Användaruppgifterna är inte korrekt base64-kodade." -#: authentication.py:99 +#: authentication.py:101 msgid "Invalid username/password." msgstr "Ogiltigt användarnamn/lösenord." -#: authentication.py:102 authentication.py:198 +#: authentication.py:104 authentication.py:206 msgid "User inactive or deleted." msgstr "Användaren borttagen eller inaktiv." -#: authentication.py:176 +#: authentication.py:184 msgid "Invalid token header. No credentials provided." msgstr "Ogiltig \"token\"-header. Inga användaruppgifter tillhandahölls." -#: authentication.py:179 +#: authentication.py:187 msgid "Invalid token header. Token string should not contain spaces." msgstr "Ogiltig \"token\"-header. Strängen ska inte innehålla mellanslag." -#: authentication.py:185 +#: authentication.py:193 msgid "" "Invalid token header. Token string should not contain invalid characters." msgstr "Ogiltig \"token\"-header. Strängen ska inte innehålla ogiltiga tecken." -#: authentication.py:195 +#: authentication.py:203 msgid "Invalid token." msgstr "Ogiltig \"token\"." @@ -60,382 +60,515 @@ msgstr "Ogiltig \"token\"." msgid "Auth Token" msgstr "Autentiseringstoken" -#: authtoken/models.py:15 +#: authtoken/models.py:13 msgid "Key" msgstr "Nyckel" -#: authtoken/models.py:18 +#: authtoken/models.py:16 msgid "User" msgstr "Användare" -#: authtoken/models.py:20 +#: authtoken/models.py:18 msgid "Created" msgstr "Skapad" -#: authtoken/models.py:29 +#: authtoken/models.py:27 authtoken/serializers.py:19 msgid "Token" msgstr "Token" -#: authtoken/models.py:30 +#: authtoken/models.py:28 msgid "Tokens" msgstr "Tokens" -#: authtoken/serializers.py:8 +#: authtoken/serializers.py:9 msgid "Username" msgstr "Användarnamn" -#: authtoken/serializers.py:9 +#: authtoken/serializers.py:13 msgid "Password" msgstr "Lösenord" -#: authtoken/serializers.py:20 -msgid "User account is disabled." -msgstr "Användarkontot är borttaget." - -#: authtoken/serializers.py:23 +#: authtoken/serializers.py:35 msgid "Unable to log in with provided credentials." msgstr "Kunde inte logga in med de angivna inloggningsuppgifterna." -#: authtoken/serializers.py:26 +#: authtoken/serializers.py:38 msgid "Must include \"username\" and \"password\"." msgstr "Användarnamn och lösenord måste anges." -#: exceptions.py:49 +#: exceptions.py:102 msgid "A server error occurred." msgstr "Ett serverfel inträffade." -#: exceptions.py:84 +#: exceptions.py:142 +msgid "Invalid input." +msgstr "" + +#: exceptions.py:161 msgid "Malformed request." msgstr "Ogiltig förfrågan." -#: exceptions.py:89 +#: exceptions.py:167 msgid "Incorrect authentication credentials." msgstr "Ogiltiga inloggningsuppgifter. " -#: exceptions.py:94 +#: exceptions.py:173 msgid "Authentication credentials were not provided." msgstr "Autentiseringsuppgifter ej tillhandahållna." -#: exceptions.py:99 +#: exceptions.py:179 msgid "You do not have permission to perform this action." msgstr "Du har inte tillåtelse att utföra denna förfrågan." -#: exceptions.py:104 views.py:81 +#: exceptions.py:185 msgid "Not found." msgstr "Hittades inte." -#: exceptions.py:109 +#: exceptions.py:191 +#, python-brace-format msgid "Method \"{method}\" not allowed." msgstr "Metoden \"{method}\" tillåts inte." -#: exceptions.py:120 +#: exceptions.py:202 msgid "Could not satisfy the request Accept header." msgstr "Kunde inte tillfredsställa förfrågans \"Accept\"-header." -#: exceptions.py:132 +#: exceptions.py:212 +#, python-brace-format msgid "Unsupported media type \"{media_type}\" in request." msgstr "Medietypen \"{media_type}\" stöds inte." -#: exceptions.py:145 +#: exceptions.py:223 msgid "Request was throttled." msgstr "Förfrågan stoppades eftersom du har skickat för många." -#: fields.py:269 relations.py:206 relations.py:239 validators.py:98 -#: validators.py:181 +#: exceptions.py:224 +#, python-brace-format +msgid "Expected available in {wait} second." +msgstr "" + +#: exceptions.py:225 +#, python-brace-format +msgid "Expected available in {wait} seconds." +msgstr "" + +#: fields.py:316 relations.py:245 relations.py:279 validators.py:90 +#: validators.py:183 msgid "This field is required." msgstr "Det här fältet är obligatoriskt." -#: fields.py:270 +#: fields.py:317 msgid "This field may not be null." msgstr "Det här fältet får inte vara null." -#: fields.py:608 fields.py:639 -msgid "\"{input}\" is not a valid boolean." -msgstr "\"{input}\" är inte ett giltigt booleskt värde." +#: fields.py:701 +msgid "Must be a valid boolean." +msgstr "" -#: fields.py:674 +#: fields.py:766 +msgid "Not a valid string." +msgstr "" + +#: fields.py:767 msgid "This field may not be blank." msgstr "Det här fältet får inte vara blankt." -#: fields.py:675 fields.py:1675 +#: fields.py:768 fields.py:1881 +#, python-brace-format msgid "Ensure this field has no more than {max_length} characters." msgstr "Se till att detta fält inte har fler än {max_length} tecken." -#: fields.py:676 +#: fields.py:769 +#, python-brace-format msgid "Ensure this field has at least {min_length} characters." msgstr "Se till att detta fält har minst {min_length} tecken." -#: fields.py:713 +#: fields.py:816 msgid "Enter a valid email address." msgstr "Ange en giltig mejladress." -#: fields.py:724 +#: fields.py:827 msgid "This value does not match the required pattern." msgstr "Det här värdet matchar inte mallen." -#: fields.py:735 +#: fields.py:838 msgid "" "Enter a valid \"slug\" consisting of letters, numbers, underscores or " "hyphens." msgstr "Ange en giltig \"slug\" bestående av bokstäver, nummer, understreck eller bindestreck." -#: fields.py:747 +#: fields.py:839 +msgid "" +"Enter a valid \"slug\" consisting of Unicode letters, numbers, underscores, " +"or hyphens." +msgstr "" + +#: fields.py:854 msgid "Enter a valid URL." msgstr "Ange en giltig URL." -#: fields.py:760 -msgid "\"{value}\" is not a valid UUID." -msgstr "\"{value} är inte ett giltigt UUID." +#: fields.py:867 +msgid "Must be a valid UUID." +msgstr "" -#: fields.py:796 +#: fields.py:903 msgid "Enter a valid IPv4 or IPv6 address." msgstr "Ange en giltig IPv4- eller IPv6-adress." -#: fields.py:821 +#: fields.py:931 msgid "A valid integer is required." msgstr "Ett giltigt heltal krävs." -#: fields.py:822 fields.py:857 fields.py:891 +#: fields.py:932 fields.py:969 fields.py:1005 fields.py:1366 +#, python-brace-format msgid "Ensure this value is less than or equal to {max_value}." msgstr "Se till att detta värde är mindre än eller lika med {max_value}." -#: fields.py:823 fields.py:858 fields.py:892 +#: fields.py:933 fields.py:970 fields.py:1006 fields.py:1367 +#, python-brace-format msgid "Ensure this value is greater than or equal to {min_value}." msgstr "Se till att detta värde är större än eller lika med {min_value}." -#: fields.py:824 fields.py:859 fields.py:896 +#: fields.py:934 fields.py:971 fields.py:1010 msgid "String value too large." msgstr "Textvärdet är för långt." -#: fields.py:856 fields.py:890 +#: fields.py:968 fields.py:1004 msgid "A valid number is required." msgstr "Ett giltigt nummer krävs." -#: fields.py:893 +#: fields.py:1007 +#, python-brace-format msgid "Ensure that there are no more than {max_digits} digits in total." msgstr "Se till att det inte finns fler än totalt {max_digits} siffror." -#: fields.py:894 +#: fields.py:1008 +#, python-brace-format msgid "" "Ensure that there are no more than {max_decimal_places} decimal places." msgstr "Se till att det inte finns fler än {max_decimal_places} decimaler." -#: fields.py:895 +#: fields.py:1009 +#, python-brace-format msgid "" "Ensure that there are no more than {max_whole_digits} digits before the " "decimal point." msgstr "Se till att det inte finns fler än {max_whole_digits} siffror före decimalpunkten." -#: fields.py:1025 +#: fields.py:1148 +#, python-brace-format msgid "Datetime has wrong format. Use one of these formats instead: {format}." msgstr "Datumtiden har fel format. Använd ett av dessa format istället: {format}." -#: fields.py:1026 +#: fields.py:1149 msgid "Expected a datetime but got a date." msgstr "Förväntade en datumtid men fick ett datum." -#: fields.py:1103 +#: fields.py:1150 +#, python-brace-format +msgid "Invalid datetime for the timezone \"{timezone}\"." +msgstr "" + +#: fields.py:1151 +msgid "Datetime value out of range." +msgstr "" + +#: fields.py:1236 +#, python-brace-format msgid "Date has wrong format. Use one of these formats instead: {format}." msgstr "Datumet har fel format. Använde ett av dessa format istället: {format}." -#: fields.py:1104 +#: fields.py:1237 msgid "Expected a date but got a datetime." msgstr "Förväntade ett datum men fick en datumtid." -#: fields.py:1170 +#: fields.py:1303 +#, python-brace-format msgid "Time has wrong format. Use one of these formats instead: {format}." msgstr "Tiden har fel format. Använd ett av dessa format istället: {format}." -#: fields.py:1232 +#: fields.py:1365 +#, python-brace-format msgid "Duration has wrong format. Use one of these formats instead: {format}." msgstr "Perioden har fel format. Använd ett av dessa format istället: {format}." -#: fields.py:1251 fields.py:1300 +#: fields.py:1399 fields.py:1456 +#, python-brace-format msgid "\"{input}\" is not a valid choice." msgstr "\"{input}\" är inte ett giltigt val." -#: fields.py:1254 relations.py:71 relations.py:441 +#: fields.py:1402 +#, python-brace-format msgid "More than {count} items..." msgstr "Fler än {count} objekt..." -#: fields.py:1301 fields.py:1448 relations.py:437 serializers.py:524 +#: fields.py:1457 fields.py:1603 relations.py:485 serializers.py:570 +#, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "Förväntade en lista med element men fick typen \"{input_type}\"." -#: fields.py:1302 +#: fields.py:1458 msgid "This selection may not be empty." msgstr "Det här valet får inte vara tomt." -#: fields.py:1339 +#: fields.py:1495 +#, python-brace-format msgid "\"{input}\" is not a valid path choice." msgstr "\"{input}\" är inte ett giltigt val för en sökväg." -#: fields.py:1358 +#: fields.py:1514 msgid "No file was submitted." msgstr "Ingen fil skickades." -#: fields.py:1359 +#: fields.py:1515 msgid "" "The submitted data was not a file. Check the encoding type on the form." msgstr "Den skickade informationen var inte en fil. Kontrollera formulärets kodningstyp." -#: fields.py:1360 +#: fields.py:1516 msgid "No filename could be determined." msgstr "Inget filnamn kunde bestämmas." -#: fields.py:1361 +#: fields.py:1517 msgid "The submitted file is empty." msgstr "Den skickade filen var tom." -#: fields.py:1362 +#: fields.py:1518 +#, python-brace-format msgid "" "Ensure this filename has at most {max_length} characters (it has {length})." msgstr "Se till att det här filnamnet har högst {max_length} tecken (det har {length})." -#: fields.py:1410 +#: fields.py:1566 msgid "" "Upload a valid image. The file you uploaded was either not an image or a " "corrupted image." msgstr "Ladda upp en giltig bild. Filen du laddade upp var antingen inte en bild eller en skadad bild." -#: fields.py:1449 relations.py:438 serializers.py:525 +#: fields.py:1604 relations.py:486 serializers.py:571 msgid "This list may not be empty." msgstr "Den här listan får inte vara tom." -#: fields.py:1502 +#: fields.py:1605 +#, python-brace-format +msgid "Ensure this field has at least {min_length} elements." +msgstr "" + +#: fields.py:1606 +#, python-brace-format +msgid "Ensure this field has no more than {max_length} elements." +msgstr "" + +#: fields.py:1682 +#, python-brace-format msgid "Expected a dictionary of items but got type \"{input_type}\"." msgstr "Förväntade en \"dictionary\" med element men fick typen \"{input_type}\"." -#: fields.py:1549 +#: fields.py:1683 +msgid "This dictionary may not be empty." +msgstr "" + +#: fields.py:1755 msgid "Value must be valid JSON." msgstr "Värdet måste vara giltig JSON." -#: filters.py:36 templates/rest_framework/filters/django_filter.html:5 -msgid "Submit" -msgstr "Skicka" +#: filters.py:49 templates/rest_framework/filters/search.html:2 +msgid "Search" +msgstr "Sök" -#: filters.py:336 +#: filters.py:50 +msgid "A search term." +msgstr "" + +#: filters.py:180 templates/rest_framework/filters/ordering.html:3 +msgid "Ordering" +msgstr "Ordning" + +#: filters.py:181 +msgid "Which field to use when ordering the results." +msgstr "" + +#: filters.py:287 msgid "ascending" msgstr "stigande" -#: filters.py:337 +#: filters.py:288 msgid "descending" msgstr "fallande" -#: pagination.py:193 +#: pagination.py:174 +msgid "A page number within the paginated result set." +msgstr "" + +#: pagination.py:179 pagination.py:372 pagination.py:590 +msgid "Number of results to return per page." +msgstr "" + +#: pagination.py:189 msgid "Invalid page." msgstr "Ogiltig sida." -#: pagination.py:427 +#: pagination.py:374 +msgid "The initial index from which to return the results." +msgstr "" + +#: pagination.py:581 +msgid "The pagination cursor value." +msgstr "" + +#: pagination.py:583 msgid "Invalid cursor" msgstr "Ogiltig cursor." -#: relations.py:207 +#: relations.py:246 +#, python-brace-format msgid "Invalid pk \"{pk_value}\" - object does not exist." msgstr "Ogiltigt pk \"{pk_value}\" - Objektet finns inte." -#: relations.py:208 +#: relations.py:247 +#, python-brace-format msgid "Incorrect type. Expected pk value, received {data_type}." msgstr "Felaktig typ. Förväntade pk-värde, fick {data_type}." -#: relations.py:240 +#: relations.py:280 msgid "Invalid hyperlink - No URL match." msgstr "Ogiltig hyperlänk - Ingen URL matchade." -#: relations.py:241 +#: relations.py:281 msgid "Invalid hyperlink - Incorrect URL match." msgstr "Ogiltig hyperlänk - Felaktig URL-matching." -#: relations.py:242 +#: relations.py:282 msgid "Invalid hyperlink - Object does not exist." msgstr "Ogiltig hyperlänk - Objektet finns inte." -#: relations.py:243 +#: relations.py:283 +#, python-brace-format msgid "Incorrect type. Expected URL string, received {data_type}." msgstr "Felaktig typ. Förväntade URL-sträng, fick {data_type}." -#: relations.py:401 +#: relations.py:448 +#, python-brace-format msgid "Object with {slug_name}={value} does not exist." msgstr "Objekt med {slug_name}={value} finns inte." -#: relations.py:402 +#: relations.py:449 msgid "Invalid value." msgstr "Ogiltigt värde." -#: serializers.py:326 +#: schemas/utils.py:32 +msgid "unique integer value" +msgstr "" + +#: schemas/utils.py:34 +msgid "UUID string" +msgstr "" + +#: schemas/utils.py:36 +msgid "unique value" +msgstr "" + +#: schemas/utils.py:38 +#, python-brace-format +msgid "A {value_type} identifying this {name}." +msgstr "" + +#: serializers.py:337 +#, python-brace-format msgid "Invalid data. Expected a dictionary, but got {datatype}." msgstr "Ogiltig data. Förväntade en dictionary, men fick {datatype}." #: templates/rest_framework/admin.html:116 -#: templates/rest_framework/base.html:128 +#: templates/rest_framework/base.html:136 +msgid "Extra Actions" +msgstr "" + +#: templates/rest_framework/admin.html:130 +#: templates/rest_framework/base.html:150 msgid "Filters" msgstr "Filter" -#: templates/rest_framework/filters/django_filter.html:2 -#: templates/rest_framework/filters/django_filter_crispyforms.html:4 -msgid "Field filters" -msgstr "Fältfilter" +#: templates/rest_framework/base.html:37 +msgid "navbar" +msgstr "" -#: templates/rest_framework/filters/ordering.html:3 -msgid "Ordering" -msgstr "Ordning" +#: templates/rest_framework/base.html:75 +msgid "content" +msgstr "" -#: templates/rest_framework/filters/search.html:2 -msgid "Search" -msgstr "Sök" +#: templates/rest_framework/base.html:78 +msgid "request form" +msgstr "" -#: templates/rest_framework/horizontal/radio.html:2 -#: templates/rest_framework/inline/radio.html:2 -#: templates/rest_framework/vertical/radio.html:2 +#: templates/rest_framework/base.html:157 +msgid "main content" +msgstr "" + +#: templates/rest_framework/base.html:173 +msgid "request info" +msgstr "" + +#: templates/rest_framework/base.html:177 +msgid "response info" +msgstr "" + +#: templates/rest_framework/horizontal/radio.html:4 +#: templates/rest_framework/inline/radio.html:3 +#: templates/rest_framework/vertical/radio.html:3 msgid "None" msgstr "Inget" -#: templates/rest_framework/horizontal/select_multiple.html:2 -#: templates/rest_framework/inline/select_multiple.html:2 -#: templates/rest_framework/vertical/select_multiple.html:2 +#: templates/rest_framework/horizontal/select_multiple.html:4 +#: templates/rest_framework/inline/select_multiple.html:3 +#: templates/rest_framework/vertical/select_multiple.html:3 msgid "No items to select." msgstr "Inga valbara objekt." -#: validators.py:43 +#: validators.py:39 msgid "This field must be unique." msgstr "Det här fältet måste vara unikt." -#: validators.py:97 +#: validators.py:89 +#, python-brace-format msgid "The fields {field_names} must make a unique set." msgstr "Fälten {field_names} måste skapa ett unikt set." -#: validators.py:245 +#: validators.py:171 +#, python-brace-format +msgid "Surrogate characters are not allowed: U+{code_point:X}." +msgstr "" + +#: validators.py:243 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" date." msgstr "Det här fältet måste vara unikt för datumet \"{date_field}\"." -#: validators.py:260 +#: validators.py:258 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" month." msgstr "Det här fältet måste vara unikt för månaden \"{date_field}\"." -#: validators.py:273 +#: validators.py:271 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" year." msgstr "Det här fältet måste vara unikt för året \"{date_field}\"." -#: versioning.py:42 +#: versioning.py:40 msgid "Invalid version in \"Accept\" header." msgstr "Ogiltig version i \"Accept\"-headern." -#: versioning.py:73 +#: versioning.py:71 msgid "Invalid version in URL path." msgstr "Ogiltig version i URL-resursen." -#: versioning.py:115 +#: versioning.py:116 msgid "Invalid version in URL path. Does not match any version namespace." msgstr "Ogiltig version i URL-resursen. Matchar inget versions-namespace." -#: versioning.py:147 +#: versioning.py:148 msgid "Invalid version in hostname." msgstr "Ogiltig version i värdnamnet." -#: versioning.py:169 +#: versioning.py:170 msgid "Invalid version in query parameter." msgstr "Ogiltig version i förfrågningsparametern." - -#: views.py:88 -msgid "Permission denied." -msgstr "Åtkomst nekad." diff --git a/rest_framework/locale/th/LC_MESSAGES/django.mo b/rest_framework/locale/th/LC_MESSAGES/django.mo new file mode 100644 index 0000000000000000000000000000000000000000..4a2b85a9bb977c0b5c54ea19106fc5b912da14fa GIT binary patch literal 8880 zcmd6rTaX-88OINZA}gXs!Arax7EvI~>?Q~u2IJ#_bE zvz1Dj5UdagRG|r%a7};$v4Y$pGidq717(#@R_Tk_RQaS2zF53iCH}s1`nJ2X*-i06 z*Y^DT^f~7{-}nD6=k&h6=)7Z!YYq1|gL0Rq6v!^!^uk>>Q;&1V?Ef`GQinfqw^o0xtQYQtQBjpp1VHl>R@1 zFM#?>O7*~Z!B@ba;j|Wb)t8kT2OkF|@cs)P1|RtfvcSa`D;0vzf*o)Xq4~o5` zkS6vY16P9Yf;+*Fz$tJiK`MIu19ZS)j21ur0=x@+2fP8i7$@%mN5QMWKZ4%{KLkB+ zF{I19pMy}WPJtr#9q>BvGdL#zSA)D#r@$YA?}1RH7JbX&ASiN{fvBYJO5aD|Fztij z)8Jd+N^q1Q6Mc?=W8mAM@OpSB z{bNw{`3)%c`~{SCE*rFV>`Cz`cnZn)bG zwHt;(sDoOq6NYYGI_yBtkKGCSnIF3Mbi8Suey24)tFIF`^jNUV_0>&0x_<1{oY)I| zU1P2^oo1vb-Ox1(wZmYySC1VXM5ePc`c{8 zz1?(bZnRIQZEf3CwO~2kgcr+vgYcu{AalsZZMserW1Hu1Z@T_O+}KCFIiXXF-7uPKo*&HQWxlxtXvdYnoCsZFClscA zO%xNSP7~v;3T7C=k<-YGd}`B;qJHymOEFJmXNfZyH9Hf7x)%767sVcdN?(y*oMu!mrFNzop$PVM$a0vb#$ZXUY_Q*9Isg#zo+d& zZ5`)hdr{xZ{ohX_NLJCwi(ga3T-R4fIO>W!>>afu=57b#xWSh-kQcBvU zBGGF>$B*|}DyvnxI>F=7{;p}0N}YbE*-ZOP1eUtWi`mSt2jr!g(sJTj!)Ti=uG@|zGodi{@plrt z51QXdZS|dTJV{+@1`|@ACq1^xYy&KBk5$G-opw72C9PX--E%Cn5@En|8| zh#sWWu7OckOss5*CcJv(=FUV^84E`Az~(zDqwa1`W>(fx!bbG6;bp^>rTkr^m#!RH ze(jQBu7QngGnKK>@uQ{_2jPhRsk7UoRuk*NJ)J3i!yfWhp4K!ypJRqotp%+cndVP) z$o$FDnSi|x36^%Ge>PEJ;1k?8Gk_sH;}y3xEsX^tzo=9Q)W-wzR?M)pwL z7`k#`(}qp!3J#W5hX-y6sN_CcQ#VI+?Cyz&*ycTdmDwR9H(tGUY<*=#F-~;Z;f9rU zX@-sH72{r<+klM5z~&|gmS$x=?ukaU-!{!?_0m-wA*5&Z@T!5*Q84MGsTkbni2Z^Nfyf zCfz4QM}9>v;}3})^XS-L?hJeHokxnCWYa@!!Cn{jkC)6s6)1u|EH>JUmey#RuSl;@ zja9FiiN`UT26LWFddxuax{kk*gyHnQQIUwF@d~kZ0GIY%ZFW*Dc(wG?BQGQiUP1!j z1Wq4YEgu-l7@HFd)o1#bOkb@qHmCVn!yIamLX@%Tt5Ac)Eo23n-~=9M;-8b5D@Yqk zlC6p-r+@e4OPd)&e$xFFo}P=Jv)5$q5Xiot&Q^!q{Ji*5jfgc2gaN4z<}V*cVBsmV zWk|()ETe^C7<|0^6*iaIxvbes7R;XQs`)n@tD*}!+C44bhp@&L?5xzLg_Hupc$k@?)Jl?QEDC{?(@Z!8P*`v_{ zy08nYu^%r$CRP_aoMnWe97xDD%Q)j0)OSD3=o2lF1(k1L)Pj~OxGzmUwvp$5AoNs-;gUo^=JSbr)jvnVysN?B2zf1Hi; z-Vs&El;U8&5zrHTx~8h3n<-n;Yf4Qz?698oFA=CaVG@X6rV)1hr3GK_P5&=q);pD! zz3vJ54@r9FmuTU93?D3B@}(^Jis4{kL>5(-sPDsK$z*%57q-}rDRN~xgnF#7wjhZL z%db7qLrqDS(tKl`)V1;=h&Wwt%hv=(Lk{xE4D3d7UU(>Td;oETm$JyXxvY@=gZQzL zBZV>~HjI6?na&9zAK3SfChCNeX^Zn5heyC4$l&sZBk6M*|lSrJPD=U`| zwq+~xT2eMCuXeZ~s}$W6mao(+#V1l42*gN!kU&RFLkavR2WIS=akhe?(}pU#-%LlF zFq?a5kwCMeKvrXM%Y0c2Sht>E@cPrjJk6ang;ly2WV)Y0p=neUN@TS_0>qeKh_H@= zM4V&yUK~OIl)p~%NGN4u7P9a*Yl5Z4?9oNg^e@!qpy?enMF%!#OQee|nDt(A8k^4W zAzS)qTsiOhx-ySRda2BW2n*UQKi)T+=_X7ej|WR0*#p6Z1=`vywkcu1k)I=a&Hs%{ z|ISN#2eCnq+JEUm=ge)P&#Qt}ailprrGZaQ(?sGKHkAB)NOh5-QYv4w7SH!2#^q52 zF|bk!2D`Y)BQ5_{)TJ!VS1ZOFS+b}6vM?kKd6>rp0`75nkngfQ`0T3iYV#JiGm_u5 csvwkVM)2T~lSVGg;||$<=u4lnj$)|#KkWHar2qf` literal 0 HcmV?d00001 diff --git a/rest_framework/locale/th/LC_MESSAGES/django.po b/rest_framework/locale/th/LC_MESSAGES/django.po new file mode 100644 index 000000000..353244db9 --- /dev/null +++ b/rest_framework/locale/th/LC_MESSAGES/django.po @@ -0,0 +1,573 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Preeti Yuankrathok , 2018 +msgid "" +msgstr "" +"Project-Id-Version: Django REST framework\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-10-13 21:45+0200\n" +"PO-Revision-Date: 2020-10-13 19:45+0000\n" +"Last-Translator: Xavier Ordoquy \n" +"Language-Team: Thai (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/th/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: th\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: authentication.py:70 +msgid "Invalid basic header. No credentials provided." +msgstr "" + +#: authentication.py:73 +msgid "Invalid basic header. Credentials string should not contain spaces." +msgstr "" + +#: authentication.py:83 +msgid "Invalid basic header. Credentials not correctly base64 encoded." +msgstr "" + +#: authentication.py:101 +msgid "Invalid username/password." +msgstr "ชื่อผู้ใช้งานหรือรหัสผ่านไม่ถูกต้อง" + +#: authentication.py:104 authentication.py:206 +msgid "User inactive or deleted." +msgstr "ผู้ใช้ไม่ได้เปิดใช้งานหรือถูกลบ" + +#: authentication.py:184 +msgid "Invalid token header. No credentials provided." +msgstr "" + +#: authentication.py:187 +msgid "Invalid token header. Token string should not contain spaces." +msgstr "" + +#: authentication.py:193 +msgid "" +"Invalid token header. Token string should not contain invalid characters." +msgstr "" + +#: authentication.py:203 +msgid "Invalid token." +msgstr "Token ไม่ถูกต้อง" + +#: authtoken/apps.py:7 +msgid "Auth Token" +msgstr "Auth Token" + +#: authtoken/models.py:13 +msgid "Key" +msgstr "คีย์" + +#: authtoken/models.py:16 +msgid "User" +msgstr "ผู้ใช้" + +#: authtoken/models.py:18 +msgid "Created" +msgstr "" + +#: authtoken/models.py:27 authtoken/serializers.py:19 +msgid "Token" +msgstr "Token" + +#: authtoken/models.py:28 +msgid "Tokens" +msgstr "Token" + +#: authtoken/serializers.py:9 +msgid "Username" +msgstr "ชื่อผู้ใช้งาน" + +#: authtoken/serializers.py:13 +msgid "Password" +msgstr "รหัสผ่าน" + +#: authtoken/serializers.py:35 +msgid "Unable to log in with provided credentials." +msgstr "ไม่สามารถเข้าสู่ระบบได้" + +#: authtoken/serializers.py:38 +msgid "Must include \"username\" and \"password\"." +msgstr "จำเป็นต้องใส่ชื่อผู้ใช้งานและรหัสผ่าน" + +#: exceptions.py:102 +msgid "A server error occurred." +msgstr "เซิร์ฟเวอร์เกิดข้อผิดพลาด" + +#: exceptions.py:142 +msgid "Invalid input." +msgstr "" + +#: exceptions.py:161 +msgid "Malformed request." +msgstr "" + +#: exceptions.py:167 +msgid "Incorrect authentication credentials." +msgstr "ข้อมูลการเข้าสู่ระบบไม่ถูกต้อง" + +#: exceptions.py:173 +msgid "Authentication credentials were not provided." +msgstr "ไม่พบข้อมูลการเข้าสู่ระบบ" + +#: exceptions.py:179 +msgid "You do not have permission to perform this action." +msgstr "คุณไม่มีสิทธิ์ที่จะดำเนินการ" + +#: exceptions.py:185 +msgid "Not found." +msgstr "ไม่พบ" + +#: exceptions.py:191 +#, python-brace-format +msgid "Method \"{method}\" not allowed." +msgstr "ไม่ใช่อนุญาติให้ใช้ Method \"{method}\"" + +#: exceptions.py:202 +msgid "Could not satisfy the request Accept header." +msgstr "" + +#: exceptions.py:212 +#, python-brace-format +msgid "Unsupported media type \"{media_type}\" in request." +msgstr "ไม่รองรับมีเดียประเภท \"{media_type}\" ใน Request" + +#: exceptions.py:223 +msgid "Request was throttled." +msgstr "" + +#: exceptions.py:224 +#, python-brace-format +msgid "Expected available in {wait} second." +msgstr "" + +#: exceptions.py:225 +#, python-brace-format +msgid "Expected available in {wait} seconds." +msgstr "" + +#: fields.py:316 relations.py:245 relations.py:279 validators.py:90 +#: validators.py:183 +msgid "This field is required." +msgstr "ฟิลด์นี้จำเป็น" + +#: fields.py:317 +msgid "This field may not be null." +msgstr "ฟิลด์นี้จำเป็นต้องมีค่า" + +#: fields.py:701 +msgid "Must be a valid boolean." +msgstr "" + +#: fields.py:766 +msgid "Not a valid string." +msgstr "" + +#: fields.py:767 +msgid "This field may not be blank." +msgstr "ฟิลด์นี้ไม่สามารถเว้นว่างได้" + +#: fields.py:768 fields.py:1881 +#, python-brace-format +msgid "Ensure this field has no more than {max_length} characters." +msgstr "ตรวจสอบฟิลด์ว่ามีความยาวไม่เกิน {max_length} ตัวอักษร" + +#: fields.py:769 +#, python-brace-format +msgid "Ensure this field has at least {min_length} characters." +msgstr "ตรวตสอบฟิลด์ว่ามีความยาวอย่างน้อย {min_length} ตัวอักษร" + +#: fields.py:816 +msgid "Enter a valid email address." +msgstr "กรอกอีเมลให้ถูกต้อง" + +#: fields.py:827 +msgid "This value does not match the required pattern." +msgstr "ค่านี้ไม่ตรงกับรูปแบบที่ต้องการ" + +#: fields.py:838 +msgid "" +"Enter a valid \"slug\" consisting of letters, numbers, underscores or " +"hyphens." +msgstr "กรอกข้อมูลที่ประกอบด้วยตัวอักษร ตัวเลข สัญประกาศ และยัติภังค์เท่านั้น" + +#: fields.py:839 +msgid "" +"Enter a valid \"slug\" consisting of Unicode letters, numbers, underscores, " +"or hyphens." +msgstr "" + +#: fields.py:854 +msgid "Enter a valid URL." +msgstr "กรอก URL ให้ถูกต้อง" + +#: fields.py:867 +msgid "Must be a valid UUID." +msgstr "" + +#: fields.py:903 +msgid "Enter a valid IPv4 or IPv6 address." +msgstr "กรอก IPv4 หรือ IPv6 ให้ถูกต้อง" + +#: fields.py:931 +msgid "A valid integer is required." +msgstr "ต้องการค่าจำนวนเต็มที่ถูกต้อง" + +#: fields.py:932 fields.py:969 fields.py:1005 fields.py:1366 +#, python-brace-format +msgid "Ensure this value is less than or equal to {max_value}." +msgstr "ตรวจสอบว่าค่านี้น้อยกว่าหรือเท่ากับ {max_value}" + +#: fields.py:933 fields.py:970 fields.py:1006 fields.py:1367 +#, python-brace-format +msgid "Ensure this value is greater than or equal to {min_value}." +msgstr "ตรวจสอบว่าค่านี้มากกว่าหรือเท่ากับ {min_value}" + +#: fields.py:934 fields.py:971 fields.py:1010 +msgid "String value too large." +msgstr "ข้อความยาวเกินไป" + +#: fields.py:968 fields.py:1004 +msgid "A valid number is required." +msgstr "ต้องการตัวเลขที่ถูกต้อง" + +#: fields.py:1007 +#, python-brace-format +msgid "Ensure that there are no more than {max_digits} digits in total." +msgstr "ตรวจสอบตัวเลขว่ามีไม่เกิน {max_digits} ตัว" + +#: fields.py:1008 +#, python-brace-format +msgid "" +"Ensure that there are no more than {max_decimal_places} decimal places." +msgstr "ตรวจสอบทศนิยมว่ามีไม่เกิน {max_decimal_places} หลัก" + +#: fields.py:1009 +#, python-brace-format +msgid "" +"Ensure that there are no more than {max_whole_digits} digits before the " +"decimal point." +msgstr "ตรวจสอบตัวเลขและทศนิยมรวมกันว่ามีไม่เกิน {max_whole_digits} ตัว" + +#: fields.py:1148 +#, python-brace-format +msgid "Datetime has wrong format. Use one of these formats instead: {format}." +msgstr "รูปแบบวันที่และเวลาไม่ถูกต้อง โปรดใช้รูปแบบใดรูปแบบหนึ่งจาก: {format}" + +#: fields.py:1149 +msgid "Expected a datetime but got a date." +msgstr "ต้องการวันที่และเวลา แต่ได้รับเพียงวันที่" + +#: fields.py:1150 +#, python-brace-format +msgid "Invalid datetime for the timezone \"{timezone}\"." +msgstr "" + +#: fields.py:1151 +msgid "Datetime value out of range." +msgstr "" + +#: fields.py:1236 +#, python-brace-format +msgid "Date has wrong format. Use one of these formats instead: {format}." +msgstr "รูปแบบวันที่ไม่ถูกต้อง โปรดใช้รูปแบบใดรูปแบบหนึ่งจาก: {format}" + +#: fields.py:1237 +msgid "Expected a date but got a datetime." +msgstr "ต้องการวันที่ แต่ได้รับวันที่และเวลา" + +#: fields.py:1303 +#, python-brace-format +msgid "Time has wrong format. Use one of these formats instead: {format}." +msgstr "รูปแบบเวลาไม่ถูกต้อง โปรดใช้รูปแบบใดรูปแบบหนึ่งจาก: {format}" + +#: fields.py:1365 +#, python-brace-format +msgid "Duration has wrong format. Use one of these formats instead: {format}." +msgstr "รูปแบบระยะเวลาไม่ถูกต้อง โปรดใช้รูปแบบใดรูปแบบหนึ่งจาก: {format}" + +#: fields.py:1399 fields.py:1456 +#, python-brace-format +msgid "\"{input}\" is not a valid choice." +msgstr "\"{input}\" ไม่ใช่ตัวเลือกที่ถูกต้อง" + +#: fields.py:1402 +#, python-brace-format +msgid "More than {count} items..." +msgstr "มีมากกว่า {count} ไอเทม..." + +#: fields.py:1457 fields.py:1603 relations.py:485 serializers.py:570 +#, python-brace-format +msgid "Expected a list of items but got type \"{input_type}\"." +msgstr "ต้องการ List ของข้อมูล แต่ได้รับ \"{input_type}\"" + +#: fields.py:1458 +msgid "This selection may not be empty." +msgstr "" + +#: fields.py:1495 +#, python-brace-format +msgid "\"{input}\" is not a valid path choice." +msgstr "" + +#: fields.py:1514 +msgid "No file was submitted." +msgstr "ไม่พบไฟล์" + +#: fields.py:1515 +msgid "" +"The submitted data was not a file. Check the encoding type on the form." +msgstr "ข้อมูลที่ส่งไม่ใช่ไฟล์ โปรดตรวจสอบการเข้ารหัสของฟอร์ม" + +#: fields.py:1516 +msgid "No filename could be determined." +msgstr "ไม่สามารถระบุชื่อไฟล์ได้" + +#: fields.py:1517 +msgid "The submitted file is empty." +msgstr "ไฟล์ที่ส่งว่างเปล่า" + +#: fields.py:1518 +#, python-brace-format +msgid "" +"Ensure this filename has at most {max_length} characters (it has {length})." +msgstr "" + +#: fields.py:1566 +msgid "" +"Upload a valid image. The file you uploaded was either not an image or a " +"corrupted image." +msgstr "" + +#: fields.py:1604 relations.py:486 serializers.py:571 +msgid "This list may not be empty." +msgstr "List นี้ไม่สามารถว่างได้" + +#: fields.py:1605 +#, python-brace-format +msgid "Ensure this field has at least {min_length} elements." +msgstr "" + +#: fields.py:1606 +#, python-brace-format +msgid "Ensure this field has no more than {max_length} elements." +msgstr "" + +#: fields.py:1682 +#, python-brace-format +msgid "Expected a dictionary of items but got type \"{input_type}\"." +msgstr "ต้องการ Dictionary แต่ได้รับ \"{input_type}\"" + +#: fields.py:1683 +msgid "This dictionary may not be empty." +msgstr "" + +#: fields.py:1755 +msgid "Value must be valid JSON." +msgstr "ค่าจะต้องเป็น JSON ที่ถูกต้อง" + +#: filters.py:49 templates/rest_framework/filters/search.html:2 +msgid "Search" +msgstr "ค้นหา" + +#: filters.py:50 +msgid "A search term." +msgstr "" + +#: filters.py:180 templates/rest_framework/filters/ordering.html:3 +msgid "Ordering" +msgstr "การเรียงลำดับ" + +#: filters.py:181 +msgid "Which field to use when ordering the results." +msgstr "" + +#: filters.py:287 +msgid "ascending" +msgstr "น้อยไปมาก" + +#: filters.py:288 +msgid "descending" +msgstr "มากไปน้อย" + +#: pagination.py:174 +msgid "A page number within the paginated result set." +msgstr "" + +#: pagination.py:179 pagination.py:372 pagination.py:590 +msgid "Number of results to return per page." +msgstr "" + +#: pagination.py:189 +msgid "Invalid page." +msgstr "หน้าไม่ถูกต้อง" + +#: pagination.py:374 +msgid "The initial index from which to return the results." +msgstr "" + +#: pagination.py:581 +msgid "The pagination cursor value." +msgstr "" + +#: pagination.py:583 +msgid "Invalid cursor" +msgstr "เคอร์เซอร์ไม่ถูกต้อง" + +#: relations.py:246 +#, python-brace-format +msgid "Invalid pk \"{pk_value}\" - object does not exist." +msgstr "" + +#: relations.py:247 +#, python-brace-format +msgid "Incorrect type. Expected pk value, received {data_type}." +msgstr "" + +#: relations.py:280 +msgid "Invalid hyperlink - No URL match." +msgstr "" + +#: relations.py:281 +msgid "Invalid hyperlink - Incorrect URL match." +msgstr "" + +#: relations.py:282 +msgid "Invalid hyperlink - Object does not exist." +msgstr "" + +#: relations.py:283 +#, python-brace-format +msgid "Incorrect type. Expected URL string, received {data_type}." +msgstr "" + +#: relations.py:448 +#, python-brace-format +msgid "Object with {slug_name}={value} does not exist." +msgstr "" + +#: relations.py:449 +msgid "Invalid value." +msgstr "ค่าไม่ถูกต้อง" + +#: schemas/utils.py:32 +msgid "unique integer value" +msgstr "" + +#: schemas/utils.py:34 +msgid "UUID string" +msgstr "" + +#: schemas/utils.py:36 +msgid "unique value" +msgstr "" + +#: schemas/utils.py:38 +#, python-brace-format +msgid "A {value_type} identifying this {name}." +msgstr "" + +#: serializers.py:337 +#, python-brace-format +msgid "Invalid data. Expected a dictionary, but got {datatype}." +msgstr "ข้อมูลไม่ถูกต้อง ต้องการ Dictionary แต่ได้รับ {datatype}" + +#: templates/rest_framework/admin.html:116 +#: templates/rest_framework/base.html:136 +msgid "Extra Actions" +msgstr "" + +#: templates/rest_framework/admin.html:130 +#: templates/rest_framework/base.html:150 +msgid "Filters" +msgstr "การกรองข้อมูล" + +#: templates/rest_framework/base.html:37 +msgid "navbar" +msgstr "" + +#: templates/rest_framework/base.html:75 +msgid "content" +msgstr "" + +#: templates/rest_framework/base.html:78 +msgid "request form" +msgstr "" + +#: templates/rest_framework/base.html:157 +msgid "main content" +msgstr "" + +#: templates/rest_framework/base.html:173 +msgid "request info" +msgstr "" + +#: templates/rest_framework/base.html:177 +msgid "response info" +msgstr "" + +#: templates/rest_framework/horizontal/radio.html:4 +#: templates/rest_framework/inline/radio.html:3 +#: templates/rest_framework/vertical/radio.html:3 +msgid "None" +msgstr "ไม่มี" + +#: templates/rest_framework/horizontal/select_multiple.html:4 +#: templates/rest_framework/inline/select_multiple.html:3 +#: templates/rest_framework/vertical/select_multiple.html:3 +msgid "No items to select." +msgstr "" + +#: validators.py:39 +msgid "This field must be unique." +msgstr "" + +#: validators.py:89 +#, python-brace-format +msgid "The fields {field_names} must make a unique set." +msgstr "" + +#: validators.py:171 +#, python-brace-format +msgid "Surrogate characters are not allowed: U+{code_point:X}." +msgstr "" + +#: validators.py:243 +#, python-brace-format +msgid "This field must be unique for the \"{date_field}\" date." +msgstr "" + +#: validators.py:258 +#, python-brace-format +msgid "This field must be unique for the \"{date_field}\" month." +msgstr "" + +#: validators.py:271 +#, python-brace-format +msgid "This field must be unique for the \"{date_field}\" year." +msgstr "" + +#: versioning.py:40 +msgid "Invalid version in \"Accept\" header." +msgstr "" + +#: versioning.py:71 +msgid "Invalid version in URL path." +msgstr "" + +#: versioning.py:116 +msgid "Invalid version in URL path. Does not match any version namespace." +msgstr "" + +#: versioning.py:148 +msgid "Invalid version in hostname." +msgstr "" + +#: versioning.py:170 +msgid "Invalid version in query parameter." +msgstr "" diff --git a/rest_framework/locale/tr/LC_MESSAGES/django.mo b/rest_framework/locale/tr/LC_MESSAGES/django.mo index fcdff0a983176ba0193a41a95a3141ea69bf66f2..6386aab5236ae56a95525a2b2c525baa555c3963 100644 GIT binary patch delta 2167 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 diff --git a/rest_framework/locale/tr/LC_MESSAGES/django.po b/rest_framework/locale/tr/LC_MESSAGES/django.po index d327ab9e2..106fe7177 100644 --- a/rest_framework/locale/tr/LC_MESSAGES/django.po +++ b/rest_framework/locale/tr/LC_MESSAGES/django.po @@ -8,16 +8,16 @@ # Ertaç Paprat , 2015 # José Luis , 2016 # Mesut Can Gürle , 2015 -# Murat Çorlu , 2015 +# Murat Çorlu , 2015 # Recep KIRMIZI , 2015 # Ülgen Sarıkavak , 2015 msgid "" msgstr "" "Project-Id-Version: Django REST framework\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-07-12 16:13+0100\n" -"PO-Revision-Date: 2017-08-03 14:58+0000\n" -"Last-Translator: Thomas Christie \n" +"POT-Creation-Date: 2020-10-13 21:45+0200\n" +"PO-Revision-Date: 2020-10-13 19:45+0000\n" +"Last-Translator: Xavier Ordoquy \n" "Language-Team: Turkish (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/tr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -25,40 +25,40 @@ msgstr "" "Language: tr\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: authentication.py:73 +#: authentication.py:70 msgid "Invalid basic header. No credentials provided." msgstr "Geçersiz yetkilendirme başlığı. Gerekli uygunluk kriterleri sağlanmamış." -#: authentication.py:76 +#: authentication.py:73 msgid "Invalid basic header. Credentials string should not contain spaces." msgstr "Geçersiz yetkilendirme başlığı. Uygunluk kriterine ait veri boşluk karakteri içermemeli." -#: authentication.py:82 +#: authentication.py:83 msgid "Invalid basic header. Credentials not correctly base64 encoded." msgstr "Geçersiz yetkilendirme başlığı. Uygunluk kriterleri base64 formatına uygun olarak kodlanmamış." -#: authentication.py:99 +#: authentication.py:101 msgid "Invalid username/password." msgstr "Geçersiz kullanıcı adı/parola" -#: authentication.py:102 authentication.py:198 +#: authentication.py:104 authentication.py:206 msgid "User inactive or deleted." msgstr "Kullanıcı aktif değil ya da silinmiş." -#: authentication.py:176 +#: authentication.py:184 msgid "Invalid token header. No credentials provided." msgstr "Geçersiz token başlığı. Kimlik bilgileri eksik." -#: authentication.py:179 +#: authentication.py:187 msgid "Invalid token header. Token string should not contain spaces." msgstr "Geçersiz token başlığı. Token'da boşluk olmamalı." -#: authentication.py:185 +#: authentication.py:193 msgid "" "Invalid token header. Token string should not contain invalid characters." msgstr "Geçersiz token başlığı. Token geçersiz karakter içermemeli." -#: authentication.py:195 +#: authentication.py:203 msgid "Invalid token." msgstr "Geçersiz token." @@ -66,382 +66,515 @@ msgstr "Geçersiz token." msgid "Auth Token" msgstr "Kimlik doğrulama belirteci" -#: authtoken/models.py:15 +#: authtoken/models.py:13 msgid "Key" msgstr "Anahtar" -#: authtoken/models.py:18 +#: authtoken/models.py:16 msgid "User" msgstr "Kullanan" -#: authtoken/models.py:20 +#: authtoken/models.py:18 msgid "Created" msgstr "Oluşturulan" -#: authtoken/models.py:29 +#: authtoken/models.py:27 authtoken/serializers.py:19 msgid "Token" msgstr "İşaret" -#: authtoken/models.py:30 +#: authtoken/models.py:28 msgid "Tokens" msgstr "İşaretler" -#: authtoken/serializers.py:8 +#: authtoken/serializers.py:9 msgid "Username" msgstr "Kullanıcı adı" -#: authtoken/serializers.py:9 +#: authtoken/serializers.py:13 msgid "Password" msgstr "Şifre" -#: authtoken/serializers.py:20 -msgid "User account is disabled." -msgstr "Kullanıcı hesabı devre dışı bırakılmış." - -#: authtoken/serializers.py:23 +#: authtoken/serializers.py:35 msgid "Unable to log in with provided credentials." msgstr "Verilen bilgiler ile giriş sağlanamadı." -#: authtoken/serializers.py:26 +#: authtoken/serializers.py:38 msgid "Must include \"username\" and \"password\"." msgstr "\"Kullanıcı Adı\" ve \"Parola\" eklenmeli." -#: exceptions.py:49 +#: exceptions.py:102 msgid "A server error occurred." msgstr "Sunucu hatası oluştu." -#: exceptions.py:84 +#: exceptions.py:142 +msgid "Invalid input." +msgstr "" + +#: exceptions.py:161 msgid "Malformed request." msgstr "Bozuk istek." -#: exceptions.py:89 +#: exceptions.py:167 msgid "Incorrect authentication credentials." msgstr "Giriş bilgileri hatalı." -#: exceptions.py:94 +#: exceptions.py:173 msgid "Authentication credentials were not provided." msgstr "Giriş bilgileri verilmedi." -#: exceptions.py:99 +#: exceptions.py:179 msgid "You do not have permission to perform this action." msgstr "Bu işlemi yapmak için izniniz bulunmuyor." -#: exceptions.py:104 views.py:81 +#: exceptions.py:185 msgid "Not found." msgstr "Bulunamadı." -#: exceptions.py:109 +#: exceptions.py:191 +#, python-brace-format msgid "Method \"{method}\" not allowed." msgstr "\"{method}\" metoduna izin verilmiyor." -#: exceptions.py:120 +#: exceptions.py:202 msgid "Could not satisfy the request Accept header." msgstr "İsteğe ait Accept başlık bilgisi yanıt verilecek başlık bilgileri arasında değil." -#: exceptions.py:132 +#: exceptions.py:212 +#, python-brace-format msgid "Unsupported media type \"{media_type}\" in request." msgstr "İstekte desteklenmeyen medya tipi: \"{media_type}\"." -#: exceptions.py:145 +#: exceptions.py:223 msgid "Request was throttled." msgstr "Üst üste çok fazla istek yapıldı." -#: fields.py:269 relations.py:206 relations.py:239 validators.py:98 -#: validators.py:181 +#: exceptions.py:224 +#, python-brace-format +msgid "Expected available in {wait} second." +msgstr "" + +#: exceptions.py:225 +#, python-brace-format +msgid "Expected available in {wait} seconds." +msgstr "" + +#: fields.py:316 relations.py:245 relations.py:279 validators.py:90 +#: validators.py:183 msgid "This field is required." msgstr "Bu alan zorunlu." -#: fields.py:270 +#: fields.py:317 msgid "This field may not be null." msgstr "Bu alan boş bırakılmamalı." -#: fields.py:608 fields.py:639 -msgid "\"{input}\" is not a valid boolean." -msgstr "\"{input}\" geçerli bir boolean değil." +#: fields.py:701 +msgid "Must be a valid boolean." +msgstr "" -#: fields.py:674 +#: fields.py:766 +msgid "Not a valid string." +msgstr "" + +#: fields.py:767 msgid "This field may not be blank." msgstr "Bu alan boş bırakılmamalı." -#: fields.py:675 fields.py:1675 +#: fields.py:768 fields.py:1881 +#, python-brace-format msgid "Ensure this field has no more than {max_length} characters." msgstr "Bu alanın {max_length} karakterden fazla karakter barındırmadığından emin olun." -#: fields.py:676 +#: fields.py:769 +#, python-brace-format msgid "Ensure this field has at least {min_length} characters." msgstr "Bu alanın en az {min_length} karakter barındırdığından emin olun." -#: fields.py:713 +#: fields.py:816 msgid "Enter a valid email address." msgstr "Geçerli bir e-posta adresi girin." -#: fields.py:724 +#: fields.py:827 msgid "This value does not match the required pattern." msgstr "Bu değer gereken düzenli ifade deseni ile uyuşmuyor." -#: fields.py:735 +#: fields.py:838 msgid "" "Enter a valid \"slug\" consisting of letters, numbers, underscores or " "hyphens." msgstr "Harf, rakam, altçizgi veya tireden oluşan geçerli bir \"slug\" giriniz." -#: fields.py:747 +#: fields.py:839 +msgid "" +"Enter a valid \"slug\" consisting of Unicode letters, numbers, underscores, " +"or hyphens." +msgstr "" + +#: fields.py:854 msgid "Enter a valid URL." msgstr "Geçerli bir URL girin." -#: fields.py:760 -msgid "\"{value}\" is not a valid UUID." -msgstr "\"{value}\" geçerli bir UUID değil." +#: fields.py:867 +msgid "Must be a valid UUID." +msgstr "" -#: fields.py:796 +#: fields.py:903 msgid "Enter a valid IPv4 or IPv6 address." msgstr "Geçerli bir IPv4 ya da IPv6 adresi girin." -#: fields.py:821 +#: fields.py:931 msgid "A valid integer is required." msgstr "Geçerli bir tam sayı girin." -#: fields.py:822 fields.py:857 fields.py:891 +#: fields.py:932 fields.py:969 fields.py:1005 fields.py:1366 +#, python-brace-format msgid "Ensure this value is less than or equal to {max_value}." msgstr "Değerin {max_value} değerinden küçük ya da eşit olduğundan emin olun." -#: fields.py:823 fields.py:858 fields.py:892 +#: fields.py:933 fields.py:970 fields.py:1006 fields.py:1367 +#, python-brace-format msgid "Ensure this value is greater than or equal to {min_value}." msgstr "Değerin {min_value} değerinden büyük ya da eşit olduğundan emin olun." -#: fields.py:824 fields.py:859 fields.py:896 +#: fields.py:934 fields.py:971 fields.py:1010 msgid "String value too large." msgstr "String değeri çok uzun." -#: fields.py:856 fields.py:890 +#: fields.py:968 fields.py:1004 msgid "A valid number is required." msgstr "Geçerli bir numara gerekiyor." -#: fields.py:893 +#: fields.py:1007 +#, python-brace-format msgid "Ensure that there are no more than {max_digits} digits in total." msgstr "Toplamda {max_digits} haneden fazla hane olmadığından emin olun." -#: fields.py:894 +#: fields.py:1008 +#, python-brace-format msgid "" "Ensure that there are no more than {max_decimal_places} decimal places." msgstr "Ondalık basamak değerinin {max_decimal_places} haneden fazla olmadığından emin olun." -#: fields.py:895 +#: fields.py:1009 +#, python-brace-format msgid "" "Ensure that there are no more than {max_whole_digits} digits before the " "decimal point." msgstr "Ondalık ayracından önce {max_whole_digits} basamaktan fazla olmadığından emin olun." -#: fields.py:1025 +#: fields.py:1148 +#, python-brace-format msgid "Datetime has wrong format. Use one of these formats instead: {format}." msgstr "Datetime alanı yanlış biçimde. {format} biçimlerinden birini kullanın." -#: fields.py:1026 +#: fields.py:1149 msgid "Expected a datetime but got a date." msgstr "Datetime değeri bekleniyor, ama date değeri geldi." -#: fields.py:1103 +#: fields.py:1150 +#, python-brace-format +msgid "Invalid datetime for the timezone \"{timezone}\"." +msgstr "" + +#: fields.py:1151 +msgid "Datetime value out of range." +msgstr "" + +#: fields.py:1236 +#, python-brace-format msgid "Date has wrong format. Use one of these formats instead: {format}." msgstr "Tarih biçimi yanlış. {format} biçimlerinden birini kullanın." -#: fields.py:1104 +#: fields.py:1237 msgid "Expected a date but got a datetime." msgstr "Date tipi beklenmekteydi, fakat datetime tipi geldi." -#: fields.py:1170 +#: fields.py:1303 +#, python-brace-format msgid "Time has wrong format. Use one of these formats instead: {format}." msgstr "Time biçimi yanlış. {format} biçimlerinden birini kullanın." -#: fields.py:1232 +#: fields.py:1365 +#, python-brace-format msgid "Duration has wrong format. Use one of these formats instead: {format}." msgstr "Duration biçimi yanlış. {format} biçimlerinden birini kullanın." -#: fields.py:1251 fields.py:1300 +#: fields.py:1399 fields.py:1456 +#, python-brace-format msgid "\"{input}\" is not a valid choice." msgstr "\"{input}\" geçerli bir seçim değil." -#: fields.py:1254 relations.py:71 relations.py:441 +#: fields.py:1402 +#, python-brace-format msgid "More than {count} items..." msgstr "{count} elemandan daha fazla..." -#: fields.py:1301 fields.py:1448 relations.py:437 serializers.py:524 +#: fields.py:1457 fields.py:1603 relations.py:485 serializers.py:570 +#, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "Elemanların listesi beklenirken \"{input_type}\" alındı." -#: fields.py:1302 +#: fields.py:1458 msgid "This selection may not be empty." msgstr "Bu seçim boş bırakılmamalı." -#: fields.py:1339 +#: fields.py:1495 +#, python-brace-format msgid "\"{input}\" is not a valid path choice." msgstr "\"{input}\" geçerli bir yol seçimi değil." -#: fields.py:1358 +#: fields.py:1514 msgid "No file was submitted." msgstr "Hiçbir dosya verilmedi." -#: fields.py:1359 +#: fields.py:1515 msgid "" "The submitted data was not a file. Check the encoding type on the form." msgstr "Gönderilen veri dosya değil. Formdaki kodlama tipini kontrol edin." -#: fields.py:1360 +#: fields.py:1516 msgid "No filename could be determined." msgstr "Hiçbir dosya adı belirlenemedi." -#: fields.py:1361 +#: fields.py:1517 msgid "The submitted file is empty." msgstr "Gönderilen dosya boş." -#: fields.py:1362 +#: fields.py:1518 +#, python-brace-format msgid "" "Ensure this filename has at most {max_length} characters (it has {length})." msgstr "Bu dosya adının en fazla {max_length} karakter uzunluğunda olduğundan emin olun. (şu anda {length} karakter)." -#: fields.py:1410 +#: fields.py:1566 msgid "" "Upload a valid image. The file you uploaded was either not an image or a " "corrupted image." msgstr "Geçerli bir resim yükleyin. Yüklediğiniz dosya resim değil ya da bozuk." -#: fields.py:1449 relations.py:438 serializers.py:525 +#: fields.py:1604 relations.py:486 serializers.py:571 msgid "This list may not be empty." msgstr "Bu liste boş olmamalı." -#: fields.py:1502 +#: fields.py:1605 +#, python-brace-format +msgid "Ensure this field has at least {min_length} elements." +msgstr "" + +#: fields.py:1606 +#, python-brace-format +msgid "Ensure this field has no more than {max_length} elements." +msgstr "" + +#: fields.py:1682 +#, python-brace-format msgid "Expected a dictionary of items but got type \"{input_type}\"." msgstr "Sözlük tipi bir değişken beklenirken \"{input_type}\" tipi bir değişken alındı." -#: fields.py:1549 +#: fields.py:1683 +msgid "This dictionary may not be empty." +msgstr "" + +#: fields.py:1755 msgid "Value must be valid JSON." msgstr "Değer geçerli bir JSON olmalı." -#: filters.py:36 templates/rest_framework/filters/django_filter.html:5 -msgid "Submit" -msgstr "Gönder" +#: filters.py:49 templates/rest_framework/filters/search.html:2 +msgid "Search" +msgstr "Arama" -#: filters.py:336 +#: filters.py:50 +msgid "A search term." +msgstr "" + +#: filters.py:180 templates/rest_framework/filters/ordering.html:3 +msgid "Ordering" +msgstr "Sıralama" + +#: filters.py:181 +msgid "Which field to use when ordering the results." +msgstr "" + +#: filters.py:287 msgid "ascending" msgstr "" -#: filters.py:337 +#: filters.py:288 msgid "descending" msgstr "" -#: pagination.py:193 +#: pagination.py:174 +msgid "A page number within the paginated result set." +msgstr "" + +#: pagination.py:179 pagination.py:372 pagination.py:590 +msgid "Number of results to return per page." +msgstr "" + +#: pagination.py:189 msgid "Invalid page." msgstr "Geçersiz sayfa." -#: pagination.py:427 +#: pagination.py:374 +msgid "The initial index from which to return the results." +msgstr "" + +#: pagination.py:581 +msgid "The pagination cursor value." +msgstr "" + +#: pagination.py:583 msgid "Invalid cursor" msgstr "Sayfalandırma imleci geçersiz" -#: relations.py:207 +#: relations.py:246 +#, python-brace-format msgid "Invalid pk \"{pk_value}\" - object does not exist." msgstr "Geçersiz pk \"{pk_value}\" - obje bulunamadı." -#: relations.py:208 +#: relations.py:247 +#, python-brace-format msgid "Incorrect type. Expected pk value, received {data_type}." msgstr "Hatalı tip. Pk değeri beklenirken, alınan {data_type}." -#: relations.py:240 +#: relations.py:280 msgid "Invalid hyperlink - No URL match." msgstr "Geçersiz bağlantı - Hiçbir URL eşleşmedi." -#: relations.py:241 +#: relations.py:281 msgid "Invalid hyperlink - Incorrect URL match." msgstr "Geçersiz bağlantı - Yanlış URL eşleşmesi." -#: relations.py:242 +#: relations.py:282 msgid "Invalid hyperlink - Object does not exist." msgstr "Geçersiz bağlantı - Obje bulunamadı." -#: relations.py:243 +#: relations.py:283 +#, python-brace-format msgid "Incorrect type. Expected URL string, received {data_type}." msgstr "Hatalı tip. URL metni bekleniyor, {data_type} alındı." -#: relations.py:401 +#: relations.py:448 +#, python-brace-format msgid "Object with {slug_name}={value} does not exist." msgstr "{slug_name}={value} değerini taşıyan obje bulunamadı." -#: relations.py:402 +#: relations.py:449 msgid "Invalid value." msgstr "Geçersiz değer." -#: serializers.py:326 +#: schemas/utils.py:32 +msgid "unique integer value" +msgstr "" + +#: schemas/utils.py:34 +msgid "UUID string" +msgstr "" + +#: schemas/utils.py:36 +msgid "unique value" +msgstr "" + +#: schemas/utils.py:38 +#, python-brace-format +msgid "A {value_type} identifying this {name}." +msgstr "" + +#: serializers.py:337 +#, python-brace-format msgid "Invalid data. Expected a dictionary, but got {datatype}." msgstr "Geçersiz veri. Sözlük bekleniyordu fakat {datatype} geldi. " #: templates/rest_framework/admin.html:116 -#: templates/rest_framework/base.html:128 +#: templates/rest_framework/base.html:136 +msgid "Extra Actions" +msgstr "" + +#: templates/rest_framework/admin.html:130 +#: templates/rest_framework/base.html:150 msgid "Filters" msgstr "Filtreler" -#: templates/rest_framework/filters/django_filter.html:2 -#: templates/rest_framework/filters/django_filter_crispyforms.html:4 -msgid "Field filters" -msgstr "Alan filtreleri" +#: templates/rest_framework/base.html:37 +msgid "navbar" +msgstr "" -#: templates/rest_framework/filters/ordering.html:3 -msgid "Ordering" -msgstr "Sıralama" +#: templates/rest_framework/base.html:75 +msgid "content" +msgstr "" -#: templates/rest_framework/filters/search.html:2 -msgid "Search" -msgstr "Arama" +#: templates/rest_framework/base.html:78 +msgid "request form" +msgstr "" -#: templates/rest_framework/horizontal/radio.html:2 -#: templates/rest_framework/inline/radio.html:2 -#: templates/rest_framework/vertical/radio.html:2 +#: templates/rest_framework/base.html:157 +msgid "main content" +msgstr "" + +#: templates/rest_framework/base.html:173 +msgid "request info" +msgstr "" + +#: templates/rest_framework/base.html:177 +msgid "response info" +msgstr "" + +#: templates/rest_framework/horizontal/radio.html:4 +#: templates/rest_framework/inline/radio.html:3 +#: templates/rest_framework/vertical/radio.html:3 msgid "None" msgstr "Hiçbiri" -#: templates/rest_framework/horizontal/select_multiple.html:2 -#: templates/rest_framework/inline/select_multiple.html:2 -#: templates/rest_framework/vertical/select_multiple.html:2 +#: templates/rest_framework/horizontal/select_multiple.html:4 +#: templates/rest_framework/inline/select_multiple.html:3 +#: templates/rest_framework/vertical/select_multiple.html:3 msgid "No items to select." msgstr "Seçenek yok." -#: validators.py:43 +#: validators.py:39 msgid "This field must be unique." msgstr "Bu alan eşsiz olmalı." -#: validators.py:97 +#: validators.py:89 +#, python-brace-format msgid "The fields {field_names} must make a unique set." msgstr "{field_names} hep birlikte eşsiz bir küme oluşturmalılar." -#: validators.py:245 +#: validators.py:171 +#, python-brace-format +msgid "Surrogate characters are not allowed: U+{code_point:X}." +msgstr "" + +#: validators.py:243 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" date." msgstr "Bu alan \"{date_field}\" tarihine göre eşsiz olmalı." -#: validators.py:260 +#: validators.py:258 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" month." msgstr "Bu alan \"{date_field}\" ayına göre eşsiz olmalı." -#: validators.py:273 +#: validators.py:271 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" year." msgstr "Bu alan \"{date_field}\" yılına göre eşsiz olmalı." -#: versioning.py:42 +#: versioning.py:40 msgid "Invalid version in \"Accept\" header." msgstr "\"Accept\" başlığındaki sürüm geçersiz." -#: versioning.py:73 +#: versioning.py:71 msgid "Invalid version in URL path." msgstr "URL dizininde geçersiz versiyon." -#: versioning.py:115 +#: versioning.py:116 msgid "Invalid version in URL path. Does not match any version namespace." msgstr "" -#: versioning.py:147 +#: versioning.py:148 msgid "Invalid version in hostname." msgstr "Host adında geçersiz versiyon." -#: versioning.py:169 +#: versioning.py:170 msgid "Invalid version in query parameter." msgstr "Sorgu parametresinde geçersiz versiyon." - -#: views.py:88 -msgid "Permission denied." -msgstr "Erişim engellendi." diff --git a/rest_framework/locale/tr_TR/LC_MESSAGES/django.mo b/rest_framework/locale/tr_TR/LC_MESSAGES/django.mo index 2999352a2ab57f2e586958fad1b49c03fd194728..3751732bed5bf46bde9aeb814b71f2a8e1d419a5 100644 GIT binary patch delta 2430 zcmZwHU2IfE7{>8gmX?BmmM*jfk)gD9i?pGMq`LkTOv0YzeoU)NQ^fmL?Oh)pwa)cduqIJ(szF|=bX-& zd1vO_YWkoter?j|qlU7TxL@Hl=Ag{vhvLsN#$pK;;Tp`tov7yz;WT^)$Ke-PiWhJW z-o-KKA8X7qEXS4Dn>KDfp|Xk#9{#%)>#+r2#E0=Z1~LC0V;Zm-tMEAL{#9IyzVXJ) zLI)?|^QZy7=3f8M^)jlzzc66p#w?nU9$^$U!vWL_-oS-;32QKWqA|;{3Cr*(@@Izm z(R1ISAIINo%uEd6Y}|x&VV=cudE zrSi7h4rHhAuSYM}`%xL#hY#RkRDY+j7{A0R_$$UOl}w(_!D1YZK_u&@7UyCEvW#ZG z>vO0M4x_fo+n9^*VL1+=mh=v4z>Dcz_uEkIU8p_tat`@lK;>O7q}CeM&iAE9+=zN` z2U;9N4d@gq1D7xZr%g@|WF|gD+m98v5!>(u)Wm+meEbD9p}!}Se_hC8I+a*}>_^j# z%0LIc?=j{n)ZWNr>uXJ`Q8Vhs>G%vP)yGf+{?zpfZl?V^vfoS-FI$RRa4o(Wr&34d zCbnTE3#Co=5~}?*DwVV8wHad=!}HjHLGr1N25~ihj~d`~Mx_C+#sb`m^YNhT$Eg0| zH>oV5vYg>-=1(JIF@v}ekE8Bi!6(o+gRJ0wY{VasePrfX))}i&ORygw#FMB2e1+^+ za|=sx6i0*s#Z5UCtz`)H!c(XRuVW$JM!g`HUUY0qkg=Fn)Qks^IhfB-FT93hFoPqb zlutnQGZh)DslgKLz&xG*LsWQ&Ie|K-!>G0Y7S+Lzs0`ddWvGzeGO-Nx!T@R$wxcq) z4Xf|~*5OB}rT7yyF&`UA6DX3r-_%hFU?RrKRAjB7;asVD=NQEPV>Gq9MaGO-jr=q1z<$NJy0 ziW;XWRg^ttXd@9M)R&5~r-^9LTZs;00YQnUQlgqNpmlC1T8NRtSW;(MyI0F%36;&n z3ZjYNkfe_1CTt*7lnIp$gl4Ux<=`uwD%z}bwEq7sOKG&Z7nC|OXj+MC!bhl-6H4FX z#Arfmt#1dP2=fS`!WZ4FCv?QvHf9S^PiTLrtR`xS@p`{fuk})4kC;bOwRGy;YU*U@ z%eRu4;a=1+;xk|#bKBb0>)iShPC~T%FP~v9i3hg1>pT zVo}xnK%zD`*S0$S-JzIW7wd}d>f37_NmPnUlw}*yKYJ~f2@6g%U(Al0c)4YDI-5U+} z{r_#dA^n_ny24Iu_>7(kojVpLLJ_;IkNe*lRWCGY?M delta 2571 zcmZY9e@s@g{aCiPYW|qbKbmVbi#D6K_5PfDTx~tO-}8E&hr@H8 z-zVE{u8m*GO@G6XI*I#rLfnlOCU7>M#2NS_`tdK+|L2Z1W*W}L zakvW0a08a&9?ZmHY&0frPLWwo#U0Nk{%Zy0S8)km#0@xkyfHPn3+wR+uEHx=hb0qI zf46Zp<#%u<-oRYU$xd~!5LLg(HEv7?88!GaR^wUZXKwLOPcw2-BhEp6s0wQ_f{XEe zY{H+h97`wiG2DuJZxxgDdw!4n%rzcrXB4%4#?#1D%te(;umUSlOWZM;^;gf2doO;DDqlryqB}Sr{ZmqF z+lnghMUCK7)O$amg@2+tn4jlvF0&lRP##2eU_U;Lhp-aQ<}v@9$&6B=k*=Zp1-Q<$ z8#U6sUio!=gz|AbmS)Ule30@>908q*6R5Slh+3MzQ8Q3TqtkH#Y6&)?I^G}mG6!%A z6(1oR){JF%OEDj{n>S%I9>vXg1GVXzX+`B%P*eI7wqps?7{%vNr{oV*JB#T>3+_X8 zH2xhK^-$d^0zXz^y=M=q!K1hUZzCJmR6jr`aT(HQ(~7m|px!%zJMj{3$0o~|HXK6s zpBcr4I{z7ksWoXrO=SetkweJFH>a=+FQ7Vh3mdVFm-N9N)O#P`EIf_+z*W>~x`~>4 zi}jF;P~X{xnS9^8NJdls8mfV}kWQO3_z+%3meFMLN4{+=)cw$iIu&iG|KExlc^7JC zj$j6!Ky@gI`tW(wru+p9_`dm_j4ql9?4UZFg3Z{9TAG8X5uQM1-<R9<2?4^rJS#3#bM^L~WXDsQ1c?Q^%$T`5A|Y zI(7gxGefB3bsp1j1ECq=6ua$%o75@IP^s2mNz-^Y>BCAI2}|dudY+FGwCkpgJXaE9 z2rZR5&4F-7)rLx1Yt5pP_Rm&gJF%QlCo2f|`?^Z=2(9Tdg4uLa6VG)-2f>Br9xpI! z^dQYAvfNy1pD4SHX!YuJ!8Ce#3w1GVA?_iRIH{&xFc}lF(++Xmvy)Av+K*PZVdhOfMRsvd{kiTkY*Do0H)z-rpt)Lxt>|l9fUv5pty1tHXr#E>vx7ar&(AgR33-{{#K_?dI z22t!H|^gcJ!PLeW=BJg)!{@fcR)M* z(=#S64F$sPh@y7LjylO_XI%Fsek;mPepb|%HfiMJXPmGVwSz%B=!Ak!d7^4oOXiAm vpM-;UG&wM6Ae5)G92nwMS0@gIfMTIWFJG% diff --git a/rest_framework/locale/tr_TR/LC_MESSAGES/django.po b/rest_framework/locale/tr_TR/LC_MESSAGES/django.po index 94856c70f..b0c96ddd1 100644 --- a/rest_framework/locale/tr_TR/LC_MESSAGES/django.po +++ b/rest_framework/locale/tr_TR/LC_MESSAGES/django.po @@ -3,55 +3,56 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Deniz , 2019 # José Luis , 2015-2016 msgid "" msgstr "" "Project-Id-Version: Django REST framework\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-07-12 16:13+0100\n" -"PO-Revision-Date: 2017-08-03 14:58+0000\n" -"Last-Translator: Thomas Christie \n" +"POT-Creation-Date: 2020-10-13 21:45+0200\n" +"PO-Revision-Date: 2020-10-13 19:45+0000\n" +"Last-Translator: Xavier Ordoquy \n" "Language-Team: Turkish (Turkey) (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/tr_TR/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: tr_TR\n" -"Plural-Forms: nplurals=1; plural=0;\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: authentication.py:73 +#: authentication.py:70 msgid "Invalid basic header. No credentials provided." msgstr "Geçersiz yetkilendirme başlığı. Gerekli uygunluk kriterleri sağlanmamış." -#: authentication.py:76 +#: authentication.py:73 msgid "Invalid basic header. Credentials string should not contain spaces." msgstr "Geçersiz yetkilendirme başlığı. Uygunluk kriterine ait veri boşluk karakteri içermemeli." -#: authentication.py:82 +#: authentication.py:83 msgid "Invalid basic header. Credentials not correctly base64 encoded." msgstr "Geçersiz yetkilendirme başlığı. Uygunluk kriterleri base64 formatına uygun olarak kodlanmamış." -#: authentication.py:99 +#: authentication.py:101 msgid "Invalid username/password." msgstr "Geçersiz kullanıcı adı / şifre." -#: authentication.py:102 authentication.py:198 +#: authentication.py:104 authentication.py:206 msgid "User inactive or deleted." msgstr "Kullanıcı aktif değil ya da silinmiş" -#: authentication.py:176 +#: authentication.py:184 msgid "Invalid token header. No credentials provided." msgstr "Geçersiz token başlığı. Kimlik bilgileri eksik." -#: authentication.py:179 +#: authentication.py:187 msgid "Invalid token header. Token string should not contain spaces." msgstr "Geçersiz token başlığı. Token'da boşluk olmamalı." -#: authentication.py:185 +#: authentication.py:193 msgid "" "Invalid token header. Token string should not contain invalid characters." msgstr "Geçersiz token başlığı. Token geçersiz karakter içermemeli." -#: authentication.py:195 +#: authentication.py:203 msgid "Invalid token." msgstr "Geçersiz simge." @@ -59,382 +60,515 @@ msgstr "Geçersiz simge." msgid "Auth Token" msgstr "Kimlik doğrulama belirteci" -#: authtoken/models.py:15 +#: authtoken/models.py:13 msgid "Key" msgstr "Anahtar" -#: authtoken/models.py:18 +#: authtoken/models.py:16 msgid "User" msgstr "Kullanan" -#: authtoken/models.py:20 +#: authtoken/models.py:18 msgid "Created" msgstr "Oluşturulan" -#: authtoken/models.py:29 +#: authtoken/models.py:27 authtoken/serializers.py:19 msgid "Token" msgstr "İşaret" -#: authtoken/models.py:30 +#: authtoken/models.py:28 msgid "Tokens" msgstr "İşaretler" -#: authtoken/serializers.py:8 +#: authtoken/serializers.py:9 msgid "Username" msgstr "Kullanıcı adı" -#: authtoken/serializers.py:9 +#: authtoken/serializers.py:13 msgid "Password" msgstr "Şifre" -#: authtoken/serializers.py:20 -msgid "User account is disabled." -msgstr "Kullanıcı hesabı devre dışı bırakılmış." - -#: authtoken/serializers.py:23 +#: authtoken/serializers.py:35 msgid "Unable to log in with provided credentials." msgstr "Verilen bilgiler ile giriş sağlanamadı." -#: authtoken/serializers.py:26 +#: authtoken/serializers.py:38 msgid "Must include \"username\" and \"password\"." msgstr "\"Kullanıcı Adı\" ve \"Parola\" eklenmeli." -#: exceptions.py:49 +#: exceptions.py:102 msgid "A server error occurred." msgstr "Sunucu hatası oluştu." -#: exceptions.py:84 +#: exceptions.py:142 +msgid "Invalid input." +msgstr "" + +#: exceptions.py:161 msgid "Malformed request." msgstr "Bozuk istek." -#: exceptions.py:89 +#: exceptions.py:167 msgid "Incorrect authentication credentials." msgstr "Giriş bilgileri hatalı." -#: exceptions.py:94 +#: exceptions.py:173 msgid "Authentication credentials were not provided." msgstr "Giriş bilgileri verilmedi." -#: exceptions.py:99 +#: exceptions.py:179 msgid "You do not have permission to perform this action." msgstr "Bu işlemi yapmak için izniniz bulunmuyor." -#: exceptions.py:104 views.py:81 +#: exceptions.py:185 msgid "Not found." msgstr "Bulunamadı." -#: exceptions.py:109 +#: exceptions.py:191 +#, python-brace-format msgid "Method \"{method}\" not allowed." msgstr "\"{method}\" metoduna izin verilmiyor." -#: exceptions.py:120 +#: exceptions.py:202 msgid "Could not satisfy the request Accept header." msgstr "İsteğe ait Accept başlık bilgisi yanıt verilecek başlık bilgileri arasında değil." -#: exceptions.py:132 +#: exceptions.py:212 +#, python-brace-format msgid "Unsupported media type \"{media_type}\" in request." msgstr "İstekte desteklenmeyen medya tipi: \"{media_type}\"." -#: exceptions.py:145 +#: exceptions.py:223 msgid "Request was throttled." msgstr "Üst üste çok fazla istek yapıldı." -#: fields.py:269 relations.py:206 relations.py:239 validators.py:98 -#: validators.py:181 +#: exceptions.py:224 +#, python-brace-format +msgid "Expected available in {wait} second." +msgstr "" + +#: exceptions.py:225 +#, python-brace-format +msgid "Expected available in {wait} seconds." +msgstr "" + +#: fields.py:316 relations.py:245 relations.py:279 validators.py:90 +#: validators.py:183 msgid "This field is required." msgstr "Bu alan zorunlu." -#: fields.py:270 +#: fields.py:317 msgid "This field may not be null." msgstr "Bu alan boş bırakılmamalı." -#: fields.py:608 fields.py:639 -msgid "\"{input}\" is not a valid boolean." -msgstr "\"{input}\" geçerli bir boolean değil." +#: fields.py:701 +msgid "Must be a valid boolean." +msgstr "" -#: fields.py:674 +#: fields.py:766 +msgid "Not a valid string." +msgstr "" + +#: fields.py:767 msgid "This field may not be blank." msgstr "Bu alan boş bırakılmamalı." -#: fields.py:675 fields.py:1675 +#: fields.py:768 fields.py:1881 +#, python-brace-format msgid "Ensure this field has no more than {max_length} characters." msgstr "Bu alanın {max_length} karakterden fazla karakter barındırmadığından emin olun." -#: fields.py:676 +#: fields.py:769 +#, python-brace-format msgid "Ensure this field has at least {min_length} characters." msgstr "Bu alanın en az {min_length} karakter barındırdığından emin olun." -#: fields.py:713 +#: fields.py:816 msgid "Enter a valid email address." msgstr "Geçerli bir e-posta adresi girin." -#: fields.py:724 +#: fields.py:827 msgid "This value does not match the required pattern." msgstr "Bu değer gereken düzenli ifade deseni ile uyuşmuyor." -#: fields.py:735 +#: fields.py:838 msgid "" "Enter a valid \"slug\" consisting of letters, numbers, underscores or " "hyphens." msgstr "Harf, rakam, altçizgi veya tireden oluşan geçerli bir \"slug\" giriniz." -#: fields.py:747 +#: fields.py:839 +msgid "" +"Enter a valid \"slug\" consisting of Unicode letters, numbers, underscores, " +"or hyphens." +msgstr "" + +#: fields.py:854 msgid "Enter a valid URL." msgstr "Geçerli bir URL girin." -#: fields.py:760 -msgid "\"{value}\" is not a valid UUID." -msgstr "\"{value}\" geçerli bir UUID değil." +#: fields.py:867 +msgid "Must be a valid UUID." +msgstr "" -#: fields.py:796 +#: fields.py:903 msgid "Enter a valid IPv4 or IPv6 address." msgstr "Geçerli bir IPv4 ya da IPv6 adresi girin." -#: fields.py:821 +#: fields.py:931 msgid "A valid integer is required." msgstr "Geçerli bir tam sayı girin." -#: fields.py:822 fields.py:857 fields.py:891 +#: fields.py:932 fields.py:969 fields.py:1005 fields.py:1366 +#, python-brace-format msgid "Ensure this value is less than or equal to {max_value}." msgstr "Değerin {max_value} değerinden küçük ya da eşit olduğundan emin olun." -#: fields.py:823 fields.py:858 fields.py:892 +#: fields.py:933 fields.py:970 fields.py:1006 fields.py:1367 +#, python-brace-format msgid "Ensure this value is greater than or equal to {min_value}." msgstr "Değerin {min_value} değerinden büyük ya da eşit olduğundan emin olun." -#: fields.py:824 fields.py:859 fields.py:896 +#: fields.py:934 fields.py:971 fields.py:1010 msgid "String value too large." msgstr "String değeri çok uzun." -#: fields.py:856 fields.py:890 +#: fields.py:968 fields.py:1004 msgid "A valid number is required." msgstr "Geçerli bir numara gerekiyor." -#: fields.py:893 +#: fields.py:1007 +#, python-brace-format msgid "Ensure that there are no more than {max_digits} digits in total." msgstr "Toplamda {max_digits} haneden fazla hane olmadığından emin olun." -#: fields.py:894 +#: fields.py:1008 +#, python-brace-format msgid "" "Ensure that there are no more than {max_decimal_places} decimal places." msgstr "Ondalık basamak değerinin {max_decimal_places} haneden fazla olmadığından emin olun." -#: fields.py:895 +#: fields.py:1009 +#, python-brace-format msgid "" "Ensure that there are no more than {max_whole_digits} digits before the " "decimal point." msgstr "Ondalık ayracından önce {max_whole_digits} basamaktan fazla olmadığından emin olun." -#: fields.py:1025 +#: fields.py:1148 +#, python-brace-format msgid "Datetime has wrong format. Use one of these formats instead: {format}." msgstr "Datetime alanı yanlış biçimde. {format} biçimlerinden birini kullanın." -#: fields.py:1026 +#: fields.py:1149 msgid "Expected a datetime but got a date." msgstr "Datetime değeri bekleniyor, ama date değeri geldi." -#: fields.py:1103 +#: fields.py:1150 +#, python-brace-format +msgid "Invalid datetime for the timezone \"{timezone}\"." +msgstr "" + +#: fields.py:1151 +msgid "Datetime value out of range." +msgstr "" + +#: fields.py:1236 +#, python-brace-format msgid "Date has wrong format. Use one of these formats instead: {format}." msgstr "Tarih biçimi yanlış. {format} biçimlerinden birini kullanın." -#: fields.py:1104 +#: fields.py:1237 msgid "Expected a date but got a datetime." msgstr "Date tipi beklenmekteydi, fakat datetime tipi geldi." -#: fields.py:1170 +#: fields.py:1303 +#, python-brace-format msgid "Time has wrong format. Use one of these formats instead: {format}." msgstr "Time biçimi yanlış. {format} biçimlerinden birini kullanın." -#: fields.py:1232 +#: fields.py:1365 +#, python-brace-format msgid "Duration has wrong format. Use one of these formats instead: {format}." msgstr "Duration biçimi yanlış. {format} biçimlerinden birini kullanın." -#: fields.py:1251 fields.py:1300 +#: fields.py:1399 fields.py:1456 +#, python-brace-format msgid "\"{input}\" is not a valid choice." msgstr "\"{input}\" geçerli bir seçim değil." -#: fields.py:1254 relations.py:71 relations.py:441 +#: fields.py:1402 +#, python-brace-format msgid "More than {count} items..." msgstr "{count} elemandan daha fazla..." -#: fields.py:1301 fields.py:1448 relations.py:437 serializers.py:524 +#: fields.py:1457 fields.py:1603 relations.py:485 serializers.py:570 +#, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "Elemanların listesi beklenirken \"{input_type}\" alındı." -#: fields.py:1302 +#: fields.py:1458 msgid "This selection may not be empty." msgstr "Bu seçim boş bırakılmamalı." -#: fields.py:1339 +#: fields.py:1495 +#, python-brace-format msgid "\"{input}\" is not a valid path choice." msgstr "\"{input}\" geçerli bir yol seçimi değil." -#: fields.py:1358 +#: fields.py:1514 msgid "No file was submitted." msgstr "Hiçbir dosya verilmedi." -#: fields.py:1359 +#: fields.py:1515 msgid "" "The submitted data was not a file. Check the encoding type on the form." msgstr "Gönderilen veri dosya değil. Formdaki kodlama tipini kontrol edin." -#: fields.py:1360 +#: fields.py:1516 msgid "No filename could be determined." msgstr "Hiçbir dosya adı belirlenemedi." -#: fields.py:1361 +#: fields.py:1517 msgid "The submitted file is empty." msgstr "Gönderilen dosya boş." -#: fields.py:1362 +#: fields.py:1518 +#, python-brace-format msgid "" "Ensure this filename has at most {max_length} characters (it has {length})." msgstr "Bu dosya adının en fazla {max_length} karakter uzunluğunda olduğundan emin olun. (şu anda {length} karakter)." -#: fields.py:1410 +#: fields.py:1566 msgid "" "Upload a valid image. The file you uploaded was either not an image or a " "corrupted image." msgstr "Geçerli bir resim yükleyin. Yüklediğiniz dosya resim değil ya da bozuk." -#: fields.py:1449 relations.py:438 serializers.py:525 +#: fields.py:1604 relations.py:486 serializers.py:571 msgid "This list may not be empty." msgstr "Bu liste boş olmamalı." -#: fields.py:1502 +#: fields.py:1605 +#, python-brace-format +msgid "Ensure this field has at least {min_length} elements." +msgstr "" + +#: fields.py:1606 +#, python-brace-format +msgid "Ensure this field has no more than {max_length} elements." +msgstr "" + +#: fields.py:1682 +#, python-brace-format msgid "Expected a dictionary of items but got type \"{input_type}\"." msgstr "Sözlük tipi bir değişken beklenirken \"{input_type}\" tipi bir değişken alındı." -#: fields.py:1549 +#: fields.py:1683 +msgid "This dictionary may not be empty." +msgstr "" + +#: fields.py:1755 msgid "Value must be valid JSON." msgstr "Değer geçerli bir JSON olmalı." -#: filters.py:36 templates/rest_framework/filters/django_filter.html:5 -msgid "Submit" -msgstr "Gönder" +#: filters.py:49 templates/rest_framework/filters/search.html:2 +msgid "Search" +msgstr "Arama" -#: filters.py:336 +#: filters.py:50 +msgid "A search term." +msgstr "" + +#: filters.py:180 templates/rest_framework/filters/ordering.html:3 +msgid "Ordering" +msgstr "Sıralama" + +#: filters.py:181 +msgid "Which field to use when ordering the results." +msgstr "" + +#: filters.py:287 msgid "ascending" -msgstr "" +msgstr "artan" -#: filters.py:337 +#: filters.py:288 msgid "descending" +msgstr "azalan" + +#: pagination.py:174 +msgid "A page number within the paginated result set." msgstr "" -#: pagination.py:193 +#: pagination.py:179 pagination.py:372 pagination.py:590 +msgid "Number of results to return per page." +msgstr "" + +#: pagination.py:189 msgid "Invalid page." msgstr "Geçersiz sayfa." -#: pagination.py:427 +#: pagination.py:374 +msgid "The initial index from which to return the results." +msgstr "" + +#: pagination.py:581 +msgid "The pagination cursor value." +msgstr "" + +#: pagination.py:583 msgid "Invalid cursor" msgstr "Geçersiz imleç." -#: relations.py:207 +#: relations.py:246 +#, python-brace-format msgid "Invalid pk \"{pk_value}\" - object does not exist." msgstr "Geçersiz pk \"{pk_value}\" - obje bulunamadı." -#: relations.py:208 +#: relations.py:247 +#, python-brace-format msgid "Incorrect type. Expected pk value, received {data_type}." msgstr "Hatalı tip. Pk değeri beklenirken, alınan {data_type}." -#: relations.py:240 +#: relations.py:280 msgid "Invalid hyperlink - No URL match." msgstr "Geçersiz hyper link - URL maçı yok." -#: relations.py:241 +#: relations.py:281 msgid "Invalid hyperlink - Incorrect URL match." msgstr "Geçersiz hyper link - Yanlış URL maçı." -#: relations.py:242 +#: relations.py:282 msgid "Invalid hyperlink - Object does not exist." msgstr "Geçersiz hyper link - Nesne yok.." -#: relations.py:243 +#: relations.py:283 +#, python-brace-format msgid "Incorrect type. Expected URL string, received {data_type}." msgstr "Hatalı tip. URL metni bekleniyor, {data_type} alındı." -#: relations.py:401 +#: relations.py:448 +#, python-brace-format msgid "Object with {slug_name}={value} does not exist." msgstr "{slug_name}={value} değerini taşıyan obje bulunamadı." -#: relations.py:402 +#: relations.py:449 msgid "Invalid value." msgstr "Geçersiz değer." -#: serializers.py:326 +#: schemas/utils.py:32 +msgid "unique integer value" +msgstr "" + +#: schemas/utils.py:34 +msgid "UUID string" +msgstr "" + +#: schemas/utils.py:36 +msgid "unique value" +msgstr "" + +#: schemas/utils.py:38 +#, python-brace-format +msgid "A {value_type} identifying this {name}." +msgstr "" + +#: serializers.py:337 +#, python-brace-format msgid "Invalid data. Expected a dictionary, but got {datatype}." msgstr "Geçersiz veri. Bir sözlük bekleniyor, ama var {datatype}." #: templates/rest_framework/admin.html:116 -#: templates/rest_framework/base.html:128 +#: templates/rest_framework/base.html:136 +msgid "Extra Actions" +msgstr "" + +#: templates/rest_framework/admin.html:130 +#: templates/rest_framework/base.html:150 msgid "Filters" msgstr "Filtreler" -#: templates/rest_framework/filters/django_filter.html:2 -#: templates/rest_framework/filters/django_filter_crispyforms.html:4 -msgid "Field filters" -msgstr "Alan filtreleri" +#: templates/rest_framework/base.html:37 +msgid "navbar" +msgstr "" -#: templates/rest_framework/filters/ordering.html:3 -msgid "Ordering" -msgstr "Sıralama" +#: templates/rest_framework/base.html:75 +msgid "content" +msgstr "" -#: templates/rest_framework/filters/search.html:2 -msgid "Search" -msgstr "Arama" +#: templates/rest_framework/base.html:78 +msgid "request form" +msgstr "" -#: templates/rest_framework/horizontal/radio.html:2 -#: templates/rest_framework/inline/radio.html:2 -#: templates/rest_framework/vertical/radio.html:2 +#: templates/rest_framework/base.html:157 +msgid "main content" +msgstr "" + +#: templates/rest_framework/base.html:173 +msgid "request info" +msgstr "" + +#: templates/rest_framework/base.html:177 +msgid "response info" +msgstr "" + +#: templates/rest_framework/horizontal/radio.html:4 +#: templates/rest_framework/inline/radio.html:3 +#: templates/rest_framework/vertical/radio.html:3 msgid "None" msgstr "Hiç kimse" -#: templates/rest_framework/horizontal/select_multiple.html:2 -#: templates/rest_framework/inline/select_multiple.html:2 -#: templates/rest_framework/vertical/select_multiple.html:2 +#: templates/rest_framework/horizontal/select_multiple.html:4 +#: templates/rest_framework/inline/select_multiple.html:3 +#: templates/rest_framework/vertical/select_multiple.html:3 msgid "No items to select." msgstr "Seçenek yok." -#: validators.py:43 +#: validators.py:39 msgid "This field must be unique." msgstr "Bu alan benzersiz olmalıdır." -#: validators.py:97 +#: validators.py:89 +#, python-brace-format msgid "The fields {field_names} must make a unique set." msgstr "{field_names} alanları benzersiz bir set yapmak gerekir." -#: validators.py:245 +#: validators.py:171 +#, python-brace-format +msgid "Surrogate characters are not allowed: U+{code_point:X}." +msgstr "" + +#: validators.py:243 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" date." msgstr "Bu alan \"{date_field}\" tarihine göre eşsiz olmalı." -#: validators.py:260 +#: validators.py:258 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" month." msgstr "Bu alan \"{date_field}\" ayına göre eşsiz olmalı." -#: validators.py:273 +#: validators.py:271 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" year." msgstr "Bu alan \"{date_field}\" yılına göre eşsiz olmalı." -#: versioning.py:42 +#: versioning.py:40 msgid "Invalid version in \"Accept\" header." msgstr "\"Kabul et\" başlığında geçersiz sürümü." -#: versioning.py:73 +#: versioning.py:71 msgid "Invalid version in URL path." -msgstr "URL yolu geçersiz sürümü." +msgstr "URL yolunda geçersiz sürüm." -#: versioning.py:115 +#: versioning.py:116 msgid "Invalid version in URL path. Does not match any version namespace." -msgstr "" +msgstr "URL yolunda geçersiz sürüm. Sürüm adlarında eşleşen bulunamadı." -#: versioning.py:147 +#: versioning.py:148 msgid "Invalid version in hostname." msgstr "Hostname geçersiz sürümü." -#: versioning.py:169 +#: versioning.py:170 msgid "Invalid version in query parameter." msgstr "Sorgu parametresi geçersiz sürümü." - -#: views.py:88 -msgid "Permission denied." -msgstr "İzin reddedildi." diff --git a/rest_framework/locale/uk/LC_MESSAGES/django.mo b/rest_framework/locale/uk/LC_MESSAGES/django.mo index 9772bedc56fe9bc27e1165f523ee45b920246a8b..18c3242bbed7b0a0ad675349c155e3939d2d3c1d 100644 GIT binary patch delta 2803 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, 2016 +# Denis Podlesniy , 2016 # Illarion , 2016 -# Kirill Tarasenko, 2016 +# Kirill Tarasenko, 2016,2018 # Victor Mireyev , 2017 msgid "" msgstr "" "Project-Id-Version: Django REST framework\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-07-12 16:13+0100\n" -"PO-Revision-Date: 2017-08-03 14:58+0000\n" -"Last-Translator: Victor Mireyev \n" +"POT-Creation-Date: 2020-10-13 21:45+0200\n" +"PO-Revision-Date: 2020-10-13 19:45+0000\n" +"Last-Translator: Xavier Ordoquy \n" "Language-Team: Ukrainian (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/uk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: uk\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);\n" -#: authentication.py:73 +#: authentication.py:70 msgid "Invalid basic header. No credentials provided." msgstr "Недійсний основний заголовок. Облікові дані відсутні." -#: authentication.py:76 +#: authentication.py:73 msgid "Invalid basic header. Credentials string should not contain spaces." -msgstr "Недійсний основний заголовок. Облікові дані мають бути без пробілів." +msgstr "Недійсний основний заголовок. Строка з обліковими даними має бути без пробілів." -#: authentication.py:82 +#: authentication.py:83 msgid "Invalid basic header. Credentials not correctly base64 encoded." -msgstr "Недійсний основний заголовок. Облікові дані невірно закодовані у Base64." +msgstr "Недійсний основний заголовок. Облікові дані невірно закодовані у base64." -#: authentication.py:99 +#: authentication.py:101 msgid "Invalid username/password." msgstr "Недійсне iм'я користувача/пароль." -#: authentication.py:102 authentication.py:198 +#: authentication.py:104 authentication.py:206 msgid "User inactive or deleted." msgstr "Користувач неактивний або видалений." -#: authentication.py:176 +#: authentication.py:184 msgid "Invalid token header. No credentials provided." -msgstr "Недійсний заголовок токена. Облікові дані відсутні." +msgstr "Недійсний токен. Облікові дані відсутні." -#: authentication.py:179 +#: authentication.py:187 msgid "Invalid token header. Token string should not contain spaces." -msgstr "Недійсний заголовок токена. Значення токена не повинне містити пробіли." +msgstr "Недійсний токен. Значення токена не повинне містити пробіли." -#: authentication.py:185 +#: authentication.py:193 msgid "" "Invalid token header. Token string should not contain invalid characters." -msgstr "Недійсний заголовок токена. Значення токена не повинне містити некоректні символи." +msgstr "Недійсний токен. Значення токена не повинне містити некоректні символи." -#: authentication.py:195 +#: authentication.py:203 msgid "Invalid token." msgstr "Недійсний токен." @@ -62,382 +62,515 @@ msgstr "Недійсний токен." msgid "Auth Token" msgstr "Авторизаційний токен" -#: authtoken/models.py:15 +#: authtoken/models.py:13 msgid "Key" msgstr "Ключ" -#: authtoken/models.py:18 +#: authtoken/models.py:16 msgid "User" msgstr "Користувач" -#: authtoken/models.py:20 +#: authtoken/models.py:18 msgid "Created" msgstr "Створено" -#: authtoken/models.py:29 +#: authtoken/models.py:27 authtoken/serializers.py:19 msgid "Token" msgstr "Токен" -#: authtoken/models.py:30 +#: authtoken/models.py:28 msgid "Tokens" msgstr "Токени" -#: authtoken/serializers.py:8 +#: authtoken/serializers.py:9 msgid "Username" msgstr "Ім'я користувача" -#: authtoken/serializers.py:9 +#: authtoken/serializers.py:13 msgid "Password" msgstr "Пароль" -#: authtoken/serializers.py:20 -msgid "User account is disabled." -msgstr "Обліковий запис деактивований." - -#: authtoken/serializers.py:23 +#: authtoken/serializers.py:35 msgid "Unable to log in with provided credentials." msgstr "Неможливо зайти з введеними даними." -#: authtoken/serializers.py:26 +#: authtoken/serializers.py:38 msgid "Must include \"username\" and \"password\"." msgstr "Має включати iм'я користувача та пароль" -#: exceptions.py:49 +#: exceptions.py:102 msgid "A server error occurred." msgstr "Помилка сервера." -#: exceptions.py:84 +#: exceptions.py:142 +msgid "Invalid input." +msgstr "" + +#: exceptions.py:161 msgid "Malformed request." msgstr "Некоректний запит." -#: exceptions.py:89 +#: exceptions.py:167 msgid "Incorrect authentication credentials." msgstr "Некоректні реквізити перевірки достовірності." -#: exceptions.py:94 +#: exceptions.py:173 msgid "Authentication credentials were not provided." msgstr "Реквізити перевірки достовірності не надані." -#: exceptions.py:99 +#: exceptions.py:179 msgid "You do not have permission to perform this action." msgstr "У вас нема дозволу робити цю дію." -#: exceptions.py:104 views.py:81 +#: exceptions.py:185 msgid "Not found." msgstr "Не знайдено." -#: exceptions.py:109 +#: exceptions.py:191 +#, python-brace-format msgid "Method \"{method}\" not allowed." msgstr "Метод \"{method}\" не дозволений." -#: exceptions.py:120 +#: exceptions.py:202 msgid "Could not satisfy the request Accept header." -msgstr "Неможливо виконати запит прийняття заголовку." +msgstr "Неможливо виконати запит заголовку Accept." -#: exceptions.py:132 +#: exceptions.py:212 +#, python-brace-format msgid "Unsupported media type \"{media_type}\" in request." msgstr "Непідтримуваний тип даних \"{media_type}\" в запиті." -#: exceptions.py:145 +#: exceptions.py:223 msgid "Request was throttled." msgstr "Запит було проігноровано." -#: fields.py:269 relations.py:206 relations.py:239 validators.py:98 -#: validators.py:181 +#: exceptions.py:224 +#, python-brace-format +msgid "Expected available in {wait} second." +msgstr "" + +#: exceptions.py:225 +#, python-brace-format +msgid "Expected available in {wait} seconds." +msgstr "" + +#: fields.py:316 relations.py:245 relations.py:279 validators.py:90 +#: validators.py:183 msgid "This field is required." msgstr "Це поле обов'язкове." -#: fields.py:270 +#: fields.py:317 msgid "This field may not be null." msgstr "Це поле не може бути null." -#: fields.py:608 fields.py:639 -msgid "\"{input}\" is not a valid boolean." -msgstr "\"{input}\" не є коректним бульовим значенням." +#: fields.py:701 +msgid "Must be a valid boolean." +msgstr "" -#: fields.py:674 +#: fields.py:766 +msgid "Not a valid string." +msgstr "" + +#: fields.py:767 msgid "This field may not be blank." msgstr "Це поле не може бути порожнім." -#: fields.py:675 fields.py:1675 +#: fields.py:768 fields.py:1881 +#, python-brace-format msgid "Ensure this field has no more than {max_length} characters." msgstr "Переконайтесь, що кількість символів в цьому полі не перевищує {max_length}." -#: fields.py:676 +#: fields.py:769 +#, python-brace-format msgid "Ensure this field has at least {min_length} characters." msgstr "Переконайтесь, що в цьому полі мінімум {min_length} символів." -#: fields.py:713 +#: fields.py:816 msgid "Enter a valid email address." msgstr "Введіть коректну адресу електронної пошти." -#: fields.py:724 +#: fields.py:827 msgid "This value does not match the required pattern." msgstr "Значення не відповідає необхідному патерну." -#: fields.py:735 +#: fields.py:838 msgid "" "Enter a valid \"slug\" consisting of letters, numbers, underscores or " "hyphens." msgstr "Введіть коректний \"slug\", що складається із букв, цифр, нижніх підкреслень або дефісів. " -#: fields.py:747 +#: fields.py:839 +msgid "" +"Enter a valid \"slug\" consisting of Unicode letters, numbers, underscores, " +"or hyphens." +msgstr "" + +#: fields.py:854 msgid "Enter a valid URL." msgstr "Введіть коректний URL." -#: fields.py:760 -msgid "\"{value}\" is not a valid UUID." -msgstr "\"{value}\" не є коректним UUID." +#: fields.py:867 +msgid "Must be a valid UUID." +msgstr "" -#: fields.py:796 +#: fields.py:903 msgid "Enter a valid IPv4 or IPv6 address." -msgstr "Введіть дійсну IPv4 або IPv6 адресу." +msgstr "Введіть коректну IPv4 або IPv6 адресу." -#: fields.py:821 +#: fields.py:931 msgid "A valid integer is required." msgstr "Необхідне цілочисельне значення." -#: fields.py:822 fields.py:857 fields.py:891 +#: fields.py:932 fields.py:969 fields.py:1005 fields.py:1366 +#, python-brace-format msgid "Ensure this value is less than or equal to {max_value}." msgstr "Переконайтесь, що значення менше або дорівнює {max_value}." -#: fields.py:823 fields.py:858 fields.py:892 +#: fields.py:933 fields.py:970 fields.py:1006 fields.py:1367 +#, python-brace-format msgid "Ensure this value is greater than or equal to {min_value}." msgstr "Переконайтесь, що значення більше або дорівнює {min_value}." -#: fields.py:824 fields.py:859 fields.py:896 +#: fields.py:934 fields.py:971 fields.py:1010 msgid "String value too large." msgstr "Строкове значення занадто велике." -#: fields.py:856 fields.py:890 +#: fields.py:968 fields.py:1004 msgid "A valid number is required." msgstr "Необхідне чисельне значення." -#: fields.py:893 +#: fields.py:1007 +#, python-brace-format msgid "Ensure that there are no more than {max_digits} digits in total." msgstr "Переконайтесь, що в числі не більше {max_digits} знаків." -#: fields.py:894 +#: fields.py:1008 +#, python-brace-format msgid "" "Ensure that there are no more than {max_decimal_places} decimal places." msgstr "Переконайтесь, що в числі не більше {max_decimal_places} знаків у дробовій частині." -#: fields.py:895 +#: fields.py:1009 +#, python-brace-format msgid "" "Ensure that there are no more than {max_whole_digits} digits before the " "decimal point." msgstr "Переконайтесь, що в числі не більше {max_whole_digits} знаків у цілій частині." -#: fields.py:1025 +#: fields.py:1148 +#, python-brace-format msgid "Datetime has wrong format. Use one of these formats instead: {format}." msgstr "Невірний формат дата з часом. Використайте один з цих форматів: {format}." -#: fields.py:1026 +#: fields.py:1149 msgid "Expected a datetime but got a date." msgstr "Очікувалась дата з часом, але було отримано дату." -#: fields.py:1103 +#: fields.py:1150 +#, python-brace-format +msgid "Invalid datetime for the timezone \"{timezone}\"." +msgstr "" + +#: fields.py:1151 +msgid "Datetime value out of range." +msgstr "" + +#: fields.py:1236 +#, python-brace-format msgid "Date has wrong format. Use one of these formats instead: {format}." msgstr "Невірний формат дати. Використайте один з цих форматів: {format}." -#: fields.py:1104 +#: fields.py:1237 msgid "Expected a date but got a datetime." msgstr "Очікувалась дата, але було отримано дату з часом." -#: fields.py:1170 +#: fields.py:1303 +#, python-brace-format msgid "Time has wrong format. Use one of these formats instead: {format}." msgstr "Неправильний формат часу. Використайте один з цих форматів: {format}." -#: fields.py:1232 +#: fields.py:1365 +#, python-brace-format msgid "Duration has wrong format. Use one of these formats instead: {format}." msgstr "Невірний формат тривалості. Використайте один з цих форматів: {format}." -#: fields.py:1251 fields.py:1300 +#: fields.py:1399 fields.py:1456 +#, python-brace-format msgid "\"{input}\" is not a valid choice." msgstr "\"{input}\" не є коректним вибором." -#: fields.py:1254 relations.py:71 relations.py:441 +#: fields.py:1402 +#, python-brace-format msgid "More than {count} items..." msgstr "Елементів більше, ніж {count}..." -#: fields.py:1301 fields.py:1448 relations.py:437 serializers.py:524 +#: fields.py:1457 fields.py:1603 relations.py:485 serializers.py:570 +#, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "Очікувався список елементів, але було отримано \"{input_type}\"." -#: fields.py:1302 +#: fields.py:1458 msgid "This selection may not be empty." msgstr "Вибір не може бути порожнім." -#: fields.py:1339 +#: fields.py:1495 +#, python-brace-format msgid "\"{input}\" is not a valid path choice." msgstr "\"{input}\" вибраний шлях не є коректним." -#: fields.py:1358 +#: fields.py:1514 msgid "No file was submitted." msgstr "Файл не було відправленно." -#: fields.py:1359 +#: fields.py:1515 msgid "" "The submitted data was not a file. Check the encoding type on the form." msgstr "Відправленні дані не є файл. Перевірте тип кодування у формі." -#: fields.py:1360 +#: fields.py:1516 msgid "No filename could be determined." msgstr "Неможливо визначити ім'я файлу." -#: fields.py:1361 +#: fields.py:1517 msgid "The submitted file is empty." msgstr "Відправленний файл порожній." -#: fields.py:1362 +#: fields.py:1518 +#, python-brace-format msgid "" "Ensure this filename has at most {max_length} characters (it has {length})." msgstr "Переконайтесь, що ім'я файлу становить менше {max_length} символів (зараз {length})." -#: fields.py:1410 +#: fields.py:1566 msgid "" "Upload a valid image. The file you uploaded was either not an image or a " "corrupted image." msgstr "Завантажте коректне зображення. Завантажений файл або не є зображенням, або пошкоджений." -#: fields.py:1449 relations.py:438 serializers.py:525 +#: fields.py:1604 relations.py:486 serializers.py:571 msgid "This list may not be empty." msgstr "Цей список не може бути порожнім." -#: fields.py:1502 +#: fields.py:1605 +#, python-brace-format +msgid "Ensure this field has at least {min_length} elements." +msgstr "" + +#: fields.py:1606 +#, python-brace-format +msgid "Ensure this field has no more than {max_length} elements." +msgstr "" + +#: fields.py:1682 +#, python-brace-format msgid "Expected a dictionary of items but got type \"{input_type}\"." msgstr "Очікувався словник зі елементами, але було отримано \"{input_type}\"." -#: fields.py:1549 +#: fields.py:1683 +msgid "This dictionary may not be empty." +msgstr "" + +#: fields.py:1755 msgid "Value must be valid JSON." msgstr "Значення повинно бути коректним JSON." -#: filters.py:36 templates/rest_framework/filters/django_filter.html:5 -msgid "Submit" -msgstr "Відправити" +#: filters.py:49 templates/rest_framework/filters/search.html:2 +msgid "Search" +msgstr "Пошук" -#: filters.py:336 +#: filters.py:50 +msgid "A search term." +msgstr "" + +#: filters.py:180 templates/rest_framework/filters/ordering.html:3 +msgid "Ordering" +msgstr "Впорядкування" + +#: filters.py:181 +msgid "Which field to use when ordering the results." +msgstr "" + +#: filters.py:287 msgid "ascending" -msgstr "в порядку зростання" +msgstr "у порядку зростання" -#: filters.py:337 +#: filters.py:288 msgid "descending" msgstr "у порядку зменшення" -#: pagination.py:193 +#: pagination.py:174 +msgid "A page number within the paginated result set." +msgstr "" + +#: pagination.py:179 pagination.py:372 pagination.py:590 +msgid "Number of results to return per page." +msgstr "" + +#: pagination.py:189 msgid "Invalid page." msgstr "Недійсна сторінка." -#: pagination.py:427 +#: pagination.py:374 +msgid "The initial index from which to return the results." +msgstr "" + +#: pagination.py:581 +msgid "The pagination cursor value." +msgstr "" + +#: pagination.py:583 msgid "Invalid cursor" msgstr "Недійсний курсор." -#: relations.py:207 +#: relations.py:246 +#, python-brace-format msgid "Invalid pk \"{pk_value}\" - object does not exist." msgstr "Недопустимий первинний ключ \"{pk_value}\" - об'єкт не існує." -#: relations.py:208 +#: relations.py:247 +#, python-brace-format msgid "Incorrect type. Expected pk value, received {data_type}." msgstr "Некоректний тип. Очікувалось значення первинного ключа, отримано {data_type}." -#: relations.py:240 +#: relations.py:280 msgid "Invalid hyperlink - No URL match." msgstr "Недійсне посилання - немає збігу за URL." -#: relations.py:241 +#: relations.py:281 msgid "Invalid hyperlink - Incorrect URL match." msgstr "Недійсне посилання - некоректний збіг за URL." -#: relations.py:242 +#: relations.py:282 msgid "Invalid hyperlink - Object does not exist." msgstr "Недійсне посилання - об'єкт не існує." -#: relations.py:243 +#: relations.py:283 +#, python-brace-format msgid "Incorrect type. Expected URL string, received {data_type}." msgstr "Некоректний тип. Очікувався URL, отримано {data_type}." -#: relations.py:401 +#: relations.py:448 +#, python-brace-format msgid "Object with {slug_name}={value} does not exist." msgstr "Об'єкт із {slug_name}={value} не існує." -#: relations.py:402 +#: relations.py:449 msgid "Invalid value." msgstr "Недійсне значення." -#: serializers.py:326 +#: schemas/utils.py:32 +msgid "unique integer value" +msgstr "" + +#: schemas/utils.py:34 +msgid "UUID string" +msgstr "" + +#: schemas/utils.py:36 +msgid "unique value" +msgstr "" + +#: schemas/utils.py:38 +#, python-brace-format +msgid "A {value_type} identifying this {name}." +msgstr "" + +#: serializers.py:337 +#, python-brace-format msgid "Invalid data. Expected a dictionary, but got {datatype}." msgstr "Недопустимі дані. Очікувався словник, але було отримано {datatype}." #: templates/rest_framework/admin.html:116 -#: templates/rest_framework/base.html:128 +#: templates/rest_framework/base.html:136 +msgid "Extra Actions" +msgstr "" + +#: templates/rest_framework/admin.html:130 +#: templates/rest_framework/base.html:150 msgid "Filters" msgstr "Фільтри" -#: templates/rest_framework/filters/django_filter.html:2 -#: templates/rest_framework/filters/django_filter_crispyforms.html:4 -msgid "Field filters" -msgstr "Фільтри поля" +#: templates/rest_framework/base.html:37 +msgid "navbar" +msgstr "" -#: templates/rest_framework/filters/ordering.html:3 -msgid "Ordering" -msgstr "Впорядкування" +#: templates/rest_framework/base.html:75 +msgid "content" +msgstr "" -#: templates/rest_framework/filters/search.html:2 -msgid "Search" -msgstr "Пошук" +#: templates/rest_framework/base.html:78 +msgid "request form" +msgstr "" -#: templates/rest_framework/horizontal/radio.html:2 -#: templates/rest_framework/inline/radio.html:2 -#: templates/rest_framework/vertical/radio.html:2 +#: templates/rest_framework/base.html:157 +msgid "main content" +msgstr "" + +#: templates/rest_framework/base.html:173 +msgid "request info" +msgstr "" + +#: templates/rest_framework/base.html:177 +msgid "response info" +msgstr "" + +#: templates/rest_framework/horizontal/radio.html:4 +#: templates/rest_framework/inline/radio.html:3 +#: templates/rest_framework/vertical/radio.html:3 msgid "None" msgstr "Нічого" -#: templates/rest_framework/horizontal/select_multiple.html:2 -#: templates/rest_framework/inline/select_multiple.html:2 -#: templates/rest_framework/vertical/select_multiple.html:2 +#: templates/rest_framework/horizontal/select_multiple.html:4 +#: templates/rest_framework/inline/select_multiple.html:3 +#: templates/rest_framework/vertical/select_multiple.html:3 msgid "No items to select." msgstr "Немає елементів для вибору." -#: validators.py:43 +#: validators.py:39 msgid "This field must be unique." msgstr "Це поле повинне бути унікальним." -#: validators.py:97 +#: validators.py:89 +#, python-brace-format msgid "The fields {field_names} must make a unique set." msgstr "Поля {field_names} повинні створювати унікальний масив значень." -#: validators.py:245 +#: validators.py:171 +#, python-brace-format +msgid "Surrogate characters are not allowed: U+{code_point:X}." +msgstr "" + +#: validators.py:243 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" date." msgstr "Це поле повинне бути унікальним для дати \"{date_field}\"." -#: validators.py:260 +#: validators.py:258 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" month." msgstr "Це поле повинне бути унікальним для місяця \"{date_field}\"." -#: validators.py:273 +#: validators.py:271 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" year." msgstr "Це поле повинне бути унікальним для року \"{date_field}\"." -#: versioning.py:42 +#: versioning.py:40 msgid "Invalid version in \"Accept\" header." msgstr "Недопустима версія в загаловку \"Accept\"." -#: versioning.py:73 +#: versioning.py:71 msgid "Invalid version in URL path." msgstr "Недопустима версія в шляху URL." -#: versioning.py:115 +#: versioning.py:116 msgid "Invalid version in URL path. Does not match any version namespace." -msgstr "" +msgstr "Недопустима версія в шляху URL. Не співпадає з будь-яким простором версій." -#: versioning.py:147 +#: versioning.py:148 msgid "Invalid version in hostname." msgstr "Недопустима версія в імені хоста." -#: versioning.py:169 +#: versioning.py:170 msgid "Invalid version in query parameter." msgstr "Недопустима версія в параметрі запиту." - -#: views.py:88 -msgid "Permission denied." -msgstr "Доступ заборонено." diff --git a/rest_framework/locale/vi/LC_MESSAGES/django.mo b/rest_framework/locale/vi/LC_MESSAGES/django.mo index c76cfe595858a600a265c1bad77f18fb670ba781..6809b650c1d85cfa5ec65341ba957cd98eaa09da 100644 GIT binary patch literal 2179 zcmZvcO>Epm6vqcB6qfG-2R`)_4p6oBCIP9{mLO=8qR=J{&9;IAhgo}KPh-y*d%T;d zs#MfNg(^OB;804XMiqymR%rnVkv$;fs28MOxuLojgpjy$-~j*e?zTx(YiEC+ulN4% zy&3<$ZOfMo&ogK*psk_3h!)+0KRh?VtzZf61^)!?x}Enj_8d3~-Us^NOJE4T0-gq+ z0$0EqSbz_LH~Rbyd;tBMptbi0_&m4;#&&=NZUGO1&w}rPcK>|8Z@^LXKLgJ}(=VX) z^WpuBwZIUxc7E;i9}qwGGMtWq+rddN0ImOPpw)W=d>Fh1J_7#T@Ba(#M1L!iVfi|^ z8|2_);8)<=;3d%7`3u|y{s$facR@U4vTbOPT0K^e^|k(a2py!NiXB_4x;))qVD;GN zNi^%z`WZYn_9xIDMYDN&91W5g+m{M%gwMwDPa)5!lWG;voK9nITso2o(h6;kOeoOl zO=KihW(4;ebi6lm!etZ6h?F?Bc_e)jF_#f>-%mxBxolGPhVx9MipQd!@GR@-)OXnd zvB;)`3AIl{$K&ed#1JWMh)0p`2rQY(GXs}il>35)1~!I>E9@Cq8gkjRCTT>Rk*hq9 zm_?TzQM?ri>n_p(6jDc;kdjolr7wK)QsE0_B#)2+?n_NL9q=PB6?|iclOY<%RbOK`MQ!9a%@jT8p|w`T3H3?*;=4b2*x_l%4IXDK87?n zlfH9Qq;_e8#*c9oXgWMG+oZV^E>Va1+F_CC)HqXFAbn?V9%N2aH>fsq$T=+9((ZKZ zA!*R)@aV8Jg5PU+Z48g@7{*gO$TQcprcY4n*^M+S3_fxM!nwYbX;TY$~m!MH`V=0zk`EioZI@H zk-LxAQN+qay)En8Yg3a`6L&H(;ttpLX`EXH?TZP5Gh)HilZZ>ThrE!dnJ{BVn){vI zch*@gb0T#nl&5{1rUvb9Npm}r2DN2vCdyMDIr~wMtU)TNy4l#s9_qc04ezP3wJ(Z` zWXjcL&8CCm!Xjl{(%MqlJ)=VMF|Goa#*3eDALFun){v?0rV7jM3dT0B#OAyjI)wv( zGi<_g_2>21a~cCzlD?&CFGqxB_mlor#p}g{qOyD1WwQ`sif#m2;q|N6A=vuuUh?SH$*%`@`PRwvSX}&2Nxps+ZanLF^_!$; z7pHV@xw?YWo+C<+63ktcJcyPu;tWp@b` zV>HfDzpPmH!VSx9W=;)CG*~>4)Sp|Q?RMEchcfg6GWfQvE#bWMN`cSXhLmjT4itLD zcdDw|vZ)-ORl&|d6)S5{eufrMKz!zGy*DPBy(5d|DzG!ux=V>76k*dT?0u+E&t)|b ov9>fQdR23L0?O{kHX54_o0MxFg%aluQi}^not=TwDtRvZAC2wn00000 delta 140 zcmZn`yvl5GPl#nI0}wC*u?!Ha05LNV>i{tbSOD>Cprj>`2C0F8$p@IjTn){14a{{7 zjT8(`tqe`H4S;~lC$YFhH>4;ruQ(^MB)`Z?AtWO|H?dg3Iio1ExFj=G!KNfX*8zx= Lp#qzuS(q3B`#l}{ diff --git a/rest_framework/locale/vi/LC_MESSAGES/django.po b/rest_framework/locale/vi/LC_MESSAGES/django.po index ea43efb95..8054fb880 100644 --- a/rest_framework/locale/vi/LC_MESSAGES/django.po +++ b/rest_framework/locale/vi/LC_MESSAGES/django.po @@ -3,13 +3,15 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Nguyen Tuan Anh , 2019 +# Xavier Ordoquy , 2020 msgid "" msgstr "" "Project-Id-Version: Django REST framework\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-07-12 16:13+0100\n" -"PO-Revision-Date: 2016-07-12 15:14+0000\n" -"Last-Translator: Thomas Christie \n" +"POT-Creation-Date: 2020-10-13 21:45+0200\n" +"PO-Revision-Date: 2020-10-13 20:02+0000\n" +"Last-Translator: Xavier Ordoquy \n" "Language-Team: Vietnamese (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/vi/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,40 +19,40 @@ msgstr "" "Language: vi\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: authentication.py:73 +#: authentication.py:70 msgid "Invalid basic header. No credentials provided." msgstr "" -#: authentication.py:76 +#: authentication.py:73 msgid "Invalid basic header. Credentials string should not contain spaces." msgstr "" -#: authentication.py:82 +#: authentication.py:83 msgid "Invalid basic header. Credentials not correctly base64 encoded." msgstr "" -#: authentication.py:99 +#: authentication.py:101 msgid "Invalid username/password." -msgstr "" +msgstr "Sai tên đăng nhập hoặc mật khẩu." -#: authentication.py:102 authentication.py:198 +#: authentication.py:104 authentication.py:206 msgid "User inactive or deleted." -msgstr "" +msgstr "Người dùng không còn hoạt động, hoặc đã bị xoá." -#: authentication.py:176 +#: authentication.py:184 msgid "Invalid token header. No credentials provided." msgstr "" -#: authentication.py:179 +#: authentication.py:187 msgid "Invalid token header. Token string should not contain spaces." msgstr "" -#: authentication.py:185 +#: authentication.py:193 msgid "" "Invalid token header. Token string should not contain invalid characters." msgstr "" -#: authentication.py:195 +#: authentication.py:203 msgid "Invalid token." msgstr "" @@ -58,382 +60,515 @@ msgstr "" msgid "Auth Token" msgstr "" -#: authtoken/models.py:15 +#: authtoken/models.py:13 msgid "Key" -msgstr "" +msgstr "Khoá" + +#: authtoken/models.py:16 +msgid "User" +msgstr "Người dùng" #: authtoken/models.py:18 -msgid "User" -msgstr "" - -#: authtoken/models.py:20 msgid "Created" -msgstr "" +msgstr "Đã tạo" -#: authtoken/models.py:29 +#: authtoken/models.py:27 authtoken/serializers.py:19 msgid "Token" msgstr "" -#: authtoken/models.py:30 +#: authtoken/models.py:28 msgid "Tokens" msgstr "" -#: authtoken/serializers.py:8 -msgid "Username" -msgstr "" - #: authtoken/serializers.py:9 +msgid "Username" +msgstr "Tên người dùng" + +#: authtoken/serializers.py:13 msgid "Password" -msgstr "" +msgstr "Mật khẩu" -#: authtoken/serializers.py:20 -msgid "User account is disabled." -msgstr "" - -#: authtoken/serializers.py:23 +#: authtoken/serializers.py:35 msgid "Unable to log in with provided credentials." -msgstr "" +msgstr "Không thể đăng nhập với thông tin đã nhập." -#: authtoken/serializers.py:26 +#: authtoken/serializers.py:38 msgid "Must include \"username\" and \"password\"." -msgstr "" +msgstr "Bắt buộc phải có “tên người dùng” và “mật khẩu”." -#: exceptions.py:49 +#: exceptions.py:102 msgid "A server error occurred." msgstr "" -#: exceptions.py:84 +#: exceptions.py:142 +msgid "Invalid input." +msgstr "" + +#: exceptions.py:161 msgid "Malformed request." msgstr "" -#: exceptions.py:89 +#: exceptions.py:167 msgid "Incorrect authentication credentials." msgstr "" -#: exceptions.py:94 +#: exceptions.py:173 msgid "Authentication credentials were not provided." msgstr "" -#: exceptions.py:99 +#: exceptions.py:179 msgid "You do not have permission to perform this action." -msgstr "" +msgstr "Bạn không được cấp quyền để thực hiện hành động này." -#: exceptions.py:104 views.py:81 +#: exceptions.py:185 msgid "Not found." -msgstr "" +msgstr "Không tìm thấy." -#: exceptions.py:109 +#: exceptions.py:191 +#, python-brace-format msgid "Method \"{method}\" not allowed." -msgstr "" +msgstr "Phương thức “{method}” không được chấp nhận." -#: exceptions.py:120 +#: exceptions.py:202 msgid "Could not satisfy the request Accept header." msgstr "" -#: exceptions.py:132 +#: exceptions.py:212 +#, python-brace-format msgid "Unsupported media type \"{media_type}\" in request." msgstr "" -#: exceptions.py:145 +#: exceptions.py:223 msgid "Request was throttled." msgstr "" -#: fields.py:269 relations.py:206 relations.py:239 validators.py:98 -#: validators.py:181 +#: exceptions.py:224 +#, python-brace-format +msgid "Expected available in {wait} second." +msgstr "" + +#: exceptions.py:225 +#, python-brace-format +msgid "Expected available in {wait} seconds." +msgstr "" + +#: fields.py:316 relations.py:245 relations.py:279 validators.py:90 +#: validators.py:183 msgid "This field is required." msgstr "" -#: fields.py:270 +#: fields.py:317 msgid "This field may not be null." msgstr "" -#: fields.py:608 fields.py:639 -msgid "\"{input}\" is not a valid boolean." +#: fields.py:701 +msgid "Must be a valid boolean." msgstr "" -#: fields.py:674 +#: fields.py:766 +msgid "Not a valid string." +msgstr "" + +#: fields.py:767 msgid "This field may not be blank." -msgstr "" +msgstr "Trường này không được bỏ trống." -#: fields.py:675 fields.py:1675 +#: fields.py:768 fields.py:1881 +#, python-brace-format msgid "Ensure this field has no more than {max_length} characters." msgstr "" -#: fields.py:676 +#: fields.py:769 +#, python-brace-format msgid "Ensure this field has at least {min_length} characters." msgstr "" -#: fields.py:713 +#: fields.py:816 msgid "Enter a valid email address." -msgstr "" +msgstr "Nhập một địa chỉ email hợp lệ." -#: fields.py:724 +#: fields.py:827 msgid "This value does not match the required pattern." msgstr "" -#: fields.py:735 +#: fields.py:838 msgid "" "Enter a valid \"slug\" consisting of letters, numbers, underscores or " "hyphens." msgstr "" -#: fields.py:747 +#: fields.py:839 +msgid "" +"Enter a valid \"slug\" consisting of Unicode letters, numbers, underscores, " +"or hyphens." +msgstr "" + +#: fields.py:854 msgid "Enter a valid URL." msgstr "" -#: fields.py:760 -msgid "\"{value}\" is not a valid UUID." +#: fields.py:867 +msgid "Must be a valid UUID." msgstr "" -#: fields.py:796 +#: fields.py:903 msgid "Enter a valid IPv4 or IPv6 address." msgstr "" -#: fields.py:821 +#: fields.py:931 msgid "A valid integer is required." msgstr "" -#: fields.py:822 fields.py:857 fields.py:891 +#: fields.py:932 fields.py:969 fields.py:1005 fields.py:1366 +#, python-brace-format msgid "Ensure this value is less than or equal to {max_value}." msgstr "" -#: fields.py:823 fields.py:858 fields.py:892 +#: fields.py:933 fields.py:970 fields.py:1006 fields.py:1367 +#, python-brace-format msgid "Ensure this value is greater than or equal to {min_value}." msgstr "" -#: fields.py:824 fields.py:859 fields.py:896 +#: fields.py:934 fields.py:971 fields.py:1010 msgid "String value too large." msgstr "" -#: fields.py:856 fields.py:890 +#: fields.py:968 fields.py:1004 msgid "A valid number is required." msgstr "" -#: fields.py:893 +#: fields.py:1007 +#, python-brace-format msgid "Ensure that there are no more than {max_digits} digits in total." msgstr "" -#: fields.py:894 +#: fields.py:1008 +#, python-brace-format msgid "" "Ensure that there are no more than {max_decimal_places} decimal places." msgstr "" -#: fields.py:895 +#: fields.py:1009 +#, python-brace-format msgid "" "Ensure that there are no more than {max_whole_digits} digits before the " "decimal point." msgstr "" -#: fields.py:1025 +#: fields.py:1148 +#, python-brace-format msgid "Datetime has wrong format. Use one of these formats instead: {format}." msgstr "" -#: fields.py:1026 +#: fields.py:1149 msgid "Expected a datetime but got a date." msgstr "" -#: fields.py:1103 -msgid "Date has wrong format. Use one of these formats instead: {format}." +#: fields.py:1150 +#, python-brace-format +msgid "Invalid datetime for the timezone \"{timezone}\"." msgstr "" -#: fields.py:1104 +#: fields.py:1151 +msgid "Datetime value out of range." +msgstr "" + +#: fields.py:1236 +#, python-brace-format +msgid "Date has wrong format. Use one of these formats instead: {format}." +msgstr "Ngày sai định dạng. Dùng một trong những định dạng sau để thay thế: {format}." + +#: fields.py:1237 msgid "Expected a date but got a datetime." msgstr "" -#: fields.py:1170 +#: fields.py:1303 +#, python-brace-format msgid "Time has wrong format. Use one of these formats instead: {format}." msgstr "" -#: fields.py:1232 +#: fields.py:1365 +#, python-brace-format msgid "Duration has wrong format. Use one of these formats instead: {format}." msgstr "" -#: fields.py:1251 fields.py:1300 +#: fields.py:1399 fields.py:1456 +#, python-brace-format msgid "\"{input}\" is not a valid choice." msgstr "" -#: fields.py:1254 relations.py:71 relations.py:441 +#: fields.py:1402 +#, python-brace-format msgid "More than {count} items..." msgstr "" -#: fields.py:1301 fields.py:1448 relations.py:437 serializers.py:524 +#: fields.py:1457 fields.py:1603 relations.py:485 serializers.py:570 +#, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "" -#: fields.py:1302 +#: fields.py:1458 msgid "This selection may not be empty." msgstr "" -#: fields.py:1339 +#: fields.py:1495 +#, python-brace-format msgid "\"{input}\" is not a valid path choice." msgstr "" -#: fields.py:1358 +#: fields.py:1514 msgid "No file was submitted." msgstr "" -#: fields.py:1359 +#: fields.py:1515 msgid "" "The submitted data was not a file. Check the encoding type on the form." msgstr "" -#: fields.py:1360 +#: fields.py:1516 msgid "No filename could be determined." msgstr "" -#: fields.py:1361 +#: fields.py:1517 msgid "The submitted file is empty." msgstr "" -#: fields.py:1362 +#: fields.py:1518 +#, python-brace-format msgid "" "Ensure this filename has at most {max_length} characters (it has {length})." msgstr "" -#: fields.py:1410 +#: fields.py:1566 msgid "" "Upload a valid image. The file you uploaded was either not an image or a " "corrupted image." msgstr "" -#: fields.py:1449 relations.py:438 serializers.py:525 +#: fields.py:1604 relations.py:486 serializers.py:571 msgid "This list may not be empty." +msgstr " Danh sách này không thể để trống." + +#: fields.py:1605 +#, python-brace-format +msgid "Ensure this field has at least {min_length} elements." msgstr "" -#: fields.py:1502 +#: fields.py:1606 +#, python-brace-format +msgid "Ensure this field has no more than {max_length} elements." +msgstr "" + +#: fields.py:1682 +#, python-brace-format msgid "Expected a dictionary of items but got type \"{input_type}\"." msgstr "" -#: fields.py:1549 +#: fields.py:1683 +msgid "This dictionary may not be empty." +msgstr "" + +#: fields.py:1755 msgid "Value must be valid JSON." +msgstr "Giá trị bắt buộc phải là định dạng JSON." + +#: filters.py:49 templates/rest_framework/filters/search.html:2 +msgid "Search" +msgstr "Tìm kiếm" + +#: filters.py:50 +msgid "A search term." msgstr "" -#: filters.py:36 templates/rest_framework/filters/django_filter.html:5 -msgid "Submit" +#: filters.py:180 templates/rest_framework/filters/ordering.html:3 +msgid "Ordering" +msgstr "Sắp xếp" + +#: filters.py:181 +msgid "Which field to use when ordering the results." msgstr "" -#: filters.py:336 +#: filters.py:287 msgid "ascending" msgstr "" -#: filters.py:337 +#: filters.py:288 msgid "descending" msgstr "" -#: pagination.py:193 +#: pagination.py:174 +msgid "A page number within the paginated result set." +msgstr "" + +#: pagination.py:179 pagination.py:372 pagination.py:590 +msgid "Number of results to return per page." +msgstr "" + +#: pagination.py:189 msgid "Invalid page." msgstr "" -#: pagination.py:427 +#: pagination.py:374 +msgid "The initial index from which to return the results." +msgstr "" + +#: pagination.py:581 +msgid "The pagination cursor value." +msgstr "" + +#: pagination.py:583 msgid "Invalid cursor" msgstr "" -#: relations.py:207 +#: relations.py:246 +#, python-brace-format msgid "Invalid pk \"{pk_value}\" - object does not exist." msgstr "" -#: relations.py:208 +#: relations.py:247 +#, python-brace-format msgid "Incorrect type. Expected pk value, received {data_type}." msgstr "" -#: relations.py:240 +#: relations.py:280 msgid "Invalid hyperlink - No URL match." msgstr "" -#: relations.py:241 +#: relations.py:281 msgid "Invalid hyperlink - Incorrect URL match." msgstr "" -#: relations.py:242 +#: relations.py:282 msgid "Invalid hyperlink - Object does not exist." msgstr "" -#: relations.py:243 +#: relations.py:283 +#, python-brace-format msgid "Incorrect type. Expected URL string, received {data_type}." msgstr "" -#: relations.py:401 +#: relations.py:448 +#, python-brace-format msgid "Object with {slug_name}={value} does not exist." msgstr "" -#: relations.py:402 +#: relations.py:449 msgid "Invalid value." msgstr "" -#: serializers.py:326 +#: schemas/utils.py:32 +msgid "unique integer value" +msgstr "" + +#: schemas/utils.py:34 +msgid "UUID string" +msgstr "" + +#: schemas/utils.py:36 +msgid "unique value" +msgstr "" + +#: schemas/utils.py:38 +#, python-brace-format +msgid "A {value_type} identifying this {name}." +msgstr "" + +#: serializers.py:337 +#, python-brace-format msgid "Invalid data. Expected a dictionary, but got {datatype}." msgstr "" #: templates/rest_framework/admin.html:116 -#: templates/rest_framework/base.html:128 +#: templates/rest_framework/base.html:136 +msgid "Extra Actions" +msgstr "" + +#: templates/rest_framework/admin.html:130 +#: templates/rest_framework/base.html:150 msgid "Filters" msgstr "" -#: templates/rest_framework/filters/django_filter.html:2 -#: templates/rest_framework/filters/django_filter_crispyforms.html:4 -msgid "Field filters" +#: templates/rest_framework/base.html:37 +msgid "navbar" msgstr "" -#: templates/rest_framework/filters/ordering.html:3 -msgid "Ordering" +#: templates/rest_framework/base.html:75 +msgid "content" msgstr "" -#: templates/rest_framework/filters/search.html:2 -msgid "Search" +#: templates/rest_framework/base.html:78 +msgid "request form" msgstr "" -#: templates/rest_framework/horizontal/radio.html:2 -#: templates/rest_framework/inline/radio.html:2 -#: templates/rest_framework/vertical/radio.html:2 +#: templates/rest_framework/base.html:157 +msgid "main content" +msgstr "" + +#: templates/rest_framework/base.html:173 +msgid "request info" +msgstr "" + +#: templates/rest_framework/base.html:177 +msgid "response info" +msgstr "" + +#: templates/rest_framework/horizontal/radio.html:4 +#: templates/rest_framework/inline/radio.html:3 +#: templates/rest_framework/vertical/radio.html:3 msgid "None" msgstr "" -#: templates/rest_framework/horizontal/select_multiple.html:2 -#: templates/rest_framework/inline/select_multiple.html:2 -#: templates/rest_framework/vertical/select_multiple.html:2 +#: templates/rest_framework/horizontal/select_multiple.html:4 +#: templates/rest_framework/inline/select_multiple.html:3 +#: templates/rest_framework/vertical/select_multiple.html:3 msgid "No items to select." -msgstr "" +msgstr "Không có gì để chọn." -#: validators.py:43 +#: validators.py:39 msgid "This field must be unique." msgstr "" -#: validators.py:97 +#: validators.py:89 +#, python-brace-format msgid "The fields {field_names} must make a unique set." msgstr "" -#: validators.py:245 +#: validators.py:171 +#, python-brace-format +msgid "Surrogate characters are not allowed: U+{code_point:X}." +msgstr "" + +#: validators.py:243 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" date." msgstr "" -#: validators.py:260 +#: validators.py:258 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" month." msgstr "" -#: validators.py:273 +#: validators.py:271 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" year." msgstr "" -#: versioning.py:42 +#: versioning.py:40 msgid "Invalid version in \"Accept\" header." msgstr "" -#: versioning.py:73 +#: versioning.py:71 msgid "Invalid version in URL path." msgstr "" -#: versioning.py:115 +#: versioning.py:116 msgid "Invalid version in URL path. Does not match any version namespace." msgstr "" -#: versioning.py:147 +#: versioning.py:148 msgid "Invalid version in hostname." msgstr "" -#: versioning.py:169 +#: versioning.py:170 msgid "Invalid version in query parameter." msgstr "" - -#: views.py:88 -msgid "Permission denied." -msgstr "" diff --git a/rest_framework/locale/zh_CN/LC_MESSAGES/django.mo b/rest_framework/locale/zh_CN/LC_MESSAGES/django.mo index f30b04ea1247a5137aa9f627878327df308812bf..3bd1fd3efa65ee170719887e0f0eff038e4accb8 100644 GIT binary patch delta 2239 zcmYk-drXye9LMo5!9hf_@F0c=9*hKnLkIC7Hx(~fM=(%9rHgQu%|TA$5>dI%W~J3; zYo6)c%s(>by77k{TT9nk$?T8T`or1GTsP-GZO&?~*__q;^E^LV-|>B3zu$A7%kTQ| zN#~gjiSOrR95SMhT%b%hdqHM$Aj-4MLRf+K;Cj3ZpF~~%3KrrC%*M|#j9+0D-ozPL zKGSS9MsOXD_$KT$h5I>?#@#I#!!7tKF2kR&2@7VKwP80l;+v@7FJn9A<(S=#ah!uM zp&EF^o&V7JE$VrI=fJCEg< zbB9?8M)6+Uiaf&hVgz5uYWxgiyx)GMupArj^dC5m^QrH5_2a0XokaEM0%|CKclBtl z|NACP=lmFI1fIoWJb-%M`&fowU_M^QM2JErR|l~SGq4F6b!)-H!B( z%VYxQ;d>atv#2Tk1J&SW9dI| z+o%z^hyg5|>o=qXE2)=b4R&Dx=|z0izm{| z22fLw%hK1JMo|sxLk;mBS3ioZEBnZupTfn|ub`fr&C6C`9XQ~hH;(4Hs8gLC6TnjGp zM=p$o+W*_V0^0?3!(r3|-a);164m0`fP+2-`p^_@dh; zvYTXfZ95qwwEz{`SuJFa-p|7H<_o-O&~{X43Z|o;g1&s~$c65t_OsT*!>+E~p&g{q zj$&tfq3_Fd=pWA-lHF{qTkk{WeVZwJ5#Y#I_`m3+w9?gX!`0-B^3$^C{{@9S+!g=; delta 2556 zcmZYAe@vBC9LMnkmy0O)3l*;#`h=obAfoakP*5O+1Vs^lkfj&6;$4?}n-|JW^OC=Y zGn)%3buhJ>>mSRB`75hsn`TgF!J&vT#ZkIwks*ExrC&-0w~ zJZIo0!|)!K8xt{)s4S%;o6$0i%kT;=#`t7o)?x(~;&Cj&A87NAyKin>q>7U2mj z!ymB%J)@18gBy`9a}YJ|IA-BZ)J_iJGdOh&*Wvo6n#x>Uhnk=ZtMMW(!nm=q3CnOY z?G;Yjk6Oug)XI91Ej5>&_K@@cNi5$*|02{*Ea5|`TZ0iz7^X4{-^Mh&fEM1sarhf1 zU_1@7VuoQZrXt6{lshg*hMF~~d0J7&XctbzeNMX%wcroOk$>g-HXT|)`uNzuVpMxI z>M(_{01u*ae9dV;K`kI}LTp?OTC}&KZtwuwJA!W7L#P{y=kA`x;c4uD9+iALHef4i zrC;GByzcl5YNbz{wu|M=qn(bNUsH$LnMOPjXN(VL({?k7Qk09zdA-x#g<9DA5h}{X z7f#1d$iX##IQ@w%ZzkH|j2ibYmf&s2v21Gt?OId{ zA|E)FTi8g4J3aQCZbm)Vhft^XH0Izpj*n4~>kRIG1-^nDY;y&5qu-*wcMGfVF)9^h z(_&A{ZshwBbDc^){}^e-R$hS`SciISx*e~g9>XYVhmx6n0eY|)YjF{F;Yz%Yq}!xr z#CA9v^}Xe&)U3Dr$^ULD<#e2~J9x9<4B9Rdr^hA>b*i&bH&BLT$N13RLS%Q%S;y~C z;~%06|3qE*FVqdEFu4xl63O*V6%}pWO4OEbat3TitsvsGdvHGOUVI+EM~zS8u4Jxb z6>=Pm7qzoH9nYc8#zWNjDIBZ_X)z0^Xa)7ioF;^&cmxyirsEydDZYn=n8HhA4OXJY z9Yalg64`xo8Fd!!qUMb{jv%iZpPNPgRVkn&4%ZRNC9ea+>;2!NNi|Wn)1yc2pQ0U6 z(MrjjT^91G-v*r@mGy+45;wtdvlpQqTEg|sDk>@*XnR{#*Gb<y?y*oO}ih{z^BbUJGZ(qli%CD=shv^EgR z^-N+lp+`(b=cCcC{r9n$DlbU;ji=t138h!LS1BiW&Df;t#a@wuSqHBd57j>wMeV{Nb=a6tr4=LBFqMPWM}>g^BeYO>O@6 z{%fgOuJPXH=1@nlU6*e0hrLY!4H}qmcT`?s&fKD$x$~{O1;zPA-8a%EPO9+*d{#{; z*lH~dH*fW|d7HzFTid+;K!3u-S#c>3j_-|L+7mr{B-(kkJI~|k&h(U6_d9!?8^7P# zH*o3D;L%T_hr0&*dl+rs`9@EsJ286Zy}^$^?SDOezkBrHxl@C^2L}80JUVvx*UsJD rLm7pM17G$<&m8TaH$B;v`tbbe!LEzZi{~Dke)GYRk2IuU=DxoHAU8W` diff --git a/rest_framework/locale/zh_CN/LC_MESSAGES/django.po b/rest_framework/locale/zh_CN/LC_MESSAGES/django.po index 345bcfac8..7e131db42 100644 --- a/rest_framework/locale/zh_CN/LC_MESSAGES/django.po +++ b/rest_framework/locale/zh_CN/LC_MESSAGES/django.po @@ -10,9 +10,9 @@ msgid "" msgstr "" "Project-Id-Version: Django REST framework\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-07-12 16:13+0100\n" -"PO-Revision-Date: 2017-08-03 14:58+0000\n" -"Last-Translator: Lele Long \n" +"POT-Creation-Date: 2020-10-13 21:45+0200\n" +"PO-Revision-Date: 2020-10-13 19:45+0000\n" +"Last-Translator: Xavier Ordoquy \n" "Language-Team: Chinese (China) (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/zh_CN/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -20,40 +20,40 @@ msgstr "" "Language: zh_CN\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: authentication.py:73 +#: authentication.py:70 msgid "Invalid basic header. No credentials provided." msgstr "无效的Basic认证头,没有提供认证信息。" -#: authentication.py:76 +#: authentication.py:73 msgid "Invalid basic header. Credentials string should not contain spaces." msgstr "认证字符串不应该包含空格(基本认证HTTP头无效)。" -#: authentication.py:82 +#: authentication.py:83 msgid "Invalid basic header. Credentials not correctly base64 encoded." msgstr "认证字符串base64编码错误(基本认证HTTP头无效)。" -#: authentication.py:99 +#: authentication.py:101 msgid "Invalid username/password." msgstr "用户名或者密码错误。" -#: authentication.py:102 authentication.py:198 +#: authentication.py:104 authentication.py:206 msgid "User inactive or deleted." msgstr "用户未激活或者已删除。" -#: authentication.py:176 +#: authentication.py:184 msgid "Invalid token header. No credentials provided." msgstr "没有提供认证信息(认证令牌HTTP头无效)。" -#: authentication.py:179 +#: authentication.py:187 msgid "Invalid token header. Token string should not contain spaces." msgstr "认证令牌字符串不应该包含空格(无效的认证令牌HTTP头)。" -#: authentication.py:185 +#: authentication.py:193 msgid "" "Invalid token header. Token string should not contain invalid characters." msgstr "无效的Token。Token字符串不能包含非法的字符。" -#: authentication.py:195 +#: authentication.py:203 msgid "Invalid token." msgstr "认证令牌无效。" @@ -61,382 +61,515 @@ msgstr "认证令牌无效。" msgid "Auth Token" msgstr "认证令牌" -#: authtoken/models.py:15 +#: authtoken/models.py:13 msgid "Key" msgstr "键" -#: authtoken/models.py:18 +#: authtoken/models.py:16 msgid "User" msgstr "用户" -#: authtoken/models.py:20 +#: authtoken/models.py:18 msgid "Created" msgstr "已创建" -#: authtoken/models.py:29 +#: authtoken/models.py:27 authtoken/serializers.py:19 msgid "Token" msgstr "令牌" -#: authtoken/models.py:30 +#: authtoken/models.py:28 msgid "Tokens" msgstr "令牌" -#: authtoken/serializers.py:8 +#: authtoken/serializers.py:9 msgid "Username" msgstr "用户名" -#: authtoken/serializers.py:9 +#: authtoken/serializers.py:13 msgid "Password" msgstr "密码" -#: authtoken/serializers.py:20 -msgid "User account is disabled." -msgstr "用户账户已禁用。" - -#: authtoken/serializers.py:23 +#: authtoken/serializers.py:35 msgid "Unable to log in with provided credentials." msgstr "无法使用提供的认证信息登录。" -#: authtoken/serializers.py:26 +#: authtoken/serializers.py:38 msgid "Must include \"username\" and \"password\"." msgstr "必须包含 “用户名” 和 “密码”。" -#: exceptions.py:49 +#: exceptions.py:102 msgid "A server error occurred." msgstr "服务器出现了错误。" -#: exceptions.py:84 +#: exceptions.py:142 +msgid "Invalid input." +msgstr "" + +#: exceptions.py:161 msgid "Malformed request." msgstr "错误的请求。" -#: exceptions.py:89 +#: exceptions.py:167 msgid "Incorrect authentication credentials." msgstr "不正确的身份认证信息。" -#: exceptions.py:94 +#: exceptions.py:173 msgid "Authentication credentials were not provided." msgstr "身份认证信息未提供。" -#: exceptions.py:99 +#: exceptions.py:179 msgid "You do not have permission to perform this action." msgstr "您没有执行该操作的权限。" -#: exceptions.py:104 views.py:81 +#: exceptions.py:185 msgid "Not found." msgstr "未找到。" -#: exceptions.py:109 +#: exceptions.py:191 +#, python-brace-format msgid "Method \"{method}\" not allowed." msgstr "方法 “{method}” 不被允许。" -#: exceptions.py:120 +#: exceptions.py:202 msgid "Could not satisfy the request Accept header." msgstr "无法满足Accept HTTP头的请求。" -#: exceptions.py:132 +#: exceptions.py:212 +#, python-brace-format msgid "Unsupported media type \"{media_type}\" in request." msgstr "不支持请求中的媒体类型 “{media_type}”。" -#: exceptions.py:145 +#: exceptions.py:223 msgid "Request was throttled." msgstr "请求超过了限速。" -#: fields.py:269 relations.py:206 relations.py:239 validators.py:98 -#: validators.py:181 +#: exceptions.py:224 +#, python-brace-format +msgid "Expected available in {wait} second." +msgstr "" + +#: exceptions.py:225 +#, python-brace-format +msgid "Expected available in {wait} seconds." +msgstr "" + +#: fields.py:316 relations.py:245 relations.py:279 validators.py:90 +#: validators.py:183 msgid "This field is required." msgstr "该字段是必填项。" -#: fields.py:270 +#: fields.py:317 msgid "This field may not be null." msgstr "该字段不能为 null。" -#: fields.py:608 fields.py:639 -msgid "\"{input}\" is not a valid boolean." -msgstr "“{input}” 不是合法的布尔值。" +#: fields.py:701 +msgid "Must be a valid boolean." +msgstr "" -#: fields.py:674 +#: fields.py:766 +msgid "Not a valid string." +msgstr "" + +#: fields.py:767 msgid "This field may not be blank." msgstr "该字段不能为空。" -#: fields.py:675 fields.py:1675 +#: fields.py:768 fields.py:1881 +#, python-brace-format msgid "Ensure this field has no more than {max_length} characters." msgstr "请确保这个字段不能超过 {max_length} 个字符。" -#: fields.py:676 +#: fields.py:769 +#, python-brace-format msgid "Ensure this field has at least {min_length} characters." msgstr "请确保这个字段至少包含 {min_length} 个字符。" -#: fields.py:713 +#: fields.py:816 msgid "Enter a valid email address." msgstr "请输入合法的邮件地址。" -#: fields.py:724 +#: fields.py:827 msgid "This value does not match the required pattern." msgstr "输入值不匹配要求的模式。" -#: fields.py:735 +#: fields.py:838 msgid "" "Enter a valid \"slug\" consisting of letters, numbers, underscores or " "hyphens." msgstr "请输入合法的“短语“,只能包含字母,数字,下划线或者中划线。" -#: fields.py:747 +#: fields.py:839 +msgid "" +"Enter a valid \"slug\" consisting of Unicode letters, numbers, underscores, " +"or hyphens." +msgstr "" + +#: fields.py:854 msgid "Enter a valid URL." msgstr "请输入合法的URL。" -#: fields.py:760 -msgid "\"{value}\" is not a valid UUID." -msgstr "“{value}”不是合法的UUID。" +#: fields.py:867 +msgid "Must be a valid UUID." +msgstr "" -#: fields.py:796 +#: fields.py:903 msgid "Enter a valid IPv4 or IPv6 address." msgstr "请输入一个有效的IPv4或IPv6地址。" -#: fields.py:821 +#: fields.py:931 msgid "A valid integer is required." msgstr "请填写合法的整数值。" -#: fields.py:822 fields.py:857 fields.py:891 +#: fields.py:932 fields.py:969 fields.py:1005 fields.py:1366 +#, python-brace-format msgid "Ensure this value is less than or equal to {max_value}." msgstr "请确保该值小于或者等于 {max_value}。" -#: fields.py:823 fields.py:858 fields.py:892 +#: fields.py:933 fields.py:970 fields.py:1006 fields.py:1367 +#, python-brace-format msgid "Ensure this value is greater than or equal to {min_value}." msgstr "请确保该值大于或者等于 {min_value}。" -#: fields.py:824 fields.py:859 fields.py:896 +#: fields.py:934 fields.py:971 fields.py:1010 msgid "String value too large." msgstr "字符串值太长。" -#: fields.py:856 fields.py:890 +#: fields.py:968 fields.py:1004 msgid "A valid number is required." msgstr "请填写合法的数字。" -#: fields.py:893 +#: fields.py:1007 +#, python-brace-format msgid "Ensure that there are no more than {max_digits} digits in total." msgstr "请确保总计不超过 {max_digits} 个数字。" -#: fields.py:894 +#: fields.py:1008 +#, python-brace-format msgid "" "Ensure that there are no more than {max_decimal_places} decimal places." msgstr "请确保总计不超过 {max_decimal_places} 个小数位。" -#: fields.py:895 +#: fields.py:1009 +#, python-brace-format msgid "" "Ensure that there are no more than {max_whole_digits} digits before the " "decimal point." msgstr "请确保小数点前不超过 {max_whole_digits} 个数字。" -#: fields.py:1025 +#: fields.py:1148 +#, python-brace-format msgid "Datetime has wrong format. Use one of these formats instead: {format}." msgstr "日期时间格式错误。请从这些格式中选择:{format}。" -#: fields.py:1026 +#: fields.py:1149 msgid "Expected a datetime but got a date." msgstr "期望为日期时间,得到的是日期。" -#: fields.py:1103 +#: fields.py:1150 +#, python-brace-format +msgid "Invalid datetime for the timezone \"{timezone}\"." +msgstr "" + +#: fields.py:1151 +msgid "Datetime value out of range." +msgstr "" + +#: fields.py:1236 +#, python-brace-format msgid "Date has wrong format. Use one of these formats instead: {format}." msgstr "日期格式错误。请从这些格式中选择:{format}。" -#: fields.py:1104 +#: fields.py:1237 msgid "Expected a date but got a datetime." msgstr "期望为日期,得到的是日期时间。" -#: fields.py:1170 +#: fields.py:1303 +#, python-brace-format msgid "Time has wrong format. Use one of these formats instead: {format}." msgstr "时间格式错误。请从这些格式中选择:{format}。" -#: fields.py:1232 +#: fields.py:1365 +#, python-brace-format msgid "Duration has wrong format. Use one of these formats instead: {format}." msgstr "持续时间的格式错误。使用这些格式中的一个:{format}。" -#: fields.py:1251 fields.py:1300 +#: fields.py:1399 fields.py:1456 +#, python-brace-format msgid "\"{input}\" is not a valid choice." msgstr "“{input}” 不是合法选项。" -#: fields.py:1254 relations.py:71 relations.py:441 +#: fields.py:1402 +#, python-brace-format msgid "More than {count} items..." msgstr "多于{count}条记录。" -#: fields.py:1301 fields.py:1448 relations.py:437 serializers.py:524 +#: fields.py:1457 fields.py:1603 relations.py:485 serializers.py:570 +#, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "期望为一个包含物件的列表,得到的类型是“{input_type}”。" -#: fields.py:1302 +#: fields.py:1458 msgid "This selection may not be empty." msgstr "这项选择不能为空。" -#: fields.py:1339 +#: fields.py:1495 +#, python-brace-format msgid "\"{input}\" is not a valid path choice." msgstr "“{input}” 不是有效路径选项。" -#: fields.py:1358 +#: fields.py:1514 msgid "No file was submitted." msgstr "没有提交任何文件。" -#: fields.py:1359 +#: fields.py:1515 msgid "" "The submitted data was not a file. Check the encoding type on the form." msgstr "提交的数据不是一个文件。请检查表单的编码类型。" -#: fields.py:1360 +#: fields.py:1516 msgid "No filename could be determined." msgstr "无法检测到文件名。" -#: fields.py:1361 +#: fields.py:1517 msgid "The submitted file is empty." msgstr "提交的是空文件。" -#: fields.py:1362 +#: fields.py:1518 +#, python-brace-format msgid "" "Ensure this filename has at most {max_length} characters (it has {length})." msgstr "确保该文件名最多包含 {max_length} 个字符 ( 当前长度为{length} ) 。" -#: fields.py:1410 +#: fields.py:1566 msgid "" "Upload a valid image. The file you uploaded was either not an image or a " "corrupted image." msgstr "请上传有效图片。您上传的该文件不是图片或者图片已经损坏。" -#: fields.py:1449 relations.py:438 serializers.py:525 +#: fields.py:1604 relations.py:486 serializers.py:571 msgid "This list may not be empty." msgstr "列表字段不能为空值。" -#: fields.py:1502 +#: fields.py:1605 +#, python-brace-format +msgid "Ensure this field has at least {min_length} elements." +msgstr "" + +#: fields.py:1606 +#, python-brace-format +msgid "Ensure this field has no more than {max_length} elements." +msgstr "" + +#: fields.py:1682 +#, python-brace-format msgid "Expected a dictionary of items but got type \"{input_type}\"." msgstr "期望是包含类目的字典,得到类型为 “{input_type}”。" -#: fields.py:1549 +#: fields.py:1683 +msgid "This dictionary may not be empty." +msgstr "" + +#: fields.py:1755 msgid "Value must be valid JSON." msgstr "值必须是有效的 JSON 数据。" -#: filters.py:36 templates/rest_framework/filters/django_filter.html:5 -msgid "Submit" -msgstr "保存" +#: filters.py:49 templates/rest_framework/filters/search.html:2 +msgid "Search" +msgstr "查找" -#: filters.py:336 +#: filters.py:50 +msgid "A search term." +msgstr "" + +#: filters.py:180 templates/rest_framework/filters/ordering.html:3 +msgid "Ordering" +msgstr "排序" + +#: filters.py:181 +msgid "Which field to use when ordering the results." +msgstr "" + +#: filters.py:287 msgid "ascending" msgstr "升序" -#: filters.py:337 +#: filters.py:288 msgid "descending" msgstr "降序" -#: pagination.py:193 +#: pagination.py:174 +msgid "A page number within the paginated result set." +msgstr "" + +#: pagination.py:179 pagination.py:372 pagination.py:590 +msgid "Number of results to return per page." +msgstr "" + +#: pagination.py:189 msgid "Invalid page." msgstr "无效页。" -#: pagination.py:427 +#: pagination.py:374 +msgid "The initial index from which to return the results." +msgstr "" + +#: pagination.py:581 +msgid "The pagination cursor value." +msgstr "" + +#: pagination.py:583 msgid "Invalid cursor" msgstr "无效游标" -#: relations.py:207 +#: relations.py:246 +#, python-brace-format msgid "Invalid pk \"{pk_value}\" - object does not exist." msgstr "无效主键 “{pk_value}” - 对象不存在。" -#: relations.py:208 +#: relations.py:247 +#, python-brace-format msgid "Incorrect type. Expected pk value, received {data_type}." msgstr "类型错误。期望为主键,得到的类型为 {data_type}。" -#: relations.py:240 +#: relations.py:280 msgid "Invalid hyperlink - No URL match." msgstr "无效超链接 -没有匹配的URL。" -#: relations.py:241 +#: relations.py:281 msgid "Invalid hyperlink - Incorrect URL match." msgstr "无效超链接 -错误的URL匹配。" -#: relations.py:242 +#: relations.py:282 msgid "Invalid hyperlink - Object does not exist." msgstr "无效超链接 -对象不存在。" -#: relations.py:243 +#: relations.py:283 +#, python-brace-format msgid "Incorrect type. Expected URL string, received {data_type}." msgstr "类型错误。期望为URL字符串,实际的类型是 {data_type}。" -#: relations.py:401 +#: relations.py:448 +#, python-brace-format msgid "Object with {slug_name}={value} does not exist." msgstr "属性 {slug_name} 为 {value} 的对象不存在。" -#: relations.py:402 +#: relations.py:449 msgid "Invalid value." msgstr "无效值。" -#: serializers.py:326 +#: schemas/utils.py:32 +msgid "unique integer value" +msgstr "" + +#: schemas/utils.py:34 +msgid "UUID string" +msgstr "" + +#: schemas/utils.py:36 +msgid "unique value" +msgstr "" + +#: schemas/utils.py:38 +#, python-brace-format +msgid "A {value_type} identifying this {name}." +msgstr "" + +#: serializers.py:337 +#, python-brace-format msgid "Invalid data. Expected a dictionary, but got {datatype}." msgstr "无效数据。期待为字典类型,得到的是 {datatype} 。" #: templates/rest_framework/admin.html:116 -#: templates/rest_framework/base.html:128 +#: templates/rest_framework/base.html:136 +msgid "Extra Actions" +msgstr "" + +#: templates/rest_framework/admin.html:130 +#: templates/rest_framework/base.html:150 msgid "Filters" msgstr "过滤器" -#: templates/rest_framework/filters/django_filter.html:2 -#: templates/rest_framework/filters/django_filter_crispyforms.html:4 -msgid "Field filters" -msgstr "过滤器字段" +#: templates/rest_framework/base.html:37 +msgid "navbar" +msgstr "" -#: templates/rest_framework/filters/ordering.html:3 -msgid "Ordering" -msgstr "排序" +#: templates/rest_framework/base.html:75 +msgid "content" +msgstr "" -#: templates/rest_framework/filters/search.html:2 -msgid "Search" -msgstr "查找" +#: templates/rest_framework/base.html:78 +msgid "request form" +msgstr "" -#: templates/rest_framework/horizontal/radio.html:2 -#: templates/rest_framework/inline/radio.html:2 -#: templates/rest_framework/vertical/radio.html:2 +#: templates/rest_framework/base.html:157 +msgid "main content" +msgstr "" + +#: templates/rest_framework/base.html:173 +msgid "request info" +msgstr "" + +#: templates/rest_framework/base.html:177 +msgid "response info" +msgstr "" + +#: templates/rest_framework/horizontal/radio.html:4 +#: templates/rest_framework/inline/radio.html:3 +#: templates/rest_framework/vertical/radio.html:3 msgid "None" msgstr "无" -#: templates/rest_framework/horizontal/select_multiple.html:2 -#: templates/rest_framework/inline/select_multiple.html:2 -#: templates/rest_framework/vertical/select_multiple.html:2 +#: templates/rest_framework/horizontal/select_multiple.html:4 +#: templates/rest_framework/inline/select_multiple.html:3 +#: templates/rest_framework/vertical/select_multiple.html:3 msgid "No items to select." msgstr "没有可选项。" -#: validators.py:43 +#: validators.py:39 msgid "This field must be unique." msgstr "该字段必须唯一。" -#: validators.py:97 +#: validators.py:89 +#, python-brace-format msgid "The fields {field_names} must make a unique set." msgstr "字段 {field_names} 必须能构成唯一集合。" -#: validators.py:245 +#: validators.py:171 +#, python-brace-format +msgid "Surrogate characters are not allowed: U+{code_point:X}." +msgstr "" + +#: validators.py:243 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" date." msgstr "该字段必须在日期 “{date_field}” 唯一。" -#: validators.py:260 +#: validators.py:258 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" month." msgstr "该字段必须在月份 “{date_field}” 唯一。" -#: validators.py:273 +#: validators.py:271 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" year." msgstr "该字段必须在年 “{date_field}” 唯一。" -#: versioning.py:42 +#: versioning.py:40 msgid "Invalid version in \"Accept\" header." msgstr "“Accept” HTTP头包含无效版本。" -#: versioning.py:73 +#: versioning.py:71 msgid "Invalid version in URL path." msgstr "URL路径包含无效版本。" -#: versioning.py:115 +#: versioning.py:116 msgid "Invalid version in URL path. Does not match any version namespace." msgstr "URL路径中存在无效版本。版本空间中无法匹配上。" -#: versioning.py:147 +#: versioning.py:148 msgid "Invalid version in hostname." msgstr "主机名包含无效版本。" -#: versioning.py:169 +#: versioning.py:170 msgid "Invalid version in query parameter." msgstr "请求参数里包含无效版本。" - -#: views.py:88 -msgid "Permission denied." -msgstr "没有权限。" diff --git a/rest_framework/locale/zh_Hans/LC_MESSAGES/django.mo b/rest_framework/locale/zh_Hans/LC_MESSAGES/django.mo index d85317ebc9205a26b27dd681d7f17aac6297dcaa..670228a8346076571906d56e43817d7e8354163c 100644 GIT binary patch delta 2239 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 k;Nazx;p&;Oajx6vPet}#9J+XJ_|!|oht6n7, 2015 # hunter007 , 2015 -# nypisces , 2015 +# 3eb8e7e672c2428f1223e00920bfd2b3, 2015 # ppppfly , 2017 msgid "" msgstr "" "Project-Id-Version: Django REST framework\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-07-12 16:13+0100\n" -"PO-Revision-Date: 2017-08-03 14:58+0000\n" -"Last-Translator: ppppfly \n" +"POT-Creation-Date: 2020-10-13 21:45+0200\n" +"PO-Revision-Date: 2020-10-13 19:45+0000\n" +"Last-Translator: Xavier Ordoquy \n" "Language-Team: Chinese Simplified (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/zh-Hans/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -21,40 +21,40 @@ msgstr "" "Language: zh-Hans\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: authentication.py:73 +#: authentication.py:70 msgid "Invalid basic header. No credentials provided." msgstr "无效的Basic认证头,没有提供认证信息。" -#: authentication.py:76 +#: authentication.py:73 msgid "Invalid basic header. Credentials string should not contain spaces." msgstr "认证字符串不应该包含空格(基本认证HTTP头无效)。" -#: authentication.py:82 +#: authentication.py:83 msgid "Invalid basic header. Credentials not correctly base64 encoded." msgstr "认证字符串base64编码错误(基本认证HTTP头无效)。" -#: authentication.py:99 +#: authentication.py:101 msgid "Invalid username/password." msgstr "用户名或者密码错误。" -#: authentication.py:102 authentication.py:198 +#: authentication.py:104 authentication.py:206 msgid "User inactive or deleted." msgstr "用户未激活或者已删除。" -#: authentication.py:176 +#: authentication.py:184 msgid "Invalid token header. No credentials provided." msgstr "没有提供认证信息(认证令牌HTTP头无效)。" -#: authentication.py:179 +#: authentication.py:187 msgid "Invalid token header. Token string should not contain spaces." msgstr "认证令牌字符串不应该包含空格(无效的认证令牌HTTP头)。" -#: authentication.py:185 +#: authentication.py:193 msgid "" "Invalid token header. Token string should not contain invalid characters." msgstr "无效的Token。Token字符串不能包含非法的字符。" -#: authentication.py:195 +#: authentication.py:203 msgid "Invalid token." msgstr "认证令牌无效。" @@ -62,382 +62,515 @@ msgstr "认证令牌无效。" msgid "Auth Token" msgstr "认证令牌" -#: authtoken/models.py:15 +#: authtoken/models.py:13 msgid "Key" msgstr "键" -#: authtoken/models.py:18 +#: authtoken/models.py:16 msgid "User" msgstr "用户" -#: authtoken/models.py:20 +#: authtoken/models.py:18 msgid "Created" msgstr "已创建" -#: authtoken/models.py:29 +#: authtoken/models.py:27 authtoken/serializers.py:19 msgid "Token" msgstr "令牌" -#: authtoken/models.py:30 +#: authtoken/models.py:28 msgid "Tokens" msgstr "令牌" -#: authtoken/serializers.py:8 +#: authtoken/serializers.py:9 msgid "Username" msgstr "用户名" -#: authtoken/serializers.py:9 +#: authtoken/serializers.py:13 msgid "Password" msgstr "密码" -#: authtoken/serializers.py:20 -msgid "User account is disabled." -msgstr "用户账户已禁用。" - -#: authtoken/serializers.py:23 +#: authtoken/serializers.py:35 msgid "Unable to log in with provided credentials." msgstr "无法使用提供的认证信息登录。" -#: authtoken/serializers.py:26 +#: authtoken/serializers.py:38 msgid "Must include \"username\" and \"password\"." msgstr "必须包含 “用户名” 和 “密码”。" -#: exceptions.py:49 +#: exceptions.py:102 msgid "A server error occurred." msgstr "服务器出现了错误。" -#: exceptions.py:84 +#: exceptions.py:142 +msgid "Invalid input." +msgstr "" + +#: exceptions.py:161 msgid "Malformed request." msgstr "错误的请求。" -#: exceptions.py:89 +#: exceptions.py:167 msgid "Incorrect authentication credentials." msgstr "不正确的身份认证信息。" -#: exceptions.py:94 +#: exceptions.py:173 msgid "Authentication credentials were not provided." msgstr "身份认证信息未提供。" -#: exceptions.py:99 +#: exceptions.py:179 msgid "You do not have permission to perform this action." msgstr "您没有执行该操作的权限。" -#: exceptions.py:104 views.py:81 +#: exceptions.py:185 msgid "Not found." msgstr "未找到。" -#: exceptions.py:109 +#: exceptions.py:191 +#, python-brace-format msgid "Method \"{method}\" not allowed." msgstr "方法 “{method}” 不被允许。" -#: exceptions.py:120 +#: exceptions.py:202 msgid "Could not satisfy the request Accept header." msgstr "无法满足Accept HTTP头的请求。" -#: exceptions.py:132 +#: exceptions.py:212 +#, python-brace-format msgid "Unsupported media type \"{media_type}\" in request." msgstr "不支持请求中的媒体类型 “{media_type}”。" -#: exceptions.py:145 +#: exceptions.py:223 msgid "Request was throttled." msgstr "请求超过了限速。" -#: fields.py:269 relations.py:206 relations.py:239 validators.py:98 -#: validators.py:181 +#: exceptions.py:224 +#, python-brace-format +msgid "Expected available in {wait} second." +msgstr "" + +#: exceptions.py:225 +#, python-brace-format +msgid "Expected available in {wait} seconds." +msgstr "" + +#: fields.py:316 relations.py:245 relations.py:279 validators.py:90 +#: validators.py:183 msgid "This field is required." msgstr "该字段是必填项。" -#: fields.py:270 +#: fields.py:317 msgid "This field may not be null." msgstr "该字段不能为 null。" -#: fields.py:608 fields.py:639 -msgid "\"{input}\" is not a valid boolean." -msgstr "“{input}” 不是合法的布尔值。" +#: fields.py:701 +msgid "Must be a valid boolean." +msgstr "" -#: fields.py:674 +#: fields.py:766 +msgid "Not a valid string." +msgstr "" + +#: fields.py:767 msgid "This field may not be blank." msgstr "该字段不能为空。" -#: fields.py:675 fields.py:1675 +#: fields.py:768 fields.py:1881 +#, python-brace-format msgid "Ensure this field has no more than {max_length} characters." msgstr "请确保这个字段不能超过 {max_length} 个字符。" -#: fields.py:676 +#: fields.py:769 +#, python-brace-format msgid "Ensure this field has at least {min_length} characters." msgstr "请确保这个字段至少包含 {min_length} 个字符。" -#: fields.py:713 +#: fields.py:816 msgid "Enter a valid email address." msgstr "请输入合法的邮件地址。" -#: fields.py:724 +#: fields.py:827 msgid "This value does not match the required pattern." msgstr "输入值不匹配要求的模式。" -#: fields.py:735 +#: fields.py:838 msgid "" "Enter a valid \"slug\" consisting of letters, numbers, underscores or " "hyphens." msgstr "请输入合法的“短语“,只能包含字母,数字,下划线或者中划线。" -#: fields.py:747 +#: fields.py:839 +msgid "" +"Enter a valid \"slug\" consisting of Unicode letters, numbers, underscores, " +"or hyphens." +msgstr "" + +#: fields.py:854 msgid "Enter a valid URL." msgstr "请输入合法的URL。" -#: fields.py:760 -msgid "\"{value}\" is not a valid UUID." -msgstr "“{value}”不是合法的UUID。" +#: fields.py:867 +msgid "Must be a valid UUID." +msgstr "" -#: fields.py:796 +#: fields.py:903 msgid "Enter a valid IPv4 or IPv6 address." msgstr "请输入一个有效的IPv4或IPv6地址。" -#: fields.py:821 +#: fields.py:931 msgid "A valid integer is required." msgstr "请填写合法的整数值。" -#: fields.py:822 fields.py:857 fields.py:891 +#: fields.py:932 fields.py:969 fields.py:1005 fields.py:1366 +#, python-brace-format msgid "Ensure this value is less than or equal to {max_value}." msgstr "请确保该值小于或者等于 {max_value}。" -#: fields.py:823 fields.py:858 fields.py:892 +#: fields.py:933 fields.py:970 fields.py:1006 fields.py:1367 +#, python-brace-format msgid "Ensure this value is greater than or equal to {min_value}." msgstr "请确保该值大于或者等于 {min_value}。" -#: fields.py:824 fields.py:859 fields.py:896 +#: fields.py:934 fields.py:971 fields.py:1010 msgid "String value too large." msgstr "字符串值太长。" -#: fields.py:856 fields.py:890 +#: fields.py:968 fields.py:1004 msgid "A valid number is required." msgstr "请填写合法的数字。" -#: fields.py:893 +#: fields.py:1007 +#, python-brace-format msgid "Ensure that there are no more than {max_digits} digits in total." msgstr "请确保总计不超过 {max_digits} 个数字。" -#: fields.py:894 +#: fields.py:1008 +#, python-brace-format msgid "" "Ensure that there are no more than {max_decimal_places} decimal places." msgstr "请确保总计不超过 {max_decimal_places} 个小数位。" -#: fields.py:895 +#: fields.py:1009 +#, python-brace-format msgid "" "Ensure that there are no more than {max_whole_digits} digits before the " "decimal point." msgstr "请确保小数点前不超过 {max_whole_digits} 个数字。" -#: fields.py:1025 +#: fields.py:1148 +#, python-brace-format msgid "Datetime has wrong format. Use one of these formats instead: {format}." msgstr "日期时间格式错误。请从这些格式中选择:{format}。" -#: fields.py:1026 +#: fields.py:1149 msgid "Expected a datetime but got a date." msgstr "期望为日期时间,获得的是日期。" -#: fields.py:1103 +#: fields.py:1150 +#, python-brace-format +msgid "Invalid datetime for the timezone \"{timezone}\"." +msgstr "" + +#: fields.py:1151 +msgid "Datetime value out of range." +msgstr "" + +#: fields.py:1236 +#, python-brace-format msgid "Date has wrong format. Use one of these formats instead: {format}." msgstr "日期格式错误。请从这些格式中选择:{format}。" -#: fields.py:1104 +#: fields.py:1237 msgid "Expected a date but got a datetime." msgstr "期望为日期,获得的是日期时间。" -#: fields.py:1170 +#: fields.py:1303 +#, python-brace-format msgid "Time has wrong format. Use one of these formats instead: {format}." msgstr "时间格式错误。请从这些格式中选择:{format}。" -#: fields.py:1232 +#: fields.py:1365 +#, python-brace-format msgid "Duration has wrong format. Use one of these formats instead: {format}." msgstr "持续时间的格式错误。使用这些格式中的一个:{format}。" -#: fields.py:1251 fields.py:1300 +#: fields.py:1399 fields.py:1456 +#, python-brace-format msgid "\"{input}\" is not a valid choice." msgstr "“{input}” 不是合法选项。" -#: fields.py:1254 relations.py:71 relations.py:441 +#: fields.py:1402 +#, python-brace-format msgid "More than {count} items..." msgstr "多于{count}条记录。" -#: fields.py:1301 fields.py:1448 relations.py:437 serializers.py:524 +#: fields.py:1457 fields.py:1603 relations.py:485 serializers.py:570 +#, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "期望为一个包含物件的列表,得到的类型是“{input_type}”。" -#: fields.py:1302 +#: fields.py:1458 msgid "This selection may not be empty." msgstr "这项选择不能为空。" -#: fields.py:1339 +#: fields.py:1495 +#, python-brace-format msgid "\"{input}\" is not a valid path choice." msgstr "\"{input}\"不是一个有效路径选项。" -#: fields.py:1358 +#: fields.py:1514 msgid "No file was submitted." msgstr "没有提交任何文件。" -#: fields.py:1359 +#: fields.py:1515 msgid "" "The submitted data was not a file. Check the encoding type on the form." msgstr "提交的数据不是一个文件。请检查表单的编码类型。" -#: fields.py:1360 +#: fields.py:1516 msgid "No filename could be determined." msgstr "无法检测到文件名。" -#: fields.py:1361 +#: fields.py:1517 msgid "The submitted file is empty." msgstr "提交的是空文件。" -#: fields.py:1362 +#: fields.py:1518 +#, python-brace-format msgid "" "Ensure this filename has at most {max_length} characters (it has {length})." msgstr "确保该文件名最多包含 {max_length} 个字符 ( 当前长度为{length} ) 。" -#: fields.py:1410 +#: fields.py:1566 msgid "" "Upload a valid image. The file you uploaded was either not an image or a " "corrupted image." msgstr "请上传有效图片。您上传的该文件不是图片或者图片已经损坏。" -#: fields.py:1449 relations.py:438 serializers.py:525 +#: fields.py:1604 relations.py:486 serializers.py:571 msgid "This list may not be empty." msgstr "列表不能为空。" -#: fields.py:1502 +#: fields.py:1605 +#, python-brace-format +msgid "Ensure this field has at least {min_length} elements." +msgstr "" + +#: fields.py:1606 +#, python-brace-format +msgid "Ensure this field has no more than {max_length} elements." +msgstr "" + +#: fields.py:1682 +#, python-brace-format msgid "Expected a dictionary of items but got type \"{input_type}\"." msgstr "期望是包含类目的字典,得到类型为 “{input_type}”。" -#: fields.py:1549 +#: fields.py:1683 +msgid "This dictionary may not be empty." +msgstr "" + +#: fields.py:1755 msgid "Value must be valid JSON." msgstr "值必须是有效的 JSON 数据。" -#: filters.py:36 templates/rest_framework/filters/django_filter.html:5 -msgid "Submit" -msgstr "提交" +#: filters.py:49 templates/rest_framework/filters/search.html:2 +msgid "Search" +msgstr " 搜索" -#: filters.py:336 +#: filters.py:50 +msgid "A search term." +msgstr "" + +#: filters.py:180 templates/rest_framework/filters/ordering.html:3 +msgid "Ordering" +msgstr "排序" + +#: filters.py:181 +msgid "Which field to use when ordering the results." +msgstr "" + +#: filters.py:287 msgid "ascending" msgstr "正排序" -#: filters.py:337 +#: filters.py:288 msgid "descending" msgstr "倒排序" -#: pagination.py:193 +#: pagination.py:174 +msgid "A page number within the paginated result set." +msgstr "" + +#: pagination.py:179 pagination.py:372 pagination.py:590 +msgid "Number of results to return per page." +msgstr "" + +#: pagination.py:189 msgid "Invalid page." msgstr "无效页面。" -#: pagination.py:427 +#: pagination.py:374 +msgid "The initial index from which to return the results." +msgstr "" + +#: pagination.py:581 +msgid "The pagination cursor value." +msgstr "" + +#: pagination.py:583 msgid "Invalid cursor" msgstr "无效游标" -#: relations.py:207 +#: relations.py:246 +#, python-brace-format msgid "Invalid pk \"{pk_value}\" - object does not exist." msgstr "无效主键 “{pk_value}” - 对象不存在。" -#: relations.py:208 +#: relations.py:247 +#, python-brace-format msgid "Incorrect type. Expected pk value, received {data_type}." msgstr "类型错误。期望为主键,获得的类型为 {data_type}。" -#: relations.py:240 +#: relations.py:280 msgid "Invalid hyperlink - No URL match." msgstr "无效超链接 -没有匹配的URL。" -#: relations.py:241 +#: relations.py:281 msgid "Invalid hyperlink - Incorrect URL match." msgstr "无效超链接 -错误的URL匹配。" -#: relations.py:242 +#: relations.py:282 msgid "Invalid hyperlink - Object does not exist." msgstr "无效超链接 -对象不存在。" -#: relations.py:243 +#: relations.py:283 +#, python-brace-format msgid "Incorrect type. Expected URL string, received {data_type}." msgstr "类型错误。期望为URL字符串,实际的类型是 {data_type}。" -#: relations.py:401 +#: relations.py:448 +#, python-brace-format msgid "Object with {slug_name}={value} does not exist." msgstr "属性 {slug_name} 为 {value} 的对象不存在。" -#: relations.py:402 +#: relations.py:449 msgid "Invalid value." msgstr "无效值。" -#: serializers.py:326 +#: schemas/utils.py:32 +msgid "unique integer value" +msgstr "" + +#: schemas/utils.py:34 +msgid "UUID string" +msgstr "" + +#: schemas/utils.py:36 +msgid "unique value" +msgstr "" + +#: schemas/utils.py:38 +#, python-brace-format +msgid "A {value_type} identifying this {name}." +msgstr "" + +#: serializers.py:337 +#, python-brace-format msgid "Invalid data. Expected a dictionary, but got {datatype}." msgstr "无效数据。期待为字典类型,得到的是 {datatype} 。" #: templates/rest_framework/admin.html:116 -#: templates/rest_framework/base.html:128 +#: templates/rest_framework/base.html:136 +msgid "Extra Actions" +msgstr "" + +#: templates/rest_framework/admin.html:130 +#: templates/rest_framework/base.html:150 msgid "Filters" msgstr "过滤器" -#: templates/rest_framework/filters/django_filter.html:2 -#: templates/rest_framework/filters/django_filter_crispyforms.html:4 -msgid "Field filters" -msgstr "过滤器字段" +#: templates/rest_framework/base.html:37 +msgid "navbar" +msgstr "" -#: templates/rest_framework/filters/ordering.html:3 -msgid "Ordering" -msgstr "排序" +#: templates/rest_framework/base.html:75 +msgid "content" +msgstr "" -#: templates/rest_framework/filters/search.html:2 -msgid "Search" -msgstr " 搜索" +#: templates/rest_framework/base.html:78 +msgid "request form" +msgstr "" -#: templates/rest_framework/horizontal/radio.html:2 -#: templates/rest_framework/inline/radio.html:2 -#: templates/rest_framework/vertical/radio.html:2 +#: templates/rest_framework/base.html:157 +msgid "main content" +msgstr "" + +#: templates/rest_framework/base.html:173 +msgid "request info" +msgstr "" + +#: templates/rest_framework/base.html:177 +msgid "response info" +msgstr "" + +#: templates/rest_framework/horizontal/radio.html:4 +#: templates/rest_framework/inline/radio.html:3 +#: templates/rest_framework/vertical/radio.html:3 msgid "None" msgstr "无" -#: templates/rest_framework/horizontal/select_multiple.html:2 -#: templates/rest_framework/inline/select_multiple.html:2 -#: templates/rest_framework/vertical/select_multiple.html:2 +#: templates/rest_framework/horizontal/select_multiple.html:4 +#: templates/rest_framework/inline/select_multiple.html:3 +#: templates/rest_framework/vertical/select_multiple.html:3 msgid "No items to select." msgstr "没有可选项。" -#: validators.py:43 +#: validators.py:39 msgid "This field must be unique." msgstr "该字段必须唯一。" -#: validators.py:97 +#: validators.py:89 +#, python-brace-format msgid "The fields {field_names} must make a unique set." msgstr "字段 {field_names} 必须能构成唯一集合。" -#: validators.py:245 +#: validators.py:171 +#, python-brace-format +msgid "Surrogate characters are not allowed: U+{code_point:X}." +msgstr "" + +#: validators.py:243 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" date." msgstr "该字段必须在日期 “{date_field}” 唯一。" -#: validators.py:260 +#: validators.py:258 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" month." msgstr "该字段必须在月份 “{date_field}” 唯一。" -#: validators.py:273 +#: validators.py:271 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" year." msgstr "该字段必须在年 “{date_field}” 唯一。" -#: versioning.py:42 +#: versioning.py:40 msgid "Invalid version in \"Accept\" header." msgstr "“Accept” HTTP头包含无效版本。" -#: versioning.py:73 +#: versioning.py:71 msgid "Invalid version in URL path." msgstr "URL路径包含无效版本。" -#: versioning.py:115 +#: versioning.py:116 msgid "Invalid version in URL path. Does not match any version namespace." msgstr "在URL路径中发现无效的版本。无法匹配任何的版本命名空间。" -#: versioning.py:147 +#: versioning.py:148 msgid "Invalid version in hostname." msgstr "主机名包含无效版本。" -#: versioning.py:169 +#: versioning.py:170 msgid "Invalid version in query parameter." msgstr "请求参数里包含无效版本。" - -#: views.py:88 -msgid "Permission denied." -msgstr "没有权限。" diff --git a/rest_framework/locale/zh_Hant/LC_MESSAGES/django.mo b/rest_framework/locale/zh_Hant/LC_MESSAGES/django.mo index 0d8ccaa5557028d040bad7584707df8e7d6559f5..26ea0cee93d7fd2fd2dd8695ed3a50c0c1269b10 100644 GIT binary patch literal 4809 zcmai$YitzP6~}MeJX({sA#KvMY13OLZ6IXVHi48bAqo%EI0=D*p+S`zjd!niC!U>I zW@h~ea%CP4HrUuaY~y5km`7p^#s&&3el)EV+7_Ct4OcR%s5pDOi#?u_^0 z7#QvBZ|>uqbI;@6nSVX@zyQPbbKF0~{gMA7G4wS3w&80(=U*16F{G z9%Src@ClG~JPob}cYq=AsNerN_zc<)KE&8#;8KwEy$n+SPM_`IO0-8n()(9%75Hy( z3HT&Be*&%rp9jO>H^IYTHJAdw1%3|x0Q{%l{x3)_J@j>~5v%}dd@1-GxB+|u)Ihk# z_JQPI7lW{CVUXUjI^%+G|0I*Ka|x_nzM#06E%M!FAvl zAVS0*hf&i16iDl+1iueH2f_qf>$hJAm!lm4AueBz+Z+dUdiGBtKSyq~}*4<+BZ> z{GI?wZwe&237!s@@4>I2?@J#Fb4(=ClQw)%D z85<7%7F`^6ZvY+9mJwf}3E{Y>vROfTo z5NSZnkjZARZ~QY zgL*RF@TIY&9pm*zlhE0EQz*8Guv*2Bi>VvvtiC^gk2!GKoTRQM%Im?%g#o_ zjL+92mx`??;t9Kr1`B5Z9*QSQNq<~vlQC;R6>Ey#R3=n1s3$e8e2fAJsidy%N=k=d zLRNc;ROvb_p`mA+4-c|Id z!ME0KtLKd-)`9wNs@N(LhG_>jSy43-SeJ}ifqEmvE4FM7Y!%HaNd`9H6bkX>)yt~` zHTb>AYkm=0v2s~8u8KEtxCiP@MYlA?Hp~!zTWMBtLZUK_UCB27aw|3wJ-v#P!Dv>M zVAzPi0x>Yo z)(#XL3DhjyUxo6LrmEhH1zuBhyJ~60rn*hF#kkZ2t1H$UIJ0$lf-@|{ZP991B{W6V zSIc*mCG0iZ>o*2g73a}{8ig6C_4i1KuWC^3f?px-TdUZjB~3*OY((Cy5Z4p3X|1VQ z&ArDp)vGH?-qe|NuX|#`O?A5iUD*%z=l7)DV+a1zv6tm89m>t5oz4q|F?Zni?m*h< zn7P|<+8H0BvHZoM+<3SDzILXkvQX90NgA_fr*dPx?)Z84^8Ua+clUS@5V#vOZqMXlYR39 z3U6m$U|yK$<-CH!g7=noQj^Zfj)kY*|2i(D72o_c&GoSV(iVBNwd8wr! zj-u!|m%Y)C*Q?WWJKx!h#UOT6yW{6j7 za3p_Zl2M(Xz2tQ6$&Fq`1l+;f?)8C^uL4p&w-Njg0jJ}Tmqhv)a6akGpXqXXVDD1q z9=5%xWu~Vyvjgtfad)H(X5GI2%+z^*{mkwD1BI$Pu=d}qs~+x^ITwVf6AFW z#E|Dq`kJ@Ho%3UOkW-~DxZo8A>X%Z9V@Mh+)OF#&K-D>eS1><&YZUP*7TSGQih~Bb zh1^bccqfjuK6m_(2YnNmk-a#T9iClyjJ^oUM*JuqpU9-;wuTXJW0b1%C9n$+{x1!b zY{GocL~iUnwg8+(*=5p)pv;RvCOwX`7*?FV!OZlzJ2M~5eFl*BvJZhmHkp&Yo*O>x zrpBCs(S{a&5=I0hy2+7FLO)OS$&M3+(F3C()uqnyUbpYaIsK917Zc#=6NlzE# diff --git a/rest_framework/locale/zh_Hant/LC_MESSAGES/django.po b/rest_framework/locale/zh_Hant/LC_MESSAGES/django.po index 1960f1f5d..6d2630f31 100644 --- a/rest_framework/locale/zh_Hant/LC_MESSAGES/django.po +++ b/rest_framework/locale/zh_Hant/LC_MESSAGES/django.po @@ -3,13 +3,14 @@ # This file is distributed under the same license as the PACKAGE package. # # Translators: +# Matsui Lin , 2019 msgid "" msgstr "" "Project-Id-Version: Django REST framework\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-07-12 16:13+0100\n" -"PO-Revision-Date: 2016-07-12 15:14+0000\n" -"Last-Translator: Thomas Christie \n" +"POT-Creation-Date: 2020-10-13 21:45+0200\n" +"PO-Revision-Date: 2020-10-13 19:45+0000\n" +"Last-Translator: Xavier Ordoquy \n" "Language-Team: Chinese Traditional (http://www.transifex.com/django-rest-framework-1/django-rest-framework/language/zh-Hant/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,423 +18,556 @@ msgstr "" "Language: zh-Hant\n" "Plural-Forms: nplurals=1; plural=0;\n" -#: authentication.py:73 +#: authentication.py:70 msgid "Invalid basic header. No credentials provided." msgstr "" -#: authentication.py:76 +#: authentication.py:73 msgid "Invalid basic header. Credentials string should not contain spaces." msgstr "" -#: authentication.py:82 +#: authentication.py:83 msgid "Invalid basic header. Credentials not correctly base64 encoded." msgstr "" -#: authentication.py:99 +#: authentication.py:101 msgid "Invalid username/password." -msgstr "" +msgstr "無效的使用者名稱及密碼。" -#: authentication.py:102 authentication.py:198 +#: authentication.py:104 authentication.py:206 msgid "User inactive or deleted." -msgstr "" +msgstr "帳號未啟用或已被刪除。" -#: authentication.py:176 +#: authentication.py:184 msgid "Invalid token header. No credentials provided." msgstr "" -#: authentication.py:179 +#: authentication.py:187 msgid "Invalid token header. Token string should not contain spaces." msgstr "" -#: authentication.py:185 +#: authentication.py:193 msgid "" "Invalid token header. Token string should not contain invalid characters." msgstr "" -#: authentication.py:195 +#: authentication.py:203 msgid "Invalid token." -msgstr "" +msgstr "無效的token。" #: authtoken/apps.py:7 msgid "Auth Token" -msgstr "" +msgstr "驗證 Token" -#: authtoken/models.py:15 +#: authtoken/models.py:13 msgid "Key" -msgstr "" +msgstr "金鑰" + +#: authtoken/models.py:16 +msgid "User" +msgstr "使用者" #: authtoken/models.py:18 -msgid "User" -msgstr "" - -#: authtoken/models.py:20 msgid "Created" -msgstr "" +msgstr "建立者" -#: authtoken/models.py:29 +#: authtoken/models.py:27 authtoken/serializers.py:19 msgid "Token" -msgstr "" +msgstr "Token" -#: authtoken/models.py:30 +#: authtoken/models.py:28 msgid "Tokens" -msgstr "" - -#: authtoken/serializers.py:8 -msgid "Username" -msgstr "" +msgstr "Tokens" #: authtoken/serializers.py:9 +msgid "Username" +msgstr "使用者名稱" + +#: authtoken/serializers.py:13 msgid "Password" -msgstr "" +msgstr "密碼" -#: authtoken/serializers.py:20 -msgid "User account is disabled." -msgstr "" - -#: authtoken/serializers.py:23 +#: authtoken/serializers.py:35 msgid "Unable to log in with provided credentials." msgstr "" -#: authtoken/serializers.py:26 +#: authtoken/serializers.py:38 msgid "Must include \"username\" and \"password\"." -msgstr "" +msgstr "必須包含使用者名稱及密碼。" -#: exceptions.py:49 +#: exceptions.py:102 msgid "A server error occurred." msgstr "" -#: exceptions.py:84 +#: exceptions.py:142 +msgid "Invalid input." +msgstr "" + +#: exceptions.py:161 msgid "Malformed request." msgstr "" -#: exceptions.py:89 +#: exceptions.py:167 msgid "Incorrect authentication credentials." msgstr "" -#: exceptions.py:94 +#: exceptions.py:173 msgid "Authentication credentials were not provided." msgstr "" -#: exceptions.py:99 +#: exceptions.py:179 msgid "You do not have permission to perform this action." -msgstr "" +msgstr "你沒有執行此操作的權限。" -#: exceptions.py:104 views.py:81 +#: exceptions.py:185 msgid "Not found." -msgstr "" +msgstr "找不到資源。" -#: exceptions.py:109 +#: exceptions.py:191 +#, python-brace-format msgid "Method \"{method}\" not allowed." -msgstr "" +msgstr "不被允許的方法 \"{method}\"。" -#: exceptions.py:120 +#: exceptions.py:202 msgid "Could not satisfy the request Accept header." msgstr "" -#: exceptions.py:132 +#: exceptions.py:212 +#, python-brace-format msgid "Unsupported media type \"{media_type}\" in request." msgstr "" -#: exceptions.py:145 +#: exceptions.py:223 msgid "Request was throttled." msgstr "" -#: fields.py:269 relations.py:206 relations.py:239 validators.py:98 -#: validators.py:181 +#: exceptions.py:224 +#, python-brace-format +msgid "Expected available in {wait} second." +msgstr "" + +#: exceptions.py:225 +#, python-brace-format +msgid "Expected available in {wait} seconds." +msgstr "" + +#: fields.py:316 relations.py:245 relations.py:279 validators.py:90 +#: validators.py:183 msgid "This field is required." -msgstr "" +msgstr "此為必需欄位。" -#: fields.py:270 +#: fields.py:317 msgid "This field may not be null." +msgstr "此欄位不可為null。" + +#: fields.py:701 +msgid "Must be a valid boolean." msgstr "" -#: fields.py:608 fields.py:639 -msgid "\"{input}\" is not a valid boolean." +#: fields.py:766 +msgid "Not a valid string." msgstr "" -#: fields.py:674 +#: fields.py:767 msgid "This field may not be blank." -msgstr "" +msgstr "此欄位不可為空白。" -#: fields.py:675 fields.py:1675 +#: fields.py:768 fields.py:1881 +#, python-brace-format msgid "Ensure this field has no more than {max_length} characters." -msgstr "" +msgstr "請確認此欄位字元長度不超過 {max_length}。" -#: fields.py:676 +#: fields.py:769 +#, python-brace-format msgid "Ensure this field has at least {min_length} characters." -msgstr "" +msgstr "請確認此欄位字元長度最少超過 {min_length}。" -#: fields.py:713 +#: fields.py:816 msgid "Enter a valid email address." -msgstr "" +msgstr "請輸入有效的電子郵件地址。" -#: fields.py:724 +#: fields.py:827 msgid "This value does not match the required pattern." msgstr "" -#: fields.py:735 +#: fields.py:838 msgid "" "Enter a valid \"slug\" consisting of letters, numbers, underscores or " "hyphens." msgstr "" -#: fields.py:747 +#: fields.py:839 +msgid "" +"Enter a valid \"slug\" consisting of Unicode letters, numbers, underscores, " +"or hyphens." +msgstr "" + +#: fields.py:854 msgid "Enter a valid URL." +msgstr "請輸入有效的URL。" + +#: fields.py:867 +msgid "Must be a valid UUID." msgstr "" -#: fields.py:760 -msgid "\"{value}\" is not a valid UUID." -msgstr "" - -#: fields.py:796 +#: fields.py:903 msgid "Enter a valid IPv4 or IPv6 address." -msgstr "" +msgstr "請輸入有效的 IPv4 或 IPv6 地址。" -#: fields.py:821 +#: fields.py:931 msgid "A valid integer is required." -msgstr "" +msgstr "請輸入有效的整數值。" -#: fields.py:822 fields.py:857 fields.py:891 +#: fields.py:932 fields.py:969 fields.py:1005 fields.py:1366 +#, python-brace-format msgid "Ensure this value is less than or equal to {max_value}." -msgstr "" +msgstr "請確認輸入值小於或等於 {max_value}。" -#: fields.py:823 fields.py:858 fields.py:892 +#: fields.py:933 fields.py:970 fields.py:1006 fields.py:1367 +#, python-brace-format msgid "Ensure this value is greater than or equal to {min_value}." -msgstr "" +msgstr "請確認輸入值大於或等於 {min_value}。" -#: fields.py:824 fields.py:859 fields.py:896 +#: fields.py:934 fields.py:971 fields.py:1010 msgid "String value too large." -msgstr "" +msgstr "字串長度太長。" -#: fields.py:856 fields.py:890 +#: fields.py:968 fields.py:1004 msgid "A valid number is required." -msgstr "" +msgstr "請輸入有效的數字。" -#: fields.py:893 +#: fields.py:1007 +#, python-brace-format msgid "Ensure that there are no more than {max_digits} digits in total." msgstr "" -#: fields.py:894 +#: fields.py:1008 +#, python-brace-format msgid "" "Ensure that there are no more than {max_decimal_places} decimal places." msgstr "" -#: fields.py:895 +#: fields.py:1009 +#, python-brace-format msgid "" "Ensure that there are no more than {max_whole_digits} digits before the " "decimal point." msgstr "" -#: fields.py:1025 +#: fields.py:1148 +#, python-brace-format msgid "Datetime has wrong format. Use one of these formats instead: {format}." msgstr "" -#: fields.py:1026 +#: fields.py:1149 msgid "Expected a datetime but got a date." +msgstr "應該為日期時間格式,並非日期格式。" + +#: fields.py:1150 +#, python-brace-format +msgid "Invalid datetime for the timezone \"{timezone}\"." msgstr "" -#: fields.py:1103 +#: fields.py:1151 +msgid "Datetime value out of range." +msgstr "" + +#: fields.py:1236 +#, python-brace-format msgid "Date has wrong format. Use one of these formats instead: {format}." msgstr "" -#: fields.py:1104 +#: fields.py:1237 msgid "Expected a date but got a datetime." -msgstr "" +msgstr "應該為日期格式,並非日期時間格式。" -#: fields.py:1170 +#: fields.py:1303 +#, python-brace-format msgid "Time has wrong format. Use one of these formats instead: {format}." -msgstr "" +msgstr "時間格式錯誤,請在下列格式中擇一取代:{format}。" -#: fields.py:1232 +#: fields.py:1365 +#, python-brace-format msgid "Duration has wrong format. Use one of these formats instead: {format}." msgstr "" -#: fields.py:1251 fields.py:1300 +#: fields.py:1399 fields.py:1456 +#, python-brace-format msgid "\"{input}\" is not a valid choice." -msgstr "" +msgstr "\"{input}\" 不是有效的選擇。" -#: fields.py:1254 relations.py:71 relations.py:441 +#: fields.py:1402 +#, python-brace-format msgid "More than {count} items..." -msgstr "" +msgstr "超過 {count} 個項目..." -#: fields.py:1301 fields.py:1448 relations.py:437 serializers.py:524 +#: fields.py:1457 fields.py:1603 relations.py:485 serializers.py:570 +#, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." -msgstr "" +msgstr "應該為項目組成的列表,並非 \"{input_type}\" 類型。" -#: fields.py:1302 +#: fields.py:1458 msgid "This selection may not be empty." -msgstr "" +msgstr "此選項不可為空。" -#: fields.py:1339 +#: fields.py:1495 +#, python-brace-format msgid "\"{input}\" is not a valid path choice." msgstr "" -#: fields.py:1358 +#: fields.py:1514 msgid "No file was submitted." -msgstr "" +msgstr "沒有任何檔案被提交。" -#: fields.py:1359 +#: fields.py:1515 msgid "" "The submitted data was not a file. Check the encoding type on the form." -msgstr "" +msgstr "提交的資料並不是檔案格式,請確認表單的編碼類型。" -#: fields.py:1360 +#: fields.py:1516 msgid "No filename could be determined." msgstr "" -#: fields.py:1361 +#: fields.py:1517 msgid "The submitted file is empty." -msgstr "" +msgstr "沒有任何檔案被提交。" -#: fields.py:1362 +#: fields.py:1518 +#, python-brace-format msgid "" "Ensure this filename has at most {max_length} characters (it has {length})." msgstr "" -#: fields.py:1410 +#: fields.py:1566 msgid "" "Upload a valid image. The file you uploaded was either not an image or a " "corrupted image." msgstr "" -#: fields.py:1449 relations.py:438 serializers.py:525 +#: fields.py:1604 relations.py:486 serializers.py:571 msgid "This list may not be empty." +msgstr "此列表不可為空。" + +#: fields.py:1605 +#, python-brace-format +msgid "Ensure this field has at least {min_length} elements." msgstr "" -#: fields.py:1502 +#: fields.py:1606 +#, python-brace-format +msgid "Ensure this field has no more than {max_length} elements." +msgstr "" + +#: fields.py:1682 +#, python-brace-format msgid "Expected a dictionary of items but got type \"{input_type}\"." msgstr "" -#: fields.py:1549 +#: fields.py:1683 +msgid "This dictionary may not be empty." +msgstr "" + +#: fields.py:1755 msgid "Value must be valid JSON." +msgstr "輸入值必須為有效的JSON。" + +#: filters.py:49 templates/rest_framework/filters/search.html:2 +msgid "Search" +msgstr "搜尋" + +#: filters.py:50 +msgid "A search term." msgstr "" -#: filters.py:36 templates/rest_framework/filters/django_filter.html:5 -msgid "Submit" +#: filters.py:180 templates/rest_framework/filters/ordering.html:3 +msgid "Ordering" +msgstr "排序" + +#: filters.py:181 +msgid "Which field to use when ordering the results." msgstr "" -#: filters.py:336 +#: filters.py:287 msgid "ascending" -msgstr "" +msgstr "升序排列" -#: filters.py:337 +#: filters.py:288 msgid "descending" +msgstr "降序排列" + +#: pagination.py:174 +msgid "A page number within the paginated result set." msgstr "" -#: pagination.py:193 +#: pagination.py:179 pagination.py:372 pagination.py:590 +msgid "Number of results to return per page." +msgstr "" + +#: pagination.py:189 msgid "Invalid page." +msgstr "無效的頁面。" + +#: pagination.py:374 +msgid "The initial index from which to return the results." msgstr "" -#: pagination.py:427 +#: pagination.py:581 +msgid "The pagination cursor value." +msgstr "" + +#: pagination.py:583 msgid "Invalid cursor" msgstr "" -#: relations.py:207 +#: relations.py:246 +#, python-brace-format msgid "Invalid pk \"{pk_value}\" - object does not exist." -msgstr "" +msgstr "無效的主鍵 \"{pk_value}\" - 物件不存在。" -#: relations.py:208 +#: relations.py:247 +#, python-brace-format msgid "Incorrect type. Expected pk value, received {data_type}." msgstr "" -#: relations.py:240 +#: relations.py:280 msgid "Invalid hyperlink - No URL match." -msgstr "" +msgstr "無效的超連結 - 沒有匹配的URL。" -#: relations.py:241 +#: relations.py:281 msgid "Invalid hyperlink - Incorrect URL match." -msgstr "" +msgstr "無效的超連結 - 匹配的URL不正確。" -#: relations.py:242 +#: relations.py:282 msgid "Invalid hyperlink - Object does not exist." -msgstr "" +msgstr "無效的超連結 - 物件不存在。" -#: relations.py:243 +#: relations.py:283 +#, python-brace-format msgid "Incorrect type. Expected URL string, received {data_type}." msgstr "" -#: relations.py:401 +#: relations.py:448 +#, python-brace-format msgid "Object with {slug_name}={value} does not exist." msgstr "" -#: relations.py:402 +#: relations.py:449 msgid "Invalid value." +msgstr "無效值。" + +#: schemas/utils.py:32 +msgid "unique integer value" msgstr "" -#: serializers.py:326 -msgid "Invalid data. Expected a dictionary, but got {datatype}." +#: schemas/utils.py:34 +msgid "UUID string" msgstr "" +#: schemas/utils.py:36 +msgid "unique value" +msgstr "" + +#: schemas/utils.py:38 +#, python-brace-format +msgid "A {value_type} identifying this {name}." +msgstr "" + +#: serializers.py:337 +#, python-brace-format +msgid "Invalid data. Expected a dictionary, but got {datatype}." +msgstr "無效的資料,應該為字典類型,並非 {datatype}。" + #: templates/rest_framework/admin.html:116 -#: templates/rest_framework/base.html:128 +#: templates/rest_framework/base.html:136 +msgid "Extra Actions" +msgstr "" + +#: templates/rest_framework/admin.html:130 +#: templates/rest_framework/base.html:150 msgid "Filters" +msgstr "篩選" + +#: templates/rest_framework/base.html:37 +msgid "navbar" msgstr "" -#: templates/rest_framework/filters/django_filter.html:2 -#: templates/rest_framework/filters/django_filter_crispyforms.html:4 -msgid "Field filters" +#: templates/rest_framework/base.html:75 +msgid "content" msgstr "" -#: templates/rest_framework/filters/ordering.html:3 -msgid "Ordering" +#: templates/rest_framework/base.html:78 +msgid "request form" msgstr "" -#: templates/rest_framework/filters/search.html:2 -msgid "Search" +#: templates/rest_framework/base.html:157 +msgid "main content" msgstr "" -#: templates/rest_framework/horizontal/radio.html:2 -#: templates/rest_framework/inline/radio.html:2 -#: templates/rest_framework/vertical/radio.html:2 +#: templates/rest_framework/base.html:173 +msgid "request info" +msgstr "" + +#: templates/rest_framework/base.html:177 +msgid "response info" +msgstr "" + +#: templates/rest_framework/horizontal/radio.html:4 +#: templates/rest_framework/inline/radio.html:3 +#: templates/rest_framework/vertical/radio.html:3 msgid "None" -msgstr "" +msgstr "無" -#: templates/rest_framework/horizontal/select_multiple.html:2 -#: templates/rest_framework/inline/select_multiple.html:2 -#: templates/rest_framework/vertical/select_multiple.html:2 +#: templates/rest_framework/horizontal/select_multiple.html:4 +#: templates/rest_framework/inline/select_multiple.html:3 +#: templates/rest_framework/vertical/select_multiple.html:3 msgid "No items to select." msgstr "" -#: validators.py:43 +#: validators.py:39 msgid "This field must be unique." -msgstr "" +msgstr "此欄位必須唯一。" -#: validators.py:97 +#: validators.py:89 +#, python-brace-format msgid "The fields {field_names} must make a unique set." msgstr "" -#: validators.py:245 +#: validators.py:171 +#, python-brace-format +msgid "Surrogate characters are not allowed: U+{code_point:X}." +msgstr "" + +#: validators.py:243 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" date." msgstr "" -#: validators.py:260 +#: validators.py:258 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" month." msgstr "" -#: validators.py:273 +#: validators.py:271 +#, python-brace-format msgid "This field must be unique for the \"{date_field}\" year." msgstr "" -#: versioning.py:42 +#: versioning.py:40 msgid "Invalid version in \"Accept\" header." msgstr "" -#: versioning.py:73 +#: versioning.py:71 msgid "Invalid version in URL path." msgstr "" -#: versioning.py:115 +#: versioning.py:116 msgid "Invalid version in URL path. Does not match any version namespace." msgstr "" -#: versioning.py:147 +#: versioning.py:148 msgid "Invalid version in hostname." msgstr "" -#: versioning.py:169 +#: versioning.py:170 msgid "Invalid version in query parameter." msgstr "" - -#: views.py:88 -msgid "Permission denied." -msgstr "" From 9c29f5013f2741b215d537d12f7a6ddecda5677e Mon Sep 17 00:00:00 2001 From: Jon Dufresne Date: Sun, 1 Nov 2020 07:42:30 -0800 Subject: [PATCH 59/66] Use Python 3.9 release in Travis configuration --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 2c2724bf6..7a820766e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -21,8 +21,8 @@ matrix: - { python: "3.8", env: DJANGO=3.1 } - { python: "3.8", env: DJANGO=master } - - { python: "3.9-dev", env: DJANGO=3.1 } - - { python: "3.9-dev", env: DJANGO=master } + - { python: "3.9", env: DJANGO=3.1 } + - { python: "3.9", env: DJANGO=master } - { python: "3.8", env: TOXENV=base } - { python: "3.8", env: TOXENV=lint } From 56e45081235783812f90098916a6e0131b08bbaa Mon Sep 17 00:00:00 2001 From: "James S Blachly, MD" Date: Mon, 2 Nov 2020 03:45:43 -0500 Subject: [PATCH 60/66] Fix #7612 (#7622) --- docs/api-guide/viewsets.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/api-guide/viewsets.md b/docs/api-guide/viewsets.md index 22cc3d8aa..d5815127b 100644 --- a/docs/api-guide/viewsets.md +++ b/docs/api-guide/viewsets.md @@ -152,7 +152,7 @@ A more complete example of extra actions: user = self.get_object() serializer = PasswordSerializer(data=request.data) if serializer.is_valid(): - user.set_password(serializer.data['password']) + user.set_password(serializer.validated_data['password']) user.save() return Response({'status': 'password set'}) else: From 606df838856bd3fe2c2a76bead15a8fb7234479e Mon Sep 17 00:00:00 2001 From: Megan Gross <16373770+144mdgross@users.noreply.github.com> Date: Thu, 5 Nov 2020 01:43:45 -0700 Subject: [PATCH 61/66] Update throttling.md (#7606) There were recent updates to the `@action` decorator calling a little more attention to the kwargs it accepts. I thought it would be useful to also provide an example in the throttling section of how those kwargs can be used to define/override throttle_classes through the action decorator as well. --- docs/api-guide/throttling.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/docs/api-guide/throttling.md b/docs/api-guide/throttling.md index 215c735bf..a3e42cacf 100644 --- a/docs/api-guide/throttling.md +++ b/docs/api-guide/throttling.md @@ -59,7 +59,7 @@ using the `APIView` class-based views. } return Response(content) -Or, if you're using the `@api_view` decorator with function based views. +If you're using the `@api_view` decorator with function based views you can use the following decorator. @api_view(['GET']) @throttle_classes([UserRateThrottle]) @@ -69,6 +69,16 @@ Or, if you're using the `@api_view` decorator with function based views. } return Response(content) +It's also possible to set throttle classes for routes that are created using the `@action` decorator. +Throttle classes set in this way will override any viewset level class settings. + + @action(detail=True, methods=["post"], throttle_classes=[UserRateThrottle]) + def example_adhoc_method(request, pk=None): + content = { + 'status': 'request was permitted' + } + return Response(content) + ## How clients are identified The `X-Forwarded-For` HTTP header and `REMOTE_ADDR` WSGI variable are used to uniquely identify client IP addresses for throttling. If the `X-Forwarded-For` header is present then it will be used, otherwise the value of the `REMOTE_ADDR` variable from the WSGI environment will be used. From 80444a0afb1c05b4c85a34de2bc6c3f9614bdc86 Mon Sep 17 00:00:00 2001 From: bhealy-indeed <62403057+bhealy-indeed@users.noreply.github.com> Date: Thu, 5 Nov 2020 15:21:30 -0600 Subject: [PATCH 62/66] nit: Typo fix (#7629) --- docs/api-guide/exceptions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/api-guide/exceptions.md b/docs/api-guide/exceptions.md index d7d73a2f2..fbf3097e0 100644 --- a/docs/api-guide/exceptions.md +++ b/docs/api-guide/exceptions.md @@ -38,7 +38,7 @@ Might receive an error response indicating that the `DELETE` method is not allow Validation errors are handled slightly differently, and will include the field names as the keys in the response. If the validation error was not specific to a particular field then it will use the "non_field_errors" key, or whatever string value has been set for the `NON_FIELD_ERRORS_KEY` setting. -Any example validation error might look like this: +An example validation error might look like this: HTTP/1.1 400 Bad Request Content-Type: application/json From 6da94e5700dd505f0fe2d9f376fbc212d02febc2 Mon Sep 17 00:00:00 2001 From: Georg Lukas Date: Thu, 12 Nov 2020 09:48:18 +0100 Subject: [PATCH 63/66] docs: outline the difference between JSON and form parsers. Fix #7633 --- docs/api-guide/parsers.md | 2 +- docs/api-guide/requests.md | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/api-guide/parsers.md b/docs/api-guide/parsers.md index e8f03de8b..dde77c3e0 100644 --- a/docs/api-guide/parsers.md +++ b/docs/api-guide/parsers.md @@ -73,7 +73,7 @@ Or, if you're using the `@api_view` decorator with function based views. ## JSONParser -Parses `JSON` request content. +Parses `JSON` request content. `request.data` will be populated with a dictionary of data. **.media_type**: `application/json` diff --git a/docs/api-guide/requests.md b/docs/api-guide/requests.md index 1c336953c..e877c868d 100644 --- a/docs/api-guide/requests.md +++ b/docs/api-guide/requests.md @@ -23,7 +23,7 @@ REST framework's Request objects provide flexible request parsing that allows yo * It includes all parsed content, including *file and non-file* inputs. * It supports parsing the content of HTTP methods other than `POST`, meaning that you can access the content of `PUT` and `PATCH` requests. -* It supports REST framework's flexible request parsing, rather than just supporting form data. For example you can handle incoming JSON data in the same way that you handle incoming form data. +* It supports REST framework's flexible request parsing, rather than just supporting form data. For example you can handle incoming [JSON data] similarly to how you handle incoming [form data]. For more details see the [parsers documentation]. @@ -136,5 +136,7 @@ Note that due to implementation reasons the `Request` class does not inherit fro [cite]: https://groups.google.com/d/topic/django-developers/dxI4qVzrBY4/discussion [parsers documentation]: parsers.md +[JSON data]: parsers.md#jsonparser +[form data]: parsers.md#formparser [authentication documentation]: authentication.md [browser enhancements documentation]: ../topics/browser-enhancements.md From 96993d817a6af9c037ece7253cfae49efc814f49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karol=20Ony=C5=9Bko?= Date: Thu, 12 Nov 2020 18:42:42 +0100 Subject: [PATCH 64/66] Changed url to django docs so it points to the stable version (#7628) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Karol Onyśko --- docs/api-guide/relations.md | 2 +- docs/topics/internationalization.md | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/api-guide/relations.md b/docs/api-guide/relations.md index d3d8b30b8..f444125cf 100644 --- a/docs/api-guide/relations.md +++ b/docs/api-guide/relations.md @@ -603,6 +603,6 @@ The [rest-framework-generic-relations][drf-nested-relations] library provides re [generic-relations]: https://docs.djangoproject.com/en/stable/ref/contrib/contenttypes/#id1 [drf-nested-routers]: https://github.com/alanjds/drf-nested-routers [drf-nested-relations]: https://github.com/Ian-Foote/rest-framework-generic-relations -[django-intermediary-manytomany]: https://docs.djangoproject.com/en/2.2/topics/db/models/#intermediary-manytomany +[django-intermediary-manytomany]: https://docs.djangoproject.com/en/stable/topics/db/models/#intermediary-manytomany [dealing-with-nested-objects]: https://www.django-rest-framework.org/api-guide/serializers/#dealing-with-nested-objects [to_internal_value]: https://www.django-rest-framework.org/api-guide/serializers/#to_internal_valueself-data diff --git a/docs/topics/internationalization.md b/docs/topics/internationalization.md index 7cfc6e247..c20cf9e33 100644 --- a/docs/topics/internationalization.md +++ b/docs/topics/internationalization.md @@ -103,10 +103,10 @@ You can find more information on how the language preference is determined in th For API clients the most appropriate of these will typically be to use the `Accept-Language` header; Sessions and cookies will not be available unless using session authentication, and generally better practice to prefer an `Accept-Language` header for API clients rather than using language URL prefixes. [cite]: https://youtu.be/Wa0VfS2q94Y -[django-translation]: https://docs.djangoproject.com/en/1.7/topics/i18n/translation +[django-translation]: https://docs.djangoproject.com/en/stable/topics/i18n/translation [custom-exception-handler]: ../api-guide/exceptions.md#custom-exception-handling [transifex-project]: https://www.transifex.com/projects/p/django-rest-framework/ [django-po-source]: https://raw.githubusercontent.com/encode/django-rest-framework/master/rest_framework/locale/en_US/LC_MESSAGES/django.po -[django-language-preference]: https://docs.djangoproject.com/en/1.7/topics/i18n/translation/#how-django-discovers-language-preference -[django-locale-paths]: https://docs.djangoproject.com/en/1.7/ref/settings/#std:setting-LOCALE_PATHS -[django-locale-name]: https://docs.djangoproject.com/en/1.7/topics/i18n/#term-locale-name +[django-language-preference]: https://docs.djangoproject.com/en/stable/topics/i18n/translation/#how-django-discovers-language-preference +[django-locale-paths]: https://docs.djangoproject.com/en/stable/ref/settings/#std:setting-LOCALE_PATHS +[django-locale-name]: https://docs.djangoproject.com/en/stable/topics/i18n/#term-locale-name From 3ab8d4706eb6c04b331ca4d57778a1989c668f2f Mon Sep 17 00:00:00 2001 From: babaroga Date: Sat, 21 Nov 2020 11:53:39 -0500 Subject: [PATCH 65/66] changed unicode to str --- docs/api-guide/authentication.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/api-guide/authentication.md b/docs/api-guide/authentication.md index 5878040a4..da932a06c 100644 --- a/docs/api-guide/authentication.md +++ b/docs/api-guide/authentication.md @@ -60,8 +60,8 @@ using the `APIView` class-based views. def get(self, request, format=None): content = { - 'user': unicode(request.user), # `django.contrib.auth.User` instance. - 'auth': unicode(request.auth), # None + 'user': str(request.user), # `django.contrib.auth.User` instance. + 'auth': str(request.auth), # None } return Response(content) @@ -72,8 +72,8 @@ Or, if you're using the `@api_view` decorator with function based views. @permission_classes([IsAuthenticated]) def example_view(request, format=None): content = { - 'user': unicode(request.user), # `django.contrib.auth.User` instance. - 'auth': unicode(request.auth), # None + 'user': str(request.user), # `django.contrib.auth.User` instance. + 'auth': str(request.auth), # None } return Response(content) From bb133522efaf6ce3ae8fdf1dec6cd79566cfd166 Mon Sep 17 00:00:00 2001 From: Erwin Junge Date: Sun, 22 Nov 2020 09:33:17 +0100 Subject: [PATCH 66/66] Small documentation fix --- docs/api-guide/serializers.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/api-guide/serializers.md b/docs/api-guide/serializers.md index fd5dbb0e6..f05fe7e7e 100644 --- a/docs/api-guide/serializers.md +++ b/docs/api-guide/serializers.md @@ -282,7 +282,7 @@ If a nested representation may optionally accept the `None` value you should pas content = serializers.CharField(max_length=200) created = serializers.DateTimeField() -Similarly if a nested representation should be a list of items, you should pass the `many=True` flag to the nested serialized. +Similarly if a nested representation should be a list of items, you should pass the `many=True` flag to the nested serializer. class CommentSerializer(serializers.Serializer): user = UserSerializer(required=False)