diff --git a/AUTHORS b/AUTHORS index a9403842b54e..36914d29501c 100644 --- a/AUTHORS +++ b/AUTHORS @@ -229,6 +229,7 @@ answer newbie questions, and generally made Django that much better: Chris Jerdonek Chris Jones Chris Lamb + Chris Rose Chris Streeter Christian Barcenas Christian Metts @@ -1078,6 +1079,7 @@ answer newbie questions, and generally made Django that much better: Tyson Clugg Tyson Tate Unai Zalakain + Ülgen Sarıkavak Valentina Mukhamedzhanova valtron Varun Kasyap Pentamaraju diff --git a/django/conf/locale/az/LC_MESSAGES/django.mo b/django/conf/locale/az/LC_MESSAGES/django.mo index 9fe7a1de0955..7209355b92e2 100644 Binary files a/django/conf/locale/az/LC_MESSAGES/django.mo and b/django/conf/locale/az/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/az/LC_MESSAGES/django.po b/django/conf/locale/az/LC_MESSAGES/django.po index 2d1c6bd139cb..ad62e346bf32 100644 --- a/django/conf/locale/az/LC_MESSAGES/django.po +++ b/django/conf/locale/az/LC_MESSAGES/django.po @@ -5,15 +5,15 @@ # Emin Mastizada , 2015-2016 # Metin Amiroff , 2011 # Nicat Məmmədov , 2022 -# Nijat Mammadov, 2024-2025 +# Nijat Mammadov, 2024-2026 # Sevdimali , 2024 msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-03-19 11:30-0500\n" -"PO-Revision-Date: 2025-09-17 06:49+0000\n" -"Last-Translator: Nijat Mammadov, 2024-2025\n" +"POT-Creation-Date: 2025-09-17 18:23-0300\n" +"PO-Revision-Date: 2026-03-09 06:49+0000\n" +"Last-Translator: Nijat Mammadov, 2024-2026\n" "Language-Team: Azerbaijani (http://app.transifex.com/django/django/language/" "az/)\n" "MIME-Version: 1.0\n" @@ -145,6 +145,9 @@ msgstr "Xorvat" msgid "Upper Sorbian" msgstr "Yuxarı Sorb" +msgid "Haitian Creole" +msgstr "Haiti kreol dili" + msgid "Hungarian" msgstr "Macar" @@ -364,15 +367,15 @@ msgstr "Düzgün e-poçt ünvanı daxil edin." msgid "" "Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." msgstr "" -"Hərflərdən, rəqəmlərdən, alt-xətlərdən və ya defislərdən ibarət düzgün " -"qısaltma (“slug”) daxil edin." +"Hərflər, rəqəmlər, alt xətt və ya defislərdən ibarət etibarlı bir \"slug\" " +"daxil edin." msgid "" "Enter a valid “slug” consisting of Unicode letters, numbers, underscores, or " "hyphens." msgstr "" -"Unicode hərflərdən, rəqəmlərdən, alt-xətlərdən və ya defislərdən ibarət " -"düzgün qısaltma (“slug”) daxil edin." +"Yalnız Unikod hərfləri, rəqəmlər, alt xətt və ya defislərdən ibarət etibarlı " +"bir \"slug\" daxil edin." #, python-format msgid "Enter a valid %(protocol)s address." @@ -481,7 +484,7 @@ msgstr "" "uzantıları: %(allowed_extensions)s." msgid "Null characters are not allowed." -msgstr "Null simvollara icazə verilmir." +msgstr "Boş simvollara icazə verilmir." msgid "and" msgstr "və" @@ -530,7 +533,7 @@ msgid "“%(value)s” value must be either True, False, or None." msgstr "“%(value)s” dəyəri True, False və ya None olmalıdır." msgid "Boolean (Either True or False)" -msgstr "Bul (ya Doğru, ya Yalan)" +msgstr "Məntiq operatoru (ya Doğru, ya Yalan)" #, python-format msgid "String (up to %(max_length)s)" @@ -561,8 +564,8 @@ msgstr "Tarix (saatsız)" #, python-format msgid "" -"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." -"uuuuuu]][TZ] format." +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD " +"HH:MM[:ss[.uuuuuu]][TZ] format." msgstr "" "“%(value)s” dəyərinin formatı səhvdir. Formatı YYYY-MM-DD HH:MM[:ss[.uuuuuu]]" "[TZ] olmalıdır." @@ -587,8 +590,8 @@ msgstr "Rasional ədəd" #, python-format msgid "" -"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." -"uuuuuu] format." +"“%(value)s” value has an invalid format. It must be in [DD] " +"[[HH:]MM:]ss[.uuuuuu] format." msgstr "" "“%(value)s” dəyərinin formatı səhvdir. Formatı [DD] [HH:[MM:]]ss[.uuuuuu] " "olmalıdır." @@ -633,7 +636,7 @@ msgid "“%(value)s” value must be either None, True or False." msgstr "“%(value)s” dəyəri None, True və ya False olmalıdır." msgid "Boolean (Either True, False or None)" -msgstr "Bul (Ya True, ya False, ya da None)" +msgstr "Məntiq operatoru (Ya True, ya False, ya da None)" msgid "Positive big integer" msgstr "Müsbət böyük rəqəm" @@ -642,7 +645,7 @@ msgid "Positive integer" msgstr "Müsbət tam ədəd" msgid "Positive small integer" -msgstr "Müsbət tam kiçik ədəd" +msgstr "Müsbət kiçik tam ədəd" #, python-format msgid "Slug (up to %(max_length)s)" @@ -673,11 +676,11 @@ msgid "URL" msgstr "URL" msgid "Raw binary data" -msgstr "Düz ikili (binary) məlumat" +msgstr "Xam ikili məlumat" #, python-format msgid "“%(value)s” is not a valid UUID." -msgstr "“%(value)s” keçərli UUID deyil." +msgstr "“%(value)s” düzgün bir UUID deyil." msgid "Universally unique identifier" msgstr "Universal təkrarolunmaz identifikator" @@ -716,8 +719,8 @@ msgid "Many-to-many relationship" msgstr "Çoxun-çoxa münasibət" #. Translators: If found as last label character, these punctuation -#. characters will prevent the default label_suffix to be appended to the -#. label +#. characters will prevent the default label_suffix to be appended to +#. the label msgid ":?.!" msgstr ":?.!" @@ -737,14 +740,14 @@ msgid "Enter a valid date/time." msgstr "Düzgün tarix/vaxt daxil edin." msgid "Enter a valid duration." -msgstr "Keçərli müddət daxil edin." +msgstr "Düzgün bir müddət daxil edin." #, python-brace-format msgid "The number of days must be between {min_days} and {max_days}." msgstr "Günlərin sayı {min_days} ilə {max_days} arasında olmalıdır." msgid "No file was submitted. Check the encoding type on the form." -msgstr "Fayl göndərilməyib. Vərəqənin (\"form\") şifrələmə tipini yoxlayın." +msgstr " Heç bir fayl göndərilməyib. Formadakı kodlaşdırma növünü yoxlayın." msgid "No file was submitted." msgstr "Fayl göndərilməyib." @@ -757,9 +760,11 @@ msgid "Ensure this filename has at most %(max)d character (it has %(length)d)." msgid_plural "" "Ensure this filename has at most %(max)d characters (it has %(length)d)." msgstr[0] "" -"Bu fayl adının ən çox %(max)d simvol olduğuna əmin olun (%(length)d var)." +"Bu fayl adının %(max)d simvoldan çox olmadığına əmin olun (%(length)d simvol " +"mövcuddur)." msgstr[1] "" -"Bu fayl adının ən çox %(max)d simvol olduğuna əmin olun (%(length)d var)." +"Bu fayl adının %(max)d simvoldan çox olmadığına əmin olun (%(length)d simvol " +"mövcuddur)." msgid "Please either submit a file or check the clear checkbox, not both." msgstr "" @@ -783,7 +788,7 @@ msgid "Enter a complete value." msgstr "Tam dəyər daxil edin." msgid "Enter a valid UUID." -msgstr "Keçərli UUID daxil et." +msgstr "Düzgün bir UUID daxil et." msgid "Enter a valid JSON." msgstr "Etibarlı bir JSON daxil edin." @@ -808,14 +813,14 @@ msgstr "" #, python-format msgid "Please submit at most %(num)d form." msgid_plural "Please submit at most %(num)d forms." -msgstr[0] "Zəhmət olmasa ən çox %(num)d forma təsdiqləyin." -msgstr[1] "Zəhmət olmasa ən çox %(num)d forma təsdiqləyin." +msgstr[0] "Zəhmət olmasa, %(num)d dənədən çox forma təsdiqləməyin." +msgstr[1] "Zəhmət olmasa, %(num)d dənədən çox forma təsdiqləməyin." #, python-format msgid "Please submit at least %(num)d form." msgid_plural "Please submit at least %(num)d forms." -msgstr[0] "Zəhmət olmasa ən az %(num)d forma təsdiqləyin." -msgstr[1] "Zəhmət olmasa azı %(num)d forma təsdiqləyin." +msgstr[0] "Zəhmət olmasa, ən az %(num)d forma təsdiqləyin." +msgstr[1] "Zəhmət olmasa, azı %(num)d forma təsdiqləyin." msgid "Order" msgstr "Sırala" @@ -880,6 +885,22 @@ msgstr "Hə" msgid "No" msgstr "Yox" +msgctxt "Task" +msgid "Ready" +msgstr "Hazırdır" + +msgctxt "Task" +msgid "Running" +msgstr "İşləyir" + +msgctxt "Task" +msgid "Failed" +msgstr "Uğursuz" + +msgctxt "Task" +msgid "Successful" +msgstr "Uğurlu" + #. Translators: Please do not add spaces around commas. msgid "yes,no,maybe" msgstr "hə,yox,bəlkə" @@ -1139,7 +1160,7 @@ msgid "December" msgstr "Dekabr" msgid "This is not a valid IPv6 address." -msgstr "Bu doğru IPv6 ünvanı deyil." +msgstr "Bu, doğru IPv6 ünvanı deyil." #, python-format msgctxt "String to return when truncating text" @@ -1268,11 +1289,11 @@ msgstr "%(verbose_name_plural)s seçmək mümkün deyil" #, python-format msgid "" -"Future %(verbose_name_plural)s not available because %(class_name)s." -"allow_future is False." +"Future %(verbose_name_plural)s not available because " +"%(class_name)s.allow_future is False." msgstr "" -"Gələcək %(verbose_name_plural)s seçmək mümkün deyil, çünki %(class_name)s." -"allow_future Yalan kimi qeyd olunub." +"Gələcək %(verbose_name_plural)s seçmək mümkün deyil, çünki " +"%(class_name)s.allow_future Yalan kimi qeyd olunub." #, python-format msgid "Invalid date string “%(datestr)s” given format “%(format)s”" @@ -1302,7 +1323,7 @@ msgstr "“%(path)s” mövcud deyil" #, python-format msgid "Index of %(directory)s" -msgstr "%(directory)s-nin indeksi" +msgstr "%(directory)s indeksi" msgid "The install worked successfully! Congratulations!" msgstr "Quruluş uğurla tamamlandı! Təbriklər!" @@ -1344,4 +1365,4 @@ msgid "Django Community" msgstr "Django İcması" msgid "Connect, get help, or contribute" -msgstr "Qoşul, kömək al və dəstək ol" +msgstr "Qoşul, yardım əldə et və dəstək ol" diff --git a/django/conf/locale/be/LC_MESSAGES/django.mo b/django/conf/locale/be/LC_MESSAGES/django.mo index cda27d35ae3a..4034ac0a522b 100644 Binary files a/django/conf/locale/be/LC_MESSAGES/django.mo and b/django/conf/locale/be/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/be/LC_MESSAGES/django.po b/django/conf/locale/be/LC_MESSAGES/django.po index 44057dcf5e5b..8ed41bb1b8ad 100644 --- a/django/conf/locale/be/LC_MESSAGES/django.po +++ b/django/conf/locale/be/LC_MESSAGES/django.po @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-03-19 11:30-0500\n" -"PO-Revision-Date: 2025-09-17 06:49+0000\n" +"POT-Creation-Date: 2025-09-17 18:23-0300\n" +"PO-Revision-Date: 2026-03-09 06:49+0000\n" "Last-Translator: znotdead , " "2016-2017,2019-2021,2023-2025\n" "Language-Team: Belarusian (http://app.transifex.com/django/django/language/" @@ -145,6 +145,9 @@ msgstr "Харвацкая" msgid "Upper Sorbian" msgstr "Верхнелужыцкая" +msgid "Haitian Creole" +msgstr "Гаіцянская крэольская" + msgid "Hungarian" msgstr "Вугорская" @@ -577,8 +580,8 @@ msgstr "Дата (бяз часу)" #, python-format msgid "" -"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." -"uuuuuu]][TZ] format." +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD " +"HH:MM[:ss[.uuuuuu]][TZ] format." msgstr "" "Значэнне “%(value)s” мае няправільны фармат. Яно павінна быць у фармаце ГГГГ-" "ММ-ДД ГГ:ХХ[:сс[.мммммм]][ЧА], дзе ЧА — часавы абсяг." @@ -603,8 +606,8 @@ msgstr "Дзесятковы лік" #, python-format msgid "" -"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." -"uuuuuu] format." +"“%(value)s” value has an invalid format. It must be in [DD] " +"[[HH:]MM:]ss[.uuuuuu] format." msgstr "" "Значэньне “%(value)s” мае няправільны фармат. Яно павінна быць у фармаце " "[ДД] [ГГ:[ХХ:]]сс[.мммммм]." @@ -672,8 +675,8 @@ msgid "" "“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " "format." msgstr "" -"Значэньне “%(value)s” мае няправільны фармат. Яно павінна быць у фармаце ГГ:" -"ХХ[:сс[.мммммм]]." +"Значэньне “%(value)s” мае няправільны фармат. Яно павінна быць у фармаце " +"ГГ:ХХ[:сс[.мммммм]]." #, python-format msgid "" @@ -734,8 +737,8 @@ msgid "Many-to-many relationship" msgstr "Сувязь «некалькі да некалькіх»" #. Translators: If found as last label character, these punctuation -#. characters will prevent the default label_suffix to be appended to the -#. label +#. characters will prevent the default label_suffix to be appended to +#. the label msgid ":?.!" msgstr ":?.!" @@ -908,6 +911,22 @@ msgstr "Так" msgid "No" msgstr "Не" +msgctxt "Task" +msgid "Ready" +msgstr "Гатова" + +msgctxt "Task" +msgid "Running" +msgstr "Выконваецца" + +msgctxt "Task" +msgid "Failed" +msgstr "Правалілася" + +msgctxt "Task" +msgid "Successful" +msgstr "Паспяхова" + #. Translators: Please do not add spaces around commas. msgid "yes,no,maybe" msgstr "так,не,магчыма" @@ -1310,11 +1329,11 @@ msgstr "Няма доступу да %(verbose_name_plural)s" #, python-format msgid "" -"Future %(verbose_name_plural)s not available because %(class_name)s." -"allow_future is False." +"Future %(verbose_name_plural)s not available because " +"%(class_name)s.allow_future is False." msgstr "" -"Няма доступу да %(verbose_name_plural)s, якія будуць, бо «%(class_name)s." -"allow_future» мае значэньне «не сапраўдна»." +"Няма доступу да %(verbose_name_plural)s, якія будуць, бо " +"«%(class_name)s.allow_future» мае значэньне «не сапраўдна»." #, python-format msgid "Invalid date string “%(datestr)s” given format “%(format)s”" diff --git a/django/conf/locale/ckb/LC_MESSAGES/django.mo b/django/conf/locale/ckb/LC_MESSAGES/django.mo index 0f7b0196e642..361884bfa00f 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 b1351bbd9461..c6e305d07046 100644 --- a/django/conf/locale/ckb/LC_MESSAGES/django.po +++ b/django/conf/locale/ckb/LC_MESSAGES/django.po @@ -4,16 +4,17 @@ # Bawar Jalal, 2021 # Bawar Jalal, 2020-2021 # Bawar Jalal, 2020 +# Jacob Walls, 2026 # Kosar Tofiq Saeed , 2020-2021 # Natalia, 2025 -# Swara , 2022-2024 +# Swara , 2022-2026 msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-03-19 11:30-0500\n" -"PO-Revision-Date: 2025-09-17 06:49+0000\n" -"Last-Translator: Natalia, 2025\n" +"POT-Creation-Date: 2025-09-17 18:23-0300\n" +"PO-Revision-Date: 2026-03-09 06:49+0000\n" +"Last-Translator: Jacob Walls, 2026\n" "Language-Team: Central Kurdish (http://app.transifex.com/django/django/" "language/ckb/)\n" "MIME-Version: 1.0\n" @@ -145,6 +146,9 @@ msgstr "کڕواتی" msgid "Upper Sorbian" msgstr "سڕبی سەروو" +msgid "Haitian Creole" +msgstr "کریۆلی ھایتی" + msgid "Hungarian" msgstr "هەنگاری" @@ -549,11 +553,11 @@ msgstr "بەروار (بەبێ کات)" #, python-format msgid "" -"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." -"uuuuuu]][TZ] format." +"“%(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] بێت." +"بەهای “%(value)s” شێوازێکی نادروستی هەیە. دەبێت بەشێوەی YYYY-MM-DD " +"HH:MM[:ss[.uuuuuu]][TZ] بێت." #, python-format msgid "" @@ -575,11 +579,11 @@ msgstr "ژمارەی دەیی" #, python-format msgid "" -"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." -"uuuuuu] format." +"“%(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] format بێت." +"بەهای “%(value)s” شێوازێکی هەڵەی هەیە. دەبێت بەشێوەی [DD] " +"[[HH:]MM:]ss[.uuuuuu] format بێت." msgid "Duration" msgstr "ماوە" @@ -684,7 +688,7 @@ msgstr "بەها پێویستە JSONی دروست بێت." #, python-format msgid "%(model)s instance with %(field)s %(value)r is not a valid choice." -msgstr "" +msgstr "نمونەی%(model)s لەگەڵ %(field)s %(value)r هەڵبژاردەیەکی دروست نیە." msgid "Foreign Key (type determined by related field)" msgstr "کلیلی دەرەکی(جۆر بەپێی خانەی پەیوەندیدار دیاری دەکرێت)" @@ -704,8 +708,8 @@ msgid "Many-to-many relationship" msgstr "پەیوەندیی گشت-بۆ-گشت" #. Translators: If found as last label character, these punctuation -#. characters will prevent the default label_suffix to be appended to the -#. label +#. characters will prevent the default label_suffix to be appended to +#. the label msgid ":?.!" msgstr ":؟.!" @@ -866,6 +870,22 @@ msgstr "بەڵێ" msgid "No" msgstr "نەخێر" +msgctxt "Task" +msgid "Ready" +msgstr "ئامادەیە" + +msgctxt "Task" +msgid "Running" +msgstr "جێبەجێدەکرێت" + +msgctxt "Task" +msgid "Failed" +msgstr "سەرنەکەوتوو" + +msgctxt "Task" +msgid "Successful" +msgstr "سەرکەوتوو" + #. Translators: Please do not add spaces around commas. msgid "yes,no,maybe" msgstr "بەڵێ,نەخێر,لەوانەیە" @@ -1254,11 +1274,11 @@ msgstr "هیچ %(verbose_name_plural)s بەردەست نییە" #, python-format msgid "" -"Future %(verbose_name_plural)s not available because %(class_name)s." -"allow_future is False." +"Future %(verbose_name_plural)s not available because " +"%(class_name)s.allow_future is False." msgstr "" -"لەداهاتوودا %(verbose_name_plural)s بەردەست نیە چونکە %(class_name)s." -"allow_future چەوتە." +"لەداهاتوودا %(verbose_name_plural)s بەردەست نیە چونکە " +"%(class_name)s.allow_future چەوتە." #, python-format msgid "Invalid date string “%(datestr)s” given format “%(format)s”" diff --git a/django/conf/locale/dsb/LC_MESSAGES/django.mo b/django/conf/locale/dsb/LC_MESSAGES/django.mo index c7bf58d79f6a..f23d0d87eac7 100644 Binary files a/django/conf/locale/dsb/LC_MESSAGES/django.mo and b/django/conf/locale/dsb/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/dsb/LC_MESSAGES/django.po b/django/conf/locale/dsb/LC_MESSAGES/django.po index 2a37c926145b..cded64bcb63d 100644 --- a/django/conf/locale/dsb/LC_MESSAGES/django.po +++ b/django/conf/locale/dsb/LC_MESSAGES/django.po @@ -1,14 +1,14 @@ # This file is distributed under the same license as the Django package. # # Translators: -# Michael Wolf , 2016-2025 +# Michael Wolf , 2016-2026 msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-03-19 11:30-0500\n" -"PO-Revision-Date: 2025-04-01 15:04-0500\n" -"Last-Translator: Michael Wolf , 2016-2025\n" +"POT-Creation-Date: 2025-09-17 18:23-0300\n" +"PO-Revision-Date: 2026-03-09 06:49+0000\n" +"Last-Translator: Michael Wolf , 2016-2026\n" "Language-Team: Lower Sorbian (http://app.transifex.com/django/django/" "language/dsb/)\n" "MIME-Version: 1.0\n" @@ -141,6 +141,9 @@ msgstr "Chorwatšćina" msgid "Upper Sorbian" msgstr "Górnoserbšćina" +msgid "Haitian Creole" +msgstr "Haitiska kreolšćina" + msgid "Hungarian" msgstr "Hungoršćina" @@ -557,8 +560,8 @@ msgid "" "“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " "format." msgstr "" -"Gódnota „%(value)s“ ma njepłaśiwy datumowy format. Musy we formaśe DD.MM." -"YYYY byś." +"Gódnota „%(value)s“ ma njepłaśiwy datumowy format. Musy we formaśe " +"DD.MM.YYYY byś." #, python-format msgid "" @@ -572,11 +575,11 @@ msgstr "Datum (bźez casa)" #, python-format msgid "" -"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." -"uuuuuu]][TZ] format." +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD " +"HH:MM[:ss[.uuuuuu]][TZ] format." msgstr "" -"Gódnota „%(value)s“ ma njepłaśiwy format. Musy w formaśe DD.MM.YYYY HH:MM[:" -"ss[.uuuuuu]][TZ] byś." +"Gódnota „%(value)s“ ma njepłaśiwy format. Musy w formaśe DD.MM.YYYY " +"HH:MM[:ss[.uuuuuu]][TZ] byś." #, python-format msgid "" @@ -598,8 +601,8 @@ msgstr "Decimalna licba" #, python-format msgid "" -"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." -"uuuuuu] format." +"“%(value)s” value has an invalid format. It must be in [DD] " +"[[HH:]MM:]ss[.uuuuuu] format." msgstr "" "Gódnota „%(value)s“ ma njepłaśiwy format. Musy we formaśe [DD] " "[[HH:]MM:]ss[.uuuuuu] byś." @@ -667,8 +670,8 @@ msgid "" "“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " "format." msgstr "" -"Gódnota „%(value)s“ ma njepłaśiwy format. Musy w formaśe HH:MM[:ss[." -"uuuuuu]] byś." +"Gódnota „%(value)s“ ma njepłaśiwy format. Musy w formaśe " +"HH:MM[:ss[.uuuuuu]] byś." #, python-format msgid "" @@ -728,8 +731,8 @@ msgid "Many-to-many relationship" msgstr "Póśěg wjele wjele" #. Translators: If found as last label character, these punctuation -#. characters will prevent the default label_suffix to be appended to the -#. label +#. characters will prevent the default label_suffix to be appended to +#. the label msgid ":?.!" msgstr ":?.!" @@ -909,6 +912,22 @@ msgstr "Jo" msgid "No" msgstr "Ně" +msgctxt "Task" +msgid "Ready" +msgstr "Gótowy" + +msgctxt "Task" +msgid "Running" +msgstr "Běžy" + +msgctxt "Task" +msgid "Failed" +msgstr "Njejo se raźiło" + +msgctxt "Task" +msgid "Successful" +msgstr "Wuspěšny" + #. Translators: Please do not add spaces around commas. msgid "yes,no,maybe" msgstr "jo,ně,snaź" @@ -1312,8 +1331,8 @@ msgstr "Žedne %(verbose_name_plural)s k dispoziciji" #, python-format msgid "" -"Future %(verbose_name_plural)s not available because %(class_name)s." -"allow_future is False." +"Future %(verbose_name_plural)s not available because " +"%(class_name)s.allow_future is False." msgstr "" "Pśichodne %(verbose_name_plural)s njejo k dispoziciji, dokulaž " "%(class_name)s.allow_future jo False." diff --git a/django/conf/locale/he/LC_MESSAGES/django.mo b/django/conf/locale/he/LC_MESSAGES/django.mo index 4d7392129537..975b6a5ba2b8 100644 Binary files a/django/conf/locale/he/LC_MESSAGES/django.mo and b/django/conf/locale/he/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/he/LC_MESSAGES/django.po b/django/conf/locale/he/LC_MESSAGES/django.po index 330c51370d88..09456cef34d6 100644 --- a/django/conf/locale/he/LC_MESSAGES/django.po +++ b/django/conf/locale/he/LC_MESSAGES/django.po @@ -7,23 +7,22 @@ # Menachem G., 2021 # Menachem G., 2021 # אורי רודברג , 2021 -# Yaron Shahrabani , 2021 +# Yaron Shahrabani , 2021,2026 # אורי רודברג , 2020,2022-2023 msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-03-19 11:30-0500\n" -"PO-Revision-Date: 2025-04-01 15:04-0500\n" -"Last-Translator: Meir Kriheli , " -"2011-2015,2017,2019-2020,2023,2025\n" +"POT-Creation-Date: 2025-09-17 18:23-0300\n" +"PO-Revision-Date: 2026-03-09 06:49+0000\n" +"Last-Translator: Yaron Shahrabani , 2021,2026\n" "Language-Team: Hebrew (http://app.transifex.com/django/django/language/he/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: he\n" -"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % " -"1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;\n" +"Plural-Forms: nplurals=3; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % " +"1 == 0) ? 1: 2;\n" msgid "Afrikaans" msgstr "אפריקאנס" @@ -148,6 +147,9 @@ msgstr "קרואטית" msgid "Upper Sorbian" msgstr "סורבית עילית" +msgid "Haitian Creole" +msgstr "קריאולית האיטית" + msgid "Hungarian" msgstr "הונגרית" @@ -556,11 +558,11 @@ msgstr "תאריך (ללא שעה)" #, python-format msgid "" -"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." -"uuuuuu]][TZ] format." +"“%(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]." +"הערך \"%(value)s\" מכיל פורמט לא חוקי. הוא חייב להיות בפורמטYYYY-MM-DD " +"HH:MM[:ss[.uuuuuu]][TZ]." #, python-format msgid "" @@ -582,8 +584,8 @@ msgstr "מספר עשרוני" #, python-format msgid "" -"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." -"uuuuuu] format." +"“%(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]." @@ -651,8 +653,8 @@ msgid "" "“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " "format." msgstr "" -"הערך “%(value)s” מכיל פורמט לא חוקי. הוא חייב להיות בפורמט HH:MM[:ss[." -"uuuuuu]]." +"הערך “%(value)s” מכיל פורמט לא חוקי. הוא חייב להיות בפורמט " +"HH:MM[:ss[.uuuuuu]]." #, python-format msgid "" @@ -711,8 +713,8 @@ msgid "Many-to-many relationship" msgstr "יחס של רבים לרבים" #. Translators: If found as last label character, these punctuation -#. characters will prevent the default label_suffix to be appended to the -#. label +#. characters will prevent the default label_suffix to be appended to +#. the label msgid ":?.!" msgstr ":?.!" @@ -872,6 +874,22 @@ msgstr "כן" msgid "No" msgstr "לא" +msgctxt "Task" +msgid "Ready" +msgstr "בהמתנה" + +msgctxt "Task" +msgid "Running" +msgstr "רצה" + +msgctxt "Task" +msgid "Failed" +msgstr "נכשלה" + +msgctxt "Task" +msgid "Successful" +msgstr "מוצלחת" + #. Translators: Please do not add spaces around commas. msgid "yes,no,maybe" msgstr "כן,לא,אולי" @@ -1263,11 +1281,11 @@ msgstr "לא נמצאו %(verbose_name_plural)s" #, python-format msgid "" -"Future %(verbose_name_plural)s not available because %(class_name)s." -"allow_future is False." +"Future %(verbose_name_plural)s not available because " +"%(class_name)s.allow_future is False." msgstr "" -"לא נמצאו %(verbose_name_plural)s בזמן עתיד מאחר ש-%(class_name)s." -"allow_future מוגדר False." +"לא נמצאו %(verbose_name_plural)s בזמן עתיד מאחר " +"ש-%(class_name)s.allow_future מוגדר False." #, python-format msgid "Invalid date string “%(datestr)s” given format “%(format)s”" diff --git a/django/conf/locale/hr/LC_MESSAGES/django.mo b/django/conf/locale/hr/LC_MESSAGES/django.mo index 8f1ce21cfe1e..8a6ea1aa26e5 100644 Binary files a/django/conf/locale/hr/LC_MESSAGES/django.mo and b/django/conf/locale/hr/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/hr/LC_MESSAGES/django.po b/django/conf/locale/hr/LC_MESSAGES/django.po index be114e2da799..869b0d02e5b4 100644 --- a/django/conf/locale/hr/LC_MESSAGES/django.po +++ b/django/conf/locale/hr/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ # Bojan Mihelač , 2012 # Boni Đukić , 2017 # Jannis Leidel , 2011 -# Milo Ivir , 2025 +# Milo Ivir , 2025-2026 # Mislav Cimperšak , 2015-2016 # Nino , 2013 # senko , 2012 @@ -18,16 +18,16 @@ msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-09-17 18:23-0300\n" -"PO-Revision-Date: 2025-12-03 06:49+0000\n" -"Last-Translator: Milo Ivir , 2025\n" +"PO-Revision-Date: 2026-03-09 06:49+0000\n" +"Last-Translator: Milo Ivir , 2025-2026\n" "Language-Team: Croatian (http://app.transifex.com/django/django/language/" "hr/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: hr\n" -"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" -"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " +"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" msgid "Afrikaans" msgstr "Afrikaans" @@ -374,7 +374,7 @@ msgstr "Upišite valjanu e-mail adresu." msgid "" "Enter a valid “slug” consisting of letters, numbers, underscores or hyphens." msgstr "" -"Upišiti valjan indikator URL adrese (slug) koji se sastoji od slova, " +"Upišite valjan indikator URL adrese (slug) koji se sastoji od slova, " "znamenki, podvlaka ili znakova za rastavljanje riječi." msgid "" @@ -585,8 +585,8 @@ msgstr "Datum (bez vremena)" #, python-format msgid "" -"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." -"uuuuuu]][TZ] format." +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD " +"HH:MM[:ss[.uuuuuu]][TZ] format." msgstr "" "„%(value)s” vrijednost nije u ispravnom formatu datuma. Format mora biti " "YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]." @@ -611,8 +611,8 @@ msgstr "Decimalni broj" #, python-format msgid "" -"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." -"uuuuuu] format." +"“%(value)s” value has an invalid format. It must be in [DD] " +"[[HH:]MM:]ss[.uuuuuu] format." msgstr "" "„%(value)s” vrijednost nije u ispravnom formatu. Format mora biti [DD] " "[[HH:]MM:]ss[.uuuuuu]." @@ -680,12 +680,16 @@ msgid "" "“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " "format." msgstr "" +"Vrijenost „%(value)s” nije u ispravnom formatu. Mora biti u formatu " +"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 "" +"Vrijednost „%(value)s” je u ispravnom formatu (HH:MM[:ss[.uuuuuu]]), ali " +"vrijeme ne valja." msgid "Time" msgstr "Vrijeme" @@ -698,7 +702,7 @@ msgstr "Binarni podaci" #, python-format msgid "“%(value)s” is not a valid UUID." -msgstr "" +msgstr "Vrijednost „%(value)s” nije ispravan UUID." msgid "Universally unique identifier" msgstr "Univerzalan jedinstveni identifikator" @@ -867,7 +871,7 @@ msgid "Please correct the duplicate values below." msgstr "Ispravite duple vrijednosti ispod." msgid "The inline value did not match the parent instance." -msgstr "" +msgstr "Ugrađena vrijednost nije odgovarala nadređenoj instanci." msgid "Select a valid choice. That choice is not one of the available choices." msgstr "Odaberite ispravni izbor. Taj izbor nije jedan od dostupnih izbora." @@ -1183,7 +1187,7 @@ msgstr "To nije ispravna IPv6 adresa." #, python-format msgctxt "String to return when truncating text" msgid "%(truncated_text)s…" -msgstr "" +msgstr "%(truncated_text)s …" msgid "or" msgstr "ili" @@ -1246,12 +1250,19 @@ msgid "" "required for security reasons, to ensure that your browser is not being " "hijacked by third parties." msgstr "" +"Ovu se poruka prikazuje jer ova HTTPS stranica zahtijeva da web-preglednik " +"šalje „Referer” zaglavlje, ali ono nije poslano. Ovo zaglavlje je potrebno " +"iz sigurnosnih razloga, kako bi se osiguralo da treće strane ne ukradu tvoj " +"preglednik." 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 "" +"Ako ste konfigurirali svoj preglednik da deaktivira „Referer” zaglavlja, " +"ponovo ih aktivirajte, barem za ovu stranicu ili za HTTPS veze ili za " +"zahtjeve istog izvora (same-origin)." msgid "" "If you are using the tag or " @@ -1260,6 +1271,11 @@ msgid "" "If you’re concerned about privacy, use alternatives like for links to third-party sites." msgstr "" +"Ako koristite oznaku ili " +"uključujete zaglavlje „Referrer-Policy: no-referrer”, uklonite ih. CSRF " +"zaštita zahtijeva zaglavlje „Referer” kako bi mogla provoditi strogu " +"provjeru referera. Ako ste zabrinuti za privatnost, koristite alternative " +"poput za poveznice na stranice trećih strana.“" msgid "" "You are seeing this message because this site requires a CSRF cookie when " @@ -1275,6 +1291,9 @@ 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 "" +"Ako ste svoj preglednik konfigurirali da deaktivira kolačiće, ponovo ih " +"aktivirajte, barem za ovu stranicu ili za zahtjeve istog izvora (same-" +"origin)." msgid "More information is available with DEBUG=True." msgstr "Dodatne informacije su dostupne sa postavkom DEBUG=True." @@ -1300,22 +1319,22 @@ msgstr "Nije dostupno: %(verbose_name_plural)s" #, python-format msgid "" -"Future %(verbose_name_plural)s not available because %(class_name)s." -"allow_future is False." +"Future %(verbose_name_plural)s not available because " +"%(class_name)s.allow_future is False." msgstr "" "%(verbose_name_plural)s nije dostupno jer je %(class_name)s.allow_future " "False." #, python-format msgid "Invalid date string “%(datestr)s” given format “%(format)s”" -msgstr "" +msgstr "Neispravan datum„%(datestr)s” za zadani format „%(format)s”" #, python-format msgid "No %(verbose_name)s found matching the query" msgstr "%(verbose_name)s - pretragom nisu pronađeni rezultati za upit" msgid "Page is not “last”, nor can it be converted to an int." -msgstr "" +msgstr "Stranica nije „zadnja”, niti se može pretvoriti u cijeli broj." #, python-format msgid "Invalid page (%(page_number)s): %(message)s" @@ -1323,14 +1342,14 @@ msgstr "Nevažeća stranica (%(page_number)s):%(message)s" #, python-format msgid "Empty list and “%(class_name)s.allow_empty” is False." -msgstr "" +msgstr "Popis je prazan, a klasa „%(class_name)s.allow_empty” je „False”." msgid "Directory indexes are not allowed here." msgstr "Sadržaji direktorija ovdje nisu dozvoljeni." #, python-format msgid "“%(path)s” does not exist" -msgstr "" +msgstr "Staza „%(path)s” ne postoji" #, python-format msgid "Index of %(directory)s" diff --git a/django/conf/locale/hsb/LC_MESSAGES/django.mo b/django/conf/locale/hsb/LC_MESSAGES/django.mo index b4738a032cce..75433e10f785 100644 Binary files a/django/conf/locale/hsb/LC_MESSAGES/django.mo and b/django/conf/locale/hsb/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/hsb/LC_MESSAGES/django.po b/django/conf/locale/hsb/LC_MESSAGES/django.po index 5766e319e826..6d09dc3af1bd 100644 --- a/django/conf/locale/hsb/LC_MESSAGES/django.po +++ b/django/conf/locale/hsb/LC_MESSAGES/django.po @@ -1,14 +1,14 @@ # This file is distributed under the same license as the Django package. # # Translators: -# Michael Wolf , 2016-2025 +# Michael Wolf , 2016-2026 msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-03-19 11:30-0500\n" -"PO-Revision-Date: 2025-04-01 15:04-0500\n" -"Last-Translator: Michael Wolf , 2016-2025\n" +"POT-Creation-Date: 2025-09-17 18:23-0300\n" +"PO-Revision-Date: 2026-03-09 06:49+0000\n" +"Last-Translator: Michael Wolf , 2016-2026\n" "Language-Team: Upper Sorbian (http://app.transifex.com/django/django/" "language/hsb/)\n" "MIME-Version: 1.0\n" @@ -141,6 +141,9 @@ msgstr "Chorwatšćina" msgid "Upper Sorbian" msgstr "Hornjoserbšćina" +msgid "Haitian Creole" +msgstr "Haitiska kreolšćina" + msgid "Hungarian" msgstr "Madźaršćina" @@ -555,8 +558,8 @@ msgid "" "“%(value)s” value has an invalid date format. It must be in YYYY-MM-DD " "format." msgstr "" -"Hódnota „%(value)s“ ma njepłaćiwy datumowy format. Dyrbi we formaće DD.MM." -"YYYY być." +"Hódnota „%(value)s“ ma njepłaćiwy datumowy format. Dyrbi we formaće " +"DD.MM.YYYY być." #, python-format msgid "" @@ -570,11 +573,11 @@ msgstr "Datum (bjez časa)" #, python-format msgid "" -"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." -"uuuuuu]][TZ] format." +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD " +"HH:MM[:ss[.uuuuuu]][TZ] format." msgstr "" -"Hódnota „%(value)s“ ma njepłaćiwy format. Dyrbi we formaće DD.MM.YYYY HH:MM[:" -"ss[.uuuuuu]][TZ] być." +"Hódnota „%(value)s“ ma njepłaćiwy format. Dyrbi we formaće DD.MM.YYYY " +"HH:MM[:ss[.uuuuuu]][TZ] być." #, python-format msgid "" @@ -596,11 +599,11 @@ msgstr "Decimalna ličba" #, python-format msgid "" -"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." -"uuuuuu] format." +"“%(value)s” value has an invalid format. It must be in [DD] " +"[[HH:]MM:]ss[.uuuuuu] format." msgstr "" -"Hódnota „%(value)s“ ma njepłaćiwy format. Dyrbi w formaće [DD] [HH:[MM:]]ss[." -"uuuuuu] być." +"Hódnota „%(value)s“ ma njepłaćiwy format. Dyrbi w formaće [DD] [HH:" +"[MM:]]ss[.uuuuuu] być." msgid "Duration" msgstr "Traće" @@ -665,8 +668,8 @@ msgid "" "“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " "format." msgstr "" -"Hódnota „%(value)s“ ma njepłaćiwy format. Dyrbi we formaće HH:MM[:ss[." -"uuuuuu]] być." +"Hódnota „%(value)s“ ma njepłaćiwy format. Dyrbi we formaće " +"HH:MM[:ss[.uuuuuu]] być." #, python-format msgid "" @@ -726,8 +729,8 @@ msgid "Many-to-many relationship" msgstr "Poćah wjele wjele" #. Translators: If found as last label character, these punctuation -#. characters will prevent the default label_suffix to be appended to the -#. label +#. characters will prevent the default label_suffix to be appended to +#. the label msgid ":?.!" msgstr ":?.!" @@ -903,6 +906,22 @@ msgstr "Haj" msgid "No" msgstr "Ně" +msgctxt "Task" +msgid "Ready" +msgstr "Hotowy" + +msgctxt "Task" +msgid "Running" +msgstr "Běži" + +msgctxt "Task" +msgid "Failed" +msgstr "Njeje so poradźiło" + +msgctxt "Task" +msgid "Successful" +msgstr "Wuspěšny" + #. Translators: Please do not add spaces around commas. msgid "yes,no,maybe" msgstr "haj,ně,snano" @@ -1304,8 +1323,8 @@ msgstr "Žadyn %(verbose_name_plural)s k dispoziciji njeje" #, python-format msgid "" -"Future %(verbose_name_plural)s not available because %(class_name)s." -"allow_future is False." +"Future %(verbose_name_plural)s not available because " +"%(class_name)s.allow_future is False." msgstr "" "Přichodowe %(verbose_name_plural)s k dispoziciji njejsu, dokelž hódnota " "%(class_name)s.allow_future je False." diff --git a/django/conf/locale/id/LC_MESSAGES/django.mo b/django/conf/locale/id/LC_MESSAGES/django.mo index 360bd2022be8..3424d74fd64f 100644 Binary files a/django/conf/locale/id/LC_MESSAGES/django.mo and b/django/conf/locale/id/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/id/LC_MESSAGES/django.po b/django/conf/locale/id/LC_MESSAGES/django.po index bb8251631134..9c934153cf66 100644 --- a/django/conf/locale/id/LC_MESSAGES/django.po +++ b/django/conf/locale/id/LC_MESSAGES/django.po @@ -4,21 +4,21 @@ # Adiyat Mubarak , 2017 # Bayu Satiyo , 2024 # Claude Paroz , 2018 -# Fery Setiawan , 2015-2019,2021-2025 +# Fery Setiawan , 2015-2019,2021-2026 # Jannis Leidel , 2011 # M Asep Indrayana , 2015 # oon arfiandwi (OonID) , 2016,2020 # rodin , 2011 # rodin , 2013-2016 -# sag​e , 2018-2019 +# S​age Abdullah , 2018-2019 # Sutrisno Efendi , 2015,2017 msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-03-19 11:30-0500\n" -"PO-Revision-Date: 2025-09-17 06:49+0000\n" -"Last-Translator: Fery Setiawan , 2015-2019,2021-2025\n" +"POT-Creation-Date: 2025-09-17 18:23-0300\n" +"PO-Revision-Date: 2026-03-09 06:49+0000\n" +"Last-Translator: Fery Setiawan , 2015-2019,2021-2026\n" "Language-Team: Indonesian (http://app.transifex.com/django/django/language/" "id/)\n" "MIME-Version: 1.0\n" @@ -150,6 +150,9 @@ msgstr "Kroasia" msgid "Upper Sorbian" msgstr "Sorbian Atas" +msgid "Haitian Creole" +msgstr "Kreol Haiti" + msgid "Hungarian" msgstr "Hungaria" @@ -555,8 +558,8 @@ msgstr "Tanggal (tanpa waktu)" #, python-format msgid "" -"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." -"uuuuuu]][TZ] format." +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD " +"HH:MM[:ss[.uuuuuu]][TZ] format." msgstr "" "Nilai “%(value)s” memiliki format yang tidak valid. Tanggal dan waktu harus " "dalam format YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]." @@ -581,8 +584,8 @@ msgstr "Bilangan desimal" #, python-format msgid "" -"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." -"uuuuuu] format." +"“%(value)s” value has an invalid format. It must be in [DD] " +"[[HH:]MM:]ss[.uuuuuu] format." msgstr "" "Nilai “%(value)s” mempunyai format yang tidak valid. Waktu harus dalam " "format [DD] [[HH:]MM:]ss[.uuuuuu]." @@ -711,8 +714,8 @@ msgid "Many-to-many relationship" msgstr "Hubungan banyak-ke-banyak" #. Translators: If found as last label character, these punctuation -#. characters will prevent the default label_suffix to be appended to the -#. label +#. characters will prevent the default label_suffix to be appended to +#. the label msgid ":?.!" msgstr ":?.!" @@ -875,6 +878,22 @@ msgstr "Ya" msgid "No" msgstr "Tidak" +msgctxt "Task" +msgid "Ready" +msgstr "Siap" + +msgctxt "Task" +msgid "Running" +msgstr "Berjalan" + +msgctxt "Task" +msgid "Failed" +msgstr "Gagal" + +msgctxt "Task" +msgid "Successful" +msgstr "Berhasil" + #. Translators: Please do not add spaces around commas. msgid "yes,no,maybe" msgstr "ya,tidak,mungkin" @@ -1258,11 +1277,11 @@ msgstr "Tidak ada %(verbose_name_plural)s tersedia" #, python-format msgid "" -"Future %(verbose_name_plural)s not available because %(class_name)s." -"allow_future is False." +"Future %(verbose_name_plural)s not available because " +"%(class_name)s.allow_future is False." msgstr "" -"%(verbose_name_plural)s di masa depan tidak tersedia karena %(class_name)s." -"allow_future bernilai False." +"%(verbose_name_plural)s di masa depan tidak tersedia karena " +"%(class_name)s.allow_future bernilai False." #, python-format msgid "Invalid date string “%(datestr)s” given format “%(format)s”" @@ -1314,10 +1333,10 @@ msgid "" "rel=\"noopener\">DEBUG=True is in your settings file and you have not " "configured any URLs." msgstr "" -"Anda sedang melihat halaman ini karena DEBUG=True berada di berkas pengaturan Anda dan Anda " -"belum mengonfigurasi URL apa pun." +"Anda sedang melihat halaman ini karena DEBUG=True berada di berkas " +"pengaturan Anda dan Anda belum mengonfigurasi URL apa pun." msgid "Django Documentation" msgstr "Dokumentasi Django" diff --git a/django/conf/locale/ja/LC_MESSAGES/django.mo b/django/conf/locale/ja/LC_MESSAGES/django.mo index 3235bdcad473..97ac7fe7d25e 100644 Binary files a/django/conf/locale/ja/LC_MESSAGES/django.mo and b/django/conf/locale/ja/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/ja/LC_MESSAGES/django.po b/django/conf/locale/ja/LC_MESSAGES/django.po index 51343e66fc62..4ee59b43b0e4 100644 --- a/django/conf/locale/ja/LC_MESSAGES/django.po +++ b/django/conf/locale/ja/LC_MESSAGES/django.po @@ -14,6 +14,7 @@ # Shinichi Katsumata , 2019 # Shinya Okano , 2012-2019,2021,2023-2025 # TANIGUCHI Taichi, 2022 +# TAKAHASHI Shuuji , 2026 # Takuro Onoue , 2020 # Takuya N , 2020 # Tetsuya Morimoto , 2011 @@ -21,10 +22,9 @@ msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-05-22 11:46-0300\n" -"PO-Revision-Date: 2025-03-19 11:30-0500\n" -"Last-Translator: Shinya Okano , " -"2012-2019,2021,2023-2025\n" +"POT-Creation-Date: 2025-09-17 18:23-0300\n" +"PO-Revision-Date: 2026-03-09 06:49+0000\n" +"Last-Translator: TAKAHASHI Shuuji , 2026\n" "Language-Team: Japanese (http://app.transifex.com/django/django/language/" "ja/)\n" "MIME-Version: 1.0\n" @@ -156,6 +156,9 @@ msgstr "クロアチア語" msgid "Upper Sorbian" msgstr "高地ソルブ語" +msgid "Haitian Creole" +msgstr "ハイチ・クレオール語" + msgid "Hungarian" msgstr "ハンガリー語" @@ -556,8 +559,8 @@ msgstr "日付" #, python-format msgid "" -"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." -"uuuuuu]][TZ] format." +"“%(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] 形式で" "なければなりません。" @@ -582,8 +585,8 @@ msgstr "10 進数 (小数可)" #, python-format msgid "" -"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." -"uuuuuu] format." +"“%(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] 形式でなければ" "なりません。" @@ -712,8 +715,8 @@ msgid "Many-to-many relationship" msgstr "多対多の関連" #. Translators: If found as last label character, these punctuation -#. characters will prevent the default label_suffix to be appended to the -#. label +#. characters will prevent the default label_suffix to be appended to +#. the label msgid ":?.!" msgstr ":?.!" @@ -875,6 +878,22 @@ msgstr "はい" msgid "No" msgstr "いいえ" +msgctxt "Task" +msgid "Ready" +msgstr "実行待ち" + +msgctxt "Task" +msgid "Running" +msgstr "実行中" + +msgctxt "Task" +msgid "Failed" +msgstr "失敗" + +msgctxt "Task" +msgid "Successful" +msgstr "完了" + #. Translators: Please do not add spaces around commas. msgid "yes,no,maybe" msgstr "はい,いいえ,たぶん" @@ -1255,8 +1274,8 @@ msgstr "%(verbose_name_plural)s は利用できません" #, python-format msgid "" -"Future %(verbose_name_plural)s not available because %(class_name)s." -"allow_future is False." +"Future %(verbose_name_plural)s not available because " +"%(class_name)s.allow_future is False." msgstr "" "%(class_name)s.allow_futureがFalseであるため、未来の%(verbose_name_plural)sは" "利用できません。" diff --git a/django/conf/locale/ru/LC_MESSAGES/django.mo b/django/conf/locale/ru/LC_MESSAGES/django.mo index 97dff44ac07a..1c0fc82b230c 100644 Binary files a/django/conf/locale/ru/LC_MESSAGES/django.mo and b/django/conf/locale/ru/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/ru/LC_MESSAGES/django.po b/django/conf/locale/ru/LC_MESSAGES/django.po index 32fbb11a2809..be7592d942a1 100644 --- a/django/conf/locale/ru/LC_MESSAGES/django.po +++ b/django/conf/locale/ru/LC_MESSAGES/django.po @@ -19,16 +19,16 @@ # Panasoft, 2021 # Вася Аникин , 2017 # SeryiMysh , 2020 -# Алексей Борискин , 2013-2017,2019-2020,2022-2025 +# Алексей Борискин , 2013-2017,2019-2020,2022-2026 # Bobsans , 2016,2018 msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-03-19 11:30-0500\n" -"PO-Revision-Date: 2025-09-17 06:49+0000\n" +"POT-Creation-Date: 2025-09-17 18:23-0300\n" +"PO-Revision-Date: 2026-03-09 06:49+0000\n" "Last-Translator: Алексей Борискин , " -"2013-2017,2019-2020,2022-2025\n" +"2013-2017,2019-2020,2022-2026\n" "Language-Team: Russian (http://app.transifex.com/django/django/language/" "ru/)\n" "MIME-Version: 1.0\n" @@ -162,6 +162,9 @@ msgstr "Хорватский" msgid "Upper Sorbian" msgstr "Верхнелужицкий" +msgid "Haitian Creole" +msgstr "Гаитянский креольский язык" + msgid "Hungarian" msgstr "Венгерский" @@ -594,8 +597,8 @@ msgstr "Дата (без указания времени)" #, python-format msgid "" -"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." -"uuuuuu]][TZ] format." +"“%(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]." @@ -620,8 +623,8 @@ msgstr "Число с фиксированной запятой" #, python-format msgid "" -"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." -"uuuuuu] format." +"“%(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]." @@ -689,8 +692,8 @@ msgid "" "“%(value)s” value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] " "format." msgstr "" -"Значение “%(value)s” имеет неверный формат. Оно должно быть в формате HH:MM[:" -"ss[.uuuuuu]]." +"Значение “%(value)s” имеет неверный формат. Оно должно быть в формате " +"HH:MM[:ss[.uuuuuu]]." #, python-format msgid "" @@ -752,8 +755,8 @@ msgid "Many-to-many relationship" msgstr "Связь \"многие ко многим\"" #. Translators: If found as last label character, these punctuation -#. characters will prevent the default label_suffix to be appended to the -#. label +#. characters will prevent the default label_suffix to be appended to +#. the label msgid ":?.!" msgstr ":?.!" @@ -930,6 +933,22 @@ msgstr "Да" msgid "No" msgstr "Нет" +msgctxt "Task" +msgid "Ready" +msgstr "Готово к работе" + +msgctxt "Task" +msgid "Running" +msgstr "Работает" + +msgctxt "Task" +msgid "Failed" +msgstr "Упало" + +msgctxt "Task" +msgid "Successful" +msgstr "Успешно" + #. Translators: Please do not add spaces around commas. msgid "yes,no,maybe" msgstr "да,нет,может быть" @@ -1339,11 +1358,11 @@ msgstr "%(verbose_name_plural)s не доступен" #, python-format msgid "" -"Future %(verbose_name_plural)s not available because %(class_name)s." -"allow_future is False." +"Future %(verbose_name_plural)s not available because " +"%(class_name)s.allow_future is False." msgstr "" -"Будущие %(verbose_name_plural)s недоступны, потому что %(class_name)s." -"allow_future выставлен в значение \"Ложь\"." +"Будущие %(verbose_name_plural)s недоступны, потому что " +"%(class_name)s.allow_future выставлен в значение \"Ложь\"." #, python-format msgid "Invalid date string “%(datestr)s” given format “%(format)s”" @@ -1400,10 +1419,10 @@ msgid "" "rel=\"noopener\">DEBUG=True is in your settings file and you have not " "configured any URLs." msgstr "" -"Вы видите данную страницу, потому что указали DEBUG=True в файле настроек и не настроили ни одного " -"обработчика URL-адресов." +"Вы видите данную страницу, потому что указали DEBUG=True в файле настроек и не " +"настроили ни одного обработчика URL-адресов." msgid "Django Documentation" msgstr "Документация Django" diff --git a/django/conf/locale/sk/LC_MESSAGES/django.mo b/django/conf/locale/sk/LC_MESSAGES/django.mo index ddfe767cc944..e23638fa3e15 100644 Binary files a/django/conf/locale/sk/LC_MESSAGES/django.mo and b/django/conf/locale/sk/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/sk/LC_MESSAGES/django.po b/django/conf/locale/sk/LC_MESSAGES/django.po index e245cb14c577..28c709769f36 100644 --- a/django/conf/locale/sk/LC_MESSAGES/django.po +++ b/django/conf/locale/sk/LC_MESSAGES/django.po @@ -1,7 +1,7 @@ # This file is distributed under the same license as the Django package. # # Translators: -# Adam Zahradník, 2023-2024 +# Adam Zahradník, 2023-2024,2026 # Jannis Leidel , 2011 # 18f25ad6fa9930fc67cb11aca9d16a27, 2012-2013 # Marian Andre , 2013,2015,2017-2018 @@ -14,9 +14,9 @@ msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-05-22 11:46-0300\n" -"PO-Revision-Date: 2024-10-07 06:49+0000\n" -"Last-Translator: Adam Zahradník, 2023-2024\n" +"POT-Creation-Date: 2025-09-17 18:23-0300\n" +"PO-Revision-Date: 2026-03-09 06:49+0000\n" +"Last-Translator: Adam Zahradník, 2023-2024,2026\n" "Language-Team: Slovak (http://app.transifex.com/django/django/language/sk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -148,6 +148,9 @@ msgstr "chorvátsky" msgid "Upper Sorbian" msgstr "hornolužická srbčina" +msgid "Haitian Creole" +msgstr "Haitská kreolčina" + msgid "Hungarian" msgstr "maďarsky" @@ -583,11 +586,11 @@ msgstr "Dátum (bez času)" #, python-format msgid "" -"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." -"uuuuuu]][TZ] format." +"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD " +"HH:MM[:ss[.uuuuuu]][TZ] format." msgstr "" -"Hodnota „%(value)s“ má neplatný tvar. Musí byť v tvare YYYY-MM-DD HH:MM[:" -"ss[.uuuuuu]][TZ]." +"Hodnota „%(value)s“ má neplatný tvar. Musí byť v tvare YYYY-MM-DD " +"HH:MM[:ss[.uuuuuu]][TZ]." #, python-format msgid "" @@ -609,11 +612,11 @@ msgstr "Desatinné číslo" #, python-format msgid "" -"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." -"uuuuuu] format." +"“%(value)s” value has an invalid format. It must be in [DD] " +"[[HH:]MM:]ss[.uuuuuu] format." msgstr "" -"Hodnota „%(value)s“ má neplatný tvar. Musí byť v tvare [DD] [[HH:]MM:]ss[." -"uuuuuu]." +"Hodnota „%(value)s“ má neplatný tvar. Musí byť v tvare [DD] " +"[[HH:]MM:]ss[.uuuuuu]." msgid "Duration" msgstr "Doba trvania" @@ -717,8 +720,10 @@ msgid "Value must be valid JSON." msgstr "Hodnota musí byť v platnom formáte JSON." #, python-format -msgid "%(model)s instance with %(field)s %(value)r does not exist." -msgstr "Inštancia modelu %(model)s s %(field)s %(value)r neexistuje." +msgid "%(model)s instance with %(field)s %(value)r is not a valid choice." +msgstr "" +"Inštancia modelu %(model)s s hodnotou %(field)s %(value)r nie je platná " +"možnosť." msgid "Foreign Key (type determined by related field)" msgstr "Cudzí kľúč (typ určuje pole v relácii)" @@ -738,8 +743,8 @@ msgid "Many-to-many relationship" msgstr "Typ relácie: M ku N" #. Translators: If found as last label character, these punctuation -#. characters will prevent the default label_suffix to be appended to the -#. label +#. characters will prevent the default label_suffix to be appended to +#. the label msgid ":?.!" msgstr ":?.!" @@ -910,6 +915,22 @@ msgstr "Áno" msgid "No" msgstr "Nie" +msgctxt "Task" +msgid "Ready" +msgstr "Pripravené" + +msgctxt "Task" +msgid "Running" +msgstr "Prebieha" + +msgctxt "Task" +msgid "Failed" +msgstr "Zlyhalo" + +msgctxt "Task" +msgid "Successful" +msgstr "Úspešné" + #. Translators: Please do not add spaces around commas. msgid "yes,no,maybe" msgstr "áno,nie,možno" @@ -1312,11 +1333,11 @@ msgstr "%(verbose_name_plural)s nie sú dostupné" #, python-format msgid "" -"Future %(verbose_name_plural)s not available because %(class_name)s." -"allow_future is False." +"Future %(verbose_name_plural)s not available because " +"%(class_name)s.allow_future is False." msgstr "" -"Budúce %(verbose_name_plural)s nie sú dostupné pretože %(class_name)s." -"allow_future má hodnotu False. " +"Budúce %(verbose_name_plural)s nie sú dostupné pretože " +"%(class_name)s.allow_future má hodnotu False. " #, python-format msgid "Invalid date string “%(datestr)s” given format “%(format)s”" @@ -1370,10 +1391,10 @@ msgid "" "rel=\"noopener\">DEBUG=True is in your settings file and you have not " "configured any URLs." msgstr "" -"Táto stránka sa zobrazuje pretože máte DEBUG=True v súbore s nastaveniami a nie sú " -"nakonfigurované žiadne URL." +"Táto stránka sa zobrazuje pretože máte DEBUG=True v súbore s nastaveniami a " +"nie sú nakonfigurované žiadne URL." msgid "Django Documentation" msgstr "Dokumentácia Django" diff --git a/django/conf/locale/ug/LC_MESSAGES/django.mo b/django/conf/locale/ug/LC_MESSAGES/django.mo index 359ecd556f05..1bfb2b44a1ca 100644 Binary files a/django/conf/locale/ug/LC_MESSAGES/django.mo and b/django/conf/locale/ug/LC_MESSAGES/django.mo differ diff --git a/django/conf/locale/ug/LC_MESSAGES/django.po b/django/conf/locale/ug/LC_MESSAGES/django.po index 20bdfa1e9f35..81d4f913010d 100644 --- a/django/conf/locale/ug/LC_MESSAGES/django.po +++ b/django/conf/locale/ug/LC_MESSAGES/django.po @@ -2,7 +2,7 @@ # # Translators: # abdl erkin <84247764@qq.com>, 2018 -# Abduqadir Abliz , 2023-2024 +# Abduqadir Abliz , 2023-2024,2026 # Abduqadir Abliz , 2023 # Azat, 2023,2025 # Murat Orhun , 2023 @@ -11,9 +11,9 @@ msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-03-19 11:30-0500\n" -"PO-Revision-Date: 2025-09-17 06:49+0000\n" -"Last-Translator: Natalia, 2025\n" +"POT-Creation-Date: 2025-09-17 18:23-0300\n" +"PO-Revision-Date: 2026-03-09 06:49+0000\n" +"Last-Translator: Abduqadir Abliz , 2023-2024,2026\n" "Language-Team: Uyghur (http://app.transifex.com/django/django/language/ug/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -146,6 +146,9 @@ msgstr "كىرودىيەچە" msgid "Upper Sorbian" msgstr "يۇقىرى سوربچە" +msgid "Haitian Creole" +msgstr "كرېيولچە ھايتى" + msgid "Hungarian" msgstr "ماجارچە" @@ -563,8 +566,8 @@ msgstr "چېسلا (سائەت مىنۇت يوق)" #, python-format msgid "" -"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." -"uuuuuu]][TZ] format." +"“%(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] شەكلىدە بولۇشى كېرەك." @@ -589,8 +592,8 @@ msgstr "ئونلۇق سان" #, python-format msgid "" -"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." -"uuuuuu] format." +"“%(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] " "شەكلىدە بولۇشى كېرەك." @@ -719,8 +722,8 @@ msgid "Many-to-many relationship" msgstr "كۆپكە كۆب مۇناسىۋىتى" #. Translators: If found as last label character, these punctuation -#. characters will prevent the default label_suffix to be appended to the -#. label +#. characters will prevent the default label_suffix to be appended to +#. the label msgid ":?.!" msgstr ":?.!" @@ -885,6 +888,22 @@ msgstr "ھەئە" msgid "No" msgstr "ياق" +msgctxt "Task" +msgid "Ready" +msgstr "تەييار" + +msgctxt "Task" +msgid "Running" +msgstr "ئىجرا قىلىنىۋاتىدۇ" + +msgctxt "Task" +msgid "Failed" +msgstr "مەغلۇپ بولدى" + +msgctxt "Task" +msgid "Successful" +msgstr "مۇۋەپپەقىيەتلىك" + #. Translators: Please do not add spaces around commas. msgid "yes,no,maybe" msgstr "ھەئە, ياق, بەلكىىم" @@ -1276,11 +1295,11 @@ msgstr "%(verbose_name_plural)s يوق" #, python-format msgid "" -"Future %(verbose_name_plural)s not available because %(class_name)s." -"allow_future is False." +"Future %(verbose_name_plural)s not available because " +"%(class_name)s.allow_future is False." msgstr "" -"كەلگۈسى %(verbose_name_plural)s ئىشلەتكىلى بولمايدۇ ، چۈنكى %(class_name)s." -"allow_future بولسا False." +"كەلگۈسى %(verbose_name_plural)s ئىشلەتكىلى بولمايدۇ ، چۈنكى " +"%(class_name)s.allow_future بولسا False." #, python-format msgid "Invalid date string “%(datestr)s” given format “%(format)s”" diff --git a/django/conf/locale/zh_Hans/LC_MESSAGES/django.mo b/django/conf/locale/zh_Hans/LC_MESSAGES/django.mo index c4d7a034e050..34fa3b6bfb43 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 2c3fb26557a1..345bfac1ec7c 100644 --- a/django/conf/locale/zh_Hans/LC_MESSAGES/django.po +++ b/django/conf/locale/zh_Hans/LC_MESSAGES/django.po @@ -1,6 +1,7 @@ # This file is distributed under the same license as the Django package. # # Translators: +# funcy39, 2026 # HuanCheng Bai白宦成(Bestony) , 2017-2018 # lanbla , 2021 # Daniel Duan , 2013 @@ -15,7 +16,7 @@ # Le Yang , 2018 # li beite , 2020 # Liping Wang , 2016-2017 -# L., 2024 +# 刘培基(奶牛), 2024 # matthew Yip , 2020 # Natalia, 2025 # mozillazg , 2016 @@ -36,7 +37,7 @@ # ced773123cfad7b4e8b79ca80f736af9, 2011-2012 # Ziya Tang , 2018 # 付峥 , 2018 -# L., 2024 +# 刘培基(奶牛), 2024 # LatteFang <370358679@qq.com>, 2020 # Kevin Sze , 2012 # 高乐喆 , 2023 @@ -45,8 +46,8 @@ msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-09-17 18:23-0300\n" -"PO-Revision-Date: 2025-12-03 06:49+0000\n" -"Last-Translator: Natalia, 2025\n" +"PO-Revision-Date: 2026-03-09 06:49+0000\n" +"Last-Translator: funcy39, 2026\n" "Language-Team: Chinese (China) (http://app.transifex.com/django/django/" "language/zh_CN/)\n" "MIME-Version: 1.0\n" @@ -179,7 +180,7 @@ msgid "Upper Sorbian" msgstr "上索布" msgid "Haitian Creole" -msgstr "" +msgstr "海地语" msgid "Hungarian" msgstr "匈牙利语" @@ -443,8 +444,8 @@ 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 等等。" +"确保此值是步长 %(limit_value)s 的倍数,从 %(offset)s 开始,例如 %(offset)s、" +"%(valid_value1)s、%(valid_value2)s 等等。" #, python-format msgid "" @@ -572,11 +573,11 @@ msgstr "日期(不带时分)" #, python-format msgid "" -"“%(value)s” value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[." -"uuuuuu]][TZ] format." +"“%(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] " +"“%(value)s”的值有一个错误的日期格式。它的格式应该是YYYY-MM-DD " +"HH:MM[:ss[.uuuuuu]][TZ] " #, python-format msgid "" @@ -598,8 +599,8 @@ msgstr "小数" #, python-format msgid "" -"“%(value)s” value has an invalid format. It must be in [DD] [[HH:]MM:]ss[." -"uuuuuu] format." +"“%(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] " @@ -878,19 +879,19 @@ msgstr "否" msgctxt "Task" msgid "Ready" -msgstr "" +msgstr "就绪" msgctxt "Task" msgid "Running" -msgstr "" +msgstr "运行中" msgctxt "Task" msgid "Failed" -msgstr "" +msgstr "失败" msgctxt "Task" msgid "Successful" -msgstr "" +msgstr "成功" #. Translators: Please do not add spaces around commas. msgid "yes,no,maybe" @@ -1268,8 +1269,8 @@ msgstr "%(verbose_name_plural)s 可用" #, python-format msgid "" -"Future %(verbose_name_plural)s not available because %(class_name)s." -"allow_future is False." +"Future %(verbose_name_plural)s not available because " +"%(class_name)s.allow_future is False." msgstr "" "因为 %(class_name)s.allow_future 设置为 False,所以特性 " "%(verbose_name_plural)s 不可用。" diff --git a/django/contrib/admin/locale/az/LC_MESSAGES/django.mo b/django/contrib/admin/locale/az/LC_MESSAGES/django.mo index 82cb47b36aa1..bfb259fc7f55 100644 Binary files a/django/contrib/admin/locale/az/LC_MESSAGES/django.mo and b/django/contrib/admin/locale/az/LC_MESSAGES/django.mo differ diff --git a/django/contrib/admin/locale/az/LC_MESSAGES/django.po b/django/contrib/admin/locale/az/LC_MESSAGES/django.po index fb246831ef06..add1c0d113e0 100644 --- a/django/contrib/admin/locale/az/LC_MESSAGES/django.po +++ b/django/contrib/admin/locale/az/LC_MESSAGES/django.po @@ -5,7 +5,7 @@ # Emin Mastizada , 2016 # Konul Allahverdiyeva , 2016 # Nicat Məmmədov , 2022 -# Nijat Mammadov, 2024-2025 +# Nijat Mammadov, 2024-2026 # Sevdimali , 2024 # Zulfugar Ismayilzadeh , 2017 msgid "" @@ -13,8 +13,8 @@ msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-09-17 18:23-0300\n" -"PO-Revision-Date: 2025-12-03 07:05+0000\n" -"Last-Translator: Nijat Mammadov, 2024-2025\n" +"PO-Revision-Date: 2026-03-09 07:05+0000\n" +"Last-Translator: Nijat Mammadov, 2024-2026\n" "Language-Team: Azerbaijani (http://app.transifex.com/django/django/language/" "az/)\n" "MIME-Version: 1.0\n" @@ -131,10 +131,10 @@ msgid "change message" msgstr "dəyişmə mesajı" msgid "log entry" -msgstr "loq yazısı" +msgstr "jurnal qeydi" msgid "log entries" -msgstr "loq yazıları" +msgstr "jurnal qeydləri" #, python-format msgid "Added “%(object)s”." @@ -273,7 +273,7 @@ msgstr "Sil" #, python-format msgid "Change history: %s" -msgstr "Dəyişmə tarixi: %s" +msgstr "Dəyişdirilmə tarixçəsi: %s" #. Translators: Model verbose name and instance #. representation, suitable to be an item in a @@ -333,7 +333,7 @@ msgstr "" "edirik." msgid "Run" -msgstr "" +msgstr "İcra et" msgid "Click here to select the objects across all pages" msgstr "Bütün səhifələr üzrə obyektləri seçmək üçün bura klikləyin" @@ -426,7 +426,7 @@ msgid "Add %(name)s" msgstr "%(name)s əlavə et" msgid "History" -msgstr "Tarix" +msgstr "Tarixçə" msgid "View on site" msgstr "Saytda bax" @@ -471,27 +471,34 @@ msgid "" "related objects, but your account doesn't have permission to delete the " "following types of objects:" msgstr "" +"%(object_name)s \"%(escaped_object)s\" silinməsi əlaqəli obyektlərin də " +"silinməsinə səbəb olacaq, lakin sizin hesabınız aşağıdakı obyekt növlərini " +"silmək üçün icazəyə malik deyil:" #, python-format msgid "" "Deleting the %(object_name)s “%(escaped_object)s” would require deleting the " "following protected related objects:" msgstr "" +"%(object_name)s \"%(escaped_object)s\" silinməsi aşağıdakı qorunan əlaqəli " +"obyektlərin silinməsini tələb edəcək:" #, python-format 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 "" +"%(object_name)s \"%(escaped_object)s\" elementini silmək istədiyinizə " +"əminsiz? Aşağıda qeyd olunan bütün əlaqəli elementlər də silinəcək:" msgid "Objects" msgstr "Obyektlər" msgid "Yes, I’m sure" -msgstr "Bəli, əminəm" +msgstr "Hə, əminəm" msgid "No, take me back" -msgstr "Xeyr, geri qayıt" +msgstr "Yox, geri qayıt" #, python-format msgid "" @@ -577,7 +584,7 @@ msgid "Sidebar" msgstr "Yan panel" msgid "Start typing to filter…" -msgstr "Süzmək üçün yazın..." +msgstr "Süzgəcləmək üçün yazın..." msgid "Filter navigation items" msgstr "Naviqasiya elementlərini süz" @@ -593,7 +600,7 @@ msgstr "Əməliyyat" #, python-format msgid "Pagination %(name)s entries" -msgstr "" +msgstr "%(name)s girişlərinin səhifələndirilməsi" msgid "entry" msgid_plural "entries" @@ -609,7 +616,7 @@ msgstr "" #, python-format msgid "Pagination %(name)s" -msgstr "" +msgstr "%(name)s səhifələndirilməsi" msgid "Show all" msgstr "Hamısını göstər" @@ -619,7 +626,7 @@ msgstr "Qəfil pəncərə qapadılır…" #, python-format msgid "Search %(name)s" -msgstr "" +msgstr "%(name)s axtar" msgid "Search" msgstr "Axtar" diff --git a/django/contrib/admin/locale/az/LC_MESSAGES/djangojs.mo b/django/contrib/admin/locale/az/LC_MESSAGES/djangojs.mo index 4bdcaf55c4ed..b9eae4c5b26d 100644 Binary files a/django/contrib/admin/locale/az/LC_MESSAGES/djangojs.mo and b/django/contrib/admin/locale/az/LC_MESSAGES/djangojs.mo differ diff --git a/django/contrib/admin/locale/az/LC_MESSAGES/djangojs.po b/django/contrib/admin/locale/az/LC_MESSAGES/djangojs.po index c7e48cddf9bf..9a876c0c5d7e 100644 --- a/django/contrib/admin/locale/az/LC_MESSAGES/djangojs.po +++ b/django/contrib/admin/locale/az/LC_MESSAGES/djangojs.po @@ -5,14 +5,14 @@ # Emin Mastizada , 2016,2020 # Emin Mastizada , 2016 # Nicat Məmmədov , 2022 -# Nijat Mammadov, 2024-2025 +# Nijat Mammadov, 2024-2026 msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-03-25 15:04-0500\n" -"PO-Revision-Date: 2025-12-03 07:59+0000\n" -"Last-Translator: Nijat Mammadov, 2024-2025\n" +"PO-Revision-Date: 2026-03-09 07:59+0000\n" +"Last-Translator: Nijat Mammadov, 2024-2026\n" "Language-Team: Azerbaijani (http://app.transifex.com/django/django/language/" "az/)\n" "MIME-Version: 1.0\n" @@ -29,7 +29,7 @@ msgstr "Mövcud %s" msgid "" "Choose %s by selecting them and then select the \"Choose\" arrow button." msgstr "" -" Seçmək istədiyiniz %s elementlərini işarələyib, \"Seç\" ox düyməsinə basın." +"Seçmək istədiyiniz %s elementlərini işarələyib, \"Seç\" ox düyməsinə basın." #, javascript-format msgid "Type into this box to filter down the list of available %s." @@ -58,11 +58,11 @@ msgstr "Seçilmiş %s" msgid "" "Remove %s by selecting them and then select the \"Remove\" arrow button." msgstr "" -" Silmək istədiyiniz %s elementlərini işarələyib, \"Sil\" ox düyməsinə basın." +"Silmək istədiyiniz %s elementlərini işarələyib, \"Sil\" ox düyməsinə basın." #, javascript-format msgid "Type into this box to filter down the list of selected %s." -msgstr "Seçilmiş %s siyahısını süzmək üçün bu xanaya yazın" +msgstr "Seçilmiş %s siyahısını süzgəcləmək üçün bu xanaya yazın" msgid "(click to clear)" msgstr "(təmizləmək üçün toxunun)" diff --git a/django/contrib/admin/locale/be/LC_MESSAGES/django.mo b/django/contrib/admin/locale/be/LC_MESSAGES/django.mo index f49381ce8805..74c249a928b3 100644 Binary files a/django/contrib/admin/locale/be/LC_MESSAGES/django.mo and b/django/contrib/admin/locale/be/LC_MESSAGES/django.mo differ diff --git a/django/contrib/admin/locale/be/LC_MESSAGES/django.po b/django/contrib/admin/locale/be/LC_MESSAGES/django.po index d8a21518f129..225d0390961e 100644 --- a/django/contrib/admin/locale/be/LC_MESSAGES/django.po +++ b/django/contrib/admin/locale/be/LC_MESSAGES/django.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-03-19 11:30-0500\n" -"PO-Revision-Date: 2025-09-17 07:05+0000\n" +"POT-Creation-Date: 2025-09-17 18:23-0300\n" +"PO-Revision-Date: 2026-03-09 07:05+0000\n" "Last-Translator: znotdead , " "2016-2017,2019-2021,2023-2025\n" "Language-Team: Belarusian (http://app.transifex.com/django/django/language/" @@ -329,10 +329,7 @@ msgstr "" "сайту па электроннай пошце і яна павінна быць выпраўлена ў бліжэйшы час. " "Дзякуй за ваша цярпенне." -msgid "Run the selected action" -msgstr "Выканаць абранае дзеяньне" - -msgid "Go" +msgid "Run" msgstr "Выканаць" msgid "Click here to select the objects across all pages" @@ -445,6 +442,9 @@ msgstr "Паказаць падлік" msgid "Clear all filters" msgstr "Ачысьціць усе фільтры" +msgid "Save" +msgstr "Захаваць" + msgid "Remove from sorting" msgstr "Прыбраць з упарадкаванага" @@ -466,28 +466,28 @@ msgstr "Пераключыць тэму (бягучая тэма: цёмная)" #, python-format msgid "" -"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"Deleting the %(object_name)s “%(escaped_object)s” would result in deleting " "related objects, but your account doesn't have permission to delete the " "following types of objects:" msgstr "" -"Калі выдаліць %(object_name)s «%(escaped_object)s», выдаляцца зьвязаныя " -"аб’екты, але ваш рахунак ня мае дазволу выдаляць наступныя віды аб’ектаў:" +"Калі выдаліць %(object_name)s \"%(escaped_object)s\", выдаляцца зьвязаныя " +"аб’екты, але ваш рахунак ня мае дазволу выдаляць наступныя віды аб’ектаў:" #, python-format msgid "" -"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"Deleting the %(object_name)s “%(escaped_object)s” would require deleting the " "following protected related objects:" msgstr "" -"Каб выдаліць %(object_name)s «%(escaped_object)s», трэба выдаліць і " +"Каб выдаліць %(object_name)s \"%(escaped_object)s\", трэба выдаліць і " "зьвязаныя абароненыя аб’екты:" #, python-format msgid "" -"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"Are you sure you want to delete the %(object_name)s “%(escaped_object)s”? " "All of the following related items will be deleted:" msgstr "" -"Ці выдаліць %(object_name)s «%(escaped_object)s»? Усе наступныя зьвязаныя " -"складнікі выдаляцца:" +"Вы ўпэўнены что жадаеце выдаліць %(object_name)s \"%(escaped_object)s\"? Усе " +"наступныя зьвязаныя складнікі выдаляцца:" msgid "Objects" msgstr "Аб'екты" @@ -594,6 +594,10 @@ msgstr "Карыстальнік" msgid "Action" msgstr "Дзеяньне" +#, python-format +msgid "Pagination %(name)s entries" +msgstr "Пагінацыя %(name)s запісаў" + msgid "entry" msgid_plural "entries" msgstr[0] "запіс" @@ -608,15 +612,20 @@ msgstr "" "Аб’ект ня мае гісторыі зьменаў. Мажліва, яго дадавалі не праз кіраўнічую " "пляцоўку." +#, python-format +msgid "Pagination %(name)s" +msgstr "Пагінацыя %(name)s" + msgid "Show all" msgstr "Паказаць усё" -msgid "Save" -msgstr "Захаваць" - msgid "Popup closing…" msgstr "Усплывальнае акно зачыняецца..." +#, python-format +msgid "Search %(name)s" +msgstr "Пошук %(name)s" + msgid "Search" msgstr "Шукаць" diff --git a/django/contrib/admin/locale/ckb/LC_MESSAGES/django.mo b/django/contrib/admin/locale/ckb/LC_MESSAGES/django.mo index 686f0925f3cb..a1959a1b7950 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 b3157f5b2e6b..e79077e5e047 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 Saeed , 2020 # pejar hewrami , 2020 -# Swara , 2022,2024 +# Swara , 2022,2024-2025 msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-05-22 11:46-0300\n" -"PO-Revision-Date: 2024-08-07 07:05+0000\n" -"Last-Translator: Swara , 2022,2024\n" +"POT-Creation-Date: 2025-09-17 18:23-0300\n" +"PO-Revision-Date: 2026-03-09 07:05+0000\n" +"Last-Translator: Swara , 2022,2024-2025\n" "Language-Team: Central Kurdish (http://app.transifex.com/django/django/" "language/ckb/)\n" "MIME-Version: 1.0\n" @@ -34,8 +34,8 @@ msgstr "سەرکەوتووانە %(count)d %(items)sی سڕییەوە." msgid "Cannot delete %(name)s" msgstr "ناتوانرێت %(name)s بسڕێتەوە" -msgid "Are you sure?" -msgstr "ئایا تۆ دڵنیایت؟" +msgid "Delete multiple objects" +msgstr "سڕینەوەی چەندین ئۆبجێکت" msgid "Administration" msgstr "بەڕێوەبەرایەتی" @@ -268,6 +268,9 @@ msgstr[1] "هەمووی %(total_count)s هەڵبژێردراون" msgid "0 of %(cnt)s selected" msgstr "0 لە %(cnt)s هەڵبژێردراوە" +msgid "Delete" +msgstr "سڕینەوە" + #, python-format msgid "Change history: %s" msgstr "مێژووی گۆڕین: %s" @@ -328,11 +331,8 @@ msgstr "" "هەڵەیەک بوونی هەبووە. ڕاپۆرت دراوە بە پێگەی بەڕێوەبەرایەتی لەڕێی ئیمەیڵەوە و " "دەبێت بەزوویی چاکبکرێت. سوپاس بۆ ئارامگرتنت." -msgid "Run the selected action" -msgstr "کرداری هەڵبژێردراو جێبەجێ بکە" - -msgid "Go" -msgstr "بڕۆ" +msgid "Run" +msgstr "جێبەجێکردن" msgid "Click here to select the objects across all pages" msgstr "کرتە لێرە بکە بۆ هەڵبژاردنی ئۆبجێکتەکان لە تەواوی هەموو پەڕەکان" @@ -351,6 +351,15 @@ msgstr "وردەنان" msgid "Models in the %(name)s application" msgstr "مۆدێلەکان لە بەرنامەی %(name)s" +msgid "Model name" +msgstr "ناوی یەکە" + +msgid "Add link" +msgstr "زیادکردنی بەستەر" + +msgid "Change or view list link" +msgstr "گۆڕین یان بینینی لیستی بەستەر" + msgid "Add" msgstr "زیادکردن" @@ -360,15 +369,13 @@ msgstr "بینین" 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." +msgid "After you’ve created a user, you’ll be able to edit more user options." msgstr "" -"سەرەتا، ناوی بەکارهێنەر و تێپەڕەوشە بنوسە. پاشان دەتوانیت دەستکاری زیاتری " -"هەڵبژاردنەکانی بەکارهێنەر بکەیت." +"دوای ئەوەی بەکارهێنەرت زیادکرد، توانات هەیە بۆ دەستکاری زیاتری هەڵبژاردەکانی " +"بەکارهێنەر." -msgid "Enter a username and password." -msgstr "ناوی بەکارهێنەر و تێپەڕەوشە بنوسە" +msgid "Error:" +msgstr "هەڵە:" msgid "Change password" msgstr "گۆڕینی تێپەڕەوشە" @@ -435,6 +442,9 @@ msgstr "ژماردن پیشانبدە" msgid "Clear all filters" msgstr "پاکردنەوەی هەموو پاڵاوتنەکان" +msgid "Save" +msgstr "پاشەکەوتکردن" + msgid "Remove from sorting" msgstr "لابردن لە ڕیزکردن" @@ -454,34 +464,31 @@ msgstr "گۆڕینی ڕووکار (ڕووکاری ئێستا: ڕووناک)" msgid "Toggle theme (current theme: dark)" msgstr "گۆڕینی ڕووکار (ڕووکاری ئێستا: تاریک)" -msgid "Delete" -msgstr "سڕینەوە" - #, python-format msgid "" -"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"Deleting the %(object_name)s “%(escaped_object)s” would result in deleting " "related objects, but your account doesn't have permission to delete the " "following types of objects:" msgstr "" -"سڕینەوەی %(object_name)s ‘%(escaped_object)s‘ دەبێتە هۆی سڕینەوەی ئۆبجێکتی " -"پەیوەندیدار، بەڵام هەژمارەکەت ڕێگەپێدراو نییە بۆ سڕینەوەی ئەم جۆرە " -"ئۆبجێکتانەی تر:" +"سڕینەوەی %(object_name)s “%(escaped_object)s” لە ئەنجامدا شتە " +"پەیوەندیدارەکان دەسڕێتەوە, بەڵام هەژمارەکەت دەسەڵاتی سڕینەوەی ئەم جۆرانەی " +"خوارەوەی نییە:" #, python-format msgid "" -"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"Deleting the %(object_name)s “%(escaped_object)s” would require deleting the " "following protected related objects:" msgstr "" -"سڕینەوەی %(object_name)sی ‘%(escaped_object)s‘ پێویستیی بە سڕینەوەی ئەم " -"ئۆبجێکتە پەیوەندیدارە پارێزراوانەیە:" +"سڕینەوەی %(object_name)s “%(escaped_object)s” پێویستی بە سڕینەوەی ئەم تۆمارە " +"پەیوەندیدارە پارێزراوانەی خوارەوە دەبێت:" #, python-format msgid "" -"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"Are you sure you want to delete the %(object_name)s “%(escaped_object)s”? " "All of the following related items will be deleted:" msgstr "" -"ئایا تۆ دڵنیایت کە دەتەوێت %(object_name)sی \"%(escaped_object)s\" بسڕیتەوە؟ " -"هەموو ئەم ئۆبجێکتە پەیوەندیدارانەش دەسڕێتەوە:" +"ئایا دەتەوێت %(object_name)s “%(escaped_object)s”بسڕیتەوە؟ هەموو ئەم تۆمارە " +"پەیوەندیدارانەی خوارەوەش دەسڕێنەوە:" msgid "Objects" msgstr "ئۆبجێکتەکان" @@ -492,9 +499,6 @@ msgstr "بەڵێ، من دڵنیام" msgid "No, take me back" msgstr "نەخێر، من بگەڕێنەرەوە دواوە" -msgid "Delete multiple objects" -msgstr "سڕینەوەی چەندین ئۆبجێکت" - #, python-format msgid "" "Deleting the selected %(objects_name)s would result in deleting related " @@ -569,8 +573,8 @@ msgstr "" "تۆ ڕەسەنایەتیت هەیە وەکو %(username)s, بەڵام ڕێگەپێدراو نیت بۆ ئەم لاپەڕەیە. " "دەتەوێت بە هەژمارێکی تر بچیتەژوورەوە؟" -msgid "Forgotten your password or username?" -msgstr "تێپەڕەوشە یان ناوی بەکارهێنەرەکەت بیرچۆتەوە؟" +msgid "Forgotten your login credentials?" +msgstr "زانیارییەکانی چونەژوورەوەت لەبیرکردووە؟" msgid "Toggle navigation" msgstr "کردنەوەو داخستنی ڕێنیشاندەر" @@ -593,6 +597,10 @@ msgstr "بەکارهێنەر" msgid "Action" msgstr "کردار" +#, python-format +msgid "Pagination %(name)s entries" +msgstr "پەڕەکردنی %(name)s بابەت" + msgid "entry" msgid_plural "entries" msgstr[0] "تۆمار" @@ -605,15 +613,20 @@ msgstr "" "ئەم ئۆبجێکتە مێژووی گۆڕانکاری نییە. ڕەنگە لە ڕێگەی بەڕێەوەبەری ئەم پێگەیەوە " "زیادنەکرابێت." +#, python-format +msgid "Pagination %(name)s" +msgstr "پەڕەکردنی %(name)s" + msgid "Show all" msgstr "پیشاندانی هەمووی" -msgid "Save" -msgstr "پاشەکەوتکردن" - msgid "Popup closing…" msgstr "پەنجەرەکە دادەخرێت..." +#, python-format +msgid "Search %(name)s" +msgstr "گەڕان %(name)s" + msgid "Search" msgstr "گەڕان" @@ -735,8 +748,8 @@ msgstr "" msgid "Please go to the following page and choose a new password:" msgstr "تکایە بڕۆ بۆ پەڕەی دیاریکراو و تێپەڕەوشەیەکی نوێ هەڵبژێرە:" -msgid "Your username, in case you’ve forgotten:" -msgstr "ناوی بەکارهێنەری تۆ، لە کاتێکدا بیرت چووبێتەوە:" +msgid "In case you’ve forgotten, you are:" +msgstr "لە ئەگەری ئەوەی لەبیرت چووبێت، تۆ:" msgid "Thanks for using our site!" msgstr "سوپاس بۆ بەکارهێنانی پێگەکەمان!" diff --git a/django/contrib/admin/locale/ckb/LC_MESSAGES/djangojs.mo b/django/contrib/admin/locale/ckb/LC_MESSAGES/djangojs.mo index 95cbda79074a..7dacf73aabee 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 23b1fd0f87a9..a9ece6a60e18 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-2024 +# Swara , 2022-2026 msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \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" +"POT-Creation-Date: 2025-03-25 15:04-0500\n" +"PO-Revision-Date: 2026-03-09 07:59+0000\n" +"Last-Translator: Swara , 2022-2026\n" "Language-Team: Central Kurdish (http://app.transifex.com/django/django/" "language/ckb/)\n" "MIME-Version: 1.0\n" @@ -26,12 +26,10 @@ msgstr "%sە بەردەستەکان" #, javascript-format msgid "" -"This is the list of available %s. You may choose some by selecting them in " -"the box below and then clicking the \"Choose\" arrow between the two boxes." +"Choose %s by selecting them and then select the \"Choose\" arrow button." msgstr "" -"ئەمە لیستی بەردەستی %s . دەتوانیت هەندێکیان هەڵبژێریت بە هەڵبژاردنییان لەم " -"بوخچەی خوارەوە و پاشان کرتەکردن لەسەر ئاراستەی \"هەڵبژێرە\" لە نێوان هەردوو " -"بوخچەکەدا." +" %sهەڵبژێرە، بە هەڵبژاردنی ئەوانەو پاشان دوگمەی ئاراتەی \"هەڵبژاردن\" " +"هەڵبژێرە." #, javascript-format msgid "Type into this box to filter down the list of available %s." @@ -40,18 +38,17 @@ msgstr "لەم بوخچەدا بنووسە بۆ ئەوەی لیستی بەردە msgid "Filter" msgstr "پاڵاوتن" -msgid "Choose all" -msgstr "هەمووی هەڵبژێرە" - #, javascript-format -msgid "Click to choose all %s at once." -msgstr "کرتە بکە بۆ هەڵبژاردنی هەموو %s بەیەکجار." +msgid "Choose all %s" +msgstr "هەمووی %sهەڵبژێرە" -msgid "Choose" -msgstr "‌هەڵبژاردن" +#, javascript-format +msgid "Choose selected %s" +msgstr "%sدیاریکراو هەڵبژێرە" -msgid "Remove" -msgstr "لابردن" +#, javascript-format +msgid "Remove selected %s" +msgstr "%sدیاریکراو بسڕەوە" #, javascript-format msgid "Chosen %s" @@ -59,23 +56,20 @@ msgstr "%s هەڵبژێردراوەکان" #, javascript-format msgid "" -"This is the list of chosen %s. You may remove some by selecting them in the " -"box below and then clicking the \"Remove\" arrow between the two boxes." +"Remove %s by selecting them and then select the \"Remove\" arrow button." msgstr "" -"ئەمە لیستی هەڵبژێردراوی %s. دەتوانیت هەندێکیان لاببەیت بە هەڵبژاردنییان لەم " -"بوخچەی خوارەوە و پاشان کرتەکردن لەسەر ئاراستەی \"لابردن\" لە نێوان هەردوو " -"بوخچەکەدا." +"%s بسڕەوە بە هەڵبژاردنیان و پاشان دوگمەی ئاراستەی \"سڕینەوە\" هەڵبژێرە." #, javascript-format msgid "Type into this box to filter down the list of selected %s." msgstr "لەم بوخچەدا بنووسە بۆ ئەوەی لیستی هەڵبژێردراوەکان بپاڵێویت %s." -msgid "Remove all" -msgstr "لابردنی هەمووی" +msgid "(click to clear)" +msgstr "(کرتە بکە بۆ پاککردنەوە)" #, javascript-format -msgid "Click to remove all chosen %s at once." -msgstr "کرتە بکە بۆ لابردنی هەموو ئەوانەی هەڵبژێردراون %sبە یەکجار." +msgid "Remove all %s" +msgstr "%sهەمووی بسڕەوە" #, javascript-format msgid "%s selected option not visible" @@ -321,9 +315,3 @@ msgstr "هە" msgctxt "one letter Saturday" msgid "S" msgstr "ش" - -msgid "Show" -msgstr "پیشاندان" - -msgid "Hide" -msgstr "شاردنەوە" diff --git a/django/contrib/admin/locale/he/LC_MESSAGES/django.mo b/django/contrib/admin/locale/he/LC_MESSAGES/django.mo index 57f340c478c5..c6b833477568 100644 Binary files a/django/contrib/admin/locale/he/LC_MESSAGES/django.mo and b/django/contrib/admin/locale/he/LC_MESSAGES/django.mo differ diff --git a/django/contrib/admin/locale/he/LC_MESSAGES/django.po b/django/contrib/admin/locale/he/LC_MESSAGES/django.po index bb8540243880..e81519cc1b94 100644 --- a/django/contrib/admin/locale/he/LC_MESSAGES/django.po +++ b/django/contrib/admin/locale/he/LC_MESSAGES/django.po @@ -5,22 +5,21 @@ # Jannis Leidel , 2011 # Meir Kriheli , 2011-2015,2017,2019-2020,2023,2025 # Menachem G., 2021 -# Yaron Shahrabani , 2020-2021 +# Yaron Shahrabani , 2020-2021,2026 msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-03-19 11:30-0500\n" -"PO-Revision-Date: 2025-04-01 15:04-0500\n" -"Last-Translator: Meir Kriheli , " -"2011-2015,2017,2019-2020,2023,2025\n" +"POT-Creation-Date: 2025-09-17 18:23-0300\n" +"PO-Revision-Date: 2026-03-09 07:05+0000\n" +"Last-Translator: Yaron Shahrabani , 2020-2021,2026\n" "Language-Team: Hebrew (http://app.transifex.com/django/django/language/he/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: he\n" -"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % " -"1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;\n" +"Plural-Forms: nplurals=3; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % " +"1 == 0) ? 1: 2;\n" #, python-format msgid "Delete selected %(verbose_name_plural)s" @@ -322,11 +321,8 @@ msgid "" msgstr "" "התרחשה שגיאה. היא דווחה למנהלי האתר בדוא\"ל ותתוקן בקרוב. תודה על סבלנותך." -msgid "Run the selected action" -msgstr "הפעל את הפעולה שבחרת בה." - -msgid "Go" -msgstr "בצע" +msgid "Run" +msgstr "הרצה" msgid "Click here to select the objects across all pages" msgstr "לחיצה כאן תבחר את האובייקטים בכל העמודים" @@ -346,13 +342,13 @@ msgid "Models in the %(name)s application" msgstr "מודלים ביישום %(name)s" msgid "Model name" -msgstr "" +msgstr "שם דגם" msgid "Add link" -msgstr "" +msgstr "הוספת קישור" msgid "Change or view list link" -msgstr "" +msgstr "שינוי או הצגת רשימת קישורים" msgid "Add" msgstr "הוספה" @@ -364,10 +360,10 @@ msgid "You don’t have permission to view or edit anything." msgstr "אין לך כלל הרשאות צפיה או עריכה." msgid "After you’ve created a user, you’ll be able to edit more user options." -msgstr "" +msgstr "לאחר יצירת משתמש אפשר יהיה לערוך אפשרויות משתמש נוספות." msgid "Error:" -msgstr "" +msgstr "שגיאה:" msgid "Change password" msgstr "שינוי סיסמה" @@ -435,6 +431,9 @@ msgstr "הצגת ספירות" msgid "Clear all filters" msgstr "ניקוי כל הסינונים" +msgid "Save" +msgstr "שמירה" + msgid "Remove from sorting" msgstr "הסרה ממיון" @@ -456,28 +455,22 @@ msgstr "החלפת ערכת נושא (נוכחית: כהה)" #, python-format msgid "" -"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"Deleting the %(object_name)s “%(escaped_object)s” would result in deleting " "related objects, but your account doesn't have permission to delete the " "following types of objects:" msgstr "" -"מחיקת %(object_name)s '%(escaped_object)s' מצריכה מחיקת אובייקטים מקושרים, " -"אך לחשבון שלך אין הרשאות למחיקת סוגי האובייקטים הבאים:" #, python-format msgid "" -"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"Deleting the %(object_name)s “%(escaped_object)s” would require deleting the " "following protected related objects:" msgstr "" -"מחיקת ה%(object_name)s '%(escaped_object)s' תדרוש מחיקת האובייקטים הקשורים " -"והמוגנים הבאים:" #, python-format msgid "" -"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"Are you sure you want to delete the %(object_name)s “%(escaped_object)s”? " "All of the following related items will be deleted:" msgstr "" -"האם ברצונך למחוק את %(object_name)s \"%(escaped_object)s\"? כל הפריטים " -"הקשורים הבאים יימחקו:" msgid "Objects" msgstr "אובייקטים" @@ -561,7 +554,7 @@ msgstr "" "בתור משתמש אחר?" msgid "Forgotten your login credentials?" -msgstr "" +msgstr "שכחת את פרטי הגישה שלך?" msgid "Toggle navigation" msgstr "החלפת מצב סרגל ניווט" @@ -584,6 +577,10 @@ msgstr "משתמש" msgid "Action" msgstr "פעולה" +#, python-format +msgid "Pagination %(name)s entries" +msgstr "" + msgid "entry" msgid_plural "entries" msgstr[0] "רשומה" @@ -595,15 +592,20 @@ msgid "" "admin site." msgstr "לאובייקט זה אין היסטוריית שינויים. כנראה לא נוסף דרך ממשק הניהול." +#, python-format +msgid "Pagination %(name)s" +msgstr "" + msgid "Show all" msgstr "הצג הכל" -msgid "Save" -msgstr "שמירה" - msgid "Popup closing…" msgstr "חלון צץ נסגר..." +#, python-format +msgid "Search %(name)s" +msgstr "חיפוש %(name)s" + msgid "Search" msgstr "חיפוש" diff --git a/django/contrib/admin/locale/he/LC_MESSAGES/djangojs.mo b/django/contrib/admin/locale/he/LC_MESSAGES/djangojs.mo index 265d261b3b9b..c98b337da2df 100644 Binary files a/django/contrib/admin/locale/he/LC_MESSAGES/djangojs.mo and b/django/contrib/admin/locale/he/LC_MESSAGES/djangojs.mo differ diff --git a/django/contrib/admin/locale/he/LC_MESSAGES/djangojs.po b/django/contrib/admin/locale/he/LC_MESSAGES/djangojs.po index 1946efc77537..06ed4874b9cf 100644 --- a/django/contrib/admin/locale/he/LC_MESSAGES/djangojs.po +++ b/django/contrib/admin/locale/he/LC_MESSAGES/djangojs.po @@ -4,22 +4,21 @@ # 534b44a19bf18d20b71ecc4eb77c572f_db336e9 , 2012 # Jannis Leidel , 2011 # Meir Kriheli , 2011-2012,2014-2015,2017,2020,2023 -# Yaron Shahrabani , 2021 +# Yaron Shahrabani , 2021,2026 msgid "" 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: Meir Kriheli , " -"2011-2012,2014-2015,2017,2020,2023\n" +"POT-Creation-Date: 2025-03-25 15:04-0500\n" +"PO-Revision-Date: 2026-03-09 07:59+0000\n" +"Last-Translator: Yaron Shahrabani , 2021,2026\n" "Language-Team: Hebrew (http://app.transifex.com/django/django/language/he/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: he\n" -"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % " -"1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;\n" +"Plural-Forms: nplurals=3; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % " +"1 == 0) ? 1: 2;\n" #, javascript-format msgid "Available %s" @@ -27,11 +26,8 @@ msgstr "אפשרויות %s זמינות" #, javascript-format msgid "" -"This is the list of available %s. You may choose some by selecting them in " -"the box below and then clicking the \"Choose\" arrow between the two boxes." +"Choose %s by selecting them and then select the \"Choose\" arrow button." msgstr "" -"זו רשימת %s הזמינים לבחירה. ניתן לבחור חלק ע\"י סימון בתיבה מתחת ולחיצה על " -"חץ \"בחר\" בין שתי התיבות." #, javascript-format msgid "Type into this box to filter down the list of available %s." @@ -40,18 +36,17 @@ msgstr "ניתן להקליד בתיבה זו כדי לסנן %s." msgid "Filter" msgstr "סינון" -msgid "Choose all" -msgstr "בחירת הכל" - #, javascript-format -msgid "Click to choose all %s at once." -msgstr "בחירת כל ה%s בבת אחת." +msgid "Choose all %s" +msgstr "" -msgid "Choose" -msgstr "בחר" +#, javascript-format +msgid "Choose selected %s" +msgstr "" -msgid "Remove" -msgstr "הסרה" +#, javascript-format +msgid "Remove selected %s" +msgstr "" #, javascript-format msgid "Chosen %s" @@ -59,22 +54,19 @@ msgstr "%s אשר נבחרו" #, javascript-format msgid "" -"This is the list of chosen %s. You may remove some by selecting them in the " -"box below and then clicking the \"Remove\" arrow between the two boxes." +"Remove %s by selecting them and then select the \"Remove\" arrow button." msgstr "" -"זו רשימת %s אשר נבחרו. ניתן להסיר חלק ע\"י בחירה בתיבה מתחת ולחיצה על חץ " -"\"הסרה\" בין שתי התיבות." #, javascript-format msgid "Type into this box to filter down the list of selected %s." msgstr "ניתן להקליד בתיבה זו כדי לסנן את רשימת %s הנבחרים." -msgid "Remove all" -msgstr "הסרת הכל" +msgid "(click to clear)" +msgstr "" #, javascript-format -msgid "Click to remove all chosen %s at once." -msgstr "הסרת כל %s אשר נבחרו בבת אחת." +msgid "Remove all %s" +msgstr "להסיר את כל %s" #, javascript-format msgid "%s selected option not visible" @@ -82,14 +74,12 @@ msgid_plural "%s selected options not visible" msgstr[0] "אפשרות נבחרת %s אינה גלויה." msgstr[1] "%s אפשרויות נבחרות אינן גלויות." msgstr[2] "%s אפשרויות נבחרות אינן גלויות." -msgstr[3] "%s אפשרויות נבחרות אינן גלויות." msgid "%(sel)s of %(cnt)s selected" msgid_plural "%(sel)s of %(cnt)s selected" msgstr[0] "%(sel)s מ %(cnt)s נבחרות" msgstr[1] "%(sel)s מ %(cnt)s נבחרות" msgstr[2] "%(sel)s מ %(cnt)s נבחרות" -msgstr[3] "%(sel)s מ %(cnt)s נבחרות" msgid "" "You have unsaved changes on individual editable fields. If you run an " @@ -135,7 +125,6 @@ msgid_plural "Note: You are %s hours ahead of server time." msgstr[0] "הערה: את/ה %s שעה לפני זמן השרת." msgstr[1] "הערה: את/ה %s שעות לפני זמן השרת." msgstr[2] "הערה: את/ה %s שעות לפני זמן השרת." -msgstr[3] "הערה: את/ה %s שעות לפני זמן השרת." #, javascript-format msgid "Note: You are %s hour behind server time." @@ -143,7 +132,6 @@ msgid_plural "Note: You are %s hours behind server time." msgstr[0] "הערה: את/ה %s שעה אחרי זמן השרת." msgstr[1] "הערה: את/ה %s שעות אחרי זמן השרת." msgstr[2] "הערה: את/ה %s שעות אחרי זמן השרת." -msgstr[3] "הערה: את/ה %s שעות אחרי זמן השרת." msgid "Choose a Time" msgstr "בחירת שעה" @@ -326,9 +314,3 @@ msgstr "ו" msgctxt "one letter Saturday" msgid "S" msgstr "ש" - -msgid "Show" -msgstr "הצג" - -msgid "Hide" -msgstr "הסתר" diff --git a/django/contrib/admin/locale/id/LC_MESSAGES/django.mo b/django/contrib/admin/locale/id/LC_MESSAGES/django.mo index 899ae2e73b94..7344c7cd3748 100644 Binary files a/django/contrib/admin/locale/id/LC_MESSAGES/django.mo and b/django/contrib/admin/locale/id/LC_MESSAGES/django.mo differ diff --git a/django/contrib/admin/locale/id/LC_MESSAGES/django.po b/django/contrib/admin/locale/id/LC_MESSAGES/django.po index a4f279b9d1aa..d922e19914fc 100644 --- a/django/contrib/admin/locale/id/LC_MESSAGES/django.po +++ b/django/contrib/admin/locale/id/LC_MESSAGES/django.po @@ -3,21 +3,21 @@ # Translators: # Bayu Satiyo , 2024 # Claude Paroz , 2014 -# Fery Setiawan , 2015-2019,2021-2025 +# Fery Setiawan , 2015-2019,2021-2026 # Jannis Leidel , 2011 # M Asep Indrayana , 2015 # oon arfiandwi (OonID) , 2016,2020 # rodin , 2011-2013 # rodin , 2013-2017 -# sag​e , 2019 +# S​age Abdullah , 2019 # Sutrisno Efendi , 2015 msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-03-19 11:30-0500\n" -"PO-Revision-Date: 2025-09-17 07:05+0000\n" -"Last-Translator: Fery Setiawan , 2015-2019,2021-2025\n" +"POT-Creation-Date: 2025-09-17 18:23-0300\n" +"PO-Revision-Date: 2026-03-09 07:05+0000\n" +"Last-Translator: Fery Setiawan , 2015-2019,2021-2026\n" "Language-Team: Indonesian (http://app.transifex.com/django/django/language/" "id/)\n" "MIME-Version: 1.0\n" @@ -329,11 +329,8 @@ msgstr "" "Terjadi sebuah galat dan telah dilaporkan ke administrator situs melalui " "surel untuk diperbaiki. Terima kasih atas pengertian Anda." -msgid "Run the selected action" -msgstr "Jalankan aksi terpilih" - -msgid "Go" -msgstr "Buka" +msgid "Run" +msgstr "Berjalan" msgid "Click here to select the objects across all pages" msgstr "Klik di sini untuk memilih semua objek pada semua laman" @@ -441,6 +438,9 @@ msgstr "Tampilkan hitungan" msgid "Clear all filters" msgstr "Hapus semua penyaringan" +msgid "Save" +msgstr "Simpan" + msgid "Remove from sorting" msgstr "Dihapus dari pengurutan" @@ -462,29 +462,28 @@ msgstr "Ganti tema (tema saat ini: gelap)" #, python-format msgid "" -"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"Deleting the %(object_name)s “%(escaped_object)s” would result in deleting " "related objects, but your account doesn't have permission to delete the " "following types of objects:" msgstr "" -"Menghapus %(object_name)s '%(escaped_object)s' akan menghapus objek lain " -"yang terkait, tetapi akun Anda tidak memiliki izin untuk menghapus objek " -"dengan tipe berikut:" +"Menghapus %(object_name)s “%(escaped_object)s” akan menghapus objek terkait, " +"tetapi akun anda tidak memiliki perijinan menghapus jenis objek berikut:" #, python-format msgid "" -"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"Deleting the %(object_name)s “%(escaped_object)s” would require deleting the " "following protected related objects:" msgstr "" -"Menghapus %(object_name)s '%(escaped_object)s' memerlukan penghapusan objek " -"terlindungi yang terkait sebagai berikut:" +"Menghapus %(object_name)s “%(escaped_object)s” akan membutuhkan menghapus " +"objek terkait terlindungi berikut:" #, python-format msgid "" -"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"Are you sure you want to delete the %(object_name)s “%(escaped_object)s”? " "All of the following related items will be deleted:" msgstr "" -"Yakin ingin menghapus %(object_name)s \"%(escaped_object)s\"? Semua objek " -"lain yang terkait juga akan dihapus:" +"Apakah anda ingin menghapus %(object_name)s “%(escaped_object)s”? Semua " +"barang terkair berikut akan dihapus:" msgid "Objects" msgstr "Objek" @@ -592,6 +591,10 @@ msgstr "Pengguna" msgid "Action" msgstr "Aksi" +#, python-format +msgid "Pagination %(name)s entries" +msgstr "Penomoran halaman %(name)s masukan" + msgid "entry" msgid_plural "entries" msgstr[0] "masukan" @@ -603,15 +606,20 @@ msgstr "" "Objek ini tidak memiliki riwayat perubahan. Mungkin objek ini tidak " "ditambahkan melalui situs administrasi ini." +#, python-format +msgid "Pagination %(name)s" +msgstr "Penomoran halaman %(name)s" + msgid "Show all" msgstr "Tampilkan semua" -msgid "Save" -msgstr "Simpan" - msgid "Popup closing…" msgstr "Menutup jendela sembulan..." +#, python-format +msgid "Search %(name)s" +msgstr "Mencari %(name)s" + msgid "Search" msgstr "Cari" diff --git a/django/contrib/admin/locale/lt/LC_MESSAGES/django.mo b/django/contrib/admin/locale/lt/LC_MESSAGES/django.mo index b225f663d4ec..5346199c7618 100644 Binary files a/django/contrib/admin/locale/lt/LC_MESSAGES/django.mo and b/django/contrib/admin/locale/lt/LC_MESSAGES/django.mo differ diff --git a/django/contrib/admin/locale/lt/LC_MESSAGES/django.po b/django/contrib/admin/locale/lt/LC_MESSAGES/django.po index 0c93418a630f..83e95ae0391d 100644 --- a/django/contrib/admin/locale/lt/LC_MESSAGES/django.po +++ b/django/contrib/admin/locale/lt/LC_MESSAGES/django.po @@ -2,6 +2,7 @@ # # Translators: # Jannis Leidel , 2011 +# Karolis Ryselis , 2025-2026 # lauris , 2011 # Matas Dailyda , 2015-2019 # Nikolajus Krauklis , 2013 @@ -11,10 +12,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-01-18 10:32+0000\n" -"Last-Translator: Matas Dailyda \n" -"Language-Team: Lithuanian (http://www.transifex.com/django/django/language/" +"POT-Creation-Date: 2025-09-17 18:23-0300\n" +"PO-Revision-Date: 2026-03-09 07:05+0000\n" +"Last-Translator: Karolis Ryselis , 2025-2026\n" +"Language-Team: Lithuanian (http://app.transifex.com/django/django/language/" "lt/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -24,6 +25,10 @@ msgstr "" "11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? " "1 : n % 1 != 0 ? 2: 3);\n" +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "Ištrinti pasirinktus %(verbose_name_plural)s " + #, python-format msgid "Successfully deleted %(count)d %(items)s." msgstr "Sėkmingai ištrinta %(count)d %(items)s." @@ -32,12 +37,8 @@ msgstr "Sėkmingai ištrinta %(count)d %(items)s." msgid "Cannot delete %(name)s" msgstr "Ištrinti %(name)s negalima" -msgid "Are you sure?" -msgstr "Ar esate tikras?" - -#, python-format -msgid "Delete selected %(verbose_name_plural)s" -msgstr "Ištrinti pasirinktus %(verbose_name_plural)s " +msgid "Delete multiple objects" +msgstr "Ištrinti kelis objektus" msgid "Administration" msgstr "Administravimas" @@ -55,13 +56,13 @@ msgid "Unknown" msgstr "Nežinomas" msgid "Any date" -msgstr "Betkokia data" +msgstr "Bet kokia data" msgid "Today" msgstr "Šiandien" msgid "Past 7 days" -msgstr "Paskutinės 7 dienos" +msgstr "Per paskutines 7 dienas" msgid "This month" msgstr "Šį mėnesį" @@ -75,6 +76,12 @@ msgstr "Nėra datos" msgid "Has date" msgstr "Turi datą" +msgid "Empty" +msgstr "Tuščias" + +msgid "Not empty" +msgstr "Netuščias" + #, python-format msgid "" "Please enter the correct %(username)s and password for a staff account. Note " @@ -132,23 +139,23 @@ msgid "log entries" msgstr "log įrašai" #, python-format -msgid "Added \"%(object)s\"." -msgstr "„%(object)s“ pridėti." +msgid "Added “%(object)s”." +msgstr "Pridėtas „%(object)s“." #, python-format -msgid "Changed \"%(object)s\" - %(changes)s" -msgstr "Pakeisti „%(object)s“ - %(changes)s" +msgid "Changed “%(object)s” — %(changes)s" +msgstr "Pakeistas „%(object)s“ — %(changes)s" #, python-format -msgid "Deleted \"%(object)s.\"" -msgstr "„%(object)s“ ištrinti." +msgid "Deleted “%(object)s.”" +msgstr "„%(object)s“ pašalintas." msgid "LogEntry Object" msgstr "LogEntry objektas" #, python-brace-format -msgid "Added {name} \"{object}\"." -msgstr "Pridėtas {name} \"{object}\"." +msgid "Added {name} “{object}”." +msgstr "Pridėtas {name} „{object}“." msgid "Added." msgstr "Pridėta." @@ -157,16 +164,16 @@ msgid "and" msgstr "ir" #, python-brace-format -msgid "Changed {fields} for {name} \"{object}\"." -msgstr "Pakeisti {fields} arba {name} \"{object}\"." +msgid "Changed {fields} for {name} “{object}”." +msgstr "Pakeista {fields} objektui {name} „{object}“." #, python-brace-format msgid "Changed {fields}." msgstr "Pakeisti {fields}." #, python-brace-format -msgid "Deleted {name} \"{object}\"." -msgstr "Pašalintas {name} \"{object}\"." +msgid "Deleted {name} “{object}”." +msgstr "Pašalintas {name} „{object}“." msgid "No fields changed." msgstr "Nei vienas laukas nepakeistas" @@ -174,47 +181,43 @@ msgstr "Nei vienas laukas nepakeistas" msgid "None" msgstr "None" -msgid "" -"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." msgstr "" -"Nuspauskite \"Control\", arba \"Command\" Mac kompiuteriuose, kad pasirinkti " -"daugiau nei vieną." +"Jei norite pasirinkti daugiau nei vieną, laikykite nuspaudę „Control“ arba, " +"jei naudojate Mac, „Command“ mygtuką." + +msgid "Select this object for an action - {}" +msgstr "Parinkti šį objektą veiksmui - {}" #, python-brace-format -msgid "The {name} \"{obj}\" was added successfully." -msgstr "{name} \"{obj}\" buvo sėkmingai pridėtas." +msgid "The {name} “{obj}” was added successfully." +msgstr "{name} „{obj}“ sėkmingai pridėtas." msgid "You may edit it again below." msgstr "Galite tai dar kartą redaguoti žemiau." #, python-brace-format msgid "" -"The {name} \"{obj}\" was added successfully. You may add another {name} " -"below." +"The {name} “{obj}” was added successfully. You may add another {name} below." msgstr "" -"{name} \"{obj}\" buvo sėkmingai pridėtas. Galite pridėti kitą {name} žemiau." +"{name} „{obj}“ sėkmingai pridėtas. Galite pridėti dar vieną {name} žemiau." #, python-brace-format msgid "" -"The {name} \"{obj}\" was changed successfully. You may edit it again below." -msgstr "{name} \"{obj}\" buvo sėkmingai pakeistas. Galite jį koreguoti žemiau." +"The {name} “{obj}” was changed successfully. You may edit it again below." +msgstr "{name} „{obj}“ sėkmingai pakeistas. Galite jį vėl redaguoti jį žemiau." #, python-brace-format msgid "" -"The {name} \"{obj}\" was added successfully. You may edit it again below." -msgstr "" -"{name} \"{obj}\" buvo sėkmingai pridėtas. Galite jį vėl redaguoti žemiau." - -#, python-brace-format -msgid "" -"The {name} \"{obj}\" was changed successfully. You may add another {name} " +"The {name} “{obj}” was changed successfully. You may add another {name} " "below." msgstr "" -"{name} \"{obj}\" buvo sėkmingai pakeistas. Galite pridėti kitą {name} žemiau." +"{name} „{obj}“ buvo sėkmingai pakeistas. Galite pridėti dar vieną {name} " +"žemiau." #, python-brace-format -msgid "The {name} \"{obj}\" was changed successfully." -msgstr "{name} \"{obj}\" buvo sėkmingai pakeistas." +msgid "The {name} “{obj}” was changed successfully." +msgstr "{name} „{obj}“ sėkmingai pakeistas." msgid "" "Items must be selected in order to perform actions on them. No items have " @@ -227,12 +230,12 @@ msgid "No action selected." msgstr "Veiksmai atlikti nebuvo." #, python-format -msgid "The %(name)s \"%(obj)s\" was deleted successfully." -msgstr "%(name)s \"%(obj)s\" sėkmingai ištrintas." +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "%(name)s „%(obj)s“ sėkmingai pašalintas." #, python-format -msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" -msgstr "%(name)s su ID \"%(key)s\" neegzistuoja. Gal tai buvo ištrinta?" +msgid "%(name)s with ID “%(key)s” doesn’t exist. Perhaps it was deleted?" +msgstr "%(name)s su ID „%(key)s“ neegzistuoja. Galbūt jis buvo ištrintas?" #, python-format msgid "Add %s" @@ -269,12 +272,16 @@ msgstr[3] "Visi %(total_count)s pasirinkti" msgid "0 of %(cnt)s selected" msgstr "0 iš %(cnt)s pasirinkta" +msgid "Delete" +msgstr "Ištrinti" + #, python-format msgid "Change history: %s" msgstr "Pakeitimų istorija: %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 "%(class_name)s %(instance)s" @@ -306,8 +313,8 @@ msgstr "%(app)s administravimas" msgid "Page not found" msgstr "Puslapis nerastas" -msgid "We're sorry, but the requested page could not be found." -msgstr "Atsiprašome, bet prašytas puslapis nerastas." +msgid "We’re sorry, but the requested page could not be found." +msgstr "Atsiprašome, tačiau šis puslapis nerastas." msgid "Home" msgstr "Pradinis" @@ -322,16 +329,13 @@ msgid "Server Error (500)" msgstr "Serverio klaida (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 "" -"Netikėta klaida. Apie ją buvo pranešta administratoriams el. paštu ir ji " -"turėtų būti greitai sutvarkyta. Dėkui už kantrybę." - -msgid "Run the selected action" -msgstr "Vykdyti pasirinktus veiksmus" +"Įvyko klaida. Apie ją pranešta administratoriams el. paštu ir ji turėtų būti " +"greitai sutvarkyta. Dėkojame už jūsų kantrybę." -msgid "Go" +msgid "Run" msgstr "Vykdyti" msgid "Click here to select the objects across all pages" @@ -344,29 +348,70 @@ msgstr "Pasirinkti visus %(total_count)s %(module_name)s" msgid "Clear selection" msgstr "Atstatyti į pradinę būseną" -msgid "" -"First, enter a username and password. Then, you'll be able to edit more user " -"options." -msgstr "" -"Pirmiausia įveskite naudotojo vardą ir slaptažodį. Tada galėsite keisti " -"daugiau naudotojo nustatymų." +msgid "Breadcrumbs" +msgstr "Navigacija" -msgid "Enter a username and password." -msgstr "Įveskite naudotojo vardą ir slaptažodį." +#, python-format +msgid "Models in the %(name)s application" +msgstr "%(name)s aplikacijos modeliai" + +msgid "Model name" +msgstr "Modelio pavadinimas" + +msgid "Add link" +msgstr "Pridėjimo nuoroda" + +msgid "Change or view list link" +msgstr "Redagavimo arba sąrašo peržiūros nuoroda" + +msgid "Add" +msgstr "Pridėti" + +msgid "View" +msgstr "Peržiūrėti" + +msgid "You don’t have permission to view or edit anything." +msgstr "Neturite teisių ką nors peržiūrėti ar keisti" + +msgid "After you’ve created a user, you’ll be able to edit more user options." +msgstr "Sukūrus naudotoją, galėsite redaguoti papildomus jo nustatymus." + +msgid "Error:" +msgstr "Klaida:" msgid "Change password" msgstr "Keisti slaptažodį" -msgid "Please correct the error below." -msgstr "Prašome ištaisyti žemiau esančią klaidą." +msgid "Set password" +msgstr "Sukurti slaptažodį" -msgid "Please correct the errors below." -msgstr "Ištaisykite žemiau esančias klaidas." +msgid "Please correct the error below." +msgid_plural "Please correct the errors below." +msgstr[0] "Ištaisykite žemiau esančią klaidą." +msgstr[1] "Ištaisykite žemiau esančias klaidas." +msgstr[2] "Ištaisykite žemiau esančias klaidas." +msgstr[3] "Ištaisykite žemiau esančias klaidas." #, python-format msgid "Enter a new password for the user %(username)s." msgstr "Įveskite naują slaptažodį naudotojui %(username)s." +msgid "" +"This action will enable password-based authentication for " +"this user." +msgstr "" +"Šis veiksmas įjungs autentifikaciją slaptažodžiu šiam " +"naudotojui." + +msgid "Disable password-based authentication" +msgstr "Išjungti autentifikaciją slaptažodžiu" + +msgid "Enable password-based authentication" +msgstr "Įjungti autentifikaciją slaptažodžiu" + +msgid "Skip to main content" +msgstr "Pereiti prie pagrindinio turinio" + msgid "Welcome," msgstr "Sveiki," @@ -392,6 +437,18 @@ msgstr "Matyti tinklalapyje" msgid "Filter" msgstr "Filtras" +msgid "Hide counts" +msgstr "Slėpti kiekius" + +msgid "Show counts" +msgstr "Rodyti kiekius" + +msgid "Clear all filters" +msgstr "Išvalyti visus filtrus" + +msgid "Save" +msgstr "Išsaugoti" + msgid "Remove from sorting" msgstr "Pašalinti iš rikiavimo" @@ -402,46 +459,49 @@ msgstr "Rikiavimo prioritetas: %(priority_number)s" msgid "Toggle sorting" msgstr "Perjungti rikiavimą" -msgid "Delete" -msgstr "Ištrinti" +msgid "Toggle theme (current theme: auto)" +msgstr "Perjungti temą (dabartinė tema: automatinė)" + +msgid "Toggle theme (current theme: light)" +msgstr "Perjungti temą (dabartinė tema: šviesi)" + +msgid "Toggle theme (current theme: dark)" +msgstr "Perjungti temą (dabartinė tema: tamsi)" #, python-format msgid "" -"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"Deleting the %(object_name)s “%(escaped_object)s” would result in deleting " "related objects, but your account doesn't have permission to delete the " "following types of objects:" msgstr "" -"Trinant %(object_name)s '%(escaped_object)s' turi būti ištrinti ir susiję " -"objektai, bet tavo vartotojas neturi teisių ištrinti šių objektų:" +"Šalinant %(object_name)s „%(escaped_object)s“ kartu būtų šalinami ir susiję " +"įrašai, bet jūsų paskyra neturi teisių šalinti šių tipų objektų:" #, python-format msgid "" -"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"Deleting the %(object_name)s “%(escaped_object)s” would require deleting the " "following protected related objects:" msgstr "" -"Ištrinant %(object_name)s '%(escaped_object)s' būtų ištrinti šie apsaugoti " -"ir susiję objektai:" +"Šalinant %(object_name)s „%(escaped_object)s“ būtų šalinami ir šie apsaugoti " +"susiję objektai:" #, python-format msgid "" -"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"Are you sure you want to delete the %(object_name)s “%(escaped_object)s”? " "All of the following related items will be deleted:" msgstr "" -"Ar este tikri, kad norite ištrinti %(object_name)s \"%(escaped_object)s\"? " -"Visi susiję objektai bus ištrinti:" +"Ar esate įsitikinęs, kad norite pašalinti %(object_name)s " +"„%(escaped_object)s“? Visi šie susiję įrašai bus pašalinti:" msgid "Objects" msgstr "Objektai" -msgid "Yes, I'm sure" +msgid "Yes, I’m sure" msgstr "Taip, esu tikras" msgid "No, take me back" msgstr "Ne, grįžti atgal" -msgid "Delete multiple objects" -msgstr "Ištrinti kelis objektus" - #, python-format msgid "" "Deleting the selected %(objects_name)s would result in deleting related " @@ -467,9 +527,6 @@ msgstr "" "Ar esate tikri, kad norite ištrinti pasirinktus %(objects_name)s? Sekantys " "pasirinkti bei susiję objektai bus ištrinti:" -msgid "View" -msgstr "Peržiūrėti" - msgid "Delete?" msgstr "Ištrinti?" @@ -480,16 +537,6 @@ msgstr " Pagal %(filter_title)s " msgid "Summary" msgstr "Santrauka" -#, python-format -msgid "Models in the %(name)s application" -msgstr "%(name)s aplikacijos modeliai" - -msgid "Add" -msgstr "Pridėti" - -msgid "You don't have permission to view or edit anything." -msgstr "Jūs neturite teisių peržiūrai ir redagavimui." - msgid "Recent actions" msgstr "Paskutiniai veiksmai" @@ -499,17 +546,26 @@ msgstr "Mano veiksmai" msgid "None available" msgstr "Nėra prieinamų" +msgid "Added:" +msgstr "Pridėta:" + +msgid "Changed:" +msgstr "Pakeista:" + +msgid "Deleted:" +msgstr "Pašalinta:" + msgid "Unknown content" msgstr "Nežinomas turinys" 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 "" -"Kažkas yra negerai su jūsų duomenų bazės instaliacija. Įsitikink, kad visos " -"reikalingos lentelės sukurtos ir vartotojas turi teises skaityti duomenų " -"bazę." +"Kažkas negerai su jūsų duomenų bazės įdiegimu. Įsitikinkite, kad reikiamos " +"duomenų bazės lentelės yra sukurtos ir kad duomenų bazė yra gali būti " +"skaitoma atitinkamo naudotojo." #, python-format msgid "" @@ -519,8 +575,20 @@ msgstr "" "Jūs esate prisijungęs kaip %(username)s, bet neturite teisių patekti į šį " "puslapį. Ar norėtumete prisijungti su kitu vartotoju?" -msgid "Forgotten your password or username?" -msgstr "Pamiršote slaptažodį ar vartotojo vardą?" +msgid "Forgotten your login credentials?" +msgstr "Pamiršote savo prisijungimo duomenis?" + +msgid "Toggle navigation" +msgstr "Perjungti navigaciją" + +msgid "Sidebar" +msgstr "Šoninė juosta" + +msgid "Start typing to filter…" +msgstr "" + +msgid "Filter navigation items" +msgstr "" msgid "Date/time" msgstr "Data/laikas" @@ -531,22 +599,36 @@ msgstr "Naudotojas" msgid "Action" msgstr "Veiksmas" +#, python-format +msgid "Pagination %(name)s entries" +msgstr "" + +msgid "entry" +msgid_plural "entries" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + 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 "" -"Šis objektas neturi pakeitimų istorijos. Tikriausiai jis buvo pridėtas ne " -"per administravimo puslapį." + +#, python-format +msgid "Pagination %(name)s" +msgstr "" msgid "Show all" msgstr "Rodyti visus" -msgid "Save" -msgstr "Išsaugoti" - msgid "Popup closing…" msgstr "Iškylantysis langas užsidaro..." +#, python-format +msgid "Search %(name)s" +msgstr "" + msgid "Search" msgstr "Ieškoti" @@ -589,8 +671,12 @@ msgstr "Pridėti dar vieną %(model)s" msgid "Delete selected %(model)s" msgstr "Pašalinti pasirinktus %(model)s" -msgid "Thanks for spending some quality time with the Web site today." -msgstr "Dėkui už šiandien tinklalapyje turiningai praleistą laiką." +#, python-format +msgid "View selected %(model)s" +msgstr "" + +msgid "Thanks for spending some quality time with the web site today." +msgstr "" msgid "Log in again" msgstr "Prisijungti dar kartą" @@ -602,11 +688,9 @@ msgid "Your password was changed." msgstr "Jūsų slaptažodis buvo pakeistas." 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 "" -"Saugumo sumetimais įveskite seną slaptažodį ir tada du kartus naują, kad " -"įsitikinti, jog nesuklydote rašydamas" msgid "Change my password" msgstr "Keisti mano slaptažodį" @@ -641,19 +725,14 @@ msgstr "" "buvo panaudota. Prašykite naujo slaptažodžio pakeitimo." 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 "" -"Jei egzistuoja vartotojas su jūsų įvestu elektroninio pašto adresu, " -"išsiųsime jums slaptažodžio nustatymo instrukcijas . Instrukcijas turėtumėte " -"gauti netrukus." 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 "" -"Jei el. laiško negavote, prašome įsitikinti ar įvedėte tą el. pašto adresą " -"kuriuo registravotės ir patikrinkite savo šlamšto aplanką." #, python-format msgid "" @@ -666,8 +745,8 @@ msgstr "" msgid "Please go to the following page and choose a new password:" msgstr "Prašome eiti į šį puslapį ir pasirinkti naują slaptažodį:" -msgid "Your username, in case you've forgotten:" -msgstr "Jūsų naudotojo vardas, jei netyčia jį užmiršote:" +msgid "In case you’ve forgotten, you are:" +msgstr "" msgid "Thanks for using our site!" msgstr "Dėkui, kad naudojatės mūsų tinklalapiu!" @@ -677,11 +756,9 @@ msgid "The %(site_name)s team" msgstr "%(site_name)s komanda" 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 "" -"Pamiršote slaptažodį? Įveskite savo el. pašto adresą ir mes išsiųsime laišką " -"su instrukcijomis kaip nustatyti naują slaptažodį." msgid "Email address:" msgstr "El. pašto adresas:" @@ -689,6 +766,9 @@ msgstr "El. pašto adresas:" msgid "Reset my password" msgstr "Atstatyti slaptažodį" +msgid "Select all objects on this page for an action" +msgstr "" + msgid "All dates" msgstr "Visos datos" diff --git a/django/contrib/admin/locale/pt/LC_MESSAGES/django.mo b/django/contrib/admin/locale/pt/LC_MESSAGES/django.mo index 9719e73691de..2191fa33fced 100644 Binary files a/django/contrib/admin/locale/pt/LC_MESSAGES/django.mo and b/django/contrib/admin/locale/pt/LC_MESSAGES/django.mo differ diff --git a/django/contrib/admin/locale/pt/LC_MESSAGES/django.po b/django/contrib/admin/locale/pt/LC_MESSAGES/django.po index f71fa4668c30..15599c21da4d 100644 --- a/django/contrib/admin/locale/pt/LC_MESSAGES/django.po +++ b/django/contrib/admin/locale/pt/LC_MESSAGES/django.po @@ -6,7 +6,7 @@ # Jannis Leidel , 2011 # jorgecarleitao , 2015 # Manuela Silva , 2025 -# Nuno Mariz , 2013,2015,2017-2018,2023 +# Nuno Mariz , 2013,2015,2017-2018,2023,2025 # 12574c6d66324e145c1d19e02acecb73_84badd8 <4e8d94859927eab3b50486d21249c068_5346>, 2011 # Raúl Pedro Fernandes Santos, 2014 # Rui Dinis Silva, 2017 @@ -15,9 +15,10 @@ msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-03-19 11:30-0500\n" -"PO-Revision-Date: 2025-09-17 07:05+0000\n" -"Last-Translator: Manuela Silva , 2025\n" +"POT-Creation-Date: 2025-09-17 18:23-0300\n" +"PO-Revision-Date: 2013-04-25 07:05+0000\n" +"Last-Translator: Nuno Mariz , " +"2013,2015,2017-2018,2023,2025\n" "Language-Team: Portuguese (http://app.transifex.com/django/django/language/" "pt/)\n" "MIME-Version: 1.0\n" @@ -336,11 +337,8 @@ msgstr "" "Ocorreu um erro. Foi comunicado por email aos administradores da página e " "deverá ser corrigido em breve. Obrigado pela sua compreensão. " -msgid "Run the selected action" -msgstr "Executar a acção selecionada" - -msgid "Go" -msgstr "Ir" +msgid "Run" +msgstr "Executar" msgid "Click here to select the objects across all pages" msgstr "Clique aqui para selecionar os objetos em todas as páginas" @@ -366,7 +364,7 @@ msgid "Add link" msgstr "Adicionar hiperligação" msgid "Change or view list link" -msgstr "Alterar ou ver a hiperligação da lista" +msgstr "Alterar ou visualizar a lista hiperligações" msgid "Add" msgstr "Adicionar" @@ -379,10 +377,10 @@ msgstr "Não tem permissões para visualizar ou editar nada. " msgid "After you’ve created a user, you’ll be able to edit more user options." msgstr "" -"Depois de criar um utilizador, poderá editar mais opções de utilizador." +"Depois de criar um utilizador, poderá editar mais opções do utilizador." msgid "Error:" -msgstr "" +msgstr "Erro:" msgid "Change password" msgstr "Modificar palavra-passe" @@ -394,7 +392,7 @@ msgid "Please correct the error below." msgid_plural "Please correct the errors below." msgstr[0] "Por favor, corrija o erro abaixo." msgstr[1] "Por favor, corrija os erros abaixo." -msgstr[2] "Por favor, corrija os erros abaixo." +msgstr[2] "Por favor corrija os erros abaixo." #, python-format msgid "Enter a new password for the user %(username)s." @@ -452,6 +450,9 @@ msgstr "Mostrar contagem" msgid "Clear all filters" msgstr "Limpar todos os filtros" +msgid "Save" +msgstr "Gravar" + msgid "Remove from sorting" msgstr "Remover da ordenação" @@ -473,29 +474,29 @@ msgstr "Mudar tema (tema corrente: escuro)" #, python-format msgid "" -"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"Deleting the %(object_name)s “%(escaped_object)s” would result in deleting " "related objects, but your account doesn't have permission to delete the " "following types of objects:" msgstr "" -"A remoção de %(object_name)s '%(escaped_object)s' resultará na remoção dos " -"objetos relacionados, mas a sua conta não tem permissão de remoção dos " +"A remoção de %(object_name)s “%(escaped_object)s” pode resultar na remoção " +"de objetos relacionados, mas sua conta não tem a permissão para remoção dos " "seguintes tipos de objetos:" #, python-format msgid "" -"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"Deleting the %(object_name)s “%(escaped_object)s” would require deleting the " "following protected related objects:" msgstr "" -"Remover o %(object_name)s ' %(escaped_object)s ' exigiria a remoção dos " +"Remover o %(object_name)s “%(escaped_object)s” exigiria remover os " "seguintes objetos protegidos relacionados:" #, python-format msgid "" -"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"Are you sure you want to delete the %(object_name)s “%(escaped_object)s”? " "All of the following related items will be deleted:" msgstr "" -"Tem a certeza que deseja remover %(object_name)s \"%(escaped_object)s\"? " -"Todos os items relacionados seguintes irão ser removidos:" +"Tem certeza que deseja remover %(object_name)s “%(escaped_object)s”? Todos " +"os seguintes itens relacionados serão removidos:" msgid "Objects" msgstr "Objectos" @@ -581,7 +582,7 @@ msgstr "" "página. Deseja autenticar-se com uma conta diferente?" msgid "Forgotten your login credentials?" -msgstr "" +msgstr "Esqueceu-se das suas credenciais de login?" msgid "Toggle navigation" msgstr "Alternar navegação" @@ -604,6 +605,10 @@ msgstr "Utilizador" msgid "Action" msgstr "Ação" +#, python-format +msgid "Pagination %(name)s entries" +msgstr "Paginação de %(name)s itens" + msgid "entry" msgid_plural "entries" msgstr[0] "entrada" @@ -617,15 +622,20 @@ msgstr "" "Este objeto não tem um histórico de alterações. Provavelmente não foi " "adicionado através da página de administração." +#, python-format +msgid "Pagination %(name)s" +msgstr "Paginação %(name)s" + msgid "Show all" msgstr "Mostrar todos" -msgid "Save" -msgstr "Gravar" - msgid "Popup closing…" msgstr "Encerramento de popup…" +#, python-format +msgid "Search %(name)s" +msgstr "Pesquisar %(name)s" + msgid "Search" msgstr "Pesquisar" @@ -750,7 +760,7 @@ msgid "Please go to the following page and choose a new password:" msgstr "Por favor siga a seguinte página e escolha a sua nova palavra-passe:" msgid "In case you’ve forgotten, you are:" -msgstr "" +msgstr "Caso se tenha esquecido, você é:" msgid "Thanks for using our site!" msgstr "Obrigado pela sua visita ao nosso site!" diff --git a/django/contrib/admin/locale/ru/LC_MESSAGES/django.mo b/django/contrib/admin/locale/ru/LC_MESSAGES/django.mo index 9c0e06605586..4fdd3fdcdc16 100644 Binary files a/django/contrib/admin/locale/ru/LC_MESSAGES/django.mo and b/django/contrib/admin/locale/ru/LC_MESSAGES/django.mo differ diff --git a/django/contrib/admin/locale/ru/LC_MESSAGES/django.po b/django/contrib/admin/locale/ru/LC_MESSAGES/django.po index fe64d7c57406..e503ebe59a15 100644 --- a/django/contrib/admin/locale/ru/LC_MESSAGES/django.po +++ b/django/contrib/admin/locale/ru/LC_MESSAGES/django.po @@ -10,16 +10,16 @@ # Sergey , 2016 # Jannis Leidel , 2011 # SeryiMysh , 2020 -# Алексей Борискин , 2012-2015,2022-2025 +# Алексей Борискин , 2012-2015,2022-2026 # Дмитрий , 2019 # Bobsans , 2018 msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-03-19 11:30-0500\n" -"PO-Revision-Date: 2025-09-17 07:05+0000\n" -"Last-Translator: Алексей Борискин , 2012-2015,2022-2025\n" +"POT-Creation-Date: 2025-09-17 18:23-0300\n" +"PO-Revision-Date: 2026-03-09 07:05+0000\n" +"Last-Translator: Алексей Борискин , 2012-2015,2022-2026\n" "Language-Team: Russian (http://app.transifex.com/django/django/language/" "ru/)\n" "MIME-Version: 1.0\n" @@ -339,11 +339,8 @@ msgstr "" "Произошла ошибка. О ней сообщено администраторам сайта по электронной почте, " "ошибка должна быть вскоре исправлена. Благодарим вас за терпение." -msgid "Run the selected action" -msgstr "Выполнить выбранное действие" - -msgid "Go" -msgstr "Выполнить" +msgid "Run" +msgstr "Запустить" msgid "Click here to select the objects across all pages" msgstr "Нажмите здесь, чтобы выбрать объекты на всех страницах" @@ -455,6 +452,9 @@ msgstr "Показать счётчики" msgid "Clear all filters" msgstr "Сбросить все фильтры" +msgid "Save" +msgstr "Сохранить" + msgid "Remove from sorting" msgstr "Удалить из сортировки" @@ -476,29 +476,30 @@ msgstr "Переключить тему (текущая: тёмная)" #, python-format msgid "" -"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"Deleting the %(object_name)s “%(escaped_object)s” would result in deleting " "related objects, but your account doesn't have permission to delete the " "following types of objects:" msgstr "" -"Удаление %(object_name)s '%(escaped_object)s' приведет к удалению связанных " -"объектов, но ваша учетная запись не имеет прав для удаления следующих типов " -"объектов:" +"Удаление объекта типа %(object_name)s\"%(escaped_object)s\" потребовало бы " +"удаления следующих объектов, связанных с ним, но у вашей учётной записи нет " +"прав на удаление этого типа объектов:" #, python-format msgid "" -"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"Deleting the %(object_name)s “%(escaped_object)s” would require deleting the " "following protected related objects:" msgstr "" -"Удаление %(object_name)s '%(escaped_object)s' потребует удаления следующих " -"связанных защищенных объектов:" +"Удаление объекта типа %(object_name)s \"%(escaped_object)s\" потребовало бы " +"удаления следующих защищённых объектов, связанных с ним:" #, python-format msgid "" -"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"Are you sure you want to delete the %(object_name)s “%(escaped_object)s”? " "All of the following related items will be deleted:" msgstr "" -"Вы уверены, что хотите удалить %(object_name)s \"%(escaped_object)s\"? Все " -"следующие связанные объекты также будут удалены:" +"Вы уверены, что хотите удалить объект " +"типа%(object_name)s\"%(escaped_object)s\"? Указанные ниже связанные объекты " +"при этом будут также удалены:" msgid "Objects" msgstr "Объекты" @@ -607,6 +608,10 @@ msgstr "Пользователь" msgid "Action" msgstr "Действие" +#, python-format +msgid "Pagination %(name)s entries" +msgstr "Паджинация записей %(name)s " + msgid "entry" msgid_plural "entries" msgstr[0] "запись" @@ -621,15 +626,20 @@ msgstr "" "Данный объект не имеет истории изменений. Возможно, он был добавлен не через " "данный административный сайт." +#, python-format +msgid "Pagination %(name)s" +msgstr "Паджинация %(name)s" + msgid "Show all" msgstr "Показать все" -msgid "Save" -msgstr "Сохранить" - msgid "Popup closing…" msgstr "Всплывающее окно закрывается..." +#, python-format +msgid "Search %(name)s" +msgstr "Искать %(name)s" + msgid "Search" msgstr "Найти" diff --git a/django/contrib/admin/locale/sk/LC_MESSAGES/django.mo b/django/contrib/admin/locale/sk/LC_MESSAGES/django.mo index 9f62b622cb19..7a905c9a0a12 100644 Binary files a/django/contrib/admin/locale/sk/LC_MESSAGES/django.mo and b/django/contrib/admin/locale/sk/LC_MESSAGES/django.mo differ diff --git a/django/contrib/admin/locale/sk/LC_MESSAGES/django.po b/django/contrib/admin/locale/sk/LC_MESSAGES/django.po index c1e832500604..ddd2e9352f83 100644 --- a/django/contrib/admin/locale/sk/LC_MESSAGES/django.po +++ b/django/contrib/admin/locale/sk/LC_MESSAGES/django.po @@ -1,7 +1,7 @@ # This file is distributed under the same license as the Django package. # # Translators: -# Adam Zahradník, 2023-2025 +# Adam Zahradník, 2023-2026 # Jannis Leidel , 2011 # 18f25ad6fa9930fc67cb11aca9d16a27, 2012-2013 # Marian Andre , 2013-2015,2017,2025 @@ -15,9 +15,9 @@ msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-03-19 11:30-0500\n" -"PO-Revision-Date: 2025-09-17 07:05+0000\n" -"Last-Translator: Adam Zahradník, 2023-2025\n" +"POT-Creation-Date: 2025-09-17 18:23-0300\n" +"PO-Revision-Date: 2026-03-09 07:05+0000\n" +"Last-Translator: Adam Zahradník, 2023-2026\n" "Language-Team: Slovak (http://app.transifex.com/django/django/language/sk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -336,10 +336,7 @@ msgstr "" "Došlo k chybe. Chyba bola nahlásená správcovi webu prostredníctvom e-mailu a " "zanedlho by mala byť odstránená. Ďakujeme za vašu trpezlivosť." -msgid "Run the selected action" -msgstr "Vykonať vybranú akciu" - -msgid "Go" +msgid "Run" msgstr "Vykonať" msgid "Click here to select the objects across all pages" @@ -450,6 +447,9 @@ msgstr "Zobraziť počet" msgid "Clear all filters" msgstr "Zrušiť všetky filtre" +msgid "Save" +msgstr "Uložiť" + msgid "Remove from sorting" msgstr "Odstrániť z triedenia" @@ -471,29 +471,22 @@ msgstr "Prepnúť vzhľad (aktuálne: tmavý)" #, python-format msgid "" -"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"Deleting the %(object_name)s “%(escaped_object)s” would result in deleting " "related objects, but your account doesn't have permission to delete the " "following types of objects:" msgstr "" -"Odstránenie objektu %(object_name)s „%(escaped_object)s“ by malo za následok " -"aj odstránenie súvisiacich objektov. Váš účet však nemá oprávnenie na " -"odstránenie nasledujúcich typov objektov:" #, python-format msgid "" -"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"Deleting the %(object_name)s “%(escaped_object)s” would require deleting the " "following protected related objects:" msgstr "" -"Vymazanie %(object_name)s „%(escaped_object)s“ vyžaduje vymazanie " -"nasledovných súvisiacich chránených objektov:" #, python-format msgid "" -"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"Are you sure you want to delete the %(object_name)s “%(escaped_object)s”? " "All of the following related items will be deleted:" msgstr "" -"Ste si istý, že chcete odstrániť objekt %(object_name)s " -"„%(escaped_object)s“? Všetky nasledujúce súvisiace objekty budú odstránené:" msgid "Objects" msgstr "Objekty" @@ -602,6 +595,10 @@ msgstr "Používateľ" msgid "Action" msgstr "Akcia" +#, python-format +msgid "Pagination %(name)s entries" +msgstr "" + msgid "entry" msgid_plural "entries" msgstr[0] "záznam" @@ -616,15 +613,20 @@ msgstr "" "Tento objekt nemá zoznam zmien. Pravdepodobne nebol pridaný prostredníctvom " "tejto správcovskej stránky." +#, python-format +msgid "Pagination %(name)s" +msgstr "" + msgid "Show all" msgstr "Zobraziť všetky" -msgid "Save" -msgstr "Uložiť" - msgid "Popup closing…" msgstr "Vyskakovacie okno sa zatvára…" +#, python-format +msgid "Search %(name)s" +msgstr "" + msgid "Search" msgstr "Vyhľadávanie" diff --git a/django/contrib/admin/locale/sk/LC_MESSAGES/djangojs.mo b/django/contrib/admin/locale/sk/LC_MESSAGES/djangojs.mo index 7e9530138b74..c4c443d853a0 100644 Binary files a/django/contrib/admin/locale/sk/LC_MESSAGES/djangojs.mo and b/django/contrib/admin/locale/sk/LC_MESSAGES/djangojs.mo differ diff --git a/django/contrib/admin/locale/sk/LC_MESSAGES/djangojs.po b/django/contrib/admin/locale/sk/LC_MESSAGES/djangojs.po index e4b2fd45e2e4..a2abe52ec0f0 100644 --- a/django/contrib/admin/locale/sk/LC_MESSAGES/djangojs.po +++ b/django/contrib/admin/locale/sk/LC_MESSAGES/djangojs.po @@ -1,7 +1,7 @@ # This file is distributed under the same license as the Django package. # # Translators: -# Adam Zahradník, 2023 +# Adam Zahradník, 2023,2025-2026 # Dimitris Glezos , 2012 # Jannis Leidel , 2011 # 18f25ad6fa9930fc67cb11aca9d16a27, 2012 @@ -13,9 +13,9 @@ msgid "" 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: Martin Tóth , 2017,2023\n" +"POT-Creation-Date: 2025-03-25 15:04-0500\n" +"PO-Revision-Date: 2026-03-09 07:59+0000\n" +"Last-Translator: Adam Zahradník, 2023,2025-2026\n" "Language-Team: Slovak (http://app.transifex.com/django/django/language/sk/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -30,11 +30,8 @@ msgstr "Dostupné %s" #, javascript-format msgid "" -"This is the list of available %s. You may choose some by selecting them in " -"the box below and then clicking the \"Choose\" arrow between the two boxes." +"Choose %s by selecting them and then select the \"Choose\" arrow button." msgstr "" -"Toto je zoznam dostupných %s. Pre výber je potrebné označiť ich v poli a " -"následne kliknutím na šípku „Vybrať“ presunúť." #, javascript-format msgid "Type into this box to filter down the list of available %s." @@ -43,18 +40,17 @@ msgstr "Píšte do tohto poľa pre vyfiltrovanie dostupných %s." msgid "Filter" msgstr "Filtrovať" -msgid "Choose all" -msgstr "Vybrať všetko" - #, javascript-format -msgid "Click to choose all %s at once." -msgstr "Kliknite sem pre vybratie všetkých %s naraz." +msgid "Choose all %s" +msgstr "Vybrať všetky %s" -msgid "Choose" -msgstr "Vybrať" +#, javascript-format +msgid "Choose selected %s" +msgstr "Vybrať vybrané %s" -msgid "Remove" -msgstr "Odstrániť" +#, javascript-format +msgid "Remove selected %s" +msgstr "Odstrániť vybrané %s" #, javascript-format msgid "Chosen %s" @@ -62,22 +58,19 @@ msgstr "Vybrané %s" #, javascript-format msgid "" -"This is the list of chosen %s. You may remove some by selecting them in the " -"box below and then clicking the \"Remove\" arrow between the two boxes." +"Remove %s by selecting them and then select the \"Remove\" arrow button." msgstr "" -"Toto je zoznam dostupných %s. Pre vymazanie je potrebné označiť ich v poli a " -"následne kliknutím na šípku „Vymazať“ vymazať." #, javascript-format msgid "Type into this box to filter down the list of selected %s." msgstr "Píšte do tohto poľa pre vyfiltrovanie označených %s." -msgid "Remove all" -msgstr "Odstrániť všetky" +msgid "(click to clear)" +msgstr "" #, javascript-format -msgid "Click to remove all chosen %s at once." -msgstr "Kliknite sem pre vymazanie vybratých %s naraz." +msgid "Remove all %s" +msgstr "Odstrániť všetky %s" #, javascript-format msgid "%s selected option not visible" @@ -329,9 +322,3 @@ msgstr "P" msgctxt "one letter Saturday" msgid "S" msgstr "S" - -msgid "Show" -msgstr "Zobraziť" - -msgid "Hide" -msgstr "Skryť" diff --git a/django/contrib/admin/locale/ug/LC_MESSAGES/django.mo b/django/contrib/admin/locale/ug/LC_MESSAGES/django.mo index dd2fae9f7e25..810502a0e6da 100644 Binary files a/django/contrib/admin/locale/ug/LC_MESSAGES/django.mo and b/django/contrib/admin/locale/ug/LC_MESSAGES/django.mo differ diff --git a/django/contrib/admin/locale/ug/LC_MESSAGES/django.po b/django/contrib/admin/locale/ug/LC_MESSAGES/django.po index cf224321029c..10d99f54ea7f 100644 --- a/django/contrib/admin/locale/ug/LC_MESSAGES/django.po +++ b/django/contrib/admin/locale/ug/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ # Translators: # abdl erkin <84247764@qq.com>, 2018 # ABDULLA , 2014 -# Abduqadir Abliz , 2023-2024 +# Abduqadir Abliz , 2023-2024,2026 # Azat, 2023,2025 # Murat Orhun , 2023 # Natalia, 2023 @@ -12,9 +12,9 @@ msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-05-22 11:46-0300\n" -"PO-Revision-Date: 2025-03-19 11:30-0500\n" -"Last-Translator: Azat, 2023,2025\n" +"POT-Creation-Date: 2025-09-17 18:23-0300\n" +"PO-Revision-Date: 2026-03-09 07:05+0000\n" +"Last-Translator: Abduqadir Abliz , 2023-2024,2026\n" "Language-Team: Uyghur (http://app.transifex.com/django/django/language/ug/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -328,11 +328,8 @@ msgstr "" "خاتالىق كۆرۈلدى. بۇ ئۇچۇر تور بېكەت باشقۇرغۇچىلارغا ئېلخەت ئارقىلىق " "ئۇقتۇرۇلدى ۋە تېزدىن تۈزۈتۈلىدۇ. سەبرىڭىزگە رەھمەت." -msgid "Run the selected action" -msgstr "تاللانغان مەشغۇلاتنى ئىجرا قىل" - -msgid "Go" -msgstr "يۆتكەل" +msgid "Run" +msgstr "ئىجرا قىل" msgid "Click here to select the objects across all pages" msgstr "بارلىق بەتلەردىكى ئوبىيكتلەرنى تاللاش ئۈچۈن بۇ يەرنى چېكىڭ." @@ -442,6 +439,9 @@ msgstr "ساناقنى كۆرسەت" msgid "Clear all filters" msgstr "ھەممە سۈزگۈچلەرنى تازىلا" +msgid "Save" +msgstr "ساقلا" + msgid "Remove from sorting" msgstr "تەرتىپلەشتىن چىقىرىۋەت" @@ -463,29 +463,29 @@ msgstr "تېمىنى ئالماشتۇرۇش (ھازىرقى تېما: قارا)" #, python-format msgid "" -"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"Deleting the %(object_name)s “%(escaped_object)s” would result in deleting " "related objects, but your account doesn't have permission to delete the " "following types of objects:" msgstr "" -"%(object_name)s%(escaped_object)s نى ئۆچۈرۈش، ئۇنىڭغا باغلىق نەرسىلەرنى " -"ئۆچۈرۈشكە زۆرۈرلىنىدۇ ، لېكىن سىزنىڭ ھېساباتىڭىزدا تۆۋەندىكى تۈرلەرنى " -"ئۆچۈرۈش ھوقۇقى يوق:" +"%(object_name)s«%(escaped_object)s» نى ئۆچۈرۈش، ئۇنىڭغا باغلىق نەرسىلەرنى " +"ئۆچۈرۈشنى كەلتۈرۈپ چىقىرىدۇ لېكىن ھېسابىڭىزدا تۆۋەندىكى تۈرلەرنى ئۆچۈرۈش " +"ئىجازىتى يوق:" #, python-format msgid "" -"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"Deleting the %(object_name)s “%(escaped_object)s” would require deleting the " "following protected related objects:" msgstr "" -"%(object_name)s 's '%(escaped_object)s' نى ئۆچۈرۈش، تۆۋەندىكى قوغداق " -"قوغدالغان ئۇچۇرلارنى ئۆچۈرۈشنى تەلەپ قىلىدۇ:" +"%(object_name)s «%(escaped_object)s» نى ئۆچۈرۈش، تۆۋەندىكى قوغداشقا " +"مۇناسىۋەتلىك ئۇچۇرلارنى ئۆچۈرۈشنى تەلەپ قىلىدۇ:" #, python-format msgid "" -"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"Are you sure you want to delete the %(object_name)s “%(escaped_object)s”? " "All of the following related items will be deleted:" msgstr "" -"%(object_name)s %(escaped_object)s نى راستلا ئۆچۈرۈشنى خالامسىز؟ تۆۋەندىكى " -"بارلىق باغلىق تۈرلەر ئۆچۈرۈلىدۇ:" +"%(object_name)s «%(escaped_object)s» نى راستتىنلا ئۆچۈرۈشنى خالامسىز؟ " +"تۆۋەندىكى مۇناسىۋەتلىك بارلىق تۈر ئۆچۈرۈلىدۇ:" msgid "Objects" msgstr "ئوبىيكتلار" @@ -593,6 +593,10 @@ msgstr "ئىشلەتكۈچى" msgid "Action" msgstr "مەشغۇلات" +#, python-format +msgid "Pagination %(name)s entries" +msgstr "%(name)s تۈرنى بەتكە ئايرىش" + msgid "entry" msgid_plural "entries" msgstr[0] "تۈرى" @@ -605,15 +609,20 @@ msgstr "" "بۇ ئوبىيكتنىڭ ئۆزگەرتىش تارىخى يوق. بۇنى مۇمكىن بۇ باشقۇرۇش بېتى ئارقىلىق " "قوشمىغان بولۇشى مۇمكىن." +#, python-format +msgid "Pagination %(name)s" +msgstr "%(name)s بەتكە ئايرىش" + msgid "Show all" msgstr "ھەممىنى كۆرسەت" -msgid "Save" -msgstr "ساقلا" - msgid "Popup closing…" msgstr "قاڭقىشنى تاقاۋاتىدۇ…" +#, python-format +msgid "Search %(name)s" +msgstr "%(name)s نى ئىزدە" + msgid "Search" msgstr "ئىزدە" diff --git a/django/contrib/admin/locale/ur/LC_MESSAGES/django.mo b/django/contrib/admin/locale/ur/LC_MESSAGES/django.mo index 0735f5d6d916..061551f220fe 100644 Binary files a/django/contrib/admin/locale/ur/LC_MESSAGES/django.mo and b/django/contrib/admin/locale/ur/LC_MESSAGES/django.mo differ diff --git a/django/contrib/admin/locale/ur/LC_MESSAGES/django.po b/django/contrib/admin/locale/ur/LC_MESSAGES/django.po index 81ef1118e6c3..3e898a0b30b4 100644 --- a/django/contrib/admin/locale/ur/LC_MESSAGES/django.po +++ b/django/contrib/admin/locale/ur/LC_MESSAGES/django.po @@ -1,21 +1,29 @@ # This file is distributed under the same license as the Django package. # # Translators: -# Mansoorulhaq Mansoor , 2011 +# Fahad Ahmed, 2025 +# Fahad Ahmed, 2025 +# Jacob Walls, 2026 +# Mansoor Ul Haq , 2011 +# Mansoor Ul Haq , 2011 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: Jannis Leidel \n" -"Language-Team: Urdu (http://www.transifex.com/django/django/language/ur/)\n" +"POT-Creation-Date: 2025-09-17 18:23-0300\n" +"PO-Revision-Date: 2026-03-09 07:05+0000\n" +"Last-Translator: Jacob Walls, 2026\n" +"Language-Team: Urdu (http://app.transifex.com/django/django/language/ur/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: ur\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" +#, python-format +msgid "Delete selected %(verbose_name_plural)s" +msgstr "منتخب شدہ %(verbose_name_plural)s مٹائیں" + #, python-format msgid "Successfully deleted %(count)d %(items)s." msgstr "%(count)d %(items)s کو کامیابی سے مٹا دیا گیا۔" @@ -24,15 +32,11 @@ msgstr "%(count)d %(items)s کو کامیابی سے مٹا دیا گیا۔" msgid "Cannot delete %(name)s" msgstr "%(name)s نہیں مٹایا جا سکتا" -msgid "Are you sure?" -msgstr "آپ کو یقین ھے؟" - -#, python-format -msgid "Delete selected %(verbose_name_plural)s" -msgstr "منتخب شدہ %(verbose_name_plural)s مٹائیں" +msgid "Delete multiple objects" +msgstr "متعدد اشیاء مٹائیں" msgid "Administration" -msgstr "" +msgstr "انتظامیہ" msgid "All" msgstr "تمام" @@ -62,16 +66,24 @@ msgid "This year" msgstr "یہ سال" msgid "No date" -msgstr "" +msgstr "تاریخ موجود نہی" msgid "Has date" -msgstr "" +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 "کاروائی:" @@ -83,20 +95,29 @@ msgstr "دوسرا %(verbose_name)s درج کریں" msgid "Remove" msgstr "خارج کریں" +msgid "Addition" +msgstr "دیٹا دالیں" + +msgid "Change" +msgstr "تدوین" + +msgid "Deletion" +msgstr "دیٹا ڈیلٹ کرین" + msgid "action time" msgstr "کاروائی کا وقت" msgid "user" -msgstr "" +msgstr "صارف" msgid "content type" -msgstr "" +msgstr "اقسام مضمون" msgid "object id" msgstr "شے کا شناختی نمبر" #. Translators: 'repr' means representation -#. (https://docs.python.org/3/library/functions.html#repr) +#. (https://docs.python.org/library/functions.html#repr) msgid "object repr" msgstr "شے کا نمائندہ" @@ -113,41 +134,41 @@ msgid "log entries" msgstr "لاگ کے اندراج" #, python-format -msgid "Added \"%(object)s\"." -msgstr "" +msgid "Added “%(object)s”." +msgstr "داخل شدہ 1%(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 "“ 1%(object)s” نکال دیا گیا" msgid "LogEntry Object" -msgstr "" +msgstr "لوگ داخل کرین" #, python-brace-format -msgid "Added {name} \"{object}\"." -msgstr "" +msgid "Added {name} “{object}”." +msgstr "داخل شدہ {name} “{object}”" msgid "Added." -msgstr "" +msgstr "داخل" msgid "and" msgstr "اور" #, python-brace-format -msgid "Changed {fields} for {name} \"{object}\"." -msgstr "" +msgid "Changed {fields} for {name} “{object}”." +msgstr "تبادیل شدہ {fields} کا {name} “{object}”." #, python-brace-format msgid "Changed {fields}." -msgstr "" +msgstr "تبدیل \"{fields}\"" #, python-brace-format -msgid "Deleted {name} \"{object}\"." -msgstr "" +msgid "Deleted {name} “{object}”." +msgstr "ڈلیٹ {name} “{object}”." msgid "No fields changed." msgstr "کوئی خانہ تبدیل نھیں کیا گیا۔" @@ -155,39 +176,40 @@ msgstr "کوئی خانہ تبدیل نھیں کیا گیا۔" msgid "None" msgstr "کوئی نھیں" -msgid "" -"Hold down \"Control\", or \"Command\" on a Mac, to select more than one." -msgstr "" +msgid "Hold down “Control”, or “Command” on a Mac, to select more than one." +msgstr " “Control” یا “Command” میک پر اگر ایک سے زیادہ سلیکٹ کرنے کے لیئے۔" -#, python-brace-format -msgid "" -"The {name} \"{obj}\" was added successfully. You may edit it again below." -msgstr "" +msgid "Select this object for an action - {}" +msgstr " - {} تبادیل کرنے کے لئے سلیکٹ کرین" #, python-brace-format -msgid "" -"The {name} \"{obj}\" was added successfully. You may add another {name} " -"below." -msgstr "" +msgid "The {name} “{obj}” was added successfully." +msgstr "یہ {name} “{obj}”  سے داخل کر دیا گیا ہے" + +msgid "You may edit it again below." +msgstr "آپ دوبارہ تبدیل کر سکتے ہین نیچے" #, python-brace-format -msgid "The {name} \"{obj}\" was added successfully." +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 "" +"The {name} “{obj}” was changed 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} " +"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 "" +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 " @@ -200,12 +222,12 @@ msgid "No action selected." msgstr "کوئی کاروائی منتخب نھیں کی گئی۔" #, python-format -msgid "The %(name)s \"%(obj)s\" was deleted successfully." -msgstr "%(name)s \"%(obj)s\" کامیابی سے مٹایا گیا تھا۔" +msgid "The %(name)s “%(obj)s” was deleted successfully." +msgstr "یہ %(name)s%(obj)sکامیابی سے ہٹا دیا گیا ہے " #, python-format -msgid "%(name)s with ID \"%(key)s\" doesn't exist. Perhaps it was deleted?" -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" @@ -215,6 +237,10 @@ msgstr "%s کا اضافہ کریں" msgid "Change %s" msgstr "%s تبدیل کریں" +#, python-format +msgid "View %s" +msgstr "%sدیکھین" + msgid "Database error" msgstr "ڈیٹا بیس کی خرابی" @@ -234,21 +260,27 @@ msgstr[1] "تمام %(total_count)s منتخب کئے گئے۔" msgid "0 of %(cnt)s selected" msgstr "%(cnt)s میں سے 0 منتخب کیا گیا۔" +msgid "Delete" +msgstr "مٹائیں" + #, python-format 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 "" +msgstr "%(class_name)s%(instance)s" #, python-format msgid "" "Deleting %(class_name)s %(instance)s would require deleting the following " "protected related objects: %(related_objects)s" msgstr "" +"منتخب شدہ %(class_name)s%(instance)s کو مٹانے کے لئے مندرجہ ذیل محفوظ شدہ " +"اشیاء کو مٹانے کی ضرورت پڑ سکتی ھے۔%(related_objects)s" msgid "Django site admin" msgstr "منتظم برائے جینگو سائٹ" @@ -264,13 +296,13 @@ msgstr "اندر جائیں" #, python-format msgid "%(app)s administration" -msgstr "" +msgstr "%(app)sانتظامیہ" msgid "Page not found" 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 "گھر" @@ -285,15 +317,14 @@ msgid "Server Error (500)" 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 "منتخب شدہ کاروائیاں چلائیں" - -msgid "Go" -msgstr "جاؤ" +msgid "Run" +msgstr "چلائین" msgid "Click here to select the objects across all pages" msgstr "تمام صفحات میں سے اشیاء منتخب کرنے کے لئے یہاں کلک کریں۔" @@ -305,34 +336,73 @@ msgstr "تمام %(total_count)s %(module_name)s منتخب کریں" msgid "Clear selection" msgstr "انتخاب صاف کریں" -msgid "" -"First, enter a username and password. Then, you'll be able to edit more user " -"options." +msgid "Breadcrumbs" +msgstr "چہوٹا ایڈریس " + +#, python-format +msgid "Models in the %(name)s application" +msgstr "ماڈل ان میں سے %(name)s" + +msgid "Model name" +msgstr "ماڈل کا نام" + +msgid "Add link" +msgstr "لنک داخل کرین" + +msgid "Change or view list link" +msgstr "تبدیل یا دیکھین لنک" + +msgid "Add" +msgstr "اضافہ" + +msgid "View" +msgstr "دیکہیں" + +msgid "You don’t have permission to view or edit anything." +msgstr "اپکو دیکھنے یا تبدیل کرنے کی اجازت نہی ہے" + +msgid "After you’ve created a user, you’ll be able to edit more user options." msgstr "" "پہلے نام صارف اور لفظ اجازت درج کریں۔ پھر آپ مزید صارف کے حقوق مدوّن کرنے کے " "قابل ھوں گے۔" -msgid "Enter a username and password." -msgstr "نام صارف اور لفظ اجازت درج کریں۔" +msgid "Error:" +msgstr "خرابی" msgid "Change password" msgstr "لفظ اجازت تبدیل کریں" -msgid "Please correct the error below." -msgstr "براہ کرم نیچے غلطیاں درست کریں۔" +msgid "Set password" +msgstr "پاسورڈ بنائین" -msgid "Please correct the errors below." -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 "" +"This action will enable password-based authentication for " +"this user." +msgstr "یہ اکیشن اس کو صارف کو پاسورٹ ڈالنے کے لیئے ہے۔" + +msgid "Disable password-based authentication" +msgstr "پاسورڈ پوٹیکسن کو ناکارہ بنائے۔" + +msgid "Enable password-based authentication" +msgstr "پاسورڈ پوٹیکسن کو ناکارہ کرین" + +msgid "Skip to main content" +msgstr "چھوڑین مین کام" + msgid "Welcome," msgstr "خوش آمدید،" msgid "View site" -msgstr "" +msgstr "سائٹ دیکھیں" msgid "Documentation" msgstr "طریق استعمال" @@ -353,22 +423,40 @@ msgstr "سائٹ پر مشاھدہ کریں" msgid "Filter" msgstr "چھانٹیں" +msgid "Hide counts" +msgstr "گنتی چھپائین" + +msgid "Show counts" +msgstr "گنتی دیکھائین" + +msgid "Clear all filters" +msgstr "تمام فلٹرہٹائین" + +msgid "Save" +msgstr "محفوظ کریں" + msgid "Remove from sorting" -msgstr "" +msgstr "ترتیب ہٹائین" #, python-format msgid "Sorting priority: %(priority_number)s" -msgstr "" +msgstr "ترتیب کی اولیت%(priority_number)s" msgid "Toggle sorting" -msgstr "" +msgstr "ترتیب تبدیل کرین" -msgid "Delete" -msgstr "مٹائیں" +msgid "Toggle theme (current theme: auto)" +msgstr " (current theme: auto) ٹھیم تبدیل کرین" + +msgid "Toggle theme (current theme: light)" +msgstr " (current theme: لائٹ) ٹھیم تبدیل کرین" + +msgid "Toggle theme (current theme: dark)" +msgstr " (current theme: ڈارک) ٹھیم تبدیل کرین" #, python-format msgid "" -"Deleting the %(object_name)s '%(escaped_object)s' would result in deleting " +"Deleting the %(object_name)s “%(escaped_object)s” would result in deleting " "related objects, but your account doesn't have permission to delete the " "following types of objects:" msgstr "" @@ -378,7 +466,7 @@ msgstr "" #, python-format msgid "" -"Deleting the %(object_name)s '%(escaped_object)s' would require deleting the " +"Deleting the %(object_name)s “%(escaped_object)s” would require deleting the " "following protected related objects:" msgstr "" "%(object_name)s '%(escaped_object)s' کو مٹانے کے لئے مندرجہ ذیل محفوظ متعلقہ " @@ -386,23 +474,20 @@ msgstr "" #, python-format msgid "" -"Are you sure you want to delete the %(object_name)s \"%(escaped_object)s\"? " +"Are you sure you want to delete the %(object_name)s “%(escaped_object)s”? " "All of the following related items will be deleted:" msgstr "" "واقعی آپ %(object_name)s \"%(escaped_object)s\" کو مٹانا چاہتے ھیں۔ مندرجہ " "ذیل تمام متعلقہ اجزاء مٹ جائیں گے۔" msgid "Objects" -msgstr "" +msgstr "اوبجیٹ" -msgid "Yes, I'm sure" -msgstr "ھاں، مجھے یقین ھے" +msgid "Yes, I’m sure" +msgstr "ہاں" msgid "No, take me back" -msgstr "" - -msgid "Delete multiple objects" -msgstr "متعدد اشیاء مٹائیں" +msgstr "ٹھیرین - مجھے واپس لے جلین" #, python-format msgid "" @@ -429,9 +514,6 @@ msgstr "" "واقعی آپ منتخب شدہ %(objects_name)s مٹانا چاھتے ھیں؟ مندرجہ ذیل اور ان سے " "متعلقہ تمام اشیاء حذف ھو جائیں گی۔" -msgid "Change" -msgstr "تدوین" - msgid "Delete?" msgstr "مٹاؤں؟" @@ -440,47 +522,59 @@ msgid " By %(filter_title)s " msgstr "از %(filter_title)s" msgid "Summary" -msgstr "" - -#, python-format -msgid "Models in the %(name)s application" -msgstr "" - -msgid "Add" -msgstr "اضافہ" - -msgid "You don't have permission to edit anything." -msgstr "آپ کو کوئی چیز مدوّن کرنے کا حق نھیں ھے۔" +msgstr "خلاصہ" msgid "Recent actions" -msgstr "" +msgstr "حالیہ اقدامات" msgid "My actions" -msgstr "" +msgstr "میرے عمل" msgid "None available" msgstr "کچھ دستیاب نھیں" +msgid "Added:" +msgstr "داخل شدہ" + +msgid "Changed:" +msgstr "تبدیل شدہ" + +msgid "Deleted:" +msgstr "ڈالیٹیٹ" + msgid "Unknown content" 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 "Forgotten your login credentials?" +msgstr "پاسورڈیا ایڈی بھول گئے ہین" + +msgid "Toggle navigation" +msgstr "تبدیل کرین" + +msgid "Sidebar" +msgstr "سائٹ بار" + +msgid "Start typing to filter…" +msgstr "فلٹر کرنے کے لئے ڈیٹا داخل کرین" + +msgid "Filter navigation items" +msgstr "فلٹر نیویگیشن داخل کرین" msgid "Date/time" msgstr "تاریخ/وقت" @@ -491,33 +585,35 @@ msgstr "صارف" msgid "Action" msgstr "کاروائی" +#, python-format +msgid "Pagination %(name)s entries" +msgstr "صفہ %(name)s " + +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 "" "اس شے کا تبدیلی کا تاریخ نامہ نھیں ھے۔ اس کا غالباً بذریعہ اس منتظم سائٹ کے " "اضافہ نھیں کیا گیا۔" +#, python-format +msgid "Pagination %(name)s" +msgstr "صفہ %(name)sپر جائین " + msgid "Show all" msgstr "تمام دکھائیں" -msgid "Save" -msgstr "محفوظ کریں" - -msgid "Popup closing..." -msgstr "" +msgid "Popup closing…" +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 "Search %(name)s" +msgstr "سیرچ کرین %(name)s" msgid "Search" msgstr "تلاش کریں" @@ -541,8 +637,30 @@ msgstr "محفوظ کریں اور مزید اضافہ کریں" msgid "Save and continue editing" 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 "دوبارہ اندر جائیں" @@ -554,7 +672,7 @@ msgid "Your password was changed." 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 "" "براہ کرم سیکیورٹی کی خاطر اپنا پرانا لفظ اجازت درج کریں اور پھر اپنا نیا لفظ " @@ -595,26 +713,32 @@ 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 "براہ مھربانی مندرجہ ذیل صفحے پر جائیں اور نیا لفظ اجازت پسند کریں:" -msgid "Your username, in case you've forgotten:" -msgstr "نام صارف، بھول جانے کی صورت میں:" +msgid "In case you’ve forgotten, you are:" +msgstr "اگر آپ بھول گئے ہین" msgid "Thanks for using our site!" msgstr "ھماری سائٹ استعمال کرنے کے لئے شکریہ" @@ -624,16 +748,21 @@ msgid "The %(site_name)s team" 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 "میرا لفظ اجازت دوبارہ مرتب کریں" +msgid "Select all objects on this page for an action" +msgstr "اس پیج پر تمام ایٹم کو سلیکٹ کرین" + msgid "All dates" msgstr "تمام تاریخیں" @@ -645,6 +774,10 @@ msgstr "%s منتخب کریں" msgid "Select %s to change" msgstr "تبدیل کرنے کے لئے %s منتخب کریں" +#, python-format +msgid "Select %s to view" +msgstr "دیکھین کے لیئے سلیکٹ کرین %s " + msgid "Date:" msgstr "تاریخ:" @@ -655,7 +788,7 @@ msgid "Lookup" msgstr "ڈھونڈیں" msgid "Currently:" -msgstr "" +msgstr "موجودہ" msgid "Change:" -msgstr "" +msgstr "تبدیل" 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 7ccea14277b0..9892b6baa039 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 f16f516b65ce..8840bc7b59d8 100644 --- a/django/contrib/admin/locale/zh_Hans/LC_MESSAGES/django.po +++ b/django/contrib/admin/locale/zh_Hans/LC_MESSAGES/django.po @@ -1,6 +1,7 @@ # This file is distributed under the same license as the Django package. # # Translators: +# funcy39, 2026 # lanbla , 2021 # Brian Wang , 2018 # Fulong Sun , 2016 @@ -37,8 +38,8 @@ msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-09-17 18:23-0300\n" -"PO-Revision-Date: 2025-12-03 07:05+0000\n" -"Last-Translator: DWXXX, 2025\n" +"PO-Revision-Date: 2026-03-09 07:05+0000\n" +"Last-Translator: funcy39, 2026\n" "Language-Team: Chinese (China) (http://app.transifex.com/django/django/" "language/zh_CN/)\n" "MIME-Version: 1.0\n" @@ -109,7 +110,7 @@ msgid "" "Please enter the correct %(username)s and password for a staff account. Note " "that both fields may be case-sensitive." msgstr "" -"请输入一个正确的工作人员账户 %(username)s 和密码. 注意他们都是区分大小写的." +"请输入一个正确的工作人员账户 %(username)s 和密码。注意两者都区分大小写。" msgid "Action:" msgstr "动作" @@ -344,7 +345,7 @@ msgstr "" "等待。" msgid "Run" -msgstr "" +msgstr "运行" msgid "Click here to select the objects across all pages" msgstr "点击此处选择所有页面中包含的对象。" @@ -477,18 +478,23 @@ msgid "" "related objects, but your account doesn't have permission to delete the " "following types of objects:" msgstr "" +"删除 %(object_name)s “%(escaped_object)s” 会导致删除相关的对象,但你的帐号无" +"权删除下列类型的对象:" #, python-format msgid "" "Deleting the %(object_name)s “%(escaped_object)s” would require deleting the " "following protected related objects:" msgstr "" +"删除%(object_name)s \"%(escaped_object)s\" 将需要删除以下受保护的相关对象: " #, python-format 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 "" +"你确认想要删除 %(object_name)s \"%(escaped_object)s\"吗? 下列所有相关的项目" +"都将被删除:" msgid "Objects" msgstr "对象" @@ -595,7 +601,7 @@ msgstr "动作" #, python-format msgid "Pagination %(name)s entries" -msgstr "" +msgstr "%(name)s分页条目" msgid "entry" msgid_plural "entries" @@ -608,7 +614,7 @@ msgstr "此对象没有修改历史。它可能不是通过管理站点添加的 #, python-format msgid "Pagination %(name)s" -msgstr "" +msgstr "%(name)s分页" msgid "Show all" msgstr "显示全部" @@ -618,7 +624,7 @@ msgstr "弹窗关闭中..." #, python-format msgid "Search %(name)s" -msgstr "" +msgstr "搜索 %(name)s" msgid "Search" msgstr "搜索" diff --git a/django/contrib/admindocs/locale/az/LC_MESSAGES/django.mo b/django/contrib/admindocs/locale/az/LC_MESSAGES/django.mo index 06e5d2ba94d9..ae96ca1ece2c 100644 Binary files a/django/contrib/admindocs/locale/az/LC_MESSAGES/django.mo and b/django/contrib/admindocs/locale/az/LC_MESSAGES/django.mo differ diff --git a/django/contrib/admindocs/locale/az/LC_MESSAGES/django.po b/django/contrib/admindocs/locale/az/LC_MESSAGES/django.po index 1f367b3f0fe6..aa56e83bcd2b 100644 --- a/django/contrib/admindocs/locale/az/LC_MESSAGES/django.po +++ b/django/contrib/admindocs/locale/az/LC_MESSAGES/django.po @@ -3,14 +3,14 @@ # Translators: # Ali Ismayilov , 2011 # Nicat Məmmədov , 2022 -# Nijat Mammadov, 2024-2025 +# Nijat Mammadov, 2024-2026 msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-01-15 09:00+0100\n" -"PO-Revision-Date: 2025-12-03 20:19+0000\n" -"Last-Translator: Nijat Mammadov, 2024-2025\n" +"PO-Revision-Date: 2026-03-09 20:19+0000\n" +"Last-Translator: Nijat Mammadov, 2024-2026\n" "Language-Team: Azerbaijani (http://app.transifex.com/django/django/language/" "az/)\n" "MIME-Version: 1.0\n" @@ -95,7 +95,7 @@ msgid "Tools for your browser to quickly access admin functionality." msgstr "Admin funksionallığına tez çatmağa kömək edən səyyah alətləri." msgid "Please install docutils" -msgstr "Lütfən \"docutils\"i quraşdırın" +msgstr "Zəhmət olmasa, \"docutils\"i quraşdırın" #, python-format msgid "" @@ -109,8 +109,8 @@ msgstr "" msgid "" "Please ask your administrators to install docutils." msgstr "" -"Lütfən administrasiyanızdan docutilsin qurulmasını " -"istəyin." +"Zəhmət olmasa, inzibatçınızdan docutilsin " +"quraşdırmağı xahiş edin." #, python-format msgid "Model: %(name)s" @@ -189,17 +189,17 @@ msgid "Template tags" msgstr "Şablon teqləri" msgid "Template tag documentation" -msgstr "Şablon teq sənədləşməsi" +msgstr "Şablon etiketi sənədləşməsi" msgid "Built-in tags" -msgstr "Qurulu teqlər" +msgstr "Hazır etiketlər" #, python-format msgid "" "To use these tags, put %(code)s in your template before using " "the tag." msgstr "" -"Bu teqləri istifadə etmək üçün, şablonun əvvəlinə bunu qoyun: " +"Bu etiketləri istifadə etmək üçün, şablonun əvvəlinə bunu qoyun: " "%(code)s" #, python-format @@ -263,11 +263,11 @@ msgstr "model:" #, python-format msgid "the related `%(app_label)s.%(data_type)s` object" -msgstr "bağlı \"%(app_label)s.%(data_type)s\" obyekti" +msgstr "əlaqəli \"%(app_label)s.%(data_type)s\" obyekti" #, python-format msgid "related `%(app_label)s.%(object_name)s` objects" -msgstr "bağlı \"%(app_label)s.%(object_name)s\" obyektləri" +msgstr "əlaqəli \"%(app_label)s.%(object_name)s\" obyektləri" #, python-format msgid "all %s" diff --git a/django/contrib/admindocs/utils.py b/django/contrib/admindocs/utils.py index 4d9403a6f7ee..4a9acc9548f9 100644 --- a/django/contrib/admindocs/utils.py +++ b/django/contrib/admindocs/utils.py @@ -6,7 +6,11 @@ from inspect import cleandoc from django.urls import reverse -from django.utils.regex_helper import _lazy_re_compile +from django.urls.utils import ( # NOQA: F401 + extract_views_from_urlpatterns, + simplify_regex, +) +from django.utils.regex_helper import _lazy_re_compile # NOQA: F401 from django.utils.safestring import mark_safe try: @@ -173,96 +177,6 @@ def default_reference_role( for name, urlbase in ROLES.items(): create_reference_role(name, urlbase) -# Match the beginning of a named, unnamed, or non-capturing groups. -named_group_matcher = _lazy_re_compile(r"\(\?P(<\w+>)") -unnamed_group_matcher = _lazy_re_compile(r"\(") -non_capturing_group_matcher = _lazy_re_compile(r"\(\?\:") - - -def replace_metacharacters(pattern): - """Remove unescaped metacharacters from the pattern.""" - return re.sub( - r"((?:^|(?(x|y))/b' or '^b/((x|y)\w+)$'. - unmatched_open_brackets, prev_char = 1, None - for idx, val in enumerate(pattern[end:]): - # Check for unescaped `(` and `)`. They mark the start and end of a - # nested group. - if val == "(" and prev_char != "\\": - unmatched_open_brackets += 1 - elif val == ")" and prev_char != "\\": - unmatched_open_brackets -= 1 - prev_char = val - # If brackets are balanced, the end of the string for the current named - # capture group pattern has been reached. - if unmatched_open_brackets == 0: - return start, end + idx + 1 - - -def _find_groups(pattern, group_matcher): - prev_end = None - for match in group_matcher.finditer(pattern): - if indices := _get_group_start_end(match.start(0), match.end(0), pattern): - start, end = indices - if prev_end and start > prev_end or not prev_end: - yield start, end, match - prev_end = end - - -def replace_named_groups(pattern): - r""" - Find named groups in `pattern` and replace them with the group name. E.g., - 1. ^(?P\w+)/b/(\w+)$ ==> ^/b/(\w+)$ - 2. ^(?P\w+)/b/(?P\w+)/$ ==> ^/b//$ - 3. ^(?P\w+)/b/(\w+) ==> ^/b/(\w+) - 4. ^(?P\w+)/b/(?P\w+) ==> ^/b/ - """ - group_pattern_and_name = [ - (pattern[start:end], match[1]) - for start, end, match in _find_groups(pattern, named_group_matcher) - ] - for group_pattern, group_name in group_pattern_and_name: - pattern = pattern.replace(group_pattern, group_name) - return pattern - - -def replace_unnamed_groups(pattern): - r""" - Find unnamed groups in `pattern` and replace them with ''. E.g., - 1. ^(?P\w+)/b/(\w+)$ ==> ^(?P\w+)/b/$ - 2. ^(?P\w+)/b/((x|y)\w+)$ ==> ^(?P\w+)/b/$ - 3. ^(?P\w+)/b/(\w+) ==> ^(?P\w+)/b/ - 4. ^(?P\w+)/b/((x|y)\w+) ==> ^(?P\w+)/b/ - """ - final_pattern, prev_end = "", None - for start, end, _ in _find_groups(pattern, unnamed_group_matcher): - if prev_end: - final_pattern += pattern[prev_end:start] - final_pattern += pattern[:start] + "" - prev_end = end - return final_pattern + pattern[prev_end:] - - -def remove_non_capturing_groups(pattern): - r""" - Find non-capturing groups in the given `pattern` and remove them, e.g. - 1. (?P\w+)/b/(?:\w+)c(?:\w+) => (?P\\w+)/b/c - 2. ^(?:\w+(?:\w+))a => ^a - 3. ^a(?:\w+)/b(?:\w+) => ^a/b - """ - group_start_end_indices = _find_groups(pattern, non_capturing_group_matcher) - final_pattern, prev_end = "", None - for start, end, _ in group_start_end_indices: - final_pattern += pattern[prev_end:start] - prev_end = end - return final_pattern + pattern[prev_end:] - def strip_p_tags(value): return mark_safe(value.replace("

