From e96b8e49cd0a3392cfc67615d91b4914c2f65599 Mon Sep 17 00:00:00 2001 From: Carlton Gibson Date: Fri, 28 Mar 2025 13:56:54 +0100 Subject: [PATCH 1/6] Drop Python 3.8 as EOL (#9670) Thanks to Bruno Alla for review. Co-authored-by: Asif Saif Uddin --- .github/workflows/main.yml | 1 - README.md | 2 +- docs/index.md | 2 +- setup.py | 5 ++--- tox.ini | 2 +- 5 files changed, 5 insertions(+), 7 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index cfa4bdc44..fe31e727a 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -14,7 +14,6 @@ jobs: strategy: matrix: python-version: - - '3.8' - '3.9' - '3.10' - '3.11' diff --git a/README.md b/README.md index 95fb1b012..be6619b4e 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,7 @@ Some reasons you might want to use REST framework: # Requirements -* Python 3.8+ +* Python 3.9+ * Django 4.2, 5.0, 5.1, 5.2 We **highly recommend** and only officially support the latest patch release of diff --git a/docs/index.md b/docs/index.md index 2638b05fa..d590d2c04 100644 --- a/docs/index.md +++ b/docs/index.md @@ -88,7 +88,7 @@ continued development by **[signing up for a paid plan][funding]**. REST framework requires the following: * Django (4.2, 5.0, 5.1, 5.2) -* Python (3.8, 3.9, 3.10, 3.11, 3.12, 3.13) +* Python (3.9, 3.10, 3.11, 3.12, 3.13) 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 f80dcff2c..952b5f50a 100755 --- a/setup.py +++ b/setup.py @@ -6,7 +6,7 @@ import sys from setuptools import find_packages, setup CURRENT_PYTHON = sys.version_info[:2] -REQUIRED_PYTHON = (3, 8) +REQUIRED_PYTHON = (3, 9) # This check and everything above must remain compatible with Python 2.7. if CURRENT_PYTHON < REQUIRED_PYTHON: @@ -82,7 +82,7 @@ setup( packages=find_packages(exclude=['tests*']), include_package_data=True, install_requires=["django>=4.2", 'backports.zoneinfo;python_version<"3.9"'], - python_requires=">=3.8", + python_requires=">=3.9", zip_safe=False, classifiers=[ 'Development Status :: 5 - Production/Stable', @@ -97,7 +97,6 @@ setup( 'Operating System :: OS Independent', 'Programming Language :: Python', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', 'Programming Language :: Python :: 3.11', diff --git a/tox.ini b/tox.ini index b0bd54219..032d4a18e 100644 --- a/tox.ini +++ b/tox.ini @@ -1,6 +1,6 @@ [tox] envlist = - {py38,py39}-{django42} + {py39}-{django42} {py310}-{django42,django51,django52,djangomain} {py311}-{django42,django51,django52,djangomain} {py312}-{django42,django51,django52,djangomain} From ac50cec76c9fae76a01931d748e69d003dd79b94 Mon Sep 17 00:00:00 2001 From: Bruno Alla Date: Fri, 28 Mar 2025 14:16:33 +0000 Subject: [PATCH 2/6] Prepare v3.16, release notes, and announcement. (#9671) * Start drafting release notes from 3.16 (Generated from GitHub) * Reformat changes and split into sections * Format GitHub PRs links for the docs * Link new contributors in Markdown format * Write up 3.16 announcement * Bump version * Add entry for removed Python 3.8 support * Update release date to 28/03 * Minor rewording * Add 3.16 announcement to the navbar and link to docs --- docs/community/3.16-announcement.md | 42 +++++++++++++++ docs/community/release-notes.md | 84 +++++++++++++++++++++++++++++ mkdocs.yml | 1 + rest_framework/__init__.py | 2 +- 4 files changed, 128 insertions(+), 1 deletion(-) create mode 100644 docs/community/3.16-announcement.md diff --git a/docs/community/3.16-announcement.md b/docs/community/3.16-announcement.md new file mode 100644 index 000000000..b8f460ae7 --- /dev/null +++ b/docs/community/3.16-announcement.md @@ -0,0 +1,42 @@ + + +# Django REST framework 3.16 + +At the Internet, on March 28th, 2025, we are happy to announce the release of Django REST framework 3.16. + +## Updated Django and Python support + +The latest release now fully supports Django 5.1 and the upcoming 5.2 LTS as well as Python 3.13. + +The current minimum versions of Django is now 4.2 and Python 3.9. + +## Django LoginRequiredMiddleware + +The new `LoginRequiredMiddleware` introduced by Django 5.1 can now be used alongside Django REST Framework, however it is not honored for API views as an equivalent behaviour can be configured via `DEFAULT_AUTHENTICATION_CLASSES`. See [our dedicated section](../api-guide/authentication.md#django-51-loginrequiredmiddleware) in the docs for more information. + +## Improved support for UniqueConstraint + +The generation of validators for [UniqueConstraint](https://docs.djangoproject.com/en/stable/ref/models/constraints/#uniqueconstraint) has been improved to support better nullable fields and constraints with conditions. + +## Other fixes and improvements + +There are a number of fixes and minor improvements in this release, ranging from documentation, internal infrastructure (typing, testing, requirements, deprecation, etc.), security and overall behaviour. + +See the [release notes](release-notes.md) page for a complete listing. diff --git a/docs/community/release-notes.md b/docs/community/release-notes.md index 5742e9469..c7b82e985 100644 --- a/docs/community/release-notes.md +++ b/docs/community/release-notes.md @@ -36,6 +36,90 @@ You can determine your currently installed version using `pip show`: --- +## 3.16.x series + +### 3.16.0 + +**Date**: 28th March 2025 + +This release is considered a significant release to improve upstream support with Django and Python. Some of these may change the behaviour of existing features and pre-existing behaviour. Specifically, some fixes were added to around the support of `UniqueConstraint` with nullable fields which will improve built-in serializer validation. + +## Features + +* Add official support for Django 5.1 and its new `LoginRequiredMiddleware` in [#9514](https://github.com/encode/django-rest-framework/pull/9514) and [#9657](https://github.com/encode/django-rest-framework/pull/9657) +* Add official Django 5.2a1 support in [#9634](https://github.com/encode/django-rest-framework/pull/9634) +* Add support for Python 3.13 in [#9527](https://github.com/encode/django-rest-framework/pull/9527) and [#9556](https://github.com/encode/django-rest-framework/pull/9556) +* Support Django 2.1+ test client JSON data automatically serialized in [#6511](https://github.com/encode/django-rest-framework/pull/6511) and fix a regression in [#9615](https://github.com/encode/django-rest-framework/pull/9615) + +## Bug fixes + +* Fix unique together validator to respect condition's fields from `UniqueConstraint` in [#9360](https://github.com/encode/django-rest-framework/pull/9360) +* Fix raising on nullable fields part of `UniqueConstraint` in [#9531](https://github.com/encode/django-rest-framework/pull/9531) +* Fix `unique_together` validation with source in [#9482](https://github.com/encode/django-rest-framework/pull/9482) +* Added protections to `AttributeError` raised within properties in [#9455](https://github.com/encode/django-rest-framework/pull/9455) +* Fix `get_template_context` to handle also lists in [#9467](https://github.com/encode/django-rest-framework/pull/9467) +* Fix "Converter is already registered" deprecation warning. in [#9512](https://github.com/encode/django-rest-framework/pull/9512) +* Fix noisy warning and accept integers as min/max values of `DecimalField` in [#9515](https://github.com/encode/django-rest-framework/pull/9515) +* Fix usages of `open()` in `setup.py` in [#9661](https://github.com/encode/django-rest-framework/pull/9661) + +## Translations + +* Add some missing Chinese translations in [#9505](https://github.com/encode/django-rest-framework/pull/9505) +* Fix spelling mistakes in Farsi language were corrected in [#9521](https://github.com/encode/django-rest-framework/pull/9521) +* Fixing and adding missing Brazilian Portuguese translations in [#9535](https://github.com/encode/django-rest-framework/pull/9535) + +## Removals + +* Remove support for Python 3.8 in [#9670](https://github.com/encode/django-rest-framework/pull/9670) +* Remove long deprecated code from request wrapper in [#9441](https://github.com/encode/django-rest-framework/pull/9441) +* Remove deprecated `AutoSchema._get_reference` method in [#9525](https://github.com/encode/django-rest-framework/pull/9525) + +## Documentation and internal changes + +* Provide tests for hashing of `OperandHolder` in [#9437](https://github.com/encode/django-rest-framework/pull/9437) +* Update documentation: Add `adrf` third party package in [#9198](https://github.com/encode/django-rest-framework/pull/9198) +* Update tutorials links in Community contributions docs in [#9476](https://github.com/encode/django-rest-framework/pull/9476) +* Fix usage of deprecated Django function in example from docs in [#9509](https://github.com/encode/django-rest-framework/pull/9509) +* Move path converter docs into a separate section in [#9524](https://github.com/encode/django-rest-framework/pull/9524) +* Add test covering update view without `queryset` attribute in [#9528](https://github.com/encode/django-rest-framework/pull/9528) +* Fix Transifex link in [#9541](https://github.com/encode/django-rest-framework/pull/9541) +* Fix example `httpie` call in docs in [#9543](https://github.com/encode/django-rest-framework/pull/9543) +* Fix example for serializer field with choices in docs in [#9563](https://github.com/encode/django-rest-framework/pull/9563) +* Remove extra `<>` in validators example in [#9590](https://github.com/encode/django-rest-framework/pull/9590) +* Update `strftime` link in the docs in [#9624](https://github.com/encode/django-rest-framework/pull/9624) +* Switch to codecov GHA in [#9618](https://github.com/encode/django-rest-framework/pull/9618) +* Add note regarding availability of the `action` attribute in 'Introspecting ViewSet actions' docs section in [#9633](https://github.com/encode/django-rest-framework/pull/9633) +* Improved description of allowed throttling rates in documentation in [#9640](https://github.com/encode/django-rest-framework/pull/9640) +* Add `rest-framework-gm2m-relations` package to the list of 3rd party libraries in [#9063](https://github.com/encode/django-rest-framework/pull/9063) +* Fix a number of typos in the test suite in the docs in [#9662](https://github.com/encode/django-rest-framework/pull/9662) +* Add `django-pyoidc` as a third party authentication library in [#9667](https://github.com/encode/django-rest-framework/pull/9667) + +## New Contributors + +* [`@maerteijn`](https://github.com/maerteijn) made their first contribution in [#9198](https://github.com/encode/django-rest-framework/pull/9198) +* [`@FraCata00`](https://github.com/FraCata00) made their first contribution in [#9444](https://github.com/encode/django-rest-framework/pull/9444) +* [`@AlvaroVega`](https://github.com/AlvaroVega) made their first contribution in [#9451](https://github.com/encode/django-rest-framework/pull/9451) +* [`@james`](https://github.com/james)-mchugh made their first contribution in [#9455](https://github.com/encode/django-rest-framework/pull/9455) +* [`@ifeanyidavid`](https://github.com/ifeanyidavid) made their first contribution in [#9479](https://github.com/encode/django-rest-framework/pull/9479) +* [`@p`](https://github.com/p)-schlickmann made their first contribution in [#9480](https://github.com/encode/django-rest-framework/pull/9480) +* [`@akkuman`](https://github.com/akkuman) made their first contribution in [#9505](https://github.com/encode/django-rest-framework/pull/9505) +* [`@rafaelgramoschi`](https://github.com/rafaelgramoschi) made their first contribution in [#9509](https://github.com/encode/django-rest-framework/pull/9509) +* [`@Sinaatkd`](https://github.com/Sinaatkd) made their first contribution in [#9521](https://github.com/encode/django-rest-framework/pull/9521) +* [`@gtkacz`](https://github.com/gtkacz) made their first contribution in [#9535](https://github.com/encode/django-rest-framework/pull/9535) +* [`@sliverc`](https://github.com/sliverc) made their first contribution in [#9556](https://github.com/encode/django-rest-framework/pull/9556) +* [`@gabrielromagnoli1987`](https://github.com/gabrielromagnoli1987) made their first contribution in [#9543](https://github.com/encode/django-rest-framework/pull/9543) +* [`@cheehong1030`](https://github.com/cheehong1030) made their first contribution in [#9563](https://github.com/encode/django-rest-framework/pull/9563) +* [`@amansharma612`](https://github.com/amansharma612) made their first contribution in [#9590](https://github.com/encode/django-rest-framework/pull/9590) +* [`@Gluroda`](https://github.com/Gluroda) made their first contribution in [#9616](https://github.com/encode/django-rest-framework/pull/9616) +* [`@deepakangadi`](https://github.com/deepakangadi) made their first contribution in [#9624](https://github.com/encode/django-rest-framework/pull/9624) +* [`@EXG1O`](https://github.com/EXG1O) made their first contribution in [#9633](https://github.com/encode/django-rest-framework/pull/9633) +* [`@decadenza`](https://github.com/decadenza) made their first contribution in [#9640](https://github.com/encode/django-rest-framework/pull/9640) +* [`@mojtabaakbari221b`](https://github.com/mojtabaakbari221b) made their first contribution in [#9063](https://github.com/encode/django-rest-framework/pull/9063) +* [`@mikemanger`](https://github.com/mikemanger) made their first contribution in [#9661](https://github.com/encode/django-rest-framework/pull/9661) +* [`@gbip`](https://github.com/gbip) made their first contribution in [#9667](https://github.com/encode/django-rest-framework/pull/9667) + +**Full Changelog**: https://github.com/encode/django-rest-framework/compare/3.15.2...3.16.0 + ## 3.15.x series ### 3.15.2 diff --git a/mkdocs.yml b/mkdocs.yml index a031dd69b..010aaefe2 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.16 Announcement': 'community/3.16-announcement.md' - '3.15 Announcement': 'community/3.15-announcement.md' - '3.14 Announcement': 'community/3.14-announcement.md' - '3.13 Announcement': 'community/3.13-announcement.md' diff --git a/rest_framework/__init__.py b/rest_framework/__init__.py index e33bfa99d..692ce9cb1 100644 --- a/rest_framework/__init__.py +++ b/rest_framework/__init__.py @@ -8,7 +8,7 @@ ______ _____ _____ _____ __ """ __title__ = 'Django REST framework' -__version__ = '3.15.2' +__version__ = '3.16.0' __author__ = 'Tom Christie' __license__ = 'BSD 3-Clause' __copyright__ = 'Copyright 2011-2023 Encode OSS Ltd' From 6f274ab862409ee6e5d292727ebbea98abe67780 Mon Sep 17 00:00:00 2001 From: Matheus Oliveira <31555284+araggohnxd@users.noreply.github.com> Date: Mon, 31 Mar 2025 06:43:53 -0300 Subject: [PATCH 3/6] Fix some typos in pt_BR translations (#9673) --- .../locale/pt_BR/LC_MESSAGES/django.mo | Bin 10397 -> 12750 bytes .../locale/pt_BR/LC_MESSAGES/django.po | 25 +++++++++--------- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/rest_framework/locale/pt_BR/LC_MESSAGES/django.mo b/rest_framework/locale/pt_BR/LC_MESSAGES/django.mo index 5a6e3788e651dfed18d4d5cb4efe1ab658b6ed59..03a0651fa73cd954a0ade4336860db8319a9d3c6 100644 GIT binary patch delta 4440 zcma);du$ZP8NkQb#Kyc$v5gIM0@&txNy@`upvD373?>H5GZfZ$W8bECyJmOKU>xKq zAo@=ms%%Mwl#~)s(?ku5WVMQtDim2!Ql$l@kEB(al+d)QTD9pzsDGqN`}=nH3P@4a zk-z=T%+Ahy&pAKSc{M%sK~>oqMLUX2M}A$Z)CKr-IS<<0N~JWM2OHpKn1X$90z3z6 z;Uy^FzX9vvN3aR1u}aZZbKxSm7%qesS!wrm2!Zq;6 za2FguUa4l7flJ}ja3%aHTmdJb-4?hJw!m*dS$_?7!SabpJ;3?u0G-)Pya21Ey^VH5tnMG$;zR!sYN7Y=y&cE$6F$&`H5& zPDeS_17%?W-UBbex$pycH!Po`)OILm&V&w>4ZjBYQ{UksIq@2l9C#O2 z!+%2!s~Mn^YOcorWpuVA6Awa3mJAfvxllZC23Ek=6JCYe*MCU#_U2re_3KWlg2>Dk19*X61ij2p=MQ}F! z0_=oi;7KT+dmIuqbrw=6>JogZM5$Mycr-U7Hs}eshVjsk=twLp38Yv)12)1II15@( zG(8E$LoY$`#G6noRG*J6TMO4Q+zh4cPD6?Pdr*?FRLApMp_KVqxKHZ;dNQ$+IBev_ zV^B7DD`5><>}Q;YZSXQ|hb3ez8>kI%JA4*ORosN6fzs5bSlkT7!v_+chO*BUxLWGJ zlvNm`+91lRLr|*XQCJR7!+G#2xC&l@;(<@$Hnp z=b(h{Z8(qfRT;(26`)d3La_!)677I1;R(1KUWS`t4cf>7-B3d2C*!X}{?vIM7^mKX zUGT3^3|xwtZif6tH$H6PG1m=-)L=vkT=|H3fF(PARV`*!Uqtc<-G1L(#NqzwN5+eB*HHo`4 zu|f_kwukA6XZn#eq7ku7+7_fN>ct6~bR$SO9zs?lVn`)&2&qFxAw3A57>X_%ap^W> zB_eL#gSbest*5gQ*_2G|gPW1b$gE_}gA(Jlh$QPOq!lSP`N5GUmGJ-~B|Jmym&}xg zht-3Kk61_zBIP4(LyYKokf+3$A2T%(kqVL4he)mzn}k(zgPc@Zq!T%eNRynLOu%TjWOP|$iv{T4;8&4mxgRJf7AZs+!wqpe* zqdnsna)I_ukWy{H^3quy7%v|>6|*$O`5wA-US%jq@4FONA=68^KYy29j4o*n$~H_A`EIR0?exC147+K={`wCHX1TXxRs&KZqK zgGVeoIF9yd*U6;R|FOuIRe@*ewsc^-?Cy;Jc1dHVXhjd_il4-!W3FTLtifXU_^hyU z;-h7@(^nWCnz(h;+-{>SG271QuC7h%Qfh0#5A%5YQFv1L07p6B+Ws!nGu&%zy^uPu)_vze94 zxkpTgO+Qq{c0cI?2ma`-G`j_MxI&FdpsTO$77qr~h)ft1>L zD_8K6P8U2M&qOf}|6Y}wnz1AIS>AxoTLX~--DbFR$}dYQafObp44bBYvT%2FOpk4H z89A)r8%{P30nQk4Mda?}+)!6>fEU=}p%OWX9Fx#lr=Mb9oydVr5)EDT9ogQfweeA1&xE_-QNbueIkh zdq)983dKcWr!8%KVi4EB@cXrkN*Z@rIo!h;BoeQ6)+NKpB~)=EOFT4p!yinmt0;KZ z$a5nX-0=Fe`NKQwx=NY?<76!&opUu+f_8&>+c}ssPH&Jsu9FgR{qXSg>EVU?4dFNI z>+3|J!Mt_!Gndtbf2_ZD*CxleJuAFCeO`qw*47`UHpI)-bDfbF`%O+8{822mUXm8a{m<7_SsPY<&-gm3Hb2}q^Ax8H-7KVzC4Ico+>7PKcmRMI;VNh$cqkjDWzklrPxU-%L{B0)76IyOeCj!ntg96 zmr~oL$|Qj)n7GoVn4+Hwac211oKs`jnVTRAN_ePoYPhOlNf~uug(T4t3LpFx!+W9eK_Q&o*6L6$fJTj%^)952sY8=$E$Gf-A!EwB<%O oghTfZWy5WAo0q3iK241ql`*&au?=!>*cAWBEAo4y;>l$2A8DnFSO5S3 delta 2432 zcmYk-drZ}39LMqJaFYN-P(UH@03ruLF6L1Im5ZVRayba3Q7MCiGnHcpG}J#%H+8mo zsVB>Sbm7dk@(^~-1!v+8)b|f!4xYgzd>iNEhggPx;1u-S zVN4@d;wl`88Zxg@S`~j2hqsF2UnLH<{duty({R! zlvHE#(Tnr&9;6HN7*^s@EXVWM%=qRfD$B5DTC~G4%%*+7X`e!^>=o3CuA#Q_XQ%B= zi@xu|Sf1}f?Z6()!$YY4&SEjXhne^zhTK#V`1W)x#yG4+cHPut1-2r`X!bfjf$HE8 zDosvf7QT#?cmZ{!zoI6*l+N{j1FHQHDrXK)Xa5&bd5H&+vqrUN&4|vp6ZOTd=*9!6 z3B8Egf$JELIT_K3L| zWz2)9+{hvI7hwZxC1W@jk6{76fm-S3s0H0dO|*hRv{OM`iMz2C-waV{rjo<~=|MN@ zdOVN!;MH7x-7ru&0x|H1L5iLedydAY8qmE}#e;>L|rJhPQ znWB5zhb1_GOYsnDB_Ci1#>|e|g*CKKA$e#%MXmG))Ie44=#CDc`g;~h2lE!{2(Mr* zma;C?DtWycK(J2QoMFuJisDDkoC8G8!-gwF4gH zG)y~chc;ub?*G%yg9&6;%_qojgSm~GNF1XnsWMQx(SRDD70Ey2L!Ipqx^X)$z{9Ac zI*+WuR0j!UmUf^T)j==v%8a45@FX_jC5*=zTL#9FtB_V$NJRrJ#D(ZXW&eIm#;4GQvBX+J+d5fRQ{gs6 zihkv^L*0Z1)~=~k6FMU0(I#Rep$Sq#ku6ruOYnna?jw4M$--nK38jf?Qf@*;w?nJ< z5nPhU&M1#`OH?#*m32g7q!zt;`pH&VN|fpR|6dwtY;YdvNZ47ko>)%ktW_!rHpJXd z#1Xm$I<8EjjZjG?x(Fqx&iVnOnc%iZ${IfFi4={mvsFf_kSnG=Qj4CYQ;qxwqcdMc z%yu5mMPlo0lSPTdukgR6lUkkAior%= ziY-cNvlB@^Tax@+czMdG%YHX?q3yl%YWR`VC9ZH<+6ylGP5Q3z*6EEg_GZRd{7_)$ z@SwGsdu&sd*IvvT3a^`a(Pigl|89LbYr?PRTy?nu_GoUk&CS~!p2#b8*(0;FTr0yl z?gK9SeSU)-EBGj(X?Qf)AGB?SCH8V*$7FNvobi~!fPH^XO>(<`z&|o_VLZ4cV3Ug$ z*&{{!cooi^+u^d8i!<%H;@#nTPftu*r+;wEV8Fe-f7?(XxV@i0KRd6%mX@AM@(&LL zGz^bQ%J$l?%e;2y{6}qGd70f&9%nntZ&**oaaXrJUr}olD_7aJ%8J-M{-6z2o=y+A mNBlu|%eszs_pS@$+Ze)btXiDaKQiDS9`p~7`puyKzxqEqS|U#X diff --git a/rest_framework/locale/pt_BR/LC_MESSAGES/django.po b/rest_framework/locale/pt_BR/LC_MESSAGES/django.po index 4d47ce3b9..bfd53ee0f 100644 --- a/rest_framework/locale/pt_BR/LC_MESSAGES/django.po +++ b/rest_framework/locale/pt_BR/LC_MESSAGES/django.po @@ -1,7 +1,7 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: # Cloves Oliveira , 2020 # Craig Blaszczyk , 2015 @@ -10,6 +10,7 @@ # Hugo Leonardo Chalhoub Mendonça , 2015 # Jonatas Baldin , 2017 # Gabriel Mitelman Tkacz , 2024 +# Matheus Oliveira , 2025 msgid "" msgstr "" "Project-Id-Version: Django REST framework\n" @@ -141,7 +142,7 @@ msgstr "Não foi possível satisfazer a requisição do cabeçalho Accept." #: 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." +msgstr "Tipo de mídia \"{media_type}\" no pedido não é suportado." #: exceptions.py:223 msgid "Request was throttled." @@ -200,17 +201,17 @@ msgstr "Este valor não corresponde ao padrão exigido." 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." +msgstr "Insira 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 "Digite um \"slug\" válido que consista de letras Unicode, números, sublinhados ou hífens." +msgstr "Insira um \"slug\" válido que consista de letras Unicode, números, sublinhados ou hífens." #: fields.py:854 msgid "Enter a valid URL." -msgstr "Entrar um URL válido." +msgstr "Insira um URL válido." #: fields.py:867 msgid "Must be a valid UUID." @@ -290,12 +291,12 @@ msgstr "Necessário uma data mas recebeu uma data e hora." #: 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}." +msgstr "Formato inválido para tempo. Use um dos formatos a seguir: {format}." #: 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}." +msgstr "Formato inválido para duração. Use um dos formatos a seguir: {format}." #: fields.py:1399 fields.py:1456 #, python-brace-format @@ -348,7 +349,7 @@ msgstr "Certifique-se de que o nome do arquivo tem menos de {max_length} caracte 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." +msgstr "Faça upload de uma imagem válida. O arquivo enviado não é um arquivo de imagem ou está corrompido." #: fields.py:1604 relations.py:486 serializers.py:571 msgid "This list may not be empty." @@ -375,7 +376,7 @@ msgstr "Este dicionário não pode estar vazio." #: fields.py:1755 msgid "Value must be valid JSON." -msgstr "Valor devo ser JSON válido." +msgstr "Valor deve ser JSON válido." #: filters.py:49 templates/rest_framework/filters/search.html:2 msgid "Search" @@ -395,11 +396,11 @@ msgstr "Qual campo usar ao ordenar os resultados." #: filters.py:287 msgid "ascending" -msgstr "ascendente" +msgstr "crescente" #: filters.py:288 msgid "descending" -msgstr "descendente" +msgstr "decrescente" #: pagination.py:174 msgid "A page number within the paginated result set." @@ -531,7 +532,7 @@ msgstr "Nenhum item para escholher." #: validators.py:39 msgid "This field must be unique." -msgstr "Esse campo deve ser único." +msgstr "Esse campo deve ser único." #: validators.py:89 #, python-brace-format From ffadde930ef23983f123477964d201c278f107e9 Mon Sep 17 00:00:00 2001 From: "Michiel W. Beijen" Date: Mon, 31 Mar 2025 16:22:15 +0200 Subject: [PATCH 4/6] Removed reference to GitHub Issues and Discussions (#9660) --- .github/ISSUE_TEMPLATE/1-issue.md | 17 ----------------- .github/ISSUE_TEMPLATE/config.yml | 6 ------ CONTRIBUTING.md | 2 -- docs/api-guide/fields.md | 2 +- docs/api-guide/throttling.md | 3 +-- docs/api-guide/validators.md | 2 +- docs/community/contributing.md | 18 ------------------ docs/community/project-management.md | 2 -- docs/community/third-party-packages.md | 5 ++--- 9 files changed, 5 insertions(+), 52 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/1-issue.md delete mode 100644 .github/ISSUE_TEMPLATE/config.yml diff --git a/.github/ISSUE_TEMPLATE/1-issue.md b/.github/ISSUE_TEMPLATE/1-issue.md deleted file mode 100644 index 87fa57a89..000000000 --- a/.github/ISSUE_TEMPLATE/1-issue.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -name: Issue -about: Please only raise an issue if you've been advised to do so after discussion. Thanks! 🙏 ---- - -## Checklist - - - -- [ ] Raised initially as discussion #... -- [ ] This is not a feature request suitable for implementation outside this project. Please elaborate what it is: - - [ ] compatibility fix for new Django/Python version ... - - [ ] other type of bug fix - - [ ] other type of improvement that does not touch existing code or change existing behavior (e.g. wrapper for new Django field) -- [ ] I have reduced the issue to the simplest possible case. diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml deleted file mode 100644 index 382fc521a..000000000 --- a/.github/ISSUE_TEMPLATE/config.yml +++ /dev/null @@ -1,6 +0,0 @@ -blank_issues_enabled: false -contact_links: -- name: Discussions - url: https://github.com/encode/django-rest-framework/discussions - about: > - The "Discussions" forum is where you want to start. 💖 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index fb01f8bf7..644a719c8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,6 +2,4 @@ At this point in its lifespan we consider Django REST framework to be essentially feature-complete. We may accept pull requests that track the continued development of Django versions, but would prefer not to accept new features or code formatting changes. -Apart from minor documentation changes, the [GitHub discussions page](https://github.com/encode/django-rest-framework/discussions) should generally be your starting point. Please only raise an issue or pull request if you've been recommended to do so after discussion. - The [Contributing guide in the documentation](https://www.django-rest-framework.org/community/contributing/) gives some more information on our process and code of conduct. diff --git a/docs/api-guide/fields.md b/docs/api-guide/fields.md index 5cbedd964..3225191f1 100644 --- a/docs/api-guide/fields.md +++ b/docs/api-guide/fields.md @@ -552,7 +552,7 @@ For further examples on `HiddenField` see the [validators](validators.md) docume --- -**Note:** `HiddenField()` does not appear in `partial=True` serializer (when making `PATCH` request). This behavior might change in future, follow updates on [github discussion](https://github.com/encode/django-rest-framework/discussions/8259). +**Note:** `HiddenField()` does not appear in `partial=True` serializer (when making `PATCH` request). --- diff --git a/docs/api-guide/throttling.md b/docs/api-guide/throttling.md index 0ea8b4158..e6d7774a6 100644 --- a/docs/api-guide/throttling.md +++ b/docs/api-guide/throttling.md @@ -110,7 +110,7 @@ You'll need to remember to also set your custom throttle class in the `'DEFAULT_ The built-in throttle implementations are open to [race conditions][race], so under high concurrency they may allow a few extra requests through. -If your project relies on guaranteeing the number of requests during concurrent requests, you will need to implement your own throttle class. See [issue #5181][gh5181] for more details. +If your project relies on guaranteeing the number of requests during concurrent requests, you will need to implement your own throttle class. --- @@ -220,5 +220,4 @@ The following is an example of a rate throttle, that will randomly throttle 1 in [identifying-clients]: http://oxpedia.org/wiki/index.php?title=AppSuite:Grizzly#Multiple_Proxies_in_front_of_the_cluster [cache-setting]: https://docs.djangoproject.com/en/stable/ref/settings/#caches [cache-docs]: https://docs.djangoproject.com/en/stable/topics/cache/#setting-up-the-cache -[gh5181]: https://github.com/encode/django-rest-framework/issues/5181 [race]: https://en.wikipedia.org/wiki/Race_condition#Data_race diff --git a/docs/api-guide/validators.md b/docs/api-guide/validators.md index b1f58ef23..57bcb8628 100644 --- a/docs/api-guide/validators.md +++ b/docs/api-guide/validators.md @@ -166,7 +166,7 @@ If you want the date field to be entirely hidden from the user, then use `Hidden --- -**Note:** `HiddenField()` does not appear in `partial=True` serializer (when making `PATCH` request). This behavior might change in future, follow updates on [github discussion](https://github.com/encode/django-rest-framework/discussions/8259). +**Note:** `HiddenField()` does not appear in `partial=True` serializer (when making `PATCH` request). --- diff --git a/docs/community/contributing.md b/docs/community/contributing.md index 5dea6426d..5a9188943 100644 --- a/docs/community/contributing.md +++ b/docs/community/contributing.md @@ -4,8 +4,6 @@ > > — [Tim Berners-Lee][cite] -There are many ways you can contribute to Django REST framework. We'd like it to be a community-led project, so please get involved and help shape the future of the project. - !!! note At this point in its lifespan we consider Django REST framework to be feature-complete. We focus on pull requests that track the continued development of Django versions, and generally do not accept new features or code formatting changes. @@ -30,24 +28,9 @@ The [Django code of conduct][code-of-conduct] gives a fuller set of guidelines f # Issues -Our contribution process is that the [GitHub discussions page](https://github.com/encode/django-rest-framework/discussions) should generally be your starting point. Please only raise an issue or pull request if you've been recommended to do so after discussion. - -Some tips on good potential issue reporting: - * Django REST framework is considered feature-complete. Please do not file requests to change behavior, unless it is required for security reasons or to maintain compatibility with upcoming Django or Python versions. -* Search the GitHub project page for related items, and make sure you're running the latest version of REST framework before reporting an issue. * Feature requests will typically be closed with a recommendation that they be implemented outside the core REST framework library (e.g. as third-party libraries). This approach allows us to keep down the maintenance overhead of REST framework, so that the focus can be on continued stability and great documentation. -## Triaging issues - -Getting involved in triaging incoming issues is a good way to start contributing. Every single ticket that comes into the ticket tracker needs to be reviewed in order to determine what the next steps should be. Anyone can help out with this, you just need to be willing to - -* Read through the ticket - does it make sense, is it missing any context that would help explain it better? -* Is the ticket reported in the correct place, would it be better suited as a discussion on the discussion group? -* If the ticket is a bug report, can you reproduce it? Are you able to write a failing test case that demonstrates the issue and that can be submitted as a pull request? -* If the ticket is a feature request, could the feature request instead be implemented as a third party package? -* If a ticket hasn't had much activity and addresses something you need, then comment on the ticket and try to find out what's needed to get it moving again. - # Development To start developing on Django REST framework, first create a Fork from the @@ -206,7 +189,6 @@ If you want to draw attention to a note or warning, use a pair of enclosing line [code-of-conduct]: https://www.djangoproject.com/conduct/ [google-group]: https://groups.google.com/forum/?fromgroups#!forum/django-rest-framework [so-filter]: https://stackexchange.com/filters/66475/rest-framework -[issues]: https://github.com/encode/django-rest-framework/issues?state=open [pep-8]: https://www.python.org/dev/peps/pep-0008/ [build-status]: ../img/build-status.png [pull-requests]: https://help.github.com/articles/using-pull-requests diff --git a/docs/community/project-management.md b/docs/community/project-management.md index 4f203e13b..daf2cda8d 100644 --- a/docs/community/project-management.md +++ b/docs/community/project-management.md @@ -34,7 +34,6 @@ Further notes for maintainers: * Code changes should come in the form of a pull request - do not push directly to master. * Maintainers should typically not merge their own pull requests. * Each issue/pull request should have exactly one label once triaged. -* Search for un-triaged issues with [is:open no:label][un-triaged]. --- @@ -157,7 +156,6 @@ The following issues still need to be addressed: * Document ownership and management of the security mailing list. [bus-factor]: https://en.wikipedia.org/wiki/Bus_factor -[un-triaged]: https://github.com/encode/django-rest-framework/issues?q=is%3Aopen+no%3Alabel [transifex-project]: https://www.transifex.com/projects/p/django-rest-framework/ [transifex-client]: https://pypi.org/project/transifex-client/ [translation-memory]: http://docs.transifex.com/guides/tm#let-tm-automatically-populate-translations diff --git a/docs/community/third-party-packages.md b/docs/community/third-party-packages.md index 4c045cb13..9d25665ad 100644 --- a/docs/community/third-party-packages.md +++ b/docs/community/third-party-packages.md @@ -32,7 +32,7 @@ We suggest adding your package to the [REST Framework][rest-framework-grid] grid #### Adding to the Django REST framework docs -Create a [Pull Request][drf-create-pr] or [Issue][drf-create-issue] on GitHub, and we'll add a link to it from the main REST framework documentation. You can add your package under **Third party packages** of the API Guide section that best applies, like [Authentication][authentication] or [Permissions][permissions]. You can also link your package under the [Third Party Packages][third-party-packages] section. +Create a [Pull Request][drf-create-pr] on GitHub, and we'll add a link to it from the main REST framework documentation. You can add your package under **Third party packages** of the API Guide section that best applies, like [Authentication][authentication] or [Permissions][permissions]. You can also link your package under the [Third Party Packages][third-party-packages] section. #### Announce on the discussion group. @@ -44,7 +44,7 @@ Django REST Framework has a growing community of developers, packages, and resou Check out a grid detailing all the packages and ecosystem around Django REST Framework at [Django Packages][rest-framework-grid]. -To submit new content, [open an issue][drf-create-issue] or [create a pull request][drf-create-pr]. +To submit new content, [create a pull request][drf-create-pr]. ## Async Support @@ -174,7 +174,6 @@ To submit new content, [open an issue][drf-create-issue] or [create a pull reque [drf-compat]: https://github.com/encode/django-rest-framework/blob/master/rest_framework/compat.py [rest-framework-grid]: https://www.djangopackages.com/grids/g/django-rest-framework/ [drf-create-pr]: https://github.com/encode/django-rest-framework/compare -[drf-create-issue]: https://github.com/encode/django-rest-framework/issues/new [authentication]: ../api-guide/authentication.md [permissions]: ../api-guide/permissions.md [third-party-packages]: ../topics/third-party-packages/#existing-third-party-packages From 9b1e8d2d43ff55a39f50f61018bf103e03454086 Mon Sep 17 00:00:00 2001 From: JAEGYUN JUNG Date: Thu, 3 Apr 2025 02:17:04 +0900 Subject: [PATCH 5/6] Add missing & fix Korean translations (#9571) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * update django.po file * update django.po translators * Changed the translation for the word “User” from “유저” to “사용자” to make it consistent with Django's translation reference: https://github.com/django/django/blob/5a91ad3d7115c692d497663a155edee5ebc8989c/django/contrib/admin/locale/ko/LC_MESSAGES/django.po#L601 * Add missing translation for the word “Token" * Fix wrong translation for word "Created" * Fix translation for "Tokens", just like django translation. reference: https://github.com/django/django/blob/5a91ad3d7115c692d497663a155edee5ebc8989c/django/contrib/auth/locale/ko/LC_MESSAGES/django.po#L235 * Add missing translation for "Invalid Input" * Add missing translation for throttling messages * Add missing translation for CharField, BooleanField messages * fix: remove unnecessary space * Feat: add missing translation for SlugField error message * Feat: add missing translation for UUIDField error message * Fix: add (boolean) for booleanField message * Feat: add missing translation for `integer to float` error message * Feat: add & fix translation for DecimalField * Feat: add & fix translation for DateTimeField * Feat: add & fix translation for DurationField * Feat: add & fix translation for Selection&FilePathField * Feat: add & fix translation for DictField * Feat: add missing translation for filters * Feat: add missing translations for template * Feat: Change end punctuation to the “~세요.” used by Django translations * update django.po translators * Feat: add compiled message file * Update rest_framework/locale/ko_KR/LC_MESSAGES/django.po Co-authored-by: taezero <51291185+overtae@users.noreply.github.com> * Update rest_framework/locale/ko_KR/LC_MESSAGES/django.po Co-authored-by: taezero <51291185+overtae@users.noreply.github.com> * Feat: remove unnecessary multliline from django.po(kor translation) * Feat: remove unnecessary multliline from django.po(kor translation) * Feat: update Korean translations for authentication messages * Feat: Remove unnecessary English parenthesis descriptions * Feat: Remove unnecessary English parenthesis descriptions * Feat: Remove unnecessary English parenthesis descriptions * Feat: Update compiled message file for ko_KR --------- Co-authored-by: taezero <51291185+overtae@users.noreply.github.com> --- .../locale/ko_KR/LC_MESSAGES/django.mo | Bin 11698 -> 14546 bytes .../locale/ko_KR/LC_MESSAGES/django.po | 382 +++++++++--------- 2 files changed, 195 insertions(+), 187 deletions(-) diff --git a/rest_framework/locale/ko_KR/LC_MESSAGES/django.mo b/rest_framework/locale/ko_KR/LC_MESSAGES/django.mo index c3aeb27a96e5c3b3ef9e61ac79e9ad229463ec7c..2228adcf7ff5707481347cefb2cbe1c9b753dd3e 100644 GIT binary patch literal 14546 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 WU5h;lwCnFNvRIfHMH%7^wf_TE%p8^g delta 3827 zcma*odr(x@9S88Uit-Yar{DuF4`CPBT|httj7p5k!*{eKYVEpvflXi+cNa05xTtG} z3eJ!oRxn+dHBr$96J)W)LMCG~)Bd58Ogj0anMvO>9m_qNNoHyr?TqR7x4Q^U?4)Nn z`#I;_d(Sd1gjb{vH*Xt)D6z)1A657xpp@Di+qpTRnq z6wO!#G(fuUf%WiHm<2NyF%}P>gEYVfNbT(*FGA|?eOO9UeTV{$P#+VV;TlLUI0(z( z09+40fzQIYSjKd4FT@{n;fL|(j4gv(Ak_~;n!yoBGjc;(%CS)WLFjsX9Aop*UIu9eDqtGi26JHxOon|>g6}|Q z0t)v~!0NI;K|NF;wuvoAFJv~P2eoh^+ys}xI#>vekhZW7(f~gXU4Iy=$KfRuBRW_H zYawmjsRXP)HQYu6&G^gEjnRq05#~Y~&{jw@J_ac+Ct*Ik1B;*^z5vsc5Ww&im}Nd zz6Dpqe?saw4{tvVOJF1H5BV5wLtVyf=@j^!DA3V+1fPcuSf?6z15#}K3vPlPSXXii zwm{X&-~cU<1~d$5CGJ6*;p31+2!MU4n_xYhgtUbb=?FyVT#Ukg6n+G^!YOzGE|4&4 z=z$%u1R-4jN8kbY8KgZg%M5xF)}sDvNWm6|h^6{kXofE6gkL~Av|!ZubF#nSw*(F0 z_`0A^Rt49?A3_SQA!vgihw9Zi!Sic}^U?kuq}cJn3iuH$hmjZs4Wt@B7!!L5;#KTC z#4fQhSWZK_i^4)QgsBH|GVTzZ+_4Nj^k@_UegkQXYOx=5{m+ns z?>?jntU#nv3}|2_JOHVEAmkOOLY)%5KkzV#?+?R4c#>%Jv}Dv7r6^>4YZxZNet=Aa zo=FWT#3R#-DBuw2ffGYPP1{2fqYBcC$QzI;m?KzmAwf|ZtiZlZwNGpB*Js|Fc66-c}AOF_C3nLg?CQCo{#N$Yyw|D&%JZ zrQlCwsJsKNL8bspM4pF?PeUN$x4<}Ld>R62H-7gbBb=V3bd-{jC1g5PEc1lf($?L6w?z&W?~N_tk7Gaesh5a`Z(I=;VsN$8&A93S~bx|hSZj>!1v!#hIS$V?QU^r@) zZPE^#$$F&y6{+f&HCWovVzyY1nhiRmwe^{(dV{5@-Owa!pO+1-6;hqmCL1i0I-o{U zH#;0{6?%O~M~BW~Gg$2AM)?>$s5iZY2d!G0YPin$7A>QocJ?Sf>mGh%waNO@2RU7!{ z(Wxp856{cY*l0A$Z4RkfHkhzTxL1tb5Q8pB8SW96Zu;F`zN<7b;>@6M-Bfz7@f7JE zkIy)=XsB1Y`hn;gm>%tv`1Y7&zB_BFuKR}Q_K1PYIwrg>F*YuVu6M*xui9j8GCS-V zy7xq@;n<;Io$t&_Eu8bn>pkdCczY#0qFf!3gnLNzqxN5Y@C}*Cd{XMY7clrk={1^Mwvc+gM zAynh?QvRR!6hHkvk}@)ZnTq~#+92h2m$*HlwznCKvR%WwwK@E*CMNdjBTs&Mj|g^k zgxc6{vs-O6%U5|-ehy!je~bSk|H}VD{MwNwP?7uJUvD^jXtKt=rz&hVgCW9A_18I diff --git a/rest_framework/locale/ko_KR/LC_MESSAGES/django.po b/rest_framework/locale/ko_KR/LC_MESSAGES/django.po index 722dc2c82..f98cad67d 100644 --- a/rest_framework/locale/ko_KR/LC_MESSAGES/django.po +++ b/rest_framework/locale/ko_KR/LC_MESSAGES/django.po @@ -1,37 +1,37 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# +# # Translators: -# GarakdongBigBoy , 2017 +# JAEGYUN JUNG , 2024 # Hochul Kwak , 2018 +# GarakdongBigBoy , 2017 # Joon Hwan 김준환 , 2017 # SUN CHOI , 2015 msgid "" msgstr "" "Project-Id-Version: Django REST framework\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-10-13 21:45+0200\n" +"POT-Creation-Date: 2024-10-22 16:13+0900\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" +"Last-Translator: JAEGYUN JUNG \n" +"Language: ko_KR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: ko_KR\n" "Plural-Forms: nplurals=1; plural=0;\n" #: authentication.py:70 msgid "Invalid basic header. No credentials provided." -msgstr "기본 헤더(basic header)가 유효하지 않습니다. 인증데이터(credentials)가 제공되지 않았습니다." +msgstr "기본 헤더가 유효하지 않습니다. 인증 데이터가 제공되지 않았습니다." #: authentication.py:73 msgid "Invalid basic header. Credentials string should not contain spaces." -msgstr "기본 헤더(basic header)가 유효하지 않습니다. 인증데이터(credentials) 문자열은 빈칸(spaces)을 포함하지 않아야 합니다." +msgstr "기본 헤더가 유효하지 않습니다. 인증 데이터 문자열은 공백을 포함하지 않아야 합니다." -#: authentication.py:83 +#: authentication.py:84 msgid "Invalid basic header. Credentials not correctly base64 encoded." -msgstr "기본 헤더(basic header)가 유효하지 않습니다. 인증데이터(credentials)가 base64로 적절히 부호화(encode)되지 않았습니다." +msgstr "기본 헤더가 유효하지 않습니다. 인증 데이터가 올바르게 base64 인코딩되지 않았습니다." #: authentication.py:101 msgid "Invalid username/password." @@ -43,11 +43,11 @@ msgstr "계정이 중지되었거나 삭제되었습니다." #: authentication.py:184 msgid "Invalid token header. No credentials provided." -msgstr "토큰 헤더가 유효하지 않습니다. 인증데이터(credentials)가 제공되지 않았습니다." +msgstr "토큰 헤더가 유효하지 않습니다. 인증 데이터가 제공되지 않았습니다." #: authentication.py:187 msgid "Invalid token header. Token string should not contain spaces." -msgstr "토큰 헤더가 유효하지 않습니다. 토큰 문자열은 빈칸(spaces)을 포함하지 않아야 합니다." +msgstr "토큰 헤더가 유효하지 않습니다. 토큰 문자열은 공백을 포함하지 않아야 합니다." #: authentication.py:193 msgid "" @@ -58,6 +58,10 @@ msgstr "토큰 헤더가 유효하지 않습니다. 토큰 문자열은 유효 msgid "Invalid token." msgstr "토큰이 유효하지 않습니다." +#: authtoken/admin.py:28 authtoken/serializers.py:9 +msgid "Username" +msgstr "사용자 이름" + #: authtoken/apps.py:7 msgid "Auth Token" msgstr "인증 토큰" @@ -68,23 +72,19 @@ msgstr "키" #: authtoken/models.py:16 msgid "User" -msgstr "유저" +msgstr "사용자" #: authtoken/models.py:18 msgid "Created" -msgstr "생성됨" +msgstr "생성일시" -#: authtoken/models.py:27 authtoken/serializers.py:19 +#: authtoken/models.py:27 authtoken/models.py:54 authtoken/serializers.py:19 msgid "Token" msgstr "토큰" -#: authtoken/models.py:28 +#: authtoken/models.py:28 authtoken/models.py:55 msgid "Tokens" -msgstr "" - -#: authtoken/serializers.py:9 -msgid "Username" -msgstr "유저이름" +msgstr "토큰(들)" #: authtoken/serializers.py:13 msgid "Password" @@ -92,390 +92,398 @@ msgstr "비밀번호" #: authtoken/serializers.py:35 msgid "Unable to log in with provided credentials." -msgstr "제공된 인증데이터(credentials)로는 로그인할 수 없습니다." +msgstr "제공된 인증 데이터로는 로그인할 수 없습니다." #: authtoken/serializers.py:38 msgid "Must include \"username\" and \"password\"." msgstr "\"아이디\"와 \"비밀번호\"를 포함해야 합니다." -#: exceptions.py:102 +#: exceptions.py:105 msgid "A server error occurred." msgstr "서버 장애가 발생했습니다." -#: exceptions.py:142 +#: exceptions.py:145 msgid "Invalid input." -msgstr "" +msgstr "유효하지 않은 입력입니다." -#: exceptions.py:161 +#: exceptions.py:166 msgid "Malformed request." msgstr "잘못된 요청입니다." -#: exceptions.py:167 +#: exceptions.py:172 msgid "Incorrect authentication credentials." -msgstr "자격 인증데이터(authentication credentials)가 정확하지 않습니다." +msgstr "자격 인증 데이터가 올바르지 않습니다." -#: exceptions.py:173 +#: exceptions.py:178 msgid "Authentication credentials were not provided." -msgstr "자격 인증데이터(authentication credentials)가 제공되지 않았습니다." +msgstr "자격 인증 데이터가 제공되지 않았습니다." -#: exceptions.py:179 +#: exceptions.py:184 msgid "You do not have permission to perform this action." -msgstr "이 작업을 수행할 권한(permission)이 없습니다." +msgstr "이 작업을 수행할 권한이 없습니다." -#: exceptions.py:185 +#: exceptions.py:190 msgid "Not found." msgstr "찾을 수 없습니다." -#: exceptions.py:191 +#: exceptions.py:196 #, python-brace-format msgid "Method \"{method}\" not allowed." -msgstr "메소드(Method) \"{method}\"는 허용되지 않습니다." +msgstr "메서드 \"{method}\"는 허용되지 않습니다." -#: exceptions.py:202 +#: exceptions.py:207 msgid "Could not satisfy the request Accept header." -msgstr "Accept header 요청을 만족할 수 없습니다." +msgstr "요청 Accept 헤더를 만족시킬 수 없습니다." -#: exceptions.py:212 +#: exceptions.py:217 #, python-brace-format msgid "Unsupported media type \"{media_type}\" in request." msgstr "요청된 \"{media_type}\"가 지원되지 않는 미디어 형태입니다." -#: exceptions.py:223 +#: exceptions.py:228 msgid "Request was throttled." -msgstr "요청이 지연(throttled)되었습니다." +msgstr "요청이 제한되었습니다." -#: exceptions.py:224 +#: exceptions.py:229 #, python-brace-format msgid "Expected available in {wait} second." -msgstr "" +msgstr "{wait} 초 후에 사용 가능합니다." -#: exceptions.py:225 +#: exceptions.py:230 #, python-brace-format msgid "Expected available in {wait} seconds." -msgstr "" +msgstr "{wait} 초 후에 사용 가능합니다." -#: fields.py:316 relations.py:245 relations.py:279 validators.py:90 -#: validators.py:183 +#: fields.py:292 relations.py:240 relations.py:276 validators.py:99 +#: validators.py:219 msgid "This field is required." msgstr "이 필드는 필수 항목입니다." -#: fields.py:317 +#: fields.py:293 msgid "This field may not be null." msgstr "이 필드는 null일 수 없습니다." -#: fields.py:701 +#: fields.py:661 msgid "Must be a valid boolean." -msgstr "" +msgstr "유효한 불리언이어야 합니다." -#: fields.py:766 +#: fields.py:724 msgid "Not a valid string." -msgstr "" +msgstr "유효한 문자열이 아닙니다." -#: fields.py:767 +#: fields.py:725 msgid "This field may not be blank." msgstr "이 필드는 blank일 수 없습니다." -#: fields.py:768 fields.py:1881 +#: fields.py:726 fields.py:1881 #, python-brace-format msgid "Ensure this field has no more than {max_length} characters." -msgstr "이 필드의 글자 수가 {max_length} 이하인지 확인하십시오." +msgstr "이 필드의 글자 수가 {max_length} 이하인지 확인하세요." -#: fields.py:769 +#: fields.py:727 #, python-brace-format msgid "Ensure this field has at least {min_length} characters." -msgstr "이 필드의 글자 수가 적어도 {min_length} 이상인지 확인하십시오." +msgstr "이 필드의 글자 수가 적어도 {min_length} 이상인지 확인하세요." -#: fields.py:816 +#: fields.py:774 msgid "Enter a valid email address." -msgstr "유효한 이메일 주소를 입력하십시오." +msgstr "유효한 이메일 주소를 입력하세요." -#: fields.py:827 +#: fields.py:785 msgid "This value does not match the required pattern." -msgstr "형식에 맞지 않는 값입니다." +msgstr "이 값은 요구되는 패턴과 일치하지 않습니다." -#: fields.py:838 +#: fields.py:796 msgid "" "Enter a valid \"slug\" consisting of letters, numbers, underscores or " "hyphens." -msgstr "문자, 숫자, 밑줄( _ ) 또는 하이픈( - )으로 이루어진 유효한 \"slug\"를 입력하십시오." +msgstr "문자, 숫자, 밑줄( _ ) 또는 하이픈( - )으로 이루어진 유효한 \"slug\"를 입력하세요." -#: fields.py:839 +#: fields.py:797 msgid "" "Enter a valid \"slug\" consisting of Unicode letters, numbers, underscores, " "or hyphens." -msgstr "" +msgstr "유니코드 문자, 숫자, 밑줄( _ ) 또는 하이픈( - )으로 이루어진 유효한 \"slug\"를 입력하세요." -#: fields.py:854 +#: fields.py:812 msgid "Enter a valid URL." -msgstr "유효한 URL을 입력하십시오." +msgstr "유효한 URL을 입력하세요." -#: fields.py:867 +#: fields.py:825 msgid "Must be a valid UUID." -msgstr "" +msgstr "유효한 UUID 이어야 합니다." -#: fields.py:903 +#: fields.py:861 msgid "Enter a valid IPv4 or IPv6 address." -msgstr "유효한 IPv4 또는 IPv6 주소를 입력하십시오." +msgstr "유효한 IPv4 또는 IPv6 주소를 입력하세요." -#: fields.py:931 +#: fields.py:889 msgid "A valid integer is required." -msgstr "유효한 정수(integer)를 넣어주세요." +msgstr "유효한 정수를 입력하세요." -#: fields.py:932 fields.py:969 fields.py:1005 fields.py:1366 +#: fields.py:890 fields.py:927 fields.py:966 fields.py:1349 #, python-brace-format msgid "Ensure this value is less than or equal to {max_value}." -msgstr "이 값이 {max_value}보다 작거나 같은지 확인하십시오." +msgstr "이 값이 {max_value}보다 작거나 같은지 확인하세요." -#: fields.py:933 fields.py:970 fields.py:1006 fields.py:1367 +#: fields.py:891 fields.py:928 fields.py:967 fields.py:1350 #, python-brace-format msgid "Ensure this value is greater than or equal to {min_value}." -msgstr "이 값이 {min_value}보다 크거나 같은지 확인하십시오." +msgstr "이 값이 {min_value}보다 크거나 같은지 확인하세요." -#: fields.py:934 fields.py:971 fields.py:1010 +#: fields.py:892 fields.py:929 fields.py:971 msgid "String value too large." -msgstr "문자열 값이 너무 큽니다." +msgstr "문자열 값이 너무 깁니다." -#: fields.py:968 fields.py:1004 +#: fields.py:926 fields.py:965 msgid "A valid number is required." -msgstr "유효한 숫자를 넣어주세요." +msgstr "유효한 숫자를 입력하세요." -#: fields.py:1007 +#: fields.py:930 +msgid "Integer value too large to convert to float" +msgstr "정수 값이 너무 커서 부동 소수점으로 변환할 수 없습니다." + +#: fields.py:968 #, python-brace-format msgid "Ensure that there are no more than {max_digits} digits in total." -msgstr "전체 숫자(digits)가 {max_digits} 이하인지 확인하십시오." +msgstr "총 자릿수가 {max_digits}을(를) 초과하지 않는지 확인하세요." -#: fields.py:1008 +#: fields.py:969 #, python-brace-format -msgid "" -"Ensure that there are no more than {max_decimal_places} decimal places." -msgstr "소수점 자릿수가 {max_decimal_places} 이하인지 확인하십시오." +msgid "Ensure that there are no more than {max_decimal_places} decimal places." +msgstr "소수점 이하 자릿수가 {max_decimal_places}을(를) 초과하지 않는지 확인하세요." -#: fields.py:1009 +#: fields.py:970 #, python-brace-format msgid "" "Ensure that there are no more than {max_whole_digits} digits before the " "decimal point." -msgstr "소수점 자리 앞에 숫자(digits)가 {max_whole_digits} 이하인지 확인하십시오." +msgstr "소수점 앞 자릿수가 {max_whole_digits}을(를) 초과하지 않는지 확인하세요." -#: fields.py:1148 +#: fields.py:1129 #, python-brace-format msgid "Datetime has wrong format. Use one of these formats instead: {format}." msgstr "Datetime의 포멧이 잘못되었습니다. 이 형식들 중 한가지를 사용하세요: {format}." -#: fields.py:1149 +#: fields.py:1130 msgid "Expected a datetime but got a date." -msgstr "예상된 datatime 대신 date를 받았습니다." +msgstr "datatime이 예상되었지만 date를 받았습니다." -#: fields.py:1150 +#: fields.py:1131 #, python-brace-format msgid "Invalid datetime for the timezone \"{timezone}\"." -msgstr "" +msgstr "\"{timezone}\" 시간대에 대한 유효하지 않은 datetime 입니다." -#: fields.py:1151 +#: fields.py:1132 msgid "Datetime value out of range." -msgstr "" +msgstr "Datetime 값이 범위를 벗어났습니다." -#: fields.py:1236 +#: fields.py:1219 #, python-brace-format msgid "Date has wrong format. Use one of these formats instead: {format}." msgstr "Date의 포멧이 잘못되었습니다. 이 형식들 중 한가지를 사용하세요: {format}." -#: fields.py:1237 +#: fields.py:1220 msgid "Expected a date but got a datetime." msgstr "예상된 date 대신 datetime을 받았습니다." -#: fields.py:1303 +#: fields.py:1286 #, python-brace-format msgid "Time has wrong format. Use one of these formats instead: {format}." msgstr "Time의 포멧이 잘못되었습니다. 이 형식들 중 한가지를 사용하세요: {format}." -#: fields.py:1365 +#: fields.py:1348 #, python-brace-format msgid "Duration has wrong format. Use one of these formats instead: {format}." msgstr "Duration의 포멧이 잘못되었습니다. 이 형식들 중 한가지를 사용하세요: {format}." -#: fields.py:1399 fields.py:1456 +#: fields.py:1351 +#, python-brace-format +msgid "The number of days must be between {min_days} and {max_days}." +msgstr "일수는 {min_days} 이상 {max_days} 이하이어야 합니다." + +#: fields.py:1386 fields.py:1446 #, python-brace-format msgid "\"{input}\" is not a valid choice." -msgstr "\"{input}\"이 유효하지 않은 선택(choice)입니다." +msgstr "\"{input}\"은 유효하지 않은 선택입니다." -#: fields.py:1402 +#: fields.py:1389 #, python-brace-format msgid "More than {count} items..." -msgstr "" +msgstr "{count}개 이상의 아이템이 있습니다..." -#: fields.py:1457 fields.py:1603 relations.py:485 serializers.py:570 +#: fields.py:1447 fields.py:1596 relations.py:486 serializers.py:593 #, python-brace-format msgid "Expected a list of items but got type \"{input_type}\"." msgstr "아이템 리스트가 예상되었으나 \"{input_type}\"를 받았습니다." -#: fields.py:1458 +#: fields.py:1448 msgid "This selection may not be empty." msgstr "이 선택 항목은 비워 둘 수 없습니다." -#: fields.py:1495 +#: fields.py:1487 #, python-brace-format msgid "\"{input}\" is not a valid path choice." -msgstr "\"{input}\"이 유효하지 않은 경로 선택입니다." +msgstr "\"{input}\"은 유효하지 않은 경로 선택입니다." -#: fields.py:1514 +#: fields.py:1507 msgid "No file was submitted." msgstr "파일이 제출되지 않았습니다." -#: fields.py:1515 -msgid "" -"The submitted data was not a file. Check the encoding type on the form." +#: fields.py:1508 +msgid "The submitted data was not a file. Check the encoding type on the form." msgstr "제출된 데이터는 파일이 아닙니다. 제출된 서식의 인코딩 형식을 확인하세요." -#: fields.py:1516 +#: fields.py:1509 msgid "No filename could be determined." msgstr "파일명을 알 수 없습니다." -#: fields.py:1517 +#: fields.py:1510 msgid "The submitted file is empty." msgstr "제출한 파일이 비어있습니다." -#: fields.py:1518 +#: fields.py:1511 #, python-brace-format msgid "" "Ensure this filename has at most {max_length} characters (it has {length})." -msgstr "이 파일명의 글자수가 최대 {max_length}를 넘지 않는지 확인하십시오. (이것은 {length}가 있습니다)." +msgstr "이 파일명의 글자수가 최대 {max_length}자를 넘지 않는지 확인하세요. (현재 {length}자입니다)." -#: fields.py:1566 +#: fields.py:1559 msgid "" "Upload a valid image. The file you uploaded was either not an image or a " "corrupted image." -msgstr "유효한 이미지 파일을 업로드 하십시오. 업로드 하신 파일은 이미지 파일이 아니거나 손상된 이미지 파일입니다." +msgstr "유효한 이미지 파일을 업로드하세요. 업로드하신 파일은 이미지 파일이 아니거나 손상된 이미지 파일입니다." -#: fields.py:1604 relations.py:486 serializers.py:571 +#: fields.py:1597 relations.py:487 serializers.py:594 msgid "This list may not be empty." msgstr "이 리스트는 비워 둘 수 없습니다." -#: fields.py:1605 +#: fields.py:1598 serializers.py:596 #, python-brace-format msgid "Ensure this field has at least {min_length} elements." -msgstr "" +msgstr "이 필드가 최소 {min_length} 개의 요소를 가지는지 확인하세요." -#: fields.py:1606 +#: fields.py:1599 serializers.py:595 #, python-brace-format msgid "Ensure this field has no more than {max_length} elements." -msgstr "" +msgstr "이 필드가 최대 {max_length} 개의 요소를 가지는지 확인하세요." -#: fields.py:1682 +#: fields.py:1677 #, python-brace-format msgid "Expected a dictionary of items but got type \"{input_type}\"." msgstr "아이템 딕셔너리가 예상되었으나 \"{input_type}\" 타입을 받았습니다." -#: fields.py:1683 +#: fields.py:1678 msgid "This dictionary may not be empty." -msgstr "" +msgstr "이 딕셔너리는 비어있을 수 없습니다." -#: fields.py:1755 +#: fields.py:1750 msgid "Value must be valid JSON." -msgstr "Value 는 유효한 JSON형식이어야 합니다." +msgstr "유효한 JSON 값이어야 합니다." -#: filters.py:49 templates/rest_framework/filters/search.html:2 +#: filters.py:72 templates/rest_framework/filters/search.html:2 +#: templates/rest_framework/filters/search.html:8 msgid "Search" msgstr "검색" -#: filters.py:50 +#: filters.py:73 msgid "A search term." -msgstr "" +msgstr "검색어." -#: filters.py:180 templates/rest_framework/filters/ordering.html:3 +#: filters.py:224 templates/rest_framework/filters/ordering.html:3 msgid "Ordering" msgstr "순서" -#: filters.py:181 +#: filters.py:225 msgid "Which field to use when ordering the results." -msgstr "" +msgstr "결과 정렬 시 사용할 필드." -#: filters.py:287 +#: filters.py:341 msgid "ascending" msgstr "오름차순" -#: filters.py:288 +#: filters.py:342 msgid "descending" msgstr "내림차순" -#: pagination.py:174 +#: pagination.py:180 msgid "A page number within the paginated result set." -msgstr "" +msgstr "페이지네이션된 결과 집합 내의 페이지 번호." -#: pagination.py:179 pagination.py:372 pagination.py:590 +#: pagination.py:185 pagination.py:382 pagination.py:599 msgid "Number of results to return per page." -msgstr "" +msgstr "페이지당 반환할 결과 수." -#: pagination.py:189 +#: pagination.py:195 msgid "Invalid page." msgstr "페이지가 유효하지 않습니다." -#: pagination.py:374 +#: pagination.py:384 msgid "The initial index from which to return the results." -msgstr "" +msgstr "결과를 반환할 초기 인덱스." -#: pagination.py:581 +#: pagination.py:590 msgid "The pagination cursor value." -msgstr "" +msgstr "페이지네이션 커서 값." -#: pagination.py:583 +#: pagination.py:592 msgid "Invalid cursor" -msgstr "커서(cursor)가 유효하지 않습니다." +msgstr "커서가 유효하지 않습니다." -#: relations.py:246 +#: relations.py:241 #, python-brace-format msgid "Invalid pk \"{pk_value}\" - object does not exist." msgstr "유효하지 않은 pk \"{pk_value}\" - 객체가 존재하지 않습니다." -#: relations.py:247 +#: relations.py:242 #, python-brace-format msgid "Incorrect type. Expected pk value, received {data_type}." -msgstr "잘못된 형식입니다. pk 값 대신 {data_type}를 받았습니다." +msgstr "잘못된 형식입니다. pk 값이 예상되었지만, {data_type}을(를) 받았습니다." -#: relations.py:280 +#: relations.py:277 msgid "Invalid hyperlink - No URL match." msgstr "유효하지 않은 하이퍼링크 - 일치하는 URL이 없습니다." -#: relations.py:281 +#: relations.py:278 msgid "Invalid hyperlink - Incorrect URL match." msgstr "유효하지 않은 하이퍼링크 - URL이 일치하지 않습니다." -#: relations.py:282 +#: relations.py:279 msgid "Invalid hyperlink - Object does not exist." msgstr "유효하지 않은 하이퍼링크 - 객체가 존재하지 않습니다." -#: relations.py:283 +#: relations.py:280 #, python-brace-format msgid "Incorrect type. Expected URL string, received {data_type}." msgstr "잘못된 형식입니다. URL 문자열을 예상했으나 {data_type}을 받았습니다." -#: relations.py:448 +#: relations.py:445 #, python-brace-format msgid "Object with {slug_name}={value} does not exist." msgstr "{slug_name}={value} 객체가 존재하지 않습니다." -#: relations.py:449 +#: relations.py:446 msgid "Invalid value." msgstr "값이 유효하지 않습니다." #: schemas/utils.py:32 msgid "unique integer value" -msgstr "" +msgstr "고유한 정수 값" #: schemas/utils.py:34 msgid "UUID string" -msgstr "" +msgstr "UUID 문자열" #: schemas/utils.py:36 msgid "unique value" -msgstr "" +msgstr "고유한 값" #: schemas/utils.py:38 #, python-brace-format msgid "A {value_type} identifying this {name}." -msgstr "" +msgstr "{name}을 식별하는 {value_type}." -#: serializers.py:337 +#: serializers.py:340 #, python-brace-format msgid "Invalid data. Expected a dictionary, but got {datatype}." msgstr "유효하지 않은 데이터. 딕셔너리(dictionary)대신 {datatype}를 받았습니다." @@ -483,7 +491,7 @@ msgstr "유효하지 않은 데이터. 딕셔너리(dictionary)대신 {datatype} #: templates/rest_framework/admin.html:116 #: templates/rest_framework/base.html:136 msgid "Extra Actions" -msgstr "" +msgstr "추가 Action들" #: templates/rest_framework/admin.html:130 #: templates/rest_framework/base.html:150 @@ -492,33 +500,33 @@ msgstr "필터" #: templates/rest_framework/base.html:37 msgid "navbar" -msgstr "" +msgstr "네비게이션 바" #: templates/rest_framework/base.html:75 msgid "content" -msgstr "" +msgstr "콘텐츠" #: templates/rest_framework/base.html:78 msgid "request form" -msgstr "" +msgstr "요청 폼" #: templates/rest_framework/base.html:157 msgid "main content" -msgstr "" +msgstr "메인 콘텐츠" #: templates/rest_framework/base.html:173 msgid "request info" -msgstr "" +msgstr "요청 정보" #: templates/rest_framework/base.html:177 msgid "response info" -msgstr "" +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:4 #: templates/rest_framework/inline/select_multiple.html:3 @@ -528,49 +536,49 @@ msgstr "선택할 아이템이 없습니다." #: validators.py:39 msgid "This field must be unique." -msgstr "이 필드는 반드시 고유(unique)해야 합니다." +msgstr "이 필드는 반드시 고유해야 합니다." -#: validators.py:89 +#: validators.py:98 #, python-brace-format msgid "The fields {field_names} must make a unique set." -msgstr "필드 {field_names} 는 반드시 고유(unique)해야 합니다." +msgstr "필드 {field_names} 는 반드시 고유해야 합니다." -#: validators.py:171 +#: validators.py:200 #, python-brace-format msgid "Surrogate characters are not allowed: U+{code_point:X}." -msgstr "" +msgstr "대체(surrogate) 문자는 허용되지 않습니다: U+{code_point:X}." -#: validators.py:243 +#: validators.py:290 #, python-brace-format msgid "This field must be unique for the \"{date_field}\" date." -msgstr "이 필드는 고유(unique)한 \"{date_field}\" 날짜를 갖습니다." +msgstr "이 필드는 \"{date_field}\" 날짜에 대해 고유해야 합니다." -#: validators.py:258 +#: validators.py:305 #, python-brace-format msgid "This field must be unique for the \"{date_field}\" month." -msgstr "이 필드는 고유(unique)한 \"{date_field}\" 월을 갖습니다. " +msgstr "이 필드는 \"{date_field}\" 월에 대해 고유해야 합니다." -#: validators.py:271 +#: validators.py:318 #, python-brace-format msgid "This field must be unique for the \"{date_field}\" year." -msgstr "이 필드는 고유(unique)한 \"{date_field}\" 년을 갖습니다. " +msgstr "이 필드는 \"{date_field}\" 연도에 대해 고유해야 합니다." #: versioning.py:40 msgid "Invalid version in \"Accept\" header." -msgstr "\"Accept\" 헤더(header)의 버전이 유효하지 않습니다." +msgstr "\"Accept\" 헤더의 버전이 유효하지 않습니다." #: versioning.py:71 msgid "Invalid version in URL path." -msgstr "URL path의 버전이 유효하지 않습니다." +msgstr "URL 경로의 버전이 유효하지 않습니다." -#: versioning.py:116 +#: versioning.py:118 msgid "Invalid version in URL path. Does not match any version namespace." -msgstr "URL 경로에 유효하지 않은 버전이 있습니다. 버전 네임 스페이스와 일치하지 않습니다." +msgstr "URL 경로에 유효하지 않은 버전이 있습니다. 버전 네임스페이스와 일치하지 않습니다." -#: versioning.py:148 +#: versioning.py:150 msgid "Invalid version in hostname." -msgstr "hostname내 버전이 유효하지 않습니다." +msgstr "hostname 내 버전이 유효하지 않습니다." -#: versioning.py:170 +#: versioning.py:172 msgid "Invalid version in query parameter." -msgstr "쿼리 파라메터내 버전이 유효하지 않습니다." +msgstr "쿼리 파라메터 내 버전이 유효하지 않습니다." From 3ba8ef967e771c8e4e0ba3e7976c8baabe4d494e Mon Sep 17 00:00:00 2001 From: JAEGYUN JUNG Date: Thu, 3 Apr 2025 02:35:29 +0900 Subject: [PATCH 6/6] Update GitHub Actions to use Ubuntu 22.04 for testing (#9677) --- .github/workflows/main.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index fe31e727a..bf158311a 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -9,7 +9,7 @@ on: jobs: tests: name: Python ${{ matrix.python-version }} - runs-on: ubuntu-20.04 + runs-on: ubuntu-24.04 strategy: matrix: @@ -50,7 +50,7 @@ jobs: test-docs: name: Test documentation links - runs-on: ubuntu-22.04 + runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4