diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs index bf8b701ed2..d979bc49b4 100644 --- a/.git-blame-ignore-revs +++ b/.git-blame-ignore-revs @@ -1,3 +1,4 @@ +305757aec19c9d5111e4d76095ae0acd66163e4b ca88caa1031c0de545d82de8d90dcae0e03651fb c5cd8783825b5f6384417dac5f3889b4210b7d08 9c19aff7c7561e3a82978a272ecdaad40dda5c00 diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index a12a9eac31..9b88b9be93 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -28,7 +28,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: '3.12' cache: 'pip' @@ -46,7 +46,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: '3.12' - run: python -m pip install blacken-docs diff --git a/.github/workflows/linters.yml b/.github/workflows/linters.yml index f590b5a7dc..3875e755f9 100644 --- a/.github/workflows/linters.yml +++ b/.github/workflows/linters.yml @@ -25,13 +25,13 @@ jobs: - name: Checkout uses: actions/checkout@v4 - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: '3.12' - run: python -m pip install flake8 - name: flake8 - # Pinned to v2.0.0. - uses: liskin/gh-problem-matcher-wrap@d8afa2cfb66dd3f982b1950429e652bc14d0d7d2 + # Pinned to v3.0.0. + uses: liskin/gh-problem-matcher-wrap@e7b7beaaafa52524748b31a381160759d68d61fb with: linters: flake8 run: flake8 @@ -42,13 +42,13 @@ jobs: - name: Checkout uses: actions/checkout@v4 - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: '3.12' - run: python -m pip install isort - name: isort - # Pinned to v2.0.0. - uses: liskin/gh-problem-matcher-wrap@d8afa2cfb66dd3f982b1950429e652bc14d0d7d2 + # Pinned to v3.0.0. + uses: liskin/gh-problem-matcher-wrap@e7b7beaaafa52524748b31a381160759d68d61fb with: linters: isort run: isort --check --diff django tests scripts diff --git a/.github/workflows/schedule_tests.yml b/.github/workflows/schedule_tests.yml index 38f8db000c..b4ef57cd6a 100644 --- a/.github/workflows/schedule_tests.yml +++ b/.github/workflows/schedule_tests.yml @@ -26,7 +26,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} cache: 'pip' @@ -45,7 +45,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: pypy-3.10-nightly cache: 'pip' @@ -80,7 +80,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: pypy-3.10-nightly cache: 'pip' @@ -102,7 +102,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 - name: Set up Node.js - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: '20' cache: 'npm' @@ -117,7 +117,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: '3.12' cache: 'pip' @@ -153,7 +153,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: '3.12' cache: 'pip' diff --git a/.github/workflows/schedules.yml b/.github/workflows/schedules.yml index f1079606a7..041a0b3362 100644 --- a/.github/workflows/schedules.yml +++ b/.github/workflows/schedules.yml @@ -21,7 +21,7 @@ jobs: branch: - main steps: - - uses: actions/github-script@v6 + - uses: actions/github-script@v7 with: github-token: ${{secrets.SCHEDULE_WORKFLOW_TOKEN}} script: | diff --git a/.github/workflows/screenshots.yml b/.github/workflows/screenshots.yml index 231374a66f..c85a258949 100644 --- a/.github/workflows/screenshots.yml +++ b/.github/workflows/screenshots.yml @@ -22,7 +22,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: '3.11' cache: 'pip' @@ -40,7 +40,7 @@ jobs: echo "Generated screenshots for ${{ github.event.pull_request.head.sha }} at $(date)" >> $GITHUB_STEP_SUMMARY - name: Upload screenshots - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: screenshots-${{ github.event.pull_request.head.sha }} path: tests/screenshots/ diff --git a/.github/workflows/selenium.yml b/.github/workflows/selenium.yml index 57c82be242..fa916a0ded 100644 --- a/.github/workflows/selenium.yml +++ b/.github/workflows/selenium.yml @@ -22,7 +22,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: '3.12' cache: 'pip' @@ -59,7 +59,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: '3.12' cache: 'pip' diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 18a3b7f083..abe7c78a25 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -29,7 +29,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 - name: Set up Python - uses: actions/setup-python@v4 + uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} cache: 'pip' @@ -47,7 +47,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 - name: Set up Node.js - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: '20' cache: 'npm' diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 1c3571406f..d6ea11e8e0 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,6 +1,6 @@ repos: - repo: https://github.com/psf/black-pre-commit-mirror - rev: 23.12.1 + rev: 24.1.0 hooks: - id: black exclude: \.py-tpl$ @@ -9,7 +9,7 @@ repos: hooks: - id: blacken-docs additional_dependencies: - - black==23.12.1 + - black==24.1.0 files: 'docs/.*\.txt$' - repo: https://github.com/PyCQA/isort rev: 5.13.2 diff --git a/AUTHORS b/AUTHORS index 82aab46439..26cfe71138 100644 --- a/AUTHORS +++ b/AUTHORS @@ -44,6 +44,7 @@ answer newbie questions, and generally made Django that much better: Albert Wang Alcides Fonseca Aldian Fazrihady + Alejandro García Ruiz de Oteiza Aleksandra Sendecka Aleksi Häkli Alex Dutton @@ -103,6 +104,7 @@ answer newbie questions, and generally made Django that much better: Antti Kaihola Anubhav Joshi Anvesh Mishra + Anže Pečar Aram Dulyan arien Armin Ronacher @@ -637,6 +639,7 @@ answer newbie questions, and generally made Django that much better: Marc Tamlyn Marc-Aurèle Brothier Marian Andre + Marijke Luttekes Marijn Vriens Mario Gonzalez Mariusz Felisiak @@ -758,6 +761,7 @@ answer newbie questions, and generally made Django that much better: Nicolas Noé Nikita Marchant Nikita Sobolev + Nina Menezes Niran Babalola Nis Jørgensen Nowell Strite diff --git a/LICENSE.python b/LICENSE.python index a25ce5cf7b..9f995bf7bf 100644 --- a/LICENSE.python +++ b/LICENSE.python @@ -13,12 +13,12 @@ A. HISTORY OF THE SOFTWARE ========================== Python was created in the early 1990s by Guido van Rossum at Stichting -Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands +Mathematisch Centrum (CWI, see https://www.cwi.nl) in the Netherlands as a successor of a language called ABC. Guido remains Python's principal author, although it includes many contributions from others. In 1995, Guido continued his work on Python at the Corporation for -National Research Initiatives (CNRI, see http://www.cnri.reston.va.us) +National Research Initiatives (CNRI, see https://www.cnri.reston.va.us) in Reston, Virginia where he released several versions of the software. @@ -30,7 +30,7 @@ https://www.python.org/psf/) was formed, a non-profit organization created specifically to own Python-related Intellectual Property. Zope Corporation was a sponsoring member of the PSF. -All Python releases are Open Source (see http://www.opensource.org for +All Python releases are Open Source (see https://opensource.org for the Open Source Definition). Historically, most, but not all, Python releases have also been GPL-compatible; the table below summarizes the various releases. @@ -94,10 +94,8 @@ grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use Python alone or in any derivative version, provided, however, that PSF's License Agreement and PSF's notice of copyright, -i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, -2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Python Software Foundation; -All Rights Reserved" are retained in Python alone or in any derivative version -prepared by Licensee. +i.e., "Copyright (c) 2001-2024 Python Software Foundation; All Rights Reserved" +are retained in Python alone or in any derivative version prepared by Licensee. 3. In the event Licensee prepares a derivative work that is based on or incorporates Python or any part thereof, and wants to make diff --git a/django/__main__.py b/django/__main__.py index 8b96e91ea8..7415143848 100644 --- a/django/__main__.py +++ b/django/__main__.py @@ -3,6 +3,7 @@ Invokes django-admin when the django module is run as a script. Example: python -m django check """ + from django.core import management if __name__ == "__main__": diff --git a/django/conf/locale/af/LC_MESSAGES/django.mo b/django/conf/locale/af/LC_MESSAGES/django.mo index efb8b0fd9e..8b37fdb3fb 100644 Binary files a/django/conf/locale/af/LC_MESSAGES/django.mo and b/django/conf/locale/af/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/af/LC_MESSAGES/django.po b/django/conf/locale/af/LC_MESSAGES/django.po index 405b9f6481..cbd7abfedc 100644 --- a/django/conf/locale/af/LC_MESSAGES/django.po +++ b/django/conf/locale/af/LC_MESSAGES/django.po @@ -358,15 +358,15 @@ msgstr "Gee ’n geldige e-posadres." msgid "" "Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." msgstr "" -"Gee ’n geldige “slak” in wat bestaan ​​uit letters, syfers, onderstreep of " +"Gee ’n geldige “slak” wat bestaan ​​uit letters, syfers, onderstreep of " "koppelteken." msgid "" "Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " "hyphens." msgstr "" -"Gee ’n geldige “slak” in wat bestaan ​​uit Unicode-letters, syfers, " -"onderstreep of koppelteken." +"Gee ’n geldige “slak” wat bestaan ​​uit Unicode-letters, syfers, onderstreep " +"of koppelteken." msgid "Enter a valid IPv4 address." msgstr "Gee ’n geldige IPv4-adres." @@ -846,6 +846,8 @@ msgid "" "%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " "may be ambiguous or it may not exist." msgstr "" +"%(datetime)s kon nie in die tydsone %(current_timezone)s vertolk word nie; " +"dit is dalk dubbelsinnig, of bestaan dalk nie." msgid "Clear" msgstr "Maak skoon" @@ -1186,12 +1188,19 @@ msgid "" "required for security reasons, to ensure that your browser is not being " "hijacked by third parties." msgstr "" +"U sien hierdie boodskap omdat dié HTTPS-werf vereis dat u webblaaier ’n " +"“Referer header” moet stuur, maar dit is nie gestuur nie. Hierdie header is " +"vir sekuriteitsredes nodig om te verseker dat u blaaier nie deur derde " +"partye gekaap is nie." msgid "" "If you have configured your browser to disable “Referer” headers, please re-" "enable them, at least for this site, or for HTTPS connections, or for “same-" "origin” requests." msgstr "" +"As “Referer headers” in u blaaier gedeaktiveer is, heraktiveer hulle asb. " +"ten minste vir dié werf, of vir HTTPS-verbindings, of vir “same-origin”-" +"versoeke." msgid "" "If you are using the tag or " @@ -1200,6 +1209,11 @@ msgid "" "If you’re concerned about privacy, use alternatives like for links to third-party sites." msgstr "" +"Indien u die -etiket gebruik " +"of die “Referrer-Policy: no-referrer” header gebruik, verwyder hulle asb. " +"Die CSRF-beskerming vereis die “Referer” header om streng kontrole van die " +"verwysende bladsy te doen. Indien u besorg is oor privaatheid, gebruik " +"alternatiewe soos vir skakels na derdepartywebwerwe." msgid "" "You are seeing this message because this site requires a CSRF cookie when " @@ -1214,6 +1228,8 @@ msgid "" "If you have configured your browser to disable cookies, please re-enable " "them, at least for this site, or for “same-origin” requests." msgstr "" +"Indien koekies in u blaaier gedeaktiveer is, aktiveerder hulle asb. ten " +"minste vir dié werf, of vir “same-origin”-versoeke." msgid "More information is available with DEBUG=True." msgstr "Meer inligting is beskikbaar met DEBUG=True." @@ -1255,6 +1271,7 @@ msgstr "Geen %(verbose_name)s gevind vir die soektog" msgid "Page is not “last”, nor can it be converted to an int." msgstr "" +"Bladsy is nie “last” nie, en dit kan nie omgeskakel word na ’n heelgetal nie." #, python-format msgid "Invalid page (%(page_number)s): %(message)s" @@ -1262,7 +1279,7 @@ msgstr "Ongeldige bladsy (%(page_number)s): %(message)s" #, python-format msgid "Empty list and “%(class_name)s.allow_empty” is False." -msgstr "" +msgstr "Leë lys en “%(class_name)s.allow_empty” is vals." msgid "Directory indexes are not allowed here." msgstr "Gidsindekse word nie hier toegelaat nie." diff --git a/django/conf/locale/ckb/LC_MESSAGES/django.mo b/django/conf/locale/ckb/LC_MESSAGES/django.mo index ca3d949bce..cf41a447ec 100644 Binary files a/django/conf/locale/ckb/LC_MESSAGES/django.mo and b/django/conf/locale/ckb/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/ckb/LC_MESSAGES/django.po b/django/conf/locale/ckb/LC_MESSAGES/django.po index af7fef26d7..0d78c77e4b 100644 --- a/django/conf/locale/ckb/LC_MESSAGES/django.po +++ b/django/conf/locale/ckb/LC_MESSAGES/django.po @@ -5,14 +5,14 @@ # Bawar Jalal, 2020-2021 # Bawar Jalal, 2020 # kosar tofiq , 2020-2021 -# Swara , 2022-2023 +# Swara , 2022-2024 msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-01-17 02:13-0600\n" -"PO-Revision-Date: 2023-04-25 06:49+0000\n" -"Last-Translator: Swara , 2022-2023\n" +"POT-Creation-Date: 2023-09-18 11:41-0300\n" +"PO-Revision-Date: 2024-01-12 06:49+0000\n" +"Last-Translator: Swara , 2022-2024\n" "Language-Team: Central Kurdish (http://app.transifex.com/django/django/" "language/ckb/)\n" "MIME-Version: 1.0\n" @@ -55,7 +55,7 @@ msgid "Catalan" msgstr "کاتالانی" msgid "Central Kurdish (Sorani)" -msgstr "" +msgstr "کوردی" msgid "Czech" msgstr "چیکی" @@ -297,6 +297,9 @@ msgstr "تاتاری" msgid "Udmurt" msgstr "ئودمورتی" +msgid "Uyghur" +msgstr "ئۆیغور" + msgid "Ukrainian" msgstr "ئۆکرانی" @@ -393,6 +396,15 @@ msgstr "دڵنیاببە ئەم نرخە گەورەترە یاخود یەکسا msgid "Ensure this value is a multiple of step size %(limit_value)s." msgstr "دڵنیابە کە ئەم بەهایە چەندانێکە لە قەبارەی هەنگاوی%(limit_value)s." +#, python-format +msgid "" +"Ensure this value is a multiple of step size %(limit_value)s, starting from " +"%(offset)s, e.g. %(offset)s, %(valid_value1)s, %(valid_value2)s, and so on." +msgstr "" +"دڵنیابە ئەم بەهایە چەند هێندەیەکی قەبارەی هەنگاوەکانە %(limit_value)s, " +"دەستپێدەکات لە %(offset)s، بۆ نموونە %(offset)s، %(valid_value1)s، " +"%(valid_value2)s، هتد." + #, python-format msgid "" "Ensure this value has at least %(limit_value)d character (it has " @@ -504,7 +516,7 @@ msgid "String (up to %(max_length)s)" msgstr "ڕیزبەند (تا %(max_length)s)" msgid "String (unlimited)" -msgstr "" +msgstr "ڕیز(بێسنوور)" msgid "Comma-separated integers" msgstr "ژمارە تەواوەکان بە کۆما جیاکراونەتەوە" diff --git a/django/conf/locale/en_CA/__init__.py b/django/conf/locale/en_CA/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/django/conf/locale/en_CA/formats.py b/django/conf/locale/en_CA/formats.py new file mode 100644 index 0000000000..b34551de90 --- /dev/null +++ b/django/conf/locale/en_CA/formats.py @@ -0,0 +1,31 @@ +# This file is distributed under the same license as the Django package. +# +# The *_FORMAT strings use the Django date format syntax, +# see https://docs.djangoproject.com/en/dev/ref/templates/builtins/#date + +DATE_FORMAT = "j M Y" # 25 Oct 2006 +TIME_FORMAT = "P" # 2:30 p.m. +DATETIME_FORMAT = "j M Y, P" # 25 Oct 2006, 2:30 p.m. +YEAR_MONTH_FORMAT = "F Y" # October 2006 +MONTH_DAY_FORMAT = "j F" # 25 October +SHORT_DATE_FORMAT = "Y-m-d" +SHORT_DATETIME_FORMAT = "Y-m-d P" +FIRST_DAY_OF_WEEK = 0 # Sunday + +# The *_INPUT_FORMATS strings use the Python strftime format syntax, +# see https://docs.python.org/library/datetime.html#strftime-strptime-behavior +DATE_INPUT_FORMATS = [ + "%Y-%m-%d", # '2006-05-15' + "%y-%m-%d", # '06-05-15' +] +DATETIME_INPUT_FORMATS = [ + "%Y-%m-%d %H:%M:%S", # '2006-05-15 14:30:57' + "%y-%m-%d %H:%M:%S", # '06-05-15 14:30:57' + "%Y-%m-%d %H:%M:%S.%f", # '2006-05-15 14:30:57.000200' + "%y-%m-%d %H:%M:%S.%f", # '06-05-15 14:30:57.000200' + "%Y-%m-%d %H:%M", # '2006-05-15 14:30' + "%y-%m-%d %H:%M", # '06-05-15 14:30' +] +DECIMAL_SEPARATOR = "." +THOUSAND_SEPARATOR = "\xa0" # non-breaking space +NUMBER_GROUPING = 3 diff --git a/django/conf/locale/es/LC_MESSAGES/django.mo b/django/conf/locale/es/LC_MESSAGES/django.mo index d95011b09b..f84b533674 100644 Binary files a/django/conf/locale/es/LC_MESSAGES/django.mo and b/django/conf/locale/es/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/es/LC_MESSAGES/django.po b/django/conf/locale/es/LC_MESSAGES/django.po index 1539ce87df..fa014d6660 100644 --- a/django/conf/locale/es/LC_MESSAGES/django.po +++ b/django/conf/locale/es/LC_MESSAGES/django.po @@ -32,6 +32,7 @@ # Mariusz Felisiak , 2021 # mpachas , 2022 # monobotsoft , 2012 +# Natalia (Django Fellow), 2024 # ntrrgc , 2013 # ntrrgc , 2013 # Pablo, 2015 @@ -46,15 +47,16 @@ msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-09-18 11:41-0300\n" -"PO-Revision-Date: 2023-12-04 06:49+0000\n" -"Last-Translator: Uriel Medina , 2020-2021,2023\n" +"PO-Revision-Date: 2024-01-12 06:49+0000\n" +"Last-Translator: Natalia (Django Fellow), 2024\n" "Language-Team: Spanish (http://app.transifex.com/django/django/language/" "es/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? " +"1 : 2;\n" msgid "Afrikaans" msgstr "Africano" @@ -1203,7 +1205,7 @@ msgstr ", " #, python-format msgid "%(num)d year" msgid_plural "%(num)d years" -msgstr[0] "%(num)d años" +msgstr[0] "%(num)d año" msgstr[1] "%(num)d años" msgstr[2] "%(num)d años" @@ -1238,8 +1240,8 @@ msgstr[2] "%(num)d horas" #, python-format msgid "%(num)d minute" msgid_plural "%(num)d minutes" -msgstr[0] "%(num)d minutos" -msgstr[1] "%(num)d minutes" +msgstr[0] "%(num)d minuto" +msgstr[1] "%(num)d minutos" msgstr[2] "%(num)d minutos" msgid "Forbidden" diff --git a/django/conf/locale/fr_CA/formats.py b/django/conf/locale/fr_CA/formats.py index b03e4ee4c3..4f1a017f16 100644 --- a/django/conf/locale/fr_CA/formats.py +++ b/django/conf/locale/fr_CA/formats.py @@ -9,7 +9,7 @@ YEAR_MONTH_FORMAT = "F Y" MONTH_DAY_FORMAT = "j F" SHORT_DATE_FORMAT = "Y-m-d" SHORT_DATETIME_FORMAT = "Y-m-d H\xa0h\xa0i" -FIRST_DAY_OF_WEEK = 1 # Lundi +FIRST_DAY_OF_WEEK = 0 # Dimanche # The *_INPUT_FORMATS strings use the Python strftime format syntax, # see https://docs.python.org/library/datetime.html#strftime-strptime-behavior diff --git a/django/conf/locale/hu/LC_MESSAGES/django.mo b/django/conf/locale/hu/LC_MESSAGES/django.mo index 621965a691..f55eb626b4 100644 Binary files a/django/conf/locale/hu/LC_MESSAGES/django.mo and b/django/conf/locale/hu/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/hu/LC_MESSAGES/django.po b/django/conf/locale/hu/LC_MESSAGES/django.po index 54dd7ef6ca..117789e33e 100644 --- a/django/conf/locale/hu/LC_MESSAGES/django.po +++ b/django/conf/locale/hu/LC_MESSAGES/django.po @@ -4,6 +4,7 @@ # Akos Zsolt Hochrein , 2018 # András Veres-Szentkirályi, 2016-2021,2023 # Attila Nagy <>, 2012 +# Balázs Meskó , 2024 # Balázs R, 2023 # Dóra Szendrei , 2017 # Istvan Farkas , 2019 @@ -17,8 +18,8 @@ msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-09-18 11:41-0300\n" -"PO-Revision-Date: 2023-12-04 06:49+0000\n" -"Last-Translator: András Veres-Szentkirályi, 2016-2021,2023\n" +"PO-Revision-Date: 2024-01-12 06:49+0000\n" +"Last-Translator: Balázs Meskó , 2024\n" "Language-Team: Hungarian (http://app.transifex.com/django/django/language/" "hu/)\n" "MIME-Version: 1.0\n" @@ -286,13 +287,13 @@ msgid "Telugu" msgstr "Telugu" msgid "Tajik" -msgstr "tadzsik" +msgstr "Tádzsik" msgid "Thai" msgstr "Thai" msgid "Turkmen" -msgstr "türkmén" +msgstr "Türkmén" msgid "Turkish" msgstr "Török" @@ -304,7 +305,7 @@ msgid "Udmurt" msgstr "Udmurt" msgid "Uyghur" -msgstr "ujgur" +msgstr "Ujgur" msgid "Ukrainian" msgstr "Ukrán" @@ -339,7 +340,7 @@ msgstr "Szindikáció" #. Translators: String used to replace omitted page numbers in elided page #. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. msgid "…" -msgstr "..." +msgstr "…" msgid "That page number is not an integer" msgstr "Az oldalszám nem egész szám." @@ -491,7 +492,7 @@ msgstr "Már létezik %(model_name)s ilyennel: %(field_labels)s." #, python-format msgid "Constraint “%(name)s” is violated." -msgstr "\"%(name)s\" kényszer megsértve." +msgstr "„%(name)s” megszorítás megsértve." #, python-format msgid "Value %(value)r is not a valid choice." diff --git a/django/conf/locale/mn/LC_MESSAGES/django.mo b/django/conf/locale/mn/LC_MESSAGES/django.mo index 06071c937b..c35a525c44 100644 Binary files a/django/conf/locale/mn/LC_MESSAGES/django.mo and b/django/conf/locale/mn/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/mn/LC_MESSAGES/django.po b/django/conf/locale/mn/LC_MESSAGES/django.po index d846523da5..47479f8f69 100644 --- a/django/conf/locale/mn/LC_MESSAGES/django.po +++ b/django/conf/locale/mn/LC_MESSAGES/django.po @@ -7,6 +7,7 @@ # Jannis Leidel , 2011 # jargalan , 2011 # Tsolmon , 2011 +# Turmunkh Batkhuyag, 2023 # Zorig, 2013-2014,2016,2018 # Zorig, 2019 # Анхбаяр Анхаа , 2013-2016,2018-2019 @@ -16,10 +17,10 @@ msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-27 22:40+0200\n" -"PO-Revision-Date: 2019-11-05 07:28+0000\n" -"Last-Translator: Анхбаяр Анхаа \n" -"Language-Team: Mongolian (http://www.transifex.com/django/django/language/" +"POT-Creation-Date: 2023-09-18 11:41-0300\n" +"PO-Revision-Date: 2023-12-25 06:49+0000\n" +"Last-Translator: Turmunkh Batkhuyag, 2023\n" +"Language-Team: Mongolian (http://app.transifex.com/django/django/language/" "mn/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -33,6 +34,9 @@ msgstr "Африк" msgid "Arabic" msgstr "Араб" +msgid "Algerian Arabic" +msgstr "Алжир Араб" + msgid "Asturian" msgstr "Астури" @@ -57,6 +61,9 @@ msgstr "Босни" msgid "Catalan" msgstr "Каталан" +msgid "Central Kurdish (Sorani)" +msgstr "Төв Курд (Сорани)" + msgid "Czech" msgstr "Чех" @@ -156,6 +163,9 @@ msgstr "Interlingua" msgid "Indonesian" msgstr "Индонези" +msgid "Igbo" +msgstr "Игбо" + msgid "Ido" msgstr "Идо" @@ -186,6 +196,9 @@ msgstr "Канад" msgid "Korean" msgstr "Солонгос" +msgid "Kyrgyz" +msgstr "Киргиз" + msgid "Luxembourgish" msgstr "Лүксенбүргиш" @@ -207,6 +220,9 @@ msgstr "Монгол" msgid "Marathi" msgstr "маратхи" +msgid "Malay" +msgstr "Малай" + msgid "Burmese" msgstr "Бирм" @@ -270,9 +286,15 @@ msgstr "Тамил" msgid "Telugu" msgstr "Тэлүгү" +msgid "Tajik" +msgstr "Тажик" + msgid "Thai" msgstr "Тайланд" +msgid "Turkmen" +msgstr "Турк хүн" + msgid "Turkish" msgstr "Турк" @@ -282,6 +304,9 @@ msgstr "Татар" msgid "Udmurt" msgstr "Удмурт" +msgid "Uyghur" +msgstr "Уйгур" + msgid "Ukrainian" msgstr "Украйн" @@ -312,6 +337,11 @@ msgstr "Статик файлууд" msgid "Syndication" msgstr "Нэгтгэл" +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "…" + msgid "That page number is not an integer" msgstr "Хуудасны дугаар бүхэл тоо / Integer / биш байна" @@ -337,11 +367,15 @@ msgstr "Зөв имэйл хаяг оруулна уу" msgid "" "Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." msgstr "" +"Үсэг, тоо, доогуур зураас эсвэл зурааснаас бүрдсэн хүчинтэй \"slug\" оруулна " +"уу." msgid "" "Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " "hyphens." msgstr "" +"Юникод үсэг, тоо, доогуур зураас, зурааснаас бүрдсэн хүчинтэй \"slug\" " +"оруулна уу." msgid "Enter a valid IPv4 address." msgstr "Зөв IPv4 хаяг оруулна уу. " @@ -369,6 +403,20 @@ msgstr "Энэ утга %(limit_value)s -с бага эсвэл тэнцүү б msgid "Ensure this value is greater than or equal to %(limit_value)s." msgstr "Энэ утга %(limit_value)s -с их эсвэл тэнцүү байх нөхцлийг хангана уу." +#, python-format +msgid "Ensure this value is a multiple of step size %(limit_value)s." +msgstr "" +"Утга нь алхамын хэмжээнд %(limit_value)s-ээс олон байхыг " +"баталгаажуулна уу." + +#, python-format +msgid "" +"Ensure this value is a multiple of step size %(limit_value)s, starting from " +"%(offset)s, e.g. %(offset)s, %(valid_value1)s, %(valid_value2)s, and so on." +msgstr "" +"Энэ утга нь алхмын хэмжээнд %(limit_value)s, %(offset)s-с эхлэн %(offset)s, " +"%(valid_value1)s, %(valid_value2)s гэх мэт утга байхыг баталгаажуулна уу." + #, python-format msgid "" "Ensure this value has at least %(limit_value)d character (it has " @@ -425,6 +473,8 @@ msgid "" "File extension “%(extension)s” is not allowed. Allowed extensions are: " "%(allowed_extensions)s." msgstr "" +"Файлын өргөтгөл “%(extension)s” зөвшөөрөгдөөгүй байна. Боломжит өргөтгөлүүд: " +"%(allowed_extensions)s." msgid "Null characters are not allowed." msgstr "Хоосон тэмдэгт зөвшөөрөгдөхгүй." @@ -436,6 +486,10 @@ msgstr "ба" msgid "%(model_name)s with this %(field_labels)s already exists." msgstr "%(field_labels)s талбар бүхий %(model_name)s аль хэдийн орсон байна." +#, python-format +msgid "Constraint “%(name)s” is violated." +msgstr "“%(name)s” хязгаарлалтыг зөрчсөн." + #, python-format msgid "Value %(value)r is not a valid choice." msgstr "%(value)r буруу сонголт байна." @@ -450,8 +504,8 @@ msgstr "Энэ хэсэг хоосон байж болохгүй." msgid "%(model_name)s with this %(field_label)s already exists." msgstr "%(field_label)s-тэй %(model_name)s-ийг аль хэдийнэ оруулсан байна." -#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. -#. Eg: "Title must be unique for pub_date year" +#. Translators: The 'lookup_type' is one of 'date', 'year' or +#. 'month'. Eg: "Title must be unique for pub_date year" #, python-format msgid "" "%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." @@ -465,11 +519,11 @@ msgstr "Талбарийн төрөл нь : %(field_type)s" #, python-format msgid "“%(value)s” value must be either True or False." -msgstr "" +msgstr "\"“%(value)s” утга True эсвэл False байх ёстой.\"" #, python-format msgid "“%(value)s” value must be either True, False, or None." -msgstr "" +msgstr "“%(value)s” утга True, False, эсвэл None байх ёстой." msgid "Boolean (Either True or False)" msgstr "Boolean (Үнэн худлын аль нэг нь)" @@ -478,6 +532,9 @@ msgstr "Boolean (Үнэн худлын аль нэг нь)" msgid "String (up to %(max_length)s)" msgstr "Бичвэр (%(max_length)s хүртэл)" +msgid "String (unlimited)" +msgstr "Тэмдэг мөр (хязгааргүй)" + msgid "Comma-separated integers" msgstr "Таслалаар тусгаарлагдсан бүхэл тоо" @@ -486,12 +543,15 @@ msgid "" "“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " "format." msgstr "" +"“%(value)s” утга нь буруу огнооны форматтай байна. Энэ нь YYYY-MM-DD " +"форматтай байх ёстой." #, python-format msgid "" "“%(value)s” value has the correct format (YYYY-MM-DD) but it is an invalid " "date." msgstr "" +"“%(value)s” утга зөв (YYYY-MM-DD) форматтай байна, гэхдээ буруу огноо байна." msgid "Date (without time)" msgstr "Огноо (цаггүй)" @@ -501,19 +561,23 @@ msgid "" "“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." "uuuuuu]][TZ] format." msgstr "" +"“%(value)s” утга буруу форматтай байна. Энэ нь YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" +"[TZ] форматтай байх ёстой." #, python-format msgid "" "“%(value)s” value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" "[TZ]) but it is an invalid date/time." msgstr "" +"“%(value)s” утгын формат зөв байна (YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]) " +"гэхдээ буруу огноо/цаг байна." msgid "Date (with time)" msgstr "Огноо (цагтай)" #, python-format msgid "“%(value)s” value must be a decimal number." -msgstr "" +msgstr "“%(value)s” утга нь бодит тоо байх ёстой." msgid "Decimal number" msgstr "Аравтын бутархайт тоо" @@ -523,6 +587,8 @@ msgid "" "“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." "uuuuuu] format." msgstr "" +"“%(value)s” утга буруу форматтай байна. Энэ нь [DD] [[HH:]MM:]ss[.uuuuuu] " +"форматтай байх ёстой." msgid "Duration" msgstr "Үргэлжлэх хугацаа" @@ -542,7 +608,7 @@ msgstr "Хөвөгч таслалтай тоо" #, python-format msgid "“%(value)s” value must be an integer." -msgstr "" +msgstr "“%(value)s” утга нь бүхэл тоо байх ёстой." msgid "Integer" msgstr "Бүхэл тоо" @@ -550,6 +616,9 @@ msgstr "Бүхэл тоо" msgid "Big (8 byte) integer" msgstr "Том (8 байт) бүхэл тоо" +msgid "Small integer" +msgstr "Бага тоон утна" + msgid "IPv4 address" msgstr "IPv4 хаяг" @@ -558,11 +627,14 @@ msgstr "IP хаяг" #, python-format msgid "“%(value)s” value must be either None, True or False." -msgstr "" +msgstr "\"“%(value)s” утга нь None, True эсвэл False байх ёстой.\"" msgid "Boolean (Either True, False or None)" msgstr "Boolean (Үнэн, худал, эсвэл юу ч биш)" +msgid "Positive big integer" +msgstr "Эерэг том бүхэл тоо" + msgid "Positive integer" msgstr "Бүхэл тоох утга" @@ -573,9 +645,6 @@ msgstr "Бага бүхэл тоон утга" msgid "Slug (up to %(max_length)s)" msgstr "Слаг (ихдээ %(max_length)s )" -msgid "Small integer" -msgstr "Бага тоон утна" - msgid "Text" msgstr "Текст" @@ -584,12 +653,16 @@ msgid "" "“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " "format." msgstr "" +"“%(value)s” утга буруу форматтай байна. Энэ нь HH:MM[:ss[.uuuuuu]] форматтай " +"байх ёстой." #, python-format msgid "" "“%(value)s” value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an " "invalid time." msgstr "" +"“%(value)s” утга зөв форматтай байна (HH:MM[:ss[.uuuuuu]]) гэхдээ буруу цаг " +"байна." msgid "Time" msgstr "Цаг" @@ -602,7 +675,7 @@ msgstr "Бинари өгөгдөл" #, python-format msgid "“%(value)s” is not a valid UUID." -msgstr "" +msgstr "“%(value)s” нь хүчинтэй UUID биш." msgid "Universally unique identifier" msgstr "UUID" @@ -613,6 +686,12 @@ msgstr "Файл" msgid "Image" msgstr "Зураг" +msgid "A JSON object" +msgstr "JSON объект " + +msgid "Value must be valid JSON." +msgstr "JSON утга байх боломжтой." + #, python-format msgid "%(model)s instance with %(field)s %(value)r does not exist." msgstr "%(field)s %(value)r утгатай %(model)s байхгүй байна." @@ -705,6 +784,9 @@ msgstr "Бүрэн утга оруулна уу." msgid "Enter a valid UUID." msgstr "Зөв UUID оруулна уу." +msgid "Enter a valid JSON." +msgstr "JSON-ийн бүтцээр оруулна уу." + #. Translators: This is the default suffix added to form field labels msgid ":" msgstr ":" @@ -713,20 +795,26 @@ msgstr ":" msgid "(Hidden field %(name)s) %(error)s" msgstr "(Нууц талбар%(name)s) %(error)s" -msgid "ManagementForm data is missing or has been tampered with" -msgstr "УдирдахФормын мэдээлэл олдсонгүй эсвэл өөрчлөгдсөн байна" +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" +"ManagementForm-ын өгөгдөл дутуу эсвэл өөрчилсөн байна. Дутуу талбарууд: " +"%(field_names)s. Хэрэв асуудал хэвээр байвал та алдааны тайлан гаргах " +"шаардлагатай байж магадгүй." #, python-format -msgid "Please submit %d or fewer forms." -msgid_plural "Please submit %d or fewer forms." -msgstr[0] "%d ихгүй форм илгээн үү" -msgstr[1] "%d ихгүй форм илгээн үү" +msgid "Please submit at most %(num)d form." +msgid_plural "Please submit at most %(num)d forms." +msgstr[0] "Та хамгийн ихдээ %(num)d форм илгээнэ үү." +msgstr[1] "Та хамгийн ихдээ %(num)d форм илгээнэ үү." #, python-format -msgid "Please submit %d or more forms." -msgid_plural "Please submit %d or more forms." -msgstr[0] "%d эсвэл их форм илгээнэ үү" -msgstr[1] "%d эсвэл их форм илгээнэ үү" +msgid "Please submit at least %(num)d form." +msgid_plural "Please submit at least %(num)d forms." +msgstr[0] "Та хамгийн багадаа %(num)d форм илгээнэ үү." +msgstr[1] "Та хамгийн багадаа %(num)d форм илгээнэ үү." msgid "Order" msgstr "Эрэмбэлэх" @@ -763,13 +851,15 @@ msgstr "Зөв сонголт хийнэ үү. Энэ утга сонголто #, python-format msgid "“%(pk)s” is not a valid value." -msgstr "" +msgstr "“%(pk)s” нь шаардлага хангаагүй утга байна." #, python-format msgid "" "%(datetime)s couldn’t be interpreted in time zone %(current_timezone)s; it " "may be ambiguous or it may not exist." msgstr "" +"%(datetime)s нь %(current_timezone)s цагийн бүсэд хөрвүүлэх боломжгүй байна; " +"энэ нь хоёрдмол утгатай эсвэл байхгүй байж болно." msgid "Clear" msgstr "Цэвэрлэх" @@ -789,15 +879,7 @@ msgstr "Тийм" msgid "No" msgstr "Үгүй" -msgid "Year" -msgstr "Жил" - -msgid "Month" -msgstr "Сар" - -msgid "Day" -msgstr "Өдөр" - +#. Translators: Please do not add spaces around commas. msgid "yes,no,maybe" msgstr "тийм,үгүй,магадгүй" @@ -1071,43 +1153,40 @@ msgid ", " msgstr ", " #, python-format -msgid "%d year" -msgid_plural "%d years" -msgstr[0] "%d жил" -msgstr[1] "%d жил" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d жил" +msgstr[1] "%(num)d жил" #, python-format -msgid "%d month" -msgid_plural "%d months" -msgstr[0] "%d сар" -msgstr[1] "%d сар" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d сар" +msgstr[1] "%(num)d сар" #, python-format -msgid "%d week" -msgid_plural "%d weeks" -msgstr[0] "%d долоо хоног" -msgstr[1] "%d долоо хоног" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d долоо хоног" +msgstr[1] "%(num)d долоо хоног" #, python-format -msgid "%d day" -msgid_plural "%d days" -msgstr[0] "%d өдөр" -msgstr[1] "%d өдөр" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d өдөр" +msgstr[1] "%(num)d өдөр" #, python-format -msgid "%d hour" -msgid_plural "%d hours" -msgstr[0] "%d цаг" -msgstr[1] "%d цаг" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d цаг" +msgstr[1] "%(num)d цаг" #, python-format -msgid "%d minute" -msgid_plural "%d minutes" -msgstr[0] "%d минут" -msgstr[1] "%d минут" - -msgid "0 minutes" -msgstr "0 минут" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d минут" +msgstr[1] "%(num)d минут" msgid "Forbidden" msgstr "Хориотой" @@ -1117,24 +1196,34 @@ msgstr "CSRF дээр уналаа. Хүсэлт таслагдсан." msgid "" "You are seeing this message because this HTTPS site requires a “Referer " -"header” to be sent by your Web browser, but none was sent. This header is " +"header” to be sent by your web browser, but none was sent. This header is " "required for security reasons, to ensure that your browser is not being " "hijacked by third parties." msgstr "" +"Та энэ мэдэгдлийг харж байгаа нь таны веб хөтөчөөс 'Referer header'-ийг " +"HTTPS хуудасд илгээх шаардлагатай байгаатай холбоотой. Энэ нь гуравдагч " +"этгээдээс хамгаалахын тулд шаардлагатай." msgid "" "If you have configured your browser to disable “Referer” headers, please re-" "enable them, at least for this site, or for HTTPS connections, or for “same-" "origin” requests." msgstr "" +"Хэрвээ та веб хөтөчөө 'Referer' толгойг идэвхигүй болгосон бол энэ хуудас, " +"HTTPS холболт эсвэл 'same-origin' хүсэлтэнд зориулж идэвхижүүлнэ үү." msgid "" "If you are using the tag or " "including the “Referrer-Policy: no-referrer” header, please remove them. The " "CSRF protection requires the “Referer” header to do strict referer checking. " -"If you’re concerned about privacy, use alternatives like for links to third-party sites." +"If you’re concerned about privacy, use alternatives like for links to third-party sites." msgstr "" +"Хэрвээ та таг ашиглаж " +"байгаа бол эсвэл 'Referrer-Policy: no-referrer' толгойг нэмсэн бол, " +"эдгээрийг устгана уу. CSRF хамгаалалт 'Referer' толгойг чанд шалгалт хийхийг " +"шаарддаг. Хэрвээ та аюулгүй байдлыг чухалчилж байгаа бол гуравдагч сайтыг " +"холбохдоо ашиглана уу." msgid "" "You are seeing this message because this site requires a CSRF cookie when " @@ -1149,6 +1238,8 @@ msgid "" "If you have configured your browser to disable cookies, please re-enable " "them, at least for this site, or for “same-origin” requests." msgstr "" +"Хэрвээ та веб хөтөчийн \"cookies\"-г хаасан бол энэ хуудас эсвэл 'same-" +"origin' хүсэлтэнд зориулж идэвхижүүлнэ үү." msgid "More information is available with DEBUG=True." msgstr "DEBUG=True үед дэлгэрэнгүй мэдээлэл харах боломжтой." @@ -1183,13 +1274,14 @@ msgstr "" #, python-format msgid "Invalid date string “%(datestr)s” given format “%(format)s”" msgstr "" +"Буруу огноо. '%(datestr)s' огноо '%(format)s' хэлбэрт тохирохгүй байна." #, python-format msgid "No %(verbose_name)s found matching the query" msgstr "Шүүлтүүрт таарах %(verbose_name)s олдсонгүй " msgid "Page is not “last”, nor can it be converted to an int." -msgstr "" +msgstr "Хуудас \"сүүлчийн\" биш бөгөөд үүнийг int болгон хувиргах боломжгүй." #, python-format msgid "Invalid page (%(page_number)s): %(message)s" @@ -1197,7 +1289,7 @@ msgstr "Буруу хуудас (%(page_number)s): %(message)s" #, python-format msgid "Empty list and “%(class_name)s.allow_empty” is False." -msgstr "" +msgstr "Хоосон жагсаалт ба “%(class_name)s.allow_empty” нь False байна." msgid "Directory indexes are not allowed here." msgstr "Файлын жагсаалтыг энд зөвшөөрөөгүй." @@ -1210,8 +1302,8 @@ msgstr "“%(path)s” хуудас байхгүй байна." msgid "Index of %(directory)s" msgstr "%(directory)s ийн жагсаалт" -msgid "Django: the Web framework for perfectionists with deadlines." -msgstr "Джанго: Чанартай бөгөөд хугацаанд нь хийхэд зориулсан Web framework." +msgid "The install worked successfully! Congratulations!" +msgstr "Амжилттай суулгалаа! Баяр хүргэе!" #, python-format msgid "" @@ -1222,26 +1314,23 @@ msgstr "" "%(version)s/releases/\" target=\"_blank\" rel=\"noopener\">тэмдэглэл харах " -msgid "The install worked successfully! Congratulations!" -msgstr "Амжилттай суулгалаа! Баяр хүргэе!" - #, python-format msgid "" "You are seeing this page because DEBUG=True is in your settings file and you have not configured any " -"URLs." +"%(version)s/ref/settings/#debug\" target=\"_blank\" " +"rel=\"noopener\">DEBUG=True is in your settings file and you have not " +"configured any URLs." msgstr "" "Таний тохиргооны файл дээр DEBUG=TRUE гэж тохируулсан мөн URLs дээр тохиргоо хийгээгүй учраас " -"энэ хуудасыг харж байна." +"%(version)s/ref/settings/#debug\" target=\"_blank\" " +"rel=\"noopener\">DEBUG=TRUE гэж тохируулсан мөн URLs дээр тохиргоо " +"хийгээгүй учраас энэ хуудасыг харж байна." msgid "Django Documentation" msgstr "Джанго баримтжуулалт" msgid "Topics, references, & how-to’s" -msgstr "" +msgstr "Сэдэв, лавлахууд болон зааврууд" msgid "Tutorial: A Polling App" msgstr "Хичээл: Санал асуулга App" diff --git a/django/conf/locale/mr/LC_MESSAGES/django.mo b/django/conf/locale/mr/LC_MESSAGES/django.mo index 46c9f34210..8cf9a708ea 100644 Binary files a/django/conf/locale/mr/LC_MESSAGES/django.mo and b/django/conf/locale/mr/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/mr/LC_MESSAGES/django.po b/django/conf/locale/mr/LC_MESSAGES/django.po index ab6908514f..fe4c6ebb2b 100644 --- a/django/conf/locale/mr/LC_MESSAGES/django.po +++ b/django/conf/locale/mr/LC_MESSAGES/django.po @@ -1,15 +1,16 @@ # This file is distributed under the same license as the Django package. # # Translators: +# Omkar Parab, 2024 # Suraj Kawade, 2013 msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-09-27 22:40+0200\n" -"PO-Revision-Date: 2019-11-05 00:38+0000\n" -"Last-Translator: Ramiro Morales\n" -"Language-Team: Marathi (http://www.transifex.com/django/django/language/" +"POT-Creation-Date: 2023-09-18 11:41-0300\n" +"PO-Revision-Date: 2024-01-20 06:49+0000\n" +"Last-Translator: Omkar Parab, 2024\n" +"Language-Team: Marathi (http://app.transifex.com/django/django/language/" "mr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -23,8 +24,11 @@ msgstr "अफ्रिकान्स" msgid "Arabic" msgstr "अरेबिक" +msgid "Algerian Arabic" +msgstr "अल्जेरियन अरेबिक" + msgid "Asturian" -msgstr "" +msgstr "अस्टूरियन" msgid "Azerbaijani" msgstr "अझरबैजानी" @@ -33,7 +37,7 @@ msgid "Bulgarian" msgstr "बल्गेरियन" msgid "Belarusian" -msgstr "बेलारूसी" +msgstr "बेलारशियन" msgid "Bengali" msgstr "बंगाली" @@ -47,6 +51,9 @@ msgstr "बोस्नियन" msgid "Catalan" msgstr "कॅटलान" +msgid "Central Kurdish (Sorani)" +msgstr "मध्य कुर्दिश (सोरानी)" + msgid "Czech" msgstr "झेक" @@ -60,7 +67,7 @@ msgid "German" msgstr "जर्मन" msgid "Lower Sorbian" -msgstr "" +msgstr "लोअर सोर्बियन" msgid "Greek" msgstr "ग्रीक" @@ -69,7 +76,7 @@ msgid "English" msgstr "इंग्रजी" msgid "Australian English" -msgstr "" +msgstr "ऑस्ट्रेलियन इंग्रजी" msgid "British English" msgstr "ब्रिटिश इंग्रजी" @@ -84,277 +91,310 @@ msgid "Argentinian Spanish" msgstr "अर्जेन्टिनाची स्पॅनिश" msgid "Colombian Spanish" -msgstr "" +msgstr "कोलंबियन स्पॅनिश" msgid "Mexican Spanish" msgstr "मेक्सिकन स्पॅनिश" msgid "Nicaraguan Spanish" -msgstr "" +msgstr "निकारागुआन स्पॅनिश" msgid "Venezuelan Spanish" -msgstr "" +msgstr "व्हेनेझुएलन स्पॅनिश" msgid "Estonian" -msgstr "" +msgstr "एस्टोनियन" msgid "Basque" -msgstr "" +msgstr "बास्क" msgid "Persian" -msgstr "" +msgstr "पर्शियन" msgid "Finnish" -msgstr "" +msgstr "फिनिश" msgid "French" -msgstr "" +msgstr "फ्रेंच" msgid "Frisian" -msgstr "" +msgstr "फ्रिसियन" msgid "Irish" -msgstr "" +msgstr "आयरिश" msgid "Scottish Gaelic" -msgstr "" +msgstr "स्कॉटिश गेलिक" msgid "Galician" -msgstr "" +msgstr "गॅलिशियन" msgid "Hebrew" -msgstr "" +msgstr "हिब्रू" msgid "Hindi" -msgstr "" +msgstr "हिंदी" msgid "Croatian" -msgstr "" +msgstr "क्रोएशियन" msgid "Upper Sorbian" -msgstr "" +msgstr "अप्पर सोर्बियन" msgid "Hungarian" -msgstr "" +msgstr "हंगेरियन" msgid "Armenian" -msgstr "" +msgstr "अर्मेनियन" msgid "Interlingua" -msgstr "" +msgstr "इंटरलिंगुआ" msgid "Indonesian" -msgstr "" +msgstr "इंडोनेशियन" + +msgid "Igbo" +msgstr "इग्बो" msgid "Ido" -msgstr "" +msgstr "इदो" msgid "Icelandic" -msgstr "" +msgstr "आयलँडिक" msgid "Italian" -msgstr "" +msgstr "इटालियन" msgid "Japanese" -msgstr "" +msgstr "जपानी" msgid "Georgian" -msgstr "" +msgstr "जॉर्जियन" msgid "Kabyle" -msgstr "" +msgstr "कबायल" msgid "Kazakh" -msgstr "" +msgstr "कझाक" msgid "Khmer" -msgstr "" +msgstr "ख्मेर" msgid "Kannada" -msgstr "" +msgstr "कन्नड" msgid "Korean" -msgstr "" +msgstr "कोरियन" + +msgid "Kyrgyz" +msgstr "किर्गिझ" msgid "Luxembourgish" -msgstr "" +msgstr "लक्झेंबर्गिश" msgid "Lithuanian" -msgstr "" +msgstr "लिथुआनियन" msgid "Latvian" -msgstr "" +msgstr "लाटव्हिअन" msgid "Macedonian" -msgstr "" +msgstr "मॅसेडोनिअन" msgid "Malayalam" -msgstr "" +msgstr "मल्याळम" msgid "Mongolian" -msgstr "" +msgstr "मंगोलियन" msgid "Marathi" -msgstr "" +msgstr "मराठी" + +msgid "Malay" +msgstr "मलय" msgid "Burmese" -msgstr "" +msgstr "बर्मीस" msgid "Norwegian Bokmål" -msgstr "" +msgstr "नॉर्वेजियन बोकमाल" msgid "Nepali" -msgstr "" +msgstr "नेपाळी" msgid "Dutch" -msgstr "" +msgstr "डच" msgid "Norwegian Nynorsk" -msgstr "" +msgstr "नॉर्वेजिअन निनॉर्स्क " msgid "Ossetic" -msgstr "" +msgstr "ओस्सेटिक" msgid "Punjabi" -msgstr "" +msgstr "पंजाबी" msgid "Polish" -msgstr "" +msgstr "पॉलिश" msgid "Portuguese" -msgstr "" +msgstr "पोर्तुगीज" msgid "Brazilian Portuguese" -msgstr "" +msgstr "ब्रझिलियन पोर्तुगीज" msgid "Romanian" -msgstr "" +msgstr "रोमेनियन" msgid "Russian" -msgstr "" +msgstr "रशियन" msgid "Slovak" -msgstr "" +msgstr "स्लोवाक" msgid "Slovenian" -msgstr "" +msgstr "स्लोवेनियन" msgid "Albanian" -msgstr "" +msgstr "अल्बेनियन" msgid "Serbian" -msgstr "" +msgstr "सर्बियन" msgid "Serbian Latin" -msgstr "" +msgstr "सर्बियन लॅटिन" msgid "Swedish" -msgstr "" +msgstr "स्वीडिश" msgid "Swahili" -msgstr "" +msgstr "स्वाहिली" msgid "Tamil" -msgstr "" +msgstr "तमिळ" msgid "Telugu" -msgstr "" +msgstr "तेलुगु" + +msgid "Tajik" +msgstr "ताजिक" msgid "Thai" -msgstr "" +msgstr "थाई" + +msgid "Turkmen" +msgstr "तुर्कमेन" msgid "Turkish" -msgstr "" +msgstr "तुर्की" msgid "Tatar" -msgstr "" +msgstr "टाटर" msgid "Udmurt" -msgstr "" +msgstr "उदमर्त" + +msgid "Uyghur" +msgstr "उईघुर" msgid "Ukrainian" -msgstr "" +msgstr "युक्रेनियन" msgid "Urdu" -msgstr "" +msgstr "उर्दू" msgid "Uzbek" -msgstr "" +msgstr "उझबेक" msgid "Vietnamese" -msgstr "" +msgstr "व्हिएतनामी" msgid "Simplified Chinese" -msgstr "" +msgstr "सोपी चायनिज" msgid "Traditional Chinese" -msgstr "" +msgstr "पारंपारिक चायनिज" msgid "Messages" -msgstr "" +msgstr "संदेश" msgid "Site Maps" -msgstr "" +msgstr "संकेतस्थळ नकाशे" msgid "Static Files" -msgstr "" +msgstr "स्थिर फाइल्स" msgid "Syndication" -msgstr "" +msgstr "सिंडिकेशन" + +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "..." msgid "That page number is not an integer" -msgstr "" +msgstr "तो पान क्रमांक पूर्णांक नाही." msgid "That page number is less than 1" -msgstr "" +msgstr "तो पान क्रमांक 1 पेक्षा कमी आहे" msgid "That page contains no results" -msgstr "" +msgstr "त्या पानावर कोणतेही परिणाम नाहीत." msgid "Enter a valid value." -msgstr "" +msgstr "वैध मूल्य टाका." msgid "Enter a valid URL." -msgstr "" +msgstr "एक योग्य युआरएल टाका करा." msgid "Enter a valid integer." -msgstr "" +msgstr "योग्य पूर्णांक टाका." msgid "Enter a valid email address." -msgstr "" +msgstr "योग्य विपत्र पत्ता टाका." #. Translators: "letters" means latin letters: a-z and A-Z. msgid "" "Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." -msgstr "" +msgstr "अक्षरे, संख्या, अंडरस्कोर किंवा हायफनसह असलेला योग्य \"स्लग\" टाका." msgid "" "Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " "hyphens." -msgstr "" +msgstr "योग्य \"स्लग\" टाका ज्यामध्ये यूनिकोड अक्षरे, अंक, अंडरस्कोर किंवा हायफन असतात." msgid "Enter a valid IPv4 address." -msgstr "" +msgstr "योग्य IPv4 पत्ता टाका." msgid "Enter a valid IPv6 address." -msgstr "" +msgstr "योग्य IPv6 पत्ता टाका." msgid "Enter a valid IPv4 or IPv6 address." -msgstr "" +msgstr "योग्य IPv4 किंवा IPv6 पत्ता नमूद करा." msgid "Enter only digits separated by commas." -msgstr "" +msgstr "स्वल्पविरामाने वेगळे केलेले अंकच फक्त नमूद करा." #, python-format msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)." -msgstr "" +msgstr "हे मूल्य%(limit_value)s(%(show_value)s) आहे याची खात्री करा." #, python-format msgid "Ensure this value is less than or equal to %(limit_value)s." -msgstr "" +msgstr "हे मूल्य %(limit_value)sया मर्यादेइतके किंवा त्यापेक्षा कमी आहे याची काळजी घ्या." #, python-format msgid "Ensure this value is greater than or equal to %(limit_value)s." +msgstr "हे मूल्य %(limit_value)sया मर्यादेइतके किंवा त्यापेक्षा जास्त आहे याची काळजी घ्या." + +#, python-format +msgid "Ensure this value is a multiple of step size %(limit_value)s." +msgstr "हे मूल्य पायरी आकार %(limit_value)s चा गुणाकार असल्याची खात्री करा." + +#, python-format +msgid "" +"Ensure this value is a multiple of step size %(limit_value)s, starting from " +"%(offset)s, e.g. %(offset)s, %(valid_value1)s, %(valid_value2)s, and so on." msgstr "" #, python-format @@ -378,7 +418,7 @@ msgstr[0] "" msgstr[1] "" msgid "Enter a number." -msgstr "" +msgstr "अंक टाका." #, python-format msgid "Ensure that there are no more than %(max)s digit in total." @@ -407,31 +447,35 @@ msgid "" msgstr "" msgid "Null characters are not allowed." -msgstr "" +msgstr "शून्य वर्णांना परवानगी नाही." msgid "and" -msgstr "" +msgstr "आणि" #, python-format msgid "%(model_name)s with this %(field_labels)s already exists." -msgstr "" +msgstr "%(model_name)s सह %(field_labels)s हे अगोदरच अस्तित्वात आहे." + +#, python-format +msgid "Constraint “%(name)s” is violated." +msgstr "\"%(name)s\" च्या मर्यादेचं उल्लंघन आहे." #, python-format msgid "Value %(value)r is not a valid choice." -msgstr "" +msgstr "Value %(value)r हा योग्य पर्याय नाही." msgid "This field cannot be null." -msgstr "" +msgstr "हे क्षेत्र रिक्त असू शकत नाही." msgid "This field cannot be blank." -msgstr "" +msgstr "हे क्षेत्र रिक्त असू शकत नाही." #, python-format msgid "%(model_name)s with this %(field_label)s already exists." -msgstr "" +msgstr "%(model_name)s %(field_label)s ने अगोदरच अस्तित्वात आहे." -#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. -#. Eg: "Title must be unique for pub_date year" +#. Translators: The 'lookup_type' is one of 'date', 'year' or +#. 'month'. Eg: "Title must be unique for pub_date year" #, python-format msgid "" "%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." @@ -439,26 +483,29 @@ msgstr "" #, python-format msgid "Field of type: %(field_type)s" -msgstr "" +msgstr "क्षेत्राचा प्रकार: %(field_type)s" #, python-format msgid "“%(value)s” value must be either True or False." -msgstr "" +msgstr "“%(value)s” मूल्य सत्य किंवा असत्य असावा." #, python-format msgid "“%(value)s” value must be either True, False, or None." -msgstr "" +msgstr "“%(value)s” मूल्य सत्य, असत्य किंवा कोणतेही नसावेत." msgid "Boolean (Either True or False)" -msgstr "" +msgstr "बूलियन (सत्य किंवा असत्य)" #, python-format msgid "String (up to %(max_length)s)" msgstr "" -msgid "Comma-separated integers" +msgid "String (unlimited)" msgstr "" +msgid "Comma-separated integers" +msgstr "स्वल्पविरामाने वेगळे केलेले पूर्णांक" + #, python-format msgid "" "“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " @@ -472,7 +519,7 @@ msgid "" msgstr "" msgid "Date (without time)" -msgstr "" +msgstr "दिनांक (वेळेशिवाय)" #, python-format msgid "" @@ -487,7 +534,7 @@ msgid "" msgstr "" msgid "Date (with time)" -msgstr "" +msgstr "दिनांक (वेळेसह)" #, python-format msgid "“%(value)s” value must be a decimal number." @@ -503,13 +550,13 @@ msgid "" msgstr "" msgid "Duration" -msgstr "" +msgstr "कालावधी" msgid "Email address" -msgstr "" +msgstr "विपत्र पत्ता" msgid "File path" -msgstr "" +msgstr "दस्तऐवज मार्ग" #, python-format msgid "“%(value)s” value must be a float." @@ -523,39 +570,42 @@ msgid "“%(value)s” value must be an integer." msgstr "" msgid "Integer" -msgstr "" +msgstr "पूर्णांक" msgid "Big (8 byte) integer" msgstr "" +msgid "Small integer" +msgstr "लहान पूर्णांक" + msgid "IPv4 address" -msgstr "" +msgstr "IPv4 पत्ता" msgid "IP address" -msgstr "" +msgstr "IP पत्ता" #, python-format msgid "“%(value)s” value must be either None, True or False." msgstr "" msgid "Boolean (Either True, False or None)" -msgstr "" +msgstr "बुलियन (एकतर खरे, असत्य किंवा काहीही नाही)" + +msgid "Positive big integer" +msgstr "सकारात्मक मोठा पूर्णांक" msgid "Positive integer" -msgstr "" +msgstr "सकारात्मक पूर्णांक" msgid "Positive small integer" -msgstr "" +msgstr "सकारात्मक लहान पूर्णांक" #, python-format msgid "Slug (up to %(max_length)s)" msgstr "" -msgid "Small integer" -msgstr "" - msgid "Text" -msgstr "" +msgstr "मजकूर" #, python-format msgid "" @@ -570,27 +620,33 @@ msgid "" msgstr "" msgid "Time" -msgstr "" +msgstr "वेळ" msgid "URL" msgstr "" msgid "Raw binary data" -msgstr "" +msgstr "कच्चा बायनरी डेटा" #, python-format msgid "“%(value)s” is not a valid UUID." msgstr "" msgid "Universally unique identifier" -msgstr "" +msgstr "सार्वत्रिक अद्वितीय ओळखकर्ता" msgid "File" -msgstr "" +msgstr "फाइल" msgid "Image" +msgstr "चित्र " + +msgid "A JSON object" msgstr "" +msgid "Value must be valid JSON." +msgstr "मूल्य योग्य JSON असणे आवश्यक." + #, python-format msgid "%(model)s instance with %(field)s %(value)r does not exist." msgstr "" @@ -619,35 +675,35 @@ msgid ":?.!" msgstr ":?.!" msgid "This field is required." -msgstr "" +msgstr "हे क्षेत्र आवश्यक आहे." msgid "Enter a whole number." -msgstr "" +msgstr "पूर्ण संख्या प्रविष्ट करा." msgid "Enter a valid date." -msgstr "" +msgstr "योग्य दिनांक नमूद करा." msgid "Enter a valid time." -msgstr "" +msgstr "योग्य वेळ नमूद करा." msgid "Enter a valid date/time." -msgstr "" +msgstr "योग्य दिनांक/वेळ नमूद करा." msgid "Enter a valid duration." -msgstr "" +msgstr "योग्य कालावधी नमूद करा." #, python-brace-format msgid "The number of days must be between {min_days} and {max_days}." -msgstr "" +msgstr "दिवसांची संख्या {min_days} आणि {max_days} च्या मधे असावी." msgid "No file was submitted. Check the encoding type on the form." -msgstr "" +msgstr "कोणताही दस्तऐवज सुपूर्त केलेला नाही. अर्जावरील एन्कोडिंग प्रकार तपासा." msgid "No file was submitted." -msgstr "" +msgstr "कोणताही दस्तऐवज सुपूर्त केलेला नाही." msgid "The submitted file is empty." -msgstr "" +msgstr "सुपूर्त केलेला दस्तऐवज रिकामी आहे." #, python-format msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." @@ -657,25 +713,28 @@ msgstr[0] "" msgstr[1] "" msgid "Please either submit a file or check the clear checkbox, not both." -msgstr "" +msgstr "कृपया एकतर फाइल सबमिट करा किंवा स्पष्ट चेकबॉक्स चेक करा, दोन्ही नाही." msgid "" "Upload a valid image. The file you uploaded was either not an image or a " "corrupted image." -msgstr "" +msgstr "एक वैध प्रतिमा अपलोड करा. तुम्ही अपलोड केलेली फाइल चित्र किंवा दूषित चित्र नव्हते." #, python-format msgid "Select a valid choice. %(value)s is not one of the available choices." msgstr "" msgid "Enter a list of values." -msgstr "" +msgstr "मूल्यांची यादी नमूद करा." msgid "Enter a complete value." -msgstr "" +msgstr "पूर्ण मूल्य नमूद करा." msgid "Enter a valid UUID." -msgstr "" +msgstr "योग्य UUID नमूद करा." + +msgid "Enter a valid JSON." +msgstr "योग्य JSON नमूद करा." #. Translators: This is the default suffix added to form field labels msgid ":" @@ -685,30 +744,33 @@ msgstr ":" msgid "(Hidden field %(name)s) %(error)s" msgstr "" -msgid "ManagementForm data is missing or has been tampered with" +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." msgstr "" #, python-format -msgid "Please submit %d or fewer forms." -msgid_plural "Please submit %d or fewer forms." +msgid "Please submit at most %(num)d form." +msgid_plural "Please submit at most %(num)d forms." msgstr[0] "" msgstr[1] "" #, python-format -msgid "Please submit %d or more forms." -msgid_plural "Please submit %d or more forms." +msgid "Please submit at least %(num)d form." +msgid_plural "Please submit at least %(num)d forms." msgstr[0] "" msgstr[1] "" msgid "Order" -msgstr "" +msgstr "क्रम" msgid "Delete" -msgstr "" +msgstr "घालवा" #, python-format msgid "Please correct the duplicate data for %(field)s." -msgstr "" +msgstr "कृपया %(field)s साठी दुय्यम माहिती प्रत सुधारा." #, python-format msgid "Please correct the duplicate data for %(field)s, which must be unique." @@ -721,17 +783,17 @@ msgid "" msgstr "" msgid "Please correct the duplicate values below." -msgstr "" +msgstr "कृपया खालील नकली मूल्ये सुधारा." msgid "The inline value did not match the parent instance." -msgstr "" +msgstr "इनलाइन मूल्य मूळ उदाहरणाशी जुळत नाही." msgid "Select a valid choice. That choice is not one of the available choices." -msgstr "" +msgstr "तो पर्याय उपलब्ध पर्यायांपैकी एक नाही. योग्य पर्याय निवडा. " #, python-format msgid "“%(pk)s” is not a valid value." -msgstr "" +msgstr "“%(pk)s” हे वैध मूल्य नाही." #, python-format msgid "" @@ -740,34 +802,26 @@ msgid "" msgstr "" msgid "Clear" -msgstr "" +msgstr "साफ करा" msgid "Currently" -msgstr "" +msgstr "सध्या" msgid "Change" -msgstr "" +msgstr "बदला" msgid "Unknown" -msgstr "" +msgstr "अज्ञात" msgid "Yes" -msgstr "" +msgstr "होय" msgid "No" -msgstr "" - -msgid "Year" -msgstr "" - -msgid "Month" -msgstr "" - -msgid "Day" -msgstr "" +msgstr "नाही" +#. Translators: Please do not add spaces around commas. msgid "yes,no,maybe" -msgstr "" +msgstr "होय,नाही,कदाचित" #, python-format msgid "%(size)d byte" @@ -777,254 +831,254 @@ msgstr[1] "" #, python-format msgid "%s KB" -msgstr "" +msgstr "%s केबी" #, python-format msgid "%s MB" -msgstr "" +msgstr "%s एमबी" #, python-format msgid "%s GB" -msgstr "" +msgstr "%s जीबी" #, python-format msgid "%s TB" -msgstr "" +msgstr "%s टिबी" #, python-format msgid "%s PB" -msgstr "" +msgstr "%s पीबी" msgid "p.m." -msgstr "" +msgstr "म.उ." msgid "a.m." -msgstr "" +msgstr "म.पू." msgid "PM" -msgstr "" +msgstr "मउ" msgid "AM" -msgstr "" +msgstr "मपू" msgid "midnight" -msgstr "" +msgstr "मध्यरात्री" msgid "noon" -msgstr "" +msgstr "दुपारी" msgid "Monday" -msgstr "" +msgstr "सोमवार" msgid "Tuesday" -msgstr "" +msgstr "मंगळवार" msgid "Wednesday" -msgstr "" +msgstr "बुधवार" msgid "Thursday" -msgstr "" +msgstr "गुरुवार" msgid "Friday" -msgstr "" +msgstr "शुक्रवार" msgid "Saturday" -msgstr "" +msgstr "शनिवार" msgid "Sunday" -msgstr "" +msgstr "रविवार" msgid "Mon" -msgstr "" +msgstr "सोम" msgid "Tue" -msgstr "" +msgstr "मंगळ" msgid "Wed" -msgstr "" +msgstr "बुध" msgid "Thu" -msgstr "" +msgstr "गुरु" msgid "Fri" -msgstr "" +msgstr "शुक्र" msgid "Sat" -msgstr "" +msgstr "शनि" msgid "Sun" -msgstr "" +msgstr "रवि" msgid "January" -msgstr "" +msgstr "जानेवारी" msgid "February" -msgstr "" +msgstr "फेब्रुवारी" msgid "March" -msgstr "" +msgstr "मार्च" msgid "April" -msgstr "" +msgstr "एप्रिल" msgid "May" -msgstr "" +msgstr "मे" msgid "June" -msgstr "" +msgstr "जून" msgid "July" -msgstr "" +msgstr "जुलै" msgid "August" -msgstr "" +msgstr "ऑगस्ट" msgid "September" -msgstr "" +msgstr "सप्टेंबर" msgid "October" -msgstr "" +msgstr "ऑक्टोबर" msgid "November" -msgstr "" +msgstr "नोव्हेंबर" msgid "December" -msgstr "" +msgstr "डिसेंबर" msgid "jan" -msgstr "" +msgstr "जान" msgid "feb" -msgstr "" +msgstr "फेब" msgid "mar" -msgstr "" +msgstr "मार" msgid "apr" -msgstr "" +msgstr "एप्रि" msgid "may" -msgstr "" +msgstr "मे" msgid "jun" -msgstr "" +msgstr "जून" msgid "jul" -msgstr "" +msgstr "जुल" msgid "aug" -msgstr "" +msgstr "ऑग" msgid "sep" -msgstr "" +msgstr "सप" msgid "oct" -msgstr "" +msgstr "ऑक्ट" msgid "nov" -msgstr "" +msgstr "नोव्ह" msgid "dec" -msgstr "" +msgstr "डिस" msgctxt "abbrev. month" msgid "Jan." -msgstr "" +msgstr "जान." msgctxt "abbrev. month" msgid "Feb." -msgstr "" +msgstr "फेब." msgctxt "abbrev. month" msgid "March" -msgstr "" +msgstr "मार्च" msgctxt "abbrev. month" msgid "April" -msgstr "" +msgstr "एप्रिल" msgctxt "abbrev. month" msgid "May" -msgstr "" +msgstr "मे" msgctxt "abbrev. month" msgid "June" -msgstr "" +msgstr "जून" msgctxt "abbrev. month" msgid "July" -msgstr "" +msgstr "जुलै" msgctxt "abbrev. month" msgid "Aug." -msgstr "" +msgstr "ऑग." msgctxt "abbrev. month" msgid "Sept." -msgstr "" +msgstr "सप्ट." msgctxt "abbrev. month" msgid "Oct." -msgstr "" +msgstr "ऑक्ट." msgctxt "abbrev. month" msgid "Nov." -msgstr "" +msgstr "नोव्ह." msgctxt "abbrev. month" msgid "Dec." -msgstr "" +msgstr "डिस." msgctxt "alt. month" msgid "January" -msgstr "" +msgstr "जानेवारी" msgctxt "alt. month" msgid "February" -msgstr "" +msgstr "फेब्रुवारी" msgctxt "alt. month" msgid "March" -msgstr "" +msgstr "मार्च" msgctxt "alt. month" msgid "April" -msgstr "" +msgstr "एप्रिल" msgctxt "alt. month" msgid "May" -msgstr "" +msgstr "मे" msgctxt "alt. month" msgid "June" -msgstr "" +msgstr "जून" msgctxt "alt. month" msgid "July" -msgstr "" +msgstr "जुलै" msgctxt "alt. month" msgid "August" -msgstr "" +msgstr "ऑगस्ट" msgctxt "alt. month" msgid "September" -msgstr "" +msgstr "सप्टेंबर" msgctxt "alt. month" msgid "October" -msgstr "" +msgstr "ऑक्टोबर" msgctxt "alt. month" msgid "November" -msgstr "" +msgstr "नोव्हेंबर" msgctxt "alt. month" msgid "December" -msgstr "" +msgstr "डिसेंबर" msgid "This is not a valid IPv6 address." -msgstr "" +msgstr "हा योग्य IPv6 पत्ता नाही." #, python-format msgctxt "String to return when truncating text" @@ -1032,110 +1086,121 @@ msgid "%(truncated_text)s…" msgstr "" msgid "or" -msgstr "" +msgstr "किंवा" #. Translators: This string is used as a separator between list elements msgid ", " -msgstr "" +msgstr "," #, python-format -msgid "%d year" -msgid_plural "%d years" +msgid "%(num)d year" +msgid_plural "%(num)d years" msgstr[0] "" msgstr[1] "" #, python-format -msgid "%d month" -msgid_plural "%d months" +msgid "%(num)d month" +msgid_plural "%(num)d months" msgstr[0] "" msgstr[1] "" #, python-format -msgid "%d week" -msgid_plural "%d weeks" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" msgstr[0] "" msgstr[1] "" #, python-format -msgid "%d day" -msgid_plural "%d days" +msgid "%(num)d day" +msgid_plural "%(num)d days" msgstr[0] "" msgstr[1] "" #, python-format -msgid "%d hour" -msgid_plural "%d hours" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" msgstr[0] "" msgstr[1] "" #, python-format -msgid "%d minute" -msgid_plural "%d minutes" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" msgstr[0] "" msgstr[1] "" -msgid "0 minutes" -msgstr "" - msgid "Forbidden" -msgstr "" +msgstr "निषिद्ध" msgid "CSRF verification failed. Request aborted." -msgstr "" +msgstr "CSRF चाचणी अयशस्वी झाली. विनंती रद्द केली." msgid "" "You are seeing this message because this HTTPS site requires a “Referer " -"header” to be sent by your Web browser, but none was sent. This header is " +"header” to be sent by your web browser, but none was sent. This header is " "required for security reasons, to ensure that your browser is not being " "hijacked by third parties." msgstr "" +"तुम्हाला हा सनदेश दिसत आहे कारण या HTTPS संकेतस्थळाला तुमच्या वेब ब्राउझरद्वारे \"रेफरर " +"हेडर\" पाठवण्याची आवश्यकता आहे, परंतु कोणतेही पाठवले नाही. तुमचा ब्राउझर तृतीय पक्षांकडून " +"हायजॅक केला जात नाही याची खात्री करण्यासाठी सुरक्षिततेच्या दृष्टीने हे शीर्षलेख आवश्यक आहे." msgid "" "If you have configured your browser to disable “Referer” headers, please re-" "enable them, at least for this site, or for HTTPS connections, or for “same-" "origin” requests." msgstr "" +"किमान या साइटसाठी किंवा HTTPS कनेक्शनसाठी किंवा “समान-मूळ” विनंत्यांसाठी, तुम्ही तुमचे " +"ब्राउझर “रेफरर” हेडर अक्षम केले असल्यास, कृपया ते पुन्हा-सक्षम करा." msgid "" "If you are using the tag or " "including the “Referrer-Policy: no-referrer” header, please remove them. The " "CSRF protection requires the “Referer” header to do strict referer checking. " -"If you’re concerned about privacy, use alternatives like for links to third-party sites." +"If you’re concerned about privacy, use alternatives like for links to third-party sites." msgstr "" +"तुम्ही जोडणी वापरत असल्यास किंवा \"रेफरर-पॉलिसी: नो-रेफरर\" हेडर समाविष्ट करत " +"असल्यास, कृपया ते काढून टाका. CSRF संरक्षणासाठी \"रेफरर\" हेडर कठोर रेफरर तपासणी करणे " +"आवश्यक आहे. तुम्हाला गोपनीयतेबद्दल काळजी वाटत असल्यास, तृतीय-पक्ष स्थळाच्या दुव्यासाठी सारखे पर्याय वापरा." msgid "" "You are seeing this message because this site requires a CSRF cookie when " "submitting forms. This cookie is required for security reasons, to ensure " "that your browser is not being hijacked by third parties." msgstr "" +"तुम्हाला हा संदेश दिसत आहे कारण अर्ज सुपूर्त करताना या स्थळाला CSRF कुकी आवश्यक आहे. तुमचा " +"ब्राउझर तृतीय पक्षांकडून हायजॅक केला जात नाही याची खात्री करण्यासाठी ही कुकी " +"सुरक्षिततेच्या कारणांसाठी आवश्यक आहे." msgid "" "If you have configured your browser to disable cookies, please re-enable " "them, at least for this site, or for “same-origin” requests." msgstr "" +"किमान या साइटसाठी किंवा \"समान-मूळ\" विनंत्यांसाठी, कृपया अक्षम केलेल्या ब्राउझर कुकीज " +"पुन्हा सक्षम करा." msgid "More information is available with DEBUG=True." -msgstr "" +msgstr "अधिक माहिती DEBUG=True सह उपलब्ध आहे." msgid "No year specified" -msgstr "" +msgstr "कोणतेही वर्ष नमूद केलेले नाही" msgid "Date out of range" -msgstr "" +msgstr "पल्ल्याच्या बाहेरची दिनांक" msgid "No month specified" -msgstr "" +msgstr "कोणताही महिना निर्दिष्ट केलेला नाही" msgid "No day specified" -msgstr "" +msgstr "कोणताही दिवस निर्दिष्ट केलेला नाही" msgid "No week specified" -msgstr "" +msgstr "कोणताही आठवडा निर्दिष्ट केलेला नाही" #, python-format msgid "No %(verbose_name_plural)s available" -msgstr "" +msgstr "कोणतेही %(verbose_name_plural)s उपलब्ध नाहीत" #, python-format msgid "" @@ -1149,64 +1214,67 @@ msgstr "" #, python-format msgid "No %(verbose_name)s found matching the query" -msgstr "" +msgstr "क्वेरीसह जुळणारे कोणतेही %(verbose_name)s सापडले नाही" msgid "Page is not “last”, nor can it be converted to an int." msgstr "" #, python-format msgid "Invalid page (%(page_number)s): %(message)s" -msgstr "" +msgstr "अवैध पान (%(page_number)s): %(message)s" #, python-format msgid "Empty list and “%(class_name)s.allow_empty” is False." msgstr "" msgid "Directory indexes are not allowed here." -msgstr "" +msgstr "डिरेक्टरी निर्देशकांना येथे परवानगी नाही." #, python-format msgid "“%(path)s” does not exist" -msgstr "" +msgstr "“%(path)s” अस्तित्वात नाही" #, python-format msgid "Index of %(directory)s" -msgstr "" +msgstr "%(directory)s चे निर्देशांक" -msgid "Django: the Web framework for perfectionists with deadlines." -msgstr "" +msgid "The install worked successfully! Congratulations!" +msgstr "इंस्टॉलेशनने यशस्वीरित्या कार्य केले! अभिनंदन!" #, python-format msgid "" "View release notes for Django %(version)s" msgstr "" - -msgid "The install worked successfully! Congratulations!" -msgstr "" +"डिजांगो %(version)s साठी प्रदर्शित संदेश पहा" #, python-format msgid "" "You are seeing this page because DEBUG=True is in your settings file and you have not configured any " -"URLs." +"%(version)s/ref/settings/#debug\" target=\"_blank\" " +"rel=\"noopener\">DEBUG=True is in your settings file and you have not " +"configured any URLs." msgstr "" +"तुम्ही हे पान पाहत आहात कारण तुमच्या सेटिंग्ज फाइलमध्ये DEBUG=True आहे आणि तुम्ही कोणतीही URL कॉन्फिगर केलेली नाही." msgid "Django Documentation" -msgstr "" +msgstr "जांगो दस्तऐवजीकरण" msgid "Topics, references, & how-to’s" -msgstr "" +msgstr "विषय, संदर्भ, आणि कसे करावे" msgid "Tutorial: A Polling App" -msgstr "" +msgstr "शिकवणी: मतदान अ‍ॅप" msgid "Get started with Django" -msgstr "" +msgstr "जॅंगो सोबत सुरवात करा" msgid "Django Community" -msgstr "" +msgstr "जॅंगो समुदाय" msgid "Connect, get help, or contribute" -msgstr "" +msgstr "जोडा, मदत मिळवा किंवा हातभार लावा" diff --git a/django/conf/locale/uz/LC_MESSAGES/django.mo b/django/conf/locale/uz/LC_MESSAGES/django.mo index 57f89e8f93..b003df83ef 100644 Binary files a/django/conf/locale/uz/LC_MESSAGES/django.mo and b/django/conf/locale/uz/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/uz/LC_MESSAGES/django.po b/django/conf/locale/uz/LC_MESSAGES/django.po index 4e9b6cfa77..ad57ba91b7 100644 --- a/django/conf/locale/uz/LC_MESSAGES/django.po +++ b/django/conf/locale/uz/LC_MESSAGES/django.po @@ -4,15 +4,16 @@ # Abdulaminkhon Khaydarov , 2020 # Bedilbek Khamidov , 2019 # Claude Paroz , 2020 +# Shukrullo Turgunov , 2023 # Sukhrobbek Ismatov , 2019 msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-19 20:23+0200\n" -"PO-Revision-Date: 2020-07-25 17:08+0000\n" -"Last-Translator: Abdulaminkhon Khaydarov \n" -"Language-Team: Uzbek (http://www.transifex.com/django/django/language/uz/)\n" +"POT-Creation-Date: 2023-09-18 11:41-0300\n" +"PO-Revision-Date: 2023-12-25 06:49+0000\n" +"Last-Translator: Shukrullo Turgunov , 2023\n" +"Language-Team: Uzbek (http://app.transifex.com/django/django/language/uz/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -52,6 +53,9 @@ msgstr "Bosniya tili" msgid "Catalan" msgstr "Katalon tili" +msgid "Central Kurdish (Sorani)" +msgstr "" + msgid "Czech" msgstr "Chex tili" @@ -208,6 +212,9 @@ msgstr "Mo'g'ul tili" msgid "Marathi" msgstr "Marati tili" +msgid "Malay" +msgstr "" + msgid "Burmese" msgstr "Birma tili" @@ -289,6 +296,9 @@ msgstr "Tatar tili" msgid "Udmurt" msgstr "Udmurt tili" +msgid "Uyghur" +msgstr "" + msgid "Ukrainian" msgstr "Ukrain tili" @@ -319,6 +329,11 @@ msgstr "Statik fayllar" msgid "Syndication" msgstr "Sindikatsiya" +#. Translators: String used to replace omitted page numbers in elided page +#. range generated by paginators, e.g. [1, 2, '…', 5, 6, 7, '…', 9, 10]. +msgid "…" +msgstr "" + msgid "That page number is not an integer" msgstr "Bu sahifa raqami butun son emas" @@ -344,8 +359,8 @@ msgstr "To'g'ri elektron pochta manzilini kiriting." msgid "" "Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." msgstr "" -"Harflar, raqamlar, pastki chiziqlar yoki chiziqlardan iborat to'g'ri \"slug" -"\" ni kiriting." +"Harflar, raqamlar, pastki chiziqlar yoki chiziqlardan iborat to'g'ri " +"\"slug\" ni kiriting." msgid "" "Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " @@ -382,6 +397,16 @@ msgid "Ensure this value is greater than or equal to %(limit_value)s." msgstr "" "Ushbu qiymat %(limit_value)s dan katta yoki unga teng ekanligini tekshiring." +#, python-format +msgid "Ensure this value is a multiple of step size %(limit_value)s." +msgstr "" + +#, python-format +msgid "" +"Ensure this value is a multiple of step size %(limit_value)s, starting from " +"%(offset)s, e.g. %(offset)s, %(valid_value1)s, %(valid_value2)s, and so on." +msgstr "" + #, python-format msgid "" "Ensure this value has at least %(limit_value)d character (it has " @@ -446,6 +471,10 @@ msgstr "va" msgid "%(model_name)s with this %(field_labels)s already exists." msgstr "%(field_labels)s bilan %(model_name)s allaqachon mavjud." +#, python-format +msgid "Constraint “%(name)s” is violated." +msgstr "" + #, python-format msgid "Value %(value)r is not a valid choice." msgstr "%(value)r qiymati to'g'ri tanlov emas." @@ -460,8 +489,8 @@ msgstr "Bu maydon bo‘sh bo‘lishi mumkin emas." msgid "%(model_name)s with this %(field_label)s already exists." msgstr "\"%(field_label)s\" %(model_name)s allaqachon mavjud." -#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'. -#. Eg: "Title must be unique for pub_date year" +#. Translators: The 'lookup_type' is one of 'date', 'year' or +#. 'month'. Eg: "Title must be unique for pub_date year" #, python-format msgid "" "%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s." @@ -490,6 +519,9 @@ msgstr "Mantiqiy (Rost yoki Yolg'on)" msgid "String (up to %(max_length)s)" msgstr "Birikma uzunligi (%(max_length)s gacha)" +msgid "String (unlimited)" +msgstr "" + msgid "Comma-separated integers" msgstr "Vergul bilan ajratilgan butun sonlar" @@ -572,6 +604,9 @@ msgstr "Butun son" msgid "Big (8 byte) integer" msgstr "Katta (8 bayt) butun son" +msgid "Small integer" +msgstr "Kichik butun son" + msgid "IPv4 address" msgstr "IPv4 manzili" @@ -598,9 +633,6 @@ msgstr "Musbat kichik butun son" msgid "Slug (up to %(max_length)s)" msgstr "Slug uzunligi (%(max_length)s gacha)" -msgid "Small integer" -msgstr "Kichik butun son" - msgid "Text" msgstr "Matn" @@ -749,18 +781,21 @@ msgstr ":" msgid "(Hidden field %(name)s) %(error)s" msgstr "(Yashirilgan maydon %(name)s) %(error)s" -msgid "ManagementForm data is missing or has been tampered with" -msgstr "ManagementForm ma'lumotlari yo'q yoki o'zgartirilgan" +#, python-format +msgid "" +"ManagementForm data is missing or has been tampered with. Missing fields: " +"%(field_names)s. You may need to file a bug report if the issue persists." +msgstr "" #, python-format -msgid "Please submit %d or fewer forms." -msgid_plural "Please submit %d or fewer forms." -msgstr[0] "Iltimos, %d ta yoki kamroq forma topshiring." +msgid "Please submit at most %(num)d form." +msgid_plural "Please submit at most %(num)d forms." +msgstr[0] "" #, python-format -msgid "Please submit %d or more forms." -msgid_plural "Please submit %d or more forms." -msgstr[0] "Iltimos, %d ta yoki ko'proq forma topshiring." +msgid "Please submit at least %(num)d form." +msgid_plural "Please submit at least %(num)d forms." +msgstr[0] "" msgid "Order" msgstr "Buyurtma" @@ -1098,34 +1133,34 @@ msgid ", " msgstr "," #, python-format -msgid "%d year" -msgid_plural "%d years" -msgstr[0] "%dyil" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d yil" #, python-format -msgid "%d month" -msgid_plural "%d months" -msgstr[0] "%doy" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)doy" #, python-format -msgid "%d week" -msgid_plural "%d weeks" -msgstr[0] "%dhafta" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d hafta" #, python-format -msgid "%d day" -msgid_plural "%d days" -msgstr[0] "%dkun" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d kun" #, python-format -msgid "%d hour" -msgid_plural "%d hours" -msgstr[0] "%dsoat" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d soat" #, python-format -msgid "%d minute" -msgid_plural "%d minutes" -msgstr[0] "%dminut" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d daqiqa" msgid "Forbidden" msgstr "Taqiqlangan" @@ -1135,15 +1170,10 @@ msgstr "CSRF tekshiruvi amalga oshmadi. So‘rov bekor qilindi." msgid "" "You are seeing this message because this HTTPS site requires a “Referer " -"header” to be sent by your Web browser, but none was sent. This header is " +"header” to be sent by your web browser, but none was sent. This header is " "required for security reasons, to ensure that your browser is not being " "hijacked by third parties." msgstr "" -"Siz ushbu xabarni ko'rmoqdasiz, chunki bu HTTPS saytida veb-brauzeringiz " -"tomonidan \"Referer header\" yuborilishi talab qilinadi, ammo hech biri " -"yuborilmadi. Ushbu sarlavha xavfsizlik nuqtai nazaridan, brauzeringizni " -"uchinchi shaxslar tomonidan o'g'irlanmasligini ta'minlash uchun talab " -"qilinadi." msgid "" "If you have configured your browser to disable “Referer” headers, please re-" @@ -1159,8 +1189,8 @@ msgid "" "If you are using the tag or " "including the “Referrer-Policy: no-referrer” header, please remove them. The " "CSRF protection requires the “Referer” header to do strict referer checking. " -"If you’re concerned about privacy, use alternatives like for links to third-party sites." +"If you’re concerned about privacy, use alternatives like for links to third-party sites." msgstr "" "Agar siz yorlig'idan yoki " "\"Referrer-Policy: no-referer\" sarlavhasidan foydalanayotgan bo'lsangiz, " @@ -1249,8 +1279,8 @@ msgstr "\"%(path)s\" mavjud emas" msgid "Index of %(directory)s" msgstr "%(directory)s indeksi" -msgid "Django: the Web framework for perfectionists with deadlines." -msgstr "Django: muddati chegaralangan perfektsionistlar uchun veb freymvork." +msgid "The install worked successfully! Congratulations!" +msgstr "O'rnatish muvaffaqiyatli amalga oshdi! Tabriklaymiz!" #, python-format msgid "" @@ -1261,20 +1291,17 @@ msgstr "" "com/en/%(version)s/releases/\" target=\"_blank\" rel=\"noopener\"> " "nashrlarni ko'rish" -msgid "The install worked successfully! Congratulations!" -msgstr "O'rnatish muvaffaqiyatli amalga oshdi! Tabriklaymiz!" - #, python-format msgid "" "You are seeing this page because DEBUG=True is in your settings file and you have not configured any " -"URLs." +"%(version)s/ref/settings/#debug\" target=\"_blank\" " +"rel=\"noopener\">DEBUG=True is in your settings file and you have not " +"configured any URLs." msgstr "" "Siz ushbu sahifani ko'rmoqdasiz, chunki DEBUG = True ifodasi sizning sozlamalar faylingizda ko'rsatilgan va " -"siz biron bir URL manzilini to'gri sozlamagansiz." +"com/en/%(version)s/ref/settings/#debug\" target=\"_blank\" " +"rel=\"noopener\">DEBUG = True ifodasi sizning sozlamalar faylingizda " +"ko'rsatilgan va siz biron bir URL manzilini to'gri sozlamagansiz." msgid "Django Documentation" msgstr "Django Hujjatlari" diff --git a/django/conf/locale/zh_Hans/LC_MESSAGES/django.mo b/django/conf/locale/zh_Hans/LC_MESSAGES/django.mo index 39927e8d8f..55517ea7b6 100644 Binary files a/django/conf/locale/zh_Hans/LC_MESSAGES/django.mo and b/django/conf/locale/zh_Hans/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/zh_Hans/LC_MESSAGES/django.po b/django/conf/locale/zh_Hans/LC_MESSAGES/django.po index c0c6d6065f..097e77d4b4 100644 --- a/django/conf/locale/zh_Hans/LC_MESSAGES/django.po +++ b/django/conf/locale/zh_Hans/LC_MESSAGES/django.po @@ -7,6 +7,7 @@ # Fan Xu , 2022 # Ford Guo , 2022 # Huanqun Yang, 2022 +# jack yang, 2023 # jamin M , 2019 # Jannis Leidel , 2011 # Kevin Sze , 2012 @@ -32,17 +33,17 @@ # ced773123cfad7b4e8b79ca80f736af9, 2011-2012 # Ziya Tang , 2018 # 付峥 , 2018 -# Fangjiaqi77 <370358679@qq.com>, 2020 +# LatteFang <370358679@qq.com>, 2020 # Kevin Sze , 2012 # 高乐喆 , 2023 msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-01-17 02:13-0600\n" -"PO-Revision-Date: 2023-04-25 06:49+0000\n" -"Last-Translator: 高乐喆 , 2023\n" -"Language-Team: Chinese (China) (http://www.transifex.com/django/django/" +"POT-Creation-Date: 2023-09-18 11:41-0300\n" +"PO-Revision-Date: 2023-12-25 06:49+0000\n" +"Last-Translator: jack yang, 2023\n" +"Language-Team: Chinese (China) (http://app.transifex.com/django/django/" "language/zh_CN/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -326,6 +327,9 @@ msgstr "鞑靼语" msgid "Udmurt" msgstr "乌德穆尔特语" +msgid "Uyghur" +msgstr "维吾尔语" + msgid "Ukrainian" msgstr "乌克兰语" @@ -420,6 +424,14 @@ msgstr "确保该值大于或等于%(limit_value)s。" msgid "Ensure this value is a multiple of step size %(limit_value)s." msgstr "确保该值是步长的倍数%(limit_value)s" +#, python-format +msgid "" +"Ensure this value is a multiple of step size %(limit_value)s, starting from " +"%(offset)s, e.g. %(offset)s, %(valid_value1)s, %(valid_value2)s, and so on." +msgstr "" +"确保此值是步长 %(limit_value)s 的倍数,从 %(offset)s 开始,例如 " +"%(offset)s、%(valid_value1)s、%(valid_value2)s 等等。" + #, python-format msgid "" "Ensure this value has at least %(limit_value)d character (it has " diff --git a/django/contrib/admin/checks.py b/django/contrib/admin/checks.py index aa43718cd6..c1a17af076 100644 --- a/django/contrib/admin/checks.py +++ b/django/contrib/admin/checks.py @@ -915,21 +915,19 @@ class ModelAdminChecks(BaseModelAdminChecks): try: field = getattr(obj.model, item) except AttributeError: - return [ - checks.Error( - "The value of '%s' refers to '%s', which is not a " - "callable, an attribute of '%s', or an attribute or " - "method on '%s'." - % ( - label, - item, - obj.__class__.__name__, - obj.model._meta.label, - ), - obj=obj.__class__, - id="admin.E108", - ) - ] + try: + field = get_fields_from_path(obj.model, item)[-1] + except (FieldDoesNotExist, NotRelationField): + return [ + checks.Error( + f"The value of '{label}' refers to '{item}', which is not " + f"a callable or attribute of '{obj.__class__.__name__}', " + "or an attribute, method, or field on " + f"'{obj.model._meta.label}'.", + obj=obj.__class__, + id="admin.E108", + ) + ] if ( getattr(field, "is_relation", False) and (field.many_to_many or field.one_to_many) diff --git a/django/contrib/admin/filters.py b/django/contrib/admin/filters.py index 06dedf8727..675c4a5d49 100644 --- a/django/contrib/admin/filters.py +++ b/django/contrib/admin/filters.py @@ -5,6 +5,7 @@ Filters are specified in models with the "list_filter" option. Each filter subclass knows how to display a filter for a field that passes a certain test -- e.g. being a DateField or ForeignKey. """ + import datetime from django.contrib.admin.exceptions import NotRegistered diff --git a/django/contrib/admin/locale/af/LC_MESSAGES/django.mo b/django/contrib/admin/locale/af/LC_MESSAGES/django.mo index 5d9adc95c2..bb91c2e475 100644 Binary files a/django/contrib/admin/locale/af/LC_MESSAGES/django.mo and b/django/contrib/admin/locale/af/LC_MESSAGES/django.mo differ diff --git a/django/contrib/admin/locale/af/LC_MESSAGES/django.po b/django/contrib/admin/locale/af/LC_MESSAGES/django.po index 65ab02dd6a..ff97eaecd2 100644 --- a/django/contrib/admin/locale/af/LC_MESSAGES/django.po +++ b/django/contrib/admin/locale/af/LC_MESSAGES/django.po @@ -416,7 +416,7 @@ msgid "Show counts" msgstr "Wys tellings" msgid "Clear all filters" -msgstr "Verwyder filters" +msgstr "Verwyder alle filters" msgid "Remove from sorting" msgstr "Verwyder uit sortering" @@ -642,6 +642,7 @@ msgstr "Wys gekose %(model)s" msgid "Thanks for spending some quality time with the web site today." msgstr "" +"Dankie vir die kwaliteittyd wat u met die webwerf deurgebring het vandag." msgid "Log in again" msgstr "Meld weer aan" diff --git a/django/contrib/admin/locale/ckb/LC_MESSAGES/django.mo b/django/contrib/admin/locale/ckb/LC_MESSAGES/django.mo index 8f4d8319e3..e4625809b2 100644 Binary files a/django/contrib/admin/locale/ckb/LC_MESSAGES/django.mo and b/django/contrib/admin/locale/ckb/LC_MESSAGES/django.mo differ diff --git a/django/contrib/admin/locale/ckb/LC_MESSAGES/django.po b/django/contrib/admin/locale/ckb/LC_MESSAGES/django.po index 83eba5831a..f6b80d6d80 100644 --- a/django/contrib/admin/locale/ckb/LC_MESSAGES/django.po +++ b/django/contrib/admin/locale/ckb/LC_MESSAGES/django.po @@ -6,14 +6,14 @@ # Bakhtawar Barzan, 2021 # kosar tofiq , 2020 # pejar hewrami , 2020 -# Swara , 2022 +# Swara , 2022,2024 msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-09-18 11:41-0300\n" -"PO-Revision-Date: 2023-12-04 07:05+0000\n" -"Last-Translator: Abdulla Dlshad, 2023\n" +"PO-Revision-Date: 2013-04-25 07:05+0000\n" +"Last-Translator: Swara , 2022,2024\n" "Language-Team: Central Kurdish (http://app.transifex.com/django/django/" "language/ckb/)\n" "MIME-Version: 1.0\n" @@ -184,7 +184,7 @@ msgstr "" "دانەیەک زیاتر." msgid "Select this object for an action - {}" -msgstr "" +msgstr "ئەم تەنە هەڵبژێرە بۆ کردارێک - {}" #, python-brace-format msgid "The {name} “{obj}” was added successfully." @@ -351,7 +351,7 @@ msgid "Clear selection" msgstr "پاککردنەوەی هەڵبژاردن" msgid "Breadcrumbs" -msgstr "" +msgstr "وردەنان" #, python-format msgid "Models in the %(name)s application" @@ -389,7 +389,7 @@ msgid "Enter a new password for the user %(username)s." msgstr "تێپەڕەوشەی نوێ بۆ بەکارهێنەری %(username)s بنوسە" msgid "Skip to main content" -msgstr "" +msgstr "تێیپەڕێنە بۆ ناوەڕۆکی سەرەکی" msgid "Welcome," msgstr "بەخێربێیت،" @@ -417,10 +417,10 @@ msgid "Filter" msgstr "پاڵاوتن" msgid "Hide counts" -msgstr "" +msgstr "ژماردن بشارەوە" msgid "Show counts" -msgstr "" +msgstr "ژماردن پیشانبدە" msgid "Clear all filters" msgstr "پاکردنەوەی هەموو پاڵاوتنەکان" @@ -436,13 +436,13 @@ msgid "Toggle sorting" msgstr "ڕیزکردنی پێچەوانە" msgid "Toggle theme (current theme: auto)" -msgstr "" +msgstr "گۆڕینی ڕووکار (ڕووکاری ئێستا: خۆکار)" msgid "Toggle theme (current theme: light)" -msgstr "" +msgstr "گۆڕینی ڕووکار (ڕووکاری ئێستا: ڕووناک)" msgid "Toggle theme (current theme: dark)" -msgstr "" +msgstr "گۆڕینی ڕووکار (ڕووکاری ئێستا: تاریک)" msgid "Delete" msgstr "سڕینەوە" @@ -531,13 +531,13 @@ msgid "None available" msgstr "هیچ شتيک بەردەست نییە" msgid "Added:" -msgstr "" +msgstr "زیادکرا:" msgid "Changed:" -msgstr "" +msgstr "گۆڕدرا:" msgid "Deleted:" -msgstr "" +msgstr "سڕایەوە:" msgid "Unknown content" msgstr "ناوەڕۆکی نەزانراو" @@ -566,7 +566,7 @@ msgid "Toggle navigation" msgstr "کردنەوەو داخستنی ڕێنیشاندەر" msgid "Sidebar" -msgstr "" +msgstr "شریتی لاتەنیشت" msgid "Start typing to filter…" msgstr "دەست بکە بە نوسین بۆ پاڵاوتن..." @@ -585,8 +585,8 @@ msgstr "کردار" msgid "entry" msgid_plural "entries" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "تۆمار" +msgstr[1] "تۆمارەکان" msgid "" "This object doesn’t have a change history. It probably wasn’t added via this " @@ -749,7 +749,7 @@ msgid "Reset my password" msgstr "دانانەوەی تێپەڕەوشەکەم" msgid "Select all objects on this page for an action" -msgstr "" +msgstr "هەموو تەنەکان لەم لاپەڕەیە بۆ کردارێک هەڵبژێرە" msgid "All dates" msgstr "هەموو بەروارەکان" diff --git a/django/contrib/admin/locale/ckb/LC_MESSAGES/djangojs.mo b/django/contrib/admin/locale/ckb/LC_MESSAGES/djangojs.mo index f7415be678..95cbda7907 100644 Binary files a/django/contrib/admin/locale/ckb/LC_MESSAGES/djangojs.mo and b/django/contrib/admin/locale/ckb/LC_MESSAGES/djangojs.mo differ diff --git a/django/contrib/admin/locale/ckb/LC_MESSAGES/djangojs.po b/django/contrib/admin/locale/ckb/LC_MESSAGES/djangojs.po index 69f7a731dd..23b1fd0f87 100644 --- a/django/contrib/admin/locale/ckb/LC_MESSAGES/djangojs.po +++ b/django/contrib/admin/locale/ckb/LC_MESSAGES/djangojs.po @@ -4,14 +4,14 @@ # Bakhtawar Barzan, 2021 # Bakhtawar Barzan, 2021 # Mariusz Felisiak , 2023 -# Swara , 2022-2023 +# Swara , 2022-2024 msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2023-03-17 03:19-0500\n" -"PO-Revision-Date: 2023-04-25 07:59+0000\n" -"Last-Translator: Mariusz Felisiak , 2023\n" +"POT-Creation-Date: 2023-09-18 15:04-0300\n" +"PO-Revision-Date: 2024-01-20 07:59+0000\n" +"Last-Translator: Swara , 2022-2024\n" "Language-Team: Central Kurdish (http://app.transifex.com/django/django/" "language/ckb/)\n" "MIME-Version: 1.0\n" @@ -68,7 +68,7 @@ msgstr "" #, javascript-format msgid "Type into this box to filter down the list of selected %s." -msgstr "" +msgstr "لەم بوخچەدا بنووسە بۆ ئەوەی لیستی هەڵبژێردراوەکان بپاڵێویت %s." msgid "Remove all" msgstr "لابردنی هەمووی" @@ -80,8 +80,8 @@ msgstr "کرتە بکە بۆ لابردنی هەموو ئەوانەی هەڵبژ #, javascript-format msgid "%s selected option not visible" msgid_plural "%s selected options not visible" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%sبژاردەی هەڵبژێردراو نابینرێت" +msgstr[1] "%s هەڵبژاردە هەڵبژێردراوەکان نابینرێن" msgid "%(sel)s of %(cnt)s selected" msgid_plural "%(sel)s of %(cnt)s selected" @@ -245,6 +245,55 @@ msgctxt "abbrev. month December" msgid "Dec" msgstr "‎بەفرانبار" +msgid "Sunday" +msgstr "یەکشەممە" + +msgid "Monday" +msgstr "دووشەممە" + +msgid "Tuesday" +msgstr "سێشەممە" + +msgid "Wednesday" +msgstr "چوارشەممە" + +msgid "Thursday" +msgstr "پێنجشەممە" + +msgid "Friday" +msgstr "هەینی" + +msgid "Saturday" +msgstr "شەممە" + +msgctxt "abbrev. day Sunday" +msgid "Sun" +msgstr "یەک" + +msgctxt "abbrev. day Monday" +msgid "Mon" +msgstr "دوو" + +msgctxt "abbrev. day Tuesday" +msgid "Tue" +msgstr "سێ" + +msgctxt "abbrev. day Wednesday" +msgid "Wed" +msgstr "چوار" + +msgctxt "abbrev. day Thursday" +msgid "Thur" +msgstr "پێنج" + +msgctxt "abbrev. day Friday" +msgid "Fri" +msgstr "هەینی" + +msgctxt "abbrev. day Saturday" +msgid "Sat" +msgstr "شەم" + msgctxt "one letter Sunday" msgid "S" msgstr "ی" diff --git a/django/contrib/admin/locale/mn/LC_MESSAGES/django.mo b/django/contrib/admin/locale/mn/LC_MESSAGES/django.mo index 82cb0bbb8e..cf857e049e 100644 Binary files a/django/contrib/admin/locale/mn/LC_MESSAGES/django.mo and b/django/contrib/admin/locale/mn/LC_MESSAGES/django.mo differ diff --git a/django/contrib/admin/locale/mn/LC_MESSAGES/django.po b/django/contrib/admin/locale/mn/LC_MESSAGES/django.po index 48c2e133dc..c5d0cb4487 100644 --- a/django/contrib/admin/locale/mn/LC_MESSAGES/django.po +++ b/django/contrib/admin/locale/mn/LC_MESSAGES/django.po @@ -4,17 +4,18 @@ # Ankhbayar , 2013 # Jannis Leidel , 2011 # jargalan , 2011 +# Turmunkh Batkhuyag, 2023 # Zorig, 2016 -# Анхбаяр Анхаа , 2013-2016,2018-2019,2021 +# Анхбаяр Анхаа , 2013-2016,2018-2019,2021,2023 # Баясгалан Цэвлээ , 2011,2017 msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-09-21 10:22+0200\n" -"PO-Revision-Date: 2021-11-16 17:18+0000\n" -"Last-Translator: Анхбаяр Анхаа \n" -"Language-Team: Mongolian (http://www.transifex.com/django/django/language/" +"POT-Creation-Date: 2023-09-18 11:41-0300\n" +"PO-Revision-Date: 2023-12-25 07:05+0000\n" +"Last-Translator: Turmunkh Batkhuyag, 2023\n" +"Language-Team: Mongolian (http://app.transifex.com/django/django/language/" "mn/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -24,7 +25,7 @@ msgstr "" #, python-format msgid "Delete selected %(verbose_name_plural)s" -msgstr "Сонгосон %(verbose_name_plural)s-ийг устга" +msgstr "Сонгосон %(verbose_name_plural)s-ийг устгах" #, python-format msgid "Successfully deleted %(count)d %(items)s." @@ -74,10 +75,10 @@ msgid "Has date" msgstr "Огноотой" msgid "Empty" -msgstr "" +msgstr "Хоосон" msgid "Not empty" -msgstr "" +msgstr "Хоосон биш" #, python-format msgid "" @@ -152,7 +153,7 @@ msgstr "Лог бүртгэлийн обект" #, python-brace-format msgid "Added {name} “{object}”." -msgstr "" +msgstr "Нэмсэн {name} “{object}”." msgid "Added." msgstr "Нэмэгдсэн." @@ -162,7 +163,7 @@ msgstr "ба" #, python-brace-format msgid "Changed {fields} for {name} “{object}”." -msgstr "" +msgstr "Changed {fields} for {name} “{object}”." #, python-brace-format msgid "Changed {fields}." @@ -170,7 +171,7 @@ msgstr "Өөрчлөгдсөн {fields}." #, python-brace-format msgid "Deleted {name} “{object}”." -msgstr "" +msgstr "Устгасан {name} “{object}”." msgid "No fields changed." msgstr "Өөрчилсөн талбар алга байна." @@ -180,10 +181,15 @@ msgstr "Хоосон" msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." msgstr "" +"Нэгээс олныг сонгохын тулд \"Control\" эсвэл Mac компьютер дээр \"Command\" " +"товчоо дарна уу." + +msgid "Select this object for an action - {}" +msgstr "Сонголтоо хийхийн тулд энэ объектыг сонгоно уу - {}" #, python-brace-format msgid "The {name} “{obj}” was added successfully." -msgstr "" +msgstr "{name} “{obj}” амжилттай нэмэгдлээ." msgid "You may edit it again below." msgstr "Та дараахийг дахин засах боломжтой" @@ -192,25 +198,30 @@ msgstr "Та дараахийг дахин засах боломжтой" msgid "" "The {name} “{obj}” was added successfully. You may add another {name} below." msgstr "" +"{name} “{obj}” амжилттай нэмэгдлээ. Та доорх {name}-ийг нэмэх боломжтой." #, python-brace-format msgid "" "The {name} “{obj}” was changed successfully. You may edit it again below." msgstr "" +"{name} \"{obj}\" амжилттай өөрчлөгдлөө. Та доорх талбаруудыг дахин засварлах " +"боломжтой." #, python-brace-format msgid "The {name} “{obj}” was added successfully. You may edit it again below." msgstr "" +" {name} \"{obj}\" амжилттай нэмэгдлээ. Та доор дахин шинэчлэх боломжтой." #, python-brace-format msgid "" "The {name} “{obj}” was changed successfully. You may add another {name} " "below." msgstr "" +"\"{name}\" \"{obj}\" амжилттай өөрчлөгдлөө. Доорх {name}-г нэмж оруулна уу." #, python-brace-format msgid "The {name} “{obj}” was changed successfully." -msgstr "" +msgstr "{name} \" {obj} \" амжилттай өөрчлөгдлөө." msgid "" "Items must be selected in order to perform actions on them. No items have " @@ -223,11 +234,11 @@ msgstr "Үйлдэл сонгоогүй." #, python-format msgid "The %(name)s “%(obj)s” was deleted successfully." -msgstr "" +msgstr "%(name)s “%(obj)s” амжилттай устгагдлаа." #, python-format msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" -msgstr "" +msgstr "“%(key)s” ID-тай %(name)sбайхгүй байна. Магадгүй устсан уу?" #, python-format msgid "Add %s" @@ -264,8 +275,9 @@ msgstr "%(cnt)s оос 0 сонгосон" msgid "Change history: %s" msgstr "Өөрчлөлтийн түүх: %s" -#. Translators: Model verbose name and instance representation, -#. suitable to be an item in a list. +#. Translators: Model verbose name and instance +#. representation, suitable to be an item in a +#. list. #, python-format msgid "%(class_name)s %(instance)s" msgstr "%(instance)s %(class_name)s" @@ -298,7 +310,7 @@ msgid "Page not found" msgstr "Хуудас олдсонгүй." msgid "We’re sorry, but the requested page could not be found." -msgstr "" +msgstr "Уучлаарай, хүссэн хуудас олдсонгүй." msgid "Home" msgstr "Нүүр" @@ -316,6 +328,8 @@ msgid "" "There’s been an error. It’s been reported to the site administrators via " "email and should be fixed shortly. Thanks for your patience." msgstr "" +"Алдаа гарсан байна. И-мэйлээр админуудад мэдэгдэгдсэн бөгөөд тун удахгүй " +"засах болно. Хамтран ажилласанд баярлалаа." msgid "Run the selected action" msgstr "Сонгосон үйлдэлийг ажилуулах" @@ -333,6 +347,9 @@ msgstr "Бүгдийг сонгох %(total_count)s %(module_name)s" msgid "Clear selection" msgstr "Сонгосонг цэвэрлэх" +msgid "Breadcrumbs" +msgstr "Талхны үүрмэг" + #, python-format msgid "Models in the %(name)s application" msgstr "%(name)s хэрэглүүр дэх моделууд." @@ -344,12 +361,14 @@ msgid "View" msgstr "Харах" msgid "You don’t have permission to view or edit anything." -msgstr "" +msgstr "Та ямар ч харах эсвэл засах эрхгүй байна." msgid "" "First, enter a username and password. Then, you’ll be able to edit more user " "options." msgstr "" +"Эхлээд, хэрэглэгчийн нэр болон нууц үгээ оруулна уу. Дараа нь, та бусад " +"хэрэглэгчийн сонголтуудыг засварлах боломжтой болно." msgid "Enter a username and password." msgstr "Хэрэглэгчийн нэр ба нууц үгээ оруулна." @@ -358,15 +377,17 @@ msgid "Change password" msgstr "Нууц үг өөрчлөх" msgid "Please correct the error below." -msgstr "Доорх алдааг засна уу" - -msgid "Please correct the errors below." -msgstr "Доор гарсан алдаануудыг засна уу." +msgid_plural "Please correct the errors below." +msgstr[0] "Та доорх алдаануудыг засна уу." +msgstr[1] "Та доорх алдаануудыг засна уу." #, python-format msgid "Enter a new password for the user %(username)s." msgstr "%(username)s.хэрэглэгчид шинэ нууц үг оруулна уу." +msgid "Skip to main content" +msgstr "Үндсэн агуулга руу шилжих" + msgid "Welcome," msgstr "Тавтай морилно уу" @@ -392,8 +413,14 @@ msgstr "Сайтаас харах" msgid "Filter" msgstr "Шүүлтүүр" +msgid "Hide counts" +msgstr "Тооцоог нуух" + +msgid "Show counts" +msgstr "Тооцоог харуулах" + msgid "Clear all filters" -msgstr "" +msgstr "Бүх шүүлтүүрийг арилгах" msgid "Remove from sorting" msgstr "Эрэмблэлтээс хасах" @@ -405,6 +432,15 @@ msgstr "Эрэмблэх урьтамж: %(priority_number)s" msgid "Toggle sorting" msgstr "Эрэмбэлэлтийг харуул" +msgid "Toggle theme (current theme: auto)" +msgstr "Загварыг сэлгэх (одоогийн загвар: авто)" + +msgid "Toggle theme (current theme: light)" +msgstr "Загварыг сэлгэх (одоогийн загвар: өдрийн)" + +msgid "Toggle theme (current theme: dark)" +msgstr "Загварыг сэлгэх (одоогийн горим: шөнийн)" + msgid "Delete" msgstr "Устгах" @@ -437,7 +473,7 @@ msgid "Objects" msgstr "Бичлэгүүд" msgid "Yes, I’m sure" -msgstr "" +msgstr "Тийм, би итгэлтэй." msgid "No, take me back" msgstr "Үгүй, намайг буцаа" @@ -478,7 +514,7 @@ msgid " By %(filter_title)s " msgstr " %(filter_title)s -ээр" msgid "Summary" -msgstr "Нийт" +msgstr "Хураангуй" msgid "Recent actions" msgstr "Сүүлд хийсэн үйлдлүүд" @@ -489,6 +525,15 @@ msgstr "Миний үйлдлүүд" msgid "None available" msgstr "Үйлдэл алга" +msgid "Added:" +msgstr "Нэмсэн:" + +msgid "Changed:" +msgstr "Өөрчилсөн:" + +msgid "Deleted:" +msgstr "Устгасан:" + msgid "Unknown content" msgstr "Тодорхойгүй агуулга" @@ -497,6 +542,9 @@ msgid "" "database tables have been created, and make sure the database is readable by " "the appropriate user." msgstr "" +"Таны өгөгдлийн санг суулгахад ямар нэг алдаа гарлаа байна. Өгөгдлийн сангийн " +"тохирох хүснэгтүүдийг үүсгэсэн эсэхийг шалгаад, өгөгдлийн санг тохирох " +"хэрэглэгч унших боломжтой эсэхийг шалгаарай." #, python-format msgid "" @@ -510,13 +558,16 @@ msgid "Forgotten your password or username?" msgstr "Таны мартсан нууц үг эсвэл нэрвтэр нэр?" msgid "Toggle navigation" -msgstr "" +msgstr "Жолоодлого солбих" + +msgid "Sidebar" +msgstr "Хажуугийн самбар" msgid "Start typing to filter…" -msgstr "" +msgstr "Шүүхийн тулд бичиж эхлэх..." msgid "Filter navigation items" -msgstr "" +msgstr "Жолоодлогын зүйлсийг шүүх" msgid "Date/time" msgstr "Огноо/цаг" @@ -527,10 +578,17 @@ msgstr "Хэрэглэгч" msgid "Action" msgstr "Үйлдэл" +msgid "entry" +msgid_plural "entries" +msgstr[0] "оролт" +msgstr[1] "оролт" + msgid "" "This object doesn’t have a change history. It probably wasn’t added via this " "admin site." msgstr "" +"Энэ объектод өөрчлөлтийн түүх байхгүй байна. Админ сайтаар нэмээгүй байх " +"магадлалтай." msgid "Show all" msgstr "Бүгдийг харуулах" @@ -581,8 +639,12 @@ msgstr "Өөр %(model)s нэмэх" msgid "Delete selected %(model)s" msgstr "Сонгосон %(model)s устгах" +#, python-format +msgid "View selected %(model)s" +msgstr "View selected %(model)s" + msgid "Thanks for spending some quality time with the web site today." -msgstr "" +msgstr "Өнөөдөр вэб сайтад цаг заваа зарцуулсанд баярлалаа." msgid "Log in again" msgstr "Ахин нэвтрэх " @@ -597,6 +659,8 @@ msgid "" "Please enter your old password, for security’s sake, and then enter your new " "password twice so we can verify you typed it in correctly." msgstr "" +"Та аюулгүй байдлын үүднээс хуучин нууц үгээ оруулна уу, тэгээд шинэ нууц " +"үгээ хоёр удаа оруулнаар бид бичсэн эсэхийг баталгаажуулах боломжтой." msgid "Change my password" msgstr "Нууц үгээ солих" @@ -634,11 +698,15 @@ msgid "" "We’ve emailed you instructions for setting your password, if an account " "exists with the email you entered. You should receive them shortly." msgstr "" +"Бид таны нууц үг тохируулах зааварчилгааг и-мэйлээр илгээлээ. Хэрэв таны " +"оруулсан и-мэйл дээр акаунт байвал хурдан авах ёстой." msgid "" "If you don’t receive an email, please make sure you’ve entered the address " "you registered with, and check your spam folder." msgstr "" +"Хэрэв та имэйл аваагүй бол та бүртгэлтэй хаяг оруулсан эсэхийг шалгана уу, " +"мөн спам хавтасыг шалгана уу." #, python-format msgid "" @@ -652,7 +720,7 @@ msgid "Please go to the following page and choose a new password:" msgstr "Дараах хуудас руу орон шинэ нууц үг сонгоно уу:" msgid "Your username, in case you’ve forgotten:" -msgstr "" +msgstr "Та хэрэглэгчийн нэрээ мартсан бол:" msgid "Thanks for using our site!" msgstr "Манай сайтыг хэрэглэсэнд баярлалаа!" @@ -665,6 +733,8 @@ msgid "" "Forgotten your password? Enter your email address below, and we’ll email " "instructions for setting a new one." msgstr "" +"Нууц үгээ мартсан уу? Доор имэйл хаягаа оруулна уу, бид шинэ нууц үг " +"тохируулах зааврыг имэйлээр илгээнэ." msgid "Email address:" msgstr "Имэйл хаяг:" @@ -672,6 +742,9 @@ msgstr "Имэйл хаяг:" msgid "Reset my password" msgstr "Нууц үгээ шинэчлэх" +msgid "Select all objects on this page for an action" +msgstr "Энэ хуудас дээрх бүх объектуудыг үйлдэл хийхийн тулд сонгоно уу" + msgid "All dates" msgstr "Бүх огноо" diff --git a/django/contrib/admin/locale/mr/LC_MESSAGES/django.mo b/django/contrib/admin/locale/mr/LC_MESSAGES/django.mo index d847b48ad6..51f8c63d96 100644 Binary files a/django/contrib/admin/locale/mr/LC_MESSAGES/django.mo and b/django/contrib/admin/locale/mr/LC_MESSAGES/django.mo differ diff --git a/django/contrib/admin/locale/mr/LC_MESSAGES/django.po b/django/contrib/admin/locale/mr/LC_MESSAGES/django.po index c02c72b1e8..c777562194 100644 --- a/django/contrib/admin/locale/mr/LC_MESSAGES/django.po +++ b/django/contrib/admin/locale/mr/LC_MESSAGES/django.po @@ -1,14 +1,15 @@ # This file is distributed under the same license as the Django package. # # Translators: +# Omkar Parab, 2024 msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-01-17 11:07+0100\n" -"PO-Revision-Date: 2015-01-18 08:31+0000\n" -"Last-Translator: Jannis Leidel \n" -"Language-Team: Marathi (http://www.transifex.com/projects/p/django/language/" +"POT-Creation-Date: 2023-09-18 11:41-0300\n" +"PO-Revision-Date: 2024-01-25 07:05+0000\n" +"Last-Translator: Omkar Parab, 2024\n" +"Language-Team: Marathi (http://app.transifex.com/django/django/language/" "mr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -16,109 +17,143 @@ msgstr "" "Language: mr\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#, python-format -msgid "Successfully deleted %(count)d %(items)s." -msgstr "" - -#, python-format -msgid "Cannot delete %(name)s" -msgstr "" - -msgid "Are you sure?" -msgstr "" - #, python-format msgid "Delete selected %(verbose_name_plural)s" msgstr "" +#, python-format +msgid "Successfully deleted %(count)d %(items)s." +msgstr "यशस्वीरीत्या %(count)d %(items)s घालवले गेले आहेत." + +#, python-format +msgid "Cannot delete %(name)s" +msgstr "%(name)s घालवू शकत नाही" + +msgid "Are you sure?" +msgstr "तुम्हाला खात्री आहे का?" + msgid "Administration" -msgstr "" +msgstr "प्रशासन" msgid "All" -msgstr "" +msgstr "सर्व" msgid "Yes" -msgstr "" +msgstr "होय" msgid "No" -msgstr "" +msgstr "नाही" msgid "Unknown" -msgstr "" +msgstr "अज्ञात" msgid "Any date" -msgstr "" +msgstr "कोणतीही दिनांक" msgid "Today" -msgstr "" +msgstr "आज" msgid "Past 7 days" -msgstr "" +msgstr "मागील 7 दिवस" msgid "This month" -msgstr "" +msgstr "या महिन्यात" msgid "This year" -msgstr "" +msgstr "यावर्षी" + +msgid "No date" +msgstr "दिनांक नाही" + +msgid "Has date" +msgstr "दिनांक आहे" + +msgid "Empty" +msgstr "रिकामी" + +msgid "Not empty" +msgstr "रिकामी नाही" #, python-format msgid "" "Please enter the correct %(username)s and password for a staff account. Note " "that both fields may be case-sensitive." msgstr "" +"कृपया करून %(username)s आणि कर्मचारी खात्यासाठी अचूक गुप्तशब्द नमूद करा. लक्षात घ्या की " +"दोन्ही राखणे संवेदनशील असू शकतात." msgid "Action:" -msgstr "" +msgstr "क्रिया:" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "अजून एक %(verbose_name)s जोडा" + +msgid "Remove" +msgstr "काढा" + +msgid "Addition" +msgstr "वाढ" + +msgid "Change" +msgstr "बदला" + +msgid "Deletion" +msgstr "वगळा" msgid "action time" -msgstr "" +msgstr "क्रियाकाळ" + +msgid "user" +msgstr "वापरकर्ता" + +msgid "content type" +msgstr "सामुग्री प्रकार" msgid "object id" msgstr "" +#. Translators: 'repr' means representation +#. (https://docs.python.org/library/functions.html#repr) msgid "object repr" msgstr "" msgid "action flag" -msgstr "" +msgstr "क्रिया झेंडा" msgid "change message" -msgstr "" +msgstr "लिखित बदला" msgid "log entry" -msgstr "" +msgstr "घटक नोंद" msgid "log entries" -msgstr "" +msgstr "घटक नोंदी" #, python-format -msgid "Added \"%(object)s\"." -msgstr "" +msgid "Added “%(object)s”." +msgstr "“%(object)s” जोडले" #, python-format -msgid "Changed \"%(object)s\" - %(changes)s" -msgstr "" +msgid "Changed “%(object)s” — %(changes)s" +msgstr "“%(object)s” — %(changes)s बदलले" #, python-format -msgid "Deleted \"%(object)s.\"" -msgstr "" +msgid "Deleted “%(object)s.”" +msgstr "\"%(object)s\" घालविले" msgid "LogEntry Object" msgstr "" -msgid "None" +#, python-brace-format +msgid "Added {name} “{object}”." msgstr "" -msgid "" -"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." -msgstr "" - -#, python-format -msgid "Changed %s." -msgstr "" +msgid "Added." +msgstr "जोडले." msgid "and" -msgstr "" +msgstr "आणि" #, python-format msgid "Added %(name)s \"%(object)s\"." @@ -133,24 +168,21 @@ msgid "Deleted %(name)s \"%(object)s\"." msgstr "" msgid "No fields changed." +msgstr "कोणतेही रखाणे बदलले नाहीत." + +msgid "None" msgstr "" -#, python-format -msgid "" -"The %(name)s \"%(obj)s\" was added successfully. You may edit it again below." +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr "एकापेक्षा जास्त निवडण्यासाठी \"कंट्रोल\" किंवा मॅक वर \"कमांड\" खटका दाबा" + +msgid "Select this object for an action - {}" msgstr "" -#, python-format -msgid "" -"The %(name)s \"%(obj)s\" was added successfully. You may add another " -"%(name)s below." -msgstr "" +msgid "You may edit it again below." +msgstr "तुम्ही ते खाली पुन्हा संपादित करू शकता." -#, python-format -msgid "The %(name)s \"%(obj)s\" was added successfully." -msgstr "" - -#, python-format +#, python-brace-format msgid "" "The %(name)s \"%(obj)s\" was changed successfully. You may edit it again " "below." @@ -162,36 +194,52 @@ msgid "" "%(name)s below." msgstr "" -#, python-format -msgid "The %(name)s \"%(obj)s\" was changed successfully." -msgstr "" +#, python-brace-format +msgid "The {name} “{obj}” was added successfully. You may edit it again below." +msgstr "{name} \"{obj}\" यशस्वीरीत्या जोडले गेले आहे. तुम्ही त्याचे पुन्हा संपादन करू शकता." + +#, python-brace-format +msgid "" +"The {name} “{obj}” was changed successfully. You may add another {name} " +"below." +msgstr "{name} \"{obj}\" यशस्वीरीत्या जोडले गेले आहे. तुम्ही त्याचे पुन्हा संपादन करू शकता." + +#, python-brace-format +msgid "The {name} “{obj}” was changed successfully." +msgstr "{name} \"{obj}\" यशस्वीरीत्या बदलले गेले आहे." msgid "" "Items must be selected in order to perform actions on them. No items have " "been changed." msgstr "" +"गोष्टींवर क्रिया करण्यासाठी त्या निवडले जाणे आवश्यक आहे. कोणत्याही गोष्टी बदलल्या गेल्या " +"नाहीत." msgid "No action selected." -msgstr "" +msgstr "कोणतीही क्रिया निवडली नाही." #, python-format -msgid "The %(name)s \"%(obj)s\" was deleted successfully." -msgstr "" +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "%(name)s “%(obj)s” यशस्वीरीत्या हटवले गेले आहे." #, python-format -msgid "%(name)s object with primary key %(key)r does not exist." -msgstr "" +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "%(name)s “%(key)s” ओळखीसह अस्तित्वात नाही. कदाचित ते घालवले असेल ?" #, python-format msgid "Add %s" -msgstr "" +msgstr "जोडा %s" #, python-format msgid "Change %s" -msgstr "" +msgstr "बदला %s" + +#, python-format +msgid "View %s" +msgstr "पहा %s" msgid "Database error" -msgstr "" +msgstr "डेटाबेस त्रुटी" #, python-format msgid "%(count)s %(name)s was changed successfully." @@ -213,8 +261,9 @@ msgstr "" msgid "Change history: %s" msgstr "" -#. Translators: Model verbose name and instance representation, -#. suitable to be an item in a list. +#. Translators: Model verbose name and instance +#. representation, suitable to be an item in a +#. list. #, python-format msgid "%(class_name)s %(instance)s" msgstr "" @@ -226,111 +275,139 @@ msgid "" msgstr "" msgid "Django site admin" -msgstr "" +msgstr "जॅंगो स्थळ प्रशासक" msgid "Django administration" -msgstr "" +msgstr "जॅंगो प्रशासन " msgid "Site administration" -msgstr "" +msgstr "स्थळ प्रशासन " msgid "Log in" msgstr "" #, python-format msgid "%(app)s administration" -msgstr "" +msgstr "%(app)s प्रशासन" msgid "Page not found" -msgstr "" +msgstr "पान मिळाले नाही" -msgid "We're sorry, but the requested page could not be found." -msgstr "" +msgid "We’re sorry, but the requested page could not be found." +msgstr "आम्ही क्षमस्व आहोत, पण विनंती केलेले पान मिळाले नाही." msgid "Home" -msgstr "" +msgstr "मुख्यपान" msgid "Server error" -msgstr "" +msgstr "वाढप्यात त्रुटी" msgid "Server error (500)" -msgstr "" +msgstr "सर्व्हर त्रुटी (500)" msgid "Server Error (500)" -msgstr "" +msgstr "सर्व्हर त्रुटी (500)" msgid "" -"There's been an error. It's been reported to the site administrators via " +"There’s been an error. It’s been reported to the site administrators via " "email and should be fixed shortly. Thanks for your patience." msgstr "" +"त्रुटी आली आहे व ती विपत्राद्वारे सांकेतिकस्थळ व्यवस्थापकांकडे कळविण्यात आली आहे आणि लवकरच " +"ती सुधारली जाईल. आपल्या सहनशीलतेसाठी धन्यवाद." msgid "Run the selected action" -msgstr "" +msgstr "निवडलेली क्रिया चालवा" msgid "Go" -msgstr "" +msgstr "जा" msgid "Click here to select the objects across all pages" -msgstr "" +msgstr "पानावरील सर्व वस्तूंची निवड करण्यासाठी येथे टिचकी मारा" #, python-format msgid "Select all %(total_count)s %(module_name)s" -msgstr "" +msgstr "सर्व %(total_count)s %(module_name)s निवडा" msgid "Clear selection" -msgstr "" +msgstr "निवड काढा" -msgid "" -"First, enter a username and password. Then, you'll be able to edit more user " -"options." -msgstr "" - -msgid "Enter a username and password." -msgstr "" - -msgid "Change password" -msgstr "" - -msgid "Please correct the error below." -msgstr "" - -msgid "Please correct the errors below." -msgstr "" +msgid "Breadcrumbs" +msgstr "ब्रेडक्रम्ब्स" #, python-format -msgid "Enter a new password for the user %(username)s." -msgstr "" - -msgid "Welcome," -msgstr "" - -msgid "View site" -msgstr "" - -msgid "Documentation" -msgstr "" - -msgid "Log out" +msgid "Models in the %(name)s application" msgstr "" msgid "Add" -msgstr "" +msgstr "जोडा" -msgid "History" -msgstr "" +msgid "View" +msgstr "पहा" -msgid "View on site" +msgid "You don’t have permission to view or edit anything." +msgstr "तुम्हाला काहीही पाहण्याची किंवा संपादित करण्याची परवानगी नाही." + +msgid "" +"First, enter a username and password. Then, you’ll be able to edit more user " +"options." msgstr "" +"पहिलं, वापरकर्तानाव आणि गुप्तशब्द नमूद करा. मग, आपण अधिक वापरकर्ता पर्यायांचे संपादन करू " +"शकता." + +msgid "Enter a username and password." +msgstr "वापरकर्तानाव आणि गुप्तशब्द नमूद करा." + +msgid "Change password" +msgstr "गुप्तशब्द बदला" + +msgid "Please correct the error below." +msgid_plural "Please correct the errors below." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Enter a new password for the user %(username)s." +msgstr "%(username)s वापरकर्त्यासाठी नवीन गुप्तशब्द नमूद करा " + +msgid "Skip to main content" +msgstr "मुख्य सामुग्रीवर जा" + +msgid "Welcome," +msgstr "स्वागत आहे," + +msgid "View site" +msgstr "संकेतस्थळ पहा" + +msgid "Documentation" +msgstr "दस्तऐवज" + +msgid "Log out" +msgstr "बाहेर पडा" #, python-format msgid "Add %(name)s" msgstr "" +msgid "History" +msgstr "इतिहास" + +msgid "View on site" +msgstr "संकेतस्थळावर पहा" + msgid "Filter" -msgstr "" +msgstr "गाळणी" + +msgid "Hide counts" +msgstr "गणना लपवा" + +msgid "Show counts" +msgstr "गणना दाखवा" + +msgid "Clear all filters" +msgstr "सर्व गाळण्या साफ करा" msgid "Remove from sorting" -msgstr "" +msgstr "सोडवा सोडवा" #, python-format msgid "Sorting priority: %(priority_number)s" @@ -339,8 +416,17 @@ msgstr "" msgid "Toggle sorting" msgstr "" +msgid "Toggle theme (current theme: auto)" +msgstr "थीम खुंटी बदला (सध्याची थीम: स्वयंप्रेरित)" + +msgid "Toggle theme (current theme: light)" +msgstr "थीम खुंटी बदला (सध्याची थीम: उजेड)" + +msgid "Toggle theme (current theme: dark)" +msgstr "थीम खुंटी बदला (सध्याची थीम: काळोख)" + msgid "Delete" -msgstr "" +msgstr "घालवा" #, python-format msgid "" @@ -360,18 +446,20 @@ msgid "" "Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " "All of the following related items will be deleted:" msgstr "" +"\"%(escaped_object)s\" %(object_name)sनावाच्या वस्तू घालवताना त्याच्या संबंधित " +"वस्तूही घालवाव्या लागतील" msgid "Objects" msgstr "" -msgid "Yes, I'm sure" -msgstr "" +msgid "Yes, I’m sure" +msgstr "होय, मला खात्री आहे" msgid "No, take me back" -msgstr "" +msgstr "नको, मला मागे न्या" msgid "Delete multiple objects" -msgstr "" +msgstr "एकाधिक वस्तू घालवा" #, python-format msgid "" @@ -385,95 +473,111 @@ msgid "" "Deleting the selected %(objects_name)s would require deleting the following " "protected related objects:" msgstr "" +"निवडलेले %(objects_name)s घालवण्यासाठी खालील संरक्षित संबंधित वस्तू डिलीट करणे आवश्यक " +"आहे." #, python-format msgid "" "Are you sure you want to delete the selected %(objects_name)s? All of the " "following objects and their related items will be deleted:" msgstr "" - -msgid "Change" -msgstr "" - -msgid "Remove" -msgstr "" - -#, python-format -msgid "Add another %(verbose_name)s" -msgstr "" +"तुम्हाला खात्री आहे की तुम्ही निवडलेले %(objects_name)s हटवायला याची खात्री आहे का? " +"खात्री आहे की खालील वस्तूंचे आणि त्यांच्या संबंधित घटक हटवले जातील:" msgid "Delete?" -msgstr "" +msgstr "घालवायचं ?" #, python-format msgid " By %(filter_title)s " msgstr "" msgid "Summary" -msgstr "" +msgstr "सारांश" -#, python-format -msgid "Models in the %(name)s application" -msgstr "" +msgid "Recent actions" +msgstr "अलीकडच्या क्रिया" -msgid "You don't have permission to edit anything." -msgstr "" - -msgid "Recent Actions" -msgstr "" - -msgid "My Actions" -msgstr "" +msgid "My actions" +msgstr "माझ्या क्रिया" msgid "None available" -msgstr "" +msgstr "काहीही उपलब्ध नाही" + +msgid "Added:" +msgstr "जोडले गेले:" + +msgid "Changed:" +msgstr "बदलले." + +msgid "Deleted:" +msgstr "घालवले." msgid "Unknown content" -msgstr "" +msgstr "अज्ञात सामुग्री" msgid "" -"Something's wrong with your database installation. Make sure the appropriate " +"Something’s wrong with your database installation. Make sure the appropriate " "database tables have been created, and make sure the database is readable by " "the appropriate user." msgstr "" +"तुमच्या माहितीगठ्ठा स्थापनेत काहीतरी चुक आहे. खात्री करा की योग्य डेटाबेस तक्ते तयार केलेले " +"आहेत आणि खात्री करा की योग्य वापरकर्त्या माहितीगठ्ठा वाचू शकतो." + +#, python-format +msgid "" +"You are authenticated as %(username)s, but are not authorized to access this " +"page. Would you like to login to a different account?" +msgstr "" +"तुम्ही %(username)s म्हणून प्रमाणित केले आहे, परंतु हे पानात शिरकाव करण्यास अधिकृत नाही. " +"तुम्हाला वेगळ्या खात्यात प्रवेश करायला आवडेल का?" msgid "Forgotten your password or username?" +msgstr "तुमचा गुप्तशब्द किंवा वापरकर्तानाव विसरलात का?" + +msgid "Toggle navigation" +msgstr "टॉगल नेविगेशन" + +msgid "Sidebar" +msgstr "बाजूभिंत" + +msgid "Start typing to filter…" +msgstr "प्रविष्ट करण्यासाठी टाइप करण्याची सुरुवात करा ..." + +msgid "Filter navigation items" msgstr "" msgid "Date/time" -msgstr "" +msgstr "दिनांक/वेळ" msgid "User" -msgstr "" +msgstr "वापरकर्ता" msgid "Action" -msgstr "" +msgstr "क्रिया" + +msgid "entry" +msgid_plural "entries" +msgstr[0] "" +msgstr[1] "" msgid "" -"This object doesn't have a change history. It probably wasn't added via this " +"This object doesn’t have a change history. It probably wasn’t added via this " "admin site." msgstr "" +"या वस्तूचा कोणताही बदलाचा इतिहास नाही. कदाचित तो व्यवस्थापक मार्गे नव्हता जोडला गेला " +"असावा." msgid "Show all" -msgstr "" +msgstr "सर्व दाखवा" msgid "Save" -msgstr "" +msgstr "साठवा" -#, python-format -msgid "Change selected %(model)s" -msgstr "" - -#, python-format -msgid "Add another %(model)s" -msgstr "" - -#, python-format -msgid "Delete selected %(model)s" -msgstr "" +msgid "Popup closing…" +msgstr "पॉपअप बंद होत आहे..." msgid "Search" -msgstr "" +msgstr "शोधा" #, python-format msgid "%(counter)s result" @@ -486,124 +590,164 @@ msgid "%(full_result_count)s total" msgstr "" msgid "Save as new" -msgstr "" +msgstr "नवीन म्हणून साठवा" msgid "Save and add another" -msgstr "" +msgstr "साठवा आणि आणखी एक जोडा" msgid "Save and continue editing" -msgstr "" +msgstr "साठवा आणि संपादन सुरू ठेवा" -msgid "Thanks for spending some quality time with the Web site today." -msgstr "" +msgid "Save and view" +msgstr "साठवा आणि पहा" + +msgid "Close" +msgstr "बंद" + +#, python-format +msgid "Change selected %(model)s" +msgstr "निवडलेले %(model)s बदला" + +#, python-format +msgid "Add another %(model)s" +msgstr "अजून एक %(model)s जोडा" + +#, python-format +msgid "Delete selected %(model)s" +msgstr "निवडलेले %(model)s घालवा" + +#, python-format +msgid "View selected %(model)s" +msgstr "निवडलेले %(model)s पहा" + +msgid "Thanks for spending some quality time with the web site today." +msgstr "आज संकेतस्थळावर अमुल्य वेळ घालवल्याबद्दल धन्यवाद." msgid "Log in again" -msgstr "" +msgstr "पुन्हा प्रवेश करा" msgid "Password change" -msgstr "" +msgstr "गुप्तशब्द बदला" msgid "Your password was changed." -msgstr "" +msgstr "तुमचा गुप्तशब्द बदलला गेला आहे." msgid "" -"Please enter your old password, for security's sake, and then enter your new " +"Please enter your old password, for security’s sake, and then enter your new " "password twice so we can verify you typed it in correctly." msgstr "" +"सुरक्षेसाठी कृपया आपला जुना गुप्तशब्द नमूद करा, आणि नंतर आपला नवीन गुप्तशब्द दोनदा नमूद " +"करा जेणेकरून तुम्ही गुप्तशब्द अचूक नमूद केला आहे की नाही ह्याची आम्ही पडताळणी करू." msgid "Change my password" -msgstr "" +msgstr "माझा गुप्तशब्द बदला" msgid "Password reset" -msgstr "" +msgstr "गुप्तशब्द पुन्हस्थापना" msgid "Your password has been set. You may go ahead and log in now." -msgstr "" +msgstr "तुमचा गुप्तशब्द जोडला आहे. आपण आता प्रवेश करू शकता." msgid "Password reset confirmation" -msgstr "" +msgstr "गुप्तशब्द पुन्हस्थापना निश्चित" msgid "" "Please enter your new password twice so we can verify you typed it in " "correctly." msgstr "" +"कृपया आपला नवीन गुप्तशब्द दोनदा नमूद करा, जेणेकरून तुम्ही तो योग्य नमूद केला आहे का याची " +"आम्ही पडताळणी करू." msgid "New password:" -msgstr "" +msgstr "नवीन गुप्तशब्द:" msgid "Confirm password:" -msgstr "" +msgstr "निश्चित गुप्तशब्द:" msgid "" "The password reset link was invalid, possibly because it has already been " "used. Please request a new password reset." msgstr "" +"गुप्तशब्द पुन्हस्थापना दुवा अवैध आहे, कदाचित तो आधीच वापरला गेलेला आहे. कृपया नवीन गुप्तशब्द " +"पुन्हस्थापनेची विनंती करा." msgid "" -"We've emailed you instructions for setting your password, if an account " +"We’ve emailed you instructions for setting your password, if an account " "exists with the email you entered. You should receive them shortly." msgstr "" +"आपल्याला आपला गुप्तशब्द पुन्हस्थापीत करण्याच्या सूचना विपत्र केल्या आहेत, जर नमूद केलेल्या " +"विपत्रासह खाते उपलब्ध असेल तर आपल्याला ते लवकरच मिळायला पाहीजे." msgid "" -"If you don't receive an email, please make sure you've entered the address " +"If you don’t receive an email, please make sure you’ve entered the address " "you registered with, and check your spam folder." msgstr "" +"जर तुम्हाला विपत्र मिळत नसेल तर कृपया खाते नोंदवलेला विपत्र तुम्ही योग्य नमूद केलाय का " +"याची खात्री करा आणि तुमचा स्पॅम फोल्डर तपासा." #, python-format msgid "" "You're receiving this email because you requested a password reset for your " "user account at %(site_name)s." msgstr "" +"तुम्हाला हा विपत्र मिळत आहे कारण तुम्ही %(site_name)s या संकेतस्थळावरील तुमच्या " +"वापरकर्ता खात्यासाठी गुप्तशब्द पुन्हस्थापनेची विनंती केली होती." msgid "Please go to the following page and choose a new password:" -msgstr "" +msgstr "कृपया खालील पानावर जा आणि नवीन गुप्तशब्द निवडा." -msgid "Your username, in case you've forgotten:" -msgstr "" +msgid "Your username, in case you’ve forgotten:" +msgstr "तुमचे वापरकर्तानाव, जर तुम्ही विसरला असाल तर:" msgid "Thanks for using our site!" -msgstr "" +msgstr "आमच्या संकेतस्थळाचा वापर केल्याबद्दल आभार!" #, python-format msgid "The %(site_name)s team" -msgstr "" +msgstr "%(site_name)s संघ" msgid "" -"Forgotten your password? Enter your email address below, and we'll email " +"Forgotten your password? Enter your email address below, and we’ll email " "instructions for setting a new one." msgstr "" +"तुमचा गुप्तशब्द विसरलात का? तुमचा विपत्रपत्ता खाली नमूद करा. नवीन गुप्तशब्द " +"ठरवण्यासाठीच्या सूचना आम्ही तुम्हाला विपत्र करू." msgid "Email address:" -msgstr "" +msgstr "विपत्र पत्ता:" msgid "Reset my password" -msgstr "" +msgstr "माझा गुप्तशब्द पुन्हस्थापन करा" + +msgid "Select all objects on this page for an action" +msgstr "क्रिया करण्यासाठी या पानावरील सर्व घटक निवडा." msgid "All dates" -msgstr "" - -msgid "(None)" -msgstr "" +msgstr "सर्व दिनांक" #, python-format msgid "Select %s" -msgstr "" +msgstr "%s निवडा" #, python-format msgid "Select %s to change" -msgstr "" +msgstr "बदलण्यासाठी %s निवडा" + +#, python-format +msgid "Select %s to view" +msgstr "पाहण्यासाठी %s निवडा" msgid "Date:" -msgstr "" +msgstr "दिनांक:" msgid "Time:" -msgstr "" +msgstr "वेळ:" msgid "Lookup" -msgstr "" +msgstr "शोध" msgid "Currently:" -msgstr "" +msgstr "सध्या:" msgid "Change:" -msgstr "" +msgstr "बदला:" diff --git a/django/contrib/admin/locale/sw/LC_MESSAGES/django.mo b/django/contrib/admin/locale/sw/LC_MESSAGES/django.mo index a66e246dcd..9aa7f311c2 100644 Binary files a/django/contrib/admin/locale/sw/LC_MESSAGES/django.mo and b/django/contrib/admin/locale/sw/LC_MESSAGES/django.mo differ diff --git a/django/contrib/admin/locale/sw/LC_MESSAGES/django.po b/django/contrib/admin/locale/sw/LC_MESSAGES/django.po index a2eb18c0fd..afbca8e7f4 100644 --- a/django/contrib/admin/locale/sw/LC_MESSAGES/django.po +++ b/django/contrib/admin/locale/sw/LC_MESSAGES/django.po @@ -2,6 +2,7 @@ # # Translators: # Antony Owino , 2023 +# DOREEN WANYAMA, 2023 # Machaku, 2013-2014 # Machaku, 2016 # Millicent Atieno Obwanda , 2023 @@ -11,8 +12,8 @@ msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-09-18 11:41-0300\n" -"PO-Revision-Date: 2023-12-04 07:05+0000\n" -"Last-Translator: Natalia (Django Fellow), 2023\n" +"PO-Revision-Date: 2023-12-25 07:05+0000\n" +"Last-Translator: DOREEN WANYAMA, 2023\n" "Language-Team: Swahili (http://app.transifex.com/django/django/language/" "sw/)\n" "MIME-Version: 1.0\n" @@ -250,7 +251,7 @@ msgstr "Badilisha %s" #, python-format msgid "View %s" -msgstr "" +msgstr "Muonekano %s" msgid "Database error" msgstr "Hitilafu katika hifadhidata" @@ -358,7 +359,7 @@ msgid "Add" msgstr "Ongeza" msgid "View" -msgstr "" +msgstr "Muonekano" msgid "You don’t have permission to view or edit anything." msgstr "Huna ruhusa ya kutazama au kuhariri kitu chochote" @@ -378,8 +379,8 @@ msgstr "Badilisha nywila" msgid "Please correct the error below." msgid_plural "Please correct the errors below." -msgstr[0] "" -msgstr[1] "" +msgstr[0] "Tafadhali sahihisha kosa lifuatalo." +msgstr[1] "Tafadhali sahihisha makosa yafuatayo" #, python-format msgid "Enter a new password for the user %(username)s." @@ -582,8 +583,8 @@ msgstr "Tendo" msgid "entry" msgid_plural "entries" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "ingizo" +msgstr[1] "maingizo" msgid "" "This object doesn’t have a change history. It probably wasn’t added via this " diff --git a/django/contrib/admin/locale/uz/LC_MESSAGES/django.mo b/django/contrib/admin/locale/uz/LC_MESSAGES/django.mo index 67c6d07e41..253820c477 100644 Binary files a/django/contrib/admin/locale/uz/LC_MESSAGES/django.mo and b/django/contrib/admin/locale/uz/LC_MESSAGES/django.mo differ diff --git a/django/contrib/admin/locale/uz/LC_MESSAGES/django.po b/django/contrib/admin/locale/uz/LC_MESSAGES/django.po index 80dd7971a6..8b4f8fd6b8 100644 --- a/django/contrib/admin/locale/uz/LC_MESSAGES/django.po +++ b/django/contrib/admin/locale/uz/LC_MESSAGES/django.po @@ -6,17 +6,17 @@ # Bedilbek Khamidov , 2019 # Claude Paroz , 2019 # Nuriddin Islamov, 2021 -# Shukrullo Turgunov , 2021 +# Shukrullo Turgunov , 2021,2024 # Sukhrobbek Ismatov , 2019 # Yet Sum , 2019 msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-09-21 10:22+0200\n" -"PO-Revision-Date: 2021-12-16 12:06+0000\n" -"Last-Translator: Alex Ibragimov\n" -"Language-Team: Uzbek (http://www.transifex.com/django/django/language/uz/)\n" +"POT-Creation-Date: 2023-09-18 11:41-0300\n" +"PO-Revision-Date: 2024-01-25 07:05+0000\n" +"Last-Translator: Shukrullo Turgunov , 2021,2024\n" +"Language-Team: Uzbek (http://app.transifex.com/django/django/language/uz/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -25,7 +25,7 @@ msgstr "" #, python-format msgid "Delete selected %(verbose_name_plural)s" -msgstr "%(verbose_name_plural)s tanlanganlarni o'chirish" +msgstr "%(verbose_name_plural)s larni o'chirish" #, python-format msgid "Successfully deleted %(count)d %(items)s." @@ -42,7 +42,7 @@ msgid "Administration" msgstr "Administratsiya" msgid "All" -msgstr "Hammasi" +msgstr "Barchasi" msgid "Yes" msgstr "Ha" @@ -96,7 +96,7 @@ msgid "Add another %(verbose_name)s" msgstr "Boshqa %(verbose_name)s qo‘shish" msgid "Remove" -msgstr "Olib tashlash" +msgstr "O'chirish" msgid "Addition" msgstr " Qo'shish" @@ -182,6 +182,9 @@ msgstr "Bo'sh" msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." msgstr "" +msgid "Select this object for an action - {}" +msgstr "" + #, python-brace-format msgid "The {name} “{obj}” was added successfully." msgstr "" @@ -262,8 +265,9 @@ msgstr "" msgid "Change history: %s" msgstr "" -#. Translators: Model verbose name and instance representation, -#. suitable to be an item in a list. +#. Translators: Model verbose name and instance +#. representation, suitable to be an item in a +#. list. #, python-format msgid "%(class_name)s %(instance)s" msgstr "" @@ -329,6 +333,9 @@ msgstr "" msgid "Clear selection" msgstr "" +msgid "Breadcrumbs" +msgstr "" + #, python-format msgid "Models in the %(name)s application" msgstr "" @@ -354,15 +361,16 @@ msgid "Change password" msgstr "Parolni o'zgartirish" msgid "Please correct the error below." -msgstr "" - -msgid "Please correct the errors below." -msgstr "" +msgid_plural "Please correct the errors below." +msgstr[0] "" #, python-format msgid "Enter a new password for the user %(username)s." msgstr "" +msgid "Skip to main content" +msgstr "" + msgid "Welcome," msgstr "Xush kelibsiz," @@ -388,6 +396,12 @@ msgstr "Saytda ko'rish" msgid "Filter" msgstr "Saralash" +msgid "Hide counts" +msgstr "" + +msgid "Show counts" +msgstr "" + msgid "Clear all filters" msgstr "" @@ -401,6 +415,15 @@ msgstr "" msgid "Toggle sorting" msgstr "" +msgid "Toggle theme (current theme: auto)" +msgstr "" + +msgid "Toggle theme (current theme: light)" +msgstr "" + +msgid "Toggle theme (current theme: dark)" +msgstr "" + msgid "Delete" msgstr "O'chirish" @@ -473,6 +496,15 @@ msgstr "Mening harakatlarim" msgid "None available" msgstr "" +msgid "Added:" +msgstr "" + +msgid "Changed:" +msgstr "" + +msgid "Deleted:" +msgstr "" + msgid "Unknown content" msgstr "" @@ -494,6 +526,9 @@ msgstr "" msgid "Toggle navigation" msgstr "Navigatsiyani almashtirish" +msgid "Sidebar" +msgstr "" + msgid "Start typing to filter…" msgstr "" @@ -509,6 +544,10 @@ msgstr "" msgid "Action" msgstr "" +msgid "entry" +msgid_plural "entries" +msgstr[0] "" + msgid "" "This object doesn’t have a change history. It probably wasn’t added via this " "admin site." @@ -562,6 +601,10 @@ msgstr "" msgid "Delete selected %(model)s" msgstr "" +#, python-format +msgid "View selected %(model)s" +msgstr "" + msgid "Thanks for spending some quality time with the web site today." msgstr "" @@ -647,6 +690,9 @@ msgstr "" msgid "Reset my password" msgstr "Parolimni tiklash" +msgid "Select all objects on this page for an action" +msgstr "" + msgid "All dates" msgstr "Barcha sanalar" diff --git a/django/contrib/admin/locale/zh_Hans/LC_MESSAGES/django.mo b/django/contrib/admin/locale/zh_Hans/LC_MESSAGES/django.mo index af501d2aa8..4bee1a8d45 100644 Binary files a/django/contrib/admin/locale/zh_Hans/LC_MESSAGES/django.mo and b/django/contrib/admin/locale/zh_Hans/LC_MESSAGES/django.mo differ diff --git a/django/contrib/admin/locale/zh_Hans/LC_MESSAGES/django.po b/django/contrib/admin/locale/zh_Hans/LC_MESSAGES/django.po index f8c329dde8..abc545310c 100644 --- a/django/contrib/admin/locale/zh_Hans/LC_MESSAGES/django.po +++ b/django/contrib/admin/locale/zh_Hans/LC_MESSAGES/django.po @@ -5,6 +5,7 @@ # Brian Wang , 2018 # Fulong Sun , 2016 # Huanqun Yang, 2022 +# jack yang, 2023 # Jannis Leidel , 2011 # Kevin Sze , 2012 # Lele Long , 2011,2015 @@ -34,8 +35,8 @@ msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-09-18 11:41-0300\n" -"PO-Revision-Date: 2023-12-04 07:05+0000\n" -"Last-Translator: Scott Jiang, 2023\n" +"PO-Revision-Date: 2023-12-25 07:05+0000\n" +"Last-Translator: jack yang, 2023\n" "Language-Team: Chinese (China) (http://app.transifex.com/django/django/" "language/zh_CN/)\n" "MIME-Version: 1.0\n" @@ -203,7 +204,7 @@ msgid "Hold down “Control”, or “Command” on a Mac, to select more than o msgstr "按住 Control 键或 Mac 上的 Command 键来选择多项。" msgid "Select this object for an action - {}" -msgstr "" +msgstr "选择此对象执行操作 - {}" #, python-brace-format msgid "The {name} “{obj}” was added successfully." @@ -421,10 +422,10 @@ msgid "Filter" msgstr "过滤器" msgid "Hide counts" -msgstr "" +msgstr "隐藏计数" msgid "Show counts" -msgstr "" +msgstr "显示计数" msgid "Clear all filters" msgstr "清除所有筛选" @@ -507,7 +508,7 @@ msgid "" "Are you sure you want to delete the selected %(objects_name)s? All of the " "following objects and their related items will be deleted:" msgstr "" -"请确认要删除选中的 %(objects_name)s 吗?以下所有对象和余它们相关的条目将都会" +"请确认要删除选中的 %(objects_name)s 吗?以下所有对象和与它们相关的条目将都会" "被删除:" msgid "Delete?" @@ -530,13 +531,13 @@ msgid "None available" msgstr "无可选的" msgid "Added:" -msgstr "" +msgstr "已添加:" msgid "Changed:" -msgstr "" +msgstr "已修改:" msgid "Deleted:" -msgstr "" +msgstr "已删除:" msgid "Unknown content" msgstr "未知内容" @@ -734,7 +735,7 @@ msgid "Reset my password" msgstr "重设我的密码" msgid "Select all objects on this page for an action" -msgstr "" +msgstr "选择此页面上的所有对象执行操作" msgid "All dates" msgstr "所有日期" diff --git a/django/contrib/admin/locale/zh_Hans/LC_MESSAGES/djangojs.mo b/django/contrib/admin/locale/zh_Hans/LC_MESSAGES/djangojs.mo index 255ea4a11b..c78566a876 100644 Binary files a/django/contrib/admin/locale/zh_Hans/LC_MESSAGES/djangojs.mo and b/django/contrib/admin/locale/zh_Hans/LC_MESSAGES/djangojs.mo differ diff --git a/django/contrib/admin/locale/zh_Hans/LC_MESSAGES/djangojs.po b/django/contrib/admin/locale/zh_Hans/LC_MESSAGES/djangojs.po index ed1f0b744f..44f47c8b39 100644 --- a/django/contrib/admin/locale/zh_Hans/LC_MESSAGES/djangojs.po +++ b/django/contrib/admin/locale/zh_Hans/LC_MESSAGES/djangojs.po @@ -3,6 +3,7 @@ # Translators: # HuanCheng Bai白宦成(Bestony) , 2018 # Fan Xu , 2022 +# jack yang, 2023 # Jannis Leidel , 2011 # Kaiqi Zhu, 2023 # Kewei Ma , 2016 @@ -21,8 +22,8 @@ msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-09-18 15:04-0300\n" -"PO-Revision-Date: 2023-12-04 07:59+0000\n" -"Last-Translator: Kaiqi Zhu, 2023\n" +"PO-Revision-Date: 2023-12-25 07:59+0000\n" +"Last-Translator: jack yang, 2023\n" "Language-Team: Chinese (China) (http://app.transifex.com/django/django/" "language/zh_CN/)\n" "MIME-Version: 1.0\n" @@ -248,53 +249,53 @@ msgid "Dec" msgstr "十二月" msgid "Sunday" -msgstr "" +msgstr "星期日" msgid "Monday" -msgstr "" +msgstr "星期一" msgid "Tuesday" -msgstr "" +msgstr "星期二" msgid "Wednesday" -msgstr "" +msgstr "星期三" msgid "Thursday" -msgstr "" +msgstr "星期四" msgid "Friday" -msgstr "" +msgstr "星期五" msgid "Saturday" -msgstr "" +msgstr "星期六" msgctxt "abbrev. day Sunday" msgid "Sun" -msgstr "" +msgstr "星期日" msgctxt "abbrev. day Monday" msgid "Mon" -msgstr "" +msgstr "星期一" msgctxt "abbrev. day Tuesday" msgid "Tue" -msgstr "" +msgstr "星期二" msgctxt "abbrev. day Wednesday" msgid "Wed" -msgstr "" +msgstr "星期三" msgctxt "abbrev. day Thursday" msgid "Thur" -msgstr "" +msgstr "星期四" msgctxt "abbrev. day Friday" msgid "Fri" -msgstr "" +msgstr "星期五" msgctxt "abbrev. day Saturday" msgid "Sat" -msgstr "" +msgstr "星期六" msgctxt "one letter Sunday" msgid "S" diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py index e3703f5866..d97597fe66 100644 --- a/django/contrib/admin/options.py +++ b/django/contrib/admin/options.py @@ -1759,9 +1759,9 @@ class ModelAdmin(BaseModelAdmin): has_delete_permission = inline.has_delete_permission(request, obj) else: # Disable all edit-permissions, and override formset settings. - has_add_permission = ( - has_change_permission - ) = has_delete_permission = False + has_add_permission = has_change_permission = has_delete_permission = ( + False + ) formset.extra = formset.max_num = 0 has_view_permission = inline.has_view_permission(request, obj) prepopulated = dict(inline.get_prepopulated_fields(request, obj)) @@ -1896,9 +1896,11 @@ class ModelAdmin(BaseModelAdmin): form, list(fieldsets), # Clear prepopulated fields on a view-only form to avoid a crash. - self.get_prepopulated_fields(request, obj) - if add or self.has_change_permission(request, obj) - else {}, + ( + self.get_prepopulated_fields(request, obj) + if add or self.has_change_permission(request, obj) + else {} + ), readonly_fields, model_admin=self, ) diff --git a/django/contrib/admin/templatetags/admin_list.py b/django/contrib/admin/templatetags/admin_list.py index 2dcdf62afb..fdf6e63f5f 100644 --- a/django/contrib/admin/templatetags/admin_list.py +++ b/django/contrib/admin/templatetags/admin_list.py @@ -18,6 +18,7 @@ from django.contrib.admin.views.main import ( ) from django.core.exceptions import ObjectDoesNotExist from django.db import models +from django.db.models.constants import LOOKUP_SEP from django.template import Library from django.template.loader import get_template from django.templatetags.static import static @@ -112,7 +113,7 @@ def result_headers(cl): # Set ordering for attr that is a property, if defined. if isinstance(attr, property) and hasattr(attr, "fget"): admin_order_field = getattr(attr.fget, "admin_order_field", None) - if not admin_order_field: + if not admin_order_field and LOOKUP_SEP not in field_name: is_field_sortable = False if not is_field_sortable: @@ -171,9 +172,9 @@ def result_headers(cl): "url_primary": cl.get_query_string({ORDER_VAR: ".".join(o_list_primary)}), "url_remove": cl.get_query_string({ORDER_VAR: ".".join(o_list_remove)}), "url_toggle": cl.get_query_string({ORDER_VAR: ".".join(o_list_toggle)}), - "class_attrib": format_html(' class="{}"', " ".join(th_classes)) - if th_classes - else "", + "class_attrib": ( + format_html(' class="{}"', " ".join(th_classes)) if th_classes else "" + ), } @@ -270,9 +271,11 @@ def items_for_result(cl, result, form): link_or_text = format_html( '{}', url, - format_html(' data-popup-opener="{}"', value) - if cl.is_popup - else "", + ( + format_html(' data-popup-opener="{}"', value) + if cl.is_popup + else "" + ), result_repr, ) diff --git a/django/contrib/admin/utils.py b/django/contrib/admin/utils.py index 0bcf99ae85..c8e722bcc8 100644 --- a/django/contrib/admin/utils.py +++ b/django/contrib/admin/utils.py @@ -289,8 +289,8 @@ def lookup_field(name, obj, model_admin=None): try: f = _get_non_gfk_field(opts, name) except (FieldDoesNotExist, FieldIsAForeignKeyColumnName): - # For non-field values, the value is either a method, property or - # returned via a callable. + # For non-regular field values, the value is either a method, + # property, related field, or returned via a callable. if callable(name): attr = name value = attr(obj) @@ -298,10 +298,17 @@ def lookup_field(name, obj, model_admin=None): attr = getattr(model_admin, name) value = attr(obj) else: - attr = getattr(obj, name) + sentinel = object() + attr = getattr(obj, name, sentinel) if callable(attr): value = attr() else: + if attr is sentinel: + attr = obj + for part in name.split(LOOKUP_SEP): + attr = getattr(attr, part, sentinel) + if attr is sentinel: + return None, None, None value = attr if hasattr(model_admin, "model") and hasattr(model_admin.model, name): attr = getattr(model_admin.model, name) @@ -345,9 +352,10 @@ def label_for_field(name, model, model_admin=None, return_attr=False, form=None) """ Return a sensible label for a field name. The name can be a callable, property (but not created with @property decorator), or the name of an - object's attribute, as well as a model field. If return_attr is True, also - return the resolved attribute (which could be a callable). This will be - None if (and only if) the name refers to a field. + object's attribute, as well as a model field, including across related + objects. If return_attr is True, also return the resolved attribute + (which could be a callable). This will be None if (and only if) the name + refers to a field. """ attr = None try: @@ -371,15 +379,15 @@ def label_for_field(name, model, model_admin=None, return_attr=False, form=None) elif form and name in form.fields: attr = form.fields[name] else: - message = "Unable to lookup '%s' on %s" % ( - name, - model._meta.object_name, - ) - if model_admin: - message += " or %s" % model_admin.__class__.__name__ - if form: - message += " or %s" % form.__class__.__name__ - raise AttributeError(message) + try: + attr = get_fields_from_path(model, name)[-1] + except (FieldDoesNotExist, NotRelationField): + message = f"Unable to lookup '{name}' on {model._meta.object_name}" + if model_admin: + message += f" or {model_admin.__class__.__name__}" + if form: + message += f" or {form.__class__.__name__}" + raise AttributeError(message) if hasattr(attr, "short_description"): label = attr.short_description diff --git a/django/contrib/admin/views/main.py b/django/contrib/admin/views/main.py index 44001f00f9..d8fff50d18 100644 --- a/django/contrib/admin/views/main.py +++ b/django/contrib/admin/views/main.py @@ -30,6 +30,7 @@ from django.core.exceptions import ( ) from django.core.paginator import InvalidPage from django.db.models import F, Field, ManyToOneRel, OrderBy +from django.db.models.constants import LOOKUP_SEP from django.db.models.expressions import Combinable from django.urls import reverse from django.utils.deprecation import RemovedInDjango60Warning @@ -356,9 +357,9 @@ class ChangeList: """ Return the proper model field name corresponding to the given field_name to use for ordering. field_name may either be the name of a - proper model field or the name of a method (on the admin or model) or a - callable with the 'admin_order_field' attribute. Return None if no - proper model field name can be matched. + proper model field, possibly across relations, or the name of a method + (on the admin or model) or a callable with the 'admin_order_field' + attribute. Return None if no proper model field name can be matched. """ try: field = self.lookup_opts.get_field(field_name) @@ -371,7 +372,12 @@ class ChangeList: elif hasattr(self.model_admin, field_name): attr = getattr(self.model_admin, field_name) else: - attr = getattr(self.model, field_name) + try: + attr = getattr(self.model, field_name) + except AttributeError: + if LOOKUP_SEP in field_name: + return field_name + raise if isinstance(attr, property) and hasattr(attr, "fget"): attr = attr.fget return getattr(attr, "admin_order_field", None) diff --git a/django/contrib/admin/widgets.py b/django/contrib/admin/widgets.py index 3352e75e79..216b87671b 100644 --- a/django/contrib/admin/widgets.py +++ b/django/contrib/admin/widgets.py @@ -1,6 +1,7 @@ """ Form Widget classes specific to the Django admin site. """ + import copy import json diff --git a/django/contrib/admindocs/locale/af/LC_MESSAGES/django.mo b/django/contrib/admindocs/locale/af/LC_MESSAGES/django.mo index 43410e7ab7..30b84dab60 100644 Binary files a/django/contrib/admindocs/locale/af/LC_MESSAGES/django.mo and b/django/contrib/admindocs/locale/af/LC_MESSAGES/django.mo differ diff --git a/django/contrib/admindocs/locale/af/LC_MESSAGES/django.po b/django/contrib/admindocs/locale/af/LC_MESSAGES/django.po index 6074aa0551..4053b8b9fa 100644 --- a/django/contrib/admindocs/locale/af/LC_MESSAGES/django.po +++ b/django/contrib/admindocs/locale/af/LC_MESSAGES/django.po @@ -64,13 +64,16 @@ msgid "" msgstr "" msgid "Models" -msgstr "" +msgstr "Modelle" msgid "" "Models are descriptions of all the objects in the system and their " "associated fields. Each model has a list of fields which can be accessed as " "template variables" msgstr "" +"Modelle is beskrywings van al die objekte in die stelsel met hulle velde. " +"Elke model het 'n lys velde wat bereikbaar is as veranderlikes in 'n " +"sjabloon." msgid "Views" msgstr "" @@ -107,7 +110,7 @@ msgstr "" #, python-format msgid "Model: %(name)s" -msgstr "" +msgstr "Model: %(name)s" msgid "Fields" msgstr "Velde" @@ -202,10 +205,10 @@ msgid "Templates:" msgstr "" msgid "Back to View documentation" -msgstr "" +msgstr "Terug na Sien dokumentasie" msgid "View documentation" -msgstr "" +msgstr "Sien dokumentasie" msgid "Jump to namespace" msgstr "" diff --git a/django/contrib/admindocs/locale/mn/LC_MESSAGES/django.mo b/django/contrib/admindocs/locale/mn/LC_MESSAGES/django.mo index 7d0ec6a16a..4b9b343ae1 100644 Binary files a/django/contrib/admindocs/locale/mn/LC_MESSAGES/django.mo and b/django/contrib/admindocs/locale/mn/LC_MESSAGES/django.mo differ diff --git a/django/contrib/admindocs/locale/mn/LC_MESSAGES/django.po b/django/contrib/admindocs/locale/mn/LC_MESSAGES/django.po index e4e4b0caf8..54de5cfc68 100644 --- a/django/contrib/admindocs/locale/mn/LC_MESSAGES/django.po +++ b/django/contrib/admindocs/locale/mn/LC_MESSAGES/django.po @@ -4,17 +4,18 @@ # Bayarkhuu Bataa, 2014 # Claude Paroz , 2014 # Jannis Leidel , 2011 -# Zorig , 2013-2014,2016-2017 +# Turmunkh Batkhuyag, 2023 +# Zorig, 2013-2014,2016-2017 # Анхбаяр Анхаа , 2014-2015 # Баясгалан Цэвлээ , 2015 msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-01-19 16:49+0100\n" -"PO-Revision-Date: 2017-09-19 16:40+0000\n" -"Last-Translator: Zorig \n" -"Language-Team: Mongolian (http://www.transifex.com/django/django/language/" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2023-12-24 20:19+0000\n" +"Last-Translator: Turmunkh Batkhuyag, 2023\n" +"Language-Team: Mongolian (http://app.transifex.com/django/django/language/" "mn/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -23,19 +24,19 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgid "Administrative Documentation" -msgstr "Удирдлагын баримт" +msgstr "Удирдлагын баримт бичиг" msgid "Home" -msgstr "Админ эхлэл" +msgstr "Нүүр" msgid "Documentation" -msgstr "Баримтжуулалт" +msgstr "Баримт бичиг" msgid "Bookmarklets" -msgstr "Bookmarklet-ууд" +msgstr "Хавчуурга" msgid "Documentation bookmarklets" -msgstr "Мookmarklet-уудын баримтжуулалт" +msgstr "Баримт бичгийн хавчуурга" msgid "" "To install bookmarklets, drag the link to your bookmarks toolbar, or right-" @@ -102,11 +103,9 @@ msgstr "docutils ийг суулгана уу" #, python-format msgid "" -"The admin documentation system requires Python's docutils library." +"The admin documentation system requires Python’s docutils library." msgstr "" -"Админ хэсгийн баримтжуулалтын ажиллуулхад Python ийн docutils санг суулгах шаардлагатай." #, python-format msgid "" @@ -157,13 +156,13 @@ msgid "Template: %(name)s" msgstr "Загвар: %(name)s" #, python-format -msgid "Template: \"%(name)s\"" -msgstr "Загвар: \"%(name)s\"" +msgid "Template: %(name)s" +msgstr "" #. Translators: Search is not a verb here, it qualifies path (a search path) #, python-format -msgid "Search path for template \"%(name)s\":" -msgstr "\"%(name)s\" тэмплэйтын зам хайх" +msgid "Search path for template %(name)s:" +msgstr "" msgid "(does not exist)" msgstr "(Оршдоггүй)" diff --git a/django/contrib/admindocs/views.py b/django/contrib/admindocs/views.py index 4f970e89b3..5c18d676f2 100644 --- a/django/contrib/admindocs/views.py +++ b/django/contrib/admindocs/views.py @@ -404,8 +404,13 @@ class TemplateDetailView(BaseAdminDocsView): # Non-trivial TEMPLATES settings aren't supported (#24125). pass else: - # This doesn't account for template loaders (#24128). - for index, directory in enumerate(default_engine.dirs): + directories = list(default_engine.dirs) + for loader in default_engine.template_loaders: + if hasattr(loader, "get_dirs"): + for dir_ in loader.get_dirs(): + if dir_ not in directories: + directories.append(dir_) + for index, directory in enumerate(directories): template_file = Path(safe_join(directory, template)) if template_file.exists(): template_contents = template_file.read_text() diff --git a/django/contrib/auth/base_user.py b/django/contrib/auth/base_user.py index ccfe19fcc1..0c9538d69d 100644 --- a/django/contrib/auth/base_user.py +++ b/django/contrib/auth/base_user.py @@ -2,6 +2,7 @@ This module allows importing AbstractBaseUser even when django.contrib.auth is not in INSTALLED_APPS. """ + import unicodedata from django.conf import settings diff --git a/django/contrib/auth/locale/ckb/LC_MESSAGES/django.mo b/django/contrib/auth/locale/ckb/LC_MESSAGES/django.mo index 588aaa840f..9814f3295a 100644 Binary files a/django/contrib/auth/locale/ckb/LC_MESSAGES/django.mo and b/django/contrib/auth/locale/ckb/LC_MESSAGES/django.mo differ diff --git a/django/contrib/auth/locale/ckb/LC_MESSAGES/django.po b/django/contrib/auth/locale/ckb/LC_MESSAGES/django.po index 1fc0bb3453..30e02c1819 100644 --- a/django/contrib/auth/locale/ckb/LC_MESSAGES/django.po +++ b/django/contrib/auth/locale/ckb/LC_MESSAGES/django.po @@ -1,15 +1,15 @@ # This file is distributed under the same license as the Django package. # # Translators: -# Swara , 2022 +# Swara , 2022,2024 msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-03-17 03:19-0500\n" -"PO-Revision-Date: 2023-04-25 08:09+0000\n" -"Last-Translator: Swara , 2022\n" -"Language-Team: Central Kurdish (http://www.transifex.com/django/django/" +"PO-Revision-Date: 2024-01-25 08:09+0000\n" +"Last-Translator: Swara , 2022,2024\n" +"Language-Team: Central Kurdish (http://app.transifex.com/django/django/" "language/ckb/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -271,6 +271,8 @@ msgid "" "Enter a valid username. This value may contain only unaccented lowercase a-z " "and uppercase A-Z letters, numbers, and @/./+/-/_ characters." msgstr "" +"ناوی بەکارهێنەرێکی دروست بنوسە. ئەم بەهایە لەوانەیە تەنها پیتی بچووکی بێ " +"زاراوەی تێدابێت a-z و پیتی گەورە A-Z، ژمارەکان، و هێماکانی @/./+/-/_." msgid "" "Enter a valid username. This value may contain only letters, numbers, and " diff --git a/django/contrib/auth/locale/mr/LC_MESSAGES/django.mo b/django/contrib/auth/locale/mr/LC_MESSAGES/django.mo index f33dd236cb..84eef503a3 100644 Binary files a/django/contrib/auth/locale/mr/LC_MESSAGES/django.mo and b/django/contrib/auth/locale/mr/LC_MESSAGES/django.mo differ diff --git a/django/contrib/auth/locale/mr/LC_MESSAGES/django.po b/django/contrib/auth/locale/mr/LC_MESSAGES/django.po index 16b3e278b4..fa7b7f7b64 100644 --- a/django/contrib/auth/locale/mr/LC_MESSAGES/django.po +++ b/django/contrib/auth/locale/mr/LC_MESSAGES/django.po @@ -1,14 +1,15 @@ # This file is distributed under the same license as the Django package. # # Translators: +# Omkar Parab, 2024 msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-03-18 09:16+0100\n" -"PO-Revision-Date: 2015-03-18 10:30+0000\n" -"Last-Translator: Jannis Leidel \n" -"Language-Team: Marathi (http://www.transifex.com/projects/p/django/language/" +"POT-Creation-Date: 2023-03-17 03:19-0500\n" +"PO-Revision-Date: 2024-01-25 08:09+0000\n" +"Last-Translator: Omkar Parab, 2024\n" +"Language-Team: Marathi (http://app.transifex.com/django/django/language/" "mr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,84 +18,93 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgid "Personal info" -msgstr "" +msgstr "वैयक्तिक माहिती" msgid "Permissions" -msgstr "" +msgstr "परवानगी" msgid "Important dates" -msgstr "" +msgstr "महत्वाच्या दिनांक" #, python-format msgid "%(name)s object with primary key %(key)r does not exist." msgstr "" msgid "Password changed successfully." -msgstr "" +msgstr "गुप्तशब्द यशस्वीरीत्या बदलला." #, python-format msgid "Change password: %s" -msgstr "" +msgstr "गुप्तशब्द बदला: %s" msgid "Authentication and Authorization" -msgstr "" +msgstr "प्रमाणीकरण आणि अधिकृतता" + +msgid "password" +msgstr "गुप्तशब्द" + +msgid "last login" +msgstr "शेवटचा प्रवेश" msgid "No password set." -msgstr "" +msgstr "कोणताही गुप्तशब्द सेट केलेला नाही." msgid "Invalid password format or unknown hashing algorithm." -msgstr "" +msgstr "अयोग्य गुप्तशब्द स्वरूप किंवा अज्ञात हॅशिंग अलगोरीथम." -msgid "The two password fields didn't match." -msgstr "" +msgid "The two password fields didn’t match." +msgstr "दोन गुप्तशब्द क्षेत्र जुळत नाहीत." msgid "Password" -msgstr "" +msgstr "गुप्तशब्द" msgid "Password confirmation" -msgstr "" +msgstr "गुप्तशब्द निच्छितीकरण" -msgid "Enter the same password as above, for verification." -msgstr "" +msgid "Enter the same password as before, for verification." +msgstr "पडताळणीसाठी आधीच्या गुप्तशब्दासारखा समान गुप्तशब्द नमूद करा." msgid "" -"Raw passwords are not stored, so there is no way to see this user's " -"password, but you can change the password using this " -"form." +"Raw passwords are not stored, so there is no way to see this user’s " +"password, but you can change the password using this form." msgstr "" +"कच्चे गुप्तशब्द साठवले जात नाहीत, त्यामुळे या वापरकर्त्याचा गुप्तशब्द पाहण्याचा कोणताही " +"मार्ग नाही, परंतु तुम्ही हा फॉर्म वापरून गुप्तशब्द बदलू शकता. " #, python-format msgid "" "Please enter a correct %(username)s and password. Note that both fields may " "be case-sensitive." msgstr "" +"कृपया करून एक योग्य %(username)s आणि गुप्तशब्द नमूद करा. लक्षात घ्या की दोन्ही रखाणे " +"संवेदनशील असू शकतात." msgid "This account is inactive." -msgstr "" +msgstr "हे खाते निष्क्रिय आहे." msgid "Email" -msgstr "" +msgstr "विपत्र" msgid "New password" -msgstr "" +msgstr "नवीन गुप्तशब्द" msgid "New password confirmation" -msgstr "" +msgstr "नवीन गुप्तशब्द निच्छितीकरण" msgid "Your old password was entered incorrectly. Please enter it again." -msgstr "" +msgstr "तुम्ही जुना गुप्तशब्द चुकीचा टाकला होता. कृपया तो पुन्हा नमूद करा." msgid "Old password" -msgstr "" +msgstr "जुना गुप्तशब्द" msgid "Password (again)" -msgstr "" +msgstr "गुप्तशब्द (पुन्हा)" msgid "algorithm" -msgstr "" +msgstr "अल्गोरिदम" msgid "iterations" -msgstr "" +msgstr "पुनरावृत्ती" msgid "salt" msgstr "" @@ -102,125 +112,188 @@ msgstr "" msgid "hash" msgstr "" +msgid "variety" +msgstr "निरनिराळ्या" + +msgid "version" +msgstr "आवृत्ती" + +msgid "memory cost" +msgstr "स्मरणशक्ती खर्च" + +msgid "time cost" +msgstr "वेळ खर्च" + +msgid "parallelism" +msgstr "समांतरता" + msgid "work factor" -msgstr "" +msgstr "कामाचा घटक" msgid "checksum" -msgstr "" +msgstr "चेकसम" + +msgid "block size" +msgstr "ब्लॉक आकार" msgid "name" -msgstr "" +msgstr "नाव" + +msgid "content type" +msgstr "सामुग्री प्रकार" msgid "codename" -msgstr "" +msgstr "सांकेतिक नाव" msgid "permission" -msgstr "" +msgstr "परवानगी" msgid "permissions" -msgstr "" +msgstr "परवानग्या" msgid "group" -msgstr "" +msgstr "समूह" msgid "groups" -msgstr "" - -msgid "password" -msgstr "" - -msgid "last login" -msgstr "" +msgstr "समूहं" msgid "superuser status" -msgstr "" +msgstr "सुपरयूजर स्थिती" msgid "" "Designates that this user has all permissions without explicitly assigning " "them." -msgstr "" +msgstr "या वापरकर्त्याकडे स्पष्टपणे नियुक्त केल्याशिवाय सर्व परवानग्या आहेत असे नियुक्त करते." msgid "" "The groups this user belongs to. A user will get all permissions granted to " "each of their groups." msgstr "" +"हा वापरकर्ता त्या गटांचा आहे. वापरकर्त्याला त्यांच्या प्रत्येक गटासाठी सर्व परवानग्या " +"मिळतील." msgid "user permissions" -msgstr "" +msgstr "वापरकर्ता परवानग्या" msgid "Specific permissions for this user." -msgstr "" +msgstr "या वापरकर्त्यासाठी विशिष्ट परवानग्या." msgid "username" -msgstr "" +msgstr "वापरकर्तानाव" -msgid "Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only." -msgstr "" - -msgid "" -"Enter a valid username. This value may contain only letters, numbers and @/./" -"+/-/_ characters." -msgstr "" +msgid "Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only." +msgstr "आवश्यक. 150 किंवा कमी वर्ण. अक्षरे, अंक आणि @/./+/-/_ फक्त. " msgid "A user with that username already exists." -msgstr "" +msgstr "त्या वापरकर्ता नावासह वापरकर्ता आधीपासूनच अस्तित्वात आहे." msgid "first name" -msgstr "" +msgstr "पहिले नाव" msgid "last name" -msgstr "" +msgstr "आडनाव" msgid "email address" -msgstr "" +msgstr "विपत्र पत्ता" msgid "staff status" -msgstr "" +msgstr "कर्मचारी स्थिती" msgid "Designates whether the user can log into this admin site." -msgstr "" +msgstr "वापरकर्ता या प्रशासक स्थळावर प्रवेश करू शकतो की नाही हे नियुक्त करते." msgid "active" -msgstr "" +msgstr "सक्रिय" msgid "" "Designates whether this user should be treated as active. Unselect this " "instead of deleting accounts." msgstr "" +"या वापरकर्त्याला सक्रिय मानले जावे की नाही हे नियुक्त करते. खाती हटवण्याऐवजी ही निवड " +"कमी करा. " msgid "date joined" -msgstr "" +msgstr "सहभाग दिनांक" msgid "user" -msgstr "" +msgstr "वापरकर्ता" msgid "users" -msgstr "" +msgstr "वापरकर्ते" + +#, python-format +msgid "" +"This password is too short. It must contain at least %(min_length)d " +"character." +msgid_plural "" +"This password is too short. It must contain at least %(min_length)d " +"characters." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Your password must contain at least %(min_length)d character." +msgid_plural "Your password must contain at least %(min_length)d characters." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "The password is too similar to the %(verbose_name)s." +msgstr "गुप्तशब्द %(verbose_name)s सारखा अत्यंत सामान्य आहे." + +msgid "Your password can’t be too similar to your other personal information." +msgstr "तुमचा गुप्तशब्द तुमच्या इतर वैयक्तिक माहितीशी सारखा असू शकत नाही." + +msgid "This password is too common." +msgstr "हा गुप्तशब्द खूपच सामान्य आहे." + +msgid "Your password can’t be a commonly used password." +msgstr "तुमचा गुप्तशब्द हा सामान्यतः वापरला जाणारा गुप्तशब्द असू शकत नाही." + +msgid "This password is entirely numeric." +msgstr "हा गुप्तशब्द पूर्णपणे संख्यात्मक आहे." + +msgid "Your password can’t be entirely numeric." +msgstr "तुमचा गुप्तशब्द पूर्णपणे संख्यात्मक असू शकत नाही." #, python-format msgid "Password reset on %(site_name)s" +msgstr "%(site_name)s वरील गुप्तशब्द पुनरस्थापना" + +msgid "" +"Enter a valid username. This value may contain only unaccented lowercase a-z " +"and uppercase A-Z letters, numbers, and @/./+/-/_ characters." msgstr "" +"वैध वापरकर्तानाव प्रविष्ट करा. या मूल्यामध्ये केवळ असुरक्षित लोअरकेस a-z आणि अपरकेस A-Z " +"अक्षरे, संख्या आणि @/./+/-/_ वर्ण असू शकतात." + +msgid "" +"Enter a valid username. This value may contain only letters, numbers, and " +"@/./+/-/_ characters." +msgstr "" +"वैध वापरकर्तानाव प्रविष्ट करा. या मूल्यामध्ये फक्त अक्षरे, संख्या आणि @/./+/-/_ वर्ण असू " +"शकतात." msgid "Logged out" -msgstr "" +msgstr "बाहेर पडलात" msgid "Password reset" -msgstr "" +msgstr "गुप्तशब्द पुनरस्थापना" msgid "Password reset sent" -msgstr "" +msgstr "गुप्तशब्द पुनरस्थापना पाठविले गेले आहे" msgid "Enter new password" -msgstr "" +msgstr "नवीन गुप्तशब्द लिहा" msgid "Password reset unsuccessful" -msgstr "" +msgstr "गुप्तशब्द पुनरस्थापना अयशस्वी" msgid "Password reset complete" -msgstr "" +msgstr "गुप्तशब्द पुनरस्थापना पूर्ण" msgid "Password change" -msgstr "" +msgstr "गुप्तशब्द बदलणे" msgid "Password change successful" -msgstr "" +msgstr "गुप्तशब्द बदलणे यशस्वी झाले" diff --git a/django/contrib/auth/management/__init__.py b/django/contrib/auth/management/__init__.py index ad31a6e68f..b29a980cb2 100644 --- a/django/contrib/auth/management/__init__.py +++ b/django/contrib/auth/management/__init__.py @@ -1,6 +1,7 @@ """ Creates permissions for all installed apps that need permissions. """ + import getpass import unicodedata diff --git a/django/contrib/auth/management/commands/createsuperuser.py b/django/contrib/auth/management/commands/createsuperuser.py index 6d650cca67..75ef68ff68 100644 --- a/django/contrib/auth/management/commands/createsuperuser.py +++ b/django/contrib/auth/management/commands/createsuperuser.py @@ -1,6 +1,7 @@ """ Management utility to create superusers. """ + import getpass import os import sys @@ -271,15 +272,19 @@ class Command(BaseCommand): return "%s%s%s: " % ( capfirst(field.verbose_name), " (leave blank to use '%s')" % default if default else "", - " (%s.%s)" - % ( - field.remote_field.model._meta.object_name, - field.m2m_target_field_name() - if field.many_to_many - else field.remote_field.field_name, - ) - if field.remote_field - else "", + ( + " (%s.%s)" + % ( + field.remote_field.model._meta.object_name, + ( + field.m2m_target_field_name() + if field.many_to_many + else field.remote_field.field_name + ), + ) + if field.remote_field + else "" + ), ) @cached_property diff --git a/django/contrib/contenttypes/fields.py b/django/contrib/contenttypes/fields.py index 1b6abb9818..ce731bf2dd 100644 --- a/django/contrib/contenttypes/fields.py +++ b/django/contrib/contenttypes/fields.py @@ -280,7 +280,9 @@ class GenericForeignKey(FieldCacheMixin): if ct_id is not None: ct = self.get_content_type(id=ct_id, using=instance._state.db) try: - rel_obj = ct.get_object_for_this_type(pk=pk_val) + rel_obj = ct.get_object_for_this_type( + using=instance._state.db, pk=pk_val + ) except ObjectDoesNotExist: pass self.set_cached_value(instance, rel_obj) diff --git a/django/contrib/contenttypes/locale/mr/LC_MESSAGES/django.mo b/django/contrib/contenttypes/locale/mr/LC_MESSAGES/django.mo index 183b3d14e9..4f5b10dc65 100644 Binary files a/django/contrib/contenttypes/locale/mr/LC_MESSAGES/django.mo and b/django/contrib/contenttypes/locale/mr/LC_MESSAGES/django.mo differ diff --git a/django/contrib/contenttypes/locale/mr/LC_MESSAGES/django.po b/django/contrib/contenttypes/locale/mr/LC_MESSAGES/django.po index 822bd2e63c..880ce36a51 100644 --- a/django/contrib/contenttypes/locale/mr/LC_MESSAGES/django.po +++ b/django/contrib/contenttypes/locale/mr/LC_MESSAGES/django.po @@ -1,14 +1,15 @@ # This file is distributed under the same license as the Django package. # # Translators: +# Omkar Parab, 2024 msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-01-17 11:07+0100\n" -"PO-Revision-Date: 2014-10-05 20:12+0000\n" -"Last-Translator: Jannis Leidel \n" -"Language-Team: Marathi (http://www.transifex.com/projects/p/django/language/" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2024-01-24 19:22+0000\n" +"Last-Translator: Omkar Parab, 2024\n" +"Language-Team: Marathi (http://app.transifex.com/django/django/language/" "mr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,25 +18,25 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgid "Content Types" -msgstr "" +msgstr "सामुग्रीचे प्रकार" msgid "python model class name" -msgstr "" +msgstr "पायथन मॉडेल वर्गाचे नाव" msgid "content type" -msgstr "" +msgstr "सामुग्री प्रकार" msgid "content types" -msgstr "" +msgstr "सामुग्रीचे प्रकार" #, python-format msgid "Content type %(ct_id)s object has no associated model" +msgstr "%(ct_id)s या सामुग्री प्रकाराच्या ऑब्जेक्टला संबंधित मॉडेल नाही." + +#, python-format +msgid "Content type %(ct_id)s object %(obj_id)s doesn’t exist" msgstr "" #, python-format -msgid "Content type %(ct_id)s object %(obj_id)s doesn't exist" -msgstr "" - -#, python-format -msgid "%(ct_name)s objects don't have a get_absolute_url() method" +msgid "%(ct_name)s objects don’t have a get_absolute_url() method" msgstr "" diff --git a/django/contrib/contenttypes/models.py b/django/contrib/contenttypes/models.py index 0d98ed3a4d..4f16e6eb69 100644 --- a/django/contrib/contenttypes/models.py +++ b/django/contrib/contenttypes/models.py @@ -174,20 +174,20 @@ class ContentType(models.Model): except LookupError: return None - def get_object_for_this_type(self, **kwargs): + def get_object_for_this_type(self, using=None, **kwargs): """ Return an object of this type for the keyword arguments given. Basically, this is a proxy around this object_type's get_object() model method. The ObjectNotExist exception, if thrown, will not be caught, so code that calls this method should catch it. """ - return self.model_class()._base_manager.using(self._state.db).get(**kwargs) + return self.model_class()._base_manager.using(using).get(**kwargs) def get_all_objects_for_this_type(self, **kwargs): """ Return all objects of this type for the keyword arguments given. """ - return self.model_class()._base_manager.using(self._state.db).filter(**kwargs) + return self.model_class()._base_manager.filter(**kwargs) def natural_key(self): return (self.app_label, self.model) diff --git a/django/contrib/flatpages/locale/af/LC_MESSAGES/django.mo b/django/contrib/flatpages/locale/af/LC_MESSAGES/django.mo index aef2cabae3..d9b1b120e3 100644 Binary files a/django/contrib/flatpages/locale/af/LC_MESSAGES/django.mo and b/django/contrib/flatpages/locale/af/LC_MESSAGES/django.mo differ diff --git a/django/contrib/flatpages/locale/af/LC_MESSAGES/django.po b/django/contrib/flatpages/locale/af/LC_MESSAGES/django.po index dbad306408..dc81ad496c 100644 --- a/django/contrib/flatpages/locale/af/LC_MESSAGES/django.po +++ b/django/contrib/flatpages/locale/af/LC_MESSAGES/django.po @@ -29,7 +29,7 @@ msgstr "URL" msgid "" "Example: “/about/contact/”. Make sure to have leading and trailing slashes." msgstr "" -"Voorbeeld “/about/kontak/”. Maak seker dat dit begin en eindig met ’n " +"Voorbeeld: “/about/kontak/”. Maak seker dat dit begin en eindig met ’n " "skuinsstreep." msgid "" @@ -41,7 +41,7 @@ msgstr "" msgid "Example: “/about/contact”. Make sure to have a leading slash." msgstr "" -"Voorbeeld “/about/kontak/”. Maak seker dat dit begin met ’n skuinsstreep." +"Voorbeeld: “/about/kontak/”. Maak seker dat dit begin met ’n skuinsstreep." msgid "URL is missing a leading slash." msgstr "’n Skuinsstreep ontbreek vooraan URL." @@ -69,7 +69,7 @@ msgid "" "Example: “flatpages/contact_page.html”. If this isn’t provided, the system " "will use “flatpages/default.html”." msgstr "" -"Voorbeeld “/flatpages/kontakbladsy.html”. As dit weggelaat word, sal die " +"Voorbeeld: “/flatpages/kontakbladsy.html”. As dit weggelaat word, sal die " "stelsel “flatpages/default.html” gebruik." msgid "registration required" diff --git a/django/contrib/flatpages/locale/mr/LC_MESSAGES/django.mo b/django/contrib/flatpages/locale/mr/LC_MESSAGES/django.mo index 7d4393d635..6197eac0e7 100644 Binary files a/django/contrib/flatpages/locale/mr/LC_MESSAGES/django.mo and b/django/contrib/flatpages/locale/mr/LC_MESSAGES/django.mo differ diff --git a/django/contrib/flatpages/locale/mr/LC_MESSAGES/django.po b/django/contrib/flatpages/locale/mr/LC_MESSAGES/django.po index f2bed7f33a..1d88dc9acb 100644 --- a/django/contrib/flatpages/locale/mr/LC_MESSAGES/django.po +++ b/django/contrib/flatpages/locale/mr/LC_MESSAGES/django.po @@ -1,14 +1,15 @@ # This file is distributed under the same license as the Django package. # # Translators: +# Omkar Parab, 2024 msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-03-18 09:16+0100\n" -"PO-Revision-Date: 2015-03-18 08:34+0000\n" -"Last-Translator: Jannis Leidel \n" -"Language-Team: Marathi (http://www.transifex.com/projects/p/django/language/" +"POT-Creation-Date: 2019-09-08 17:27+0200\n" +"PO-Revision-Date: 2024-01-24 19:03+0000\n" +"Last-Translator: Omkar Parab, 2024\n" +"Language-Team: Marathi (http://app.transifex.com/django/django/language/" "mr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,56 +18,63 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgid "Advanced options" -msgstr "" +msgstr "प्रगत पर्याय" msgid "Flat Pages" msgstr "" msgid "URL" -msgstr "" +msgstr "यूआरएल" msgid "" -"Example: '/about/contact/'. Make sure to have leading and trailing slashes." -msgstr "" +"Example: “/about/contact/”. Make sure to have leading and trailing slashes." +msgstr "अग्रगण्य आणि अनुगामी स्लॅश असल्याची खात्री करा. उदाहरण: “/about/contact/”." msgid "" "This value must contain only letters, numbers, dots, underscores, dashes, " "slashes or tildes." msgstr "" +"या मूल्यामध्ये फक्त अक्षरे, संख्या, ठिपके, अंडरस्कोअर, डॅश, स्लॅश किंवा टिल्ड असणे आवश्यक आहे." + +msgid "Example: “/about/contact”. Make sure to have a leading slash." +msgstr "अग्रगण्य स्लॅश असल्याची खात्री करा. उदाहरण: “/about/contact”. " msgid "URL is missing a leading slash." -msgstr "" +msgstr "URL मधे अग्रगण्य स्लॅश गहाळ आहे." msgid "URL is missing a trailing slash." -msgstr "" +msgstr "URL मधे अनुगामी स्लॅश गहाळ आहे. " #, python-format msgid "Flatpage with url %(url)s already exists for site %(site)s" msgstr "" msgid "title" -msgstr "" +msgstr "शीर्षक" msgid "content" -msgstr "" +msgstr "सामुग्री" msgid "enable comments" -msgstr "" +msgstr "प्रतिक्रिया सक्षम करा" msgid "template name" -msgstr "" +msgstr "टेम्पलेटचे नाव" msgid "" -"Example: 'flatpages/contact_page.html'. If this isn't provided, the system " -"will use 'flatpages/default.html'." +"Example: “flatpages/contact_page.html”. If this isn’t provided, the system " +"will use “flatpages/default.html”." msgstr "" msgid "registration required" -msgstr "" +msgstr "नोंदणी आवश्यक" msgid "If this is checked, only logged-in users will be able to view the page." msgstr "" +msgid "sites" +msgstr "स्थळे" + msgid "flat page" msgstr "" diff --git a/django/contrib/gis/db/backends/oracle/models.py b/django/contrib/gis/db/backends/oracle/models.py index f06f73148e..af749c3435 100644 --- a/django/contrib/gis/db/backends/oracle/models.py +++ b/django/contrib/gis/db/backends/oracle/models.py @@ -7,6 +7,7 @@ For example, the `USER_SDO_GEOM_METADATA` is used for the GeometryColumns model and the `SDO_COORD_REF_SYS` is used for the SpatialRefSys model. """ + from django.contrib.gis.db import models from django.contrib.gis.db.backends.base.models import SpatialRefSysMixin diff --git a/django/contrib/gis/db/backends/oracle/operations.py b/django/contrib/gis/db/backends/oracle/operations.py index ed86985cf8..eb86dc39de 100644 --- a/django/contrib/gis/db/backends/oracle/operations.py +++ b/django/contrib/gis/db/backends/oracle/operations.py @@ -7,6 +7,7 @@ support for an internal JVM, and Java libraries are required to use the WKT constructors. """ + import re from django.contrib.gis.db import models diff --git a/django/contrib/gis/db/backends/postgis/adapter.py b/django/contrib/gis/db/backends/postgis/adapter.py index c95f903253..c9715e1756 100644 --- a/django/contrib/gis/db/backends/postgis/adapter.py +++ b/django/contrib/gis/db/backends/postgis/adapter.py @@ -1,6 +1,7 @@ """ This object provides quoting for GEOS geometries into PostgreSQL/PostGIS. """ + from django.contrib.gis.db.backends.postgis.pgraster import to_pgraster from django.contrib.gis.geos import GEOSGeometry from django.db.backends.postgresql.psycopg_any import sql diff --git a/django/contrib/gis/db/backends/postgis/const.py b/django/contrib/gis/db/backends/postgis/const.py index 2f4393d25e..8bc16a1abb 100644 --- a/django/contrib/gis/db/backends/postgis/const.py +++ b/django/contrib/gis/db/backends/postgis/const.py @@ -1,6 +1,7 @@ """ PostGIS to GDAL conversion constant definitions """ + # Lookup to convert pixel type values from GDAL to PostGIS GDAL_TO_POSTGIS = [None, 4, 6, 5, 8, 7, 10, 11, None, None, None, None] diff --git a/django/contrib/gis/db/backends/postgis/models.py b/django/contrib/gis/db/backends/postgis/models.py index b7b568274a..e35ef75ce9 100644 --- a/django/contrib/gis/db/backends/postgis/models.py +++ b/django/contrib/gis/db/backends/postgis/models.py @@ -1,6 +1,7 @@ """ The GeometryColumns and SpatialRefSys models for the PostGIS backend. """ + from django.contrib.gis.db.backends.base.models import SpatialRefSysMixin from django.db import models diff --git a/django/contrib/gis/db/backends/spatialite/models.py b/django/contrib/gis/db/backends/spatialite/models.py index 7cc98ae126..0f5f7b55ef 100644 --- a/django/contrib/gis/db/backends/spatialite/models.py +++ b/django/contrib/gis/db/backends/spatialite/models.py @@ -1,6 +1,7 @@ """ The GeometryColumns and SpatialRefSys models for the SpatiaLite backend. """ + from django.contrib.gis.db.backends.base.models import SpatialRefSysMixin from django.db import models diff --git a/django/contrib/gis/db/backends/spatialite/operations.py b/django/contrib/gis/db/backends/spatialite/operations.py index 8a3d84b5de..3d10a53641 100644 --- a/django/contrib/gis/db/backends/spatialite/operations.py +++ b/django/contrib/gis/db/backends/spatialite/operations.py @@ -2,6 +2,7 @@ SQL functions reference lists: https://www.gaia-gis.it/gaia-sins/spatialite-sql-4.3.0.html """ + from django.contrib.gis.db import models from django.contrib.gis.db.backends.base.operations import BaseSpatialOperations from django.contrib.gis.db.backends.spatialite.adapter import SpatiaLiteAdapter diff --git a/django/contrib/gis/db/models/functions.py b/django/contrib/gis/db/models/functions.py index 419b64c5e8..acbaa5ffc0 100644 --- a/django/contrib/gis/db/models/functions.py +++ b/django/contrib/gis/db/models/functions.py @@ -127,9 +127,11 @@ class SQLiteDecimalToFloatMixin: copy = self.copy() copy.set_source_expressions( [ - Value(float(expr.value)) - if hasattr(expr, "value") and isinstance(expr.value, Decimal) - else expr + ( + Value(float(expr.value)) + if hasattr(expr, "value") and isinstance(expr.value, Decimal) + else expr + ) for expr in copy.get_source_expressions() ] ) @@ -349,9 +351,9 @@ class Distance(DistanceResultMixin, OracleToleranceMixin, GeoFunc): def as_sqlite(self, compiler, connection, **extra_context): if self.geo_field.geodetic(connection): # SpatiaLite returns NULL instead of zero on geodetic coordinates - extra_context[ - "template" - ] = "COALESCE(%(function)s(%(expressions)s, %(spheroid)s), 0)" + extra_context["template"] = ( + "COALESCE(%(function)s(%(expressions)s, %(spheroid)s), 0)" + ) extra_context["spheroid"] = int(bool(self.spheroid)) return super().as_sql(compiler, connection, **extra_context) diff --git a/django/contrib/gis/db/models/proxy.py b/django/contrib/gis/db/models/proxy.py index 4db365dc16..b415e147fc 100644 --- a/django/contrib/gis/db/models/proxy.py +++ b/django/contrib/gis/db/models/proxy.py @@ -5,6 +5,7 @@ objects corresponding to geographic model fields. Thanks to Robert Coup for providing this functionality (see #4322). """ + from django.db.models.query_utils import DeferredAttribute diff --git a/django/contrib/gis/db/models/sql/conversion.py b/django/contrib/gis/db/models/sql/conversion.py index be712319fb..7802b2dd1e 100644 --- a/django/contrib/gis/db/models/sql/conversion.py +++ b/django/contrib/gis/db/models/sql/conversion.py @@ -2,6 +2,7 @@ This module holds simple classes to convert geospatial values from the database. """ + from decimal import Decimal from django.contrib.gis.measure import Area, Distance diff --git a/django/contrib/gis/gdal/__init__.py b/django/contrib/gis/gdal/__init__.py index 9ed6e31156..e63808d39d 100644 --- a/django/contrib/gis/gdal/__init__.py +++ b/django/contrib/gis/gdal/__init__.py @@ -25,6 +25,7 @@ by setting `GDAL_LIBRARY_PATH` in your settings with the path to the GDAL C library on your system. """ + from django.contrib.gis.gdal.datasource import DataSource from django.contrib.gis.gdal.driver import Driver from django.contrib.gis.gdal.envelope import Envelope diff --git a/django/contrib/gis/gdal/datasource.py b/django/contrib/gis/gdal/datasource.py index 8900777117..2ce859ad13 100644 --- a/django/contrib/gis/gdal/datasource.py +++ b/django/contrib/gis/gdal/datasource.py @@ -33,6 +33,7 @@ # OFTReal returns floats, all else returns string. val = field.value """ + from pathlib import Path from django.contrib.gis.gdal.base import GDALBase diff --git a/django/contrib/gis/gdal/envelope.py b/django/contrib/gis/gdal/envelope.py index 4c2c1e4a1a..05832bd7cc 100644 --- a/django/contrib/gis/gdal/envelope.py +++ b/django/contrib/gis/gdal/envelope.py @@ -10,6 +10,7 @@ | | Lower left (min_x, min_y) o----------+ """ + from ctypes import Structure, c_double from django.contrib.gis.gdal.error import GDALException diff --git a/django/contrib/gis/gdal/geometries.py b/django/contrib/gis/gdal/geometries.py index f4ba5816a2..6ee98c412d 100644 --- a/django/contrib/gis/gdal/geometries.py +++ b/django/contrib/gis/gdal/geometries.py @@ -38,6 +38,7 @@ >>> print(gt1 == 3, gt1 == 'Polygon') # Equivalence works w/non-OGRGeomType objects True True """ + import sys import warnings from binascii import b2a_hex @@ -564,6 +565,14 @@ class OGRGeometry(GDALBase): """ return self._geomgen(capi.geom_union, other) + @property + def centroid(self): + """Return the centroid (a Point) of this Polygon.""" + # The centroid is a Point, create a geometry for this. + p = OGRGeometry(OGRGeomType("Point")) + capi.get_centroid(self.ptr, p.ptr) + return p + # The subclasses for OGR Geometry. class Point(OGRGeometry): @@ -616,10 +625,14 @@ class LineString(OGRGeometry): def __getitem__(self, index): "Return the Point at the given index." if 0 <= index < self.point_count: - x, y, z = c_double(), c_double(), c_double() - capi.get_point(self.ptr, index, byref(x), byref(y), byref(z)) + x, y, z, m = c_double(), c_double(), c_double(), c_double() + capi.get_point(self.ptr, index, byref(x), byref(y), byref(z), byref(m)) + if self.is_3d and self.is_measured: + return x.value, y.value, z.value, m.value if self.is_3d: return x.value, y.value, z.value + if self.is_measured: + return x.value, y.value, m.value dim = self.coord_dim if dim == 1: return (x.value,) @@ -664,6 +677,12 @@ class LineString(OGRGeometry): if self.is_3d: return self._listarr(capi.getz) + @property + def m(self): + """Return the M coordinates in a list.""" + if self.is_measured: + return self._listarr(capi.getm) + # LinearRings are used in Polygons. class LinearRing(LineString): @@ -707,14 +726,6 @@ class Polygon(OGRGeometry): # Summing up the number of points in each ring of the Polygon. return sum(self[i].point_count for i in range(self.geom_count)) - @property - def centroid(self): - "Return the centroid (a Point) of this Polygon." - # The centroid is a Point, create a geometry for this. - p = OGRGeometry(OGRGeomType("Point")) - capi.get_centroid(self.ptr, p.ptr) - return p - # Geometry Collection base class. class GeometryCollection(OGRGeometry): @@ -788,10 +799,14 @@ GEO_CLASSES = { 7: GeometryCollection, 101: LinearRing, 2001: Point, # POINT M + 2002: LineString, # LINESTRING M + 2003: Polygon, # POLYGON M 3001: Point, # POINT ZM + 3002: LineString, # LINESTRING ZM + 3003: Polygon, # POLYGON ZM 1 + OGRGeomType.wkb25bit: Point, # POINT Z - 2 + OGRGeomType.wkb25bit: LineString, - 3 + OGRGeomType.wkb25bit: Polygon, + 2 + OGRGeomType.wkb25bit: LineString, # LINESTRING Z + 3 + OGRGeomType.wkb25bit: Polygon, # POLYGON Z 4 + OGRGeomType.wkb25bit: MultiPoint, 5 + OGRGeomType.wkb25bit: MultiLineString, 6 + OGRGeomType.wkb25bit: MultiPolygon, diff --git a/django/contrib/gis/gdal/prototypes/ds.py b/django/contrib/gis/gdal/prototypes/ds.py index e3ef2699e9..71148f1b55 100644 --- a/django/contrib/gis/gdal/prototypes/ds.py +++ b/django/contrib/gis/gdal/prototypes/ds.py @@ -3,6 +3,7 @@ related data structures. OGR_Dr_*, OGR_DS_*, OGR_L_*, OGR_F_*, OGR_Fld_* routines are relevant here. """ + from ctypes import POINTER, c_char_p, c_double, c_int, c_long, c_uint, c_void_p from django.contrib.gis.gdal.envelope import OGREnvelope diff --git a/django/contrib/gis/gdal/prototypes/errcheck.py b/django/contrib/gis/gdal/prototypes/errcheck.py index 52bb7cb083..d37e81cdf6 100644 --- a/django/contrib/gis/gdal/prototypes/errcheck.py +++ b/django/contrib/gis/gdal/prototypes/errcheck.py @@ -2,6 +2,7 @@ This module houses the error-checking routines used by the GDAL ctypes prototypes. """ + from ctypes import c_void_p, string_at from django.contrib.gis.gdal.error import GDALException, SRSException, check_err diff --git a/django/contrib/gis/gdal/prototypes/generation.py b/django/contrib/gis/gdal/prototypes/generation.py index 230e56f665..4d34a96e70 100644 --- a/django/contrib/gis/gdal/prototypes/generation.py +++ b/django/contrib/gis/gdal/prototypes/generation.py @@ -2,6 +2,7 @@ This module contains functions that generate ctypes prototypes for the GDAL routines. """ + from ctypes import POINTER, c_bool, c_char_p, c_double, c_int, c_int64, c_void_p from functools import partial diff --git a/django/contrib/gis/gdal/prototypes/geom.py b/django/contrib/gis/gdal/prototypes/geom.py index 6dc6967ecf..25af48570b 100644 --- a/django/contrib/gis/gdal/prototypes/geom.py +++ b/django/contrib/gis/gdal/prototypes/geom.py @@ -137,8 +137,15 @@ get_geom_name = const_string_output( get_geom_type = int_output(lgdal.OGR_G_GetGeometryType, [c_void_p]) get_point_count = int_output(lgdal.OGR_G_GetPointCount, [c_void_p]) get_point = void_output( - lgdal.OGR_G_GetPoint, - [c_void_p, c_int, POINTER(c_double), POINTER(c_double), POINTER(c_double)], + lgdal.OGR_G_GetPointZM, + [ + c_void_p, + c_int, + POINTER(c_double), + POINTER(c_double), + POINTER(c_double), + POINTER(c_double), + ], errcheck=False, ) geom_close_rings = void_output(lgdal.OGR_G_CloseRings, [c_void_p], errcheck=False) diff --git a/django/contrib/gis/gdal/prototypes/raster.py b/django/contrib/gis/gdal/prototypes/raster.py index 17ee4a1926..d1dd9ec4e2 100644 --- a/django/contrib/gis/gdal/prototypes/raster.py +++ b/django/contrib/gis/gdal/prototypes/raster.py @@ -2,6 +2,7 @@ This module houses the ctypes function prototypes for GDAL DataSource (raster) related data structures. """ + from ctypes import POINTER, c_bool, c_char_p, c_double, c_int, c_void_p from functools import partial diff --git a/django/contrib/gis/gdal/raster/const.py b/django/contrib/gis/gdal/raster/const.py index dccc9cfab4..a1ab62f37a 100644 --- a/django/contrib/gis/gdal/raster/const.py +++ b/django/contrib/gis/gdal/raster/const.py @@ -1,6 +1,7 @@ """ GDAL - Constant definitions """ + from ctypes import ( c_double, c_float, diff --git a/django/contrib/gis/gdal/srs.py b/django/contrib/gis/gdal/srs.py index 9417c6684d..0a8d95c1fc 100644 --- a/django/contrib/gis/gdal/srs.py +++ b/django/contrib/gis/gdal/srs.py @@ -26,6 +26,7 @@ >>> print(srs.name) NAD83 / Texas South Central """ + from ctypes import byref, c_char_p, c_int from enum import IntEnum from types import NoneType diff --git a/django/contrib/gis/geos/__init__.py b/django/contrib/gis/geos/__init__.py index 27de1ca8e6..f50cd19856 100644 --- a/django/contrib/gis/geos/__init__.py +++ b/django/contrib/gis/geos/__init__.py @@ -2,6 +2,7 @@ The GeoDjango GEOS module. Please consult the GeoDjango documentation for more details: https://docs.djangoproject.com/en/dev/ref/contrib/gis/geos/ """ + from .collections import ( # NOQA GeometryCollection, MultiLineString, diff --git a/django/contrib/gis/geos/collections.py b/django/contrib/gis/geos/collections.py index abfec8af3d..35262a5622 100644 --- a/django/contrib/gis/geos/collections.py +++ b/django/contrib/gis/geos/collections.py @@ -2,6 +2,7 @@ This module houses the Geometry Collection objects: GeometryCollection, MultiPoint, MultiLineString, and MultiPolygon """ + from django.contrib.gis.geos import prototypes as capi from django.contrib.gis.geos.geometry import GEOSGeometry, LinearGeometryMixin from django.contrib.gis.geos.libgeos import GEOM_PTR diff --git a/django/contrib/gis/geos/coordseq.py b/django/contrib/gis/geos/coordseq.py index 0ff4ecb2e5..15400e08fe 100644 --- a/django/contrib/gis/geos/coordseq.py +++ b/django/contrib/gis/geos/coordseq.py @@ -3,6 +3,7 @@ by GEOSGeometry to house the actual coordinates of the Point, LineString, and LinearRing geometries. """ + from ctypes import byref, c_byte, c_double, c_uint from django.contrib.gis.geos import prototypes as capi diff --git a/django/contrib/gis/geos/geometry.py b/django/contrib/gis/geos/geometry.py index 00b36af0a6..8bbe2c264a 100644 --- a/django/contrib/gis/geos/geometry.py +++ b/django/contrib/gis/geos/geometry.py @@ -2,6 +2,7 @@ This module contains the 'base' GEOSGeometry object -- all GEOS Geometries inherit from this object. """ + import re from ctypes import addressof, byref, c_double diff --git a/django/contrib/gis/geos/io.py b/django/contrib/gis/geos/io.py index d7898065f0..8dd3f289e6 100644 --- a/django/contrib/gis/geos/io.py +++ b/django/contrib/gis/geos/io.py @@ -3,6 +3,7 @@ Module that holds classes for performing I/O operations on GEOS geometry objects. Specifically, this has Python implementations of WKB/WKT reader and writer classes. """ + from django.contrib.gis.geos.geometry import GEOSGeometry from django.contrib.gis.geos.prototypes.io import ( WKBWriter, diff --git a/django/contrib/gis/geos/libgeos.py b/django/contrib/gis/geos/libgeos.py index 1121b4f715..b883c6c090 100644 --- a/django/contrib/gis/geos/libgeos.py +++ b/django/contrib/gis/geos/libgeos.py @@ -6,6 +6,7 @@ This module also houses GEOS Pointer utilities, including get_pointer_arr(), and GEOM_PTR. """ + import logging import os from ctypes import CDLL, CFUNCTYPE, POINTER, Structure, c_char_p diff --git a/django/contrib/gis/geos/prototypes/errcheck.py b/django/contrib/gis/geos/prototypes/errcheck.py index a527f513a7..42b24c2891 100644 --- a/django/contrib/gis/geos/prototypes/errcheck.py +++ b/django/contrib/gis/geos/prototypes/errcheck.py @@ -1,6 +1,7 @@ """ Error checking functions for GEOS ctypes prototype functions. """ + from ctypes import c_void_p, string_at from django.contrib.gis.geos.error import GEOSException diff --git a/django/contrib/gis/geos/prototypes/misc.py b/django/contrib/gis/geos/prototypes/misc.py index fccd0ecc9e..bd5859e79b 100644 --- a/django/contrib/gis/geos/prototypes/misc.py +++ b/django/contrib/gis/geos/prototypes/misc.py @@ -2,6 +2,7 @@ This module is for the miscellaneous GEOS routines, particularly the ones that return the area, distance, and length. """ + from ctypes import POINTER, c_double, c_int from django.contrib.gis.geos.libgeos import GEOM_PTR, GEOSFuncFactory diff --git a/django/contrib/gis/geos/prototypes/predicates.py b/django/contrib/gis/geos/prototypes/predicates.py index 32b790173a..dd07cbfb26 100644 --- a/django/contrib/gis/geos/prototypes/predicates.py +++ b/django/contrib/gis/geos/prototypes/predicates.py @@ -2,6 +2,7 @@ This module houses the GEOS ctypes prototype functions for the unary and binary predicate operations on geometries. """ + from ctypes import c_byte, c_char_p, c_double from django.contrib.gis.geos.libgeos import GEOM_PTR, GEOSFuncFactory diff --git a/django/contrib/gis/geos/prototypes/topology.py b/django/contrib/gis/geos/prototypes/topology.py index e61eae964a..9323bb2d16 100644 --- a/django/contrib/gis/geos/prototypes/topology.py +++ b/django/contrib/gis/geos/prototypes/topology.py @@ -2,6 +2,7 @@ This module houses the GEOS ctypes prototype functions for the topological operations on geometries. """ + from ctypes import c_double, c_int from django.contrib.gis.geos.libgeos import GEOM_PTR, GEOSFuncFactory diff --git a/django/contrib/gis/locale/mn/LC_MESSAGES/django.mo b/django/contrib/gis/locale/mn/LC_MESSAGES/django.mo index 2ebb08f69c..8643c1fe72 100644 Binary files a/django/contrib/gis/locale/mn/LC_MESSAGES/django.mo and b/django/contrib/gis/locale/mn/LC_MESSAGES/django.mo differ diff --git a/django/contrib/gis/locale/mn/LC_MESSAGES/django.po b/django/contrib/gis/locale/mn/LC_MESSAGES/django.po index 83403a48fd..1362f6c9e3 100644 --- a/django/contrib/gis/locale/mn/LC_MESSAGES/django.po +++ b/django/contrib/gis/locale/mn/LC_MESSAGES/django.po @@ -4,6 +4,7 @@ # Baskhuu Lodoikhuu , 2011 # Jannis Leidel , 2011 # Mariusz Felisiak , 2023 +# Turmunkh Batkhuyag, 2023 # Zorig, 2014,2016 # Анхбаяр Анхаа , 2011-2012,2015 # Баясгалан Цэвлээ , 2011,2015 @@ -12,8 +13,8 @@ msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-09-18 11:41-0300\n" -"PO-Revision-Date: 2023-12-04 18:45+0000\n" -"Last-Translator: Mariusz Felisiak , 2023\n" +"PO-Revision-Date: 2023-12-24 18:45+0000\n" +"Last-Translator: Turmunkh Batkhuyag, 2023\n" "Language-Team: Mongolian (http://app.transifex.com/django/django/language/" "mn/)\n" "MIME-Version: 1.0\n" @@ -53,7 +54,7 @@ msgid "Multi polygon" msgstr "Олон өнцөгтийн олонлог" msgid "Geometry collection" -msgstr "Дүрсний цуглуулга" +msgstr "Геометрийн цуглуулга" msgid "Extent Aggregate Field" msgstr "Aggregate талбарыг өргөтгөх" @@ -62,20 +63,19 @@ msgid "Raster Field" msgstr "Растер талбар" msgid "No geometry value provided." -msgstr "Дүрс оруулаагүй байна." +msgstr "Геометрийн утгыг өгөөгүй." msgid "Invalid geometry value." -msgstr "Буруу дүрс байна." +msgstr "Буруу геометрийн утга байна." msgid "Invalid geometry type." -msgstr "Дүрсийн төрөл буруу байна." +msgstr "Геометер төрөл буруу байна." msgid "" "An error occurred when transforming the geometry to the SRID of the geometry " "form field." msgstr "" -"An error occurred when transforming the geometry to the SRID дүрсний форм " -"талбарын SRID утгыг хөрвүүлэхэд алдаа гарлаа." +"Геометрийг геометрийн форм талбарын SRID болгон хувиргах үед алдаа гарлаа." msgid "Delete all Features" msgstr "Бүх онцлогүүдыг устгах" diff --git a/django/contrib/gis/locale/mr/LC_MESSAGES/django.mo b/django/contrib/gis/locale/mr/LC_MESSAGES/django.mo index 0fc4a9ceda..2c755725db 100644 Binary files a/django/contrib/gis/locale/mr/LC_MESSAGES/django.mo and b/django/contrib/gis/locale/mr/LC_MESSAGES/django.mo differ diff --git a/django/contrib/gis/locale/mr/LC_MESSAGES/django.po b/django/contrib/gis/locale/mr/LC_MESSAGES/django.po index 83ef357230..1083d9520e 100644 --- a/django/contrib/gis/locale/mr/LC_MESSAGES/django.po +++ b/django/contrib/gis/locale/mr/LC_MESSAGES/django.po @@ -1,14 +1,15 @@ # This file is distributed under the same license as the Django package. # # Translators: +# Omkar Parab, 2024 msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-03-18 09:16+0100\n" -"PO-Revision-Date: 2015-03-18 08:35+0000\n" -"Last-Translator: Jannis Leidel \n" -"Language-Team: Marathi (http://www.transifex.com/projects/p/django/language/" +"POT-Creation-Date: 2023-09-18 11:41-0300\n" +"PO-Revision-Date: 2024-01-24 18:45+0000\n" +"Last-Translator: Omkar Parab, 2024\n" +"Language-Team: Marathi (http://app.transifex.com/django/django/language/" "mr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -19,7 +20,11 @@ msgstr "" msgid "GIS" msgstr "" -msgid "The base GIS field -- maps to the OpenGIS Specification Geometry type." +msgid "The base GIS field." +msgstr "" + +msgid "" +"The base Geometry field — maps to the OpenGIS Specification Geometry type." msgstr "" msgid "Point" @@ -46,6 +51,9 @@ msgstr "" msgid "Extent Aggregate Field" msgstr "" +msgid "Raster Field" +msgstr "" + msgid "No geometry value provided." msgstr "" @@ -61,13 +69,7 @@ msgid "" msgstr "" msgid "Delete all Features" -msgstr "" - -msgid "WKT debugging window:" -msgstr "" - -msgid "Google Maps via GeoDjango" -msgstr "" +msgstr "सर्व वैशिष्ट्ये घालवा" msgid "Debugging window (serialized value)" msgstr "" @@ -76,5 +78,5 @@ msgid "No feeds are registered." msgstr "" #, python-format -msgid "Slug %r isn't registered." +msgid "Slug %r isn’t registered." msgstr "" diff --git a/django/contrib/gis/utils/__init__.py b/django/contrib/gis/utils/__init__.py index 12f032c665..f42fa90226 100644 --- a/django/contrib/gis/utils/__init__.py +++ b/django/contrib/gis/utils/__init__.py @@ -1,6 +1,7 @@ """ This module contains useful utilities for GeoDjango. """ + from django.contrib.gis.utils.ogrinfo import ogrinfo from django.contrib.gis.utils.ogrinspect import mapping, ogrinspect from django.contrib.gis.utils.srs import add_srs_entry diff --git a/django/contrib/gis/utils/ogrinspect.py b/django/contrib/gis/utils/ogrinspect.py index 40ca0cb461..76c8bfbcfa 100644 --- a/django/contrib/gis/utils/ogrinspect.py +++ b/django/contrib/gis/utils/ogrinspect.py @@ -3,6 +3,7 @@ This module is for inspecting OGR data sources and generating either models for GeoDjango and/or mapping dictionaries for use with the `LayerMapping` utility. """ + from django.contrib.gis.gdal import DataSource from django.contrib.gis.gdal.field import ( OFTDate, diff --git a/django/contrib/humanize/locale/mn/LC_MESSAGES/django.mo b/django/contrib/humanize/locale/mn/LC_MESSAGES/django.mo index de62154a08..0f2c700ef9 100644 Binary files a/django/contrib/humanize/locale/mn/LC_MESSAGES/django.mo and b/django/contrib/humanize/locale/mn/LC_MESSAGES/django.mo differ diff --git a/django/contrib/humanize/locale/mn/LC_MESSAGES/django.po b/django/contrib/humanize/locale/mn/LC_MESSAGES/django.po index 8b2de470c0..94bb307b78 100644 --- a/django/contrib/humanize/locale/mn/LC_MESSAGES/django.po +++ b/django/contrib/humanize/locale/mn/LC_MESSAGES/django.po @@ -3,6 +3,7 @@ # Translators: # Bayarkhuu Bataa, 2014 # Bayarkhuu Bataa, 2013 +# Turmunkh Batkhuyag, 2023 # Zorig, 2013 # Zorig, 2019 # Анхбаяр Анхаа , 2013 @@ -10,10 +11,10 @@ msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-01-16 20:42+0100\n" -"PO-Revision-Date: 2019-02-19 02:28+0000\n" -"Last-Translator: Zorig\n" -"Language-Team: Mongolian (http://www.transifex.com/django/django/language/" +"POT-Creation-Date: 2023-09-18 11:41-0300\n" +"PO-Revision-Date: 2023-12-24 18:40+0000\n" +"Last-Translator: Turmunkh Batkhuyag, 2023\n" +"Language-Team: Mongolian (http://app.transifex.com/django/django/language/" "mn/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -27,24 +28,24 @@ msgstr "Хүнчлэх" #. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). msgctxt "ordinal 11, 12, 13" msgid "{}th" -msgstr "{} дэхь" +msgstr "{} дэх" #. Translators: Ordinal format when value ends with 0, e.g. 80th. msgctxt "ordinal 0" msgid "{}th" -msgstr "{} дэхь" +msgstr "{} дэх" #. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. msgctxt "ordinal 1" msgid "{}st" -msgstr "{} дэхь" +msgstr "{} дэх" #. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. msgctxt "ordinal 2" msgid "{}nd" msgstr "{} дахь" -#. Translators: Ordinal format when value ends with 3, e.g. 83th, except 13. +#. Translators: Ordinal format when value ends with 3, e.g. 83rd, except 13. msgctxt "ordinal 3" msgid "{}rd" msgstr "{} дахь" @@ -52,38 +53,32 @@ msgstr "{} дахь" #. Translators: Ordinal format when value ends with 4, e.g. 84th. msgctxt "ordinal 4" msgid "{}th" -msgstr "{} дахь" +msgstr "{} дэх" #. Translators: Ordinal format when value ends with 5, e.g. 85th. msgctxt "ordinal 5" msgid "{}th" -msgstr "{} дэхь" +msgstr "{} дахь" #. Translators: Ordinal format when value ends with 6, e.g. 86th. msgctxt "ordinal 6" msgid "{}th" -msgstr "{} дэхь" +msgstr "{} дахь" #. Translators: Ordinal format when value ends with 7, e.g. 87th. msgctxt "ordinal 7" msgid "{}th" -msgstr "{} дэхь" +msgstr "{} дахь" #. Translators: Ordinal format when value ends with 8, e.g. 88th. msgctxt "ordinal 8" msgid "{}th" -msgstr "{} дэхь" +msgstr "{} дахь" #. Translators: Ordinal format when value ends with 9, e.g. 89th. msgctxt "ordinal 9" msgid "{}th" -msgstr "{} дэхь" - -#, python-format -msgid "%(value).1f million" -msgid_plural "%(value).1f million" -msgstr[0] "%(value).1f сая" -msgstr[1] "%(value).1f сая" +msgstr "{} дэх" #, python-format msgid "%(value)s million" @@ -91,35 +86,17 @@ msgid_plural "%(value)s million" msgstr[0] "%(value)s сая" msgstr[1] "%(value)s сая" -#, python-format -msgid "%(value).1f billion" -msgid_plural "%(value).1f billion" -msgstr[0] "%(value).1f тэрбум" -msgstr[1] "%(value).1f тэрбум" - #, python-format msgid "%(value)s billion" msgid_plural "%(value)s billion" msgstr[0] "%(value)s тэрбум" msgstr[1] "%(value)s тэрбум" -#, python-format -msgid "%(value).1f trillion" -msgid_plural "%(value).1f trillion" -msgstr[0] "%(value).1f наяд" -msgstr[1] "%(value).1f наяд" - #, python-format msgid "%(value)s trillion" msgid_plural "%(value)s trillion" msgstr[0] "%(value)s наяд" -msgstr[1] "%(value)s наяд" - -#, python-format -msgid "%(value).1f quadrillion" -msgid_plural "%(value).1f quadrillion" -msgstr[0] "%(value).1f тунамал" -msgstr[1] "%(value).1f тунамал" +msgstr[1] "%(value)s их наяд" #, python-format msgid "%(value)s quadrillion" @@ -127,84 +104,42 @@ msgid_plural "%(value)s quadrillion" msgstr[0] "%(value)s тунамал" msgstr[1] "%(value)s тунамал" -#, python-format -msgid "%(value).1f quintillion" -msgid_plural "%(value).1f quintillion" -msgstr[0] "%(value).1f их ингүүмэл " -msgstr[1] "%(value).1f их ингүүмэл " - #, python-format msgid "%(value)s quintillion" msgid_plural "%(value)s quintillion" msgstr[0] "%(value)s их ингүүмэл " msgstr[1] "%(value)s их ингүүмэл " -#, python-format -msgid "%(value).1f sextillion" -msgid_plural "%(value).1f sextillion" -msgstr[0] "%(value).1f ялгаруулагч" -msgstr[1] "%(value).1f ялгаруулагч" - #, python-format msgid "%(value)s sextillion" msgid_plural "%(value)s sextillion" msgstr[0] "%(value)s ялгаруулагч" msgstr[1] "%(value)s ялгаруулагч" -#, python-format -msgid "%(value).1f septillion" -msgid_plural "%(value).1f septillion" -msgstr[0] "%(value).1f их өөр дээр " -msgstr[1] "%(value).1f их өөр дээр " - #, python-format msgid "%(value)s septillion" msgid_plural "%(value)s septillion" msgstr[0] "%(value)s их өөр дээр " msgstr[1] "%(value)s их өөр дээр " -#, python-format -msgid "%(value).1f octillion" -msgid_plural "%(value).1f octillion" -msgstr[0] "%(value).1f өөр дээр " -msgstr[1] "%(value).1f өөр дээр " - #, python-format msgid "%(value)s octillion" msgid_plural "%(value)s octillion" msgstr[0] "%(value)s өөр дээр " msgstr[1] "%(value)s өөр дээр " -#, python-format -msgid "%(value).1f nonillion" -msgid_plural "%(value).1f nonillion" -msgstr[0] "%(value).1f их шалтгааны үзэгдэл" -msgstr[1] "%(value).1f их шалтгааны үзэгдэл" - #, python-format msgid "%(value)s nonillion" msgid_plural "%(value)s nonillion" msgstr[0] "%(value)s их шалтгааны үзэгдэл" msgstr[1] "%(value)s их шалтгааны үзэгдэл" -#, python-format -msgid "%(value).1f decillion" -msgid_plural "%(value).1f decillion" -msgstr[0] "%(value).1f эрхэт" -msgstr[1] "%(value).1f эрхэт" - #, python-format msgid "%(value)s decillion" msgid_plural "%(value)s decillion" msgstr[0] "%(value)s эрхэт" msgstr[1] "%(value)s эрхэт" -#, python-format -msgid "%(value).1f googol" -msgid_plural "%(value).1f googol" -msgstr[0] "%(value).1f googol" -msgstr[1] "%(value).1f googol" - #, python-format msgid "%(value)s googol" msgid_plural "%(value)s googol" @@ -313,86 +248,86 @@ msgstr "одооноос %(delta)s " #. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' #, python-format msgctxt "naturaltime-past" -msgid "%d year" -msgid_plural "%d years" -msgstr[0] "%d жил" -msgstr[1] "%d жилүүд" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d жил" +msgstr[1] "%(num)d жил" #, python-format msgctxt "naturaltime-past" -msgid "%d month" -msgid_plural "%d months" -msgstr[0] "%d сар" -msgstr[1] "%d сар" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d сар" +msgstr[1] "%(num)d сар" #, python-format msgctxt "naturaltime-past" -msgid "%d week" -msgid_plural "%d weeks" -msgstr[0] "%d долоо хоног" -msgstr[1] "%d долоо хоног" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d долоо хоног" +msgstr[1] "%(num)d долоо хоног" #, python-format msgctxt "naturaltime-past" -msgid "%d day" -msgid_plural "%d days" -msgstr[0] "%d өдөр" -msgstr[1] "%d өдөр" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d өдөр" +msgstr[1] "%(num)d өдөр" #, python-format msgctxt "naturaltime-past" -msgid "%d hour" -msgid_plural "%d hours" -msgstr[0] "%d цаг" -msgstr[1] "%d цаг" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d цаг" +msgstr[1] "%(num)d цаг" #, python-format msgctxt "naturaltime-past" -msgid "%d minute" -msgid_plural "%d minutes" -msgstr[0] "%d минут" -msgstr[1] "%d минут" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d минут" +msgstr[1] "%(num)d минут" #. Translators: 'naturaltime-future' strings will be included in '%(delta)s #. from now' #, python-format msgctxt "naturaltime-future" -msgid "%d year" -msgid_plural "%d years" -msgstr[0] "%d жил" -msgstr[1] "%d жил" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "%(num)d жил" +msgstr[1] "%(num)d жил" #, python-format msgctxt "naturaltime-future" -msgid "%d month" -msgid_plural "%d months" -msgstr[0] "%d сар" -msgstr[1] "%d сар" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "%(num)d сар" +msgstr[1] "%(num)d сар" #, python-format msgctxt "naturaltime-future" -msgid "%d week" -msgid_plural "%d weeks" -msgstr[0] "%d долоо хоног" -msgstr[1] "%d долоо хоног" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "%(num)d долоо хоног" +msgstr[1] "%(num)d долоо хоног" #, python-format msgctxt "naturaltime-future" -msgid "%d day" -msgid_plural "%d days" -msgstr[0] "%d өдөр" -msgstr[1] "%d өдөр" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "%(num)d өдөр" +msgstr[1] "%(num)d өдөр" #, python-format msgctxt "naturaltime-future" -msgid "%d hour" -msgid_plural "%d hours" -msgstr[0] "%d цаг" -msgstr[1] "%d цаг" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "%(num)d цаг" +msgstr[1] "%(num)d цаг" #, python-format msgctxt "naturaltime-future" -msgid "%d minute" -msgid_plural "%d minutes" -msgstr[0] "%d минут" -msgstr[1] "%d минут" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "%(num)d минут" +msgstr[1] "%(num)d минут" diff --git a/django/contrib/humanize/locale/mr/LC_MESSAGES/django.mo b/django/contrib/humanize/locale/mr/LC_MESSAGES/django.mo index 183b3d14e9..9e758b08fc 100644 Binary files a/django/contrib/humanize/locale/mr/LC_MESSAGES/django.mo and b/django/contrib/humanize/locale/mr/LC_MESSAGES/django.mo differ diff --git a/django/contrib/humanize/locale/mr/LC_MESSAGES/django.po b/django/contrib/humanize/locale/mr/LC_MESSAGES/django.po index b042b29121..97d741ba36 100644 --- a/django/contrib/humanize/locale/mr/LC_MESSAGES/django.po +++ b/django/contrib/humanize/locale/mr/LC_MESSAGES/django.po @@ -1,14 +1,15 @@ # This file is distributed under the same license as the Django package. # # Translators: +# Omkar Parab, 2024 msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-01-17 11:07+0100\n" -"PO-Revision-Date: 2014-10-05 20:12+0000\n" -"Last-Translator: Jannis Leidel \n" -"Language-Team: Marathi (http://www.transifex.com/projects/p/django/language/" +"POT-Creation-Date: 2023-09-18 11:41-0300\n" +"PO-Revision-Date: 2024-01-24 18:40+0000\n" +"Last-Translator: Omkar Parab, 2024\n" +"Language-Team: Marathi (http://app.transifex.com/django/django/language/" "mr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,25 +18,62 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgid "Humanize" -msgstr "" +msgstr "मानवीकरण" -msgid "th" -msgstr "" +#. Translators: Ordinal format for 11 (11th), 12 (12th), and 13 (13th). +msgctxt "ordinal 11, 12, 13" +msgid "{}th" +msgstr "{}वा" -msgid "st" -msgstr "" +#. Translators: Ordinal format when value ends with 0, e.g. 80th. +msgctxt "ordinal 0" +msgid "{}th" +msgstr "{}वा" -msgid "nd" -msgstr "" +#. Translators: Ordinal format when value ends with 1, e.g. 81st, except 11. +msgctxt "ordinal 1" +msgid "{}st" +msgstr "{}वा" -msgid "rd" -msgstr "" +#. Translators: Ordinal format when value ends with 2, e.g. 82nd, except 12. +msgctxt "ordinal 2" +msgid "{}nd" +msgstr "{}वा" -#, python-format -msgid "%(value).1f million" -msgid_plural "%(value).1f million" -msgstr[0] "" -msgstr[1] "" +#. Translators: Ordinal format when value ends with 3, e.g. 83rd, except 13. +msgctxt "ordinal 3" +msgid "{}rd" +msgstr "{}वा" + +#. Translators: Ordinal format when value ends with 4, e.g. 84th. +msgctxt "ordinal 4" +msgid "{}th" +msgstr "{}वा" + +#. Translators: Ordinal format when value ends with 5, e.g. 85th. +msgctxt "ordinal 5" +msgid "{}th" +msgstr "{}वा" + +#. Translators: Ordinal format when value ends with 6, e.g. 86th. +msgctxt "ordinal 6" +msgid "{}th" +msgstr "{}वा" + +#. Translators: Ordinal format when value ends with 7, e.g. 87th. +msgctxt "ordinal 7" +msgid "{}th" +msgstr "{}वा" + +#. Translators: Ordinal format when value ends with 8, e.g. 88th. +msgctxt "ordinal 8" +msgid "{}th" +msgstr "{}वा" + +#. Translators: Ordinal format when value ends with 9, e.g. 89th. +msgctxt "ordinal 9" +msgid "{}th" +msgstr "{वा}" #, python-format msgid "%(value)s million" @@ -43,120 +81,60 @@ msgid_plural "%(value)s million" msgstr[0] "" msgstr[1] "" -#, python-format -msgid "%(value).1f billion" -msgid_plural "%(value).1f billion" -msgstr[0] "" -msgstr[1] "" - #, python-format msgid "%(value)s billion" msgid_plural "%(value)s billion" msgstr[0] "" msgstr[1] "" -#, python-format -msgid "%(value).1f trillion" -msgid_plural "%(value).1f trillion" -msgstr[0] "" -msgstr[1] "" - #, python-format msgid "%(value)s trillion" msgid_plural "%(value)s trillion" msgstr[0] "" msgstr[1] "" -#, python-format -msgid "%(value).1f quadrillion" -msgid_plural "%(value).1f quadrillion" -msgstr[0] "" -msgstr[1] "" - #, python-format msgid "%(value)s quadrillion" msgid_plural "%(value)s quadrillion" msgstr[0] "" msgstr[1] "" -#, python-format -msgid "%(value).1f quintillion" -msgid_plural "%(value).1f quintillion" -msgstr[0] "" -msgstr[1] "" - #, python-format msgid "%(value)s quintillion" msgid_plural "%(value)s quintillion" msgstr[0] "" msgstr[1] "" -#, python-format -msgid "%(value).1f sextillion" -msgid_plural "%(value).1f sextillion" -msgstr[0] "" -msgstr[1] "" - #, python-format msgid "%(value)s sextillion" msgid_plural "%(value)s sextillion" msgstr[0] "" msgstr[1] "" -#, python-format -msgid "%(value).1f septillion" -msgid_plural "%(value).1f septillion" -msgstr[0] "" -msgstr[1] "" - #, python-format msgid "%(value)s septillion" msgid_plural "%(value)s septillion" msgstr[0] "" msgstr[1] "" -#, python-format -msgid "%(value).1f octillion" -msgid_plural "%(value).1f octillion" -msgstr[0] "" -msgstr[1] "" - #, python-format msgid "%(value)s octillion" msgid_plural "%(value)s octillion" msgstr[0] "" msgstr[1] "" -#, python-format -msgid "%(value).1f nonillion" -msgid_plural "%(value).1f nonillion" -msgstr[0] "" -msgstr[1] "" - #, python-format msgid "%(value)s nonillion" msgid_plural "%(value)s nonillion" msgstr[0] "" msgstr[1] "" -#, python-format -msgid "%(value).1f decillion" -msgid_plural "%(value).1f decillion" -msgstr[0] "" -msgstr[1] "" - #, python-format msgid "%(value)s decillion" msgid_plural "%(value)s decillion" msgstr[0] "" msgstr[1] "" -#, python-format -msgid "%(value).1f googol" -msgid_plural "%(value).1f googol" -msgstr[0] "" -msgstr[1] "" - #, python-format msgid "%(value)s googol" msgid_plural "%(value)s googol" @@ -164,98 +142,187 @@ msgstr[0] "" msgstr[1] "" msgid "one" -msgstr "" +msgstr "एक" msgid "two" -msgstr "" +msgstr "दोन" msgid "three" -msgstr "" +msgstr "तीन" msgid "four" -msgstr "" +msgstr "चार" msgid "five" -msgstr "" +msgstr "पाच" msgid "six" -msgstr "" +msgstr "सहा" msgid "seven" -msgstr "" +msgstr "सात" msgid "eight" -msgstr "" +msgstr "आठ" msgid "nine" -msgstr "" +msgstr "नऊ" msgid "today" -msgstr "" +msgstr "आज" msgid "tomorrow" -msgstr "" +msgstr "उद्या" msgid "yesterday" -msgstr "" +msgstr "काल" +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' #, python-format -msgctxt "naturaltime" msgid "%(delta)s ago" -msgstr "" +msgstr "%(delta)s पूर्वी" -msgid "now" -msgstr "" - -#. Translators: please keep a non-breaking space (U+00A0) -#. between count and time unit. -#, python-format -msgid "a second ago" -msgid_plural "%(count)s seconds ago" -msgstr[0] "" -msgstr[1] "" - -#. Translators: please keep a non-breaking space (U+00A0) -#. between count and time unit. -#, python-format -msgid "a minute ago" -msgid_plural "%(count)s minutes ago" -msgstr[0] "" -msgstr[1] "" - -#. Translators: please keep a non-breaking space (U+00A0) -#. between count and time unit. +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. #, python-format msgid "an hour ago" msgid_plural "%(count)s hours ago" msgstr[0] "" msgstr[1] "" +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. #, python-format -msgctxt "naturaltime" -msgid "%(delta)s from now" -msgstr "" +msgid "a minute ago" +msgid_plural "%(count)s minutes ago" +msgstr[0] "" +msgstr[1] "" -#. Translators: please keep a non-breaking space (U+00A0) -#. between count and time unit. +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. +#, python-format +msgid "a second ago" +msgid_plural "%(count)s seconds ago" +msgstr[0] "" +msgstr[1] "" + +msgid "now" +msgstr "आता" + +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. #, python-format msgid "a second from now" msgid_plural "%(count)s seconds from now" msgstr[0] "" msgstr[1] "" -#. Translators: please keep a non-breaking space (U+00A0) -#. between count and time unit. +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. #, python-format msgid "a minute from now" msgid_plural "%(count)s minutes from now" msgstr[0] "" msgstr[1] "" -#. Translators: please keep a non-breaking space (U+00A0) -#. between count and time unit. +#. Translators: please keep a non-breaking space (U+00A0) between count +#. and time unit. #, python-format msgid "an hour from now" msgid_plural "%(count)s hours from now" msgstr[0] "" msgstr[1] "" + +#. Translators: delta will contain a string like '2 months' or '1 month, 2 +#. weeks' +#, python-format +msgid "%(delta)s from now" +msgstr "" + +#. Translators: 'naturaltime-past' strings will be included in '%(delta)s ago' +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-past" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "" +msgstr[1] "" + +#. Translators: 'naturaltime-future' strings will be included in '%(delta)s +#. from now' +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d year" +msgid_plural "%(num)d years" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d month" +msgid_plural "%(num)d months" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d week" +msgid_plural "%(num)d weeks" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d day" +msgid_plural "%(num)d days" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d hour" +msgid_plural "%(num)d hours" +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgctxt "naturaltime-future" +msgid "%(num)d minute" +msgid_plural "%(num)d minutes" +msgstr[0] "" +msgstr[1] "" diff --git a/django/contrib/postgres/locale/ckb/LC_MESSAGES/django.mo b/django/contrib/postgres/locale/ckb/LC_MESSAGES/django.mo index 652b8fd85f..e5b798fb05 100644 Binary files a/django/contrib/postgres/locale/ckb/LC_MESSAGES/django.mo and b/django/contrib/postgres/locale/ckb/LC_MESSAGES/django.mo differ diff --git a/django/contrib/postgres/locale/ckb/LC_MESSAGES/django.po b/django/contrib/postgres/locale/ckb/LC_MESSAGES/django.po index 4c93f29da6..35664e99ed 100644 --- a/django/contrib/postgres/locale/ckb/LC_MESSAGES/django.po +++ b/django/contrib/postgres/locale/ckb/LC_MESSAGES/django.po @@ -1,15 +1,15 @@ # This file is distributed under the same license as the Django package. # # Translators: -# Swara , 2022 +# Swara , 2022,2024 msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-01-17 02:13-0600\n" -"PO-Revision-Date: 2023-04-19 09:22+0000\n" -"Last-Translator: Swara , 2022\n" -"Language-Team: Central Kurdish (http://www.transifex.com/django/django/" +"PO-Revision-Date: 2024-01-19 09:22+0000\n" +"Last-Translator: Swara , 2022,2024\n" +"Language-Team: Central Kurdish (http://app.transifex.com/django/django/" "language/ckb/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -93,9 +93,9 @@ msgstr "هەندێک کلیلی نەناسراو دابین کران: %(keys)s" #, python-format msgid "" "Ensure that the upper bound of the range is not greater than %(limit_value)s." -msgstr "" +msgstr "دڵنیابە لەوەی کە سنووری سەرەوەی ڕێژەکە زیاتر نییە لە %(limit_value)s." #, python-format msgid "" "Ensure that the lower bound of the range is not less than %(limit_value)s." -msgstr "" +msgstr "دڵنیابە لەوەی کە سنووری خوارەوەی ڕێژەکە کەمتر نییە لە %(limit_value)s." diff --git a/django/contrib/postgres/locale/mr/LC_MESSAGES/django.mo b/django/contrib/postgres/locale/mr/LC_MESSAGES/django.mo new file mode 100644 index 0000000000..d183857384 Binary files /dev/null and b/django/contrib/postgres/locale/mr/LC_MESSAGES/django.mo differ diff --git a/django/contrib/postgres/locale/mr/LC_MESSAGES/django.po b/django/contrib/postgres/locale/mr/LC_MESSAGES/django.po new file mode 100644 index 0000000000..42fb58dec0 --- /dev/null +++ b/django/contrib/postgres/locale/mr/LC_MESSAGES/django.po @@ -0,0 +1,97 @@ +# This file is distributed under the same license as the Django package. +# +# Translators: +# Omkar Parab, 2024 +msgid "" +msgstr "" +"Project-Id-Version: django\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2023-01-17 02:13-0600\n" +"PO-Revision-Date: 2024-01-19 09:22+0000\n" +"Last-Translator: Omkar Parab, 2024\n" +"Language-Team: Marathi (http://app.transifex.com/django/django/language/" +"mr/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: mr\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "PostgreSQL extensions" +msgstr "" + +#, python-format +msgid "Item %(nth)s in the array did not validate:" +msgstr "" + +msgid "Nested arrays must have the same length." +msgstr "" + +msgid "Map of strings to strings/nulls" +msgstr "" + +#, python-format +msgid "The value of “%(key)s” is not a string or null." +msgstr "" + +msgid "Could not load JSON data." +msgstr "JSON डेटा लोड करू शकलो नाही. " + +msgid "Input must be a JSON dictionary." +msgstr "" + +msgid "Enter two valid values." +msgstr "दोन वैध मूल्ये प्रविष्ट करा." + +msgid "The start of the range must not exceed the end of the range." +msgstr "" + +msgid "Enter two whole numbers." +msgstr "दोन पूर्ण संख्या प्रविष्ट करा." + +msgid "Enter two numbers." +msgstr "दोन संख्या प्रविष्ट करा." + +msgid "Enter two valid date/times." +msgstr "दोन वैध दिनांक/वेळा प्रविष्ट करा." + +msgid "Enter two valid dates." +msgstr "दोन वैध दिनांका प्रविष्ट करा" + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no more than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no more than " +"%(limit_value)d." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "" +"List contains %(show_value)d item, it should contain no fewer than " +"%(limit_value)d." +msgid_plural "" +"List contains %(show_value)d items, it should contain no fewer than " +"%(limit_value)d." +msgstr[0] "" +msgstr[1] "" + +#, python-format +msgid "Some keys were missing: %(keys)s" +msgstr "" + +#, python-format +msgid "Some unknown keys were provided: %(keys)s" +msgstr "" + +#, python-format +msgid "" +"Ensure that the upper bound of the range is not greater than %(limit_value)s." +msgstr "" + +#, python-format +msgid "" +"Ensure that the lower bound of the range is not less than %(limit_value)s." +msgstr "" diff --git a/django/contrib/postgres/search.py b/django/contrib/postgres/search.py index 936709c2f8..4d279857c6 100644 --- a/django/contrib/postgres/search.py +++ b/django/contrib/postgres/search.py @@ -116,9 +116,11 @@ class SearchVector(SearchVectorCombinable, Func): clone.set_source_expressions( [ Coalesce( - expression - if isinstance(expression.output_field, (CharField, TextField)) - else Cast(expression, TextField()), + ( + expression + if isinstance(expression.output_field, (CharField, TextField)) + else Cast(expression, TextField()) + ), Value(""), ) for expression in clone.get_source_expressions() diff --git a/django/contrib/redirects/locale/mr/LC_MESSAGES/django.mo b/django/contrib/redirects/locale/mr/LC_MESSAGES/django.mo index 183b3d14e9..54b53f3bea 100644 Binary files a/django/contrib/redirects/locale/mr/LC_MESSAGES/django.mo and b/django/contrib/redirects/locale/mr/LC_MESSAGES/django.mo differ diff --git a/django/contrib/redirects/locale/mr/LC_MESSAGES/django.po b/django/contrib/redirects/locale/mr/LC_MESSAGES/django.po index 5477dd9c9e..403f9fabe8 100644 --- a/django/contrib/redirects/locale/mr/LC_MESSAGES/django.po +++ b/django/contrib/redirects/locale/mr/LC_MESSAGES/django.po @@ -1,14 +1,15 @@ # This file is distributed under the same license as the Django package. # # Translators: +# Omkar Parab, 2024 msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-01-17 11:07+0100\n" -"PO-Revision-Date: 2014-10-05 20:12+0000\n" -"Last-Translator: Jannis Leidel \n" -"Language-Team: Marathi (http://www.transifex.com/projects/p/django/language/" +"POT-Creation-Date: 2021-01-15 09:00+0100\n" +"PO-Revision-Date: 2024-01-24 18:32+0000\n" +"Last-Translator: Omkar Parab, 2024\n" +"Language-Team: Marathi (http://app.transifex.com/django/django/language/" "mr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,26 +18,31 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgid "Redirects" -msgstr "" +msgstr "पुनर्निर्देशने" + +msgid "site" +msgstr "स्थळ" msgid "redirect from" -msgstr "" +msgstr "पासून पुनर्निर्देशित" msgid "" -"This should be an absolute path, excluding the domain name. Example: '/" -"events/search/'." -msgstr "" +"This should be an absolute path, excluding the domain name. Example: “/" +"events/search/”." +msgstr "डोमेन नाव वगळून हा एक परिपूर्ण मार्ग असावा. उदाहरण: \"/events/search/\"." msgid "redirect to" -msgstr "" +msgstr "ला पुनर्निर्देशित" msgid "" -"This can be either an absolute path (as above) or a full URL starting with " -"'http://'." +"This can be either an absolute path (as above) or a full URL starting with a " +"scheme such as “https://”." msgstr "" +"हा एकतर निरपेक्ष मार्ग असू शकतो (वरीलप्रमाणे) किंवा एखाद्या योजनेपासून सुरू होणारी पूर्ण " +"URL असू शकते जसे की \"https://\"" msgid "redirect" -msgstr "" +msgstr "पुनर्निर्देशित" msgid "redirects" -msgstr "" +msgstr "पुनर्निर्देशने" diff --git a/django/contrib/sessions/base_session.py b/django/contrib/sessions/base_session.py index 603d2fe12c..8809dd36f7 100644 --- a/django/contrib/sessions/base_session.py +++ b/django/contrib/sessions/base_session.py @@ -2,6 +2,7 @@ This module allows importing AbstractBaseSession even when django.contrib.sessions is not in INSTALLED_APPS. """ + from django.db import models from django.utils.translation import gettext_lazy as _ diff --git a/django/contrib/sessions/locale/mr/LC_MESSAGES/django.mo b/django/contrib/sessions/locale/mr/LC_MESSAGES/django.mo index 183b3d14e9..0dc523de98 100644 Binary files a/django/contrib/sessions/locale/mr/LC_MESSAGES/django.mo and b/django/contrib/sessions/locale/mr/LC_MESSAGES/django.mo differ diff --git a/django/contrib/sessions/locale/mr/LC_MESSAGES/django.po b/django/contrib/sessions/locale/mr/LC_MESSAGES/django.po index 45b727e128..cefc17d300 100644 --- a/django/contrib/sessions/locale/mr/LC_MESSAGES/django.po +++ b/django/contrib/sessions/locale/mr/LC_MESSAGES/django.po @@ -1,14 +1,15 @@ # This file is distributed under the same license as the Django package. # # Translators: +# Omkar Parab, 2024 msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-01-17 11:07+0100\n" -"PO-Revision-Date: 2014-10-05 20:12+0000\n" -"Last-Translator: Jannis Leidel \n" -"Language-Team: Marathi (http://www.transifex.com/projects/p/django/language/" +"PO-Revision-Date: 2024-01-24 18:26+0000\n" +"Last-Translator: Omkar Parab, 2024\n" +"Language-Team: Marathi (http://app.transifex.com/django/django/language/" "mr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,19 +18,19 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgid "Sessions" -msgstr "" +msgstr "सत्रे" msgid "session key" -msgstr "" +msgstr "सत्राची किल्ली" msgid "session data" -msgstr "" +msgstr "सत्रातील डेटा" msgid "expire date" -msgstr "" +msgstr "संपण्याची दिनांक" msgid "session" -msgstr "" +msgstr "सत्र" msgid "sessions" -msgstr "" +msgstr "सत्रे" diff --git a/django/contrib/sites/locale/mr/LC_MESSAGES/django.mo b/django/contrib/sites/locale/mr/LC_MESSAGES/django.mo index 183b3d14e9..40f14123d2 100644 Binary files a/django/contrib/sites/locale/mr/LC_MESSAGES/django.mo and b/django/contrib/sites/locale/mr/LC_MESSAGES/django.mo differ diff --git a/django/contrib/sites/locale/mr/LC_MESSAGES/django.po b/django/contrib/sites/locale/mr/LC_MESSAGES/django.po index fc1e2a9358..3e041c141e 100644 --- a/django/contrib/sites/locale/mr/LC_MESSAGES/django.po +++ b/django/contrib/sites/locale/mr/LC_MESSAGES/django.po @@ -1,14 +1,15 @@ # This file is distributed under the same license as the Django package. # # Translators: +# Omkar Parab, 2024 msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-01-17 11:07+0100\n" -"PO-Revision-Date: 2014-10-05 20:12+0000\n" -"Last-Translator: Jannis Leidel \n" -"Language-Team: Marathi (http://www.transifex.com/projects/p/django/language/" +"PO-Revision-Date: 2024-01-24 18:05+0000\n" +"Last-Translator: Omkar Parab, 2024\n" +"Language-Team: Marathi (http://app.transifex.com/django/django/language/" "mr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -17,19 +18,19 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" msgid "Sites" -msgstr "" +msgstr "स्थळे" msgid "The domain name cannot contain any spaces or tabs." -msgstr "" +msgstr "डोमेन नावामध्ये कोणताही स्पेस किंवा टॅब असू शकत नाहीत." msgid "domain name" -msgstr "" +msgstr "डोमेनचे नाव" msgid "display name" -msgstr "" +msgstr "प्रदर्शन नाव" msgid "site" -msgstr "" +msgstr "स्थळ" msgid "sites" -msgstr "" +msgstr "स्थळे" diff --git a/django/contrib/staticfiles/views.py b/django/contrib/staticfiles/views.py index 83d04d4cec..3fb2677322 100644 --- a/django/contrib/staticfiles/views.py +++ b/django/contrib/staticfiles/views.py @@ -3,6 +3,7 @@ Views and functions for serving static files. These are only to be used during development, and SHOULD NOT be used in a production setting. """ + import os import posixpath diff --git a/django/core/cache/__init__.py b/django/core/cache/__init__.py index eb7fa5b2e9..444d958e68 100644 --- a/django/core/cache/__init__.py +++ b/django/core/cache/__init__.py @@ -12,6 +12,7 @@ object. See docs/topics/cache.txt for information on the public API. """ + from django.core import signals from django.core.cache.backends.base import ( BaseCache, diff --git a/django/core/exceptions.py b/django/core/exceptions.py index 2a2288ff4d..31c18ee7e1 100644 --- a/django/core/exceptions.py +++ b/django/core/exceptions.py @@ -1,6 +1,7 @@ """ Global Django exception and warning classes. """ + import operator from django.utils.hashable import make_hashable diff --git a/django/core/files/images.py b/django/core/files/images.py index 6a603f24fc..7c1532ac8f 100644 --- a/django/core/files/images.py +++ b/django/core/files/images.py @@ -3,6 +3,7 @@ Utility functions for handling images. Requires Pillow as you might imagine. """ + import struct import zlib diff --git a/django/core/files/locks.py b/django/core/files/locks.py index c0f471f87d..a7a7a22dce 100644 --- a/django/core/files/locks.py +++ b/django/core/files/locks.py @@ -16,6 +16,7 @@ Example Usage:: ... locks.lock(f, locks.LOCK_EX) ... f.write('Django') """ + import os __all__ = ("LOCK_EX", "LOCK_SH", "LOCK_NB", "lock", "unlock") diff --git a/django/core/files/uploadhandler.py b/django/core/files/uploadhandler.py index b6c185e8fc..ab86f7fede 100644 --- a/django/core/files/uploadhandler.py +++ b/django/core/files/uploadhandler.py @@ -1,6 +1,7 @@ """ Base file upload handler classes, and the built-in concrete subclasses """ + import os from io import BytesIO diff --git a/django/core/handlers/asgi.py b/django/core/handlers/asgi.py index 7b0086fb76..3af080599a 100644 --- a/django/core/handlers/asgi.py +++ b/django/core/handlers/asgi.py @@ -186,11 +186,18 @@ class ASGIHandler(base.BaseHandler): if request is None: body_file.close() await self.send_response(error_response, send) + await sync_to_async(error_response.close)() return async def process_request(request, send): response = await self.run_get_response(request) - await self.send_response(response, send) + try: + await self.send_response(response, send) + except asyncio.CancelledError: + # Client disconnected during send_response (ignore exception). + pass + + return response # Try to catch a disconnect while getting response. tasks = [ @@ -221,6 +228,14 @@ class ASGIHandler(base.BaseHandler): except asyncio.CancelledError: # Task re-raised the CancelledError as expected. pass + + try: + response = tasks[1].result() + except asyncio.CancelledError: + await signals.request_finished.asend(sender=self.__class__) + else: + await sync_to_async(response.close)() + body_file.close() async def listen_for_disconnect(self, receive): @@ -346,7 +361,6 @@ class ASGIHandler(base.BaseHandler): "more_body": not last, } ) - await sync_to_async(response.close, thread_sensitive=True)() @classmethod def chunk_bytes(cls, data): diff --git a/django/core/mail/__init__.py b/django/core/mail/__init__.py index dc63e8702c..676326697b 100644 --- a/django/core/mail/__init__.py +++ b/django/core/mail/__init__.py @@ -1,6 +1,7 @@ """ Tools for sending email. """ + from django.conf import settings # Imported for backwards compatibility and for the sake diff --git a/django/core/mail/backends/console.py b/django/core/mail/backends/console.py index ee5dd28504..2d7c778cc1 100644 --- a/django/core/mail/backends/console.py +++ b/django/core/mail/backends/console.py @@ -1,6 +1,7 @@ """ Email backend that writes messages to console instead of sending them. """ + import sys import threading diff --git a/django/core/mail/backends/locmem.py b/django/core/mail/backends/locmem.py index 344350e891..f5473da952 100644 --- a/django/core/mail/backends/locmem.py +++ b/django/core/mail/backends/locmem.py @@ -1,6 +1,7 @@ """ Backend for test environment. """ + import copy from django.core import mail diff --git a/django/core/mail/backends/smtp.py b/django/core/mail/backends/smtp.py index 1ee48269ae..6820148ac1 100644 --- a/django/core/mail/backends/smtp.py +++ b/django/core/mail/backends/smtp.py @@ -1,4 +1,5 @@ """SMTP email backend class.""" + import smtplib import ssl import threading diff --git a/django/core/management/base.py b/django/core/management/base.py index 631c761c00..4c47e1c6e5 100644 --- a/django/core/management/base.py +++ b/django/core/management/base.py @@ -2,6 +2,7 @@ Base classes for writing management commands (named commands which can be executed through ``django-admin`` or ``manage.py``). """ + import argparse import os import sys @@ -528,9 +529,11 @@ class BaseCommand: if issues: visible_issue_count += len(issues) formatted = ( - self.style.ERROR(str(e)) - if e.is_serious() - else self.style.WARNING(str(e)) + ( + self.style.ERROR(str(e)) + if e.is_serious() + else self.style.WARNING(str(e)) + ) for e in issues ) formatted = "\n".join(sorted(formatted)) @@ -543,11 +546,15 @@ class BaseCommand: if visible_issue_count: footer += "\n" footer += "System check identified %s (%s silenced)." % ( - "no issues" - if visible_issue_count == 0 - else "1 issue" - if visible_issue_count == 1 - else "%s issues" % visible_issue_count, + ( + "no issues" + if visible_issue_count == 0 + else ( + "1 issue" + if visible_issue_count == 1 + else "%s issues" % visible_issue_count + ) + ), len(all_issues) - visible_issue_count, ) diff --git a/django/core/management/commands/dumpdata.py b/django/core/management/commands/dumpdata.py index cc183517e3..01ff8974dd 100644 --- a/django/core/management/commands/dumpdata.py +++ b/django/core/management/commands/dumpdata.py @@ -219,7 +219,10 @@ class Command(BaseCommand): if count_only: yield queryset.order_by().count() else: - yield from queryset.iterator() + chunk_size = ( + 2000 if queryset._prefetch_related_lookups else None + ) + yield from queryset.iterator(chunk_size=chunk_size) try: self.stdout.ending = None diff --git a/django/core/serializers/base.py b/django/core/serializers/base.py index 20dffac05f..1fbca9244b 100644 --- a/django/core/serializers/base.py +++ b/django/core/serializers/base.py @@ -1,6 +1,7 @@ """ Module for abstract serializer/unserializer base classes. """ + from io import StringIO from django.core.exceptions import ObjectDoesNotExist diff --git a/django/core/serializers/xml_serializer.py b/django/core/serializers/xml_serializer.py index 3f9955aa23..16b69770f6 100644 --- a/django/core/serializers/xml_serializer.py +++ b/django/core/serializers/xml_serializer.py @@ -1,6 +1,7 @@ """ XML serializer. """ + import json from xml.dom import pulldom from xml.sax import handler diff --git a/django/db/backends/base/schema.py b/django/db/backends/base/schema.py index f01abf46b0..f442d290a0 100644 --- a/django/db/backends/base/schema.py +++ b/django/db/backends/base/schema.py @@ -412,10 +412,13 @@ class BaseDatabaseSchemaEditor: """Return the sql and params for the field's database default.""" from django.db.models.expressions import Value - sql = "%s" if isinstance(field.db_default, Value) else "(%s)" + db_default = field._db_default_expression + sql = ( + self._column_default_sql(field) if isinstance(db_default, Value) else "(%s)" + ) query = Query(model=field.model) compiler = query.get_compiler(connection=self.connection) - default_sql, params = compiler.compile(field.db_default) + default_sql, params = compiler.compile(db_default) if self.connection.features.requires_literal_defaults: # Some databases doesn't support parameterized defaults (Oracle, # SQLite). If this is the case, the individual schema backend @@ -724,9 +727,9 @@ class BaseDatabaseSchemaEditor: namespace, _ = split_identifier(model._meta.db_table) definition += " " + self.sql_create_column_inline_fk % { "name": self._fk_constraint_name(model, field, constraint_suffix), - "namespace": "%s." % self.quote_name(namespace) - if namespace - else "", + "namespace": ( + "%s." % self.quote_name(namespace) if namespace else "" + ), "column": self.quote_name(field.column), "to_table": self.quote_name(to_table), "to_column": self.quote_name(to_column), @@ -1636,6 +1639,14 @@ class BaseDatabaseSchemaEditor: ): old_kwargs.pop("to", None) new_kwargs.pop("to", None) + # db_default can take many form but result in the same SQL. + if ( + old_kwargs.get("db_default") + and new_kwargs.get("db_default") + and self.db_default_sql(old_field) == self.db_default_sql(new_field) + ): + old_kwargs.pop("db_default") + new_kwargs.pop("db_default") return self.quote_name(old_field.column) != self.quote_name( new_field.column ) or (old_path, old_args, old_kwargs) != (new_path, new_args, new_kwargs) @@ -1919,11 +1930,13 @@ class BaseDatabaseSchemaEditor: """Return all constraint names matching the columns and conditions.""" if column_names is not None: column_names = [ - self.connection.introspection.identifier_converter( - truncate_name(name, self.connection.ops.max_name_length()) + ( + self.connection.introspection.identifier_converter( + truncate_name(name, self.connection.ops.max_name_length()) + ) + if self.connection.features.truncates_names + else self.connection.introspection.identifier_converter(name) ) - if self.connection.features.truncates_names - else self.connection.introspection.identifier_converter(name) for name in column_names ] with self.connection.cursor() as cursor: diff --git a/django/db/backends/ddl_references.py b/django/db/backends/ddl_references.py index 412d07a993..75787ef8ab 100644 --- a/django/db/backends/ddl_references.py +++ b/django/db/backends/ddl_references.py @@ -2,6 +2,7 @@ Helpers to manipulate deferred DDL statements that might need to be adjusted or discarded within when executing a migration. """ + from copy import deepcopy diff --git a/django/db/backends/mysql/base.py b/django/db/backends/mysql/base.py index f36139881d..b8d2d09c94 100644 --- a/django/db/backends/mysql/base.py +++ b/django/db/backends/mysql/base.py @@ -3,6 +3,7 @@ MySQL database backend for Django. Requires mysqlclient: https://pypi.org/project/mysqlclient/ """ + from django.core.exceptions import ImproperlyConfigured from django.db import IntegrityError from django.db.backends import utils as backend_utils diff --git a/django/db/backends/oracle/base.py b/django/db/backends/oracle/base.py index 2d91468d25..f626c4d2d4 100644 --- a/django/db/backends/oracle/base.py +++ b/django/db/backends/oracle/base.py @@ -3,6 +3,7 @@ Oracle database backend for Django. Requires oracledb: https://oracle.github.io/python-oracledb/ """ + import datetime import decimal import os diff --git a/django/db/backends/oracle/creation.py b/django/db/backends/oracle/creation.py index df773bff8c..b0a5177728 100644 --- a/django/db/backends/oracle/creation.py +++ b/django/db/backends/oracle/creation.py @@ -133,20 +133,20 @@ class DatabaseCreation(BaseDatabaseCreation): credentials in the SAVED_USER/SAVED_PASSWORD key in the settings dict. """ real_settings = settings.DATABASES[self.connection.alias] - real_settings["SAVED_USER"] = self.connection.settings_dict[ - "SAVED_USER" - ] = self.connection.settings_dict["USER"] + real_settings["SAVED_USER"] = self.connection.settings_dict["SAVED_USER"] = ( + self.connection.settings_dict["USER"] + ) real_settings["SAVED_PASSWORD"] = self.connection.settings_dict[ "SAVED_PASSWORD" ] = self.connection.settings_dict["PASSWORD"] real_test_settings = real_settings["TEST"] test_settings = self.connection.settings_dict["TEST"] - real_test_settings["USER"] = real_settings["USER"] = test_settings[ - "USER" - ] = self.connection.settings_dict["USER"] = parameters["user"] - real_settings["PASSWORD"] = self.connection.settings_dict[ - "PASSWORD" - ] = parameters["password"] + real_test_settings["USER"] = real_settings["USER"] = test_settings["USER"] = ( + self.connection.settings_dict["USER"] + ) = parameters["user"] + real_settings["PASSWORD"] = self.connection.settings_dict["PASSWORD"] = ( + parameters["password"] + ) def set_as_test_mirror(self, primary_settings_dict): """ diff --git a/django/db/backends/postgresql/base.py b/django/db/backends/postgresql/base.py index cba89e0cc7..8349d8f310 100644 --- a/django/db/backends/postgresql/base.py +++ b/django/db/backends/postgresql/base.py @@ -226,9 +226,11 @@ class DatabaseWrapper(BaseDatabaseWrapper): server_side_binding = conn_params.pop("server_side_binding", None) conn_params.setdefault( "cursor_factory", - ServerBindingCursor - if is_psycopg3 and server_side_binding is True - else Cursor, + ( + ServerBindingCursor + if is_psycopg3 and server_side_binding is True + else Cursor + ), ) if settings_dict["USER"]: conn_params["user"] = settings_dict["USER"] diff --git a/django/db/backends/postgresql/schema.py b/django/db/backends/postgresql/schema.py index 5dc93a27d0..842830be30 100644 --- a/django/db/backends/postgresql/schema.py +++ b/django/db/backends/postgresql/schema.py @@ -267,9 +267,9 @@ class DatabaseSchemaEditor(BaseDatabaseSchemaEditor): % { "column": self.quote_name(new_field.column), "type": new_type, - "collation": " " + self._collate_sql(new_collation) - if new_collation - else "", + "collation": ( + " " + self._collate_sql(new_collation) if new_collation else "" + ), }, [], ) diff --git a/django/db/backends/sqlite3/_functions.py b/django/db/backends/sqlite3/_functions.py index 7e86950f7d..0171b60f38 100644 --- a/django/db/backends/sqlite3/_functions.py +++ b/django/db/backends/sqlite3/_functions.py @@ -1,6 +1,7 @@ """ Implementations of SQL functions for SQLite. """ + import functools import random import statistics diff --git a/django/db/backends/sqlite3/base.py b/django/db/backends/sqlite3/base.py index 08de0bad5a..8e17ea3d44 100644 --- a/django/db/backends/sqlite3/base.py +++ b/django/db/backends/sqlite3/base.py @@ -1,6 +1,7 @@ """ SQLite backend for the sqlite3 module in the standard library. """ + import datetime import decimal import warnings @@ -134,6 +135,8 @@ class DatabaseWrapper(BaseDatabaseWrapper): "iendswith": r"LIKE '%%' || UPPER({}) ESCAPE '\'", } + transaction_modes = frozenset(["DEFERRED", "EXCLUSIVE", "IMMEDIATE"]) + Database = Database SchemaEditorClass = DatabaseSchemaEditor # Classes instantiated in __init__(). @@ -170,6 +173,20 @@ class DatabaseWrapper(BaseDatabaseWrapper): RuntimeWarning, ) kwargs.update({"check_same_thread": False, "uri": True}) + transaction_mode = kwargs.pop("transaction_mode", None) + if ( + transaction_mode is not None + and transaction_mode.upper() not in self.transaction_modes + ): + allowed_transaction_modes = ", ".join( + [f"{mode!r}" for mode in sorted(self.transaction_modes)] + ) + raise ImproperlyConfigured( + f"settings.DATABASES[{self.alias!r}]['OPTIONS']['transaction_mode'] " + f"is improperly configured to '{transaction_mode}'. Use one of " + f"{allowed_transaction_modes}, or None." + ) + self.transaction_mode = transaction_mode.upper() if transaction_mode else None return kwargs def get_database_version(self): @@ -297,7 +314,10 @@ class DatabaseWrapper(BaseDatabaseWrapper): Staying in autocommit mode works around a bug of sqlite3 that breaks savepoints when autocommit is disabled. """ - self.cursor().execute("BEGIN") + if self.transaction_mode is None: + self.cursor().execute("BEGIN") + else: + self.cursor().execute(f"BEGIN {self.transaction_mode}") def is_in_memory_db(self): return self.creation.is_in_memory_db(self.settings_dict["NAME"]) diff --git a/django/db/migrations/autodetector.py b/django/db/migrations/autodetector.py index 6b01403d18..f000d9fcaa 100644 --- a/django/db/migrations/autodetector.py +++ b/django/db/migrations/autodetector.py @@ -620,11 +620,12 @@ class MigrationAutodetector: rem_model_state.app_label, rem_model_state.name_lower, ) - self.renamed_models_rel[ - renamed_models_rel_key - ] = "%s.%s" % ( - model_state.app_label, - model_state.name_lower, + self.renamed_models_rel[renamed_models_rel_key] = ( + "%s.%s" + % ( + model_state.app_label, + model_state.name_lower, + ) ) self.old_model_keys.remove((rem_app_label, rem_model_name)) self.old_model_keys.add((app_label, model_name)) @@ -1058,9 +1059,9 @@ class MigrationAutodetector: (rem_app_label, rem_model_name, rem_field_name) ) old_field_keys.add((app_label, model_name, field_name)) - self.renamed_fields[ - app_label, model_name, field_name - ] = rem_field_name + self.renamed_fields[app_label, model_name, field_name] = ( + rem_field_name + ) break def generate_renamed_fields(self): diff --git a/django/db/migrations/loader.py b/django/db/migrations/loader.py index 81dcd06e04..50445f3101 100644 --- a/django/db/migrations/loader.py +++ b/django/db/migrations/loader.py @@ -131,11 +131,11 @@ class MigrationLoader: "Migration %s in app %s has no Migration class" % (migration_name, app_config.label) ) - self.disk_migrations[ - app_config.label, migration_name - ] = migration_module.Migration( - migration_name, - app_config.label, + self.disk_migrations[app_config.label, migration_name] = ( + migration_module.Migration( + migration_name, + app_config.label, + ) ) def get_migration(self, app_label, name_prefix): diff --git a/django/db/migrations/operations/models.py b/django/db/migrations/operations/models.py index b24a8f6557..38c68f3ff3 100644 --- a/django/db/migrations/operations/models.py +++ b/django/db/migrations/operations/models.py @@ -56,11 +56,11 @@ class CreateModel(ModelOperation): _check_for_duplicates( "bases", ( - base._meta.label_lower - if hasattr(base, "_meta") - else base.lower() - if isinstance(base, str) - else base + ( + base._meta.label_lower + if hasattr(base, "_meta") + else base.lower() if isinstance(base, str) else base + ) for base in self.bases ), ) diff --git a/django/db/migrations/state.py b/django/db/migrations/state.py index 5ffd7fc07a..42a2c80a5e 100644 --- a/django/db/migrations/state.py +++ b/django/db/migrations/state.py @@ -524,11 +524,11 @@ class ProjectState: if model_state.options.get("proxy"): proxy_models[model_key] = model_state # Find a concrete model for the proxy. - concrete_models_mapping[ - model_key - ] = self._find_concrete_model_from_proxy( - proxy_models, - model_state, + concrete_models_mapping[model_key] = ( + self._find_concrete_model_from_proxy( + proxy_models, + model_state, + ) ) else: concrete_models_mapping[model_key] = model_key diff --git a/django/db/models/aggregates.py b/django/db/models/aggregates.py index a778cd413b..0cbffacd1b 100644 --- a/django/db/models/aggregates.py +++ b/django/db/models/aggregates.py @@ -1,6 +1,7 @@ """ Classes to represent the definitions of aggregate functions. """ + from django.core.exceptions import FieldError, FullResultSet from django.db.models.expressions import Case, Func, Star, Value, When from django.db.models.fields import IntegerField diff --git a/django/db/models/base.py b/django/db/models/base.py index 61925f63ea..c1f78d0632 100644 --- a/django/db/models/base.py +++ b/django/db/models/base.py @@ -2265,9 +2265,11 @@ class Model(AltersData, metaclass=ModelBase): opts = cls._meta valid_fields = set( chain.from_iterable( - (f.name, f.attname) - if not (f.auto_created and not f.concrete) - else (f.field.related_query_name(),) + ( + (f.name, f.attname) + if not (f.auto_created and not f.concrete) + else (f.field.related_query_name(),) + ) for f in chain(opts.fields, opts.related_objects) ) ) diff --git a/django/db/models/constants.py b/django/db/models/constants.py index a0c99c95fc..cec1b9b90f 100644 --- a/django/db/models/constants.py +++ b/django/db/models/constants.py @@ -1,6 +1,7 @@ """ Constants used across the ORM in general. """ + from enum import Enum # Separator used to split filter strings apart. diff --git a/django/db/models/expressions.py b/django/db/models/expressions.py index f25ad1af12..6d329ae85d 100644 --- a/django/db/models/expressions.py +++ b/django/db/models/expressions.py @@ -204,9 +204,11 @@ class BaseExpression: def _parse_expressions(self, *expressions): return [ - arg - if hasattr(arg, "resolve_expression") - else (F(arg) if isinstance(arg, str) else Value(arg)) + ( + arg + if hasattr(arg, "resolve_expression") + else (F(arg) if isinstance(arg, str) else Value(arg)) + ) for arg in expressions ] @@ -285,9 +287,11 @@ class BaseExpression: c.is_summary = summarize c.set_source_expressions( [ - expr.resolve_expression(query, allow_joins, reuse, summarize) - if expr - else None + ( + expr.resolve_expression(query, allow_joins, reuse, summarize) + if expr + else None + ) for expr in c.get_source_expressions() ] ) @@ -366,22 +370,16 @@ class BaseExpression: field = self.output_field internal_type = field.get_internal_type() if internal_type == "FloatField": - return ( - lambda value, expression, connection: None - if value is None - else float(value) + return lambda value, expression, connection: ( + None if value is None else float(value) ) elif internal_type.endswith("IntegerField"): - return ( - lambda value, expression, connection: None - if value is None - else int(value) + return lambda value, expression, connection: ( + None if value is None else int(value) ) elif internal_type == "DecimalField": - return ( - lambda value, expression, connection: None - if value is None - else Decimal(value) + return lambda value, expression, connection: ( + None if value is None else Decimal(value) ) return self._convert_value_noop @@ -432,9 +430,11 @@ class BaseExpression: clone = self.copy() clone.set_source_expressions( [ - F(f"{prefix}{expr.name}") - if isinstance(expr, F) - else expr.prefix_references(prefix) + ( + F(f"{prefix}{expr.name}") + if isinstance(expr, F) + else expr.prefix_references(prefix) + ) for expr in self.get_source_expressions() ] ) diff --git a/django/db/models/fields/__init__.py b/django/db/models/fields/__init__.py index 5186f0c414..cc5025af84 100644 --- a/django/db/models/fields/__init__.py +++ b/django/db/models/fields/__init__.py @@ -219,12 +219,6 @@ class Field(RegisterLookupMixin): self.remote_field = rel self.is_relation = self.remote_field is not None self.default = default - if db_default is not NOT_PROVIDED and not hasattr( - db_default, "resolve_expression" - ): - from django.db.models.expressions import Value - - db_default = Value(db_default) self.db_default = db_default self.editable = editable self.serialize = serialize @@ -408,7 +402,7 @@ class Field(RegisterLookupMixin): continue connection = connections[db] - if not getattr(self.db_default, "allowed_default", False) and ( + if not getattr(self._db_default_expression, "allowed_default", False) and ( connection.features.supports_expression_defaults ): msg = f"{self.db_default} cannot be used in db_default." @@ -994,7 +988,7 @@ class Field(RegisterLookupMixin): from django.db.models.expressions import DatabaseDefault if isinstance(value, DatabaseDefault): - return self.db_default + return self._db_default_expression return value def get_prep_value(self, value): @@ -1047,6 +1041,17 @@ class Field(RegisterLookupMixin): return return_None return str # return empty string + @cached_property + def _db_default_expression(self): + db_default = self.db_default + if db_default is not NOT_PROVIDED and not hasattr( + db_default, "resolve_expression" + ): + from django.db.models.expressions import Value + + db_default = Value(db_default, self) + return db_default + def get_choices( self, include_blank=True, diff --git a/django/db/models/fields/related_descriptors.py b/django/db/models/fields/related_descriptors.py index f5a81ab49c..62ddfc60b3 100644 --- a/django/db/models/fields/related_descriptors.py +++ b/django/db/models/fields/related_descriptors.py @@ -62,6 +62,7 @@ and two directions (forward and reverse) for a total of six combinations. If you're looking for ``ForwardManyToManyDescriptor`` or ``ReverseManyToManyDescriptor``, use ``ManyToManyDescriptor`` instead. """ + import warnings from asgiref.sync import sync_to_async diff --git a/django/db/models/fields/reverse_related.py b/django/db/models/fields/reverse_related.py index c74e92ba89..144cce6142 100644 --- a/django/db/models/fields/reverse_related.py +++ b/django/db/models/fields/reverse_related.py @@ -8,6 +8,7 @@ in the ``remote_field`` attribute of the field. They also act as reverse fields for the purposes of the Meta API because they're the closest concept currently available. """ + import warnings from django.core import exceptions diff --git a/django/db/models/functions/comparison.py b/django/db/models/functions/comparison.py index ae41f1da95..6db81d6f46 100644 --- a/django/db/models/functions/comparison.py +++ b/django/db/models/functions/comparison.py @@ -1,4 +1,5 @@ """Database functions that do comparisons or type conversions.""" + from django.db import NotSupportedError from django.db.models.expressions import Func, Value from django.db.models.fields import TextField diff --git a/django/db/models/functions/datetime.py b/django/db/models/functions/datetime.py index fca211e065..9937e79f6f 100644 --- a/django/db/models/functions/datetime.py +++ b/django/db/models/functions/datetime.py @@ -318,9 +318,11 @@ class TruncBase(TimezoneMixin, Transform): "Cannot truncate DateField '%s' to %s." % ( field.name, - output_field.__class__.__name__ - if has_explicit_output_field - else "DateTimeField", + ( + output_field.__class__.__name__ + if has_explicit_output_field + else "DateTimeField" + ), ) ) elif isinstance(field, TimeField) and ( @@ -331,9 +333,11 @@ class TruncBase(TimezoneMixin, Transform): "Cannot truncate TimeField '%s' to %s." % ( field.name, - output_field.__class__.__name__ - if has_explicit_output_field - else "DateTimeField", + ( + output_field.__class__.__name__ + if has_explicit_output_field + else "DateTimeField" + ), ) ) return copy diff --git a/django/db/models/functions/math.py b/django/db/models/functions/math.py index 460143ba5a..5fa4654a84 100644 --- a/django/db/models/functions/math.py +++ b/django/db/models/functions/math.py @@ -47,9 +47,11 @@ class ATan2(NumericOutputFieldMixin, Func): clone = self.copy() clone.set_source_expressions( [ - Cast(expression, FloatField()) - if isinstance(expression.output_field, IntegerField) - else expression + ( + Cast(expression, FloatField()) + if isinstance(expression.output_field, IntegerField) + else expression + ) for expression in self.get_source_expressions()[::-1] ] ) diff --git a/django/db/models/functions/mixins.py b/django/db/models/functions/mixins.py index 661eee1c13..0f6f0a2aa8 100644 --- a/django/db/models/functions/mixins.py +++ b/django/db/models/functions/mixins.py @@ -14,9 +14,11 @@ class FixDecimalInputMixin: clone = self.copy() clone.set_source_expressions( [ - Cast(expression, output_field) - if isinstance(expression.output_field, FloatField) - else expression + ( + Cast(expression, output_field) + if isinstance(expression.output_field, FloatField) + else expression + ) for expression in self.get_source_expressions() ] ) diff --git a/django/db/models/functions/text.py b/django/db/models/functions/text.py index 392061880c..df826ffdb5 100644 --- a/django/db/models/functions/text.py +++ b/django/db/models/functions/text.py @@ -89,9 +89,11 @@ class ConcatPair(Func): c = self.copy() c.set_source_expressions( [ - expression - if isinstance(expression.output_field, (CharField, TextField)) - else Cast(expression, TextField()) + ( + expression + if isinstance(expression.output_field, (CharField, TextField)) + else Cast(expression, TextField()) + ) for expression in c.get_source_expressions() ] ) diff --git a/django/db/models/indexes.py b/django/db/models/indexes.py index b5451f9e24..0ddfefec38 100644 --- a/django/db/models/indexes.py +++ b/django/db/models/indexes.py @@ -196,9 +196,11 @@ class Index: "" if not self.fields else " fields=%s" % repr(self.fields), "" if not self.expressions else " expressions=%s" % repr(self.expressions), "" if not self.name else " name=%s" % repr(self.name), - "" - if self.db_tablespace is None - else " db_tablespace=%s" % repr(self.db_tablespace), + ( + "" + if self.db_tablespace is None + else " db_tablespace=%s" % repr(self.db_tablespace) + ), "" if self.condition is None else " condition=%s" % self.condition, "" if not self.include else " include=%s" % repr(self.include), "" if not self.opclasses else " opclasses=%s" % repr(self.opclasses), diff --git a/django/db/models/lookups.py b/django/db/models/lookups.py index 4a6e2b3241..139875eed5 100644 --- a/django/db/models/lookups.py +++ b/django/db/models/lookups.py @@ -273,9 +273,11 @@ class FieldGetDbPrepValueMixin: return ( "%s", [ - v - if hasattr(v, "as_sql") - else get_db_prep_value(v, connection, prepared=True) + ( + v + if hasattr(v, "as_sql") + else get_db_prep_value(v, connection, prepared=True) + ) for v in value ], ) diff --git a/django/db/models/query.py b/django/db/models/query.py index 61d4002000..b9e2d1f7e5 100644 --- a/django/db/models/query.py +++ b/django/db/models/query.py @@ -109,9 +109,11 @@ class ModelIterable(BaseIterable): related_objs, operator.attrgetter( *[ - field.attname - if from_field == "self" - else queryset.model._meta.get_field(from_field).attname + ( + field.attname + if from_field == "self" + else queryset.model._meta.get_field(from_field).attname + ) for from_field in field.from_fields ] ), @@ -1391,9 +1393,7 @@ class QuerySet(AltersData): clone._iterable_class = ( NamedValuesListIterable if named - else FlatValuesListIterable - if flat - else ValuesListIterable + else FlatValuesListIterable if flat else ValuesListIterable ) return clone @@ -1659,9 +1659,11 @@ class QuerySet(AltersData): if names is None: names = set( chain.from_iterable( - (field.name, field.attname) - if hasattr(field, "attname") - else (field.name,) + ( + (field.name, field.attname) + if hasattr(field, "attname") + else (field.name,) + ) for field in self.model._meta.get_fields() ) ) diff --git a/django/db/models/query_utils.py b/django/db/models/query_utils.py index 4f3358eb8d..e1041b9653 100644 --- a/django/db/models/query_utils.py +++ b/django/db/models/query_utils.py @@ -5,6 +5,7 @@ Factored out from django.db.models.query to avoid making the main module very large and/or so that they can be used by other modules without getting into circular import difficulties. """ + import functools import inspect import logging diff --git a/django/db/models/sql/compiler.py b/django/db/models/sql/compiler.py index 10338259d5..9a0d2eb4e7 100644 --- a/django/db/models/sql/compiler.py +++ b/django/db/models/sql/compiler.py @@ -1224,9 +1224,9 @@ class SQLCompiler: "field": f, "reverse": False, "local_setter": f.set_cached_value, - "remote_setter": f.remote_field.set_cached_value - if f.unique - else lambda x, y: None, + "remote_setter": ( + f.remote_field.set_cached_value if f.unique else lambda x, y: None + ), "from_parent": False, } related_klass_infos.append(klass_info) diff --git a/django/db/models/sql/datastructures.py b/django/db/models/sql/datastructures.py index 5eaa8c25f6..7c0c14a46e 100644 --- a/django/db/models/sql/datastructures.py +++ b/django/db/models/sql/datastructures.py @@ -2,6 +2,7 @@ Useful auxiliary data structures for query construction. Not useful outside the SQL domain. """ + import warnings from django.core.exceptions import FullResultSet diff --git a/django/db/models/sql/query.py b/django/db/models/sql/query.py index ce4fafb1e2..5100869b34 100644 --- a/django/db/models/sql/query.py +++ b/django/db/models/sql/query.py @@ -6,6 +6,7 @@ themselves do not have to (and could be backed by things other than SQL databases). The abstraction barrier only works one way: this module has to know all about the internals of models in order to get the information it needs. """ + import copy import difflib import functools @@ -90,6 +91,8 @@ def get_children_from_q(q): def get_child_with_renamed_prefix(prefix, replacement, child): + from django.db.models.query import QuerySet + if isinstance(child, Node): return rename_prefix_from_q(prefix, replacement, child) if isinstance(child, tuple): @@ -104,6 +107,14 @@ def get_child_with_renamed_prefix(prefix, replacement, child): child = child.copy() if child.name.startswith(prefix + LOOKUP_SEP): child.name = child.name.replace(prefix, replacement, 1) + elif isinstance(child, QuerySet): + # QuerySet may contain OuterRef() references which cannot work properly + # without repointing to the filtered annotation and will spawn a + # different JOIN. Always raise ValueError instead of providing partial + # support in other cases. + raise ValueError( + "Passing a QuerySet within a FilteredRelation is not supported." + ) elif hasattr(child, "resolve_expression"): child = child.copy() child.set_source_expressions( diff --git a/django/db/models/sql/where.py b/django/db/models/sql/where.py index 8423fcb528..0fded5cce3 100644 --- a/django/db/models/sql/where.py +++ b/django/db/models/sql/where.py @@ -1,6 +1,7 @@ """ Code to manage the creation and SQL rendering of 'where' constraints. """ + import operator from functools import reduce diff --git a/django/forms/models.py b/django/forms/models.py index 6a2608c0b3..cd6986d72a 100644 --- a/django/forms/models.py +++ b/django/forms/models.py @@ -2,6 +2,7 @@ Helper functions for creating Form classes from Django models and database field objects. """ + from itertools import chain from django.core.exceptions import ( @@ -830,9 +831,12 @@ class BaseModelFormSet(BaseFormSet, AltersData): ) # Reduce Model instances to their primary key values row_data = tuple( - d._get_pk_val() if hasattr(d, "_get_pk_val") - # Prevent "unhashable type: list" errors later on. - else tuple(d) if isinstance(d, list) else d + ( + d._get_pk_val() + if hasattr(d, "_get_pk_val") + # Prevent "unhashable type: list" errors later on. + else tuple(d) if isinstance(d, list) else d + ) for d in row_data ) if row_data and None not in row_data: diff --git a/django/forms/widgets.py b/django/forms/widgets.py index 2c734052d5..4fae110d5e 100644 --- a/django/forms/widgets.py +++ b/django/forms/widgets.py @@ -101,9 +101,11 @@ class Media: def render_js(self): return [ - path.__html__() - if hasattr(path, "__html__") - else format_html('', self.absolute_path(path)) + ( + path.__html__() + if hasattr(path, "__html__") + else format_html('', self.absolute_path(path)) + ) for path in self._js ] @@ -113,12 +115,14 @@ class Media: media = sorted(self._css) return chain.from_iterable( [ - path.__html__() - if hasattr(path, "__html__") - else format_html( - '', - self.absolute_path(path), - medium, + ( + path.__html__() + if hasattr(path, "__html__") + else format_html( + '', + self.absolute_path(path), + medium, + ) ) for path in self._css[medium] ] diff --git a/django/http/multipartparser.py b/django/http/multipartparser.py index dfd406c35e..58b8546be7 100644 --- a/django/http/multipartparser.py +++ b/django/http/multipartparser.py @@ -4,6 +4,7 @@ Multi-part parsing for file uploads. Exposes one class, ``MultiPartParser``, which feeds chunks of uploaded data to file upload handlers for processing. """ + import base64 import binascii import collections diff --git a/django/http/request.py b/django/http/request.py index fe15a173be..4c27d576ba 100644 --- a/django/http/request.py +++ b/django/http/request.py @@ -170,9 +170,11 @@ class HttpRequest: return "%s%s%s" % ( escape_uri_path(path), "/" if force_append_slash and not path.endswith("/") else "", - ("?" + iri_to_uri(self.META.get("QUERY_STRING", ""))) - if self.META.get("QUERY_STRING", "") - else "", + ( + ("?" + iri_to_uri(self.META.get("QUERY_STRING", ""))) + if self.META.get("QUERY_STRING", "") + else "" + ), ) def get_signed_cookie(self, key, default=RAISE_ERROR, salt="", max_age=None): diff --git a/django/middleware/cache.py b/django/middleware/cache.py index 0fdffe1bbe..196b1995ff 100644 --- a/django/middleware/cache.py +++ b/django/middleware/cache.py @@ -43,6 +43,8 @@ More details about how the caching works: """ +import time + from django.conf import settings from django.core.cache import DEFAULT_CACHE_ALIAS, caches from django.utils.cache import ( @@ -53,6 +55,7 @@ from django.utils.cache import ( patch_response_headers, ) from django.utils.deprecation import MiddlewareMixin +from django.utils.http import parse_http_date_safe class UpdateCacheMiddleware(MiddlewareMixin): @@ -171,6 +174,15 @@ class FetchFromCacheMiddleware(MiddlewareMixin): request._cache_update_cache = True return None # No cache information available, need to rebuild. + # Derive the age estimation of the cached response. + if (max_age_seconds := get_max_age(response)) is not None and ( + expires_timestamp := parse_http_date_safe(response["Expires"]) + ) is not None: + now_timestamp = int(time.time()) + remaining_seconds = expires_timestamp - now_timestamp + # Use Age: 0 if local clock got turned back. + response["Age"] = max(0, max_age_seconds - remaining_seconds) + # hit, return cached response request._cache_update_cache = False return response diff --git a/django/middleware/csrf.py b/django/middleware/csrf.py index 2c0d2cc120..f7943494ba 100644 --- a/django/middleware/csrf.py +++ b/django/middleware/csrf.py @@ -4,6 +4,7 @@ Cross Site Request Forgery Middleware. This module provides a middleware that implements protection against request forgeries from other sites. """ + import logging import string from collections import defaultdict diff --git a/django/shortcuts.py b/django/shortcuts.py index 822e6107ac..b8b5be1f5f 100644 --- a/django/shortcuts.py +++ b/django/shortcuts.py @@ -3,6 +3,7 @@ This module collects helper functions and classes that "span" multiple levels of MVC. In other words, these functions/classes introduce controlled coupling for convenience's sake. """ + from django.http import ( Http404, HttpResponse, diff --git a/django/template/defaultfilters.py b/django/template/defaultfilters.py index 1e1bdbc5c9..a08ce2710d 100644 --- a/django/template/defaultfilters.py +++ b/django/template/defaultfilters.py @@ -1,4 +1,5 @@ """Default variable filters.""" + import random as random_module import re import types diff --git a/django/template/defaulttags.py b/django/template/defaulttags.py index 40c2917f56..dd0a6b3579 100644 --- a/django/template/defaulttags.py +++ b/django/template/defaulttags.py @@ -1,4 +1,5 @@ """Default tags used by the template system, available to all templates.""" + import re import sys import warnings diff --git a/django/template/engine.py b/django/template/engine.py index f2215c0e4e..9882d3a16d 100644 --- a/django/template/engine.py +++ b/django/template/engine.py @@ -70,9 +70,11 @@ class Engine: self.__class__.__qualname__, "" if not self.dirs else " dirs=%s" % repr(self.dirs), self.app_dirs, - "" - if not self.context_processors - else " context_processors=%s" % repr(self.context_processors), + ( + "" + if not self.context_processors + else " context_processors=%s" % repr(self.context_processors) + ), self.debug, repr(self.loaders), repr(self.string_if_invalid), diff --git a/django/template/smartif.py b/django/template/smartif.py index 5b15a5a476..0a917c2aaa 100644 --- a/django/template/smartif.py +++ b/django/template/smartif.py @@ -1,6 +1,7 @@ """ Parser and utilities for the smart 'if' tag """ + # Using a simple top down parser, as described here: # http://effbot.org/zone/simple-top-down-parsing.htm. # 'led' = left denotation diff --git a/django/test/html.py b/django/test/html.py index 6da79d6fb2..33d1d4dafb 100644 --- a/django/test/html.py +++ b/django/test/html.py @@ -1,4 +1,5 @@ """Compare two HTML documents.""" + import html from html.parser import HTMLParser diff --git a/django/urls/conf.py b/django/urls/conf.py index 40708028a3..bb61063d77 100644 --- a/django/urls/conf.py +++ b/django/urls/conf.py @@ -1,4 +1,5 @@ """Functions for use in URLsconfs.""" + from functools import partial from importlib import import_module diff --git a/django/urls/resolvers.py b/django/urls/resolvers.py index 89ae18694c..3607c84228 100644 --- a/django/urls/resolvers.py +++ b/django/urls/resolvers.py @@ -5,6 +5,7 @@ URLResolver is the main class here. Its resolve() method takes a URL (as a string) and returns a ResolverMatch object which provides access to all attributes of the resolved URL match. """ + import functools import inspect import re @@ -91,9 +92,11 @@ class ResolverMatch: self.app_names, self.namespaces, self.route, - f", captured_kwargs={self.captured_kwargs!r}" - if self.captured_kwargs - else "", + ( + f", captured_kwargs={self.captured_kwargs!r}" + if self.captured_kwargs + else "" + ), f", extra_kwargs={self.extra_kwargs!r}" if self.extra_kwargs else "", ) ) diff --git a/django/utils/archive.py b/django/utils/archive.py index 71ec2d0015..56f34c0038 100644 --- a/django/utils/archive.py +++ b/django/utils/archive.py @@ -21,6 +21,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """ + import os import shutil import stat diff --git a/django/utils/cache.py b/django/utils/cache.py index cf797d0279..3b014fbe51 100644 --- a/django/utils/cache.py +++ b/django/utils/cache.py @@ -14,6 +14,7 @@ cache keys to prevent delivery of wrong content. An example: i18n middleware would need to distinguish caches by the "Accept-language" header. """ + import time from collections import defaultdict from hashlib import md5 diff --git a/django/utils/crypto.py b/django/utils/crypto.py index 1c0e7001c6..5134b854d6 100644 --- a/django/utils/crypto.py +++ b/django/utils/crypto.py @@ -1,6 +1,7 @@ """ Django's standard crypto functions and utilities. """ + import hashlib import hmac import secrets diff --git a/django/utils/dateformat.py b/django/utils/dateformat.py index a6c315e4cf..a3274b901c 100644 --- a/django/utils/dateformat.py +++ b/django/utils/dateformat.py @@ -10,6 +10,7 @@ Usage: 7th October 2003 11:39 >>> """ + import calendar from datetime import date, datetime, time from email.utils import format_datetime as format_datetime_rfc5322 diff --git a/django/utils/deconstruct.py b/django/utils/deconstruct.py index f8754c1974..2e5463a651 100644 --- a/django/utils/deconstruct.py +++ b/django/utils/deconstruct.py @@ -42,9 +42,11 @@ def deconstructible(*args, path=None): "#serializing-values" % (name, module_name, get_docs_version()) ) return ( - path - if path and type(obj) is klass - else f"{obj.__class__.__module__}.{name}", + ( + path + if path and type(obj) is klass + else f"{obj.__class__.__module__}.{name}" + ), obj._constructor_args[0], obj._constructor_args[1], ) diff --git a/django/utils/feedgenerator.py b/django/utils/feedgenerator.py index 31ca9a2db9..3bd456ca68 100644 --- a/django/utils/feedgenerator.py +++ b/django/utils/feedgenerator.py @@ -21,6 +21,7 @@ Sample usage: For definitions of the different versions of RSS, see: https://web.archive.org/web/20110718035220/http://diveintomark.org/archives/2004/02/04/incompatible-rss """ + import datetime import email from io import StringIO diff --git a/django/utils/jslex.py b/django/utils/jslex.py index 93a1a2e972..fc46a686c7 100644 --- a/django/utils/jslex.py +++ b/django/utils/jslex.py @@ -1,4 +1,5 @@ """JsLex: a lexer for JavaScript""" + # Originally from https://bitbucket.org/ned/jslex import re diff --git a/django/utils/regex_helper.py b/django/utils/regex_helper.py index 9ee82e1a9b..b71298e399 100644 --- a/django/utils/regex_helper.py +++ b/django/utils/regex_helper.py @@ -5,6 +5,7 @@ Used internally by Django and not intended for external use. This is not, and is not intended to be, a complete reg-exp decompiler. It should be good enough for a large class of URLS, however. """ + import re from django.utils.functional import SimpleLazyObject diff --git a/django/utils/translation/__init__.py b/django/utils/translation/__init__.py index 0b3f78e486..0618f02159 100644 --- a/django/utils/translation/__init__.py +++ b/django/utils/translation/__init__.py @@ -1,6 +1,7 @@ """ Internationalization support. """ + from contextlib import ContextDecorator from decimal import ROUND_UP, Decimal diff --git a/django/utils/translation/trans_real.py b/django/utils/translation/trans_real.py index 872c80b00f..a629528717 100644 --- a/django/utils/translation/trans_real.py +++ b/django/utils/translation/trans_real.py @@ -1,4 +1,5 @@ """Translation helper functions.""" + import functools import gettext as gettext_module import os diff --git a/django/views/decorators/http.py b/django/views/decorators/http.py index 5d5dcbc790..a4c1ebc31e 100644 --- a/django/views/decorators/http.py +++ b/django/views/decorators/http.py @@ -1,6 +1,7 @@ """ Decorators for views based on HTTP headers. """ + import datetime from functools import wraps diff --git a/django/views/static.py b/django/views/static.py index df46c53093..b24f0e30f9 100644 --- a/django/views/static.py +++ b/django/views/static.py @@ -2,6 +2,7 @@ Views and functions for serving static files. These are only to be used during development, and SHOULD NOT be used in a production setting. """ + import mimetypes import posixpath from pathlib import Path diff --git a/django/views/templates/default_urlconf.html b/django/views/templates/default_urlconf.html index 6bb170cc67..f9e278006d 100644 --- a/django/views/templates/default_urlconf.html +++ b/django/views/templates/default_urlconf.html @@ -210,8 +210,7 @@ - - + diff --git a/django/views/templates/technical_404.html b/django/views/templates/technical_404.html index c47dae22af..f2bfe49372 100644 --- a/django/views/templates/technical_404.html +++ b/django/views/templates/technical_404.html @@ -9,9 +9,9 @@ body * { padding:10px 20px; } body * * { padding:0; } body { font:small sans-serif; background:#eee; color:#000; } - body>div { border-bottom:1px solid #ddd; } + body > :where(header, main, footer) { border-bottom:1px solid #ddd; } h1 { font-weight:normal; margin-bottom:.4em; } - h1 span { font-size:60%; color:#666; font-weight:normal; } + h1 small { font-size:60%; color:#666; font-weight:normal; } table { border:none; border-collapse: collapse; width:100%; } td, th { vertical-align:top; padding:2px 3px; } th { width:12em; text-align:right; color:#666; padding-right:.5em; } @@ -24,27 +24,28 @@ -
-

Page not found (404)

+
+

Page not found (404)

{% if reason and resolved %}
{{ reason }}
{% endif %} - + - + {% if raising_view_name %} - + {% endif %}
Request Method:Request Method: {{ request.META.REQUEST_METHOD }}
Request URL:Request URL: {{ request.build_absolute_uri }}
Raised by:Raised by: {{ raising_view_name }}
-
-
+ + +
{% if urlpatterns %}

Using the URLconf defined in {{ urlconf }}, @@ -54,8 +55,10 @@ {% for pattern in urlpatterns %}

  • {% for pat in pattern %} + {{ pat.pattern }} {% if forloop.last and pat.name %}[name='{{ pat.name }}']{% endif %} + {% endfor %}
  • {% endfor %} @@ -69,14 +72,14 @@ {% if resolved %}matched the last one.{% else %}didn’t match any of these.{% endif %}

    {% endif %} -
    + -
    +

    You’re seeing this error because you have DEBUG = True in your Django settings file. Change that to False, and Django will display a standard 404 page.

    -
    + diff --git a/django/views/templates/technical_500.html b/django/views/templates/technical_500.html index a5c187147b..305c4655ad 100644 --- a/django/views/templates/technical_500.html +++ b/django/views/templates/technical_500.html @@ -10,7 +10,7 @@ body * { padding:10px 20px; } body * * { padding:0; } body { font:small sans-serif; background-color:#fff; color:#000; } - body>div { border-bottom:1px solid #ddd; } + body > :where(header, main, footer) { border-bottom:1px solid #ddd; } h1 { font-weight:normal; } h2 { margin-bottom:.8em; } h3 { margin:1em 0 .5em 0; } @@ -47,6 +47,8 @@ .user div.commands a { color: black; } #summary { background: #ffc; } #summary h2 { font-weight: normal; color: #666; } + #info { padding: 0; } + #info > * { padding:10px 20px; } #explanation { background:#eee; } #template, #template-not-exist { background:#f6f6f6; } #template-not-exist ul { margin: 0 0 10px 20px; } @@ -97,67 +99,69 @@ {% endif %} -
    +

    {% if exception_type %}{{ exception_type }}{% else %}Report{% endif %} {% if request %} at {{ request.path_info }}{% endif %}

    {% if exception_value %}{{ exception_value|force_escape }}{% if exception_notes %}{{ exception_notes }}{% endif %}{% else %}No exception message supplied{% endif %}
    {% if request %} - + - + {% endif %} - + {% if exception_type %} - + {% endif %} {% if exception_type and exception_value %} - + {% endif %} {% if lastframe %} - + {% endif %} {% if raising_view_name %} - + {% endif %} - + - + - - + + - +
    Request Method:Request Method: {{ request.META.REQUEST_METHOD }}
    Request URL:Request URL: {{ request_insecure_uri }}
    Django Version:Django Version: {{ django_version_info }}
    Exception Type:Exception Type: {{ exception_type }}
    Exception Value:Exception Value:
    {{ exception_value|force_escape }}
    Exception Location:Exception Location: {{ lastframe.filename }}, line {{ lastframe.lineno }}, in {{ lastframe.function }}
    Raised during:Raised during: {{ raising_view_name }}
    Python Executable:Python Executable: {{ sys_executable }}
    Python Version:Python Version: {{ sys_version_info }}
    Python Path:
    {{ sys_path|pprint }}
    Python Path:
    {{ sys_path|pprint }}
    Server time:Server time: {{server_time|date:"r"}}
    -
    + + +
    {% if unicode_hint %}

    Unicode error hint

    @@ -195,11 +199,11 @@ {% if template_info.bottom != template_info.total %} cut-bottom{% endif %}"> {% for source_line in template_info.source_lines %} {% if source_line.0 == template_info.line %} - {{ source_line.0 }} + {{ source_line.0 }} {{ template_info.before }}{{ template_info.during }}{{ template_info.after }} {% else %} - {{ source_line.0 }} + {{ source_line.0 }} {{ source_line.1 }} {% endif %} {% endfor %} @@ -266,8 +270,8 @@ - - + + @@ -354,8 +358,8 @@ Exception Value: {{ exception_value|force_escape }}{% if exception_notes %}{{ ex
    VariableValueVariableValue
    - - + + @@ -376,8 +380,8 @@ Exception Value: {{ exception_value|force_escape }}{% if exception_notes %}{{ ex
    VariableValueVariableValue
    - - + + @@ -398,8 +402,8 @@ Exception Value: {{ exception_value|force_escape }}{% if exception_notes %}{{ ex
    VariableValueVariableValue
    - - + + @@ -420,8 +424,8 @@ Exception Value: {{ exception_value|force_escape }}{% if exception_notes %}{{ ex
    VariableValueVariableValue
    - - + + @@ -441,8 +445,8 @@ Exception Value: {{ exception_value|force_escape }}{% if exception_notes %}{{ ex
    VariableValueVariableValue
    - - + + @@ -463,8 +467,8 @@ Exception Value: {{ exception_value|force_escape }}{% if exception_notes %}{{ ex
    VariableValueVariableValue
    - - + + @@ -478,14 +482,16 @@ Exception Value: {{ exception_value|force_escape }}{% if exception_notes %}{{ ex
    SettingValueSettingValue
    +
    + {% if not is_email %} -
    +

    You’re seeing this error because you have DEBUG = True in your Django settings file. Change that to False, and Django will display a standard page generated by the handler for this status code.

    -
    + {% endif %} diff --git a/docs/_ext/djangodocs.py b/docs/_ext/djangodocs.py index 7d55cb0333..77e24ff0eb 100644 --- a/docs/_ext/djangodocs.py +++ b/docs/_ext/djangodocs.py @@ -1,6 +1,7 @@ """ Sphinx plugins for Django documentation. """ + import json import os import re diff --git a/docs/howto/csrf.txt b/docs/howto/csrf.txt index 07f2e20a1c..d40f4b4cb4 100644 --- a/docs/howto/csrf.txt +++ b/docs/howto/csrf.txt @@ -208,8 +208,7 @@ will require a CSRF token to be inserted you should use the @cache_page(60 * 15) @csrf_protect - def my_view(request): - ... + def my_view(request): ... If you are using class-based views, you can refer to :ref:`Decorating class-based views`. diff --git a/docs/howto/custom-file-storage.txt b/docs/howto/custom-file-storage.txt index b7bd22d9c1..3cc96cce84 100644 --- a/docs/howto/custom-file-storage.txt +++ b/docs/howto/custom-file-storage.txt @@ -14,8 +14,7 @@ You'll need to follow these steps: from django.core.files.storage import Storage - class MyStorage(Storage): - ... + class MyStorage(Storage): ... #. Django must be able to instantiate your storage system without any arguments. This means that any settings should be taken from ``django.conf.settings``:: diff --git a/docs/howto/custom-lookups.txt b/docs/howto/custom-lookups.txt index 61ec9295eb..fc8e928890 100644 --- a/docs/howto/custom-lookups.txt +++ b/docs/howto/custom-lookups.txt @@ -53,8 +53,7 @@ Lookup registration can also be done using a decorator pattern:: @Field.register_lookup - class NotEqualLookup(Lookup): - ... + class NotEqualLookup(Lookup): ... We can now use ``foo__ne`` for any field ``foo``. You will need to ensure that this registration happens before you try to create any querysets using it. You diff --git a/docs/howto/custom-management-commands.txt b/docs/howto/custom-management-commands.txt index 8bdfb1e38b..d3775905d3 100644 --- a/docs/howto/custom-management-commands.txt +++ b/docs/howto/custom-management-commands.txt @@ -146,8 +146,7 @@ decorator on your :meth:`~BaseCommand.handle` method:: ... @no_translations - def handle(self, *args, **options): - ... + def handle(self, *args, **options): ... Since translation deactivation requires access to configured settings, the decorator can't be used for commands that work without configured settings. @@ -305,7 +304,7 @@ the :meth:`~BaseCommand.handle` method must be implemented. It may return a string which will be printed to ``stdout`` (wrapped by ``BEGIN;`` and ``COMMIT;`` if :attr:`output_transaction` is ``True``). -.. method:: BaseCommand.check(app_configs=None, tags=None, display_num_errors=False) +.. method:: BaseCommand.check(app_configs=None, tags=None,display_num_errors=False, include_deployment_checks=False, fail_level=checks.ERROR, databases=None) Uses the system check framework to inspect the entire Django project for potential problems. Serious problems are raised as a :exc:`CommandError`; @@ -313,8 +312,12 @@ the :meth:`~BaseCommand.handle` method must be implemented. ``stdout``. If ``app_configs`` and ``tags`` are both ``None``, all system checks are - performed. ``tags`` can be a list of check tags, like ``compatibility`` or - ``models``. + performed except deployment and database related checks. ``tags`` can be a + list of check tags, like ``compatibility`` or ``models``. + + You can pass ``include_deployment_checks=True`` to also perform deployment + checks, and list of database aliases in the ``databases`` to run database + related checks against them. .. _ref-basecommand-subclasses: diff --git a/docs/howto/custom-model-fields.txt b/docs/howto/custom-model-fields.txt index 1e7ac4f0ba..b4a1537896 100644 --- a/docs/howto/custom-model-fields.txt +++ b/docs/howto/custom-model-fields.txt @@ -338,24 +338,20 @@ Changing a custom field's base class You can't change the base class of a custom field because Django won't detect the change and make a migration for it. For example, if you start with:: - class CustomCharField(models.CharField): - ... + class CustomCharField(models.CharField): ... and then decide that you want to use ``TextField`` instead, you can't change the subclass like this:: - class CustomCharField(models.TextField): - ... + class CustomCharField(models.TextField): ... Instead, you must create a new custom field class and update your models to reference it:: - class CustomCharField(models.CharField): - ... + class CustomCharField(models.CharField): ... - class CustomTextField(models.TextField): - ... + class CustomTextField(models.TextField): ... As discussed in :ref:`removing fields `, you must retain the original ``CustomCharField`` class as long as you have diff --git a/docs/howto/custom-template-tags.txt b/docs/howto/custom-template-tags.txt index c7909c8a4b..15bef9b5fb 100644 --- a/docs/howto/custom-template-tags.txt +++ b/docs/howto/custom-template-tags.txt @@ -561,8 +561,7 @@ template loader, we'd register the tag like this:: # Here, register is a django.template.Library instance, as before @register.inclusion_tag("results.html") - def show_results(poll): - ... + def show_results(poll): ... Alternatively it is possible to register the inclusion tag using a :class:`django.template.Template` instance:: @@ -917,13 +916,11 @@ The ``tag()`` method takes two arguments: As with filter registration, it is also possible to use this as a decorator:: @register.tag(name="current_time") - def do_current_time(parser, token): - ... + def do_current_time(parser, token): ... @register.tag - def shout(parser, token): - ... + def shout(parser, token): ... If you leave off the ``name`` argument, as in the second example above, Django will use the function's name as the tag name. diff --git a/docs/howto/error-reporting.txt b/docs/howto/error-reporting.txt index 84fe3cb768..b36f884096 100644 --- a/docs/howto/error-reporting.txt +++ b/docs/howto/error-reporting.txt @@ -177,8 +177,7 @@ filtered out of error reports in a production environment (that is, where do not provide any argument to the ``sensitive_variables`` decorator:: @sensitive_variables() - def my_function(): - ... + def my_function(): ... .. admonition:: When using multiple decorators @@ -191,8 +190,7 @@ filtered out of error reports in a production environment (that is, where @sensitive_variables("user", "pw", "cc") @some_decorator @another_decorator - def process_info(user): - ... + def process_info(user): ... .. versionchanged:: 5.0 @@ -229,8 +227,7 @@ filtered out of error reports in a production environment (that is, where do not provide any argument to the ``sensitive_post_parameters`` decorator:: @sensitive_post_parameters() - def my_view(request): - ... + def my_view(request): ... All POST parameters are systematically filtered out of error reports for certain :mod:`django.contrib.auth.views` views (``login``, diff --git a/docs/internals/contributing/writing-code/coding-style.txt b/docs/internals/contributing/writing-code/coding-style.txt index 6871d43d7b..49b69bf066 100644 --- a/docs/internals/contributing/writing-code/coding-style.txt +++ b/docs/internals/contributing/writing-code/coding-style.txt @@ -201,8 +201,7 @@ Imports CONSTANT = "foo" - class Example: - ... + class Example: ... * Use convenience imports whenever available. For example, do this :: @@ -239,13 +238,11 @@ View style Do this:: - def my_view(request, foo): - ... + def my_view(request, foo): ... Don't do this:: - def my_view(req, foo): - ... + def my_view(req, foo): ... Model style =========== diff --git a/docs/internals/contributing/writing-code/submitting-patches.txt b/docs/internals/contributing/writing-code/submitting-patches.txt index be031f1f68..72c986cfc7 100644 --- a/docs/internals/contributing/writing-code/submitting-patches.txt +++ b/docs/internals/contributing/writing-code/submitting-patches.txt @@ -190,8 +190,7 @@ level: @ignore_warnings(category=RemovedInDjangoXXWarning) - def test_foo(self): - ... + def test_foo(self): ... #) For an entire test case:: @@ -200,8 +199,7 @@ level: @ignore_warnings(category=RemovedInDjangoXXWarning) - class MyDeprecatedTests(unittest.TestCase): - ... + class MyDeprecatedTests(unittest.TestCase): ... You should also add a test for the deprecation warning:: diff --git a/docs/internals/security.txt b/docs/internals/security.txt index 373012b707..55300b01e1 100644 --- a/docs/internals/security.txt +++ b/docs/internals/security.txt @@ -84,24 +84,24 @@ upcoming security release, as well as the severity of the issues. This is to aid organizations that need to ensure they have staff available to handle triaging our announcement and upgrade Django as needed. Severity levels are: -**High**: +* **High** -* Remote code execution -* SQL injection + * Remote code execution + * SQL injection -**Moderate**: +* **Moderate** -* Cross site scripting (XSS) -* Cross site request forgery (CSRF) -* Denial-of-service attacks -* Broken authentication + * Cross site scripting (XSS) + * Cross site request forgery (CSRF) + * Denial-of-service attacks + * Broken authentication -**Low**: +* **Low** -* Sensitive data exposure -* Broken session management -* Unvalidated redirects/forwards -* Issues requiring an uncommon configuration option + * Sensitive data exposure + * Broken session management + * Unvalidated redirects/forwards + * Issues requiring an uncommon configuration option Second, we notify a list of :ref:`people and organizations `, primarily composed of operating-system vendors and diff --git a/docs/intro/reusable-apps.txt b/docs/intro/reusable-apps.txt index 0ca63830ea..98f21c9d91 100644 --- a/docs/intro/reusable-apps.txt +++ b/docs/intro/reusable-apps.txt @@ -198,93 +198,76 @@ this. For a small app like polls, this process isn't too difficult. license. Just be aware that your licensing choice will affect who is able to use your code. -#. Next we'll create ``pyproject.toml``, ``setup.cfg``, and ``setup.py`` files - which detail how to build and install the app. A full explanation of these - files is beyond the scope of this tutorial, but the `setuptools - documentation `_ has a good - explanation. Create the ``django-polls/pyproject.toml``, - ``django-polls/setup.cfg``, and ``django-polls/setup.py`` files with the +#. Next we'll create the ``pyproject.toml`` file which details how to build and + install the app. A full explanation of this file is beyond the scope of this + tutorial, but the `Python Packaging User Guide + `_ has a good + explanation. Create the ``django-polls/pyproject.toml`` file with the following contents: .. code-block:: toml - :caption: ``django-polls/pyproject.toml`` + :caption: ``django-polls/pyproject.toml`` - [build-system] - requires = ['setuptools>=40.8.0'] - build-backend = 'setuptools.build_meta' + [build-system] + requires = ["setuptools>=61.0"] + build-backend = "setuptools.build_meta" - .. code-block:: ini - :caption: ``django-polls/setup.cfg`` + [project] + name = "django-polls" + version = "0.1" + dependencies = [ + "django>=X.Y", # Replace "X.Y" as appropriate + ] + description = "A Django app to conduct web-based polls." + readme = "README.rst" + requires-python = ">= 3.10" + authors = [ + {name = "Your Name", email = "yourname@example.com"}, + ] + classifiers = [ + "Environment :: Web Environment", + "Framework :: Django", + "Framework :: Django :: X.Y", # Replace "X.Y" as appropriate + "Intended Audience :: Developers", + "License :: OSI Approved :: BSD License", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Topic :: Internet :: WWW/HTTP", + "Topic :: Internet :: WWW/HTTP :: Dynamic Content", + ] - [metadata] - name = django-polls - version = 0.1 - description = A Django app to conduct web-based polls. - long_description = file: README.rst - url = https://www.example.com/ - author = Your Name - author_email = yourname@example.com - license = BSD-3-Clause # Example license - classifiers = - Environment :: Web Environment - Framework :: Django - Framework :: Django :: X.Y # Replace "X.Y" as appropriate - Intended Audience :: Developers - License :: OSI Approved :: BSD License - Operating System :: OS Independent - Programming Language :: Python - Programming Language :: Python :: 3 - Programming Language :: Python :: 3 :: Only - Programming Language :: Python :: 3.10 - Programming Language :: Python :: 3.11 - Programming Language :: Python :: 3.12 - Topic :: Internet :: WWW/HTTP - Topic :: Internet :: WWW/HTTP :: Dynamic Content + [project.urls] + Homepage = "https://www.example.com/" - [options] - include_package_data = true - packages = find: - python_requires = >=3.10 - install_requires = - Django >= X.Y # Replace "X.Y" as appropriate - - .. code-block:: python - :caption: ``django-polls/setup.py`` - - from setuptools import setup - - setup() - -#. Only Python modules and packages are included in the package by default. To - include additional files, we'll need to create a ``MANIFEST.in`` file. The - ``setuptools`` docs referred to in the previous step discuss this file in - more detail. To include the templates, the ``README.rst`` and our - ``LICENSE`` file, create a file ``django-polls/MANIFEST.in`` with the - following contents: +#. Many common files and Python modules and packages are included in the + package by default. To include additional files, we'll need to create a + ``MANIFEST.in`` file. To include the templates and static files, create a + file ``django-polls/MANIFEST.in`` with the following contents: .. code-block:: text - :caption: ``django-polls/MANIFEST.in`` + :caption: ``django-polls/MANIFEST.in`` - include LICENSE - include README.rst - recursive-include django_polls/static * - recursive-include django_polls/templates * + recursive-include django_polls/static * + recursive-include django_polls/templates * #. It's optional, but recommended, to include detailed documentation with your app. Create an empty directory ``django-polls/docs`` for future - documentation. Add an additional line to ``django-polls/MANIFEST.in``: - - .. code-block:: text - - recursive-include docs * + documentation. Note that the ``docs`` directory won't be included in your package unless you add some files to it. Many Django apps also provide their documentation online through sites like `readthedocs.org `_. -#. Try building your package by running ``python setup.py sdist`` inside +#. Check that the :pypi:`build` package is installed (``python -m pip install + build``) and try building your package by running ``python -m build`` inside ``django-polls``. This creates a directory called ``dist`` and builds your - new package, ``django-polls-0.1.tar.gz``. + new package into source and binary formats, ``django-polls-0.1.tar.gz`` and + ``django_polls-0.1-py3-none-any.whl``. For more information on packaging, see Python's `Tutorial on Packaging and Distributing Projects diff --git a/docs/intro/tutorial04.txt b/docs/intro/tutorial04.txt index 13a76188bb..65dc132a94 100644 --- a/docs/intro/tutorial04.txt +++ b/docs/intro/tutorial04.txt @@ -309,7 +309,8 @@ views and use Django's generic views instead. To do so, open the def vote(request, question_id): - ... # same as above, no changes needed. + # same as above, no changes needed. + ... Each generic view needs to know what model it will be acting upon. This is provided using either the ``model`` attribute (in this example, ``model = diff --git a/docs/intro/tutorial07.txt b/docs/intro/tutorial07.txt index 9cdadbe286..8cb5dd5d5a 100644 --- a/docs/intro/tutorial07.txt +++ b/docs/intro/tutorial07.txt @@ -174,8 +174,7 @@ tabular way of displaying inline related objects. To use it, change the .. code-block:: python :caption: ``polls/admin.py`` - class ChoiceInline(admin.TabularInline): - ... + class ChoiceInline(admin.TabularInline): ... With that ``TabularInline`` (instead of ``StackedInline``), the related objects are displayed in a more compact, table-based format: diff --git a/docs/misc/design-philosophies.txt b/docs/misc/design-philosophies.txt index 99d01b413f..3643c51d76 100644 --- a/docs/misc/design-philosophies.txt +++ b/docs/misc/design-philosophies.txt @@ -254,10 +254,6 @@ enough programming-esque functionality, such as branching and looping, that is essential for making presentation-related decisions. The :ref:`Django Template Language (DTL) ` aims to avoid advanced logic. -The Django template system recognizes that templates are most often written by -*designers*, not *programmers*, and therefore should not assume Python -knowledge. - Safety and security ------------------- diff --git a/docs/ref/checks.txt b/docs/ref/checks.txt index f0eeaca268..cf0ab32efa 100644 --- a/docs/ref/checks.txt +++ b/docs/ref/checks.txt @@ -726,9 +726,9 @@ with the admin site: * **admin.E106**: The value of ``.model`` must be a ``Model``. * **admin.E107**: The value of ``list_display`` must be a list or tuple. -* **admin.E108**: The value of ``list_display[n]`` refers to ``