", "").replace("

", "")) diff --git a/django/contrib/admindocs/views.py b/django/contrib/admindocs/views.py index 0c4ece29feb2..6a8453b29270 100644 --- a/django/contrib/admindocs/views.py +++ b/django/contrib/admindocs/views.py @@ -7,22 +7,16 @@ from django.contrib import admin from django.contrib.admin.views.decorators import staff_member_required from django.contrib.admindocs import utils -from django.contrib.admindocs.utils import ( - remove_non_capturing_groups, - replace_metacharacters, - replace_named_groups, - replace_unnamed_groups, -) from django.contrib.auth import get_permission_codename from django.core.exceptions import ( ImproperlyConfigured, PermissionDenied, - ViewDoesNotExist, ) from django.db import models from django.http import Http404 from django.template.engine import Engine from django.urls import get_mod_func, get_resolver, get_urlconf +from django.urls.utils import extract_views_from_urlpatterns, simplify_regex from django.utils._os import safe_join from django.utils.decorators import method_decorator from django.utils.functional import cached_property @@ -475,49 +469,3 @@ def get_readable_field_data_type(field): the values of field.__dict__ before being output. """ return field.description % field.__dict__ - - -def extract_views_from_urlpatterns(urlpatterns, base="", namespace=None): - """ - Return a list of views from a list of urlpatterns. - - Each object in the returned list is a 4-tuple: - (view_func, regex, namespace, name) - """ - views = [] - for p in urlpatterns: - if hasattr(p, "url_patterns"): - try: - patterns = p.url_patterns - except ImportError: - continue - views.extend( - extract_views_from_urlpatterns( - patterns, - base + str(p.pattern), - (namespace or []) + (p.namespace and [p.namespace] or []), - ) - ) - elif hasattr(p, "callback"): - try: - views.append((p.callback, base + str(p.pattern), namespace, p.name)) - except ViewDoesNotExist: - continue - else: - raise TypeError(_("%s does not appear to be a urlpattern object") % p) - return views - - -def simplify_regex(pattern): - r""" - Clean up urlpattern regexes into something more readable by humans. For - example, turn "^(?P\w+)/athletes/(?P\w+)/$" - into "//athletes//". - """ - pattern = remove_non_capturing_groups(pattern) - pattern = replace_named_groups(pattern) - pattern = replace_unnamed_groups(pattern) - pattern = replace_metacharacters(pattern) - if not pattern.startswith("/"): - pattern = "/" + pattern - return pattern diff --git a/django/contrib/auth/locale/az/LC_MESSAGES/django.mo b/django/contrib/auth/locale/az/LC_MESSAGES/django.mo index 31cd01051e00..ab62b490e308 100644 Binary files a/django/contrib/auth/locale/az/LC_MESSAGES/django.mo and b/django/contrib/auth/locale/az/LC_MESSAGES/django.mo differ diff --git a/django/contrib/auth/locale/az/LC_MESSAGES/django.po b/django/contrib/auth/locale/az/LC_MESSAGES/django.po index 0baf17358034..00979380f514 100644 --- a/django/contrib/auth/locale/az/LC_MESSAGES/django.po +++ b/django/contrib/auth/locale/az/LC_MESSAGES/django.po @@ -5,15 +5,15 @@ # Emin Mastizada , 2018,2020 # Emin Mastizada , 2016 # Nicat Məmmədov , 2022 -# Nijat Mammadov, 2024-2025 +# Nijat Mammadov, 2024-2026 # Sevdimali , 2024 msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-05-22 11:46-0300\n" -"PO-Revision-Date: 2025-03-19 11:30-0500\n" -"Last-Translator: Nijat Mammadov, 2024-2025\n" +"POT-Creation-Date: 2025-03-19 11:30-0500\n" +"PO-Revision-Date: 2026-03-09 08:09+0000\n" +"Last-Translator: Nijat Mammadov, 2024-2026\n" "Language-Team: Azerbaijani (http://app.transifex.com/django/django/language/" "az/)\n" "MIME-Version: 1.0\n" @@ -90,9 +90,9 @@ msgid "" "disabled, they may still be able to authenticate using other backends, such " "as Single Sign-On or LDAP." msgstr "" -"İstifadəçinin şifrə ilə autentifikasiya edib-etməyəcəyi. Əgər deaktiv " -"edilsə, onlar yenə də Single Sign-On və ya LDAP kimi digər backend-lərdən " -"istifadə edərək autentifikasiya edə bilərlər." +"İstifadəçinin şifrə vasitəsilə kimlik doğrulaması edib-etməyəcəyini müəyyən " +"edir. Aktiv olmayanda, onlar hələ də Single Sign-On (Vahid Giriş) və ya LDAP " +"kimi digər arxa sistemlər vasitəsilə kimliyini doğrulaya bilərlər." msgid "Password-based authentication" msgstr "Şifrə əsaslı autentifikasiya" diff --git a/django/contrib/auth/locale/ckb/LC_MESSAGES/django.mo b/django/contrib/auth/locale/ckb/LC_MESSAGES/django.mo index 6cd179589172..4c2bb307f653 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 1b689c6c33a4..5e4fe6113f27 100644 --- a/django/contrib/auth/locale/ckb/LC_MESSAGES/django.po +++ b/django/contrib/auth/locale/ckb/LC_MESSAGES/django.po @@ -1,14 +1,14 @@ # This file is distributed under the same license as the Django package. # # Translators: -# Swara , 2022,2024 +# Swara , 2022,2024,2026 msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-05-22 11:46-0300\n" -"PO-Revision-Date: 2024-08-07 08:09+0000\n" -"Last-Translator: Swara , 2022,2024\n" +"POT-Creation-Date: 2025-03-19 11:30-0500\n" +"PO-Revision-Date: 2026-03-09 08:09+0000\n" +"Last-Translator: Swara , 2022,2024,2026\n" "Language-Team: Central Kurdish (http://app.transifex.com/django/django/" "language/ckb/)\n" "MIME-Version: 1.0\n" @@ -56,12 +56,12 @@ msgstr "تێپەڕەوشە" msgid "last login" msgstr "دوا چوونەژوورەوە" -msgid "No password set." -msgstr "تێپەڕەوشە جێگیرنەکراوە." - msgid "Invalid password format or unknown hashing algorithm." msgstr "شێوازی تێپەڕەوشە نادروستە یان ئەلگۆریتمێکی هاشکراوی نەناسراوە." +msgid "No password set." +msgstr "تێپەڕەوشە جێگیرنەکراوە." + msgid "Reset password" msgstr "دانانەوەی تێپەڕەوشە" @@ -71,15 +71,6 @@ msgstr "دانانی تێپەڕەوشە" msgid "The two password fields didn’t match." msgstr "هەردوو خانەی تێپەڕەوشە وەک یەک نین." -msgid "" -"Whether the user will be able to authenticate using a password or not. If " -"disabled, they may still be able to authenticate using other backends, such " -"as Single Sign-On or LDAP." -msgstr "" -"ئایا بەکارهێنەر دەتوانێت بە بەکارهێنانی تێپەڕەوشە خۆی بناسێنێت یان نا. ئەگەر " -"ناچالاک کرابێت، لەوانەیە هێشتا بتوانێت خۆی بناسێنێت بە بەکارهێنانی سیستەمی " -"تر لە پشتەوە، وەک چوونەژوورەوەی یەکجار Single Sign-On یان LDAP." - msgid "Password" msgstr "تێپەڕەوشە" @@ -89,6 +80,15 @@ msgstr "دووپاتکردنەوەی تێپەڕەوشە" msgid "Enter the same password as before, for verification." msgstr "بۆ پشتڕاستکردنەوە هەمان تێپەڕەوشەی پێشوو بنوسە." +msgid "" +"Whether the user will be able to authenticate using a password or not. If " +"disabled, they may still be able to authenticate using other backends, such " +"as Single Sign-On or LDAP." +msgstr "" +"ئایا بەکارهێنەر دەتوانێت بە بەکارهێنانی تێپەڕەوشە خۆی بناسێنێت یان نا. ئەگەر " +"ناچالاک کرابێت، لەوانەیە هێشتا بتوانێت خۆی بناسێنێت بە بەکارهێنانی سیستەمی " +"تر لە پشتەوە، وەک چوونەژوورەوەی یەکجار Single Sign-On یان LDAP." + msgid "Password-based authentication" msgstr "ڕەسەنایەتی لەسەر بنەمای تێپەڕەوشە" @@ -262,16 +262,11 @@ msgid "users" msgstr "بەکارهێنەر" #, python-format -msgid "" -"This password is too short. It must contain at least %(min_length)d " -"character." +msgid "This password is too short. It must contain at least %d character." msgid_plural "" -"This password is too short. It must contain at least %(min_length)d " -"characters." -msgstr[0] "" -"ئەم تێپەڕەوشە زۆر کورتە. دەبێت لانیکەم پێکبێت لە %(min_length)d نوسە." -msgstr[1] "" -"ئەم تێپەڕەوشە زۆر کورتە. دەبێت لانیکەم پێکبێت لە %(min_length)d نوسە." +"This password is too short. It must contain at least %d characters." +msgstr[0] "ئەم تێپەڕەوشەیە زۆر کورتە. دەبێت لانیکەم پێکبێت لە %d نوسە." +msgstr[1] "ئەم تێپەڕەوشەیە زۆر کورتە. دەبێت لانیکەم پێکبێت لە %d نوسە." #, python-format msgid "Your password must contain at least %(min_length)d character." diff --git a/django/contrib/auth/locale/hr/LC_MESSAGES/django.mo b/django/contrib/auth/locale/hr/LC_MESSAGES/django.mo index 9eee44cd7ee3..9b543d4ad940 100644 Binary files a/django/contrib/auth/locale/hr/LC_MESSAGES/django.mo and b/django/contrib/auth/locale/hr/LC_MESSAGES/django.mo differ diff --git a/django/contrib/auth/locale/hr/LC_MESSAGES/django.po b/django/contrib/auth/locale/hr/LC_MESSAGES/django.po index 8b53335f6780..7e555f171dc1 100644 --- a/django/contrib/auth/locale/hr/LC_MESSAGES/django.po +++ b/django/contrib/auth/locale/hr/LC_MESSAGES/django.po @@ -4,7 +4,7 @@ # Bojan Mihelač , 2012 # Davor Lučić , 2012 # Jannis Leidel , 2011 -# Milo Ivir , 2025 +# Milo Ivir , 2025-2026 # Mislav Cimperšak , 2013,2015 # Nino , 2013 # senko , 2012 @@ -14,8 +14,8 @@ msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2025-03-19 11:30-0500\n" -"PO-Revision-Date: 2025-12-03 08:09+0000\n" -"Last-Translator: Milo Ivir , 2025\n" +"PO-Revision-Date: 2026-03-09 08:09+0000\n" +"Last-Translator: Milo Ivir , 2025-2026\n" "Language-Team: Croatian (http://app.transifex.com/django/django/language/" "hr/)\n" "MIME-Version: 1.0\n" @@ -29,14 +29,14 @@ msgid "Personal info" msgstr "Osobni podaci" msgid "Permissions" -msgstr "Privilegije" +msgstr "Dozvole" msgid "Important dates" msgstr "Važni datumi" #, python-format msgid "%(name)s object with primary key %(key)r does not exist." -msgstr "Unos %(name)s sa primarnim ključem %(key)r ne postoji." +msgstr "Objekt %(name)s s primarnim ključem %(key)r ne postoji." msgid "Conflicting form data submitted. Please try again." msgstr "Poslani su konfliktni podaci obrasca. Pokušajte ponovo." @@ -62,10 +62,10 @@ msgid "password" msgstr "lozinka" msgid "last login" -msgstr "posljednja prijava" +msgstr "zadnja prijava" msgid "Invalid password format or unknown hashing algorithm." -msgstr "Neispravan format lozinke ili nepoznati hashing algoritam." +msgstr "Neispravan format lozinke ili nepoznat hashing algoritam." msgid "No password set." msgstr "Lozinka nije postavljena." @@ -77,7 +77,7 @@ msgid "Set password" msgstr "Postavi lozinku" msgid "The two password fields didn’t match." -msgstr "Dva polja lozinki nisu jednaka." +msgstr "Polja lozinki se ne poklapaju." msgid "Password" msgstr "Lozinka" @@ -124,7 +124,7 @@ msgid "" "be case-sensitive." msgstr "" "Unesite ispravno %(username)s i lozinku. Imajte na umu da oba polja mogu " -"biti velika i mala slova." +"sadržati velika i mala slova." msgid "This account is inactive." msgstr "Ovaj korisnički račun nije aktivan." @@ -139,7 +139,7 @@ msgid "New password confirmation" msgstr "Potvrda nove lozinke" msgid "Your old password was entered incorrectly. Please enter it again." -msgstr "Vaša stara lozinka je pogrešno unesena. Molim unesite ponovo." +msgstr "Vaša stara lozinka je pogrešno unesena. Unesite je ponovo." msgid "Old password" msgstr "Stara lozinka" @@ -184,16 +184,16 @@ msgid "name" msgstr "ime" msgid "content type" -msgstr "tip sadržaja" +msgstr "vrsta sadržaja" msgid "codename" msgstr "kodno ime" msgid "permission" -msgstr "privilegija" +msgstr "dozvola" msgid "permissions" -msgstr "privilegije" +msgstr "dozvole" msgid "group" msgstr "grupa" @@ -202,27 +202,27 @@ msgid "groups" msgstr "grupe" msgid "superuser status" -msgstr "superuser status" +msgstr "status superkorisnika" msgid "" "Designates that this user has all permissions without explicitly assigning " "them." msgstr "" -"Određuje da ovaj korisnik ima sve privilegije te uklanja potrebu da se " -"privilegije unose eksplicitno/ručno." +"Određuje da ovaj korisnik ima sve dozvole bez izričitog dodjeljivanja " +"dozvola." msgid "" "The groups this user belongs to. A user will get all permissions granted to " "each of their groups." msgstr "" -"Grupe kojima ovaj korisnik pripada. Korisnik će imati sve privilegije grupa " -"kojima pripada." +"Grupe kojima ovaj korisnik pripada. Korisnik će imati sve dozvole koje su mu " +"dodijeljene za svaku od svojih grupa." msgid "user permissions" -msgstr "privilegije korisnika" +msgstr "dozvole korisnika" msgid "Specific permissions for this user." -msgstr "Određene privilegije za korisnika." +msgstr "Određene dozvole za ovog korisnika." msgid "username" msgstr "korisničko ime" @@ -232,7 +232,7 @@ msgstr "" "Obavezno. 150 znakova ili manje. Samo slova, znamenke i znakovi@/./+/-/_." msgid "A user with that username already exists." -msgstr "Korisnik sa navedenim imenom već postoji." +msgstr "Korisnik s navedenim imenom već postoji." msgid "first name" msgstr "ime" @@ -247,7 +247,8 @@ msgid "staff status" msgstr "status osoblja" msgid "Designates whether the user can log into this admin site." -msgstr "Određuje može li se korisnik prijaviti na ove stranice administracije." +msgstr "" +"Određuje je li se korisnik može prijaviti na ove stranice administracije." msgid "active" msgstr "aktivan" @@ -256,8 +257,8 @@ msgid "" "Designates whether this user should be treated as active. Unselect this " "instead of deleting accounts." msgstr "" -"Određuje treba li se ovaj korisnik tretirati kao aktivan korisnik. Koristite " -"ovu opciju umjesto brisanja korisničkih računa." +"Određuje je li se ovaj korisnik mora tretirati kao aktivan korisnik. " +"Koristite ovu opciju umjesto brisanja korisničkih računa." msgid "date joined" msgstr "datum učlanjenja" @@ -279,8 +280,8 @@ msgstr[2] "Lozinka je prekratka. Mora sadržavati barem %d znakova." #, 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] "Lozinka mora sadržavati minimalno %(min_length)d znak." -msgstr[1] "Lozinka mora sadržavati minimalno %(min_length)d znaka." +msgstr[0] "Lozinka mora sadržavati barem %(min_length)d znak." +msgstr[1] "Lozinka mora sadržavati barem %(min_length)d znaka." msgstr[2] "Lozinka mora sadržavati barem %(min_length)d znakova." #, python-format @@ -297,7 +298,7 @@ msgid "Your password can’t be a commonly used password." msgstr "Lozinka ne smije biti učestalo korištena lozinka." msgid "This password is entirely numeric." -msgstr "Lozinka se u potpunosti sastoji od brojeva." +msgstr "Ova lozinka sadržava samo znamenke." msgid "Your password can’t be entirely numeric." msgstr "Lozinka ne smije sadržavati samo znamenke." @@ -311,7 +312,7 @@ msgid "" "and uppercase A-Z letters, numbers, and @/./+/-/_ characters." msgstr "" "Unesite valjano korisničko ime. Ova vrijednost može sadržati samo " -"nenaglašena mala slova a do z i velika slova A do Z, brojeve i znakove @/./" +"nenaglašena mala slova a do z i velika slova A do Z, znamenke i znakove @/./" "+/-/_." msgid "" @@ -319,10 +320,10 @@ msgid "" "@/./+/-/_ characters." msgstr "" "Unesite valjano korisničko ime. Ova vrijednost može sadržati samo slova, " -"brojeve i znakove @/./+/-/_." +"znamenke i znakove @/./+/-/_." msgid "Logged out" -msgstr "Niste logirani" +msgstr "Odjavljeni ste" msgid "Password reset" msgstr "Resetiranje lozinke" @@ -334,7 +335,7 @@ msgid "Enter new password" msgstr "Unesite novu lozinku" msgid "Password reset unsuccessful" -msgstr "Resetiranje lozinke neuspješno" +msgstr "Resetiranje lozinke neuspjelo" msgid "Password reset complete" msgstr "Resetiranje lozinke završeno" @@ -343,4 +344,4 @@ msgid "Password change" msgstr "Promjena lozinke" msgid "Password change successful" -msgstr "Promjena lozinke uspješna" +msgstr "Promjena lozinke uspjela" diff --git a/django/contrib/flatpages/locale/az/LC_MESSAGES/django.mo b/django/contrib/flatpages/locale/az/LC_MESSAGES/django.mo index 3d6b2946b357..9a38b13c0fa5 100644 Binary files a/django/contrib/flatpages/locale/az/LC_MESSAGES/django.mo and b/django/contrib/flatpages/locale/az/LC_MESSAGES/django.mo differ diff --git a/django/contrib/flatpages/locale/az/LC_MESSAGES/django.po b/django/contrib/flatpages/locale/az/LC_MESSAGES/django.po index 45de566ce2e3..ac7d8ad85e1a 100644 --- a/django/contrib/flatpages/locale/az/LC_MESSAGES/django.po +++ b/django/contrib/flatpages/locale/az/LC_MESSAGES/django.po @@ -5,14 +5,14 @@ # Dimitris Glezos , 2012 # Emin Mastizada , 2018,2020 # Emin Mastizada , 2015 -# Nijat Mammadov, 2024 +# Nijat Mammadov, 2024,2026 msgid "" msgstr "" "Project-Id-Version: django\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-09-08 17:27+0200\n" -"PO-Revision-Date: 2024-08-07 19:03+0000\n" -"Last-Translator: Nijat Mammadov, 2024\n" +"PO-Revision-Date: 2026-03-09 19:03+0000\n" +"Last-Translator: Nijat Mammadov, 2024,2026\n" "Language-Team: Azerbaijani (http://app.transifex.com/django/django/language/" "az/)\n" "MIME-Version: 1.0\n" @@ -48,10 +48,10 @@ msgstr "" "Məsələn, “/about/contact”. Əvvəldəki çəpəki xəttin olmasına diqqət edin." msgid "URL is missing a leading slash." -msgstr "URL əvvəlində çəpəki xətt əskikdir." +msgstr "URL əvvəlində əyri xətt əskikdir." msgid "URL is missing a trailing slash." -msgstr "Ünvan sonunda çəpəki xətt əksikdir." +msgstr "Ünvan sonunda əyri xətt əksikdir." #, python-format msgid "Flatpage with url %(url)s already exists for site %(site)s" diff --git a/django/contrib/messages/storage/cookie.py b/django/contrib/messages/storage/cookie.py index ce4250d211a2..82d513da5098 100644 --- a/django/contrib/messages/storage/cookie.py +++ b/django/contrib/messages/storage/cookie.py @@ -89,7 +89,7 @@ class CookieStorage(BaseStorage): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) - self.signer = signing.get_cookie_signer(salt=self.key_salt) + self._signer = signing.get_cookie_signer(salt=self.key_salt) def _get(self, *args, **kwargs): """ @@ -181,7 +181,7 @@ def _encode_parts(self, messages, encode_empty=False): also contains a hash to ensure that the data was not tampered with. """ if messages or encode_empty: - return self.signer.sign_object( + return self._signer.sign_object( messages, serializer=MessagePartGatherSerializer, compress=True ) @@ -205,7 +205,7 @@ def _decode(self, data): if not data: return None try: - return self.signer.unsign_object(data, serializer=MessageSerializer) + return self._signer.unsign_object(data, serializer=MessageSerializer) except (signing.BadSignature, binascii.Error, json.JSONDecodeError): pass # Mark the data as used (so it gets removed) since something was wrong diff --git a/django/core/management/commands/listurls.py b/django/core/management/commands/listurls.py new file mode 100644 index 000000000000..4cf2d323cf53 --- /dev/null +++ b/django/core/management/commands/listurls.py @@ -0,0 +1,175 @@ +# Portions of this code are derived from django-extensions (MIT): +# https://github.com/django-extensions/django-extensions + +import json +from collections import namedtuple +from importlib import import_module + +from django.conf import settings +from django.core.management import color +from django.core.management.base import BaseCommand, CommandError, CommandParser +from django.urls.utils import ( + extract_views_from_urlpatterns, + simplify_regex, +) + +FORMATS = ( + "tabular", + "stacked", + "json", +) + +COLORLESS_FORMATS = ("json",) + +URLPattern = namedtuple("URLPattern", ["route", "view", "name"]) + + +class Command(BaseCommand): + help = "List URL patterns in the project with optional filtering by prefixes." + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + self.style = color.color_style() + + def add_arguments(self, parser: CommandParser): + super().add_arguments(parser) + + parser.add_argument( + "--unsorted", + "-u", + action="store_true", + dest="unsorted", + help="Show URLs without sorting them alphabetically.", + ) + parser.add_argument( + "--prefix", + "-p", + dest="prefixes", + help="Only list URLs with these prefixes.", + nargs="+", + ) + parser.add_argument( + "--format", + "-f", + choices=FORMATS, + default="tabular", + dest="format", + help="Formatting style of the output", + ) + + def handle(self, *args, **options): + prefixes = options["prefixes"] + url_patterns = self.get_url_patterns(prefixes=prefixes) + if not url_patterns: + raise CommandError("There are no URL patterns that match given prefixes") + + unsorted = options["unsorted"] + no_color = options["no_color"] + format = options["format"] + if not unsorted: + url_patterns.sort() + + self.is_color_enabled = ( + color.supports_color() + and (not no_color) + and (format not in COLORLESS_FORMATS) + ) + if self.is_color_enabled: + url_patterns = self.apply_color(url_patterns=url_patterns) + + url_patterns = self.apply_format(url_patterns=url_patterns, format=format) + return url_patterns + + @classmethod + def get_url_patterns(cls, prefixes=None): + """ + Returns a list of URL patterns in the project with given prefixes. + + Each object in the returned list is a tuple[str, str, str]: + (route, view, name). + """ + url_patterns = [] + urlconf = import_module(settings.ROOT_URLCONF) + + for view_func, regex, namespace, name in extract_views_from_urlpatterns( + urlconf.urlpatterns + ): + route = simplify_regex(regex) + + if hasattr(view_func, "view_class"): + view_func = view_func.view_class + + view = "{}.{}".format( + view_func.__module__, + getattr(view_func, "__name__", view_func.__class__.__name__), + ) + namespace_list = namespace or [] + name = ":".join(namespace_list + [name]) if name else "" + + pattern = URLPattern(route, view, name) + if not prefixes or any( + pattern.route.startswith(prefix) for prefix in prefixes + ): + url_patterns.append(pattern) + + return url_patterns + + def apply_color(self, url_patterns): + colored_url_patterns = [] + + for url_pattern in url_patterns: + route = self.style.COMMAND_DATA(url_pattern.route) + + module_path, module_name = url_pattern.view.rsplit(".", 1) + module_name = self.style.COMMAND_HIGHLIGHT(module_name) + view = f"{module_path}.{module_name}" + + if name := url_pattern.name: + namespace, name = name.rsplit(":", 1) if ":" in name else ("", name) + name = self.style.COMMAND_HIGHLIGHT(name) + name = f"{namespace}:{name}" if namespace else name + + colored_url_patterns.append((route, view, name)) + + return colored_url_patterns + + def apply_format(self, url_patterns, format): + format_method_name = f"format_{format.replace('-', '_')}" + format_method = getattr(self, format_method_name) + return format_method(url_patterns) + + def format_tabular(self, url_patterns): + widths = [] + margin = 2 + for columns in zip(*url_patterns, strict=False): + widths.append(len(max(columns, key=len)) + margin) + + lines = [] + for row in url_patterns: + line = "".join( + cdata.ljust(width) for width, cdata in zip(widths, row, strict=False) + ) + lines.append(line) + + return "\n".join(lines) + + def format_stacked(self, url_patterns): + separator = "-" * 20 + apply_style = ( + self.style.COMMAND_HEADER if self.is_color_enabled else lambda text: text + ) + + lines = [] + for route, view, name in url_patterns: + lines.append(apply_style("Route: ") + route) + lines.append(apply_style("View: ") + view) + if name: + lines.append(apply_style("Name: ") + name) + lines.append(separator) + + return "\n".join(lines) + + def format_json(self, url_patterns): + url_pattern_dicts = [url_pattern._asdict() for url_pattern in url_patterns] + return json.dumps(url_pattern_dicts, indent=2) diff --git a/django/urls/utils.py b/django/urls/utils.py index b5054b163cd9..59a0ae6e9566 100644 --- a/django/urls/utils.py +++ b/django/urls/utils.py @@ -1,8 +1,11 @@ import functools +import re from importlib import import_module from django.core.exceptions import ViewDoesNotExist from django.utils.module_loading import module_has_submodule +from django.utils.regex_helper import _lazy_re_compile +from django.utils.translation import gettext as _ @functools.cache @@ -64,3 +67,146 @@ def get_mod_func(callback): except ValueError: return callback, "" return callback[:dot], callback[dot + 1 :] + + +# Match the beginning of a named, unnamed, or non-capturing groups. +_NAMED_GROUP_MATCHER = _lazy_re_compile(r"\(\?P(<\w+>)") +_UNNAMED_GROUP_MATCHER = _lazy_re_compile(r"\(") +_NON_CAPTURING_GROUP_MATCHER = _lazy_re_compile(r"\(\?\:") +_LITERAL_ESCAPE_RE = _lazy_re_compile(r"\\([./()_-])") + + +def replace_metacharacters(pattern): + """Remove unescaped metacharacters from the pattern.""" + return re.sub( + r"((?:^|(?(x|y))/b' or '^b/((x|y)\w+)$'. + unmatched_open_brackets, prev_char = 1, None + for idx, val in enumerate(pattern[end:]): + # Check for unescaped `(` and `)`. They mark the start and end of a + # nested group. + if val == "(" and prev_char != "\\": + unmatched_open_brackets += 1 + elif val == ")" and prev_char != "\\": + unmatched_open_brackets -= 1 + prev_char = val + # If brackets are balanced, the end of the string for the current named + # capture group pattern has been reached. + if unmatched_open_brackets == 0: + return start, end + idx + 1 + + +def _find_groups(pattern, group_matcher): + prev_end = None + for match in group_matcher.finditer(pattern): + if indices := _get_group_start_end(match.start(0), match.end(0), pattern): + start, end = indices + if prev_end and start > prev_end or not prev_end: + yield start, end, match + prev_end = end + + +def replace_named_groups(pattern): + r""" + Find named groups in `pattern` and replace them with the group name. E.g., + 1. ^(?P
\w+)/b/(\w+)$ ==> ^/b/(\w+)$ + 2. ^(?P\w+)/b/(?P\w+)/$ ==> ^/b//$ + 3. ^(?P\w+)/b/(\w+) ==> ^/b/(\w+) + 4. ^(?P\w+)/b/(?P\w+) ==> ^/b/ + """ + group_pattern_and_name = [ + (pattern[start:end], match[1]) + for start, end, match in _find_groups(pattern, _NAMED_GROUP_MATCHER) + ] + for group_pattern, group_name in group_pattern_and_name: + pattern = pattern.replace(group_pattern, group_name) + return pattern + + +def replace_unnamed_groups(pattern): + r""" + Find unnamed groups in `pattern` and replace them with ''. E.g., + 1. ^(?P\w+)/b/(\w+)$ ==> ^(?P\w+)/b/$ + 2. ^(?P\w+)/b/((x|y)\w+)$ ==> ^(?P\w+)/b/$ + 3. ^(?P\w+)/b/(\w+) ==> ^(?P\w+)/b/ + 4. ^(?P\w+)/b/((x|y)\w+) ==> ^(?P\w+)/b/ + """ + final_pattern, prev_end = "", None + for start, end, _ignored in _find_groups(pattern, _UNNAMED_GROUP_MATCHER): + if prev_end: + final_pattern += pattern[prev_end:start] + final_pattern += pattern[:start] + "" + prev_end = end + return final_pattern + pattern[prev_end:] + + +def remove_non_capturing_groups(pattern): + r""" + Find non-capturing groups in the given `pattern` and remove them, e.g. + 1. (?P\w+)/b/(?:\w+)c(?:\w+) => (?P\\w+)/b/c + 2. ^(?:\w+(?:\w+))a => ^a + 3. ^a(?:\w+)/b(?:\w+) => ^a/b + """ + group_start_end_indices = _find_groups(pattern, _NON_CAPTURING_GROUP_MATCHER) + final_pattern, prev_end = "", None + for start, end, _ignored in group_start_end_indices: + final_pattern += pattern[prev_end:start] + prev_end = end + return final_pattern + pattern[prev_end:] + + +def unescape_literals(pattern): + return _LITERAL_ESCAPE_RE.sub(r"\1", pattern) + + +def extract_views_from_urlpatterns(urlpatterns, base="", namespace=None): + """ + Return a list of views from a list of urlpatterns. + + Each object in the returned list is a 4-tuple: + (view_func, regex, namespace, name) + """ + views = [] + for p in urlpatterns: + if hasattr(p, "url_patterns"): + try: + patterns = p.url_patterns + except ImportError: + continue + views.extend( + extract_views_from_urlpatterns( + patterns, + base + str(p.pattern), + (namespace or []) + (p.namespace and [p.namespace] or []), + ) + ) + elif hasattr(p, "callback"): + try: + views.append((p.callback, base + str(p.pattern), namespace, p.name)) + except ViewDoesNotExist: + continue + else: + raise TypeError(_("%s does not appear to be a urlpattern object") % p) + return views + + +def simplify_regex(pattern): + r""" + Clean up urlpattern regexes into something more readable by humans. For + example, turn "^(?P\w+)/athletes/(?P\w+)/$" + into "//athletes//". + """ + pattern = remove_non_capturing_groups(pattern) + pattern = replace_named_groups(pattern) + pattern = replace_unnamed_groups(pattern) + pattern = replace_metacharacters(pattern) + pattern = unescape_literals(pattern) + if not pattern.startswith("/"): + pattern = "/" + pattern + return pattern diff --git a/django/utils/termcolors.py b/django/utils/termcolors.py index aeef02f1b0df..26df7b76d083 100644 --- a/django/utils/termcolors.py +++ b/django/utils/termcolors.py @@ -97,6 +97,9 @@ def make_style(opts=(), **kwargs): "HTTP_SERVER_ERROR": {}, "MIGRATE_HEADING": {}, "MIGRATE_LABEL": {}, + "COMMAND_HEADER": {}, + "COMMAND_DATA": {}, + "COMMAND_HIGHLIGHT": {}, }, DARK_PALETTE: { "ERROR": {"fg": "red", "opts": ("bold",)}, @@ -116,6 +119,9 @@ def make_style(opts=(), **kwargs): "HTTP_SERVER_ERROR": {"fg": "magenta", "opts": ("bold",)}, "MIGRATE_HEADING": {"fg": "cyan", "opts": ("bold",)}, "MIGRATE_LABEL": {"opts": ("bold",)}, + "COMMAND_HEADER": {"fg": "cyan", "opts": ("bold",)}, + "COMMAND_DATA": {"opts": ("bold",)}, + "COMMAND_HIGHLIGHT": {"fg": "yellow", "opts": ("bold",)}, }, LIGHT_PALETTE: { "ERROR": {"fg": "red", "opts": ("bold",)}, @@ -135,6 +141,9 @@ def make_style(opts=(), **kwargs): "HTTP_SERVER_ERROR": {"fg": "magenta", "opts": ("bold",)}, "MIGRATE_HEADING": {"fg": "cyan", "opts": ("bold",)}, "MIGRATE_LABEL": {"opts": ("bold",)}, + "COMMAND_HEADER": {"fg": "cyan", "opts": ("bold",)}, + "COMMAND_DATA": {"opts": ("bold",)}, + "COMMAND_HIGHLIGHT": {"fg": "yellow", "opts": ("bold",)}, }, } DEFAULT_PALETTE = DARK_PALETTE diff --git a/docs/ref/django-admin.txt b/docs/ref/django-admin.txt index adbd2465a719..fc8de971ec99 100644 --- a/docs/ref/django-admin.txt +++ b/docs/ref/django-admin.txt @@ -499,6 +499,31 @@ Only support for PostgreSQL is implemented. If this option is provided, models are also created for database views. +``listurls`` +------------ + +.. django-admin:: listurls + +.. versionadded:: 6.2 + +List URL patterns from the project's root :doc:`URLconf ` +with optional filtering by prefixes, inspired by ``show_urls`` from +``django-extensions``. + +.. django-admin-option:: --unsorted, -u + +Lists URLs in the original ordering from ``urlpatterns``. The default ordering +is alphabetical by route. + +.. django-admin-option:: --prefix, -p [prefix ...] + +Filters URLs by given prefixes. + +.. django-admin-option:: --format, -f {tabular,stacked,json} + +Specifies the output format. Available values are ``tabular``, ``stacked``, and +``json``. Default is ``tabular``. + ``loaddata`` ------------ diff --git a/docs/releases/6.2.txt b/docs/releases/6.2.txt index 3bafa4f583e0..f88beb6fa06a 100644 --- a/docs/releases/6.2.txt +++ b/docs/releases/6.2.txt @@ -173,7 +173,8 @@ Logging Management Commands ~~~~~~~~~~~~~~~~~~~ -* ... +* The new :djadmin:`listurls` command lists the URLs from the project's root + URLconf, including the view class or function (and name, if present). Migrations ~~~~~~~~~~ diff --git a/tests/admin_docs/test_views.py b/tests/admin_docs/test_views.py index bec555bd442f..7dee7ae98a1f 100644 --- a/tests/admin_docs/test_views.py +++ b/tests/admin_docs/test_views.py @@ -4,13 +4,13 @@ from django.conf import settings from django.contrib import admin from django.contrib.admindocs import utils, views -from django.contrib.admindocs.views import get_return_data_type, simplify_regex +from django.contrib.admindocs.views import get_return_data_type from django.contrib.auth.models import Permission, User from django.contrib.contenttypes.models import ContentType from django.contrib.sites.models import Site from django.db import models from django.db.models import fields -from django.test import SimpleTestCase, modify_settings, override_settings +from django.test import modify_settings, override_settings from django.test.utils import captured_stderr from django.urls import include, path, reverse from django.utils.functional import SimpleLazyObject @@ -627,114 +627,3 @@ def test_custom_fields(self): views.get_readable_field_data_type(DescriptionLackingField()), "Field of type: DescriptionLackingField", ) - - -class AdminDocViewFunctionsTests(SimpleTestCase): - def test_simplify_regex(self): - tests = ( - # Named and unnamed groups. - (r"^(?P\w+)/b/(?P\w+)/$", "//b//"), - (r"^(?P\w+)/b/(?P\w+)$", "//b/"), - (r"^(?P\w+)/b/(?P\w+)", "//b/"), - (r"^(?P\w+)/b/(\w+)$", "//b/"), - (r"^(?P\w+)/b/(\w+)", "//b/"), - (r"^(?P\w+)/b/((x|y)\w+)$", "//b/"), - (r"^(?P\w+)/b/((x|y)\w+)", "//b/"), - (r"^(?P(x|y))/b/(?P\w+)$", "//b/"), - (r"^(?P(x|y))/b/(?P\w+)", "//b/"), - (r"^(?P(x|y))/b/(?P\w+)ab", "//b/ab"), - (r"^(?P(x|y)(\(|\)))/b/(?P\w+)ab", "//b/ab"), - # Non-capturing groups. - (r"^a(?:\w+)b", "/ab"), - (r"^a(?:(x|y))", "/a"), - (r"^(?:\w+(?:\w+))a", "/a"), - (r"^a(?:\w+)/b(?:\w+)", "/a/b"), - (r"(?P\w+)/b/(?:\w+)c(?:\w+)", "//b/c"), - (r"(?P\w+)/b/(\w+)/(?:\w+)c(?:\w+)", "//b//c"), - # Single and repeated metacharacters. - (r"^a", "/a"), - (r"^^a", "/a"), - (r"^^^a", "/a"), - (r"a$", "/a"), - (r"a$$", "/a"), - (r"a$$$", "/a"), - (r"a?", "/a"), - (r"a??", "/a"), - (r"a???", "/a"), - (r"a*", "/a"), - (r"a**", "/a"), - (r"a***", "/a"), - (r"a+", "/a"), - (r"a++", "/a"), - (r"a+++", "/a"), - (r"\Aa", "/a"), - (r"\A\Aa", "/a"), - (r"\A\A\Aa", "/a"), - (r"a\Z", "/a"), - (r"a\Z\Z", "/a"), - (r"a\Z\Z\Z", "/a"), - (r"\ba", "/a"), - (r"\b\ba", "/a"), - (r"\b\b\ba", "/a"), - (r"a\B", "/a"), - (r"a\B\B", "/a"), - (r"a\B\B\B", "/a"), - # Multiple mixed metacharacters. - (r"^a/?$", "/a/"), - (r"\Aa\Z", "/a"), - (r"\ba\B", "/a"), - # Escaped single metacharacters. - (r"\^a", r"/^a"), - (r"\\^a", r"/\\a"), - (r"\\\^a", r"/\\^a"), - (r"\\\\^a", r"/\\\\a"), - (r"\\\\\^a", r"/\\\\^a"), - (r"a\$", r"/a$"), - (r"a\\$", r"/a\\"), - (r"a\\\$", r"/a\\$"), - (r"a\\\\$", r"/a\\\\"), - (r"a\\\\\$", r"/a\\\\$"), - (r"a\?", r"/a?"), - (r"a\\?", r"/a\\"), - (r"a\\\?", r"/a\\?"), - (r"a\\\\?", r"/a\\\\"), - (r"a\\\\\?", r"/a\\\\?"), - (r"a\*", r"/a*"), - (r"a\\*", r"/a\\"), - (r"a\\\*", r"/a\\*"), - (r"a\\\\*", r"/a\\\\"), - (r"a\\\\\*", r"/a\\\\*"), - (r"a\+", r"/a+"), - (r"a\\+", r"/a\\"), - (r"a\\\+", r"/a\\+"), - (r"a\\\\+", r"/a\\\\"), - (r"a\\\\\+", r"/a\\\\+"), - (r"\\Aa", r"/\Aa"), - (r"\\\Aa", r"/\\a"), - (r"\\\\Aa", r"/\\\Aa"), - (r"\\\\\Aa", r"/\\\\a"), - (r"\\\\\\Aa", r"/\\\\\Aa"), - (r"a\\Z", r"/a\Z"), - (r"a\\\Z", r"/a\\"), - (r"a\\\\Z", r"/a\\\Z"), - (r"a\\\\\Z", r"/a\\\\"), - (r"a\\\\\\Z", r"/a\\\\\Z"), - # Escaped mixed metacharacters. - (r"^a\?$", r"/a?"), - (r"^a\\?$", r"/a\\"), - (r"^a\\\?$", r"/a\\?"), - (r"^a\\\\?$", r"/a\\\\"), - (r"^a\\\\\?$", r"/a\\\\?"), - # Adjacent escaped metacharacters. - (r"^a\?\$", r"/a?$"), - (r"^a\\?\\$", r"/a\\\\"), - (r"^a\\\?\\\$", r"/a\\?\\$"), - (r"^a\\\\?\\\\$", r"/a\\\\\\\\"), - (r"^a\\\\\?\\\\\$", r"/a\\\\?\\\\$"), - # Complex examples with metacharacters and (un)named groups. - (r"^\b(?P\w+)\B/(\w+)?", "//"), - (r"^\A(?P\w+)\Z", "/"), - ) - for pattern, output in tests: - with self.subTest(pattern=pattern): - self.assertEqual(simplify_regex(pattern), output) diff --git a/tests/admin_scripts/app_with_urls/__init__.py b/tests/admin_scripts/app_with_urls/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/tests/admin_scripts/app_with_urls/root_urls.py b/tests/admin_scripts/app_with_urls/root_urls.py new file mode 100644 index 000000000000..df14128138b0 --- /dev/null +++ b/tests/admin_scripts/app_with_urls/root_urls.py @@ -0,0 +1,25 @@ +from django.urls import include, path, re_path + + +def dummy_view(request): ... + + +urlpatterns = [ + path( + route="nons/", + view=include("admin_scripts.app_with_urls.urls_nons"), + ), + path( + route="namespaced/", + view=include("admin_scripts.app_with_urls.urls_namespaced", namespace="ns"), + ), + path( + route="cbv/", + view=include("admin_scripts.app_with_urls.urls_cbv"), + ), + re_path( + r"^\.well-known/openid-configuration/?$", + dummy_view, + name="oidc-connect-discovery-info", + ), +] diff --git a/tests/admin_scripts/app_with_urls/urls_cbv.py b/tests/admin_scripts/app_with_urls/urls_cbv.py new file mode 100644 index 000000000000..ec4740f5b90a --- /dev/null +++ b/tests/admin_scripts/app_with_urls/urls_cbv.py @@ -0,0 +1,17 @@ +from django.urls import path + +from . import views + +app_name = "app_with_urls_cbv" + +urlpatterns = [ + path( + route="unnamed", + view=views.CBV.as_view(), + ), + path( + route="named", + view=views.CBV.as_view(), + name="named", + ), +] diff --git a/tests/admin_scripts/app_with_urls/urls_namespaced.py b/tests/admin_scripts/app_with_urls/urls_namespaced.py new file mode 100644 index 000000000000..a993271c7945 --- /dev/null +++ b/tests/admin_scripts/app_with_urls/urls_namespaced.py @@ -0,0 +1,17 @@ +from django.urls import path + +from . import views + +app_name = "app_with_urls" + +urlpatterns = [ + path( + route="unnamed", + view=views.view_func_namespaced_unnamed, + ), + path( + route="named", + view=views.view_func_namespaced_named, + name="named", + ), +] diff --git a/tests/admin_scripts/app_with_urls/urls_nons.py b/tests/admin_scripts/app_with_urls/urls_nons.py new file mode 100644 index 000000000000..e957d09fa272 --- /dev/null +++ b/tests/admin_scripts/app_with_urls/urls_nons.py @@ -0,0 +1,17 @@ +from django.urls import path + +from . import views + +app_name = "app_with_urls" + +urlpatterns = [ + path( + route="unnamed", + view=views.view_func_nons_unnamed, + ), + path( + route="named", + view=views.view_func_nons_named, + name="named", + ), +] diff --git a/tests/admin_scripts/app_with_urls/views.py b/tests/admin_scripts/app_with_urls/views.py new file mode 100644 index 000000000000..64035868d4d2 --- /dev/null +++ b/tests/admin_scripts/app_with_urls/views.py @@ -0,0 +1,21 @@ +from django.views.generic import ListView + + +def view_func_namespaced_unnamed(request): + pass + + +def view_func_namespaced_named(request): + pass + + +def view_func_nons_unnamed(request): + pass + + +def view_func_nons_named(request): + pass + + +class CBV(ListView): + pass diff --git a/tests/admin_scripts/tests.py b/tests/admin_scripts/tests.py index 914f54720ce5..819ba931d622 100644 --- a/tests/admin_scripts/tests.py +++ b/tests/admin_scripts/tests.py @@ -4,6 +4,7 @@ DJANGO_SETTINGS_MODULE and default settings.py files. """ +import json import os import re import shutil @@ -30,6 +31,7 @@ execute_from_command_line, ) from django.core.management.base import LabelCommand, SystemCheckError +from django.core.management.commands.listurls import Command as ListurlsCommand from django.core.management.commands.loaddata import Command as LoaddataCommand from django.core.management.commands.runserver import Command as RunserverCommand from django.core.management.commands.testserver import Command as TestserverCommand @@ -3313,6 +3315,293 @@ def test_pks_parsing(self): self.assertNoOutput(out) +@override_settings(ROOT_URLCONF="admin_scripts.app_with_urls.root_urls") +class Listurls(AdminScriptTestCase): + def test_default(self): + self.write_settings( + "settings.py", + apps=["admin_scripts.app_with_urls"], + ) + + args = ["listurls"] + out, err = self.run_manage(args) + + self.assertNoOutput(err) + + # Check route, view and (if defined) name for each URL. + self.assertOutput(out, "/namespaced/named") + self.assertOutput( + out, + "admin_scripts.app_with_urls.views.view_func_namespaced_named", + ) + self.assertOutput(out, "ns:named") + + self.assertOutput(out, "/namespaced/unnamed") + self.assertOutput( + out, + "admin_scripts.app_with_urls.views.view_func_namespaced_unnamed", + ) + + self.assertOutput(out, "/nons/named") + self.assertOutput(out, "admin_scripts.app_with_urls.views.view_func_nons_named") + self.assertOutput(out, "app_with_urls:named") + + self.assertOutput(out, "/nons/unnamed") + self.assertOutput( + out, + "admin_scripts.app_with_urls.views.view_func_nons_unnamed", + ) + + def test_urls_with_metachars(self): + self.write_settings( + "settings.py", + apps=["admin_scripts.app_with_urls"], + ) + + args = ["listurls", "--prefix", "/.well-known"] + out, err = self.run_manage(args) + + self.assertOutput(out, "/.well-known/openid-configuration/") + self.assertNoOutput(err) + + def test_cbv_formatting(self): + self.write_settings( + "settings.py", + apps=["admin_scripts.app_with_urls"], + ) + + args = ["listurls", "--prefix", "/cbv"] + out, err = self.run_manage(args) + + self.assertOutput(out, "/cbv/named") + self.assertOutput(out, "admin_scripts.app_with_urls.views.CBV") + self.assertOutput(out, "app_with_urls_cbv:named") + self.assertNoOutput(err) + + def test_tabular(self): + self.write_settings( + "settings.py", + apps=["admin_scripts.app_with_urls"], + ) + + args = ["listurls", "-f", "tabular"] + out, err = self.run_manage(args) + self.assertNoOutput(err) + + # Check route, view and (if defined) name for each URL. + self.assertOutput(out, "/namespaced/named") + self.assertOutput( + out, + "admin_scripts.app_with_urls.views.view_func_namespaced_named", + ) + self.assertOutput(out, "ns:named") + + self.assertOutput(out, "/namespaced/unnamed") + self.assertOutput( + out, + "admin_scripts.app_with_urls.views.view_func_namespaced_unnamed", + ) + + self.assertOutput(out, "/nons/named") + self.assertOutput(out, "admin_scripts.app_with_urls.views.view_func_nons_named") + self.assertOutput(out, "app_with_urls:named") + + self.assertOutput(out, "/nons/unnamed") + self.assertOutput( + out, + "admin_scripts.app_with_urls.views.view_func_nons_unnamed", + ) + + def test_stacked(self): + self.write_settings( + "settings.py", + apps=["admin_scripts.app_with_urls"], + ) + + args = ["listurls", "-f", "stacked"] + out, err = self.run_manage(args) + self.assertNoOutput(err) + + self.assertOutput(out, "Route:") + self.assertOutput(out, "View:") + self.assertOutput(out, "Name:") + self.assertOutput(out, "-" * 20) + + self.assertOutput(out, "/namespaced/named") + self.assertOutput( + out, + "admin_scripts.app_with_urls.views.view_func_namespaced_named", + ) + self.assertOutput(out, "ns:named") + + self.assertOutput(out, "/namespaced/unnamed") + self.assertOutput( + out, "admin_scripts.app_with_urls.views.view_func_namespaced_unnamed" + ) + + self.assertOutput(out, "/nons/named") + self.assertOutput(out, "app_with_urls:named") + self.assertOutput(out, "admin_scripts.app_with_urls.views.view_func_nons_named") + + self.assertOutput(out, "/nons/unnamed") + self.assertOutput( + out, + "admin_scripts.app_with_urls.views.view_func_nons_unnamed", + ) + + def test_json(self): + self.write_settings( + "settings.py", + apps=["admin_scripts.app_with_urls"], + ) + + args = ["listurls", "-f", "json"] + out, err = self.run_manage(args) + self.assertNoOutput(err) + + json.loads(out) + + self.assertOutput(out, '"route": "/namespaced/named"') + self.assertOutput( + out, + '"view": "admin_scripts.app_with_urls.views.view_func_namespaced_named"', + ) + self.assertOutput(out, '"name": "ns:named"') + + self.assertOutput(out, '"route": "/namespaced/unnamed"') + self.assertOutput( + out, + '"view": "admin_scripts.app_with_urls.views.view_func_namespaced_unnamed"', + ) + + self.assertOutput(out, '"route": "/nons/named"') + self.assertOutput(out, "admin_scripts.app_with_urls.views.view_func_nons_named") + self.assertOutput(out, "app_with_urls:named") + + self.assertOutput(out, "/nons/unnamed") + self.assertOutput( + out, + "admin_scripts.app_with_urls.views.view_func_nons_unnamed", + ) + + def test_unsorted(self): + self.write_settings( + "settings.py", + apps=["admin_scripts.app_with_urls"], + ) + + # JSON format is the easiest to parse and test. + args = ["listurls", "-f", "json", "--unsorted"] + out, err = self.run_manage(args) + url_patterns = json.loads(out) + + self.assertNotEqual( + url_patterns, + sorted(url_patterns, key=lambda u: u["route"]), + ) + + def test_tabular_with_color_enabled(self): + out = StringIO() + err = StringIO() + + with mock.patch( + "django.core.management.color.supports_color", lambda *args: True + ): + command = ListurlsCommand(stdout=out, stderr=err) + self.write_settings( + "settings.py", + apps=["admin_scripts.app_with_urls"], + ) + call_command(command, format="tabular") + + self.assertIn(command.style.COMMAND_DATA("/namespaced/named"), out.getvalue()) + self.assertIn( + command.style.COMMAND_HIGHLIGHT("view_func_namespaced_named"), + out.getvalue(), + ) + self.assertIn(command.style.COMMAND_HIGHLIGHT("named"), out.getvalue()) + + def test_tabular_with_color_suppressed(self): + out = StringIO() + err = StringIO() + + with mock.patch( + "django.core.management.color.supports_color", lambda *args: True + ): + command = ListurlsCommand(stdout=out, stderr=err) + call_command(command, format="tabular", no_color=True) + + self.assertIn("/namespaced/named", out.getvalue()) + + # There should be no escape codes in the output. + self.assertNotIn("\x1b", out.getvalue()) + + def test_stacked_with_color_enabled(self): + out = StringIO() + err = StringIO() + + with mock.patch( + "django.core.management.color.supports_color", lambda *args: True + ): + command = ListurlsCommand(stdout=out, stderr=err) + call_command(command, format="stacked") + + self.assertIn(command.style.COMMAND_DATA("/namespaced/named"), out.getvalue()) + self.assertIn( + command.style.COMMAND_HIGHLIGHT("view_func_namespaced_named"), + out.getvalue(), + ) + self.assertIn(command.style.COMMAND_HIGHLIGHT("named"), out.getvalue()) + for header in ["Route", "View", "Name"]: + with self.subTest(header=header): + self.assertIn( + command.style.COMMAND_HEADER(f"{header}: "), out.getvalue() + ) + + def test_stacked_with_color_suppressed(self): + out = StringIO() + err = StringIO() + + with mock.patch( + "django.core.management.color.supports_color", lambda *args: True + ): + command = ListurlsCommand(stdout=out, stderr=err) + call_command(command, format="stacked", no_color=True) + + self.assertIn("/namespaced/named", out.getvalue()) + + # There should be no escape codes in the output. + self.assertNotIn("\x1b", out.getvalue()) + + @override_settings(ROOT_URLCONF="urls") + def test_no_urls(self): + self.write_settings("settings.py") + + args = ["listurls"] + out, err = self.run_manage(args) + + self.assertOutput(err, "There are no URL patterns that match given prefixes") + self.assertNoOutput(out) + + def test_prefixes(self): + self.write_settings( + "settings.py", + apps=["admin_scripts.app_with_urls"], + ) + + args = ["listurls", "-p", "/namespaced"] + out, err = self.run_manage(args) + self.assertNoOutput(err) + + self.assertOutput(out, "/namespaced/named") + self.assertOutput(out, "ns:named") + self.assertOutput(out, "/namespaced/unnamed") + + self.assertNotInOutput(out, "/nons/named") + self.assertNotInOutput(out, "app_with_urls:named") + self.assertNotInOutput(out, "/nons/unnamed") + + class MainModule(AdminScriptTestCase): """python -m django works like django-admin.""" diff --git a/tests/urlpatterns/tests.py b/tests/urlpatterns/tests.py index 8636ef15f9b5..32657e58d44d 100644 --- a/tests/urlpatterns/tests.py +++ b/tests/urlpatterns/tests.py @@ -14,6 +14,7 @@ reverse, ) from django.urls.converters import REGISTERED_CONVERTERS, IntConverter +from django.urls.utils import simplify_regex from django.views import View from .converters import Base64Converter, DynamicConverter @@ -436,3 +437,120 @@ def raises_type_error(value): with self.assertRaisesMessage(TypeError, "This type error propagates."): reverse("dynamic", kwargs={"value": object()}) + + +class SimplifyRegexTests(SimpleTestCase): + def test_simplify_regex(self): + tests = ( + # Named and unnamed groups. + (r"^(?P\w+)/b/(?P\w+)/$", "//b//"), + (r"^(?P\w+)/b/(?P\w+)$", "//b/"), + (r"^(?P\w+)/b/(?P\w+)", "//b/"), + (r"^(?P\w+)/b/(\w+)$", "//b/"), + (r"^(?P\w+)/b/(\w+)", "//b/"), + (r"^(?P\w+)/b/((x|y)\w+)$", "//b/"), + (r"^(?P\w+)/b/((x|y)\w+)", "//b/"), + (r"^(?P(x|y))/b/(?P\w+)$", "//b/"), + (r"^(?P(x|y))/b/(?P\w+)", "//b/"), + (r"^(?P(x|y))/b/(?P\w+)ab", "//b/ab"), + (r"^(?P(x|y)(\(|\)))/b/(?P\w+)ab", "//b/ab"), + # Non-capturing groups. + (r"^a(?:\w+)b", "/ab"), + (r"^a(?:(x|y))", "/a"), + (r"^(?:\w+(?:\w+))a", "/a"), + (r"^a(?:\w+)/b(?:\w+)", "/a/b"), + (r"(?P\w+)/b/(?:\w+)c(?:\w+)", "//b/c"), + (r"(?P\w+)/b/(\w+)/(?:\w+)c(?:\w+)", "//b//c"), + # Single and repeated metacharacters. + (r"^a", "/a"), + (r"^^a", "/a"), + (r"^^^a", "/a"), + (r"a$", "/a"), + (r"a$$", "/a"), + (r"a$$$", "/a"), + (r"a?", "/a"), + (r"a??", "/a"), + (r"a???", "/a"), + (r"a*", "/a"), + (r"a**", "/a"), + (r"a***", "/a"), + (r"a+", "/a"), + (r"a++", "/a"), + (r"a+++", "/a"), + (r"\Aa", "/a"), + (r"\A\Aa", "/a"), + (r"\A\A\Aa", "/a"), + (r"a\Z", "/a"), + (r"a\Z\Z", "/a"), + (r"a\Z\Z\Z", "/a"), + (r"\ba", "/a"), + (r"\b\ba", "/a"), + (r"\b\b\ba", "/a"), + (r"a\B", "/a"), + (r"a\B\B", "/a"), + (r"a\B\B\B", "/a"), + # Multiple mixed metacharacters. + (r"^a/?$", "/a/"), + (r"\Aa\Z", "/a"), + (r"\ba\B", "/a"), + # Escaped single metacharacters. + (r"\^a", r"/^a"), + (r"\\^a", r"/\\a"), + (r"\\\^a", r"/\\^a"), + (r"\\\\^a", r"/\\\\a"), + (r"\\\\\^a", r"/\\\\^a"), + (r"a\$", r"/a$"), + (r"a\\$", r"/a\\"), + (r"a\\\$", r"/a\\$"), + (r"a\\\\$", r"/a\\\\"), + (r"a\\\\\$", r"/a\\\\$"), + (r"a\?", r"/a?"), + (r"a\\?", r"/a\\"), + (r"a\\\?", r"/a\\?"), + (r"a\\\\?", r"/a\\\\"), + (r"a\\\\\?", r"/a\\\\?"), + (r"a\*", r"/a*"), + (r"a\\*", r"/a\\"), + (r"a\\\*", r"/a\\*"), + (r"a\\\\*", r"/a\\\\"), + (r"a\\\\\*", r"/a\\\\*"), + (r"a\+", r"/a+"), + (r"a\\+", r"/a\\"), + (r"a\\\+", r"/a\\+"), + (r"a\\\\+", r"/a\\\\"), + (r"a\\\\\+", r"/a\\\\+"), + (r"\\Aa", r"/\Aa"), + (r"\\\Aa", r"/\\a"), + (r"\\\\Aa", r"/\\\Aa"), + (r"\\\\\Aa", r"/\\\\a"), + (r"\\\\\\Aa", r"/\\\\\Aa"), + (r"a\\Z", r"/a\Z"), + (r"a\\\Z", r"/a\\"), + (r"a\\\\Z", r"/a\\\Z"), + (r"a\\\\\Z", r"/a\\\\"), + (r"a\\\\\\Z", r"/a\\\\\Z"), + # Escaped mixed metacharacters. + (r"^a\?$", r"/a?"), + (r"^a\\?$", r"/a\\"), + (r"^a\\\?$", r"/a\\?"), + (r"^a\\\\?$", r"/a\\\\"), + (r"^a\\\\\?$", r"/a\\\\?"), + # Adjacent escaped metacharacters. + (r"^a\?\$", r"/a?$"), + (r"^a\\?\\$", r"/a\\\\"), + (r"^a\\\?\\\$", r"/a\\?\\$"), + (r"^a\\\\?\\\\$", r"/a\\\\\\\\"), + (r"^a\\\\\?\\\\\$", r"/a\\\\?\\\\$"), + # Complex examples with metacharacters and (un)named groups. + (r"^\b(?P\w+)\B/(\w+)?", "//"), + (r"^\A(?P\w+)\Z", "/"), + # Single escaped literals. + (r"\/well-known", "/well-known"), + (r"\.well-known", "/.well-known"), + (r"\-well-known", "/-well-known"), + (r"\_well-known", "/_well-known"), + (r"\(well-known\)", "/(well-known)"), + ) + for pattern, output in tests: + with self.subTest(pattern=pattern): + self.assertEqual(simplify_regex(pattern), output)