From 150e4bcf24225aa2dfaab9dcfa04bc8b83414c5d Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Mon, 17 Nov 2025 16:19:29 +0300 Subject: [PATCH 1/3] Features: 1) No new features added. Fixes: 1) Fixed Hebrew translation line breaks and spacing inconsistencies; 2) Corrected punctuation and formatting in user reset password email template; 3) Fixed line breaks in model docstring for proper formatting. Extra: 1) Updated POT-Creation-Date to reflect latest commit; 2) Minor whitespace and punctuation fixes across multiple translation strings. --- .../blog/locale/ar_AR/LC_MESSAGES/django.po | 2 +- .../blog/locale/cs_CZ/LC_MESSAGES/django.po | 2 +- .../blog/locale/da_DK/LC_MESSAGES/django.po | 2 +- .../blog/locale/de_DE/LC_MESSAGES/django.po | 2 +- .../blog/locale/en_GB/LC_MESSAGES/django.po | 2 +- .../blog/locale/en_US/LC_MESSAGES/django.po | 2 +- .../blog/locale/es_ES/LC_MESSAGES/django.po | 2 +- .../blog/locale/fa_IR/LC_MESSAGES/django.po | 2 +- .../blog/locale/fr_FR/LC_MESSAGES/django.po | 2 +- .../blog/locale/he_IL/LC_MESSAGES/django.po | 2 +- .../blog/locale/hi_IN/LC_MESSAGES/django.po | 2 +- .../blog/locale/hr_HR/LC_MESSAGES/django.po | 2 +- .../blog/locale/id_ID/LC_MESSAGES/django.po | 2 +- .../blog/locale/it_IT/LC_MESSAGES/django.po | 2 +- .../blog/locale/ja_JP/LC_MESSAGES/django.po | 2 +- .../blog/locale/kk_KZ/LC_MESSAGES/django.po | 2 +- .../blog/locale/ko_KR/LC_MESSAGES/django.po | 2 +- .../blog/locale/nl_NL/LC_MESSAGES/django.po | 2 +- .../blog/locale/no_NO/LC_MESSAGES/django.po | 2 +- .../blog/locale/pl_PL/LC_MESSAGES/django.po | 2 +- .../blog/locale/pt_BR/LC_MESSAGES/django.po | 2 +- .../blog/locale/ro_RO/LC_MESSAGES/django.po | 2 +- .../blog/locale/ru_RU/LC_MESSAGES/django.po | 2 +- .../blog/locale/sv_SE/LC_MESSAGES/django.po | 2 +- .../blog/locale/th_TH/LC_MESSAGES/django.po | 2 +- .../blog/locale/tr_TR/LC_MESSAGES/django.po | 2 +- .../blog/locale/vi_VN/LC_MESSAGES/django.po | 2 +- .../blog/locale/zh_Hans/LC_MESSAGES/django.po | 2 +- .../core/locale/ar_AR/LC_MESSAGES/django.mo | Bin 106864 -> 107271 bytes .../core/locale/ar_AR/LC_MESSAGES/django.po | 114 ++++++++++------- .../core/locale/cs_CZ/LC_MESSAGES/django.mo | Bin 91414 -> 91746 bytes .../core/locale/cs_CZ/LC_MESSAGES/django.po | 114 ++++++++++------- .../core/locale/da_DK/LC_MESSAGES/django.mo | Bin 89225 -> 89574 bytes .../core/locale/da_DK/LC_MESSAGES/django.po | 114 ++++++++++------- .../core/locale/de_DE/LC_MESSAGES/django.mo | Bin 94481 -> 94818 bytes .../core/locale/de_DE/LC_MESSAGES/django.po | 114 ++++++++++------- .../core/locale/en_GB/LC_MESSAGES/django.mo | Bin 85992 -> 86304 bytes .../core/locale/en_GB/LC_MESSAGES/django.po | 114 ++++++++++------- .../core/locale/en_US/LC_MESSAGES/django.mo | Bin 85983 -> 86295 bytes .../core/locale/en_US/LC_MESSAGES/django.po | 114 ++++++++++------- .../core/locale/es_ES/LC_MESSAGES/django.mo | Bin 92455 -> 92778 bytes .../core/locale/es_ES/LC_MESSAGES/django.po | 114 ++++++++++------- .../core/locale/fa_IR/LC_MESSAGES/django.po | 112 +++++++++++------ .../core/locale/fr_FR/LC_MESSAGES/django.mo | Bin 95266 -> 95599 bytes .../core/locale/fr_FR/LC_MESSAGES/django.po | 114 ++++++++++------- .../core/locale/he_IL/LC_MESSAGES/django.mo | Bin 99460 -> 99821 bytes .../core/locale/he_IL/LC_MESSAGES/django.po | 114 ++++++++++------- .../core/locale/hi_IN/LC_MESSAGES/django.po | 112 +++++++++++------ .../core/locale/hr_HR/LC_MESSAGES/django.po | 112 +++++++++++------ .../core/locale/id_ID/LC_MESSAGES/django.mo | Bin 89443 -> 89768 bytes .../core/locale/id_ID/LC_MESSAGES/django.po | 114 ++++++++++------- .../core/locale/it_IT/LC_MESSAGES/django.mo | Bin 92765 -> 93093 bytes .../core/locale/it_IT/LC_MESSAGES/django.po | 114 ++++++++++------- .../core/locale/ja_JP/LC_MESSAGES/django.mo | Bin 98103 -> 98417 bytes .../core/locale/ja_JP/LC_MESSAGES/django.po | 114 ++++++++++------- .../core/locale/kk_KZ/LC_MESSAGES/django.po | 112 +++++++++++------ .../core/locale/ko_KR/LC_MESSAGES/django.mo | Bin 92664 -> 92973 bytes .../core/locale/ko_KR/LC_MESSAGES/django.po | 114 ++++++++++------- .../core/locale/nl_NL/LC_MESSAGES/django.mo | Bin 92298 -> 92631 bytes .../core/locale/nl_NL/LC_MESSAGES/django.po | 114 ++++++++++------- .../core/locale/no_NO/LC_MESSAGES/django.mo | Bin 89870 -> 90229 bytes .../core/locale/no_NO/LC_MESSAGES/django.po | 114 ++++++++++------- .../core/locale/pl_PL/LC_MESSAGES/django.mo | Bin 91559 -> 91904 bytes .../core/locale/pl_PL/LC_MESSAGES/django.po | 114 ++++++++++------- .../core/locale/pt_BR/LC_MESSAGES/django.mo | Bin 92204 -> 92529 bytes .../core/locale/pt_BR/LC_MESSAGES/django.po | 114 ++++++++++------- .../core/locale/ro_RO/LC_MESSAGES/django.mo | Bin 94041 -> 94381 bytes .../core/locale/ro_RO/LC_MESSAGES/django.po | 114 ++++++++++------- .../core/locale/ru_RU/LC_MESSAGES/django.mo | Bin 121786 -> 122185 bytes .../core/locale/ru_RU/LC_MESSAGES/django.po | 116 +++++++++++------- .../core/locale/sv_SE/LC_MESSAGES/django.mo | Bin 89933 -> 90283 bytes .../core/locale/sv_SE/LC_MESSAGES/django.po | 114 ++++++++++------- .../core/locale/th_TH/LC_MESSAGES/django.mo | Bin 145597 -> 146005 bytes .../core/locale/th_TH/LC_MESSAGES/django.po | 114 ++++++++++------- .../core/locale/tr_TR/LC_MESSAGES/django.mo | Bin 92291 -> 92616 bytes .../core/locale/tr_TR/LC_MESSAGES/django.po | 114 ++++++++++------- .../core/locale/vi_VN/LC_MESSAGES/django.mo | Bin 103839 -> 104172 bytes .../core/locale/vi_VN/LC_MESSAGES/django.po | 114 ++++++++++------- .../core/locale/zh_Hans/LC_MESSAGES/django.mo | Bin 81012 -> 81321 bytes .../core/locale/zh_Hans/LC_MESSAGES/django.po | 114 ++++++++++------- engine/core/templates/admin/index.html | 78 ++++++++++-- .../locale/ar_AR/LC_MESSAGES/django.po | 22 +++- .../locale/cs_CZ/LC_MESSAGES/django.po | 23 +++- .../locale/da_DK/LC_MESSAGES/django.po | 30 +++-- .../locale/de_DE/LC_MESSAGES/django.po | 36 ++++-- .../locale/en_GB/LC_MESSAGES/django.po | 24 +++- .../locale/en_US/LC_MESSAGES/django.po | 24 +++- .../locale/es_ES/LC_MESSAGES/django.po | 35 ++++-- .../locale/fa_IR/LC_MESSAGES/django.po | 2 +- .../locale/fr_FR/LC_MESSAGES/django.po | 37 ++++-- .../locale/he_IL/LC_MESSAGES/django.po | 24 ++-- .../locale/hi_IN/LC_MESSAGES/django.po | 2 +- .../locale/hr_HR/LC_MESSAGES/django.po | 2 +- .../locale/id_ID/LC_MESSAGES/django.po | 31 +++-- .../locale/it_IT/LC_MESSAGES/django.po | 34 +++-- .../locale/ja_JP/LC_MESSAGES/django.po | 31 +++-- .../locale/kk_KZ/LC_MESSAGES/django.po | 2 +- .../locale/ko_KR/LC_MESSAGES/django.po | 31 +++-- .../locale/nl_NL/LC_MESSAGES/django.po | 27 ++-- .../locale/no_NO/LC_MESSAGES/django.po | 32 +++-- .../locale/pl_PL/LC_MESSAGES/django.po | 32 +++-- .../locale/pt_BR/LC_MESSAGES/django.po | 28 +++-- .../locale/ro_RO/LC_MESSAGES/django.po | 28 +++-- .../locale/ru_RU/LC_MESSAGES/django.po | 34 +++-- .../locale/sv_SE/LC_MESSAGES/django.po | 28 +++-- .../locale/th_TH/LC_MESSAGES/django.po | 30 +++-- .../locale/tr_TR/LC_MESSAGES/django.po | 27 ++-- .../locale/vi_VN/LC_MESSAGES/django.po | 22 ++-- .../locale/zh_Hans/LC_MESSAGES/django.po | 26 ++-- .../locale/ar_AR/LC_MESSAGES/django.po | 64 +++++----- .../locale/cs_CZ/LC_MESSAGES/django.po | 63 +++++----- .../locale/da_DK/LC_MESSAGES/django.po | 57 +++++---- .../locale/de_DE/LC_MESSAGES/django.po | 83 +++++++------ .../locale/en_GB/LC_MESSAGES/django.po | 63 +++++----- .../locale/en_US/LC_MESSAGES/django.po | 63 +++++----- .../locale/es_ES/LC_MESSAGES/django.po | 58 +++++---- .../locale/fa_IR/LC_MESSAGES/django.po | 2 +- .../locale/fr_FR/LC_MESSAGES/django.po | 65 +++++----- .../locale/he_IL/LC_MESSAGES/django.po | 52 ++++---- .../locale/hi_IN/LC_MESSAGES/django.po | 2 +- .../locale/hr_HR/LC_MESSAGES/django.po | 2 +- .../locale/id_ID/LC_MESSAGES/django.po | 57 +++++---- .../locale/it_IT/LC_MESSAGES/django.po | 68 +++++----- .../locale/ja_JP/LC_MESSAGES/django.po | 102 +++++++++------ .../locale/kk_KZ/LC_MESSAGES/django.po | 2 +- .../locale/ko_KR/LC_MESSAGES/django.po | 98 +++++++++------ .../locale/nl_NL/LC_MESSAGES/django.po | 62 +++++----- .../locale/no_NO/LC_MESSAGES/django.po | 70 ++++++----- .../locale/pl_PL/LC_MESSAGES/django.po | 61 ++++----- .../locale/pt_BR/LC_MESSAGES/django.po | 62 +++++----- .../locale/ro_RO/LC_MESSAGES/django.po | 60 +++++---- .../locale/ru_RU/LC_MESSAGES/django.po | 80 ++++++------ .../locale/sv_SE/LC_MESSAGES/django.po | 64 +++++----- .../locale/th_TH/LC_MESSAGES/django.po | 103 +++++++--------- .../locale/tr_TR/LC_MESSAGES/django.po | 60 ++++----- .../locale/vi_VN/LC_MESSAGES/django.po | 82 +++++++------ .../locale/zh_Hans/LC_MESSAGES/django.po | 66 ++++++---- evibes/locale/ar_AR/LC_MESSAGES/django.mo | Bin 10151 -> 10342 bytes evibes/locale/ar_AR/LC_MESSAGES/django.po | 82 +++++++------ evibes/locale/cs_CZ/LC_MESSAGES/django.mo | Bin 8723 -> 8879 bytes evibes/locale/cs_CZ/LC_MESSAGES/django.po | 82 +++++++------ evibes/locale/da_DK/LC_MESSAGES/django.mo | Bin 8438 -> 8589 bytes evibes/locale/da_DK/LC_MESSAGES/django.po | 82 +++++++------ evibes/locale/de_DE/LC_MESSAGES/django.mo | Bin 8879 -> 9047 bytes evibes/locale/de_DE/LC_MESSAGES/django.po | 84 +++++++------ evibes/locale/en_GB/LC_MESSAGES/django.mo | Bin 8291 -> 8443 bytes evibes/locale/en_GB/LC_MESSAGES/django.po | 82 +++++++------ evibes/locale/en_US/LC_MESSAGES/django.mo | Bin 8295 -> 8447 bytes evibes/locale/en_US/LC_MESSAGES/django.po | 82 +++++++------ evibes/locale/es_ES/LC_MESSAGES/django.mo | Bin 8898 -> 9064 bytes evibes/locale/es_ES/LC_MESSAGES/django.po | 84 +++++++------ evibes/locale/fa_IR/LC_MESSAGES/django.po | 84 +++++++------ evibes/locale/fr_FR/LC_MESSAGES/django.mo | Bin 9181 -> 9341 bytes evibes/locale/fr_FR/LC_MESSAGES/django.po | 83 +++++++------ evibes/locale/he_IL/LC_MESSAGES/django.mo | Bin 9542 -> 9712 bytes evibes/locale/he_IL/LC_MESSAGES/django.po | 82 +++++++------ evibes/locale/hi_IN/LC_MESSAGES/django.po | 84 +++++++------ evibes/locale/hr_HR/LC_MESSAGES/django.po | 84 +++++++------ evibes/locale/id_ID/LC_MESSAGES/django.mo | Bin 8470 -> 8618 bytes evibes/locale/id_ID/LC_MESSAGES/django.po | 82 +++++++------ evibes/locale/it_IT/LC_MESSAGES/django.mo | Bin 8844 -> 9001 bytes evibes/locale/it_IT/LC_MESSAGES/django.po | 83 +++++++------ evibes/locale/ja_JP/LC_MESSAGES/django.mo | Bin 9211 -> 9380 bytes evibes/locale/ja_JP/LC_MESSAGES/django.po | 82 +++++++------ evibes/locale/kk_KZ/LC_MESSAGES/django.po | 84 +++++++------ evibes/locale/ko_KR/LC_MESSAGES/django.mo | Bin 8647 -> 8812 bytes evibes/locale/ko_KR/LC_MESSAGES/django.po | 82 +++++++------ evibes/locale/nl_NL/LC_MESSAGES/django.mo | Bin 8553 -> 8720 bytes evibes/locale/nl_NL/LC_MESSAGES/django.po | 84 +++++++------ evibes/locale/no_NO/LC_MESSAGES/django.mo | Bin 8492 -> 8640 bytes evibes/locale/no_NO/LC_MESSAGES/django.po | 82 +++++++------ evibes/locale/pl_PL/LC_MESSAGES/django.mo | Bin 8786 -> 8944 bytes evibes/locale/pl_PL/LC_MESSAGES/django.po | 82 +++++++------ evibes/locale/pt_BR/LC_MESSAGES/django.mo | Bin 8870 -> 9030 bytes evibes/locale/pt_BR/LC_MESSAGES/django.po | 83 +++++++------ evibes/locale/ro_RO/LC_MESSAGES/django.mo | Bin 8914 -> 9078 bytes evibes/locale/ro_RO/LC_MESSAGES/django.po | 83 +++++++------ evibes/locale/ru_RU/LC_MESSAGES/django.mo | Bin 11247 -> 11437 bytes evibes/locale/ru_RU/LC_MESSAGES/django.po | 82 +++++++------ evibes/locale/sv_SE/LC_MESSAGES/django.mo | Bin 8575 -> 8732 bytes evibes/locale/sv_SE/LC_MESSAGES/django.po | 82 +++++++------ evibes/locale/th_TH/LC_MESSAGES/django.mo | Bin 13020 -> 13246 bytes evibes/locale/th_TH/LC_MESSAGES/django.po | 82 +++++++------ evibes/locale/tr_TR/LC_MESSAGES/django.mo | Bin 8911 -> 9071 bytes evibes/locale/tr_TR/LC_MESSAGES/django.po | 82 +++++++------ evibes/locale/vi_VN/LC_MESSAGES/django.mo | Bin 9441 -> 9614 bytes evibes/locale/vi_VN/LC_MESSAGES/django.po | 82 +++++++------ evibes/locale/zh_Hans/LC_MESSAGES/django.mo | Bin 8027 -> 8157 bytes evibes/locale/zh_Hans/LC_MESSAGES/django.po | 82 +++++++------ 189 files changed, 4769 insertions(+), 3240 deletions(-) diff --git a/engine/blog/locale/ar_AR/LC_MESSAGES/django.po b/engine/blog/locale/ar_AR/LC_MESSAGES/django.po index f4d65ae0..e2b5bc92 100644 --- a/engine/blog/locale/ar_AR/LC_MESSAGES/django.po +++ b/engine/blog/locale/ar_AR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/cs_CZ/LC_MESSAGES/django.po b/engine/blog/locale/cs_CZ/LC_MESSAGES/django.po index 95ffc073..931e9fe3 100644 --- a/engine/blog/locale/cs_CZ/LC_MESSAGES/django.po +++ b/engine/blog/locale/cs_CZ/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/da_DK/LC_MESSAGES/django.po b/engine/blog/locale/da_DK/LC_MESSAGES/django.po index c5e9efc9..60a9bbb4 100644 --- a/engine/blog/locale/da_DK/LC_MESSAGES/django.po +++ b/engine/blog/locale/da_DK/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/de_DE/LC_MESSAGES/django.po b/engine/blog/locale/de_DE/LC_MESSAGES/django.po index 82ed0ede..e9226487 100644 --- a/engine/blog/locale/de_DE/LC_MESSAGES/django.po +++ b/engine/blog/locale/de_DE/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/en_GB/LC_MESSAGES/django.po b/engine/blog/locale/en_GB/LC_MESSAGES/django.po index 8e7bc7b2..9136fd88 100644 --- a/engine/blog/locale/en_GB/LC_MESSAGES/django.po +++ b/engine/blog/locale/en_GB/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/en_US/LC_MESSAGES/django.po b/engine/blog/locale/en_US/LC_MESSAGES/django.po index 1fed25ce..5a5948ec 100644 --- a/engine/blog/locale/en_US/LC_MESSAGES/django.po +++ b/engine/blog/locale/en_US/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/es_ES/LC_MESSAGES/django.po b/engine/blog/locale/es_ES/LC_MESSAGES/django.po index 0c45e72e..2f8d4a34 100644 --- a/engine/blog/locale/es_ES/LC_MESSAGES/django.po +++ b/engine/blog/locale/es_ES/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/fa_IR/LC_MESSAGES/django.po b/engine/blog/locale/fa_IR/LC_MESSAGES/django.po index 45be4ead..13a479a8 100644 --- a/engine/blog/locale/fa_IR/LC_MESSAGES/django.po +++ b/engine/blog/locale/fa_IR/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/fr_FR/LC_MESSAGES/django.po b/engine/blog/locale/fr_FR/LC_MESSAGES/django.po index 6c238324..92f2afbc 100644 --- a/engine/blog/locale/fr_FR/LC_MESSAGES/django.po +++ b/engine/blog/locale/fr_FR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/he_IL/LC_MESSAGES/django.po b/engine/blog/locale/he_IL/LC_MESSAGES/django.po index 5228051c..949ec0aa 100644 --- a/engine/blog/locale/he_IL/LC_MESSAGES/django.po +++ b/engine/blog/locale/he_IL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/hi_IN/LC_MESSAGES/django.po b/engine/blog/locale/hi_IN/LC_MESSAGES/django.po index a64cad3e..ce840d84 100644 --- a/engine/blog/locale/hi_IN/LC_MESSAGES/django.po +++ b/engine/blog/locale/hi_IN/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/hr_HR/LC_MESSAGES/django.po b/engine/blog/locale/hr_HR/LC_MESSAGES/django.po index 45be4ead..13a479a8 100644 --- a/engine/blog/locale/hr_HR/LC_MESSAGES/django.po +++ b/engine/blog/locale/hr_HR/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/id_ID/LC_MESSAGES/django.po b/engine/blog/locale/id_ID/LC_MESSAGES/django.po index 6ebddfa3..20501425 100644 --- a/engine/blog/locale/id_ID/LC_MESSAGES/django.po +++ b/engine/blog/locale/id_ID/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/it_IT/LC_MESSAGES/django.po b/engine/blog/locale/it_IT/LC_MESSAGES/django.po index 9857fb3c..b028a850 100644 --- a/engine/blog/locale/it_IT/LC_MESSAGES/django.po +++ b/engine/blog/locale/it_IT/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/ja_JP/LC_MESSAGES/django.po b/engine/blog/locale/ja_JP/LC_MESSAGES/django.po index 4fbf85f6..2d4ee6fc 100644 --- a/engine/blog/locale/ja_JP/LC_MESSAGES/django.po +++ b/engine/blog/locale/ja_JP/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/kk_KZ/LC_MESSAGES/django.po b/engine/blog/locale/kk_KZ/LC_MESSAGES/django.po index a64cad3e..ce840d84 100644 --- a/engine/blog/locale/kk_KZ/LC_MESSAGES/django.po +++ b/engine/blog/locale/kk_KZ/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/ko_KR/LC_MESSAGES/django.po b/engine/blog/locale/ko_KR/LC_MESSAGES/django.po index be11eaae..4e35067e 100644 --- a/engine/blog/locale/ko_KR/LC_MESSAGES/django.po +++ b/engine/blog/locale/ko_KR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/nl_NL/LC_MESSAGES/django.po b/engine/blog/locale/nl_NL/LC_MESSAGES/django.po index cbffe107..46306ef7 100644 --- a/engine/blog/locale/nl_NL/LC_MESSAGES/django.po +++ b/engine/blog/locale/nl_NL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/no_NO/LC_MESSAGES/django.po b/engine/blog/locale/no_NO/LC_MESSAGES/django.po index cefd52b4..ad26b744 100644 --- a/engine/blog/locale/no_NO/LC_MESSAGES/django.po +++ b/engine/blog/locale/no_NO/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/pl_PL/LC_MESSAGES/django.po b/engine/blog/locale/pl_PL/LC_MESSAGES/django.po index 118f51aa..35924ad5 100644 --- a/engine/blog/locale/pl_PL/LC_MESSAGES/django.po +++ b/engine/blog/locale/pl_PL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/pt_BR/LC_MESSAGES/django.po b/engine/blog/locale/pt_BR/LC_MESSAGES/django.po index eb54d774..238fc2c7 100644 --- a/engine/blog/locale/pt_BR/LC_MESSAGES/django.po +++ b/engine/blog/locale/pt_BR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/ro_RO/LC_MESSAGES/django.po b/engine/blog/locale/ro_RO/LC_MESSAGES/django.po index 5e23936e..69c6d7b1 100644 --- a/engine/blog/locale/ro_RO/LC_MESSAGES/django.po +++ b/engine/blog/locale/ro_RO/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/ru_RU/LC_MESSAGES/django.po b/engine/blog/locale/ru_RU/LC_MESSAGES/django.po index f5b95f91..fbb1e426 100644 --- a/engine/blog/locale/ru_RU/LC_MESSAGES/django.po +++ b/engine/blog/locale/ru_RU/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/sv_SE/LC_MESSAGES/django.po b/engine/blog/locale/sv_SE/LC_MESSAGES/django.po index 08867e69..c5500b8c 100644 --- a/engine/blog/locale/sv_SE/LC_MESSAGES/django.po +++ b/engine/blog/locale/sv_SE/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/th_TH/LC_MESSAGES/django.po b/engine/blog/locale/th_TH/LC_MESSAGES/django.po index 500fd5a7..4ae7d235 100644 --- a/engine/blog/locale/th_TH/LC_MESSAGES/django.po +++ b/engine/blog/locale/th_TH/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/tr_TR/LC_MESSAGES/django.po b/engine/blog/locale/tr_TR/LC_MESSAGES/django.po index 576e79fd..fd82b5b4 100644 --- a/engine/blog/locale/tr_TR/LC_MESSAGES/django.po +++ b/engine/blog/locale/tr_TR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/vi_VN/LC_MESSAGES/django.po b/engine/blog/locale/vi_VN/LC_MESSAGES/django.po index 2d3210da..9de0c5a7 100644 --- a/engine/blog/locale/vi_VN/LC_MESSAGES/django.po +++ b/engine/blog/locale/vi_VN/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/blog/locale/zh_Hans/LC_MESSAGES/django.po b/engine/blog/locale/zh_Hans/LC_MESSAGES/django.po index 1d282a20..a0547f14 100644 --- a/engine/blog/locale/zh_Hans/LC_MESSAGES/django.po +++ b/engine/blog/locale/zh_Hans/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/core/locale/ar_AR/LC_MESSAGES/django.mo b/engine/core/locale/ar_AR/LC_MESSAGES/django.mo index 7129ab1043ee907cf4a3021de47acd6325c19a8c..42ec11882cf34618767a3be6e233d710f85ca218 100644 GIT binary patch delta 14683 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 O=JYoY#Fh7yo%}zcZE|M- delta 14326 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\n" "Language-Team: BRITISH ENGLISH \n" @@ -1084,7 +1084,7 @@ msgstr "البيانات المخزنة مؤقتاً" msgid "camelized JSON data from the requested URL" msgstr "بيانات JSON مجمّلة من عنوان URL المطلوب" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:252 msgid "only URLs starting with http(s):// are allowed" msgstr "يُسمح فقط بعناوين URL التي تبدأ ب http(s)://" @@ -2677,60 +2677,92 @@ msgstr "نبذة عنا" msgid "Django site admin" msgstr "مشرف موقع جانغو" -#: engine/core/templates/admin/index.html:19 +#: engine/core/templates/admin/index.html:20 msgid "Dashboard" msgstr "لوحة التحكم" -#: engine/core/templates/admin/index.html:25 +#: engine/core/templates/admin/index.html:27 msgid "Revenue (gross, 30d)" msgstr "الإيرادات (الإجمالي، 30 د)" -#: engine/core/templates/admin/index.html:34 +#: engine/core/templates/admin/index.html:36 msgid "Revenue (net, 30d)" msgstr "الإيرادات (الصافي، 30 د)" -#: engine/core/templates/admin/index.html:43 +#: engine/core/templates/admin/index.html:45 msgid "Returns (30d)" msgstr "المرتجعات (30 د)" -#: engine/core/templates/admin/index.html:52 +#: engine/core/templates/admin/index.html:54 msgid "Processed orders (30d)" msgstr "الطلبات التي تمت معالجتها (30 د)" -#: engine/core/templates/admin/index.html:65 -msgid "Sales vs Returns (30d)" -msgstr "المبيعات مقابل العوائد (30 د)" +#: engine/core/templates/admin/index.html:67 +msgid "Income overview" +msgstr "نظرة عامة على الدخل" -#: engine/core/templates/admin/index.html:82 -msgid "Gross" -msgstr "الإجمالي" +#: engine/core/templates/admin/index.html:99 +#: engine/core/templates/admin/index.html:139 +msgid "Net" +msgstr "صافي الإيرادات" -#: engine/core/templates/admin/index.html:87 +#: engine/core/templates/admin/index.html:107 +#: engine/core/templates/admin/index.html:140 +msgid "Taxes" +msgstr "الضرائب" + +#: engine/core/templates/admin/index.html:115 +#: engine/core/templates/admin/index.html:141 msgid "Returns" msgstr "المرتجعات" -#: engine/core/templates/admin/index.html:94 +#: engine/core/templates/admin/index.html:122 +msgid "Gross (pie total)" +msgstr "إجمالي الإيرادات" + +#: engine/core/templates/admin/index.html:201 +#: engine/core/templates/admin/index.html:326 msgid "Not enough data for chart yet." msgstr "لا توجد بيانات كافية للرسم البياني حتى الآن." -#: engine/core/templates/admin/index.html:103 +#: engine/core/templates/admin/index.html:210 msgid "Quick Links" msgstr "روابط سريعة" -#: engine/core/templates/admin/index.html:110 +#: engine/core/templates/admin/index.html:217 msgid "No links available." msgstr "لا توجد روابط متاحة." -#: engine/core/templates/admin/index.html:119 +#: engine/core/templates/admin/index.html:225 +msgid "Daily sales (30d)" +msgstr "المبيعات اليومية (30 د)" + +#: engine/core/templates/admin/index.html:254 +msgid "Orders (FINISHED)" +msgstr "الطلبات (منتهية)" + +#: engine/core/templates/admin/index.html:264 +msgid "Gross revenue" +msgstr "إجمالي الإيرادات" + +#: engine/core/templates/admin/index.html:301 +msgid "Orders" +msgstr "الطلبات" + +#: engine/core/templates/admin/index.html:308 +msgid "Gross" +msgstr "الإجمالي" + +#: engine/core/templates/admin/index.html:334 msgid "Most wished product" msgstr "أكثر المنتجات المرغوبة" -#: engine/core/templates/admin/index.html:128 -#: engine/core/templates/admin/index.html:144 +#: engine/core/templates/admin/index.html:361 +#: engine/core/templates/admin/index.html:395 msgid "No data yet." msgstr "لا توجد بيانات بعد." -#: engine/core/templates/admin/index.html:135 +#: engine/core/templates/admin/index.html:368 msgid "Most popular product" msgstr "المنتج الأكثر شعبية" @@ -2944,7 +2976,7 @@ msgstr "يجب تكوين معلمة NOMINATIM_URL!" msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "يجب ألا تتجاوز أبعاد الصورة w{max_width} x h{max_height} بكسل!" -#: engine/core/views.py:77 +#: engine/core/views.py:86 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -2952,7 +2984,7 @@ msgstr "" "يتعامل مع طلب فهرس خريطة الموقع ويعيد استجابة XML. يضمن أن تتضمن الاستجابة " "رأس نوع المحتوى المناسب ل XML." -#: engine/core/views.py:92 +#: engine/core/views.py:101 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -2961,16 +2993,16 @@ msgstr "" "يعالج استجابة العرض التفصيلي لخريطة الموقع. تقوم هذه الدالة بمعالجة الطلب، " "وجلب استجابة تفاصيل خريطة الموقع المناسبة، وتعيين رأس نوع المحتوى ل XML." -#: engine/core/views.py:127 +#: engine/core/views.py:136 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "إرجاع قائمة باللغات المدعومة والمعلومات الخاصة بها." -#: engine/core/views.py:159 +#: engine/core/views.py:168 msgid "Returns the parameters of the website as a JSON object." msgstr "إرجاع معلمات الموقع الإلكتروني ككائن JSON." -#: engine/core/views.py:178 +#: engine/core/views.py:187 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -2978,11 +3010,11 @@ msgstr "" "يعالج عمليات ذاكرة التخزين المؤقت مثل قراءة بيانات ذاكرة التخزين المؤقت " "وتعيينها بمفتاح ومهلة محددة." -#: engine/core/views.py:205 +#: engine/core/views.py:214 msgid "Handles `contact us` form submissions." msgstr "يتعامل مع عمليات إرسال نموذج \"اتصل بنا\"." -#: engine/core/views.py:226 +#: engine/core/views.py:235 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -2990,15 +3022,15 @@ msgstr "" "يعالج طلبات معالجة عناوين URL والتحقق من صحة عناوين URL من طلبات POST " "الواردة." -#: engine/core/views.py:266 +#: engine/core/views.py:275 msgid "Handles global search queries." msgstr "يتعامل مع استعلامات البحث العامة." -#: engine/core/views.py:281 +#: engine/core/views.py:290 msgid "Handles the logic of buying as a business without registration." msgstr "يتعامل بمنطق الشراء كشركة تجارية دون تسجيل." -#: engine/core/views.py:318 +#: engine/core/views.py:327 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3006,31 +3038,31 @@ msgstr "" "يتعامل مع تنزيل الأصل الرقمي المرتبط بأمر ما.\n" "تحاول هذه الدالة خدمة ملف الأصل الرقمي الموجود في دليل التخزين الخاص بالمشروع. إذا لم يتم العثور على الملف، يتم رفع خطأ HTTP 404 للإشارة إلى أن المورد غير متوفر." -#: engine/core/views.py:329 +#: engine/core/views.py:338 msgid "order_product_uuid is required" msgstr "الطلب_برو_منتج_uuid مطلوب" -#: engine/core/views.py:336 +#: engine/core/views.py:345 msgid "order product does not exist" msgstr "طلب المنتج غير موجود" -#: engine/core/views.py:339 +#: engine/core/views.py:348 msgid "you can only download the digital asset once" msgstr "يمكنك تنزيل الأصل الرقمي مرة واحدة فقط" -#: engine/core/views.py:342 +#: engine/core/views.py:351 msgid "the order must be paid before downloading the digital asset" msgstr "يجب دفع الطلب قبل تنزيل الأصل الرقمي" -#: engine/core/views.py:348 +#: engine/core/views.py:357 msgid "the order product does not have a product" msgstr "لا يحتوي منتج الطلب على منتج" -#: engine/core/views.py:385 +#: engine/core/views.py:394 msgid "favicon not found" msgstr "الرمز المفضل غير موجود" -#: engine/core/views.py:390 +#: engine/core/views.py:399 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3038,7 +3070,7 @@ msgstr "" "يتعامل مع طلبات الرمز المفضل لموقع ويب.\n" "تحاول هذه الدالة عرض ملف الأيقونة المفضلة الموجود في الدليل الثابت للمشروع. إذا لم يتم العثور على ملف الأيقونة المفضلة، يتم رفع خطأ HTTP 404 للإشارة إلى أن المورد غير متوفر." -#: engine/core/views.py:402 +#: engine/core/views.py:411 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3048,11 +3080,11 @@ msgstr "" " توجيهها إلى صفحة فهرس واجهة إدارة Django. تستخدم دالة \"إعادة التوجيه\" في " "Django للتعامل مع إعادة توجيه HTTP." -#: engine/core/views.py:415 +#: engine/core/views.py:424 msgid "Returns current version of the eVibes. " msgstr "إرجاع الإصدار الحالي من eVibes." -#: engine/core/views.py:494 +#: engine/core/views.py:587 msgid "Returns custom variables for Dashboard. " msgstr "إرجاع المتغيرات المخصصة للوحة التحكم." diff --git a/engine/core/locale/cs_CZ/LC_MESSAGES/django.mo b/engine/core/locale/cs_CZ/LC_MESSAGES/django.mo index 24a70285e3006a1e56471af7088981a63f06c5b7..b75f19aaf41da11c7ef0740e3431c1062d2fd80e 100644 GIT binary patch delta 14585 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 delta 14301 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\n" "Language-Team: BRITISH ENGLISH \n" @@ -1119,7 +1119,7 @@ msgstr "Data uložená v mezipaměti" msgid "camelized JSON data from the requested URL" msgstr "Kamelizovaná data JSON z požadované adresy URL" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:252 msgid "only URLs starting with http(s):// are allowed" msgstr "Povoleny jsou pouze adresy URL začínající http(s)://." @@ -2742,60 +2742,92 @@ msgstr "O nás" msgid "Django site admin" msgstr "Správce webu Django" -#: engine/core/templates/admin/index.html:19 +#: engine/core/templates/admin/index.html:20 msgid "Dashboard" msgstr "Přístrojová deska" -#: engine/core/templates/admin/index.html:25 +#: engine/core/templates/admin/index.html:27 msgid "Revenue (gross, 30d)" msgstr "Příjmy (hrubé, 30d)" -#: engine/core/templates/admin/index.html:34 +#: engine/core/templates/admin/index.html:36 msgid "Revenue (net, 30d)" msgstr "Příjmy (čisté, 30d)" -#: engine/core/templates/admin/index.html:43 +#: engine/core/templates/admin/index.html:45 msgid "Returns (30d)" msgstr "Návraty (30d)" -#: engine/core/templates/admin/index.html:52 +#: engine/core/templates/admin/index.html:54 msgid "Processed orders (30d)" msgstr "Zpracované objednávky (30d)" -#: engine/core/templates/admin/index.html:65 -msgid "Sales vs Returns (30d)" -msgstr "Prodej vs. návratnost (30d)" +#: engine/core/templates/admin/index.html:67 +msgid "Income overview" +msgstr "Přehled příjmů" -#: engine/core/templates/admin/index.html:82 -msgid "Gross" -msgstr "Hrubý" +#: engine/core/templates/admin/index.html:99 +#: engine/core/templates/admin/index.html:139 +msgid "Net" +msgstr "Čistý příjem" -#: engine/core/templates/admin/index.html:87 +#: engine/core/templates/admin/index.html:107 +#: engine/core/templates/admin/index.html:140 +msgid "Taxes" +msgstr "Daně" + +#: engine/core/templates/admin/index.html:115 +#: engine/core/templates/admin/index.html:141 msgid "Returns" msgstr "Vrací se" -#: engine/core/templates/admin/index.html:94 +#: engine/core/templates/admin/index.html:122 +msgid "Gross (pie total)" +msgstr "Hrubé příjmy" + +#: engine/core/templates/admin/index.html:201 +#: engine/core/templates/admin/index.html:326 msgid "Not enough data for chart yet." msgstr "Zatím není dostatek údajů pro graf." -#: engine/core/templates/admin/index.html:103 +#: engine/core/templates/admin/index.html:210 msgid "Quick Links" msgstr "Rychlé odkazy" -#: engine/core/templates/admin/index.html:110 +#: engine/core/templates/admin/index.html:217 msgid "No links available." msgstr "Nejsou k dispozici žádné odkazy." -#: engine/core/templates/admin/index.html:119 +#: engine/core/templates/admin/index.html:225 +msgid "Daily sales (30d)" +msgstr "Denní tržby (30d)" + +#: engine/core/templates/admin/index.html:254 +msgid "Orders (FINISHED)" +msgstr "Objednávky (DOKONČENO)" + +#: engine/core/templates/admin/index.html:264 +msgid "Gross revenue" +msgstr "Hrubé příjmy" + +#: engine/core/templates/admin/index.html:301 +msgid "Orders" +msgstr "Objednávky" + +#: engine/core/templates/admin/index.html:308 +msgid "Gross" +msgstr "Hrubý" + +#: engine/core/templates/admin/index.html:334 msgid "Most wished product" msgstr "Nejžádanější produkt" -#: engine/core/templates/admin/index.html:128 -#: engine/core/templates/admin/index.html:144 +#: engine/core/templates/admin/index.html:361 +#: engine/core/templates/admin/index.html:395 msgid "No data yet." msgstr "Zatím nejsou k dispozici žádné údaje." -#: engine/core/templates/admin/index.html:135 +#: engine/core/templates/admin/index.html:368 msgid "Most popular product" msgstr "Nejoblíbenější produkt" @@ -3016,7 +3048,7 @@ msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" "Rozměry obrázku by neměly přesáhnout w{max_width} x h{max_height} pixelů." -#: engine/core/views.py:77 +#: engine/core/views.py:86 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -3024,7 +3056,7 @@ msgstr "" "Zpracuje požadavek na index mapy stránek a vrátí odpověď XML. Zajistí, aby " "odpověď obsahovala odpovídající hlavičku typu obsahu XML." -#: engine/core/views.py:92 +#: engine/core/views.py:101 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -3034,16 +3066,16 @@ msgstr "" "požadavek, načte příslušnou podrobnou odpověď mapy stránek a nastaví " "hlavičku Content-Type pro XML." -#: engine/core/views.py:127 +#: engine/core/views.py:136 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "Vrátí seznam podporovaných jazyků a odpovídajících informací." -#: engine/core/views.py:159 +#: engine/core/views.py:168 msgid "Returns the parameters of the website as a JSON object." msgstr "Vrátí parametry webové stránky jako objekt JSON." -#: engine/core/views.py:178 +#: engine/core/views.py:187 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3051,11 +3083,11 @@ msgstr "" "Zpracovává operace mezipaměti, jako je čtení a nastavování dat mezipaměti se" " zadaným klíčem a časovým limitem." -#: engine/core/views.py:205 +#: engine/core/views.py:214 msgid "Handles `contact us` form submissions." msgstr "Zpracovává odeslání formuláře `contact us`." -#: engine/core/views.py:226 +#: engine/core/views.py:235 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -3063,15 +3095,15 @@ msgstr "" "Zpracovává požadavky na zpracování a ověřování adres URL z příchozích " "požadavků POST." -#: engine/core/views.py:266 +#: engine/core/views.py:275 msgid "Handles global search queries." msgstr "Zpracovává globální vyhledávací dotazy." -#: engine/core/views.py:281 +#: engine/core/views.py:290 msgid "Handles the logic of buying as a business without registration." msgstr "Řeší logiku nákupu jako firmy bez registrace." -#: engine/core/views.py:318 +#: engine/core/views.py:327 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3079,31 +3111,31 @@ msgstr "" "Zpracovává stahování digitálního aktiva spojeného s objednávkou.\n" "Tato funkce se pokusí obsloužit soubor digitálního aktiva umístěný v adresáři úložiště projektu. Pokud soubor není nalezen, je vyvolána chyba HTTP 404, která označuje, že zdroj není k dispozici." -#: engine/core/views.py:329 +#: engine/core/views.py:338 msgid "order_product_uuid is required" msgstr "order_product_uuid je povinné" -#: engine/core/views.py:336 +#: engine/core/views.py:345 msgid "order product does not exist" msgstr "objednávka produktu neexistuje" -#: engine/core/views.py:339 +#: engine/core/views.py:348 msgid "you can only download the digital asset once" msgstr "Digitální aktivum můžete stáhnout pouze jednou" -#: engine/core/views.py:342 +#: engine/core/views.py:351 msgid "the order must be paid before downloading the digital asset" msgstr "objednávka musí být zaplacena před stažením digitálního aktiva." -#: engine/core/views.py:348 +#: engine/core/views.py:357 msgid "the order product does not have a product" msgstr "Objednaný produkt nemá produkt" -#: engine/core/views.py:385 +#: engine/core/views.py:394 msgid "favicon not found" msgstr "favicon nebyl nalezen" -#: engine/core/views.py:390 +#: engine/core/views.py:399 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3111,7 +3143,7 @@ msgstr "" "Zpracovává požadavky na favicon webové stránky.\n" "Tato funkce se pokusí obsloužit soubor favicon umístěný ve statickém adresáři projektu. Pokud soubor favicon není nalezen, je vyvolána chyba HTTP 404, která označuje, že zdroj není k dispozici." -#: engine/core/views.py:402 +#: engine/core/views.py:411 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3122,11 +3154,11 @@ msgstr "" "administrátorského rozhraní Django. Pro zpracování přesměrování HTTP používá" " funkci `redirect` Djanga." -#: engine/core/views.py:415 +#: engine/core/views.py:424 msgid "Returns current version of the eVibes. " msgstr "Vrací aktuální verzi systému eVibes." -#: engine/core/views.py:494 +#: engine/core/views.py:587 msgid "Returns custom variables for Dashboard. " msgstr "Vrací vlastní proměnné pro Dashboard." diff --git a/engine/core/locale/da_DK/LC_MESSAGES/django.mo b/engine/core/locale/da_DK/LC_MESSAGES/django.mo index 8852f9b39ca05766e755b4ac094150133c6f9bd0..9f0f486ec19fc15d095a19b231ab9b88bfb87975 100644 GIT binary patch delta 14597 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 kBJ(8o@5OCVVMBfQr3~#eu$R4e{)#})=\n" "Language-Team: BRITISH ENGLISH \n" @@ -1124,7 +1124,7 @@ msgstr "Cachelagrede data" msgid "camelized JSON data from the requested URL" msgstr "Cameliserede JSON-data fra den ønskede URL" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:252 msgid "only URLs starting with http(s):// are allowed" msgstr "Kun URL'er, der starter med http(s)://, er tilladt." @@ -2768,60 +2768,92 @@ msgstr "Om os" msgid "Django site admin" msgstr "Django site-administrator" -#: engine/core/templates/admin/index.html:19 +#: engine/core/templates/admin/index.html:20 msgid "Dashboard" msgstr "Dashboard" -#: engine/core/templates/admin/index.html:25 +#: engine/core/templates/admin/index.html:27 msgid "Revenue (gross, 30d)" msgstr "Indtægter (brutto, 30d)" -#: engine/core/templates/admin/index.html:34 +#: engine/core/templates/admin/index.html:36 msgid "Revenue (net, 30d)" msgstr "Indtægter (netto, 30d)" -#: engine/core/templates/admin/index.html:43 +#: engine/core/templates/admin/index.html:45 msgid "Returns (30d)" msgstr "Returnerer (30d)" -#: engine/core/templates/admin/index.html:52 +#: engine/core/templates/admin/index.html:54 msgid "Processed orders (30d)" msgstr "Behandlede ordrer (30d)" -#: engine/core/templates/admin/index.html:65 -msgid "Sales vs Returns (30d)" -msgstr "Salg vs. returnering (30d)" +#: engine/core/templates/admin/index.html:67 +msgid "Income overview" +msgstr "Oversigt over indtægter" -#: engine/core/templates/admin/index.html:82 -msgid "Gross" -msgstr "Brutto" +#: engine/core/templates/admin/index.html:99 +#: engine/core/templates/admin/index.html:139 +msgid "Net" +msgstr "Nettoomsætning" -#: engine/core/templates/admin/index.html:87 +#: engine/core/templates/admin/index.html:107 +#: engine/core/templates/admin/index.html:140 +msgid "Taxes" +msgstr "Skatter og afgifter" + +#: engine/core/templates/admin/index.html:115 +#: engine/core/templates/admin/index.html:141 msgid "Returns" msgstr "Returnerer" -#: engine/core/templates/admin/index.html:94 +#: engine/core/templates/admin/index.html:122 +msgid "Gross (pie total)" +msgstr "Bruttoindtægter" + +#: engine/core/templates/admin/index.html:201 +#: engine/core/templates/admin/index.html:326 msgid "Not enough data for chart yet." msgstr "Ikke nok data til et diagram endnu." -#: engine/core/templates/admin/index.html:103 +#: engine/core/templates/admin/index.html:210 msgid "Quick Links" msgstr "Hurtige links" -#: engine/core/templates/admin/index.html:110 +#: engine/core/templates/admin/index.html:217 msgid "No links available." msgstr "Ingen tilgængelige links." -#: engine/core/templates/admin/index.html:119 +#: engine/core/templates/admin/index.html:225 +msgid "Daily sales (30d)" +msgstr "Dagligt salg (30d)" + +#: engine/core/templates/admin/index.html:254 +msgid "Orders (FINISHED)" +msgstr "Ordrer (AFSLUTTET)" + +#: engine/core/templates/admin/index.html:264 +msgid "Gross revenue" +msgstr "Bruttoindtægter" + +#: engine/core/templates/admin/index.html:301 +msgid "Orders" +msgstr "Bestillinger" + +#: engine/core/templates/admin/index.html:308 +msgid "Gross" +msgstr "Brutto" + +#: engine/core/templates/admin/index.html:334 msgid "Most wished product" msgstr "Mest ønskede produkt" -#: engine/core/templates/admin/index.html:128 -#: engine/core/templates/admin/index.html:144 +#: engine/core/templates/admin/index.html:361 +#: engine/core/templates/admin/index.html:395 msgid "No data yet." msgstr "Ingen data endnu." -#: engine/core/templates/admin/index.html:135 +#: engine/core/templates/admin/index.html:368 msgid "Most popular product" msgstr "Mest populære produkt" @@ -3042,7 +3074,7 @@ msgstr "" "Billedets dimensioner bør ikke overstige w{max_width} x h{max_height} " "pixels." -#: engine/core/views.py:77 +#: engine/core/views.py:86 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -3050,7 +3082,7 @@ msgstr "" "Håndterer anmodningen om sitemap-indekset og returnerer et XML-svar. Den " "sikrer, at svaret indeholder den passende indholdstypeheader for XML." -#: engine/core/views.py:92 +#: engine/core/views.py:101 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -3060,17 +3092,17 @@ msgstr "" "behandler anmodningen, henter det relevante sitemap-detaljesvar og " "indstiller Content-Type-headeren til XML." -#: engine/core/views.py:127 +#: engine/core/views.py:136 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" "Returnerer en liste over understøttede sprog og de tilhørende oplysninger." -#: engine/core/views.py:159 +#: engine/core/views.py:168 msgid "Returns the parameters of the website as a JSON object." msgstr "Returnerer hjemmesidens parametre som et JSON-objekt." -#: engine/core/views.py:178 +#: engine/core/views.py:187 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3078,11 +3110,11 @@ msgstr "" "Håndterer cache-operationer som f.eks. læsning og indstilling af cachedata " "med en specificeret nøgle og timeout." -#: engine/core/views.py:205 +#: engine/core/views.py:214 msgid "Handles `contact us` form submissions." msgstr "Håndterer indsendelser af `kontakt os`-formularer." -#: engine/core/views.py:226 +#: engine/core/views.py:235 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -3090,15 +3122,15 @@ msgstr "" "Håndterer anmodninger om behandling og validering af URL'er fra indgående " "POST-anmodninger." -#: engine/core/views.py:266 +#: engine/core/views.py:275 msgid "Handles global search queries." msgstr "Håndterer globale søgeforespørgsler." -#: engine/core/views.py:281 +#: engine/core/views.py:290 msgid "Handles the logic of buying as a business without registration." msgstr "Håndterer logikken i at købe som en virksomhed uden registrering." -#: engine/core/views.py:318 +#: engine/core/views.py:327 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3106,31 +3138,31 @@ msgstr "" "Håndterer download af et digitalt aktiv, der er knyttet til en ordre.\n" "Denne funktion forsøger at betjene den digitale aktivfil, der ligger i projektets lagermappe. Hvis filen ikke findes, udløses en HTTP 404-fejl som tegn på, at ressourcen ikke er tilgængelig." -#: engine/core/views.py:329 +#: engine/core/views.py:338 msgid "order_product_uuid is required" msgstr "order_product_uuid er påkrævet" -#: engine/core/views.py:336 +#: engine/core/views.py:345 msgid "order product does not exist" msgstr "Bestil produkt findes ikke" -#: engine/core/views.py:339 +#: engine/core/views.py:348 msgid "you can only download the digital asset once" msgstr "Du kan kun downloade det digitale aktiv én gang" -#: engine/core/views.py:342 +#: engine/core/views.py:351 msgid "the order must be paid before downloading the digital asset" msgstr "Ordren skal betales, før det digitale aktiv downloades." -#: engine/core/views.py:348 +#: engine/core/views.py:357 msgid "the order product does not have a product" msgstr "Ordreproduktet har ikke et produkt" -#: engine/core/views.py:385 +#: engine/core/views.py:394 msgid "favicon not found" msgstr "Favicon ikke fundet" -#: engine/core/views.py:390 +#: engine/core/views.py:399 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3138,7 +3170,7 @@ msgstr "" "Håndterer anmodninger om et websteds favicon.\n" "Denne funktion forsøger at servere favicon-filen, der ligger i projektets statiske mappe. Hvis favicon-filen ikke findes, udløses en HTTP 404-fejl for at angive, at ressourcen ikke er tilgængelig." -#: engine/core/views.py:402 +#: engine/core/views.py:411 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3149,11 +3181,11 @@ msgstr "" "administratorinterfacets indeksside. Den bruger Djangos `redirect`-funktion " "til at håndtere HTTP-omdirigeringen." -#: engine/core/views.py:415 +#: engine/core/views.py:424 msgid "Returns current version of the eVibes. " msgstr "Returnerer den aktuelle version af eVibes." -#: engine/core/views.py:494 +#: engine/core/views.py:587 msgid "Returns custom variables for Dashboard. " msgstr "Returnerer brugerdefinerede variabler til Dashboard." diff --git a/engine/core/locale/de_DE/LC_MESSAGES/django.mo b/engine/core/locale/de_DE/LC_MESSAGES/django.mo index 5b4c25e001bf4b913558606993ad718fa2b11da8..99320f67466856ecfc281de920e972b117600c6c 100644 GIT binary patch delta 14590 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 GAM}3@L9s~y delta 14301 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 R7w0SJ8M%E{LC=|P{{xn;ObY-2 diff --git a/engine/core/locale/de_DE/LC_MESSAGES/django.po b/engine/core/locale/de_DE/LC_MESSAGES/django.po index 43aa2575..4a9d085f 100644 --- a/engine/core/locale/de_DE/LC_MESSAGES/django.po +++ b/engine/core/locale/de_DE/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-16 15:38+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -1163,7 +1163,7 @@ msgstr "Zwischengespeicherte Daten" msgid "camelized JSON data from the requested URL" msgstr "Camelized JSON-Daten aus der angeforderten URL" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:252 msgid "only URLs starting with http(s):// are allowed" msgstr "Nur URLs, die mit http(s):// beginnen, sind zulässig" @@ -2841,60 +2841,92 @@ msgstr "Über uns" msgid "Django site admin" msgstr "Django-Website-Administrator" -#: engine/core/templates/admin/index.html:19 +#: engine/core/templates/admin/index.html:20 msgid "Dashboard" msgstr "Dashboard" -#: engine/core/templates/admin/index.html:25 +#: engine/core/templates/admin/index.html:27 msgid "Revenue (gross, 30d)" msgstr "Einkommen (gross, 30d)" -#: engine/core/templates/admin/index.html:34 +#: engine/core/templates/admin/index.html:36 msgid "Revenue (net, 30d)" msgstr "Einnahmen (netto, 30d)" -#: engine/core/templates/admin/index.html:43 +#: engine/core/templates/admin/index.html:45 msgid "Returns (30d)" msgstr "Rückgaben (30d)" -#: engine/core/templates/admin/index.html:52 +#: engine/core/templates/admin/index.html:54 msgid "Processed orders (30d)" msgstr "Bearbeitete Aufträge (30d)" -#: engine/core/templates/admin/index.html:65 -msgid "Sales vs Returns (30d)" -msgstr "Verkäufe vs. Retouren (30d)" +#: engine/core/templates/admin/index.html:67 +msgid "Income overview" +msgstr "Einkommensübersicht" -#: engine/core/templates/admin/index.html:82 -msgid "Gross" -msgstr "Brutto" +#: engine/core/templates/admin/index.html:99 +#: engine/core/templates/admin/index.html:139 +msgid "Net" +msgstr "Nettoeinkommen" -#: engine/core/templates/admin/index.html:87 +#: engine/core/templates/admin/index.html:107 +#: engine/core/templates/admin/index.html:140 +msgid "Taxes" +msgstr "Steuern" + +#: engine/core/templates/admin/index.html:115 +#: engine/core/templates/admin/index.html:141 msgid "Returns" msgstr "Rückgabe" -#: engine/core/templates/admin/index.html:94 +#: engine/core/templates/admin/index.html:122 +msgid "Gross (pie total)" +msgstr "Bruttoeinnahmen" + +#: engine/core/templates/admin/index.html:201 +#: engine/core/templates/admin/index.html:326 msgid "Not enough data for chart yet." msgstr "Noch nicht genug Daten für ein Diagramm." -#: engine/core/templates/admin/index.html:103 +#: engine/core/templates/admin/index.html:210 msgid "Quick Links" msgstr "Schnelle Links" -#: engine/core/templates/admin/index.html:110 +#: engine/core/templates/admin/index.html:217 msgid "No links available." msgstr "Keine Links verfügbar." -#: engine/core/templates/admin/index.html:119 +#: engine/core/templates/admin/index.html:225 +msgid "Daily sales (30d)" +msgstr "Tägliche Verkäufe (30d)" + +#: engine/core/templates/admin/index.html:254 +msgid "Orders (FINISHED)" +msgstr "Aufträge (FINISHED)" + +#: engine/core/templates/admin/index.html:264 +msgid "Gross revenue" +msgstr "Bruttoeinnahmen" + +#: engine/core/templates/admin/index.html:301 +msgid "Orders" +msgstr "Bestellungen" + +#: engine/core/templates/admin/index.html:308 +msgid "Gross" +msgstr "Brutto" + +#: engine/core/templates/admin/index.html:334 msgid "Most wished product" msgstr "Meistgewünschtes Produkt" -#: engine/core/templates/admin/index.html:128 -#: engine/core/templates/admin/index.html:144 +#: engine/core/templates/admin/index.html:361 +#: engine/core/templates/admin/index.html:395 msgid "No data yet." msgstr "Noch keine Daten." -#: engine/core/templates/admin/index.html:135 +#: engine/core/templates/admin/index.html:368 msgid "Most popular product" msgstr "Beliebtestes Produkt" @@ -3117,7 +3149,7 @@ msgstr "" "Die Bildabmessungen sollten w{max_width} x h{max_height} Pixel nicht " "überschreiten" -#: engine/core/views.py:77 +#: engine/core/views.py:86 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -3126,7 +3158,7 @@ msgstr "" "zurück. Sie stellt sicher, dass die Antwort den entsprechenden Content-Type-" "Header für XML enthält." -#: engine/core/views.py:92 +#: engine/core/views.py:101 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -3136,18 +3168,18 @@ msgstr "" "Funktion verarbeitet die Anfrage, holt die entsprechende Sitemap-" "Detailantwort ab und setzt den Content-Type-Header für XML." -#: engine/core/views.py:127 +#: engine/core/views.py:136 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" "Gibt eine Liste der unterstützten Sprachen und der entsprechenden " "Informationen zurück." -#: engine/core/views.py:159 +#: engine/core/views.py:168 msgid "Returns the parameters of the website as a JSON object." msgstr "Gibt die Parameter der Website als JSON-Objekt zurück." -#: engine/core/views.py:178 +#: engine/core/views.py:187 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3155,11 +3187,11 @@ msgstr "" "Erledigt Cache-Operationen wie das Lesen und Setzen von Cache-Daten mit " "einem bestimmten Schlüssel und Timeout." -#: engine/core/views.py:205 +#: engine/core/views.py:214 msgid "Handles `contact us` form submissions." msgstr "Verarbeitet Übermittlungen des Formulars \"Kontaktieren Sie uns\"." -#: engine/core/views.py:226 +#: engine/core/views.py:235 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -3167,15 +3199,15 @@ msgstr "" "Bearbeitet Anfragen zur Verarbeitung und Validierung von URLs aus " "eingehenden POST-Anfragen." -#: engine/core/views.py:266 +#: engine/core/views.py:275 msgid "Handles global search queries." msgstr "Bearbeitet globale Suchanfragen." -#: engine/core/views.py:281 +#: engine/core/views.py:290 msgid "Handles the logic of buying as a business without registration." msgstr "Behandelt die Logik des Kaufs als Unternehmen ohne Registrierung." -#: engine/core/views.py:318 +#: engine/core/views.py:327 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3183,33 +3215,33 @@ msgstr "" "Bearbeitet das Herunterladen eines digitalen Assets, das mit einem Auftrag verbunden ist.\n" "Diese Funktion versucht, die Datei des digitalen Assets, die sich im Speicherverzeichnis des Projekts befindet, bereitzustellen. Wenn die Datei nicht gefunden wird, wird ein HTTP 404-Fehler ausgelöst, um anzuzeigen, dass die Ressource nicht verfügbar ist." -#: engine/core/views.py:329 +#: engine/core/views.py:338 msgid "order_product_uuid is required" msgstr "order_product_uuid ist erforderlich" -#: engine/core/views.py:336 +#: engine/core/views.py:345 msgid "order product does not exist" msgstr "Produkt bestellen existiert nicht" -#: engine/core/views.py:339 +#: engine/core/views.py:348 msgid "you can only download the digital asset once" msgstr "Sie können das digitale Asset nur einmal herunterladen" -#: engine/core/views.py:342 +#: engine/core/views.py:351 msgid "the order must be paid before downloading the digital asset" msgstr "" "die Bestellung muss vor dem Herunterladen des digitalen Assets bezahlt " "werden" -#: engine/core/views.py:348 +#: engine/core/views.py:357 msgid "the order product does not have a product" msgstr "Das Bestellprodukt hat kein Produkt" -#: engine/core/views.py:385 +#: engine/core/views.py:394 msgid "favicon not found" msgstr "Favicon nicht gefunden" -#: engine/core/views.py:390 +#: engine/core/views.py:399 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3217,7 +3249,7 @@ msgstr "" "Bearbeitet Anfragen nach dem Favicon einer Website.\n" "Diese Funktion versucht, die Favicon-Datei, die sich im statischen Verzeichnis des Projekts befindet, bereitzustellen. Wenn die Favicon-Datei nicht gefunden wird, wird ein HTTP 404-Fehler ausgegeben, um anzuzeigen, dass die Ressource nicht verfügbar ist." -#: engine/core/views.py:402 +#: engine/core/views.py:411 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3228,11 +3260,11 @@ msgstr "" "Administrationsoberfläche um. Sie verwendet die Funktion `redirect` von " "Django für die Bearbeitung der HTTP-Umleitung." -#: engine/core/views.py:415 +#: engine/core/views.py:424 msgid "Returns current version of the eVibes. " msgstr "Gibt die aktuelle Version von eVibes zurück." -#: engine/core/views.py:494 +#: engine/core/views.py:587 msgid "Returns custom variables for Dashboard. " msgstr "Gibt benutzerdefinierte Variablen für das Dashboard zurück." diff --git a/engine/core/locale/en_GB/LC_MESSAGES/django.mo b/engine/core/locale/en_GB/LC_MESSAGES/django.mo index 06778040ed1cd8dfce120aa7222520856c12dd5f..3e911d5eb9a24b92b68c543aeef569747f12a4fa 100644 GIT binary patch delta 14569 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 x{{N!~X_FG?W!5V{{RJBVmtr< delta 14311 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 L_fkL4_{RSO<=Yss diff --git a/engine/core/locale/en_GB/LC_MESSAGES/django.po b/engine/core/locale/en_GB/LC_MESSAGES/django.po index 5847a6b0..8e5d74c7 100644 --- a/engine/core/locale/en_GB/LC_MESSAGES/django.po +++ b/engine/core/locale/en_GB/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-16 15:38+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -1087,7 +1087,7 @@ msgstr "Cached data" msgid "camelized JSON data from the requested URL" msgstr "Camelized JSON data from the requested URL" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:252 msgid "only URLs starting with http(s):// are allowed" msgstr "Only URLs starting with http(s):// are allowed" @@ -2704,60 +2704,92 @@ msgstr "About Us" msgid "Django site admin" msgstr "Django site admin" -#: engine/core/templates/admin/index.html:19 +#: engine/core/templates/admin/index.html:20 msgid "Dashboard" msgstr "Dashboard" -#: engine/core/templates/admin/index.html:25 +#: engine/core/templates/admin/index.html:27 msgid "Revenue (gross, 30d)" msgstr "Revenue (gross, 30d)" -#: engine/core/templates/admin/index.html:34 +#: engine/core/templates/admin/index.html:36 msgid "Revenue (net, 30d)" msgstr "Revenue (net, 30d)" -#: engine/core/templates/admin/index.html:43 +#: engine/core/templates/admin/index.html:45 msgid "Returns (30d)" msgstr "Returns (30d)" -#: engine/core/templates/admin/index.html:52 +#: engine/core/templates/admin/index.html:54 msgid "Processed orders (30d)" msgstr "Processed orders (30d)" -#: engine/core/templates/admin/index.html:65 -msgid "Sales vs Returns (30d)" -msgstr "Sales vs Returns (30d)" +#: engine/core/templates/admin/index.html:67 +msgid "Income overview" +msgstr "Income overview" -#: engine/core/templates/admin/index.html:82 -msgid "Gross" -msgstr "Gross" +#: engine/core/templates/admin/index.html:99 +#: engine/core/templates/admin/index.html:139 +msgid "Net" +msgstr "Net revenue" -#: engine/core/templates/admin/index.html:87 +#: engine/core/templates/admin/index.html:107 +#: engine/core/templates/admin/index.html:140 +msgid "Taxes" +msgstr "Taxes" + +#: engine/core/templates/admin/index.html:115 +#: engine/core/templates/admin/index.html:141 msgid "Returns" msgstr "Returns" -#: engine/core/templates/admin/index.html:94 +#: engine/core/templates/admin/index.html:122 +msgid "Gross (pie total)" +msgstr "Gross revenue" + +#: engine/core/templates/admin/index.html:201 +#: engine/core/templates/admin/index.html:326 msgid "Not enough data for chart yet." msgstr "Not enough data for chart yet." -#: engine/core/templates/admin/index.html:103 +#: engine/core/templates/admin/index.html:210 msgid "Quick Links" msgstr "Quick Links" -#: engine/core/templates/admin/index.html:110 +#: engine/core/templates/admin/index.html:217 msgid "No links available." msgstr "No links available." -#: engine/core/templates/admin/index.html:119 +#: engine/core/templates/admin/index.html:225 +msgid "Daily sales (30d)" +msgstr "Daily sales (30d)" + +#: engine/core/templates/admin/index.html:254 +msgid "Orders (FINISHED)" +msgstr "Orders (FINISHED)" + +#: engine/core/templates/admin/index.html:264 +msgid "Gross revenue" +msgstr "Gross revenue" + +#: engine/core/templates/admin/index.html:301 +msgid "Orders" +msgstr "Orders" + +#: engine/core/templates/admin/index.html:308 +msgid "Gross" +msgstr "Gross" + +#: engine/core/templates/admin/index.html:334 msgid "Most wished product" msgstr "Most wished products" -#: engine/core/templates/admin/index.html:128 -#: engine/core/templates/admin/index.html:144 +#: engine/core/templates/admin/index.html:361 +#: engine/core/templates/admin/index.html:395 msgid "No data yet." msgstr "No data yet." -#: engine/core/templates/admin/index.html:135 +#: engine/core/templates/admin/index.html:368 msgid "Most popular product" msgstr "Most popular products" @@ -2977,7 +3009,7 @@ msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" "Image dimensions should not exceed w{max_width} x h{max_height} pixels!" -#: engine/core/views.py:77 +#: engine/core/views.py:86 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -2985,7 +3017,7 @@ msgstr "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." -#: engine/core/views.py:92 +#: engine/core/views.py:101 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -2995,17 +3027,17 @@ msgstr "" "the request, fetches the appropriate sitemap detail response, and sets the " "Content-Type header for XML." -#: engine/core/views.py:127 +#: engine/core/views.py:136 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" "Returns a list of supported languages and their corresponding information." -#: engine/core/views.py:159 +#: engine/core/views.py:168 msgid "Returns the parameters of the website as a JSON object." msgstr "Returns the parameters of the website as a JSON object." -#: engine/core/views.py:178 +#: engine/core/views.py:187 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3013,11 +3045,11 @@ msgstr "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." -#: engine/core/views.py:205 +#: engine/core/views.py:214 msgid "Handles `contact us` form submissions." msgstr "Handles `contact us` form submissions." -#: engine/core/views.py:226 +#: engine/core/views.py:235 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -3025,15 +3057,15 @@ msgstr "" "Handles requests for processing and validating URLs from incoming POST " "requests." -#: engine/core/views.py:266 +#: engine/core/views.py:275 msgid "Handles global search queries." msgstr "Handles global search queries." -#: engine/core/views.py:281 +#: engine/core/views.py:290 msgid "Handles the logic of buying as a business without registration." msgstr "Handles the logic of buying as a business without registration." -#: engine/core/views.py:318 +#: engine/core/views.py:327 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3041,31 +3073,31 @@ msgstr "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." -#: engine/core/views.py:329 +#: engine/core/views.py:338 msgid "order_product_uuid is required" msgstr "order_product_uuid is required" -#: engine/core/views.py:336 +#: engine/core/views.py:345 msgid "order product does not exist" msgstr "order product does not exist" -#: engine/core/views.py:339 +#: engine/core/views.py:348 msgid "you can only download the digital asset once" msgstr "You can only download the digital asset once" -#: engine/core/views.py:342 +#: engine/core/views.py:351 msgid "the order must be paid before downloading the digital asset" msgstr "the order must be paid before downloading the digital asset" -#: engine/core/views.py:348 +#: engine/core/views.py:357 msgid "the order product does not have a product" msgstr "The order product does not have a product" -#: engine/core/views.py:385 +#: engine/core/views.py:394 msgid "favicon not found" msgstr "favicon not found" -#: engine/core/views.py:390 +#: engine/core/views.py:399 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3073,7 +3105,7 @@ msgstr "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." -#: engine/core/views.py:402 +#: engine/core/views.py:411 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3083,11 +3115,11 @@ msgstr "" " HTTP requests and redirects them to the Django admin interface index page. " "It uses Django's `redirect` function for handling the HTTP redirection." -#: engine/core/views.py:415 +#: engine/core/views.py:424 msgid "Returns current version of the eVibes. " msgstr "Returns current version of the eVibes." -#: engine/core/views.py:494 +#: engine/core/views.py:587 msgid "Returns custom variables for Dashboard. " msgstr "Returns custom variables for Dashboard." diff --git a/engine/core/locale/en_US/LC_MESSAGES/django.mo b/engine/core/locale/en_US/LC_MESSAGES/django.mo index d6c1a6e9c0cbab74dc8e70b5b68eff619dee391c..1513e98b1b92431e19d43e3a139b208ad4b0252d 100644 GIT binary patch delta 14573 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 D2ghn$ delta 14323 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 a*|}nAr_OD+t)%t4+T#CfVK*(@X!1Xiyc#M1 diff --git a/engine/core/locale/en_US/LC_MESSAGES/django.po b/engine/core/locale/en_US/LC_MESSAGES/django.po index 2b19ac8b..5e5db52f 100644 --- a/engine/core/locale/en_US/LC_MESSAGES/django.po +++ b/engine/core/locale/en_US/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-16 15:38+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -1083,7 +1083,7 @@ msgstr "Cached data" msgid "camelized JSON data from the requested URL" msgstr "Camelized JSON data from the requested URL" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:252 msgid "only URLs starting with http(s):// are allowed" msgstr "Only URLs starting with http(s):// are allowed" @@ -2700,60 +2700,92 @@ msgstr "About Us" msgid "Django site admin" msgstr "Django site admin" -#: engine/core/templates/admin/index.html:19 +#: engine/core/templates/admin/index.html:20 msgid "Dashboard" msgstr "Dashboard" -#: engine/core/templates/admin/index.html:25 +#: engine/core/templates/admin/index.html:27 msgid "Revenue (gross, 30d)" msgstr "Revenue (gross, 30d)" -#: engine/core/templates/admin/index.html:34 +#: engine/core/templates/admin/index.html:36 msgid "Revenue (net, 30d)" msgstr "Revenue (net, 30d)" -#: engine/core/templates/admin/index.html:43 +#: engine/core/templates/admin/index.html:45 msgid "Returns (30d)" msgstr "Returns (30d)" -#: engine/core/templates/admin/index.html:52 +#: engine/core/templates/admin/index.html:54 msgid "Processed orders (30d)" msgstr "Processed orders (30d)" -#: engine/core/templates/admin/index.html:65 -msgid "Sales vs Returns (30d)" -msgstr "Sales vs Returns (30d)" +#: engine/core/templates/admin/index.html:67 +msgid "Income overview" +msgstr "Income overview" -#: engine/core/templates/admin/index.html:82 -msgid "Gross" -msgstr "Gross" +#: engine/core/templates/admin/index.html:99 +#: engine/core/templates/admin/index.html:139 +msgid "Net" +msgstr "Net revenue" -#: engine/core/templates/admin/index.html:87 +#: engine/core/templates/admin/index.html:107 +#: engine/core/templates/admin/index.html:140 +msgid "Taxes" +msgstr "Taxes" + +#: engine/core/templates/admin/index.html:115 +#: engine/core/templates/admin/index.html:141 msgid "Returns" msgstr "Returns" -#: engine/core/templates/admin/index.html:94 +#: engine/core/templates/admin/index.html:122 +msgid "Gross (pie total)" +msgstr "Gross revenue" + +#: engine/core/templates/admin/index.html:201 +#: engine/core/templates/admin/index.html:326 msgid "Not enough data for chart yet." msgstr "Not enough data for chart yet." -#: engine/core/templates/admin/index.html:103 +#: engine/core/templates/admin/index.html:210 msgid "Quick Links" msgstr "Quick Links" -#: engine/core/templates/admin/index.html:110 +#: engine/core/templates/admin/index.html:217 msgid "No links available." msgstr "No links available." -#: engine/core/templates/admin/index.html:119 +#: engine/core/templates/admin/index.html:225 +msgid "Daily sales (30d)" +msgstr "Daily sales (30d)" + +#: engine/core/templates/admin/index.html:254 +msgid "Orders (FINISHED)" +msgstr "Orders (FINISHED)" + +#: engine/core/templates/admin/index.html:264 +msgid "Gross revenue" +msgstr "Gross revenue" + +#: engine/core/templates/admin/index.html:301 +msgid "Orders" +msgstr "Orders" + +#: engine/core/templates/admin/index.html:308 +msgid "Gross" +msgstr "Gross" + +#: engine/core/templates/admin/index.html:334 msgid "Most wished product" msgstr "Most wished products" -#: engine/core/templates/admin/index.html:128 -#: engine/core/templates/admin/index.html:144 +#: engine/core/templates/admin/index.html:361 +#: engine/core/templates/admin/index.html:395 msgid "No data yet." msgstr "No data yet." -#: engine/core/templates/admin/index.html:135 +#: engine/core/templates/admin/index.html:368 msgid "Most popular product" msgstr "Most popular products" @@ -2973,7 +3005,7 @@ msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" "Image dimensions should not exceed w{max_width} x h{max_height} pixels!" -#: engine/core/views.py:77 +#: engine/core/views.py:86 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -2981,7 +3013,7 @@ msgstr "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." -#: engine/core/views.py:92 +#: engine/core/views.py:101 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -2991,17 +3023,17 @@ msgstr "" "the request, fetches the appropriate sitemap detail response, and sets the " "Content-Type header for XML." -#: engine/core/views.py:127 +#: engine/core/views.py:136 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" "Returns a list of supported languages and their corresponding information." -#: engine/core/views.py:159 +#: engine/core/views.py:168 msgid "Returns the parameters of the website as a JSON object." msgstr "Returns the parameters of the website as a JSON object." -#: engine/core/views.py:178 +#: engine/core/views.py:187 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3009,11 +3041,11 @@ msgstr "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." -#: engine/core/views.py:205 +#: engine/core/views.py:214 msgid "Handles `contact us` form submissions." msgstr "Handles `contact us` form submissions." -#: engine/core/views.py:226 +#: engine/core/views.py:235 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -3021,15 +3053,15 @@ msgstr "" "Handles requests for processing and validating URLs from incoming POST " "requests." -#: engine/core/views.py:266 +#: engine/core/views.py:275 msgid "Handles global search queries." msgstr "Handles global search queries." -#: engine/core/views.py:281 +#: engine/core/views.py:290 msgid "Handles the logic of buying as a business without registration." msgstr "Handles the logic of buying as a business without registration." -#: engine/core/views.py:318 +#: engine/core/views.py:327 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3037,31 +3069,31 @@ msgstr "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." -#: engine/core/views.py:329 +#: engine/core/views.py:338 msgid "order_product_uuid is required" msgstr "order_product_uuid is required" -#: engine/core/views.py:336 +#: engine/core/views.py:345 msgid "order product does not exist" msgstr "order product does not exist" -#: engine/core/views.py:339 +#: engine/core/views.py:348 msgid "you can only download the digital asset once" msgstr "You can only download the digital asset once" -#: engine/core/views.py:342 +#: engine/core/views.py:351 msgid "the order must be paid before downloading the digital asset" msgstr "the order must be paid before downloading the digital asset" -#: engine/core/views.py:348 +#: engine/core/views.py:357 msgid "the order product does not have a product" msgstr "The order product does not have a product" -#: engine/core/views.py:385 +#: engine/core/views.py:394 msgid "favicon not found" msgstr "favicon not found" -#: engine/core/views.py:390 +#: engine/core/views.py:399 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3069,7 +3101,7 @@ msgstr "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." -#: engine/core/views.py:402 +#: engine/core/views.py:411 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3079,11 +3111,11 @@ msgstr "" " HTTP requests and redirects them to the Django admin interface index page. " "It uses Django's `redirect` function for handling the HTTP redirection." -#: engine/core/views.py:415 +#: engine/core/views.py:424 msgid "Returns current version of the eVibes. " msgstr "Returns current version of the eVibes." -#: engine/core/views.py:494 +#: engine/core/views.py:587 msgid "Returns custom variables for Dashboard. " msgstr "Returns custom variables for Dashboard." diff --git a/engine/core/locale/es_ES/LC_MESSAGES/django.mo b/engine/core/locale/es_ES/LC_MESSAGES/django.mo index bf0f3afb8ebbc8df8ffd9ef583f06f801efe2239..db8f18e2e8a6943a82b1389f1e86b0a89cc73f20 100644 GIT binary patch delta 14580 zcmZA82Yk)f|Htujk=QG-B8kKZV$awsMrg#|J0vtpj95in6ty=+N>QUNT|%j<8m*Sv zs;C-8?Nx1+7X828_Z8?zY0(I2;=>g~e3_$_9|bJ&oMU3KLp>Kap& z@+d5YU9d1t#BDre8gdKMwt?>BHD(r>>J+STo^j@EXrH_>>PfnwZrlrV;!rG!6EGgv zV-d{U$e2_Q=P(Y}MH|DQnMaL{X@g~&81op%;iuf+3~y>ob}E)=W(@Z>m169Z4@C`? zUvqooY^Wg)!2(zvb7M=?Nc2FBP=73l!%!Wcfx2!U(kJsCe#QN6qqh?UAG~5rX9_&A z#x%yREp3A<aq%tGlRiW>oSE@cNAh7CIvR;th{v{N1n~{Lg!Axy&JSs4OgRkd zU`%)BzF9{)&H1&RjTuRKY8S@86q(<<8uJPUcW0ile-DO=3%=^f&LH;mF=i{K#T)ZI z4YcXUG!Ta*a4ptKG^Qfu7qrUmVtAIJz0M+~+d{KA{eLgGZ? zP-C`p;>Y2}OvSk)?Donx$}YALWR^@BEQKSnG_FJ~t^=r%d4T~KINFY6Nz~NTMD3!w zsOuVI1@sOgqd81-6;``=BWm$%Mjp~^L2a{wW9*c4dEH(&1hx1^pcdZ*+)uq3n2`sI z8^@?n-Zqu#LN999ypNT&|BsWYL_r4L2Aa#Ns3)w8#W4YO;dCsATip3et~@hS$ksQN zQTu!lhT@yf^{DIjqqg}y)JPSds9i!(lZ=M84d%u)%#53`0H&iB-yu}PXHZZ4Cw9hv zkp*o!PqN#012!SPj+%60X zIWs@H@+?#BjjN(YtT7hDSoFhWRL4f3Iy?n+zojl-GnMhzs!XRqPr4J;z;~!2zk^y6 zPf$G}-&f8){1Yr`w(vMy-YNsE#y7oo|mpIKVl{oliqO@g~fSyRjS|KrKq|?__ktuo<=> z3iYn;i?uKf^#rF;PjJoo7}en{Gwt<3s3)p~>QGbEjk}^cJP6g{$*6V~BK5px9U1j} zhw~(=;$75Qc!p{yY?fUERWKWIU5v&Utb#L9Q}HEgpC3YX#LTu2kPp@2;+O@iVNUJ; zdStRw5Q{~zv#anrs-ekP8Fye-yp8JEAJ`BJ&aoZtf_k!7(I3aUcoOP{i(LFRs-2H8 zQu}`gnHqQn*JI(i_JTdAp*x7x@DloAzIk?v3S%AO_NWfdL(TDCER6?I5A+C2V!rwI zK6Oy&Ben36Z1B^q@0%JyDYaEORP#vna&<=5JY)0Gy^@Q_L zBe4S2&KlH+rlUG|Ya!#W9tSM4b5j^qu`Fst>S0+Ni4}1T2I2{9fxlvXthm_TFd1_a zkHG+(hEcd2%j0pZiZ3uDR$0RMt0z%Q?1jBCn0T;@XJ8THx3C(1hHCf@mckd#l1uGS zw?chJ40Z8b3@84?m7l;$#1By0KHU43{gi8lVH6BREv}iUx%&{+;4xH3?qN9QSY}72 zJnDth6*Y3bP*XP)wdiKKcrnHhf9%Tta(c~jJ9k-84Hd!y7>at*YN#QP!9v&_HN+!a z`DD}_FU1PD67>Lwu`52nC~UF9ehg1U)%yThJ6>~+OfCv8p>B8|bE7BC-Y74I5Qkwn z*2Qwz6LsB8%z?{M^){eJYCjgnE2s`W$2^$nZF_xwETH`#O-48DiZw9_^Wj=l!`o5s zhp#aNk7F?2!|IrIrQLQ7oH3{oYmGIqA8PTXq1MnrSN;NIfi3}HFle}MorNeRD+*l81BaeyozP8`C204eKNrtHjo@a~oF71~oqtdd zSZF;v35$Elv?n8*;3?FbtJ>X3wOV&zIlPX#LE!tg!3J2GcmS&5`7ZtfRqqtSf-_JZ+=ZIL`?lO`N^PP^AA^EajdgG@R>kM28&&?$ zZp#GJ1Fb-{cL-zf88*TuA1P-3r;$-lk77g2@v$`yRX!J+;$duz0iW0}9-UAPEk{k= zd907&pW5qtqdK}8i{ojGz^9lK!?v(?xW6e+CJ(m39vF|ga5rjyA3;C-1$E&KRD*w_ zKL(}SCk@AF;x?%AMa~tNjd%?P;%3Z?d(f*JpCpq7ueuX=F*orG)IQF&)lN+WmM89j zhj22!fpOdH+BkullBXDn)jxA1fx2!rmcyf1694&(@z-K1w%uMBi`9tVL=Dw0EQ41t z6m#ydH!6z_h}&azT!d=)AeO+#SQmpow@=;$HG=&xJ0@Wej{KbQ*HF%*K=1T)%z?*H zH~bkZ;@_AR%j~p^wHj(j2V)@|gDr3Y>dDWe9>DJl`v7H8PuvMLvZPg0;IxrD6*RxO^S%`YVO_(3Iqv{>OB6t>y;$Nr-^9Frs zKTKL+Dg|w^0vO*8|z2+w}8Zy5mq^ldnZBvV&L!rmx4Fcu5%v+s%i$PLU& z48`wI4|W~Zf&BY*UoVZ2DNDg1Oz;@93=0!K|C$>U7y8CN@!JRN+Sr78(jBOV_o3=v zMorB>SP(tm+Ao z{^~%=89v$YL-fa9XYCLsVrk-3EPxwOi|tF)Ha&sa@S;0^3)OLR&R*}2oe7KJU)*pM z>dBMOb1m_i^NhcK2z>v7o#U`e)(WWYQ_tBRs}d)nI=B*Z;X2f|O~+t7fEDoyHpPI; zd^y1`SPDaap)NMT%=pAhMmI87Y{Lbx5Me0l9UX;QT+MMY9qor%h@V`wYr%7k5urQ) zf5Vc$vIelw4Q`adn07Z=JH-BX_@u<(yL{^5g?oI2qc`FK-%QEOdB}?9g2+d_c8Rb2 z!2-f}9#fecPJO~?5chk^tCf0d{^3=>8^Q}kopUva@<aDP*&pvSk3YB>{8 zZ>R;RZMhpO;A3Y*A&>9R><$=8d7ATc)T{Rl)1&QmsxD)DpJnD@#29t0K_QLzv9^-;NzAr9oFp&5KR>uH-BG-+Zqo$@m>P0sO zSK^WokJmS+RYUEZBw`*;3_{&76?NeZ)HX{)t^SW(yd8CeL#P|yM0NNXYI_D2@%VOA zG1U1wsHtv^zBgwPug#31AczxhVI+Qv8p89aDagm`suH$DZO2qpN0y<^uR%XNhk8|C zLT%$eTzSrLyGR33i!T!OV3oXNw1}czL0?qQM_^8T1GU%|pkB3WP)~3KH9}`lLwXhU zCNxFuh-63IAQDxt4r*#+P$Sga#oke5)bLzX&vrWZqMqnG)RP=Vb?gS}2_K^x%wEjn zdy^GM)h~~%GXQPP(#)P z^+esVC=PWlL`~sV)QJ4x;=8C9Q;w3>VyFkGiF%+|4A%Z1=uS+-lElkhyazScr;zuG zxqvP3GHQF3DP@Pc4^|}}it4~RSH251LWfa{^(Jaf{f1gA|DsoKqHLw@jq0J^P%)?* zOm^ivP%oB!s17{DGFUs(j!Yuz(`-EIiKn0z-3sRh=N42uyRk0bjb#6SOeV67?Z7$I zTwXexuEhO4n9o<>b!vGVpkP|F!t z-fQPBo&xRvNvMix*cZ3pSj=C+V}{{;)S}8z(avF3>_A)^wPsRLQ#Kd%!dZqDaWm@4 ze@0!Ot&&|!dA%-E64lc>SQ)2d4DLjYNQTPxd?>~e55ye!nR7qt0ghuMyp2&nc^x(7cTu~@8&=hhKxI^q+hQ?H#Auw3TCLxs*2Hbp(1usDL*5Zf6MIol_#SGz z{pjM1)$LSPb`C;yY$GydUUShEWQnp3G(a^t7&VtmQFFT&^-8{jS`#H|*u_>JwdxzA zhQ7Ot6R{(4Dr&W#LamjHs29|A^w<7>OhyenNA2(YHEmo5_0Eq*z4=m5t9vqP4ws>Z z@*ULnJBi)Vzm^@TzNqqLs1ZAi`u^alZQJq3g4+KfWVCpyq2{D1>Xq9WwHAh=hJG!o z=Vwv%Zej`i8}&j8tK%`@*a-EceNk&?AZj;FMYX#J^`Pg_t8H|jjOM;VU28O|L!D3! z4?w+`W}xbSf_jpNs3HFoHG==57GJ@7cB;B!E#igP1P`OWy5+5JM>eiL`@bs%6DZIe zoyAgk6*a`!8`v8JpyoUTwaOz<9d3ZyuI(`#2fFfEsHu7f^~Bp;d=ypxn)9CqUU!3r z_CqHGH8izQ9chJ{f>Ed&zK81QF4PUaMZM`Rpgvq~q3Y#tWQ|1Kupa8V4yX^i-l!2v z^^#EoORyfUK@IgK)Q$b4?S8L`+67Zk+wmiO4UeGe*J^Cf_d$)+Ow<}#gj%HQu{EB> zc38TJof_{rG94+{hFUb)o7(*!i0W|^hG8RTJZfYnx%hqOLFX;hyFF_&yM3FXcF!BT@N5zX!4emz`=_Ay>j%aD8t{XNa zUWVEw=TNIXD9+>iTd*T4PDAa6GgzJbn~+u>-w%iFP-|d;i;rP5;#{pgra5**UAPKW zeiiFunKmBZf54E08v3oM8~uizv3y&P?|;6ViVV3qg>A4*JNCaaSu z{Q$MS_M&cZ8MVlQyL!x0?101Y4ywFoH#^izu`KaP)W`S>)LMz{Zr9LQ)HdCST02Kk z?R&gEY(sT1f`XB#kKZ)Zt9Lh6#mlHU&)3t=d3RL#3Jk}i*a{zD9<1NXj!0|N_k@lZ zjD1lZnSgpw?|N6^Yggd}HsZuR)QD89P zAgY}wsP{|mcsn8mkvE~&G$Es*>x;T@E~>$=up$1An%io9?YGz3s5Q_WH9~DM5K~Zp zH@t}&fpw@U*oJEN8fwV%_p>jyHkhLQ-<^!M(J@pH?SMA!U zfqJp@#B#V22jL;qh}B54*T06E>*c5i+J<_w{(@>RaG))(k6sT2D@gq_@DE2345m;G zCXyPd0!LrcNSD8jv}M-%&hTNwHD3{{vD~CK#82Egag?%An49vm&K{1aW?M4mj|P6T2l5W1s{_-lP^ly z-{eb@AC5irOVKNf+ExmT_>NPPDZWJUPSW?J36$|+;5$}gZq;1Wr&1=b*26W@honrL zx#nuAYCT$EDVdJ=^7w;z8NoPLZ!G6-k{^d(ysU(yh)YvGk2II~lmDFCMp;AR=nRZn z3>9^-`+VPU^pUJ%BJpRWYNVe@IzDm!On!l{gdZNbz9i)riI2GR2i-ZXop8$9;TfDv z8cJU8i(g2?v};b2$;^rSm>-YfBAiCjJ6^|D(hlMqq=Te=zEXZ`Iil!znFAL8IBB;zeOrV-4Vn;;1*IUX(Mqb zQW?&dCnb@uf(KBCwrLh(9gV5~FD@YVRwVfE(T!lAD~q5)9hZOPWQY3R5#Rpjq6*a0 zi)=dQLP+1cy0s~5O3FvPfwY(uMLdi8Yi%8`8A0Y5gBe9pzt>&qs90l?`)k@s+`RM)|LJijx0zS))4 zz*VF>ByV$9VF(qbkmvh{??~X^Fw!&Pxtt3p-6cLw{3U4$@pIxwBppe_uj1>Z5~Q&t zf6Df|_8Ji{BE9Kivik3cz2-KV1Xp+mKOo&D?V!8|4d@6Zo`Zu)11U=-y-nE=(qi%r zu{us7O`%SH45Dl(=`iU5Wl=aChjZ@b5y!VSGmsNH_K+?p!;zmfi1N0+$o|vpKY6}V zm;$qc#(_PaH&kzS`)xSn&lFo8GrtB@&C~HN2 z7AcMkY7*-&jKAH5u9_LaIljxAzesKWbFKpw$`j}1d@A`W?i_z9nG?jXV|QG}dEfKj zBhayq6Q?kW6FUAR?nS;e`H`f{q^G13l>;vXnmNZLre$(5DGKUA3`nS4%C z0oOi7Uf=%*B8-9q?t;wZ>yXa5xGS~VkS|WzE%Mu4xyL!5vKyo^q-oSChasfi*;jSHpFYj+w6J#Qdp^<;EJC)|TiW!`-l7(XKB@cRBtY3eRe$pG@%umI@|Do!WGl3pcEa`h^3?q$!L zQ5H#R%K3LOjdRUOIzDyv-?5>|PMvQl%S;@Bg*E?^2?7Z+axy#lkK9F}#P7H~SyP$( zUYtqFLViE?;Y2a=wMjZW#1C--HgRPO$rmM+@zvlf4Ed|%vy$}x@iEb)T%>WNqojB$ z48lV+a2)fJbOe#gaW0nfjHJ50(*OHsK4pzLUkUq?bo}m2ciK`u#$4R@WkIORWaq>! zQVtsOBNZUu9+z`|0BJe#JYpU7EoLB2r0fd*Mk?*f|H4ce(r-t_WXzp3==JcF_(6#& z;iaoqN{CFaP({WJLU+NMlQeCyq)?9+{Y)-r#uVT*>{03{DIm zGAeQSsHDWv>62nM`ejHQkzO+Hu%}S#;R%VuQ;a3Nbh8$%TC{K8v`J+8Z>>6(TGVsY z(2Vh864MWj3U8aQQ)2Rn_>}O3r1;@UXnS$%+v)ycEs_TePfQt-65eRqi zhaRnxHK1K$%E-Zq$>9l!;YqfB`sy>M{d4_q<>W-JO&@VFCPPSKLQ(?lw6XfS)u?5Q nZjG9>ZXcQc`Q@AC-ugPHXGWG5gNKexOc^m`du%Sx&)xn9A2E_~ delta 14307 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 xSIUQ{ruTb2ZBSUxftVha7S\n" "Language-Team: BRITISH ENGLISH \n" @@ -1135,7 +1135,7 @@ msgstr "Datos en caché" msgid "camelized JSON data from the requested URL" msgstr "Datos JSON camelizados de la URL solicitada" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:252 msgid "only URLs starting with http(s):// are allowed" msgstr "Sólo se permiten URL que empiecen por http(s)://." @@ -2787,60 +2787,92 @@ msgstr "Quiénes somos" msgid "Django site admin" msgstr "Administrador del sitio Django" -#: engine/core/templates/admin/index.html:19 +#: engine/core/templates/admin/index.html:20 msgid "Dashboard" msgstr "Cuadro de mandos" -#: engine/core/templates/admin/index.html:25 +#: engine/core/templates/admin/index.html:27 msgid "Revenue (gross, 30d)" msgstr "Ingresos (brutos, 30d)" -#: engine/core/templates/admin/index.html:34 +#: engine/core/templates/admin/index.html:36 msgid "Revenue (net, 30d)" msgstr "Ingresos (netos, 30d)" -#: engine/core/templates/admin/index.html:43 +#: engine/core/templates/admin/index.html:45 msgid "Returns (30d)" msgstr "Devoluciones (30d)" -#: engine/core/templates/admin/index.html:52 +#: engine/core/templates/admin/index.html:54 msgid "Processed orders (30d)" msgstr "Pedidos procesados (30d)" -#: engine/core/templates/admin/index.html:65 -msgid "Sales vs Returns (30d)" -msgstr "Ventas frente a devoluciones (30d)" +#: engine/core/templates/admin/index.html:67 +msgid "Income overview" +msgstr "Resumen de ingresos" -#: engine/core/templates/admin/index.html:82 -msgid "Gross" -msgstr "Bruto" +#: engine/core/templates/admin/index.html:99 +#: engine/core/templates/admin/index.html:139 +msgid "Net" +msgstr "Ingresos netos" -#: engine/core/templates/admin/index.html:87 +#: engine/core/templates/admin/index.html:107 +#: engine/core/templates/admin/index.html:140 +msgid "Taxes" +msgstr "Impuestos" + +#: engine/core/templates/admin/index.html:115 +#: engine/core/templates/admin/index.html:141 msgid "Returns" msgstr "Devuelve" -#: engine/core/templates/admin/index.html:94 +#: engine/core/templates/admin/index.html:122 +msgid "Gross (pie total)" +msgstr "Ingresos brutos" + +#: engine/core/templates/admin/index.html:201 +#: engine/core/templates/admin/index.html:326 msgid "Not enough data for chart yet." msgstr "Aún no hay datos suficientes para el gráfico." -#: engine/core/templates/admin/index.html:103 +#: engine/core/templates/admin/index.html:210 msgid "Quick Links" msgstr "Enlaces rápidos" -#: engine/core/templates/admin/index.html:110 +#: engine/core/templates/admin/index.html:217 msgid "No links available." msgstr "No hay enlaces disponibles." -#: engine/core/templates/admin/index.html:119 +#: engine/core/templates/admin/index.html:225 +msgid "Daily sales (30d)" +msgstr "Ventas diarias (30d)" + +#: engine/core/templates/admin/index.html:254 +msgid "Orders (FINISHED)" +msgstr "Pedidos (FINALIZADOS)" + +#: engine/core/templates/admin/index.html:264 +msgid "Gross revenue" +msgstr "Ingresos brutos" + +#: engine/core/templates/admin/index.html:301 +msgid "Orders" +msgstr "Pedidos" + +#: engine/core/templates/admin/index.html:308 +msgid "Gross" +msgstr "Bruto" + +#: engine/core/templates/admin/index.html:334 msgid "Most wished product" msgstr "Producto más deseado" -#: engine/core/templates/admin/index.html:128 -#: engine/core/templates/admin/index.html:144 +#: engine/core/templates/admin/index.html:361 +#: engine/core/templates/admin/index.html:395 msgid "No data yet." msgstr "Aún no hay datos." -#: engine/core/templates/admin/index.html:135 +#: engine/core/templates/admin/index.html:368 msgid "Most popular product" msgstr "Producto más popular" @@ -3062,7 +3094,7 @@ msgstr "" "Las dimensiones de la imagen no deben superar w{max_width} x h{max_height} " "píxeles." -#: engine/core/views.py:77 +#: engine/core/views.py:86 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -3071,7 +3103,7 @@ msgstr "" " XML. Se asegura de que la respuesta incluya el encabezado de tipo de " "contenido apropiado para XML." -#: engine/core/views.py:92 +#: engine/core/views.py:101 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -3081,18 +3113,18 @@ msgstr "" "función procesa la solicitud, obtiene la respuesta detallada del mapa del " "sitio y establece el encabezado Content-Type para XML." -#: engine/core/views.py:127 +#: engine/core/views.py:136 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" "Devuelve una lista de los idiomas admitidos y su información " "correspondiente." -#: engine/core/views.py:159 +#: engine/core/views.py:168 msgid "Returns the parameters of the website as a JSON object." msgstr "Devuelve los parámetros del sitio web como un objeto JSON." -#: engine/core/views.py:178 +#: engine/core/views.py:187 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3100,11 +3132,11 @@ msgstr "" "Gestiona las operaciones de caché, como la lectura y el establecimiento de " "datos de caché con una clave y un tiempo de espera especificados." -#: engine/core/views.py:205 +#: engine/core/views.py:214 msgid "Handles `contact us` form submissions." msgstr "Gestiona los formularios de contacto." -#: engine/core/views.py:226 +#: engine/core/views.py:235 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -3112,15 +3144,15 @@ msgstr "" "Gestiona las solicitudes de procesamiento y validación de URL de las " "solicitudes POST entrantes." -#: engine/core/views.py:266 +#: engine/core/views.py:275 msgid "Handles global search queries." msgstr "Gestiona las consultas de búsqueda global." -#: engine/core/views.py:281 +#: engine/core/views.py:290 msgid "Handles the logic of buying as a business without registration." msgstr "Maneja la lógica de la compra como empresa sin registro." -#: engine/core/views.py:318 +#: engine/core/views.py:327 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3128,31 +3160,31 @@ msgstr "" "Gestiona la descarga de un activo digital asociado a un pedido.\n" "Esta función intenta servir el archivo del activo digital ubicado en el directorio de almacenamiento del proyecto. Si no se encuentra el archivo, se genera un error HTTP 404 para indicar que el recurso no está disponible." -#: engine/core/views.py:329 +#: engine/core/views.py:338 msgid "order_product_uuid is required" msgstr "order_product_uuid es obligatorio" -#: engine/core/views.py:336 +#: engine/core/views.py:345 msgid "order product does not exist" msgstr "pedir producto no existe" -#: engine/core/views.py:339 +#: engine/core/views.py:348 msgid "you can only download the digital asset once" msgstr "Sólo puede descargar el activo digital una vez" -#: engine/core/views.py:342 +#: engine/core/views.py:351 msgid "the order must be paid before downloading the digital asset" msgstr "el pedido debe pagarse antes de descargar el activo digital" -#: engine/core/views.py:348 +#: engine/core/views.py:357 msgid "the order product does not have a product" msgstr "El producto del pedido no tiene un producto" -#: engine/core/views.py:385 +#: engine/core/views.py:394 msgid "favicon not found" msgstr "favicon no encontrado" -#: engine/core/views.py:390 +#: engine/core/views.py:399 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3160,7 +3192,7 @@ msgstr "" "Gestiona las peticiones del favicon de un sitio web.\n" "Esta función intenta servir el archivo favicon ubicado en el directorio estático del proyecto. Si no se encuentra el archivo favicon, se genera un error HTTP 404 para indicar que el recurso no está disponible." -#: engine/core/views.py:402 +#: engine/core/views.py:411 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3171,11 +3203,11 @@ msgstr "" "de la interfaz de administración de Django. Utiliza la función `redirect` de" " Django para gestionar la redirección HTTP." -#: engine/core/views.py:415 +#: engine/core/views.py:424 msgid "Returns current version of the eVibes. " msgstr "Devuelve la versión actual del eVibes." -#: engine/core/views.py:494 +#: engine/core/views.py:587 msgid "Returns custom variables for Dashboard. " msgstr "Devuelve variables personalizadas para Dashboard." diff --git a/engine/core/locale/fa_IR/LC_MESSAGES/django.po b/engine/core/locale/fa_IR/LC_MESSAGES/django.po index 8342cd77..2966e333 100644 --- a/engine/core/locale/fa_IR/LC_MESSAGES/django.po +++ b/engine/core/locale/fa_IR/LC_MESSAGES/django.po @@ -2,12 +2,12 @@ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. -# +# msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-16 15:38+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -1049,7 +1049,7 @@ msgstr "" msgid "camelized JSON data from the requested URL" msgstr "" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:252 msgid "only URLs starting with http(s):// are allowed" msgstr "" @@ -2530,60 +2530,92 @@ msgstr "" msgid "Django site admin" msgstr "" -#: engine/core/templates/admin/index.html:19 +#: engine/core/templates/admin/index.html:20 msgid "Dashboard" msgstr "" -#: engine/core/templates/admin/index.html:25 +#: engine/core/templates/admin/index.html:27 msgid "Revenue (gross, 30d)" msgstr "" -#: engine/core/templates/admin/index.html:34 +#: engine/core/templates/admin/index.html:36 msgid "Revenue (net, 30d)" msgstr "" -#: engine/core/templates/admin/index.html:43 +#: engine/core/templates/admin/index.html:45 msgid "Returns (30d)" msgstr "" -#: engine/core/templates/admin/index.html:52 +#: engine/core/templates/admin/index.html:54 msgid "Processed orders (30d)" msgstr "" -#: engine/core/templates/admin/index.html:65 -msgid "Sales vs Returns (30d)" +#: engine/core/templates/admin/index.html:67 +msgid "Income overview" msgstr "" -#: engine/core/templates/admin/index.html:82 -msgid "Gross" +#: engine/core/templates/admin/index.html:99 +#: engine/core/templates/admin/index.html:139 +msgid "Net" msgstr "" -#: engine/core/templates/admin/index.html:87 +#: engine/core/templates/admin/index.html:107 +#: engine/core/templates/admin/index.html:140 +msgid "Taxes" +msgstr "" + +#: engine/core/templates/admin/index.html:115 +#: engine/core/templates/admin/index.html:141 msgid "Returns" msgstr "" -#: engine/core/templates/admin/index.html:94 +#: engine/core/templates/admin/index.html:122 +msgid "Gross (pie total)" +msgstr "" + +#: engine/core/templates/admin/index.html:201 +#: engine/core/templates/admin/index.html:326 msgid "Not enough data for chart yet." msgstr "" -#: engine/core/templates/admin/index.html:103 +#: engine/core/templates/admin/index.html:210 msgid "Quick Links" msgstr "" -#: engine/core/templates/admin/index.html:110 +#: engine/core/templates/admin/index.html:217 msgid "No links available." msgstr "" -#: engine/core/templates/admin/index.html:119 +#: engine/core/templates/admin/index.html:225 +msgid "Daily sales (30d)" +msgstr "" + +#: engine/core/templates/admin/index.html:254 +msgid "Orders (FINISHED)" +msgstr "" + +#: engine/core/templates/admin/index.html:264 +msgid "Gross revenue" +msgstr "" + +#: engine/core/templates/admin/index.html:301 +msgid "Orders" +msgstr "" + +#: engine/core/templates/admin/index.html:308 +msgid "Gross" +msgstr "" + +#: engine/core/templates/admin/index.html:334 msgid "Most wished product" msgstr "" -#: engine/core/templates/admin/index.html:128 -#: engine/core/templates/admin/index.html:144 +#: engine/core/templates/admin/index.html:361 +#: engine/core/templates/admin/index.html:395 msgid "No data yet." msgstr "" -#: engine/core/templates/admin/index.html:135 +#: engine/core/templates/admin/index.html:368 msgid "Most popular product" msgstr "" @@ -2788,53 +2820,53 @@ msgstr "" msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" -#: engine/core/views.py:77 +#: engine/core/views.py:86 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." msgstr "" -#: engine/core/views.py:92 +#: engine/core/views.py:101 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " "Content-Type header for XML." msgstr "" -#: engine/core/views.py:127 +#: engine/core/views.py:136 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" -#: engine/core/views.py:159 +#: engine/core/views.py:168 msgid "Returns the parameters of the website as a JSON object." msgstr "" -#: engine/core/views.py:178 +#: engine/core/views.py:187 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." msgstr "" -#: engine/core/views.py:205 +#: engine/core/views.py:214 msgid "Handles `contact us` form submissions." msgstr "" -#: engine/core/views.py:226 +#: engine/core/views.py:235 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." msgstr "" -#: engine/core/views.py:266 +#: engine/core/views.py:275 msgid "Handles global search queries." msgstr "" -#: engine/core/views.py:281 +#: engine/core/views.py:290 msgid "Handles the logic of buying as a business without registration." msgstr "" -#: engine/core/views.py:318 +#: engine/core/views.py:327 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the " @@ -2842,31 +2874,31 @@ msgid "" "error is raised to indicate the resource is unavailable." msgstr "" -#: engine/core/views.py:329 +#: engine/core/views.py:338 msgid "order_product_uuid is required" msgstr "" -#: engine/core/views.py:336 +#: engine/core/views.py:345 msgid "order product does not exist" msgstr "" -#: engine/core/views.py:339 +#: engine/core/views.py:348 msgid "you can only download the digital asset once" msgstr "" -#: engine/core/views.py:342 +#: engine/core/views.py:351 msgid "the order must be paid before downloading the digital asset" msgstr "" -#: engine/core/views.py:348 +#: engine/core/views.py:357 msgid "the order product does not have a product" msgstr "" -#: engine/core/views.py:385 +#: engine/core/views.py:394 msgid "favicon not found" msgstr "" -#: engine/core/views.py:390 +#: engine/core/views.py:399 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static " @@ -2874,18 +2906,18 @@ msgid "" "error is raised to indicate the resource is unavailable." msgstr "" -#: engine/core/views.py:402 +#: engine/core/views.py:411 msgid "" "Redirects the request to the admin index page. The function handles incoming " "HTTP requests and redirects them to the Django admin interface index page. " "It uses Django's `redirect` function for handling the HTTP redirection." msgstr "" -#: engine/core/views.py:415 +#: engine/core/views.py:424 msgid "Returns current version of the eVibes. " msgstr "" -#: engine/core/views.py:494 +#: engine/core/views.py:587 msgid "Returns custom variables for Dashboard. " msgstr "" diff --git a/engine/core/locale/fr_FR/LC_MESSAGES/django.mo b/engine/core/locale/fr_FR/LC_MESSAGES/django.mo index f562baa2bb284b5c0e2e4361c42e85a8c6e709d0..3133a923f8dfac09fbaf2e5227cf7db95a91775b 100644 GIT binary patch delta 14580 zcmZA82Yk&}{QvQDW5gDT6)PbUi5U{HSBw}XA!cn7TdYu}Tw77pC^d^3wP`4ARVg*w zqE%X2YPF?Ciz-$6d%f>D{{Q}d-^b&4p3gbw`~9Bp8Q*(d?V4Y++`E;qHP1zTbu zCL@Y*;1dhj^ zxDHF8e*$5y)~ejZuqjJceNY zM8cakvpE{Bsljvv^W+NWcni0gwcp2y7M(T&OF{V5Q zw>73SbKj&Lou+O%Ti|Yt#WS(On2EAfOG6FR<)ls{s zHtM{FSP{L0$Y>6ixdy9TyaBa%wjd8_-bZb-LZj`JbbQsGHw3l#(ou_VJRYLm49vuX zwH(W+P~LhR(}iBtuGxr{wf|3(iKf7hw}Iv|2K9usF$_~sC%%s5@qJf+*_HbL5)<{1nm-n>SQ#uNthRxp+9cMf|!9?d?!#BK973hKd}S; zi!5l>#-5>�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 ZRQj0VV@J6wmwZ*wGh\n" "Language-Team: BRITISH ENGLISH \n" @@ -1156,7 +1156,7 @@ msgstr "Données mises en cache" msgid "camelized JSON data from the requested URL" msgstr "Données JSON camélisées provenant de l'URL demandée" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:252 msgid "only URLs starting with http(s):// are allowed" msgstr "Seuls les URL commençant par http(s):// sont autorisés." @@ -2839,60 +2839,92 @@ msgstr "À propos de nous" msgid "Django site admin" msgstr "Administrateur de site Django" -#: engine/core/templates/admin/index.html:19 +#: engine/core/templates/admin/index.html:20 msgid "Dashboard" msgstr "Tableau de bord" -#: engine/core/templates/admin/index.html:25 +#: engine/core/templates/admin/index.html:27 msgid "Revenue (gross, 30d)" msgstr "Revenue (gross, 30d)" -#: engine/core/templates/admin/index.html:34 +#: engine/core/templates/admin/index.html:36 msgid "Revenue (net, 30d)" msgstr "Revenue (net, 30d)" -#: engine/core/templates/admin/index.html:43 +#: engine/core/templates/admin/index.html:45 msgid "Returns (30d)" msgstr "Retours (30j)" -#: engine/core/templates/admin/index.html:52 +#: engine/core/templates/admin/index.html:54 msgid "Processed orders (30d)" msgstr "Commandes traitées (30j)" -#: engine/core/templates/admin/index.html:65 -msgid "Sales vs Returns (30d)" -msgstr "Ventes et retours (30d)" +#: engine/core/templates/admin/index.html:67 +msgid "Income overview" +msgstr "Aperçu des revenus" -#: engine/core/templates/admin/index.html:82 -msgid "Gross" -msgstr "Brut" +#: engine/core/templates/admin/index.html:99 +#: engine/core/templates/admin/index.html:139 +msgid "Net" +msgstr "Net revenue" -#: engine/core/templates/admin/index.html:87 +#: engine/core/templates/admin/index.html:107 +#: engine/core/templates/admin/index.html:140 +msgid "Taxes" +msgstr "Impôts" + +#: engine/core/templates/admin/index.html:115 +#: engine/core/templates/admin/index.html:141 msgid "Returns" msgstr "Retours" -#: engine/core/templates/admin/index.html:94 +#: engine/core/templates/admin/index.html:122 +msgid "Gross (pie total)" +msgstr "Recettes brutes" + +#: engine/core/templates/admin/index.html:201 +#: engine/core/templates/admin/index.html:326 msgid "Not enough data for chart yet." msgstr "Il n'y a pas encore assez de données pour établir un graphique." -#: engine/core/templates/admin/index.html:103 +#: engine/core/templates/admin/index.html:210 msgid "Quick Links" msgstr "Liens rapides" -#: engine/core/templates/admin/index.html:110 +#: engine/core/templates/admin/index.html:217 msgid "No links available." msgstr "Aucun lien n'est disponible." -#: engine/core/templates/admin/index.html:119 +#: engine/core/templates/admin/index.html:225 +msgid "Daily sales (30d)" +msgstr "Ventes quotidiennes (30j)" + +#: engine/core/templates/admin/index.html:254 +msgid "Orders (FINISHED)" +msgstr "Commandes (FINIES)" + +#: engine/core/templates/admin/index.html:264 +msgid "Gross revenue" +msgstr "Recettes brutes" + +#: engine/core/templates/admin/index.html:301 +msgid "Orders" +msgstr "Commandes" + +#: engine/core/templates/admin/index.html:308 +msgid "Gross" +msgstr "Brut" + +#: engine/core/templates/admin/index.html:334 msgid "Most wished product" msgstr "Produit le plus souhaité" -#: engine/core/templates/admin/index.html:128 -#: engine/core/templates/admin/index.html:144 +#: engine/core/templates/admin/index.html:361 +#: engine/core/templates/admin/index.html:395 msgid "No data yet." msgstr "Pas encore de données." -#: engine/core/templates/admin/index.html:135 +#: engine/core/templates/admin/index.html:368 msgid "Most popular product" msgstr "Produit le plus populaire" @@ -3117,7 +3149,7 @@ msgstr "" "Les dimensions de l'image ne doivent pas dépasser w{max_width} x " "h{max_height} pixels." -#: engine/core/views.py:77 +#: engine/core/views.py:86 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -3125,7 +3157,7 @@ msgstr "" "Gère la demande d'index sitemap et renvoie une réponse XML. Il s'assure que " "la réponse inclut l'en-tête de type de contenu approprié pour XML." -#: engine/core/views.py:92 +#: engine/core/views.py:101 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -3135,18 +3167,18 @@ msgstr "" "demande, récupère la réponse détaillée appropriée du plan du site et définit" " l'en-tête Content-Type pour XML." -#: engine/core/views.py:127 +#: engine/core/views.py:136 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" "Renvoie une liste des langues prises en charge et des informations " "correspondantes." -#: engine/core/views.py:159 +#: engine/core/views.py:168 msgid "Returns the parameters of the website as a JSON object." msgstr "Renvoie les paramètres du site web sous la forme d'un objet JSON." -#: engine/core/views.py:178 +#: engine/core/views.py:187 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3154,11 +3186,11 @@ msgstr "" "Gère les opérations de cache telles que la lecture et la définition des " "données de cache avec une clé et un délai spécifiés." -#: engine/core/views.py:205 +#: engine/core/views.py:214 msgid "Handles `contact us` form submissions." msgstr "Gère les soumissions du formulaire `contact us`." -#: engine/core/views.py:226 +#: engine/core/views.py:235 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -3166,15 +3198,15 @@ msgstr "" "Gère les demandes de traitement et de validation des URL à partir des " "requêtes POST entrantes." -#: engine/core/views.py:266 +#: engine/core/views.py:275 msgid "Handles global search queries." msgstr "Traite les demandes de recherche globales." -#: engine/core/views.py:281 +#: engine/core/views.py:290 msgid "Handles the logic of buying as a business without registration." msgstr "Gère la logique de l'achat en tant qu'entreprise sans enregistrement." -#: engine/core/views.py:318 +#: engine/core/views.py:327 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3182,31 +3214,31 @@ msgstr "" "Gère le téléchargement d'un bien numérique associé à une commande.\n" "Cette fonction tente de servir le fichier de ressource numérique situé dans le répertoire de stockage du projet. Si le fichier n'est pas trouvé, une erreur HTTP 404 est générée pour indiquer que la ressource n'est pas disponible." -#: engine/core/views.py:329 +#: engine/core/views.py:338 msgid "order_product_uuid is required" msgstr "order_product_uuid est obligatoire" -#: engine/core/views.py:336 +#: engine/core/views.py:345 msgid "order product does not exist" msgstr "le produit de la commande n'existe pas" -#: engine/core/views.py:339 +#: engine/core/views.py:348 msgid "you can only download the digital asset once" msgstr "Vous ne pouvez télécharger le bien numérique qu'une seule fois" -#: engine/core/views.py:342 +#: engine/core/views.py:351 msgid "the order must be paid before downloading the digital asset" msgstr "la commande doit être payée avant le téléchargement du bien numérique" -#: engine/core/views.py:348 +#: engine/core/views.py:357 msgid "the order product does not have a product" msgstr "Le produit de la commande n'a pas de produit" -#: engine/core/views.py:385 +#: engine/core/views.py:394 msgid "favicon not found" msgstr "favicon introuvable" -#: engine/core/views.py:390 +#: engine/core/views.py:399 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3214,7 +3246,7 @@ msgstr "" "Gère les demandes de favicon d'un site web.\n" "Cette fonction tente de servir le fichier favicon situé dans le répertoire statique du projet. Si le fichier favicon n'est pas trouvé, une erreur HTTP 404 est générée pour indiquer que la ressource n'est pas disponible." -#: engine/core/views.py:402 +#: engine/core/views.py:411 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3225,11 +3257,11 @@ msgstr "" " d'index de l'interface d'administration de Django. Elle utilise la fonction" " `redirect` de Django pour gérer la redirection HTTP." -#: engine/core/views.py:415 +#: engine/core/views.py:424 msgid "Returns current version of the eVibes. " msgstr "Renvoie la version actuelle d'eVibes." -#: engine/core/views.py:494 +#: engine/core/views.py:587 msgid "Returns custom variables for Dashboard. " msgstr "Renvoie les variables personnalisées pour le tableau de bord." diff --git a/engine/core/locale/he_IL/LC_MESSAGES/django.mo b/engine/core/locale/he_IL/LC_MESSAGES/django.mo index fa608b54ea9cd913e2b63cf0e87e806cf058866a..52ebef9da240ae11441e3a652ec16443fcc82fe7 100644 GIT binary patch delta 14623 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\n" "Language-Team: BRITISH ENGLISH \n" @@ -1072,7 +1072,7 @@ msgstr "נתונים במטמון" msgid "camelized JSON data from the requested URL" msgstr "נתוני JSON שעברו קמלאיזציה מה-URL המבוקש" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:252 msgid "only URLs starting with http(s):// are allowed" msgstr "רק כתובות URL המתחילות ב-http(s):// מותרות" @@ -2649,60 +2649,92 @@ msgstr "אודות" msgid "Django site admin" msgstr "מנהל אתר Django" -#: engine/core/templates/admin/index.html:19 +#: engine/core/templates/admin/index.html:20 msgid "Dashboard" msgstr "לוח מחוונים" -#: engine/core/templates/admin/index.html:25 +#: engine/core/templates/admin/index.html:27 msgid "Revenue (gross, 30d)" msgstr "הכנסה (ברוטו, 30 יום)" -#: engine/core/templates/admin/index.html:34 +#: engine/core/templates/admin/index.html:36 msgid "Revenue (net, 30d)" msgstr "הכנסות (נטו, 30 יום)" -#: engine/core/templates/admin/index.html:43 +#: engine/core/templates/admin/index.html:45 msgid "Returns (30d)" msgstr "החזרות (30 יום)" -#: engine/core/templates/admin/index.html:52 +#: engine/core/templates/admin/index.html:54 msgid "Processed orders (30d)" msgstr "הזמנות מעובדות (30 יום)" -#: engine/core/templates/admin/index.html:65 -msgid "Sales vs Returns (30d)" -msgstr "מכירות לעומת החזרות (30 יום)" +#: engine/core/templates/admin/index.html:67 +msgid "Income overview" +msgstr "סקירת הכנסות" -#: engine/core/templates/admin/index.html:82 -msgid "Gross" -msgstr "גרוס" +#: engine/core/templates/admin/index.html:99 +#: engine/core/templates/admin/index.html:139 +msgid "Net" +msgstr "הכנסות נטו" -#: engine/core/templates/admin/index.html:87 +#: engine/core/templates/admin/index.html:107 +#: engine/core/templates/admin/index.html:140 +msgid "Taxes" +msgstr "מסים" + +#: engine/core/templates/admin/index.html:115 +#: engine/core/templates/admin/index.html:141 msgid "Returns" msgstr "החזרות" -#: engine/core/templates/admin/index.html:94 +#: engine/core/templates/admin/index.html:122 +msgid "Gross (pie total)" +msgstr "הכנסות ברוטו" + +#: engine/core/templates/admin/index.html:201 +#: engine/core/templates/admin/index.html:326 msgid "Not enough data for chart yet." msgstr "אין מספיק נתונים כדי ליצור תרשים." -#: engine/core/templates/admin/index.html:103 +#: engine/core/templates/admin/index.html:210 msgid "Quick Links" msgstr "קישורים מהירים" -#: engine/core/templates/admin/index.html:110 +#: engine/core/templates/admin/index.html:217 msgid "No links available." msgstr "אין קישורים זמינים." -#: engine/core/templates/admin/index.html:119 +#: engine/core/templates/admin/index.html:225 +msgid "Daily sales (30d)" +msgstr "מכירות יומיות (30 יום)" + +#: engine/core/templates/admin/index.html:254 +msgid "Orders (FINISHED)" +msgstr "הזמנות (הושלמו)" + +#: engine/core/templates/admin/index.html:264 +msgid "Gross revenue" +msgstr "הכנסות ברוטו" + +#: engine/core/templates/admin/index.html:301 +msgid "Orders" +msgstr "הזמנות" + +#: engine/core/templates/admin/index.html:308 +msgid "Gross" +msgstr "גרוס" + +#: engine/core/templates/admin/index.html:334 msgid "Most wished product" msgstr "המוצר המבוקש ביותר" -#: engine/core/templates/admin/index.html:128 -#: engine/core/templates/admin/index.html:144 +#: engine/core/templates/admin/index.html:361 +#: engine/core/templates/admin/index.html:395 msgid "No data yet." msgstr "אין עדיין נתונים." -#: engine/core/templates/admin/index.html:135 +#: engine/core/templates/admin/index.html:368 msgid "Most popular product" msgstr "המוצר הפופולרי ביותר" @@ -2908,7 +2940,7 @@ msgstr "יש להגדיר את הפרמטר NOMINATIM_URL!" msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "מידות התמונה לא יעלו על w{max_width} x h{max_height} פיקסלים!" -#: engine/core/views.py:77 +#: engine/core/views.py:86 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -2916,7 +2948,7 @@ msgstr "" "מטפל בבקשה לאינדקס מפת האתר ומחזיר תגובה בפורמט XML. הוא מבטיח שהתגובה תכלול" " את כותרת סוג התוכן המתאימה ל-XML." -#: engine/core/views.py:92 +#: engine/core/views.py:101 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -2925,41 +2957,41 @@ msgstr "" "מטפל בתגובה לתצוגה מפורטת של מפת אתר. פונקציה זו מעבדת את הבקשה, משיגה את " "התגובה המתאימה לפרטי מפת האתר, וקובעת את כותרת Content-Type עבור XML." -#: engine/core/views.py:127 +#: engine/core/views.py:136 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "מחזיר רשימה של שפות נתמכות והמידע המתאים להן." -#: engine/core/views.py:159 +#: engine/core/views.py:168 msgid "Returns the parameters of the website as a JSON object." msgstr "מחזיר את הפרמטרים של האתר כאובייקט JSON." -#: engine/core/views.py:178 +#: engine/core/views.py:187 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." msgstr "" "מטפל בפעולות מטמון כגון קריאה והגדרת נתוני מטמון עם מפתח וזמן המתנה מוגדרים." -#: engine/core/views.py:205 +#: engine/core/views.py:214 msgid "Handles `contact us` form submissions." msgstr "מטפל בהגשת טפסי \"צור קשר\"." -#: engine/core/views.py:226 +#: engine/core/views.py:235 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." msgstr "מטפל בבקשות לעיבוד ואימות כתובות URL מבקשות POST נכנסות." -#: engine/core/views.py:266 +#: engine/core/views.py:275 msgid "Handles global search queries." msgstr "מטפל בשאילתות חיפוש גלובליות." -#: engine/core/views.py:281 +#: engine/core/views.py:290 msgid "Handles the logic of buying as a business without registration." msgstr "מטפל בהיגיון הרכישה כעסק ללא רישום." -#: engine/core/views.py:318 +#: engine/core/views.py:327 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -2968,31 +3000,31 @@ msgstr "" "הדיגיטלי הנמצא בספריית האחסון של הפרויקט. אם הקובץ לא נמצא, מתקבלת שגיאת " "HTTP 404 המציינת שהמשאב אינו זמין." -#: engine/core/views.py:329 +#: engine/core/views.py:338 msgid "order_product_uuid is required" msgstr "order_product_uuid נדרש" -#: engine/core/views.py:336 +#: engine/core/views.py:345 msgid "order product does not exist" msgstr "המוצר שהוזמן אינו קיים" -#: engine/core/views.py:339 +#: engine/core/views.py:348 msgid "you can only download the digital asset once" msgstr "ניתן להוריד את הנכס הדיגיטלי פעם אחת בלבד" -#: engine/core/views.py:342 +#: engine/core/views.py:351 msgid "the order must be paid before downloading the digital asset" msgstr "יש לשלם את ההזמנה לפני הורדת הנכס הדיגיטלי" -#: engine/core/views.py:348 +#: engine/core/views.py:357 msgid "the order product does not have a product" msgstr "למוצר ההזמנה אין מוצר" -#: engine/core/views.py:385 +#: engine/core/views.py:394 msgid "favicon not found" msgstr "לא נמצא סמל מועדף" -#: engine/core/views.py:390 +#: engine/core/views.py:399 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3001,7 +3033,7 @@ msgstr "" "המועדף הנמצא בספרייה הסטטית של הפרויקט. אם קובץ הסמל המועדף לא נמצא, מתקבלת " "שגיאת HTTP 404 המציינת שהמשאב אינו זמין." -#: engine/core/views.py:402 +#: engine/core/views.py:411 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3011,11 +3043,11 @@ msgstr "" " אותן לדף האינדקס של ממשק המנהל של Django. היא משתמשת בפונקציית `redirect` " "של Django לטיפול בהפניה HTTP." -#: engine/core/views.py:415 +#: engine/core/views.py:424 msgid "Returns current version of the eVibes. " msgstr "מחזיר את הגרסה הנוכחית של eVibes." -#: engine/core/views.py:494 +#: engine/core/views.py:587 msgid "Returns custom variables for Dashboard. " msgstr "מחזיר משתנים מותאמים אישית עבור לוח המחוונים." diff --git a/engine/core/locale/hi_IN/LC_MESSAGES/django.po b/engine/core/locale/hi_IN/LC_MESSAGES/django.po index 23915302..c1636ac3 100644 --- a/engine/core/locale/hi_IN/LC_MESSAGES/django.po +++ b/engine/core/locale/hi_IN/LC_MESSAGES/django.po @@ -2,12 +2,12 @@ # Copyright (C) 2025 EGOR GORBUNOV # This file is distributed under the same license as the EVIBES package. # EGOR GORBUNOV , 2025. -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-16 15:38+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -1049,7 +1049,7 @@ msgstr "" msgid "camelized JSON data from the requested URL" msgstr "" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:252 msgid "only URLs starting with http(s):// are allowed" msgstr "" @@ -2530,60 +2530,92 @@ msgstr "" msgid "Django site admin" msgstr "" -#: engine/core/templates/admin/index.html:19 +#: engine/core/templates/admin/index.html:20 msgid "Dashboard" msgstr "" -#: engine/core/templates/admin/index.html:25 +#: engine/core/templates/admin/index.html:27 msgid "Revenue (gross, 30d)" msgstr "" -#: engine/core/templates/admin/index.html:34 +#: engine/core/templates/admin/index.html:36 msgid "Revenue (net, 30d)" msgstr "" -#: engine/core/templates/admin/index.html:43 +#: engine/core/templates/admin/index.html:45 msgid "Returns (30d)" msgstr "" -#: engine/core/templates/admin/index.html:52 +#: engine/core/templates/admin/index.html:54 msgid "Processed orders (30d)" msgstr "" -#: engine/core/templates/admin/index.html:65 -msgid "Sales vs Returns (30d)" +#: engine/core/templates/admin/index.html:67 +msgid "Income overview" msgstr "" -#: engine/core/templates/admin/index.html:82 -msgid "Gross" +#: engine/core/templates/admin/index.html:99 +#: engine/core/templates/admin/index.html:139 +msgid "Net" msgstr "" -#: engine/core/templates/admin/index.html:87 +#: engine/core/templates/admin/index.html:107 +#: engine/core/templates/admin/index.html:140 +msgid "Taxes" +msgstr "" + +#: engine/core/templates/admin/index.html:115 +#: engine/core/templates/admin/index.html:141 msgid "Returns" msgstr "" -#: engine/core/templates/admin/index.html:94 +#: engine/core/templates/admin/index.html:122 +msgid "Gross (pie total)" +msgstr "" + +#: engine/core/templates/admin/index.html:201 +#: engine/core/templates/admin/index.html:326 msgid "Not enough data for chart yet." msgstr "" -#: engine/core/templates/admin/index.html:103 +#: engine/core/templates/admin/index.html:210 msgid "Quick Links" msgstr "" -#: engine/core/templates/admin/index.html:110 +#: engine/core/templates/admin/index.html:217 msgid "No links available." msgstr "" -#: engine/core/templates/admin/index.html:119 +#: engine/core/templates/admin/index.html:225 +msgid "Daily sales (30d)" +msgstr "" + +#: engine/core/templates/admin/index.html:254 +msgid "Orders (FINISHED)" +msgstr "" + +#: engine/core/templates/admin/index.html:264 +msgid "Gross revenue" +msgstr "" + +#: engine/core/templates/admin/index.html:301 +msgid "Orders" +msgstr "" + +#: engine/core/templates/admin/index.html:308 +msgid "Gross" +msgstr "" + +#: engine/core/templates/admin/index.html:334 msgid "Most wished product" msgstr "" -#: engine/core/templates/admin/index.html:128 -#: engine/core/templates/admin/index.html:144 +#: engine/core/templates/admin/index.html:361 +#: engine/core/templates/admin/index.html:395 msgid "No data yet." msgstr "" -#: engine/core/templates/admin/index.html:135 +#: engine/core/templates/admin/index.html:368 msgid "Most popular product" msgstr "" @@ -2788,53 +2820,53 @@ msgstr "" msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" -#: engine/core/views.py:77 +#: engine/core/views.py:86 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." msgstr "" -#: engine/core/views.py:92 +#: engine/core/views.py:101 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " "Content-Type header for XML." msgstr "" -#: engine/core/views.py:127 +#: engine/core/views.py:136 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" -#: engine/core/views.py:159 +#: engine/core/views.py:168 msgid "Returns the parameters of the website as a JSON object." msgstr "" -#: engine/core/views.py:178 +#: engine/core/views.py:187 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." msgstr "" -#: engine/core/views.py:205 +#: engine/core/views.py:214 msgid "Handles `contact us` form submissions." msgstr "" -#: engine/core/views.py:226 +#: engine/core/views.py:235 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." msgstr "" -#: engine/core/views.py:266 +#: engine/core/views.py:275 msgid "Handles global search queries." msgstr "" -#: engine/core/views.py:281 +#: engine/core/views.py:290 msgid "Handles the logic of buying as a business without registration." msgstr "" -#: engine/core/views.py:318 +#: engine/core/views.py:327 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the " @@ -2842,31 +2874,31 @@ msgid "" "error is raised to indicate the resource is unavailable." msgstr "" -#: engine/core/views.py:329 +#: engine/core/views.py:338 msgid "order_product_uuid is required" msgstr "" -#: engine/core/views.py:336 +#: engine/core/views.py:345 msgid "order product does not exist" msgstr "" -#: engine/core/views.py:339 +#: engine/core/views.py:348 msgid "you can only download the digital asset once" msgstr "" -#: engine/core/views.py:342 +#: engine/core/views.py:351 msgid "the order must be paid before downloading the digital asset" msgstr "" -#: engine/core/views.py:348 +#: engine/core/views.py:357 msgid "the order product does not have a product" msgstr "" -#: engine/core/views.py:385 +#: engine/core/views.py:394 msgid "favicon not found" msgstr "" -#: engine/core/views.py:390 +#: engine/core/views.py:399 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static " @@ -2874,18 +2906,18 @@ msgid "" "error is raised to indicate the resource is unavailable." msgstr "" -#: engine/core/views.py:402 +#: engine/core/views.py:411 msgid "" "Redirects the request to the admin index page. The function handles incoming " "HTTP requests and redirects them to the Django admin interface index page. " "It uses Django's `redirect` function for handling the HTTP redirection." msgstr "" -#: engine/core/views.py:415 +#: engine/core/views.py:424 msgid "Returns current version of the eVibes. " msgstr "" -#: engine/core/views.py:494 +#: engine/core/views.py:587 msgid "Returns custom variables for Dashboard. " msgstr "" diff --git a/engine/core/locale/hr_HR/LC_MESSAGES/django.po b/engine/core/locale/hr_HR/LC_MESSAGES/django.po index 8342cd77..2966e333 100644 --- a/engine/core/locale/hr_HR/LC_MESSAGES/django.po +++ b/engine/core/locale/hr_HR/LC_MESSAGES/django.po @@ -2,12 +2,12 @@ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. -# +# msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-16 15:38+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -1049,7 +1049,7 @@ msgstr "" msgid "camelized JSON data from the requested URL" msgstr "" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:252 msgid "only URLs starting with http(s):// are allowed" msgstr "" @@ -2530,60 +2530,92 @@ msgstr "" msgid "Django site admin" msgstr "" -#: engine/core/templates/admin/index.html:19 +#: engine/core/templates/admin/index.html:20 msgid "Dashboard" msgstr "" -#: engine/core/templates/admin/index.html:25 +#: engine/core/templates/admin/index.html:27 msgid "Revenue (gross, 30d)" msgstr "" -#: engine/core/templates/admin/index.html:34 +#: engine/core/templates/admin/index.html:36 msgid "Revenue (net, 30d)" msgstr "" -#: engine/core/templates/admin/index.html:43 +#: engine/core/templates/admin/index.html:45 msgid "Returns (30d)" msgstr "" -#: engine/core/templates/admin/index.html:52 +#: engine/core/templates/admin/index.html:54 msgid "Processed orders (30d)" msgstr "" -#: engine/core/templates/admin/index.html:65 -msgid "Sales vs Returns (30d)" +#: engine/core/templates/admin/index.html:67 +msgid "Income overview" msgstr "" -#: engine/core/templates/admin/index.html:82 -msgid "Gross" +#: engine/core/templates/admin/index.html:99 +#: engine/core/templates/admin/index.html:139 +msgid "Net" msgstr "" -#: engine/core/templates/admin/index.html:87 +#: engine/core/templates/admin/index.html:107 +#: engine/core/templates/admin/index.html:140 +msgid "Taxes" +msgstr "" + +#: engine/core/templates/admin/index.html:115 +#: engine/core/templates/admin/index.html:141 msgid "Returns" msgstr "" -#: engine/core/templates/admin/index.html:94 +#: engine/core/templates/admin/index.html:122 +msgid "Gross (pie total)" +msgstr "" + +#: engine/core/templates/admin/index.html:201 +#: engine/core/templates/admin/index.html:326 msgid "Not enough data for chart yet." msgstr "" -#: engine/core/templates/admin/index.html:103 +#: engine/core/templates/admin/index.html:210 msgid "Quick Links" msgstr "" -#: engine/core/templates/admin/index.html:110 +#: engine/core/templates/admin/index.html:217 msgid "No links available." msgstr "" -#: engine/core/templates/admin/index.html:119 +#: engine/core/templates/admin/index.html:225 +msgid "Daily sales (30d)" +msgstr "" + +#: engine/core/templates/admin/index.html:254 +msgid "Orders (FINISHED)" +msgstr "" + +#: engine/core/templates/admin/index.html:264 +msgid "Gross revenue" +msgstr "" + +#: engine/core/templates/admin/index.html:301 +msgid "Orders" +msgstr "" + +#: engine/core/templates/admin/index.html:308 +msgid "Gross" +msgstr "" + +#: engine/core/templates/admin/index.html:334 msgid "Most wished product" msgstr "" -#: engine/core/templates/admin/index.html:128 -#: engine/core/templates/admin/index.html:144 +#: engine/core/templates/admin/index.html:361 +#: engine/core/templates/admin/index.html:395 msgid "No data yet." msgstr "" -#: engine/core/templates/admin/index.html:135 +#: engine/core/templates/admin/index.html:368 msgid "Most popular product" msgstr "" @@ -2788,53 +2820,53 @@ msgstr "" msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" -#: engine/core/views.py:77 +#: engine/core/views.py:86 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." msgstr "" -#: engine/core/views.py:92 +#: engine/core/views.py:101 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " "Content-Type header for XML." msgstr "" -#: engine/core/views.py:127 +#: engine/core/views.py:136 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" -#: engine/core/views.py:159 +#: engine/core/views.py:168 msgid "Returns the parameters of the website as a JSON object." msgstr "" -#: engine/core/views.py:178 +#: engine/core/views.py:187 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." msgstr "" -#: engine/core/views.py:205 +#: engine/core/views.py:214 msgid "Handles `contact us` form submissions." msgstr "" -#: engine/core/views.py:226 +#: engine/core/views.py:235 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." msgstr "" -#: engine/core/views.py:266 +#: engine/core/views.py:275 msgid "Handles global search queries." msgstr "" -#: engine/core/views.py:281 +#: engine/core/views.py:290 msgid "Handles the logic of buying as a business without registration." msgstr "" -#: engine/core/views.py:318 +#: engine/core/views.py:327 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the " @@ -2842,31 +2874,31 @@ msgid "" "error is raised to indicate the resource is unavailable." msgstr "" -#: engine/core/views.py:329 +#: engine/core/views.py:338 msgid "order_product_uuid is required" msgstr "" -#: engine/core/views.py:336 +#: engine/core/views.py:345 msgid "order product does not exist" msgstr "" -#: engine/core/views.py:339 +#: engine/core/views.py:348 msgid "you can only download the digital asset once" msgstr "" -#: engine/core/views.py:342 +#: engine/core/views.py:351 msgid "the order must be paid before downloading the digital asset" msgstr "" -#: engine/core/views.py:348 +#: engine/core/views.py:357 msgid "the order product does not have a product" msgstr "" -#: engine/core/views.py:385 +#: engine/core/views.py:394 msgid "favicon not found" msgstr "" -#: engine/core/views.py:390 +#: engine/core/views.py:399 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static " @@ -2874,18 +2906,18 @@ msgid "" "error is raised to indicate the resource is unavailable." msgstr "" -#: engine/core/views.py:402 +#: engine/core/views.py:411 msgid "" "Redirects the request to the admin index page. The function handles incoming " "HTTP requests and redirects them to the Django admin interface index page. " "It uses Django's `redirect` function for handling the HTTP redirection." msgstr "" -#: engine/core/views.py:415 +#: engine/core/views.py:424 msgid "Returns current version of the eVibes. " msgstr "" -#: engine/core/views.py:494 +#: engine/core/views.py:587 msgid "Returns custom variables for Dashboard. " msgstr "" diff --git a/engine/core/locale/id_ID/LC_MESSAGES/django.mo b/engine/core/locale/id_ID/LC_MESSAGES/django.mo index 635fbbd7c54efd18fcce93d8cff21c8e4c5bc1d1..38861e0e6d95e9456694e04430fbf764c5afb1af 100644 GIT binary patch delta 14578 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 Id8W1hKcGx}(f|Me delta 14301 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\n" "Language-Team: BRITISH ENGLISH \n" @@ -1157,7 +1157,7 @@ msgstr "Data yang di-cache" msgid "camelized JSON data from the requested URL" msgstr "Data JSON yang di-camel dari URL yang diminta" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:252 msgid "only URLs starting with http(s):// are allowed" msgstr "Hanya URL yang dimulai dengan http(s):// yang diperbolehkan" @@ -2803,60 +2803,92 @@ msgstr "Tentang Kami" msgid "Django site admin" msgstr "Admin situs Django" -#: engine/core/templates/admin/index.html:19 +#: engine/core/templates/admin/index.html:20 msgid "Dashboard" msgstr "Dasbor" -#: engine/core/templates/admin/index.html:25 +#: engine/core/templates/admin/index.html:27 msgid "Revenue (gross, 30d)" msgstr "Pendapatan (kotor, 30d)" -#: engine/core/templates/admin/index.html:34 +#: engine/core/templates/admin/index.html:36 msgid "Revenue (net, 30d)" msgstr "Pendapatan (bersih, 30d)" -#: engine/core/templates/admin/index.html:43 +#: engine/core/templates/admin/index.html:45 msgid "Returns (30d)" msgstr "Pengembalian (30d)" -#: engine/core/templates/admin/index.html:52 +#: engine/core/templates/admin/index.html:54 msgid "Processed orders (30d)" msgstr "Pesanan yang diproses (30d)" -#: engine/core/templates/admin/index.html:65 -msgid "Sales vs Returns (30d)" -msgstr "Penjualan vs Pengembalian (30d)" +#: engine/core/templates/admin/index.html:67 +msgid "Income overview" +msgstr "Ikhtisar pendapatan" -#: engine/core/templates/admin/index.html:82 -msgid "Gross" -msgstr "Kotor" +#: engine/core/templates/admin/index.html:99 +#: engine/core/templates/admin/index.html:139 +msgid "Net" +msgstr "Pendapatan bersih" -#: engine/core/templates/admin/index.html:87 +#: engine/core/templates/admin/index.html:107 +#: engine/core/templates/admin/index.html:140 +msgid "Taxes" +msgstr "Pajak" + +#: engine/core/templates/admin/index.html:115 +#: engine/core/templates/admin/index.html:141 msgid "Returns" msgstr "Pengembalian" -#: engine/core/templates/admin/index.html:94 +#: engine/core/templates/admin/index.html:122 +msgid "Gross (pie total)" +msgstr "Pendapatan kotor" + +#: engine/core/templates/admin/index.html:201 +#: engine/core/templates/admin/index.html:326 msgid "Not enough data for chart yet." msgstr "Belum cukup data untuk grafik." -#: engine/core/templates/admin/index.html:103 +#: engine/core/templates/admin/index.html:210 msgid "Quick Links" msgstr "Tautan Cepat" -#: engine/core/templates/admin/index.html:110 +#: engine/core/templates/admin/index.html:217 msgid "No links available." msgstr "Tidak ada tautan yang tersedia." -#: engine/core/templates/admin/index.html:119 +#: engine/core/templates/admin/index.html:225 +msgid "Daily sales (30d)" +msgstr "Penjualan harian (30d)" + +#: engine/core/templates/admin/index.html:254 +msgid "Orders (FINISHED)" +msgstr "Pesanan (SELESAI)" + +#: engine/core/templates/admin/index.html:264 +msgid "Gross revenue" +msgstr "Pendapatan kotor" + +#: engine/core/templates/admin/index.html:301 +msgid "Orders" +msgstr "Pesanan" + +#: engine/core/templates/admin/index.html:308 +msgid "Gross" +msgstr "Kotor" + +#: engine/core/templates/admin/index.html:334 msgid "Most wished product" msgstr "Produk yang paling diharapkan" -#: engine/core/templates/admin/index.html:128 -#: engine/core/templates/admin/index.html:144 +#: engine/core/templates/admin/index.html:361 +#: engine/core/templates/admin/index.html:395 msgid "No data yet." msgstr "Belum ada data." -#: engine/core/templates/admin/index.html:135 +#: engine/core/templates/admin/index.html:368 msgid "Most popular product" msgstr "Produk paling populer" @@ -3077,7 +3109,7 @@ msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" "Dimensi gambar tidak boleh melebihi w{max_width} x h{max_height} piksel!" -#: engine/core/views.py:77 +#: engine/core/views.py:86 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -3085,7 +3117,7 @@ msgstr "" "Menangani permintaan indeks peta situs dan mengembalikan respons XML. " "Memastikan respons menyertakan header jenis konten yang sesuai untuk XML." -#: engine/core/views.py:92 +#: engine/core/views.py:101 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -3095,16 +3127,16 @@ msgstr "" "permintaan, mengambil respons detail peta situs yang sesuai, dan menetapkan " "header Jenis Konten untuk XML." -#: engine/core/views.py:127 +#: engine/core/views.py:136 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "Mengembalikan daftar bahasa yang didukung dan informasi terkait." -#: engine/core/views.py:159 +#: engine/core/views.py:168 msgid "Returns the parameters of the website as a JSON object." msgstr "Mengembalikan parameter situs web sebagai objek JSON." -#: engine/core/views.py:178 +#: engine/core/views.py:187 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3112,11 +3144,11 @@ msgstr "" "Menangani operasi cache seperti membaca dan mengatur data cache dengan kunci" " dan batas waktu tertentu." -#: engine/core/views.py:205 +#: engine/core/views.py:214 msgid "Handles `contact us` form submissions." msgstr "Menangani pengiriman formulir `hubungi kami`." -#: engine/core/views.py:226 +#: engine/core/views.py:235 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -3124,15 +3156,15 @@ msgstr "" "Menangani permintaan untuk memproses dan memvalidasi URL dari permintaan " "POST yang masuk." -#: engine/core/views.py:266 +#: engine/core/views.py:275 msgid "Handles global search queries." msgstr "Menangani kueri penelusuran global." -#: engine/core/views.py:281 +#: engine/core/views.py:290 msgid "Handles the logic of buying as a business without registration." msgstr "Menangani logika pembelian sebagai bisnis tanpa registrasi." -#: engine/core/views.py:318 +#: engine/core/views.py:327 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3140,31 +3172,31 @@ msgstr "" "Menangani pengunduhan aset digital yang terkait dengan pesanan.\n" "Fungsi ini mencoba untuk menyajikan file aset digital yang terletak di direktori penyimpanan proyek. Jika file tidak ditemukan, kesalahan HTTP 404 akan muncul untuk mengindikasikan bahwa sumber daya tidak tersedia." -#: engine/core/views.py:329 +#: engine/core/views.py:338 msgid "order_product_uuid is required" msgstr "order_product_uuid diperlukan" -#: engine/core/views.py:336 +#: engine/core/views.py:345 msgid "order product does not exist" msgstr "produk pesanan tidak ada" -#: engine/core/views.py:339 +#: engine/core/views.py:348 msgid "you can only download the digital asset once" msgstr "Anda hanya dapat mengunduh aset digital sekali saja" -#: engine/core/views.py:342 +#: engine/core/views.py:351 msgid "the order must be paid before downloading the digital asset" msgstr "pesanan harus dibayar sebelum mengunduh aset digital" -#: engine/core/views.py:348 +#: engine/core/views.py:357 msgid "the order product does not have a product" msgstr "Produk pesanan tidak memiliki produk" -#: engine/core/views.py:385 +#: engine/core/views.py:394 msgid "favicon not found" msgstr "favicon tidak ditemukan" -#: engine/core/views.py:390 +#: engine/core/views.py:399 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3172,7 +3204,7 @@ msgstr "" "Menangani permintaan favicon dari sebuah situs web.\n" "Fungsi ini mencoba menyajikan file favicon yang terletak di direktori statis proyek. Jika file favicon tidak ditemukan, kesalahan HTTP 404 akan dimunculkan untuk mengindikasikan bahwa sumber daya tidak tersedia." -#: engine/core/views.py:402 +#: engine/core/views.py:411 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3183,11 +3215,11 @@ msgstr "" "admin Django. Fungsi ini menggunakan fungsi `redirect` Django untuk " "menangani pengalihan HTTP." -#: engine/core/views.py:415 +#: engine/core/views.py:424 msgid "Returns current version of the eVibes. " msgstr "Mengembalikan versi eVibes saat ini." -#: engine/core/views.py:494 +#: engine/core/views.py:587 msgid "Returns custom variables for Dashboard. " msgstr "Mengembalikan variabel khusus untuk Dasbor." diff --git a/engine/core/locale/it_IT/LC_MESSAGES/django.mo b/engine/core/locale/it_IT/LC_MESSAGES/django.mo index 37b70222305c8a1c8408abeeecdd99ec853565f8..7e45bd8b29709579ea076572df8e01884e217c2e 100644 GIT binary patch delta 14577 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 Qh#xa1aaXteo_ziP4~6oZ{r~^~ delta 14297 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 diff --git a/engine/core/locale/it_IT/LC_MESSAGES/django.po b/engine/core/locale/it_IT/LC_MESSAGES/django.po index 5450a3b1..d2292eeb 100644 --- a/engine/core/locale/it_IT/LC_MESSAGES/django.po +++ b/engine/core/locale/it_IT/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-16 15:38+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -1149,7 +1149,7 @@ msgstr "Dati in cache" msgid "camelized JSON data from the requested URL" msgstr "Dati JSON camelizzati dall'URL richiesto" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:252 msgid "only URLs starting with http(s):// are allowed" msgstr "Sono consentiti solo gli URL che iniziano con http(s)://" @@ -2804,60 +2804,92 @@ msgstr "Chi siamo" msgid "Django site admin" msgstr "Amministratore del sito Django" -#: engine/core/templates/admin/index.html:19 +#: engine/core/templates/admin/index.html:20 msgid "Dashboard" msgstr "Cruscotto" -#: engine/core/templates/admin/index.html:25 +#: engine/core/templates/admin/index.html:27 msgid "Revenue (gross, 30d)" msgstr "Ricavi (lordi, 30d)" -#: engine/core/templates/admin/index.html:34 +#: engine/core/templates/admin/index.html:36 msgid "Revenue (net, 30d)" msgstr "Ricavi (netti, 30d)" -#: engine/core/templates/admin/index.html:43 +#: engine/core/templates/admin/index.html:45 msgid "Returns (30d)" msgstr "Restituzioni (30d)" -#: engine/core/templates/admin/index.html:52 +#: engine/core/templates/admin/index.html:54 msgid "Processed orders (30d)" msgstr "Ordini evasi (30d)" -#: engine/core/templates/admin/index.html:65 -msgid "Sales vs Returns (30d)" -msgstr "Vendite e resi (30d)" +#: engine/core/templates/admin/index.html:67 +msgid "Income overview" +msgstr "Panoramica delle entrate" -#: engine/core/templates/admin/index.html:82 -msgid "Gross" -msgstr "Gross" +#: engine/core/templates/admin/index.html:99 +#: engine/core/templates/admin/index.html:139 +msgid "Net" +msgstr "Ricavi netti" -#: engine/core/templates/admin/index.html:87 +#: engine/core/templates/admin/index.html:107 +#: engine/core/templates/admin/index.html:140 +msgid "Taxes" +msgstr "Tasse" + +#: engine/core/templates/admin/index.html:115 +#: engine/core/templates/admin/index.html:141 msgid "Returns" msgstr "Restituzioni" -#: engine/core/templates/admin/index.html:94 +#: engine/core/templates/admin/index.html:122 +msgid "Gross (pie total)" +msgstr "Ricavo lordo" + +#: engine/core/templates/admin/index.html:201 +#: engine/core/templates/admin/index.html:326 msgid "Not enough data for chart yet." msgstr "Non ci sono ancora dati sufficienti per un grafico." -#: engine/core/templates/admin/index.html:103 +#: engine/core/templates/admin/index.html:210 msgid "Quick Links" msgstr "Collegamenti rapidi" -#: engine/core/templates/admin/index.html:110 +#: engine/core/templates/admin/index.html:217 msgid "No links available." msgstr "Nessun link disponibile." -#: engine/core/templates/admin/index.html:119 +#: engine/core/templates/admin/index.html:225 +msgid "Daily sales (30d)" +msgstr "Vendite giornaliere (30d)" + +#: engine/core/templates/admin/index.html:254 +msgid "Orders (FINISHED)" +msgstr "Ordini (FINITO)" + +#: engine/core/templates/admin/index.html:264 +msgid "Gross revenue" +msgstr "Ricavo lordo" + +#: engine/core/templates/admin/index.html:301 +msgid "Orders" +msgstr "Ordini" + +#: engine/core/templates/admin/index.html:308 +msgid "Gross" +msgstr "Gross" + +#: engine/core/templates/admin/index.html:334 msgid "Most wished product" msgstr "Il prodotto più desiderato" -#: engine/core/templates/admin/index.html:128 -#: engine/core/templates/admin/index.html:144 +#: engine/core/templates/admin/index.html:361 +#: engine/core/templates/admin/index.html:395 msgid "No data yet." msgstr "Non ci sono ancora dati." -#: engine/core/templates/admin/index.html:135 +#: engine/core/templates/admin/index.html:368 msgid "Most popular product" msgstr "Il prodotto più popolare" @@ -3080,7 +3112,7 @@ msgstr "" "Le dimensioni dell'immagine non devono superare w{max_width} x h{max_height}" " pixel" -#: engine/core/views.py:77 +#: engine/core/views.py:86 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -3089,7 +3121,7 @@ msgstr "" "XML. Assicura che la risposta includa l'intestazione del tipo di contenuto " "appropriato per XML." -#: engine/core/views.py:92 +#: engine/core/views.py:101 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -3099,17 +3131,17 @@ msgstr "" "funzione elabora la richiesta, recupera la risposta dettagliata della " "sitemap e imposta l'intestazione Content-Type per XML." -#: engine/core/views.py:127 +#: engine/core/views.py:136 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" "Restituisce un elenco di lingue supportate e le informazioni corrispondenti." -#: engine/core/views.py:159 +#: engine/core/views.py:168 msgid "Returns the parameters of the website as a JSON object." msgstr "Restituisce i parametri del sito web come oggetto JSON." -#: engine/core/views.py:178 +#: engine/core/views.py:187 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3117,11 +3149,11 @@ msgstr "" "Gestisce le operazioni di cache, come la lettura e l'impostazione dei dati " "della cache con una chiave e un timeout specificati." -#: engine/core/views.py:205 +#: engine/core/views.py:214 msgid "Handles `contact us` form submissions." msgstr "Gestisce l'invio del modulo `contatti`." -#: engine/core/views.py:226 +#: engine/core/views.py:235 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -3129,15 +3161,15 @@ msgstr "" "Gestisce le richieste di elaborazione e validazione degli URL dalle " "richieste POST in arrivo." -#: engine/core/views.py:266 +#: engine/core/views.py:275 msgid "Handles global search queries." msgstr "Gestisce le query di ricerca globali." -#: engine/core/views.py:281 +#: engine/core/views.py:290 msgid "Handles the logic of buying as a business without registration." msgstr "Gestisce la logica dell'acquisto come azienda senza registrazione." -#: engine/core/views.py:318 +#: engine/core/views.py:327 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3145,31 +3177,31 @@ msgstr "" "Gestisce il download di una risorsa digitale associata a un ordine.\n" "Questa funzione tenta di servire il file della risorsa digitale che si trova nella directory di archiviazione del progetto. Se il file non viene trovato, viene generato un errore HTTP 404 per indicare che la risorsa non è disponibile." -#: engine/core/views.py:329 +#: engine/core/views.py:338 msgid "order_product_uuid is required" msgstr "order_product_uuid è obbligatorio" -#: engine/core/views.py:336 +#: engine/core/views.py:345 msgid "order product does not exist" msgstr "ordine prodotto non esistente" -#: engine/core/views.py:339 +#: engine/core/views.py:348 msgid "you can only download the digital asset once" msgstr "È possibile scaricare l'asset digitale una sola volta" -#: engine/core/views.py:342 +#: engine/core/views.py:351 msgid "the order must be paid before downloading the digital asset" msgstr "l'ordine deve essere pagato prima di scaricare il bene digitale" -#: engine/core/views.py:348 +#: engine/core/views.py:357 msgid "the order product does not have a product" msgstr "Il prodotto dell'ordine non ha un prodotto" -#: engine/core/views.py:385 +#: engine/core/views.py:394 msgid "favicon not found" msgstr "favicon non trovata" -#: engine/core/views.py:390 +#: engine/core/views.py:399 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3177,7 +3209,7 @@ msgstr "" "Gestisce le richieste per la favicon di un sito web.\n" "Questa funzione tenta di servire il file favicon situato nella cartella statica del progetto. Se il file favicon non viene trovato, viene generato un errore HTTP 404 per indicare che la risorsa non è disponibile." -#: engine/core/views.py:402 +#: engine/core/views.py:411 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3188,11 +3220,11 @@ msgstr "" "indice dell'interfaccia di amministrazione di Django. Utilizza la funzione " "`redirect` di Django per gestire il reindirizzamento HTTP." -#: engine/core/views.py:415 +#: engine/core/views.py:424 msgid "Returns current version of the eVibes. " msgstr "Restituisce la versione corrente di eVibes." -#: engine/core/views.py:494 +#: engine/core/views.py:587 msgid "Returns custom variables for Dashboard. " msgstr "Restituisce le variabili personalizzate per Dashboard." diff --git a/engine/core/locale/ja_JP/LC_MESSAGES/django.mo b/engine/core/locale/ja_JP/LC_MESSAGES/django.mo index 5b9177c38b32220ed172f4f128b35d4412fc9c3c..19b7a25c7de05533cbe2ebf7e44c8ccccd19ca53 100644 GIT binary patch delta 14541 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 delta 14298 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 diff --git a/engine/core/locale/ja_JP/LC_MESSAGES/django.po b/engine/core/locale/ja_JP/LC_MESSAGES/django.po index 758ff012..8d08e3d3 100644 --- a/engine/core/locale/ja_JP/LC_MESSAGES/django.po +++ b/engine/core/locale/ja_JP/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-16 15:38+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -1066,7 +1066,7 @@ msgstr "キャッシュ・データ" msgid "camelized JSON data from the requested URL" msgstr "リクエストされたURLからキャメル化されたJSONデータ" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:252 msgid "only URLs starting with http(s):// are allowed" msgstr "http(s)://で始まるURLのみが許可されます。" @@ -2582,60 +2582,92 @@ msgstr "会社概要" msgid "Django site admin" msgstr "Djangoサイト管理者" -#: engine/core/templates/admin/index.html:19 +#: engine/core/templates/admin/index.html:20 msgid "Dashboard" msgstr "ダッシュボード" -#: engine/core/templates/admin/index.html:25 +#: engine/core/templates/admin/index.html:27 msgid "Revenue (gross, 30d)" msgstr "収入(グロス、30d)" -#: engine/core/templates/admin/index.html:34 +#: engine/core/templates/admin/index.html:36 msgid "Revenue (net, 30d)" msgstr "収入(純額、30d)" -#: engine/core/templates/admin/index.html:43 +#: engine/core/templates/admin/index.html:45 msgid "Returns (30d)" msgstr "リターンズ(30日)" -#: engine/core/templates/admin/index.html:52 +#: engine/core/templates/admin/index.html:54 msgid "Processed orders (30d)" msgstr "処理済み注文 (30d)" -#: engine/core/templates/admin/index.html:65 -msgid "Sales vs Returns (30d)" -msgstr "売上対返品 (30d)" +#: engine/core/templates/admin/index.html:67 +msgid "Income overview" +msgstr "収入概要" -#: engine/core/templates/admin/index.html:82 -msgid "Gross" -msgstr "グロス" +#: engine/core/templates/admin/index.html:99 +#: engine/core/templates/admin/index.html:139 +msgid "Net" +msgstr "純収入" -#: engine/core/templates/admin/index.html:87 +#: engine/core/templates/admin/index.html:107 +#: engine/core/templates/admin/index.html:140 +msgid "Taxes" +msgstr "税金" + +#: engine/core/templates/admin/index.html:115 +#: engine/core/templates/admin/index.html:141 msgid "Returns" msgstr "リターン" -#: engine/core/templates/admin/index.html:94 +#: engine/core/templates/admin/index.html:122 +msgid "Gross (pie total)" +msgstr "総収入" + +#: engine/core/templates/admin/index.html:201 +#: engine/core/templates/admin/index.html:326 msgid "Not enough data for chart yet." msgstr "まだチャートには十分なデータがない。" -#: engine/core/templates/admin/index.html:103 +#: engine/core/templates/admin/index.html:210 msgid "Quick Links" msgstr "クイックリンク" -#: engine/core/templates/admin/index.html:110 +#: engine/core/templates/admin/index.html:217 msgid "No links available." msgstr "リンクはありません。" -#: engine/core/templates/admin/index.html:119 +#: engine/core/templates/admin/index.html:225 +msgid "Daily sales (30d)" +msgstr "日販(30日)" + +#: engine/core/templates/admin/index.html:254 +msgid "Orders (FINISHED)" +msgstr "オーダー(終了)" + +#: engine/core/templates/admin/index.html:264 +msgid "Gross revenue" +msgstr "総収入" + +#: engine/core/templates/admin/index.html:301 +msgid "Orders" +msgstr "受注状況" + +#: engine/core/templates/admin/index.html:308 +msgid "Gross" +msgstr "グロス" + +#: engine/core/templates/admin/index.html:334 msgid "Most wished product" msgstr "最も欲しい製品" -#: engine/core/templates/admin/index.html:128 -#: engine/core/templates/admin/index.html:144 +#: engine/core/templates/admin/index.html:361 +#: engine/core/templates/admin/index.html:395 msgid "No data yet." msgstr "まだデータはない。" -#: engine/core/templates/admin/index.html:135 +#: engine/core/templates/admin/index.html:368 msgid "Most popular product" msgstr "最も人気のある製品" @@ -2844,14 +2876,14 @@ msgstr "NOMINATIM_URLパラメータを設定する必要があります!" msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "画像のサイズは w{max_width} x h{max_height} ピクセルを超えないようにしてください!" -#: engine/core/views.py:77 +#: engine/core/views.py:86 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." msgstr "" "サイトマップインデックスのリクエストを処理し、XMLレスポンスを返します。レスポンスにXML用の適切なコンテントタイプヘッダーが含まれるようにします。" -#: engine/core/views.py:92 +#: engine/core/views.py:101 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -2860,40 +2892,40 @@ msgstr "" "サイトマップの詳細表示レスポンスを処理します。この関数はリクエストを処理し、適切なサイトマップ詳細レスポンスを取得し、XML の Content-" "Type ヘッダを設定します。" -#: engine/core/views.py:127 +#: engine/core/views.py:136 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "サポートされている言語の一覧と対応する情報を返します。" -#: engine/core/views.py:159 +#: engine/core/views.py:168 msgid "Returns the parameters of the website as a JSON object." msgstr "ウェブサイトのパラメータをJSONオブジェクトとして返します。" -#: engine/core/views.py:178 +#: engine/core/views.py:187 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." msgstr "指定されたキーとタイムアウトで、キャッシュ・データの読み取りや設定などのキャッシュ操作を行う。" -#: engine/core/views.py:205 +#: engine/core/views.py:214 msgid "Handles `contact us` form submissions." msgstr "お問い合わせフォームの送信を処理する。" -#: engine/core/views.py:226 +#: engine/core/views.py:235 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." msgstr "入ってくる POST リクエストからの URL の処理と検証のリクエストを処理します。" -#: engine/core/views.py:266 +#: engine/core/views.py:275 msgid "Handles global search queries." msgstr "グローバル検索クエリを処理する。" -#: engine/core/views.py:281 +#: engine/core/views.py:290 msgid "Handles the logic of buying as a business without registration." msgstr "登録なしでビジネスとして購入するロジックを扱う。" -#: engine/core/views.py:318 +#: engine/core/views.py:327 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -2901,31 +2933,31 @@ msgstr "" "注文に関連付けられたデジタルアセットのダウンロードを処理します。\n" "この関数は、プロジェクトのストレージディレクトリにあるデジタルアセットファイルの提供を試みます。ファイルが見つからない場合、リソースが利用できないことを示すHTTP 404エラーが発生します。" -#: engine/core/views.py:329 +#: engine/core/views.py:338 msgid "order_product_uuid is required" msgstr "order_product_uuidは必須です。" -#: engine/core/views.py:336 +#: engine/core/views.py:345 msgid "order product does not exist" msgstr "注文商品が存在しない" -#: engine/core/views.py:339 +#: engine/core/views.py:348 msgid "you can only download the digital asset once" msgstr "デジタルアセットのダウンロードは1回限りです。" -#: engine/core/views.py:342 +#: engine/core/views.py:351 msgid "the order must be paid before downloading the digital asset" msgstr "デジタル資産をダウンロードする前に、注文を支払う必要があります。" -#: engine/core/views.py:348 +#: engine/core/views.py:357 msgid "the order product does not have a product" msgstr "注文商品に商品がない" -#: engine/core/views.py:385 +#: engine/core/views.py:394 msgid "favicon not found" msgstr "ファビコンが見つかりません" -#: engine/core/views.py:390 +#: engine/core/views.py:399 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -2933,7 +2965,7 @@ msgstr "" "ウェブサイトのファビコンへのリクエストを処理します。\n" "この関数は、プロジェクトの静的ディレクトリにあるファビコンファイルの提供を試みます。ファビコンファイルが見つからない場合、リソースが利用できないことを示す HTTP 404 エラーが発生します。" -#: engine/core/views.py:402 +#: engine/core/views.py:411 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -2942,11 +2974,11 @@ msgstr "" "リクエストを admin インデックスページにリダイレクトします。この関数は、HTTP リクエストを処理し、 Django の admin " "インタフェースインデッ クスページにリダイレクトします。HTTP リダイレクトの処理には Django の `redirect` 関数を使います。" -#: engine/core/views.py:415 +#: engine/core/views.py:424 msgid "Returns current version of the eVibes. " msgstr "eVibes の現在のバージョンを返します。" -#: engine/core/views.py:494 +#: engine/core/views.py:587 msgid "Returns custom variables for Dashboard. " msgstr "ダッシュボードのカスタム変数を返します。" diff --git a/engine/core/locale/kk_KZ/LC_MESSAGES/django.po b/engine/core/locale/kk_KZ/LC_MESSAGES/django.po index 23915302..c1636ac3 100644 --- a/engine/core/locale/kk_KZ/LC_MESSAGES/django.po +++ b/engine/core/locale/kk_KZ/LC_MESSAGES/django.po @@ -2,12 +2,12 @@ # Copyright (C) 2025 EGOR GORBUNOV # This file is distributed under the same license as the EVIBES package. # EGOR GORBUNOV , 2025. -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-16 15:38+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -1049,7 +1049,7 @@ msgstr "" msgid "camelized JSON data from the requested URL" msgstr "" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:252 msgid "only URLs starting with http(s):// are allowed" msgstr "" @@ -2530,60 +2530,92 @@ msgstr "" msgid "Django site admin" msgstr "" -#: engine/core/templates/admin/index.html:19 +#: engine/core/templates/admin/index.html:20 msgid "Dashboard" msgstr "" -#: engine/core/templates/admin/index.html:25 +#: engine/core/templates/admin/index.html:27 msgid "Revenue (gross, 30d)" msgstr "" -#: engine/core/templates/admin/index.html:34 +#: engine/core/templates/admin/index.html:36 msgid "Revenue (net, 30d)" msgstr "" -#: engine/core/templates/admin/index.html:43 +#: engine/core/templates/admin/index.html:45 msgid "Returns (30d)" msgstr "" -#: engine/core/templates/admin/index.html:52 +#: engine/core/templates/admin/index.html:54 msgid "Processed orders (30d)" msgstr "" -#: engine/core/templates/admin/index.html:65 -msgid "Sales vs Returns (30d)" +#: engine/core/templates/admin/index.html:67 +msgid "Income overview" msgstr "" -#: engine/core/templates/admin/index.html:82 -msgid "Gross" +#: engine/core/templates/admin/index.html:99 +#: engine/core/templates/admin/index.html:139 +msgid "Net" msgstr "" -#: engine/core/templates/admin/index.html:87 +#: engine/core/templates/admin/index.html:107 +#: engine/core/templates/admin/index.html:140 +msgid "Taxes" +msgstr "" + +#: engine/core/templates/admin/index.html:115 +#: engine/core/templates/admin/index.html:141 msgid "Returns" msgstr "" -#: engine/core/templates/admin/index.html:94 +#: engine/core/templates/admin/index.html:122 +msgid "Gross (pie total)" +msgstr "" + +#: engine/core/templates/admin/index.html:201 +#: engine/core/templates/admin/index.html:326 msgid "Not enough data for chart yet." msgstr "" -#: engine/core/templates/admin/index.html:103 +#: engine/core/templates/admin/index.html:210 msgid "Quick Links" msgstr "" -#: engine/core/templates/admin/index.html:110 +#: engine/core/templates/admin/index.html:217 msgid "No links available." msgstr "" -#: engine/core/templates/admin/index.html:119 +#: engine/core/templates/admin/index.html:225 +msgid "Daily sales (30d)" +msgstr "" + +#: engine/core/templates/admin/index.html:254 +msgid "Orders (FINISHED)" +msgstr "" + +#: engine/core/templates/admin/index.html:264 +msgid "Gross revenue" +msgstr "" + +#: engine/core/templates/admin/index.html:301 +msgid "Orders" +msgstr "" + +#: engine/core/templates/admin/index.html:308 +msgid "Gross" +msgstr "" + +#: engine/core/templates/admin/index.html:334 msgid "Most wished product" msgstr "" -#: engine/core/templates/admin/index.html:128 -#: engine/core/templates/admin/index.html:144 +#: engine/core/templates/admin/index.html:361 +#: engine/core/templates/admin/index.html:395 msgid "No data yet." msgstr "" -#: engine/core/templates/admin/index.html:135 +#: engine/core/templates/admin/index.html:368 msgid "Most popular product" msgstr "" @@ -2788,53 +2820,53 @@ msgstr "" msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" -#: engine/core/views.py:77 +#: engine/core/views.py:86 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." msgstr "" -#: engine/core/views.py:92 +#: engine/core/views.py:101 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " "Content-Type header for XML." msgstr "" -#: engine/core/views.py:127 +#: engine/core/views.py:136 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" -#: engine/core/views.py:159 +#: engine/core/views.py:168 msgid "Returns the parameters of the website as a JSON object." msgstr "" -#: engine/core/views.py:178 +#: engine/core/views.py:187 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." msgstr "" -#: engine/core/views.py:205 +#: engine/core/views.py:214 msgid "Handles `contact us` form submissions." msgstr "" -#: engine/core/views.py:226 +#: engine/core/views.py:235 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." msgstr "" -#: engine/core/views.py:266 +#: engine/core/views.py:275 msgid "Handles global search queries." msgstr "" -#: engine/core/views.py:281 +#: engine/core/views.py:290 msgid "Handles the logic of buying as a business without registration." msgstr "" -#: engine/core/views.py:318 +#: engine/core/views.py:327 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the " @@ -2842,31 +2874,31 @@ msgid "" "error is raised to indicate the resource is unavailable." msgstr "" -#: engine/core/views.py:329 +#: engine/core/views.py:338 msgid "order_product_uuid is required" msgstr "" -#: engine/core/views.py:336 +#: engine/core/views.py:345 msgid "order product does not exist" msgstr "" -#: engine/core/views.py:339 +#: engine/core/views.py:348 msgid "you can only download the digital asset once" msgstr "" -#: engine/core/views.py:342 +#: engine/core/views.py:351 msgid "the order must be paid before downloading the digital asset" msgstr "" -#: engine/core/views.py:348 +#: engine/core/views.py:357 msgid "the order product does not have a product" msgstr "" -#: engine/core/views.py:385 +#: engine/core/views.py:394 msgid "favicon not found" msgstr "" -#: engine/core/views.py:390 +#: engine/core/views.py:399 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static " @@ -2874,18 +2906,18 @@ msgid "" "error is raised to indicate the resource is unavailable." msgstr "" -#: engine/core/views.py:402 +#: engine/core/views.py:411 msgid "" "Redirects the request to the admin index page. The function handles incoming " "HTTP requests and redirects them to the Django admin interface index page. " "It uses Django's `redirect` function for handling the HTTP redirection." msgstr "" -#: engine/core/views.py:415 +#: engine/core/views.py:424 msgid "Returns current version of the eVibes. " msgstr "" -#: engine/core/views.py:494 +#: engine/core/views.py:587 msgid "Returns custom variables for Dashboard. " msgstr "" diff --git a/engine/core/locale/ko_KR/LC_MESSAGES/django.mo b/engine/core/locale/ko_KR/LC_MESSAGES/django.mo index d1e2f581fbda10c72aa7a72caba404aad068adb6..5e7b3a0a6e939a9ce365a685e395d6dc00b6d51d 100644 GIT binary patch delta 14557 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 delta 14297 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 diff --git a/engine/core/locale/ko_KR/LC_MESSAGES/django.po b/engine/core/locale/ko_KR/LC_MESSAGES/django.po index f8e97349..1cd06691 100644 --- a/engine/core/locale/ko_KR/LC_MESSAGES/django.po +++ b/engine/core/locale/ko_KR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-16 15:38+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -1063,7 +1063,7 @@ msgstr "캐시된 데이터" msgid "camelized JSON data from the requested URL" msgstr "요청된 URL의 카멜라이즈된 JSON 데이터" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:252 msgid "only URLs starting with http(s):// are allowed" msgstr "http(s)://로 시작하는 URL만 허용됩니다." @@ -2606,60 +2606,92 @@ msgstr "회사 소개" msgid "Django site admin" msgstr "장고 사이트 관리자" -#: engine/core/templates/admin/index.html:19 +#: engine/core/templates/admin/index.html:20 msgid "Dashboard" msgstr "대시보드" -#: engine/core/templates/admin/index.html:25 +#: engine/core/templates/admin/index.html:27 msgid "Revenue (gross, 30d)" msgstr "수익(총액, 30일)" -#: engine/core/templates/admin/index.html:34 +#: engine/core/templates/admin/index.html:36 msgid "Revenue (net, 30d)" msgstr "수익(순, 30일)" -#: engine/core/templates/admin/index.html:43 +#: engine/core/templates/admin/index.html:45 msgid "Returns (30d)" msgstr "반품 (30일)" -#: engine/core/templates/admin/index.html:52 +#: engine/core/templates/admin/index.html:54 msgid "Processed orders (30d)" msgstr "처리된 주문(30일)" -#: engine/core/templates/admin/index.html:65 -msgid "Sales vs Returns (30d)" -msgstr "판매 대 반품(30일)" +#: engine/core/templates/admin/index.html:67 +msgid "Income overview" +msgstr "수입 개요" -#: engine/core/templates/admin/index.html:82 -msgid "Gross" -msgstr "Gross" +#: engine/core/templates/admin/index.html:99 +#: engine/core/templates/admin/index.html:139 +msgid "Net" +msgstr "순 수익" -#: engine/core/templates/admin/index.html:87 +#: engine/core/templates/admin/index.html:107 +#: engine/core/templates/admin/index.html:140 +msgid "Taxes" +msgstr "세금" + +#: engine/core/templates/admin/index.html:115 +#: engine/core/templates/admin/index.html:141 msgid "Returns" msgstr "반환" -#: engine/core/templates/admin/index.html:94 +#: engine/core/templates/admin/index.html:122 +msgid "Gross (pie total)" +msgstr "총 수익" + +#: engine/core/templates/admin/index.html:201 +#: engine/core/templates/admin/index.html:326 msgid "Not enough data for chart yet." msgstr "아직 차트에 넣을 데이터가 충분하지 않습니다." -#: engine/core/templates/admin/index.html:103 +#: engine/core/templates/admin/index.html:210 msgid "Quick Links" msgstr "빠른 링크" -#: engine/core/templates/admin/index.html:110 +#: engine/core/templates/admin/index.html:217 msgid "No links available." msgstr "사용할 수 있는 링크가 없습니다." -#: engine/core/templates/admin/index.html:119 +#: engine/core/templates/admin/index.html:225 +msgid "Daily sales (30d)" +msgstr "일일 판매량(30일)" + +#: engine/core/templates/admin/index.html:254 +msgid "Orders (FINISHED)" +msgstr "주문 (완료됨)" + +#: engine/core/templates/admin/index.html:264 +msgid "Gross revenue" +msgstr "총 수익" + +#: engine/core/templates/admin/index.html:301 +msgid "Orders" +msgstr "주문" + +#: engine/core/templates/admin/index.html:308 +msgid "Gross" +msgstr "Gross" + +#: engine/core/templates/admin/index.html:334 msgid "Most wished product" msgstr "가장 많이 원하는 제품" -#: engine/core/templates/admin/index.html:128 -#: engine/core/templates/admin/index.html:144 +#: engine/core/templates/admin/index.html:361 +#: engine/core/templates/admin/index.html:395 msgid "No data yet." msgstr "아직 데이터가 없습니다." -#: engine/core/templates/admin/index.html:135 +#: engine/core/templates/admin/index.html:368 msgid "Most popular product" msgstr "가장 인기 있는 제품" @@ -2869,14 +2901,14 @@ msgstr "NOMINATIM_URL 파라미터를 설정해야 합니다!" msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "이미지 크기는 w{max_width} x h{max_height} 픽셀을 초과하지 않아야 합니다!" -#: engine/core/views.py:77 +#: engine/core/views.py:86 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." msgstr "" "사이트맵 색인에 대한 요청을 처리하고 XML 응답을 반환합니다. 응답에 XML에 적합한 콘텐츠 유형 헤더가 포함되어 있는지 확인합니다." -#: engine/core/views.py:92 +#: engine/core/views.py:101 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -2885,40 +2917,40 @@ msgstr "" "사이트맵에 대한 상세 보기 응답을 처리합니다. 이 함수는 요청을 처리하고 적절한 사이트맵 상세 보기 응답을 가져온 다음 XML의 " "Content-Type 헤더를 설정합니다." -#: engine/core/views.py:127 +#: engine/core/views.py:136 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "지원되는 언어 목록과 해당 정보를 반환합니다." -#: engine/core/views.py:159 +#: engine/core/views.py:168 msgid "Returns the parameters of the website as a JSON object." msgstr "웹사이트의 매개변수를 JSON 객체로 반환합니다." -#: engine/core/views.py:178 +#: engine/core/views.py:187 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." msgstr "지정된 키와 시간 초과로 캐시 데이터를 읽고 설정하는 등의 캐시 작업을 처리합니다." -#: engine/core/views.py:205 +#: engine/core/views.py:214 msgid "Handles `contact us` form submissions." msgstr "'문의하기' 양식 제출을 처리합니다." -#: engine/core/views.py:226 +#: engine/core/views.py:235 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." msgstr "들어오는 POST 요청의 URL 처리 및 유효성 검사 요청을 처리합니다." -#: engine/core/views.py:266 +#: engine/core/views.py:275 msgid "Handles global search queries." msgstr "글로벌 검색 쿼리를 처리합니다." -#: engine/core/views.py:281 +#: engine/core/views.py:290 msgid "Handles the logic of buying as a business without registration." msgstr "등록하지 않고 비즈니스로 구매하는 로직을 처리합니다." -#: engine/core/views.py:318 +#: engine/core/views.py:327 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -2926,31 +2958,31 @@ msgstr "" "주문과 관련된 디지털 자산의 다운로드를 처리합니다.\n" "이 함수는 프로젝트의 저장소 디렉토리에 있는 디지털 자산 파일을 제공하려고 시도합니다. 파일을 찾을 수 없으면 HTTP 404 오류가 발생하여 리소스를 사용할 수 없음을 나타냅니다." -#: engine/core/views.py:329 +#: engine/core/views.py:338 msgid "order_product_uuid is required" msgstr "주문_제품_UUID는 필수입니다." -#: engine/core/views.py:336 +#: engine/core/views.py:345 msgid "order product does not exist" msgstr "주문 제품이 존재하지 않습니다." -#: engine/core/views.py:339 +#: engine/core/views.py:348 msgid "you can only download the digital asset once" msgstr "디지털 자산은 한 번만 다운로드할 수 있습니다." -#: engine/core/views.py:342 +#: engine/core/views.py:351 msgid "the order must be paid before downloading the digital asset" msgstr "디지털 자산을 다운로드하기 전에 주문을 결제해야 합니다." -#: engine/core/views.py:348 +#: engine/core/views.py:357 msgid "the order product does not have a product" msgstr "주문 제품에 제품이 없습니다." -#: engine/core/views.py:385 +#: engine/core/views.py:394 msgid "favicon not found" msgstr "파비콘을 찾을 수 없습니다." -#: engine/core/views.py:390 +#: engine/core/views.py:399 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -2958,7 +2990,7 @@ msgstr "" "웹사이트의 파비콘 요청을 처리합니다.\n" "이 함수는 프로젝트의 정적 디렉토리에 있는 파비콘 파일을 제공하려고 시도합니다. 파비콘 파일을 찾을 수 없는 경우 HTTP 404 오류가 발생하여 리소스를 사용할 수 없음을 나타냅니다." -#: engine/core/views.py:402 +#: engine/core/views.py:411 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -2967,11 +2999,11 @@ msgstr "" "요청을 관리자 색인 페이지로 리디렉션합니다. 이 함수는 들어오는 HTTP 요청을 처리하여 Django 관리자 인터페이스 인덱스 페이지로 " "리디렉션합니다. HTTP 리디렉션을 처리하기 위해 Django의 `redirect` 함수를 사용합니다." -#: engine/core/views.py:415 +#: engine/core/views.py:424 msgid "Returns current version of the eVibes. " msgstr "현재 버전의 eVibes를 반환합니다." -#: engine/core/views.py:494 +#: engine/core/views.py:587 msgid "Returns custom variables for Dashboard. " msgstr "대시보드에 대한 사용자 지정 변수를 반환합니다." diff --git a/engine/core/locale/nl_NL/LC_MESSAGES/django.mo b/engine/core/locale/nl_NL/LC_MESSAGES/django.mo index cfd3fbbf68c361c546947421dc902d2c8fdd980f..0f28fb1d024dfc592566ac1f14af5acf5367b9d6 100644 GIT binary patch delta 14584 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 delta 14289 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 F\n" "Language-Team: BRITISH ENGLISH \n" @@ -1152,7 +1152,7 @@ msgstr "Gecachte gegevens" msgid "camelized JSON data from the requested URL" msgstr "Camelized JSON-gegevens van de opgevraagde URL" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:252 msgid "only URLs starting with http(s):// are allowed" msgstr "Alleen URL's die beginnen met http(s):// zijn toegestaan" @@ -2815,60 +2815,92 @@ msgstr "Over ons" msgid "Django site admin" msgstr "Django website beheerder" -#: engine/core/templates/admin/index.html:19 +#: engine/core/templates/admin/index.html:20 msgid "Dashboard" msgstr "Dashboard" -#: engine/core/templates/admin/index.html:25 +#: engine/core/templates/admin/index.html:27 msgid "Revenue (gross, 30d)" msgstr "Inkomsten (bruto, 30d)" -#: engine/core/templates/admin/index.html:34 +#: engine/core/templates/admin/index.html:36 msgid "Revenue (net, 30d)" msgstr "Inkomsten (netto, 30d)" -#: engine/core/templates/admin/index.html:43 +#: engine/core/templates/admin/index.html:45 msgid "Returns (30d)" msgstr "Retourzendingen (30d)" -#: engine/core/templates/admin/index.html:52 +#: engine/core/templates/admin/index.html:54 msgid "Processed orders (30d)" msgstr "Verwerkte orders (30d)" -#: engine/core/templates/admin/index.html:65 -msgid "Sales vs Returns (30d)" -msgstr "Verkoop vs Retourzendingen (30d)" +#: engine/core/templates/admin/index.html:67 +msgid "Income overview" +msgstr "Overzicht inkomsten" -#: engine/core/templates/admin/index.html:82 -msgid "Gross" -msgstr "Bruto" +#: engine/core/templates/admin/index.html:99 +#: engine/core/templates/admin/index.html:139 +msgid "Net" +msgstr "Netto-inkomsten" -#: engine/core/templates/admin/index.html:87 +#: engine/core/templates/admin/index.html:107 +#: engine/core/templates/admin/index.html:140 +msgid "Taxes" +msgstr "Belastingen" + +#: engine/core/templates/admin/index.html:115 +#: engine/core/templates/admin/index.html:141 msgid "Returns" msgstr "Geeft" -#: engine/core/templates/admin/index.html:94 +#: engine/core/templates/admin/index.html:122 +msgid "Gross (pie total)" +msgstr "Bruto-omzet" + +#: engine/core/templates/admin/index.html:201 +#: engine/core/templates/admin/index.html:326 msgid "Not enough data for chart yet." msgstr "Nog niet genoeg gegevens voor een grafiek." -#: engine/core/templates/admin/index.html:103 +#: engine/core/templates/admin/index.html:210 msgid "Quick Links" msgstr "Snelle links" -#: engine/core/templates/admin/index.html:110 +#: engine/core/templates/admin/index.html:217 msgid "No links available." msgstr "Geen links beschikbaar." -#: engine/core/templates/admin/index.html:119 +#: engine/core/templates/admin/index.html:225 +msgid "Daily sales (30d)" +msgstr "Dagelijkse verkoop (30d)" + +#: engine/core/templates/admin/index.html:254 +msgid "Orders (FINISHED)" +msgstr "Bestellingen (AFGESLOTEN)" + +#: engine/core/templates/admin/index.html:264 +msgid "Gross revenue" +msgstr "Bruto-omzet" + +#: engine/core/templates/admin/index.html:301 +msgid "Orders" +msgstr "Bestellingen" + +#: engine/core/templates/admin/index.html:308 +msgid "Gross" +msgstr "Bruto" + +#: engine/core/templates/admin/index.html:334 msgid "Most wished product" msgstr "Meest gewenste product" -#: engine/core/templates/admin/index.html:128 -#: engine/core/templates/admin/index.html:144 +#: engine/core/templates/admin/index.html:361 +#: engine/core/templates/admin/index.html:395 msgid "No data yet." msgstr "Nog geen gegevens." -#: engine/core/templates/admin/index.html:135 +#: engine/core/templates/admin/index.html:368 msgid "Most popular product" msgstr "Populairste product" @@ -3091,7 +3123,7 @@ msgstr "" "Afbeeldingsafmetingen mogen niet groter zijn dan w{max_width} x " "h{max_height} pixels" -#: engine/core/views.py:77 +#: engine/core/views.py:86 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -3100,7 +3132,7 @@ msgstr "" "terug. Het zorgt ervoor dat het antwoord de juiste inhoudstype header voor " "XML bevat." -#: engine/core/views.py:92 +#: engine/core/views.py:101 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -3110,16 +3142,16 @@ msgstr "" "verwerkt het verzoek, haalt het juiste sitemap detail antwoord op en stelt " "de Content-Type header in voor XML." -#: engine/core/views.py:127 +#: engine/core/views.py:136 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "Geeft een lijst met ondersteunde talen en de bijbehorende informatie." -#: engine/core/views.py:159 +#: engine/core/views.py:168 msgid "Returns the parameters of the website as a JSON object." msgstr "Retourneert de parameters van de website als een JSON-object." -#: engine/core/views.py:178 +#: engine/core/views.py:187 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3127,11 +3159,11 @@ msgstr "" "Verwerkt cachebewerkingen zoals het lezen en instellen van cachegegevens met" " een opgegeven sleutel en time-out." -#: engine/core/views.py:205 +#: engine/core/views.py:214 msgid "Handles `contact us` form submissions." msgstr "Handelt `contact met ons` formulier inzendingen af." -#: engine/core/views.py:226 +#: engine/core/views.py:235 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -3139,15 +3171,15 @@ msgstr "" "Handelt verzoeken af voor het verwerken en valideren van URL's van inkomende" " POST-verzoeken." -#: engine/core/views.py:266 +#: engine/core/views.py:275 msgid "Handles global search queries." msgstr "Handelt globale zoekopdrachten af." -#: engine/core/views.py:281 +#: engine/core/views.py:290 msgid "Handles the logic of buying as a business without registration." msgstr "Behandelt de logica van kopen als bedrijf zonder registratie." -#: engine/core/views.py:318 +#: engine/core/views.py:327 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3155,33 +3187,33 @@ msgstr "" "Handelt het downloaden af van een digitaal actief dat is gekoppeld aan een bestelling.\n" "Deze functie probeert het digitale activabestand te serveren dat zich in de opslagmap van het project bevindt. Als het bestand niet wordt gevonden, wordt er een HTTP 404-fout weergegeven om aan te geven dat de bron niet beschikbaar is." -#: engine/core/views.py:329 +#: engine/core/views.py:338 msgid "order_product_uuid is required" msgstr "order_product_uuid is vereist" -#: engine/core/views.py:336 +#: engine/core/views.py:345 msgid "order product does not exist" msgstr "bestelproduct bestaat niet" -#: engine/core/views.py:339 +#: engine/core/views.py:348 msgid "you can only download the digital asset once" msgstr "U kunt het digitale goed maar één keer downloaden" -#: engine/core/views.py:342 +#: engine/core/views.py:351 msgid "the order must be paid before downloading the digital asset" msgstr "" "de bestelling moet worden betaald voordat het digitale actief kan worden " "gedownload" -#: engine/core/views.py:348 +#: engine/core/views.py:357 msgid "the order product does not have a product" msgstr "Het bestelde product heeft geen product" -#: engine/core/views.py:385 +#: engine/core/views.py:394 msgid "favicon not found" msgstr "favicon niet gevonden" -#: engine/core/views.py:390 +#: engine/core/views.py:399 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3189,7 +3221,7 @@ msgstr "" "Handelt verzoeken af voor de favicon van een website.\n" "Deze functie probeert het favicon-bestand te serveren dat zich in de statische map van het project bevindt. Als het favicon-bestand niet wordt gevonden, wordt er een HTTP 404-fout weergegeven om aan te geven dat de bron niet beschikbaar is." -#: engine/core/views.py:402 +#: engine/core/views.py:411 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3200,11 +3232,11 @@ msgstr "" "Django admin-interface. Het gebruikt Django's `redirect` functie voor het " "afhandelen van de HTTP-omleiding." -#: engine/core/views.py:415 +#: engine/core/views.py:424 msgid "Returns current version of the eVibes. " msgstr "Geeft als resultaat de huidige versie van eVibes." -#: engine/core/views.py:494 +#: engine/core/views.py:587 msgid "Returns custom variables for Dashboard. " msgstr "Geeft aangepaste variabelen voor Dashboard." diff --git a/engine/core/locale/no_NO/LC_MESSAGES/django.mo b/engine/core/locale/no_NO/LC_MESSAGES/django.mo index 5e6d0bed92e7c3a52f0afbb46716bad55c2953ee..70062d7ca4cd7826d9a1e3d57c1c62e7de23ddc0 100644 GIT binary patch delta 14599 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 diff --git a/engine/core/locale/no_NO/LC_MESSAGES/django.po b/engine/core/locale/no_NO/LC_MESSAGES/django.po index e409ec07..24780375 100644 --- a/engine/core/locale/no_NO/LC_MESSAGES/django.po +++ b/engine/core/locale/no_NO/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-16 15:38+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -1133,7 +1133,7 @@ msgstr "Bufret data" msgid "camelized JSON data from the requested URL" msgstr "Camelized JSON-data fra den forespurte URL-en" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:252 msgid "only URLs starting with http(s):// are allowed" msgstr "Bare nettadresser som begynner med http(s):// er tillatt" @@ -2777,60 +2777,92 @@ msgstr "Om oss" msgid "Django site admin" msgstr "Django site admin" -#: engine/core/templates/admin/index.html:19 +#: engine/core/templates/admin/index.html:20 msgid "Dashboard" msgstr "Dashbord" -#: engine/core/templates/admin/index.html:25 +#: engine/core/templates/admin/index.html:27 msgid "Revenue (gross, 30d)" msgstr "Inntekter (brutto, 30d)" -#: engine/core/templates/admin/index.html:34 +#: engine/core/templates/admin/index.html:36 msgid "Revenue (net, 30d)" msgstr "Inntekter (netto, 30d)" -#: engine/core/templates/admin/index.html:43 +#: engine/core/templates/admin/index.html:45 msgid "Returns (30d)" msgstr "Returnerer (30d)" -#: engine/core/templates/admin/index.html:52 +#: engine/core/templates/admin/index.html:54 msgid "Processed orders (30d)" msgstr "Behandlede bestillinger (30d)" -#: engine/core/templates/admin/index.html:65 -msgid "Sales vs Returns (30d)" -msgstr "Salg vs. retur (30d)" +#: engine/core/templates/admin/index.html:67 +msgid "Income overview" +msgstr "Oversikt over inntekter" -#: engine/core/templates/admin/index.html:82 -msgid "Gross" -msgstr "Brutto" +#: engine/core/templates/admin/index.html:99 +#: engine/core/templates/admin/index.html:139 +msgid "Net" +msgstr "Netto inntekter" -#: engine/core/templates/admin/index.html:87 +#: engine/core/templates/admin/index.html:107 +#: engine/core/templates/admin/index.html:140 +msgid "Taxes" +msgstr "Skatter og avgifter" + +#: engine/core/templates/admin/index.html:115 +#: engine/core/templates/admin/index.html:141 msgid "Returns" msgstr "Retur" -#: engine/core/templates/admin/index.html:94 +#: engine/core/templates/admin/index.html:122 +msgid "Gross (pie total)" +msgstr "Brutto inntekter" + +#: engine/core/templates/admin/index.html:201 +#: engine/core/templates/admin/index.html:326 msgid "Not enough data for chart yet." msgstr "Ikke nok data til å lage et diagram ennå." -#: engine/core/templates/admin/index.html:103 +#: engine/core/templates/admin/index.html:210 msgid "Quick Links" msgstr "Hurtigkoblinger" -#: engine/core/templates/admin/index.html:110 +#: engine/core/templates/admin/index.html:217 msgid "No links available." msgstr "Ingen lenker tilgjengelig." -#: engine/core/templates/admin/index.html:119 +#: engine/core/templates/admin/index.html:225 +msgid "Daily sales (30d)" +msgstr "Daglig salg (30d)" + +#: engine/core/templates/admin/index.html:254 +msgid "Orders (FINISHED)" +msgstr "Bestillinger (AVSLUTTET)" + +#: engine/core/templates/admin/index.html:264 +msgid "Gross revenue" +msgstr "Brutto inntekter" + +#: engine/core/templates/admin/index.html:301 +msgid "Orders" +msgstr "Bestillinger" + +#: engine/core/templates/admin/index.html:308 +msgid "Gross" +msgstr "Brutto" + +#: engine/core/templates/admin/index.html:334 msgid "Most wished product" msgstr "Mest ønskede produkt" -#: engine/core/templates/admin/index.html:128 -#: engine/core/templates/admin/index.html:144 +#: engine/core/templates/admin/index.html:361 +#: engine/core/templates/admin/index.html:395 msgid "No data yet." msgstr "Ingen data ennå." -#: engine/core/templates/admin/index.html:135 +#: engine/core/templates/admin/index.html:368 msgid "Most popular product" msgstr "Mest populære produkt" @@ -3051,7 +3083,7 @@ msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" "Bildedimensjonene bør ikke overstige b{max_width} x h{max_height} piksler!" -#: engine/core/views.py:77 +#: engine/core/views.py:86 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -3059,7 +3091,7 @@ msgstr "" "Håndterer forespørselen om områdekartindeksen og returnerer et XML-svar. Den" " sørger for at svaret inneholder riktig innholdstypeoverskrift for XML." -#: engine/core/views.py:92 +#: engine/core/views.py:101 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -3069,17 +3101,17 @@ msgstr "" "behandler forespørselen, henter det aktuelle detaljsvaret for områdekartet " "og angir overskriften Content-Type for XML." -#: engine/core/views.py:127 +#: engine/core/views.py:136 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" "Returnerer en liste over språk som støttes, med tilhørende informasjon." -#: engine/core/views.py:159 +#: engine/core/views.py:168 msgid "Returns the parameters of the website as a JSON object." msgstr "Returnerer nettstedets parametere som et JSON-objekt." -#: engine/core/views.py:178 +#: engine/core/views.py:187 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3087,11 +3119,11 @@ msgstr "" "Håndterer cache-operasjoner som lesing og innstilling av cachedata med en " "spesifisert nøkkel og tidsavbrudd." -#: engine/core/views.py:205 +#: engine/core/views.py:214 msgid "Handles `contact us` form submissions." msgstr "Håndterer innsendinger av `kontakt oss`-skjemaer." -#: engine/core/views.py:226 +#: engine/core/views.py:235 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -3099,15 +3131,15 @@ msgstr "" "Håndterer forespørsler om behandling og validering av URL-er fra innkommende" " POST-forespørsler." -#: engine/core/views.py:266 +#: engine/core/views.py:275 msgid "Handles global search queries." msgstr "Håndterer globale søk." -#: engine/core/views.py:281 +#: engine/core/views.py:290 msgid "Handles the logic of buying as a business without registration." msgstr "Håndterer logikken med å kjøpe som en bedrift uten registrering." -#: engine/core/views.py:318 +#: engine/core/views.py:327 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3115,31 +3147,31 @@ msgstr "" "Håndterer nedlastingen av en digital ressurs som er knyttet til en bestilling.\n" "Denne funksjonen forsøker å levere den digitale ressursfilen som ligger i lagringskatalogen til prosjektet. Hvis filen ikke blir funnet, vises en HTTP 404-feil for å indikere at ressursen ikke er tilgjengelig." -#: engine/core/views.py:329 +#: engine/core/views.py:338 msgid "order_product_uuid is required" msgstr "order_product_uuid er påkrevd" -#: engine/core/views.py:336 +#: engine/core/views.py:345 msgid "order product does not exist" msgstr "ordreproduktet eksisterer ikke" -#: engine/core/views.py:339 +#: engine/core/views.py:348 msgid "you can only download the digital asset once" msgstr "Du kan bare laste ned den digitale ressursen én gang" -#: engine/core/views.py:342 +#: engine/core/views.py:351 msgid "the order must be paid before downloading the digital asset" msgstr "bestillingen må betales før nedlasting av den digitale ressursen" -#: engine/core/views.py:348 +#: engine/core/views.py:357 msgid "the order product does not have a product" msgstr "Ordreproduktet har ikke et produkt" -#: engine/core/views.py:385 +#: engine/core/views.py:394 msgid "favicon not found" msgstr "favicon ble ikke funnet" -#: engine/core/views.py:390 +#: engine/core/views.py:399 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3147,7 +3179,7 @@ msgstr "" "Håndterer forespørsler om faviconet til et nettsted.\n" "Denne funksjonen forsøker å vise favicon-filen som ligger i den statiske katalogen i prosjektet. Hvis favicon-filen ikke blir funnet, vises en HTTP 404-feil for å indikere at ressursen ikke er tilgjengelig." -#: engine/core/views.py:402 +#: engine/core/views.py:411 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3158,11 +3190,11 @@ msgstr "" "administrasjonsgrensesnittet. Den bruker Djangos `redirect`-funksjon for å " "håndtere HTTP-omdirigeringen." -#: engine/core/views.py:415 +#: engine/core/views.py:424 msgid "Returns current version of the eVibes. " msgstr "Returnerer gjeldende versjon av eVibes." -#: engine/core/views.py:494 +#: engine/core/views.py:587 msgid "Returns custom variables for Dashboard. " msgstr "Returnerer egendefinerte variabler for Dashboard." diff --git a/engine/core/locale/pl_PL/LC_MESSAGES/django.mo b/engine/core/locale/pl_PL/LC_MESSAGES/django.mo index ece54ca4fb59541a7aebfdd4f7b8094a5825e1d0..8eed1f1ecbf5c835347fd514d401abd477edb46c 100644 GIT binary patch delta 14589 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 delta 14297 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

11~$jbs5fD3id_>Ou@&)TY^weL z9ho*16mMj=%Lvqy?!&fd8r!%X(qpq6wQH{63mDZzzew=8j+(-4*dFhq+G*U>eoW87 z9>m{cD%N_@V>)wxvz*LJ_|Vy?nT?k_Z#!!@x8?JlSDlqx*z)Plv#1-CYiSqZ4Ai3B zgk|s~Y6>5rR|P>Y+0`G9qloLGcEujl>OO?J;78QHeSlhY0j=ySI|em1m9aDS#jJP$ z{qZaG!;=_|r%~^Ne_FBsb%R{3?Y^vl`f^zfb;DMuH(+KlC9uC2`+t_Ut z+SU$vGM1!#I%*AVLal*YsE^@%?d*sowe#9fvtATbr(ywC!NcwZ{l6)dN1+<%iW_ZLxQ`F~t zc&fDlY99~5BwUMnk{hTs@;mC4`VVRm$?)=_0D33SI3J*F?S9+M_+q1=WY(7(IKtiZ0Q_zCJs+V-&VIMft=hn>*V(>_2ds(cA* zWIn?fyo3oDlFs)4?f+yl8scH-!KM5-g>j^gS@`{)xC!d$M?RdiiF`WgRmzVOzfFET zen6T}eg>%qb?j6VKuRF(BVDI_4yl!EPxm)*1Y=1rkoQ*sM^WM~?j*(I$p3-!NYhAK z)q`np9!WoIHriH%SX9>_&Q-GA}O2 zw)pJe&FMRMf0)-vD_zBQ{DnB2bNAw8;z{nhc)Um1=ak(-eGG3w9i_AI{FBHWqd=>^ zysJ(P6}WC5 zN$-w!SVH5keK>?lwuA4Ff*q&`B)@<%4~buP%nOudBk>*7cj&+5G;r++Url_=BEgVc|TzAny!db`Eq z64Fredq^|L>rZak$d4hvjP&gImi+Go7hJ)3d`0trfeK#Z|K|uG`jnJN`5jlYhMcO$oKPz zYpg1cBn_v&;d2dWUzd0;)~mQAX(;E;#Ok<^^z8Va%xA=>lg{?#SaXzl z&k!si1rdyJjo!z}q+XQqQZsd_{~LAecFx6Ow#eK>eRlAL$oFBT;wj`mBRpyz26{gg-tIA0`bXRp**1 zqz0r=(kN0bPJExbMX1l22jp|={h#Psc!vTVACcZA|AUKn5J!^FPZ~i(I_8l77VBbH z>_hoysP7J?$mb_@r%p!;@_%C?V*MZCk-k#u z9Kj^i@zmn`-|fl{qdbgr8<66OpWw6OJoy}?vJ||ma#y#*Ie}}xqBzrCkdt_V%WM6a znG^)Of-3GJg`3IGBpr2S8I+YL4^5<|kskyuP zN%AX5^Ql`%S$R?fDVkXKH%XA4w2k!a_>Rg(E*OHvh*P;Jfb=E#L6oiXHDFIFLcW%Z zcj9`N&rP*I*E~ClyUah-H`6)3@y7$MB96k-q&}ozcVS6IxA5L%t4q zez7&vNo|Q=qx=Q(I({L=_;S4WT|3FdiR3@T8=N=Jo%;#q(er=eE@?c@E@RO^o z>TdXuGEL7|QWRzNNEKb(RA+sz`JI%FRNIwt`hSn?l-H%aFKHa5!Nl!JTgjh7f9?M_ zNSjDu6h@Ms9gVoCvkUU!pQMd0KEwGP$OpOjd5UvgMG8uD&a>l3^3_QFNp+~#(VgV2 zKtU9l>MHqvM-$?joSgOlmDi%I9M`=|`T6JSI#Fh*(=m*EcJg16AMMIiewx%q8GG3E zpFnU$7jwLY-;-W(aT>m7tIT`k^Sk_Eoa^$jSeTo1#J618G|uh++>N`r_FT1(OB%zU zo-6r={5zy(TsQz@Tmyq~9r0_V#Wa*o+=G;p{4&b!k#wYy=2L#xWKOP@k~Q;u;uOEk z2}vgcGP^Wd>zC=@{IDnUW{Wn_VQH_X4~-l#G_qCtu;D`n42>+4P^o9xH)@U?l9@U3 zTFcCBhYtB?Ec O(=&H>zF^Poj{gI?cQcXz diff --git a/engine/core/locale/pl_PL/LC_MESSAGES/django.po b/engine/core/locale/pl_PL/LC_MESSAGES/django.po index 98d101ab..52fec4a7 100644 --- a/engine/core/locale/pl_PL/LC_MESSAGES/django.po +++ b/engine/core/locale/pl_PL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-16 15:38+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -1139,7 +1139,7 @@ msgstr "Dane w pamięci podręcznej" msgid "camelized JSON data from the requested URL" msgstr "Kamelizowane dane JSON z żądanego adresu URL" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:252 msgid "only URLs starting with http(s):// are allowed" msgstr "Dozwolone są tylko adresy URL zaczynające się od http(s)://" @@ -2788,60 +2788,92 @@ msgstr "O nas" msgid "Django site admin" msgstr "Administrator strony Django" -#: engine/core/templates/admin/index.html:19 +#: engine/core/templates/admin/index.html:20 msgid "Dashboard" msgstr "Pulpit nawigacyjny" -#: engine/core/templates/admin/index.html:25 +#: engine/core/templates/admin/index.html:27 msgid "Revenue (gross, 30d)" msgstr "Przychody (brutto, 30d)" -#: engine/core/templates/admin/index.html:34 +#: engine/core/templates/admin/index.html:36 msgid "Revenue (net, 30d)" msgstr "Przychody (netto, 30d)" -#: engine/core/templates/admin/index.html:43 +#: engine/core/templates/admin/index.html:45 msgid "Returns (30d)" msgstr "Zwroty (30d)" -#: engine/core/templates/admin/index.html:52 +#: engine/core/templates/admin/index.html:54 msgid "Processed orders (30d)" msgstr "Przetworzone zamówienia (30d)" -#: engine/core/templates/admin/index.html:65 -msgid "Sales vs Returns (30d)" -msgstr "Sprzedaż a zwroty (30d)" +#: engine/core/templates/admin/index.html:67 +msgid "Income overview" +msgstr "Przegląd dochodów" -#: engine/core/templates/admin/index.html:82 -msgid "Gross" -msgstr "Brutto" +#: engine/core/templates/admin/index.html:99 +#: engine/core/templates/admin/index.html:139 +msgid "Net" +msgstr "Przychody netto" -#: engine/core/templates/admin/index.html:87 +#: engine/core/templates/admin/index.html:107 +#: engine/core/templates/admin/index.html:140 +msgid "Taxes" +msgstr "Podatki" + +#: engine/core/templates/admin/index.html:115 +#: engine/core/templates/admin/index.html:141 msgid "Returns" msgstr "Zwroty" -#: engine/core/templates/admin/index.html:94 +#: engine/core/templates/admin/index.html:122 +msgid "Gross (pie total)" +msgstr "Przychód brutto" + +#: engine/core/templates/admin/index.html:201 +#: engine/core/templates/admin/index.html:326 msgid "Not enough data for chart yet." msgstr "Za mało danych na wykres." -#: engine/core/templates/admin/index.html:103 +#: engine/core/templates/admin/index.html:210 msgid "Quick Links" msgstr "Szybkie łącza" -#: engine/core/templates/admin/index.html:110 +#: engine/core/templates/admin/index.html:217 msgid "No links available." msgstr "Brak dostępnych linków." -#: engine/core/templates/admin/index.html:119 +#: engine/core/templates/admin/index.html:225 +msgid "Daily sales (30d)" +msgstr "Dzienna sprzedaż (30d)" + +#: engine/core/templates/admin/index.html:254 +msgid "Orders (FINISHED)" +msgstr "Zamówienia (ZAKOŃCZONE)" + +#: engine/core/templates/admin/index.html:264 +msgid "Gross revenue" +msgstr "Przychód brutto" + +#: engine/core/templates/admin/index.html:301 +msgid "Orders" +msgstr "Zamówienia" + +#: engine/core/templates/admin/index.html:308 +msgid "Gross" +msgstr "Brutto" + +#: engine/core/templates/admin/index.html:334 msgid "Most wished product" msgstr "Najbardziej pożądany produkt" -#: engine/core/templates/admin/index.html:128 -#: engine/core/templates/admin/index.html:144 +#: engine/core/templates/admin/index.html:361 +#: engine/core/templates/admin/index.html:395 msgid "No data yet." msgstr "Brak danych." -#: engine/core/templates/admin/index.html:135 +#: engine/core/templates/admin/index.html:368 msgid "Most popular product" msgstr "Najpopularniejszy produkt" @@ -3064,7 +3096,7 @@ msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" "Wymiary obrazu nie powinny przekraczać w{max_width} x h{max_height} pikseli." -#: engine/core/views.py:77 +#: engine/core/views.py:86 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -3072,7 +3104,7 @@ msgstr "" "Obsługuje żądanie indeksu mapy witryny i zwraca odpowiedź XML. Zapewnia, że " "odpowiedź zawiera odpowiedni nagłówek typu zawartości dla XML." -#: engine/core/views.py:92 +#: engine/core/views.py:101 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -3082,16 +3114,16 @@ msgstr "" "przetwarza żądanie, pobiera odpowiednią szczegółową odpowiedź mapy witryny i" " ustawia nagłówek Content-Type dla XML." -#: engine/core/views.py:127 +#: engine/core/views.py:136 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "Zwraca listę obsługiwanych języków i odpowiadające im informacje." -#: engine/core/views.py:159 +#: engine/core/views.py:168 msgid "Returns the parameters of the website as a JSON object." msgstr "Zwraca parametry strony internetowej jako obiekt JSON." -#: engine/core/views.py:178 +#: engine/core/views.py:187 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3099,11 +3131,11 @@ msgstr "" "Obsługuje operacje pamięci podręcznej, takie jak odczytywanie i ustawianie " "danych pamięci podręcznej z określonym kluczem i limitem czasu." -#: engine/core/views.py:205 +#: engine/core/views.py:214 msgid "Handles `contact us` form submissions." msgstr "Obsługuje zgłoszenia formularzy `kontaktuj się z nami`." -#: engine/core/views.py:226 +#: engine/core/views.py:235 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -3111,15 +3143,15 @@ msgstr "" "Obsługuje żądania przetwarzania i sprawdzania poprawności adresów URL z " "przychodzących żądań POST." -#: engine/core/views.py:266 +#: engine/core/views.py:275 msgid "Handles global search queries." msgstr "Obsługuje globalne zapytania wyszukiwania." -#: engine/core/views.py:281 +#: engine/core/views.py:290 msgid "Handles the logic of buying as a business without registration." msgstr "Obsługuje logikę zakupu jako firma bez rejestracji." -#: engine/core/views.py:318 +#: engine/core/views.py:327 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3127,31 +3159,31 @@ msgstr "" "Obsługuje pobieranie zasobu cyfrowego powiązanego z zamówieniem.\n" "Ta funkcja próbuje obsłużyć plik zasobu cyfrowego znajdujący się w katalogu przechowywania projektu. Jeśli plik nie zostanie znaleziony, zgłaszany jest błąd HTTP 404 wskazujący, że zasób jest niedostępny." -#: engine/core/views.py:329 +#: engine/core/views.py:338 msgid "order_product_uuid is required" msgstr "Order_product_uuid jest wymagany" -#: engine/core/views.py:336 +#: engine/core/views.py:345 msgid "order product does not exist" msgstr "zamówiony produkt nie istnieje" -#: engine/core/views.py:339 +#: engine/core/views.py:348 msgid "you can only download the digital asset once" msgstr "Zasób cyfrowy można pobrać tylko raz" -#: engine/core/views.py:342 +#: engine/core/views.py:351 msgid "the order must be paid before downloading the digital asset" msgstr "zamówienie musi zostać opłacone przed pobraniem zasobu cyfrowego" -#: engine/core/views.py:348 +#: engine/core/views.py:357 msgid "the order product does not have a product" msgstr "Produkt zamówienia nie ma produktu" -#: engine/core/views.py:385 +#: engine/core/views.py:394 msgid "favicon not found" msgstr "nie znaleziono favicon" -#: engine/core/views.py:390 +#: engine/core/views.py:399 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3159,7 +3191,7 @@ msgstr "" "Obsługuje żądania favicon strony internetowej.\n" "Ta funkcja próbuje obsłużyć plik favicon znajdujący się w katalogu statycznym projektu. Jeśli plik favicon nie zostanie znaleziony, zgłaszany jest błąd HTTP 404 wskazujący, że zasób jest niedostępny." -#: engine/core/views.py:402 +#: engine/core/views.py:411 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3170,11 +3202,11 @@ msgstr "" "administratora Django. Używa funkcji `redirect` Django do obsługi " "przekierowania HTTP." -#: engine/core/views.py:415 +#: engine/core/views.py:424 msgid "Returns current version of the eVibes. " msgstr "Zwraca aktualną wersję aplikacji eVibes." -#: engine/core/views.py:494 +#: engine/core/views.py:587 msgid "Returns custom variables for Dashboard. " msgstr "Zwraca zmienne niestandardowe dla Dashboard." diff --git a/engine/core/locale/pt_BR/LC_MESSAGES/django.mo b/engine/core/locale/pt_BR/LC_MESSAGES/django.mo index 3b614b5cca7067e398fa5b92564d23b1f1ed5389..2f51c90c473493b02ef5ebc432dac8f1d409f241 100644 GIT binary patch delta 14585 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 delta 14309 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 diff --git a/engine/core/locale/pt_BR/LC_MESSAGES/django.po b/engine/core/locale/pt_BR/LC_MESSAGES/django.po index e073832b..b8548d3e 100644 --- a/engine/core/locale/pt_BR/LC_MESSAGES/django.po +++ b/engine/core/locale/pt_BR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-16 15:38+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -1123,7 +1123,7 @@ msgstr "Dados em cache" msgid "camelized JSON data from the requested URL" msgstr "Dados JSON camelizados da URL solicitada" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:252 msgid "only URLs starting with http(s):// are allowed" msgstr "Somente URLs que começam com http(s):// são permitidos" @@ -2767,60 +2767,92 @@ msgstr "Sobre nós" msgid "Django site admin" msgstr "Administrador do site Django" -#: engine/core/templates/admin/index.html:19 +#: engine/core/templates/admin/index.html:20 msgid "Dashboard" msgstr "Painel de controle" -#: engine/core/templates/admin/index.html:25 +#: engine/core/templates/admin/index.html:27 msgid "Revenue (gross, 30d)" msgstr "Receita (bruta, 30d)" -#: engine/core/templates/admin/index.html:34 +#: engine/core/templates/admin/index.html:36 msgid "Revenue (net, 30d)" msgstr "Receita (líquida, 30d)" -#: engine/core/templates/admin/index.html:43 +#: engine/core/templates/admin/index.html:45 msgid "Returns (30d)" msgstr "Devoluções (30d)" -#: engine/core/templates/admin/index.html:52 +#: engine/core/templates/admin/index.html:54 msgid "Processed orders (30d)" msgstr "Pedidos processados (30d)" -#: engine/core/templates/admin/index.html:65 -msgid "Sales vs Returns (30d)" -msgstr "Vendas versus devoluções (30d)" +#: engine/core/templates/admin/index.html:67 +msgid "Income overview" +msgstr "Visão geral da renda" -#: engine/core/templates/admin/index.html:82 -msgid "Gross" -msgstr "Bruto" +#: engine/core/templates/admin/index.html:99 +#: engine/core/templates/admin/index.html:139 +msgid "Net" +msgstr "Receita líquida" -#: engine/core/templates/admin/index.html:87 +#: engine/core/templates/admin/index.html:107 +#: engine/core/templates/admin/index.html:140 +msgid "Taxes" +msgstr "Impostos" + +#: engine/core/templates/admin/index.html:115 +#: engine/core/templates/admin/index.html:141 msgid "Returns" msgstr "Devoluções" -#: engine/core/templates/admin/index.html:94 +#: engine/core/templates/admin/index.html:122 +msgid "Gross (pie total)" +msgstr "Receita bruta" + +#: engine/core/templates/admin/index.html:201 +#: engine/core/templates/admin/index.html:326 msgid "Not enough data for chart yet." msgstr "Ainda não há dados suficientes para o gráfico." -#: engine/core/templates/admin/index.html:103 +#: engine/core/templates/admin/index.html:210 msgid "Quick Links" msgstr "Links rápidos" -#: engine/core/templates/admin/index.html:110 +#: engine/core/templates/admin/index.html:217 msgid "No links available." msgstr "Não há links disponíveis." -#: engine/core/templates/admin/index.html:119 +#: engine/core/templates/admin/index.html:225 +msgid "Daily sales (30d)" +msgstr "Vendas diárias (30d)" + +#: engine/core/templates/admin/index.html:254 +msgid "Orders (FINISHED)" +msgstr "Pedidos (FINALIZADOS)" + +#: engine/core/templates/admin/index.html:264 +msgid "Gross revenue" +msgstr "Receita bruta" + +#: engine/core/templates/admin/index.html:301 +msgid "Orders" +msgstr "Pedidos" + +#: engine/core/templates/admin/index.html:308 +msgid "Gross" +msgstr "Bruto" + +#: engine/core/templates/admin/index.html:334 msgid "Most wished product" msgstr "Produto mais desejado" -#: engine/core/templates/admin/index.html:128 -#: engine/core/templates/admin/index.html:144 +#: engine/core/templates/admin/index.html:361 +#: engine/core/templates/admin/index.html:395 msgid "No data yet." msgstr "Ainda não há dados." -#: engine/core/templates/admin/index.html:135 +#: engine/core/templates/admin/index.html:368 msgid "Most popular product" msgstr "Produto mais popular" @@ -3040,7 +3072,7 @@ msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" "As dimensões da imagem não devem exceder w{max_width} x h{max_height} pixels" -#: engine/core/views.py:77 +#: engine/core/views.py:86 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -3049,7 +3081,7 @@ msgstr "" "Ele garante que a resposta inclua o cabeçalho de tipo de conteúdo apropriado" " para XML." -#: engine/core/views.py:92 +#: engine/core/views.py:101 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -3059,17 +3091,17 @@ msgstr "" "processa a solicitação, obtém a resposta detalhada apropriada do mapa do " "site e define o cabeçalho Content-Type para XML." -#: engine/core/views.py:127 +#: engine/core/views.py:136 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" "Retorna uma lista de idiomas suportados e suas informações correspondentes." -#: engine/core/views.py:159 +#: engine/core/views.py:168 msgid "Returns the parameters of the website as a JSON object." msgstr "Retorna os parâmetros do site como um objeto JSON." -#: engine/core/views.py:178 +#: engine/core/views.py:187 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3077,11 +3109,11 @@ msgstr "" "Manipula operações de cache, como ler e definir dados de cache com uma chave" " e um tempo limite especificados." -#: engine/core/views.py:205 +#: engine/core/views.py:214 msgid "Handles `contact us` form submissions." msgstr "Trata os envios de formulários \"entre em contato conosco\"." -#: engine/core/views.py:226 +#: engine/core/views.py:235 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -3089,15 +3121,15 @@ msgstr "" "Trata as solicitações de processamento e validação de URLs de solicitações " "POST recebidas." -#: engine/core/views.py:266 +#: engine/core/views.py:275 msgid "Handles global search queries." msgstr "Trata as consultas de pesquisa global." -#: engine/core/views.py:281 +#: engine/core/views.py:290 msgid "Handles the logic of buying as a business without registration." msgstr "Lida com a lógica de comprar como uma empresa sem registro." -#: engine/core/views.py:318 +#: engine/core/views.py:327 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3105,31 +3137,31 @@ msgstr "" "Trata do download de um ativo digital associado a um pedido.\n" "Essa função tenta servir o arquivo de ativo digital localizado no diretório de armazenamento do projeto. Se o arquivo não for encontrado, será gerado um erro HTTP 404 para indicar que o recurso não está disponível." -#: engine/core/views.py:329 +#: engine/core/views.py:338 msgid "order_product_uuid is required" msgstr "order_product_uuid é obrigatório" -#: engine/core/views.py:336 +#: engine/core/views.py:345 msgid "order product does not exist" msgstr "o produto do pedido não existe" -#: engine/core/views.py:339 +#: engine/core/views.py:348 msgid "you can only download the digital asset once" msgstr "Você só pode fazer o download do ativo digital uma vez" -#: engine/core/views.py:342 +#: engine/core/views.py:351 msgid "the order must be paid before downloading the digital asset" msgstr "o pedido deve ser pago antes de fazer o download do ativo digital" -#: engine/core/views.py:348 +#: engine/core/views.py:357 msgid "the order product does not have a product" msgstr "O produto do pedido não tem um produto" -#: engine/core/views.py:385 +#: engine/core/views.py:394 msgid "favicon not found" msgstr "favicon não encontrado" -#: engine/core/views.py:390 +#: engine/core/views.py:399 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3137,7 +3169,7 @@ msgstr "" "Trata as solicitações do favicon de um site.\n" "Essa função tenta servir o arquivo favicon localizado no diretório estático do projeto. Se o arquivo favicon não for encontrado, será gerado um erro HTTP 404 para indicar que o recurso não está disponível." -#: engine/core/views.py:402 +#: engine/core/views.py:411 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3148,11 +3180,11 @@ msgstr "" "índice da interface de administração do Django. Ela usa a função `redirect` " "do Django para lidar com o redirecionamento HTTP." -#: engine/core/views.py:415 +#: engine/core/views.py:424 msgid "Returns current version of the eVibes. " msgstr "Retorna a versão atual do eVibes." -#: engine/core/views.py:494 +#: engine/core/views.py:587 msgid "Returns custom variables for Dashboard. " msgstr "Retorna variáveis personalizadas para o Dashboard." diff --git a/engine/core/locale/ro_RO/LC_MESSAGES/django.mo b/engine/core/locale/ro_RO/LC_MESSAGES/django.mo index b076f8992dba2499e0db7409d125b8230acdc459..cfd8bd78045b1e4797e3e60e664a716a87e6f656 100644 GIT binary patch delta 14597 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 delta 14305 zcmZA72YgT0|Htw3B@r=W#|Q~BtdImDiWm{G_ue!1s#$yyvsSB=qN+s|r6p8LjkeTk zwAI>s{LE@;X{)9Ezuw<-{Qv&H`*%7G*M~ z7=D=Fm?4>sd8v#_jd@Vj7>dk8?CvopOS~~ziThPECIE+FHXMt=I1LNq3iQVvm=|{= z&6?xrhbM5dFoI1w#_-d8ILsxFROfq3W22ctQy%^+O_+WSct9_i_sM8TY9!kyNyK2{ zR#*@Rp`LgeYNY02AzX^;;76$QcOZQ*$8jGw3Tnux5`ULsOnc(UM#j`bZ)4luS53&P z;S4f*;?tN9f5I>{O>M_YVh+McRDEUC2sA`y&-6zvqSaUet2Sf)u^npaenmaV6I44v z&F%d{nlt__=us>MT2yI_TXvj>mvI?xpnhCSW6ER6*2Z*ZE}OSuxT)X7KI}K}tgzc~tPDWk#9+t;%Y`xb!aTQ^cjY*)QF&4p@7=rIQ_n{iNh*dCvsnbZ+ zMD2!FsG%K*xp4;u;6W^i8K}i~1J&+B4AlP5J%#N-L1AQpnh{tV_hWrDQ|(kFVL8GM zs9i7}bKx>qzaC#9-i6^cU02rr*y8aq!$o*&7HIWzfphZ#JJbVV@uMWhx6S|-p?u#0U z;jVlNYOd#?hI|!j2sfi{xF2<+<1Rjrp~QDk@0Dyb?IO>Idca^*`=K)#f6YlH3e-RY z)QwuBAEu%%7=pU-Xw(QycfN@_{{sxiJ*X+Wj+(+pu0H!LJ0+p0j#ozAH`z-@J?ZLB z7=nd~r#e@-`W>hX4`KkG!SZ+owJ3AWwl}Pfid$ecoQV4B?La-iFQ^Cj$LS54V|!c@ z)#EtS6E#9DqVA|0k3#i$CaS|LQ4M{FI&Uwk<0qUyq0Y6q#$EAR0BqH8CqTL#=`Km>v6K7>+>IzkzCJCC1dW9BSmQV`Y4T z{usT0DboJ0OoksPW(cZ>8&Gq69;5I&>WOkJw6EM~)Q#Gr-V5_lL%R+&b)RA=W}w~& zKcgNf@HO8T-4w+!!~@Vfgv=E(>QS@T?GU%Y2E@HlPq+~^65BBk?nVu12C9RZ7ugP% z#~|X$sPmFg9c_>0a3NO2-KZ(Ow}|miA@eTzqoPjC}E zV&GeL3VNef`*PHI2T*J0H&h3npl+CTx!p}gQ8y}w#jrYtVmmCa{XdqBE?kQ_FdcQ` ze$-H1#3J|<)xkn5>>?|UG+-*Cp0o?*#!*-e(=b1Nj%xRN%#N2(?cc?s+W!G7?P@NC z+IAhCJyAn80ON5IYVqwrEu!nLJos(CZ>il$!#)DWDA7MQ#_nvKd7;2Y%fLb#T zP#ydO)#03L?EMO@@!C0yr=TPioiH3Hxp)m~2){dRg-y1{+aoCLgYzX5U1zNi<}Qq+j-bKZ631=ibN%{8$M z_2W>l*!NJ2^#qnj^MP%@0!9*c#3=MmC8LHnx`LCaj{JiOSat(XhkY>?*I*2uLd{{; zjkdfFDt;L?HJefAU2x{wWXls#Q#K44QLlNQObrUoV;mOx&^Fi@s}N5{J<)blgEuf4 z3vRZ5+wF#mSED+58xt{Ni?u(h`~ytFn^+Iaf27|X%>QsQbtp(j&D~?Hg$WnyH|9joHrnI5-x0qf#G zSH9V~9kWrs8`a>~mTOOS*j{2BWrd6h>ohtbjw&dz8#dGHKXcU-E9&cj=7Wl+2rk7CH^+k=?yQq;mg=O(6hG67Qd!MA8jDKwk zhEPxiH=`Q9j-@f^Q~n_etDv5IBx(pJVRlSI?Vg3Gso8)Jyt*y4G2U+YTqYf-bt$}r@j(muE!h=`0R1w@(&_0mQv=5)MMm z^&QlC!F%lDPC%^@FKTgmXOq$DU5fc|7Y5>S)DxY-8kl9T-6eHVi*q_^st#dUe1saY z68r4jr(jLu$*2+g9JR)-V=VUH@0&8OSx!a`?nPC2zTn>gurgM~DX1Il#1OoOdNT8+ z?LbA;jk{nuoQZur#%#kP#DxyF zm>KJ#hBz5#V{_CMMm9ZJ7lNu5NfD@a9+ddbm$?5a(^@ChZCdF|77(Oy73`E`uMzg=AF zj2-eCsO{JQ3u9~a$027Je+~U83Q}+ZKIKMduoLmgbNuy+xYBw4?vGC{xP5=gx)2L; z-U`f*+fXl_L#Q|6Q&h)tUbed+94iqgV>KLinepc(X0}ogkNvOkiN$wN+obzd+dwL6 zJ5Ir(I1g8Q_^4nYamsZ&$E`7f@?Pl4M5k}C?TF{z7XJ6R-Wu-&nEl1Aba_!IOt9bmF~_c*PP={hbTB;l@9CB~zaEgxy2=fxqn31U%zf z${S-8ZvBUw;JJSp9nPEP@t8ftRs1|Ah}ip^zsGz-#xJYK{7l97**v~~!Q7w2NyPneh;65n4X0o|9%vE1j;HebZe&smd3@i1 zx3LQ6Wnc^LZ!!nl6WX9|I0x0CMVNs5u`K?L+HMhrJ-!!BFN`K$fDLdDhN52)YdFRb zH$b&B4jW>+tA8rFzX>VoF@3QX>dDq(0PaCO(LvM{oW|mK8#O`!#XP1f=EBxE7#rb! z7iSN#*L6p|2Zm!2T!XoAFM4&u3^I%GChAGY7x(z~=UU81yb-m^_o6O5jJ^(`I(pm1 z4^VULDPgY*LA4))nxaOi?b-?R;)oI+uW!hwQ&5b8`B)M+Vi;zirs5Z8NT?mk#u!KW zOjHMVp*nILtK%uu3nnPc-moC*h80i`kchgjd6?G@Wp8)lK-7(=x_AxhNq3<};25fb zlcO=K}}^_SKi;nBfMlZBx$Javm7-AAETb&yz?sR32&h~ z^b6)hy{8rD!cZ)MS{sR|>yur5Q&h*gIY*-2jNX}K%8*%w>fvG3B0Gm6_yjelg-Y87 z;!uky*~Pt3`+W@R{JE&>H@Nb{&WorH{fgRteN1cBkBhW9>#^q4g)x|>E|Lw_yQZNiP_pkXXcwJ&R z@lh8)Kn-nH-m9AP+}IL>F%Ac!R{1K_w`2>d<2O;?j=xYH%2LL@Swk?p_J5QssEkR( zwN-&LupYjS_3YVdexQRMs?Uz&UPRhs+}MZ>9G=2XcmexhdUBL-iOn_&ddO@s3bz~K4aK?mCDg~NJ?c%m!`6GvJ~En{!x)5TP(yqNHTRhlY+Mxe zWK~de+Z(lyhoM&cbgYVVF&4kXj`$cg!p&>g4$nZfvj=^@|L>8}_IZSAFy~9QBPCI5 zBM$Wjtc!Z$Zm1i*iCQxmsE%Jjt@ejl0*lnN*Cn7j*bcQlyP`&N0v6W(-$X{M_aJJU zT|jjxtd{Li0&0YsV=3&8+9hdN2REP=(>+v&AEKth)VB2nQ8(;>T0?VCi}DD1n~}+p zXctLm>_NN`HN+24`~NBG28HUlHy7%OqEI)gh}tzts0ZnYdVt}m5uJlNZrM(v_UsE<;ydiLX% zfU0kTT7*68d2P=Ixf7f0f#iuz2CLDj#DgYh_OvDHYj^&?O> zT8ZlL`>5UX87AW$FPTCf-bfAXg(=B)n|M*%=OSts+;s6jsE<@YLu(n-lQwqoDCZLA zPHaK_SyYG1rr4=!i+YoK2ast`<^<|%R<@DHbi;|L)qWn!V7|t7jnqWV^$64|pW({a zq282dQSXm}P3-xtP`hO&s=YlfevC=n-;{4^_v=X1>RgA~1^+>Lc3N>qnv<=u_;0&#*OiYs*w~f3uB@rXZ-DHPyM_ z8Qk8M4|g7RhIX*!Ru}evAu`J; z(3@);YJYy=PB?}7`@kL4TFBAWeukUjd&Ki`0#@o~7uP1#P+!MzjOuQupc%#zFGjul z51~5zxVzV07}>*azwW42x&+nJ4AlPq9o3OiJ>B2wP`hOus^O!kHS-L$9jo@TAD?ch z-vytd-k@Kh-mFJ36i<4|XkY%0r7^6x9jXSXuV4$*Z@_`5q27Y}s(pfLIH-?(4;00A z#5GadZ87QzkDYJKgSb|~t4?+h}DWL`u4Z2lf~;sY#)5&djKtx(%$I;tZl zP;22F>P2-AHRO*_i>pX~8%Lw!HW-bmsBOFy88NRpOh${tlWKodW=Fk9`k`JtYfwX- zfqAgR0Q=&JL5*BX)Y_Sds-KH`;yLCm+{95)X5z)(J|sisDr+kVA4kNeMy5UKTiA(`AN8q^cwkDr0Uf14l@CyIMU~& z8f;6L4ylPI--&HkMI9>(S>!9ZHgn;0&HrOg9!}*7lK#D>2T30wFD}Qn`21+hIXZX)o4KU7ZD>Bm zd&I$NI$t59WK^7=IMoiMp+BtNMI z=|1r^e1r!{hd4JM{)^grQ_1ha4cG&hkuH(HLMqR73rX72?XaZAUoV7_R5rkQ*ntXd zsn^MSNKvGhDDxv#Ca**POI|)w1LB*+yKp~dr)&_;M;&=dNu;$3+|h({bCa}Pz1R6; zE@>PEQ@F@or~h7PDp97RH)#+R>?Gfj30sq^h;Ncck>5p{MZP`f`H`PM{w>n;<45uj z2rjsSNyu*TnhR9$#r%JVUNHMe36$S=HH*m?C4KzDxyjURBc+lCkiMtx6<6PkID_;) zaYZ_{g8b*C!q1W=kGaOG;#ksX>KnY!KrzlL`9iF}CzK+M z;@sI-4HuD~A7{yYNn9Ems!sQ>PNpTkNvc9)GhS%01!Z%IOOPg!))DKt;~MQr*-TO` z;=7ddGWES)tCPR26FJ_YO#j!c4!y$X`Esl|%DkruUMB?-jB$DC0Y0>QMg| z>e%UAfF*2^xr2JcrBGJOm8FsYl%$_(t!d{5c^!OKOj+W|Hn!tm!BzI*gp;Jq#J`Y^ zlkdjKpSgN|2KbIGc+KT)3IBP8_$X-@sT$X$k&;MxN#jU0IdLm>i*W?$G5H*N|0lQ> z-lagtXQcPYUv%+y;!yGhNn>b8$9(cXVjb*`sg!?-`VN#PUy#&`Ivvf)|Aj?}_5TQu z^_B8&L4Q5}87kW2+t{4cnY5Cm<8PdU9xiM{{wq=$@|Rt`&bjUK{FX6akh;H67fAjb zDTMR7bDfTT#7{_ksg1W21wWC>lKPQak#tP){mJ6OH%Py8@=v5vq&7740qWR;y@(@8 z6G$P%O>hTwXGlL2e~5YUKRAIDMXJj=)A{{rh7shV^7*lVio*m2P)De9w++po&KFtZ zuCLFzSxIRxR=RvT=kzDvnEG!qkvLfMuU|bW?j}Rr$s+cJPU%0rj3PaKp*|Dw_rzmJ z9bY(Cr{s5WVdp^3txfrFq>`?zI3CiR9iVV1Cmh2>)bY&X`@h?jeVOtCoSQ_7C4P#} zkMrcSlk{t;o623?cIRZSJwkE1yC4VgWS7_aGqWkk=?bd2ixh4mKb!Q8D_crgIZ_bu zVbUC~)3Mt3CtozoLwT|*k8`?e^DlMd2*#7TkOu4h-;5JYvXQos zo*yTvZ0LfKSc13<7X^^MCO@3A)xHMoNyW(5bny;c@A5%ZXW^RXN0`g}Lw!@7;~RfG z=qh3;JVi<+<#ZR8!dHo#aL#fp?9Lrez8Oi!7o=qJfBT~U`{QS_Z7Ki775(AP??juQ zQ0D!HKjsk(rD7*}e|OXVc!jtI={xEQ5&uKJHu*-RnWVPFuTuUJc^&si(Y_q-eb-K1 z;so-a;!Vz*=+51XdG!2y-32MmIqrn6xQVi{t|3+Tq3mV6NLot17VRDbw`4LW-bF|534mtDEku&ovK7 zexzEijMM-3$VPb`$_J1pQks*vJ!v!f6PQK&{|(YcQUMA>NzadlT-4bG`SB0Z1{a^^ z{0`&;UHl?pTvvgDaL##t{D*uzX$Yw{^*VZyyyYo~AX7~x|8+DXuEEKf|Es(vWo5bU zJ<89&P}hkvL!FM7$!8<~HTm(bOy#FYZIrQxUH@?eS9LMRDm+UX=;EIEk*zWxkuT`- zM{$A6SHz;+q$93!WivQ;$O|{_;o5W6J}zqvZ@p0R1NnDJO}TI=M!N<^;QPd{l9td= zU*g`R9OU1k>{pVGo}||(e`wOD#V2P@KcA51pFTP9+ko`04cGanXK8lSlYXapo5%t^ z2lpKnI%ZU8tG+Lf9yxSWXjELKK4sphF?M8n`q%<3)2|%P5|HlqUF*Q~31?4aN$+%} yRi^Z>uMLha+U~3OhE6z;HgbS29;u5*llNV{G$xN{+S04tJOy{2$m2QR?SBA2*iJ+M diff --git a/engine/core/locale/ro_RO/LC_MESSAGES/django.po b/engine/core/locale/ro_RO/LC_MESSAGES/django.po index 136c055d..b1948d23 100644 --- a/engine/core/locale/ro_RO/LC_MESSAGES/django.po +++ b/engine/core/locale/ro_RO/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-16 15:38+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -1146,7 +1146,7 @@ msgstr "Date în cache" msgid "camelized JSON data from the requested URL" msgstr "Date JSON Camelizate de la URL-ul solicitat" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:252 msgid "only URLs starting with http(s):// are allowed" msgstr "Sunt permise numai URL-urile care încep cu http(s)://" @@ -2803,60 +2803,92 @@ msgstr "Despre noi" msgid "Django site admin" msgstr "Administratorul site-ului Django" -#: engine/core/templates/admin/index.html:19 +#: engine/core/templates/admin/index.html:20 msgid "Dashboard" msgstr "Tablou de bord" -#: engine/core/templates/admin/index.html:25 +#: engine/core/templates/admin/index.html:27 msgid "Revenue (gross, 30d)" msgstr "Venituri (brute, 30d)" -#: engine/core/templates/admin/index.html:34 +#: engine/core/templates/admin/index.html:36 msgid "Revenue (net, 30d)" msgstr "Venituri (nete, 30d)" -#: engine/core/templates/admin/index.html:43 +#: engine/core/templates/admin/index.html:45 msgid "Returns (30d)" msgstr "Returnări (30d)" -#: engine/core/templates/admin/index.html:52 +#: engine/core/templates/admin/index.html:54 msgid "Processed orders (30d)" msgstr "Comenzi procesate (30d)" -#: engine/core/templates/admin/index.html:65 -msgid "Sales vs Returns (30d)" -msgstr "Vânzări vs retururi (30d)" +#: engine/core/templates/admin/index.html:67 +msgid "Income overview" +msgstr "Prezentare generală a veniturilor" -#: engine/core/templates/admin/index.html:82 -msgid "Gross" -msgstr "Brut" +#: engine/core/templates/admin/index.html:99 +#: engine/core/templates/admin/index.html:139 +msgid "Net" +msgstr "Venituri nete" -#: engine/core/templates/admin/index.html:87 +#: engine/core/templates/admin/index.html:107 +#: engine/core/templates/admin/index.html:140 +msgid "Taxes" +msgstr "Impozite" + +#: engine/core/templates/admin/index.html:115 +#: engine/core/templates/admin/index.html:141 msgid "Returns" msgstr "Returnări" -#: engine/core/templates/admin/index.html:94 +#: engine/core/templates/admin/index.html:122 +msgid "Gross (pie total)" +msgstr "Venituri brute" + +#: engine/core/templates/admin/index.html:201 +#: engine/core/templates/admin/index.html:326 msgid "Not enough data for chart yet." msgstr "Nu există încă suficiente date pentru grafic." -#: engine/core/templates/admin/index.html:103 +#: engine/core/templates/admin/index.html:210 msgid "Quick Links" msgstr "Linkuri rapide" -#: engine/core/templates/admin/index.html:110 +#: engine/core/templates/admin/index.html:217 msgid "No links available." msgstr "Nu există legături disponibile." -#: engine/core/templates/admin/index.html:119 +#: engine/core/templates/admin/index.html:225 +msgid "Daily sales (30d)" +msgstr "Vânzări zilnice (30d)" + +#: engine/core/templates/admin/index.html:254 +msgid "Orders (FINISHED)" +msgstr "Comenzi (FINISHED)" + +#: engine/core/templates/admin/index.html:264 +msgid "Gross revenue" +msgstr "Venituri brute" + +#: engine/core/templates/admin/index.html:301 +msgid "Orders" +msgstr "Ordine" + +#: engine/core/templates/admin/index.html:308 +msgid "Gross" +msgstr "Brut" + +#: engine/core/templates/admin/index.html:334 msgid "Most wished product" msgstr "Cel mai dorit produs" -#: engine/core/templates/admin/index.html:128 -#: engine/core/templates/admin/index.html:144 +#: engine/core/templates/admin/index.html:361 +#: engine/core/templates/admin/index.html:395 msgid "No data yet." msgstr "Nu există încă date." -#: engine/core/templates/admin/index.html:135 +#: engine/core/templates/admin/index.html:368 msgid "Most popular product" msgstr "Cel mai popular produs" @@ -3078,7 +3110,7 @@ msgstr "" "Dimensiunile imaginii nu trebuie să depășească w{max_width} x h{max_height} " "pixeli" -#: engine/core/views.py:77 +#: engine/core/views.py:86 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -3086,7 +3118,7 @@ msgstr "" "Gestionează cererea pentru indexul sitemap și returnează un răspuns XML. Se " "asigură că răspunsul include antetul tip de conținut adecvat pentru XML." -#: engine/core/views.py:92 +#: engine/core/views.py:101 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -3096,17 +3128,17 @@ msgstr "" "Această funcție procesează cererea, extrage răspunsul detaliat corespunzător" " al hărții site-ului și stabilește antetul Content-Type pentru XML." -#: engine/core/views.py:127 +#: engine/core/views.py:136 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" "Returnează o listă a limbilor acceptate și informațiile corespunzătoare." -#: engine/core/views.py:159 +#: engine/core/views.py:168 msgid "Returns the parameters of the website as a JSON object." msgstr "Returnează parametrii site-ului web sub forma unui obiect JSON." -#: engine/core/views.py:178 +#: engine/core/views.py:187 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3114,11 +3146,11 @@ msgstr "" "Gestionează operațiunile din cache, cum ar fi citirea și setarea datelor din" " cache cu o cheie și un timeout specificate." -#: engine/core/views.py:205 +#: engine/core/views.py:214 msgid "Handles `contact us` form submissions." msgstr "Gestionează trimiterea formularelor `contact us`." -#: engine/core/views.py:226 +#: engine/core/views.py:235 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -3126,15 +3158,15 @@ msgstr "" "Gestionează cererile de procesare și validare a URL-urilor din cererile POST" " primite." -#: engine/core/views.py:266 +#: engine/core/views.py:275 msgid "Handles global search queries." msgstr "Gestionează interogările de căutare globală." -#: engine/core/views.py:281 +#: engine/core/views.py:290 msgid "Handles the logic of buying as a business without registration." msgstr "Gestionează logica cumpărării ca o afacere fără înregistrare." -#: engine/core/views.py:318 +#: engine/core/views.py:327 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3142,31 +3174,31 @@ msgstr "" "Gestionează descărcarea unui bun digital asociat cu o comandă.\n" "Această funcție încearcă să servească fișierul activului digital situat în directorul de stocare al proiectului. Dacă fișierul nu este găsit, este generată o eroare HTTP 404 pentru a indica faptul că resursa nu este disponibilă." -#: engine/core/views.py:329 +#: engine/core/views.py:338 msgid "order_product_uuid is required" msgstr "order_product_uuid este necesar" -#: engine/core/views.py:336 +#: engine/core/views.py:345 msgid "order product does not exist" msgstr "comanda produsul nu există" -#: engine/core/views.py:339 +#: engine/core/views.py:348 msgid "you can only download the digital asset once" msgstr "Puteți descărca activul digital o singură dată" -#: engine/core/views.py:342 +#: engine/core/views.py:351 msgid "the order must be paid before downloading the digital asset" msgstr "comanda trebuie plătită înainte de descărcarea activului digital" -#: engine/core/views.py:348 +#: engine/core/views.py:357 msgid "the order product does not have a product" msgstr "Produsul de comandă nu are un produs" -#: engine/core/views.py:385 +#: engine/core/views.py:394 msgid "favicon not found" msgstr "favicon nu a fost găsit" -#: engine/core/views.py:390 +#: engine/core/views.py:399 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3174,7 +3206,7 @@ msgstr "" "Gestionează cererile pentru favicon-ul unui site web.\n" "Această funcție încearcă să servească fișierul favicon situat în directorul static al proiectului. Dacă fișierul favicon nu este găsit, este generată o eroare HTTP 404 pentru a indica faptul că resursa nu este disponibilă." -#: engine/core/views.py:402 +#: engine/core/views.py:411 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3185,11 +3217,11 @@ msgstr "" " index a interfeței de administrare Django. Aceasta utilizează funcția " "`redirect` din Django pentru gestionarea redirecționării HTTP." -#: engine/core/views.py:415 +#: engine/core/views.py:424 msgid "Returns current version of the eVibes. " msgstr "Returnează versiunea curentă a eVibes." -#: engine/core/views.py:494 +#: engine/core/views.py:587 msgid "Returns custom variables for Dashboard. " msgstr "Returnează variabilele personalizate pentru tabloul de bord." diff --git a/engine/core/locale/ru_RU/LC_MESSAGES/django.mo b/engine/core/locale/ru_RU/LC_MESSAGES/django.mo index 31b9d3ab7050e55e3190231030f2f57302c05d4e..595a063bf3eae0f1ca4ce8407d951c0c7b166227 100644 GIT binary patch delta 14673 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 HY|;M!tF\n" "Language-Team: BRITISH ENGLISH \n" @@ -1145,7 +1145,7 @@ msgstr "Кэшированные данные" msgid "camelized JSON data from the requested URL" msgstr "Camelized JSON-данные из запрашиваемого URL" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:252 msgid "only URLs starting with http(s):// are allowed" msgstr "Допускаются только URL-адреса, начинающиеся с http(s)://" @@ -2791,60 +2791,92 @@ msgstr "О нас" msgid "Django site admin" msgstr "Администратор сайта Django" -#: engine/core/templates/admin/index.html:19 +#: engine/core/templates/admin/index.html:20 msgid "Dashboard" msgstr "Приборная панель" -#: engine/core/templates/admin/index.html:25 +#: engine/core/templates/admin/index.html:27 msgid "Revenue (gross, 30d)" msgstr "Выручка (брутто, 30д)" -#: engine/core/templates/admin/index.html:34 +#: engine/core/templates/admin/index.html:36 msgid "Revenue (net, 30d)" msgstr "Выручка (нетто, 30d)" -#: engine/core/templates/admin/index.html:43 +#: engine/core/templates/admin/index.html:45 msgid "Returns (30d)" msgstr "Возвраты (30 дней)" -#: engine/core/templates/admin/index.html:52 +#: engine/core/templates/admin/index.html:54 msgid "Processed orders (30d)" msgstr "Обработанные заказы (30d)" -#: engine/core/templates/admin/index.html:65 -msgid "Sales vs Returns (30d)" -msgstr "Продажи и Возвраты (30d)" +#: engine/core/templates/admin/index.html:67 +msgid "Income overview" +msgstr "Обзор доходов" -#: engine/core/templates/admin/index.html:82 -msgid "Gross" -msgstr "Брутто" +#: engine/core/templates/admin/index.html:99 +#: engine/core/templates/admin/index.html:139 +msgid "Net" +msgstr "Чистая выручка" -#: engine/core/templates/admin/index.html:87 +#: engine/core/templates/admin/index.html:107 +#: engine/core/templates/admin/index.html:140 +msgid "Taxes" +msgstr "Налоги" + +#: engine/core/templates/admin/index.html:115 +#: engine/core/templates/admin/index.html:141 msgid "Returns" -msgstr "Возвращает" +msgstr "Возвраты" -#: engine/core/templates/admin/index.html:94 +#: engine/core/templates/admin/index.html:122 +msgid "Gross (pie total)" +msgstr "Валовая выручка" + +#: engine/core/templates/admin/index.html:201 +#: engine/core/templates/admin/index.html:326 msgid "Not enough data for chart yet." msgstr "Пока недостаточно данных для построения графика." -#: engine/core/templates/admin/index.html:103 +#: engine/core/templates/admin/index.html:210 msgid "Quick Links" msgstr "Быстрые ссылки" -#: engine/core/templates/admin/index.html:110 +#: engine/core/templates/admin/index.html:217 msgid "No links available." msgstr "Ссылки недоступны." -#: engine/core/templates/admin/index.html:119 +#: engine/core/templates/admin/index.html:225 +msgid "Daily sales (30d)" +msgstr "Ежедневные продажи (30d)" + +#: engine/core/templates/admin/index.html:254 +msgid "Orders (FINISHED)" +msgstr "Заказы (ОКОНЧЕНЫ)" + +#: engine/core/templates/admin/index.html:264 +msgid "Gross revenue" +msgstr "Валовая выручка" + +#: engine/core/templates/admin/index.html:301 +msgid "Orders" +msgstr "Заказы" + +#: engine/core/templates/admin/index.html:308 +msgid "Gross" +msgstr "Брутто" + +#: engine/core/templates/admin/index.html:334 msgid "Most wished product" msgstr "Самые желанные товары" -#: engine/core/templates/admin/index.html:128 -#: engine/core/templates/admin/index.html:144 +#: engine/core/templates/admin/index.html:361 +#: engine/core/templates/admin/index.html:395 msgid "No data yet." msgstr "Данных пока нет." -#: engine/core/templates/admin/index.html:135 +#: engine/core/templates/admin/index.html:368 msgid "Most popular product" msgstr "Самые популярные товары" @@ -3067,7 +3099,7 @@ msgstr "" "Размеры изображения не должны превышать w{max_width} x h{max_height} " "пикселей" -#: engine/core/views.py:77 +#: engine/core/views.py:86 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -3076,7 +3108,7 @@ msgstr "" "Он обеспечивает включение в ответ заголовка типа содержимого, " "соответствующего типу XML." -#: engine/core/views.py:92 +#: engine/core/views.py:101 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -3086,17 +3118,17 @@ msgstr "" "обрабатывает запрос, извлекает соответствующий подробный ответ карты сайта и" " устанавливает заголовок Content-Type для XML." -#: engine/core/views.py:127 +#: engine/core/views.py:136 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" "Возвращает список поддерживаемых языков и соответствующую информацию о них." -#: engine/core/views.py:159 +#: engine/core/views.py:168 msgid "Returns the parameters of the website as a JSON object." msgstr "Возвращает параметры сайта в виде объекта JSON." -#: engine/core/views.py:178 +#: engine/core/views.py:187 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3104,26 +3136,26 @@ msgstr "" "Выполняет операции с кэшем, такие как чтение и установка данных кэша с " "заданным ключом и таймаутом." -#: engine/core/views.py:205 +#: engine/core/views.py:214 msgid "Handles `contact us` form submissions." msgstr "Обрабатывает отправленные формы `contact us`." -#: engine/core/views.py:226 +#: engine/core/views.py:235 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." msgstr "" "Обрабатывает запросы на обработку и проверку URL из входящих POST-запросов." -#: engine/core/views.py:266 +#: engine/core/views.py:275 msgid "Handles global search queries." msgstr "Обрабатывает глобальные поисковые запросы." -#: engine/core/views.py:281 +#: engine/core/views.py:290 msgid "Handles the logic of buying as a business without registration." msgstr "Работает с логикой покупки как бизнеса без регистрации." -#: engine/core/views.py:318 +#: engine/core/views.py:327 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3131,31 +3163,31 @@ msgstr "" "Обрабатывает загрузку цифрового актива, связанного с заказом.\n" "Эта функция пытается обслужить файл цифрового актива, расположенный в каталоге хранения проекта. Если файл не найден, выдается ошибка HTTP 404, указывающая на недоступность ресурса." -#: engine/core/views.py:329 +#: engine/core/views.py:338 msgid "order_product_uuid is required" msgstr "требуется order_product_uuid" -#: engine/core/views.py:336 +#: engine/core/views.py:345 msgid "order product does not exist" msgstr "заказанный товар не существует" -#: engine/core/views.py:339 +#: engine/core/views.py:348 msgid "you can only download the digital asset once" msgstr "Вы можете загрузить цифровой актив только один раз" -#: engine/core/views.py:342 +#: engine/core/views.py:351 msgid "the order must be paid before downloading the digital asset" msgstr "заказ должен быть оплачен до загрузки цифрового актива" -#: engine/core/views.py:348 +#: engine/core/views.py:357 msgid "the order product does not have a product" msgstr "У заказанного продукта нет продукта" -#: engine/core/views.py:385 +#: engine/core/views.py:394 msgid "favicon not found" msgstr "favicon не найден" -#: engine/core/views.py:390 +#: engine/core/views.py:399 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3163,7 +3195,7 @@ msgstr "" "Обрабатывает запросы на фавикон веб-сайта.\n" "Эта функция пытается обслужить файл favicon, расположенный в статической директории проекта. Если файл favicon не найден, выдается ошибка HTTP 404, указывающая на недоступность ресурса." -#: engine/core/views.py:402 +#: engine/core/views.py:411 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3174,11 +3206,11 @@ msgstr "" "администратора Django. Для обработки HTTP-перенаправления используется " "функция Django `redirect`." -#: engine/core/views.py:415 +#: engine/core/views.py:424 msgid "Returns current version of the eVibes. " msgstr "Возвращает текущую версию eVibes." -#: engine/core/views.py:494 +#: engine/core/views.py:587 msgid "Returns custom variables for Dashboard. " msgstr "Возвращает пользовательские переменные для Dashboard." diff --git a/engine/core/locale/sv_SE/LC_MESSAGES/django.mo b/engine/core/locale/sv_SE/LC_MESSAGES/django.mo index e7f72087d94e6e9f7a2c61d89a2a442d1f434851..389559a9e0b1ed916308cc8d8e75cab5b6457a8b 100644 GIT binary patch delta 14575 zcmZA82Yim#|NrrGi-^66#K>($jF_=wkJu~rtP&(fG(ypG+qGAWnzcKqmMGeyl&V>? zR$H`mP)coI>-T!!=Xm`4_+O95@jRb%&UIbqI^((`+T(iyH|`7cUCx>+QZcIkZhWRiQL$DGCVoS`4vB+gj zKTL}WIMx`SNhG5S{Dax?Ddxe9HH=w+UQCBypxW)i9QZwEz>8Ryj$L!*#iETVOnDV7 zft@iF$Ke+|xP$SVDHA4L`7~ev5d>ZP!IY^((NB9l*yNSMz6nxUmm`)UUnj6yq zyR@(uT+!0{A!-e5!CZI{3*#kJ2cM(n*3-(E%ovDjmlHK2;mC3^jZlkiEQVq3){Or$ zGEuGV9G^rD@p%{DKt1VQ)P;i>KXoKGwxOdXF+K6Z=rr|fIvF#Z@-dwm{}N>GcQK|J=I_QlW54bU6(@YtgPlR_dBd1(xU9D^N4Y?o zK1>5~fxeuJ)#HpQM|os_B<_Lth-VEjrYrHdcw?G!y`K^o0pj9=Z3n;h4PhZs5jWJB z9aNl4GG;Q)PPW@C_XxY#3Lvv&N?{2cjuE&5wYUzVM&>2v#9VLNkqk#oO*PamibkE+ z0L!9p5E;$kGS^_0i$6pyo=wO@nysj97Ch2UN#{}ayhPOEOGYievACah(=dPsYxxeN zLV4RUOc(l4yXIr8p#6W6OnC~@@HWs~Rzf{tG#16as1v7R8QkjXuekCcrjV^~DxmiH zAS{UQIoG4k-;dhnw^1WibewhxK{YZO+BTRCmthcY#Jre_T6{-P7e0@A;)mD?Um*+H zbQ*8B?*?p0{0C|(N>3nRZPczvz^phHb8>$(iwvV=R$*~0FwqWueau4K1oL1=)CC7& z4)mcqG7tS7M|F53X2)+a7|*!+zg_t=XXZ&i_Doh z=gQMhwl}VX8nFgg1e;?Z4ncJ+8P(xQsQWE)@#@KpzgA@`1$xr2P!~9a8uGtUYvKv& zNj+2SKF@^eSTL%-KI+2FQ8(=9%KM?_IuSMGlTag=g1X;^DU82vw9OUlLoe|O)P?V2 zT6~In!k4HUq8IQCLr_mt9@U{ns2g`db$Ae}!xK=~nUA#dnRR5;^PSGq zsD`&tYvDQSLSZxP8mNdFiKDST#$ZL9j+%e}0hkU)yLde6hAA#yj=IifEUEp! zlT20o4cBAnYIvtfMq(-I zI;&A5nu_Y+jrokfdYm)G&P^z)VQJKe)WXs@9LwQq%!Q}0DgKVNvD^ZC!y%Z3cqHb; zDOd%UU?iTzO8623u;N0-Up=X^(4N=}^Aitt@iZ(%ycnZ!JLW2SdHuNmBH_Cwph{Mo}(O3q1 zpw63)nQ;lK-3HW1?Z;634b{OHm>ttDx98`@e%uo}i=Zd`-9@D9}b;Q$uE zlb9cGV`a>+!fv}d&KT5)wZ^L02etT?q1Mo0SN;+kYX4VRX@~3`Y)iZnb;G-;jyy+g zvm77TISoeb8ZYWb5vVDNMvX`_SKbBn0E1CaKHAmKKwW<+`qW^9YmkasGzTyQkGt|e zF_`!XYCC3MWiK3!dKEXtJlGy};RMtg8i86fvrvn31FHQ_)caxoD#l+Y9;ZM(zlLgX z54BBRpcl)ow%fEdYKlgpF1Q85a6k6NYgh`Ktg%xy4D~>BQSFytS=@+Pl$X}{_=J+l zvDRL=18SShMlG6is1E*u>hXQl4PRgpEV#~E7qy@JxOf_B1UI4P{2*%WJVQNTzV+-R zEb1c@OGY-tGpILPz72MjzKLGqIjFVpIcl!IL*3vEYD#Wn1q}Jn+8j#|k3o&ddgn=3 z{tRnS?koC{-IqO4uh^-m)w&bQ;2)?P&jVgR)vRQYUdgvYP}=KS3L;L#Cvp(UuP`w45K zcZ)s07pkMHuqghB#qlX-!LY5Y9qw-;$z;bi*d2RgR@{Ty-^Vc!e?^`6C+dO^F&&1a z+9&m5ed0E#@)YM%%t*W%bKxe;fqT)X8=oeV9D)2BaFuUU)m?{j2gi{m*Y*KQqn@}UYGlV?TAbx0qoJ9PIdL!M z$1|uWxq~_}_b$7*YNDQGG^zvRP;)&4)sgwAC)|j6a0ja0aV&%vurNMGJ(w?KxBZwj z#W57L#j1b$j>NH4=wfoI_A=z%iH$SD{8|8|s1fU`@P*+9eU+*u|NEnyOEc zsr8vlWHe-fd+pqp!&=0BQBS@Gwa5-*MQpjxPT4rrYF~#c{}Y>I=(qMg(GR(SS%C%d z5bDAHKy@I`e%;r{MaYz=g8%#hgo)xH$eTs#M z^Bl2H9EBB#2ckN#0*|EOZ$#LHcNKo=F@bPc7NexY;%TdVw1DHS7?{>N5;P{1trhf z-*_gVhU^vU4HaxC?J{!&ewfeETBb z1>$;_nEw%Ee*VeMY3wi7?x+jIp)UL`YE{q2w73`b=KRjppTqpbx3C{>eRBcmt#88fN@>c*a{cIfkAFmVLVprdtBPk!uIyEe|@1LA9VocasD z@m0eO*XcBK|IhEVCm#40zx~GHH~4)qmj0U`K+rex7Oz_}XK(Y1Xin&U$NpyW#J{|D zDIay84-Yr!{?J~y_9M0%?WR1ouh=i2+6z9y+_Z1-j9)xs=jXJc-H{i(8;IK)kGYEX zJRakt{7is9_L)zi2Z_E zGY?Q}C|xFxf2uNKDdKEc0c)TZ_aMJM77-Z@>1YhXN!Sx-;t)FaH|hpmv)Bv1g}TuQ z%!O0&DeabHIi74$Hl+Mu4(lUlcutT1C!>z2kK8=W$oIp7l3}#}y3t_A?3H4^1hdOT$*2c%KzDge3z60t_nT$RS;a)Ntk_)IOx`NtP z_ff0=6{g2LY}$cX2z%jlY=<|oE7l6OQ}{mWf!3lrc+r(VL0vB(pU14lkbEAWzsI{N z(7wHix$!P)Hw1>*I6GVmPD4dYR7%2AjV7oZ+!Eox2eK%IXG_28#M zd>;SyyFo!Q3Iaks{%=79Y6#n76`X~d(*u|jAE4GsP=1g94;YieWu7>JxJ69g> z;$+lF&p>r>zK={8nbodfAF78ZQH$~-YAUXwI&cSdqcHyUL6$;|SY_0C%}`GkiyEPU zsCJ`Ji*}MLUxey_ZylMUWKvy&^Qbr64a|)Hpq}^{>VjDd+Mz6fdeTVLNW`GdYmMqq zd(;i%Q6upV>N@i=64xVB;xlK+=!EOer>Hs0TFBn023)>SapqIF@i~FP2z`Llqor0}!4wl8ssI`%$ zh+U*1s3~fL+6_I?KSHSUC%gLDu6{ZCzyF(D#WmE=Z2w{nj4Wy|H~_djznVtZ06$rSb}&sR>u{^*#Gm%oTosGD51E$U=mg)o`LH5K5UOi zupNel+YTn7>OaMjxE*zatEe|&`VzKXWmJcUqNa4Jb9o7$eM5atfu7_9YRLXVz2RPA zU+fj(@&A4O0BV(cOWL(i92*f=Lp||W)S{b-8i^EC$38|)*%?=#rj%XW8GK~aqfpd^ z%A!_lvU3$`F&)De_$&I`m9}dm8MTkcqHZ_~HF9e)5-(ym4C0?b)v-QU9urV&%eRb- zm&|(9g$`md{1L0+|4<#Q6lp)hG0wrLcY6wIJ8eZTo^|yPU7WwH?MO80J(J*^jlB4L zW-FN@RGhX2<{@g)+NP-d#&@&6?=C+f4^8hhd_)GoS( zl`x{B?Ra<88+AVFJ|AEX?f);y=tf6TU#Z_vPjnwOhdCP*Zsqb)8qJsVo>}>pPd1NEP;fb25)9(1jXQwH;}N+GYu;8zrLV zd=%{C?xjMeNbIbSvQziv>90{!3+f54+=dY^(i$ znM@}N%Ga@PzNyY_7)kk6)V|GH*A87UmR5T#huyIP&P27}gQf76Gq|3O>tj{Q2ct%0 zJw|H(pYUh+9-~%e>H4-oXVlP6KwbC~)QvA-MNHekUa%@^C=*dbycMk{vB@e9=Utlrq3Fcww+E$W365MzhB9_pL$4(h`DP&W!} zV!xL4u{H5R?1;a+^5~{+|IZ=Qii)$S8y0P5PaJ^Ek@*_iV3y|gC#0SjOS}nHufI|1 z2JKKEmo=zY_8I3r)V9shQa^I>;{xgh)v_h~|7|keDbT7ti&`v~F%a*e_W2XkRHSWX z7ik&PR8+!V*bDW(_y&XU0BZFgL!EaCb;C5R?Ry~y>VDy^eYR)iDab)V1Jrw<18OLT zqULrRZotQ=4zFxu{|=Y8t=&$|QHv@C8{=-&VoTf3jz~1>$p^c55$gKi`^ad!WQw&H zXoSUx6H(h|0cw?hh3)Vr>MK~Qy?rqaL#_S~u?1d4J$ZNsJ5o`o5v+-Nuo%>~eG@fB zz6oUXYFv%_cx**I@iEl4%hu6j>R~?A`=KiaV{g=&8HHMGhfq%(*vamWTBs=+ih5Hn zN4-zJLhX+4kT7n=&904Xs259N)Cjadz5Dy3 z-Un}?|ILTmj+e0x7VBXAIyU%Fa@WOw0(7KBkd&qlXRH$t-q9?khysWmyg0@q(!70wCRl# z@%8Z@nPA%g^tu4Q(n1?V;RvjYI`TV}UqCvd3`ZKu7n4fRHktS=ZY7N&eMqb?Vkzn) zN%7?M%guwRL)$t%u@1iG<`vE(_LU>}@6nauTUS<`1~py&o^t@k(B}L9oK%)}dc#ho zt^nz%Yg>ady+3jjZy+roRUw{1`!%+W&m@z1PN9C4`ilH=@*7DNh*uFGAg?1gu@1dK z_mH-d_~iJH?9|O9my`G^sTr~UGw}B07m-Gj){_!#bMpFWyr#!pDMNINO-&INQ7B%XzXNePsVAuXpYk+gt(U961b zNt0-k2SX?uN;*cmLs=D^iu$L4*N1*;GYM4a*h~6F8IC-pL6o=kNA{1#|H<>cGIjoQ zAys|muJfsLI=-a*Hy5kTd+waZc%C>!t9~Gv@v7x`MC1Edjx?9Lx7^8ZzrF|_qOK%$ zpI{MEA5vCg9ScdTX)~BqnKX+ujie)vHu|}tHeSH`l$UHm5UE;@f#f$)I0RoG#mLv9 zELX~}QMr5{yGs?qVblzx*!(c}8OWceO+Jhwog)7csS|bmP{&84h&1;8{sR5`$Rl!J_#-~hc)~SyMSec! z&my$#OuFmp-=!>;w1L!`^6HegAoU=Hks4CAmb#(1hgioD(q+9ZdXhP(5_im_tQGkg zq?VjejaWat{m-4~nwezk_&Lx#Cbj)fU3(ft66c_P4Ec(#jvvp>DdJJs4d18U|NOTJ zbgZM|3|65+$3x_hb#9u=Ti13X(VY1ZOUK)QZMooF`9M( z*pO6>vTMZa$m^J_x5YwtAr%xSbtdjkx=p%7O5vm~r0=M!iWw<;Myf+vNm@jim%66p z7n9l&mnID)UzU`S{Cw2$tFsdJQ^D)?_mitALE|i>IjZEC>B=+XNSAMEtITlP>G<7Z z`ncGI{{QGh`O>cooJsCF3SZyftRhHD8p%bTVK*Ahb`8@wn^Uf%yv3Y${z&~c*X9q( zGPwLW@&#O{rjVcJ@}anyn8WA)3tl64f=c?6&xmRv4 zsS)*SaT#?@NIJH-_8-{LWTMUYlm!tN$574x1cF=y0aRupzuBEskoW_aCu=H@--pvl z>B;ZMH>fB=z6ME$hxjgz#fGkIKKa6=QvMeF2t)oF`3xleKR%{DDJ$t6(hsEGG#G?O zxWGxwLDCUIDnng!$^%Hz{?h;V$6U%9P+uP3BpduLm^Y$Q z`MxDn%hs3@7#5S1IE;d!@p0bd#N^(CN*Y^|6gMJn$ndz-)H)}FvJUB!I5^ImI3g}- zM10)aspDfl3``T3oEqNpm?vNBq`q-U!;Hln(YR@=rm;;LH7uF>Z>tU^QhJOS8qj-W zT5RzGQYa<)kmUXA1}4WP zng1_N{o(k)^m!N2i(&BtlfC=5lk>XPsg=)lNSD1;9Oowv=Hki8x_IiepPzUZ^BeVo mnYxr>(7ql$8+SQR>BZYJct!`r4(z?7WJXW14*v(&@{KV7 delta 14303 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 LU0HcNrQ81xCAuWH diff --git a/engine/core/locale/sv_SE/LC_MESSAGES/django.po b/engine/core/locale/sv_SE/LC_MESSAGES/django.po index fcc6f0d4..67da0e1e 100644 --- a/engine/core/locale/sv_SE/LC_MESSAGES/django.po +++ b/engine/core/locale/sv_SE/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-16 15:38+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -1118,7 +1118,7 @@ msgstr "Cachad data" msgid "camelized JSON data from the requested URL" msgstr "Cameliserad JSON-data från den begärda URL:en" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:252 msgid "only URLs starting with http(s):// are allowed" msgstr "Endast webbadresser som börjar med http(s):// är tillåtna" @@ -2756,60 +2756,92 @@ msgstr "Om oss" msgid "Django site admin" msgstr "Django webbplatsadministratör" -#: engine/core/templates/admin/index.html:19 +#: engine/core/templates/admin/index.html:20 msgid "Dashboard" msgstr "Instrumentpanel" -#: engine/core/templates/admin/index.html:25 +#: engine/core/templates/admin/index.html:27 msgid "Revenue (gross, 30d)" msgstr "Intäkter (brutto, 30d)" -#: engine/core/templates/admin/index.html:34 +#: engine/core/templates/admin/index.html:36 msgid "Revenue (net, 30d)" msgstr "Intäkter (netto, 30d)" -#: engine/core/templates/admin/index.html:43 +#: engine/core/templates/admin/index.html:45 msgid "Returns (30d)" msgstr "Avkastning (30d)" -#: engine/core/templates/admin/index.html:52 +#: engine/core/templates/admin/index.html:54 msgid "Processed orders (30d)" msgstr "Bearbetade order (30d)" -#: engine/core/templates/admin/index.html:65 -msgid "Sales vs Returns (30d)" -msgstr "Försäljning vs returer (30d)" +#: engine/core/templates/admin/index.html:67 +msgid "Income overview" +msgstr "Översikt över intäkter" -#: engine/core/templates/admin/index.html:82 -msgid "Gross" -msgstr "Brutto" +#: engine/core/templates/admin/index.html:99 +#: engine/core/templates/admin/index.html:139 +msgid "Net" +msgstr "Nettoomsättning" -#: engine/core/templates/admin/index.html:87 +#: engine/core/templates/admin/index.html:107 +#: engine/core/templates/admin/index.html:140 +msgid "Taxes" +msgstr "Skatter" + +#: engine/core/templates/admin/index.html:115 +#: engine/core/templates/admin/index.html:141 msgid "Returns" msgstr "Avkastning" -#: engine/core/templates/admin/index.html:94 +#: engine/core/templates/admin/index.html:122 +msgid "Gross (pie total)" +msgstr "Bruttointäkter" + +#: engine/core/templates/admin/index.html:201 +#: engine/core/templates/admin/index.html:326 msgid "Not enough data for chart yet." msgstr "Inte tillräckligt med data för diagram ännu." -#: engine/core/templates/admin/index.html:103 +#: engine/core/templates/admin/index.html:210 msgid "Quick Links" msgstr "Snabblänkar" -#: engine/core/templates/admin/index.html:110 +#: engine/core/templates/admin/index.html:217 msgid "No links available." msgstr "Inga länkar tillgängliga." -#: engine/core/templates/admin/index.html:119 +#: engine/core/templates/admin/index.html:225 +msgid "Daily sales (30d)" +msgstr "Daglig försäljning (30d)" + +#: engine/core/templates/admin/index.html:254 +msgid "Orders (FINISHED)" +msgstr "Beställningar (AVSLUTAD)" + +#: engine/core/templates/admin/index.html:264 +msgid "Gross revenue" +msgstr "Bruttointäkter" + +#: engine/core/templates/admin/index.html:301 +msgid "Orders" +msgstr "Beställningar" + +#: engine/core/templates/admin/index.html:308 +msgid "Gross" +msgstr "Brutto" + +#: engine/core/templates/admin/index.html:334 msgid "Most wished product" msgstr "Mest önskade produkt" -#: engine/core/templates/admin/index.html:128 -#: engine/core/templates/admin/index.html:144 +#: engine/core/templates/admin/index.html:361 +#: engine/core/templates/admin/index.html:395 msgid "No data yet." msgstr "Inga uppgifter ännu." -#: engine/core/templates/admin/index.html:135 +#: engine/core/templates/admin/index.html:368 msgid "Most popular product" msgstr "Mest populära produkt" @@ -3029,7 +3061,7 @@ msgstr "Parametern NOMINATIM_URL måste konfigureras!" msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "Bildmåtten får inte överstiga w{max_width} x h{max_height} pixlar!" -#: engine/core/views.py:77 +#: engine/core/views.py:86 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -3037,7 +3069,7 @@ msgstr "" "Hanterar begäran om index för webbplatskartan och returnerar ett XML-svar. " "Den ser till att svaret innehåller rätt innehållstypshuvud för XML." -#: engine/core/views.py:92 +#: engine/core/views.py:101 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -3047,16 +3079,16 @@ msgstr "" "bearbetar begäran, hämtar det lämpliga detaljerade svaret för " "webbplatskartan och ställer in Content-Type-huvudet för XML." -#: engine/core/views.py:127 +#: engine/core/views.py:136 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "Returnerar en lista över språk som stöds och motsvarande information." -#: engine/core/views.py:159 +#: engine/core/views.py:168 msgid "Returns the parameters of the website as a JSON object." msgstr "Returnerar webbplatsens parametrar som ett JSON-objekt." -#: engine/core/views.py:178 +#: engine/core/views.py:187 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3064,11 +3096,11 @@ msgstr "" "Hanterar cacheoperationer som att läsa och ställa in cachedata med en " "angiven nyckel och timeout." -#: engine/core/views.py:205 +#: engine/core/views.py:214 msgid "Handles `contact us` form submissions." msgstr "Hanterar formulärinlämningar för `kontakta oss`." -#: engine/core/views.py:226 +#: engine/core/views.py:235 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -3076,15 +3108,15 @@ msgstr "" "Hanterar förfrågningar om bearbetning och validering av URL:er från " "inkommande POST-förfrågningar." -#: engine/core/views.py:266 +#: engine/core/views.py:275 msgid "Handles global search queries." msgstr "Hanterar globala sökfrågor." -#: engine/core/views.py:281 +#: engine/core/views.py:290 msgid "Handles the logic of buying as a business without registration." msgstr "Hanterar logiken i att köpa som ett företag utan registrering." -#: engine/core/views.py:318 +#: engine/core/views.py:327 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3092,31 +3124,31 @@ msgstr "" "Hanterar nedladdning av en digital tillgång som är kopplad till en order.\n" "Denna funktion försöker servera den digitala tillgångsfilen som finns i lagringskatalogen för projektet. Om filen inte hittas visas ett HTTP 404-fel som indikerar att resursen inte är tillgänglig." -#: engine/core/views.py:329 +#: engine/core/views.py:338 msgid "order_product_uuid is required" msgstr "order_product_uuid är obligatoriskt" -#: engine/core/views.py:336 +#: engine/core/views.py:345 msgid "order product does not exist" msgstr "Beställ produkten finns inte" -#: engine/core/views.py:339 +#: engine/core/views.py:348 msgid "you can only download the digital asset once" msgstr "Du kan bara ladda ner den digitala tillgången en gång" -#: engine/core/views.py:342 +#: engine/core/views.py:351 msgid "the order must be paid before downloading the digital asset" msgstr "beställningen måste betalas innan den digitala tillgången laddas ner" -#: engine/core/views.py:348 +#: engine/core/views.py:357 msgid "the order product does not have a product" msgstr "Beställningens produkt har ingen produkt" -#: engine/core/views.py:385 +#: engine/core/views.py:394 msgid "favicon not found" msgstr "favicon hittades inte" -#: engine/core/views.py:390 +#: engine/core/views.py:399 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3124,7 +3156,7 @@ msgstr "" "Hanterar förfrågningar om favicon på en webbplats.\n" "Denna funktion försöker servera favicon-filen som finns i den statiska katalogen i projektet. Om favicon-filen inte hittas visas ett HTTP 404-fel som anger att resursen inte är tillgänglig." -#: engine/core/views.py:402 +#: engine/core/views.py:411 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3135,11 +3167,11 @@ msgstr "" "admin-gränssnitt. Den använder Djangos `redirect`-funktion för att hantera " "HTTP-omdirigeringen." -#: engine/core/views.py:415 +#: engine/core/views.py:424 msgid "Returns current version of the eVibes. " msgstr "Returnerar aktuell version av eVibes." -#: engine/core/views.py:494 +#: engine/core/views.py:587 msgid "Returns custom variables for Dashboard. " msgstr "Returnerar anpassade variabler för Dashboard." diff --git a/engine/core/locale/th_TH/LC_MESSAGES/django.mo b/engine/core/locale/th_TH/LC_MESSAGES/django.mo index a5be9481c51b00b72bbe28a19188f5077c0a9dd8..9851644dca15327b1d758aa46bbd822dc59f3689 100644 GIT binary patch delta 14694 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 delta 14335 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 diff --git a/engine/core/locale/th_TH/LC_MESSAGES/django.po b/engine/core/locale/th_TH/LC_MESSAGES/django.po index 1553bfd9..014d01fc 100644 --- a/engine/core/locale/th_TH/LC_MESSAGES/django.po +++ b/engine/core/locale/th_TH/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-16 15:38+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -1112,7 +1112,7 @@ msgstr "ข้อมูลที่เก็บไว้ในแคช" msgid "camelized JSON data from the requested URL" msgstr "ข้อมูล JSON ที่ผ่านการคาราเมลไลซ์จาก URL ที่ร้องขอ" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:252 msgid "only URLs starting with http(s):// are allowed" msgstr "อนุญาตเฉพาะ URL ที่ขึ้นต้นด้วย http(s):// เท่านั้น" @@ -2728,60 +2728,92 @@ msgstr "เกี่ยวกับเรา" msgid "Django site admin" msgstr "ผู้ดูแลระบบเว็บไซต์ Django" -#: engine/core/templates/admin/index.html:19 +#: engine/core/templates/admin/index.html:20 msgid "Dashboard" msgstr "แดชบอร์ด" -#: engine/core/templates/admin/index.html:25 +#: engine/core/templates/admin/index.html:27 msgid "Revenue (gross, 30d)" msgstr "รายได้ (รวม, 30 วัน)" -#: engine/core/templates/admin/index.html:34 +#: engine/core/templates/admin/index.html:36 msgid "Revenue (net, 30d)" msgstr "รายได้ (สุทธิ, 30 วัน)" -#: engine/core/templates/admin/index.html:43 +#: engine/core/templates/admin/index.html:45 msgid "Returns (30d)" msgstr "การคืนสินค้า (30 วัน)" -#: engine/core/templates/admin/index.html:52 +#: engine/core/templates/admin/index.html:54 msgid "Processed orders (30d)" msgstr "คำสั่งซื้อที่ดำเนินการแล้ว (30 วัน)" -#: engine/core/templates/admin/index.html:65 -msgid "Sales vs Returns (30d)" -msgstr "ยอดขายเทียบกับการคืนสินค้า (30 วัน)" +#: engine/core/templates/admin/index.html:67 +msgid "Income overview" +msgstr "ภาพรวมรายได้" -#: engine/core/templates/admin/index.html:82 -msgid "Gross" -msgstr "กรอส" +#: engine/core/templates/admin/index.html:99 +#: engine/core/templates/admin/index.html:139 +msgid "Net" +msgstr "รายได้สุทธิ" -#: engine/core/templates/admin/index.html:87 +#: engine/core/templates/admin/index.html:107 +#: engine/core/templates/admin/index.html:140 +msgid "Taxes" +msgstr "ภาษี" + +#: engine/core/templates/admin/index.html:115 +#: engine/core/templates/admin/index.html:141 msgid "Returns" msgstr "การคืนสินค้า" -#: engine/core/templates/admin/index.html:94 +#: engine/core/templates/admin/index.html:122 +msgid "Gross (pie total)" +msgstr "รายได้รวม" + +#: engine/core/templates/admin/index.html:201 +#: engine/core/templates/admin/index.html:326 msgid "Not enough data for chart yet." msgstr "ข้อมูลไม่เพียงพอสำหรับการสร้างแผนภูมิ" -#: engine/core/templates/admin/index.html:103 +#: engine/core/templates/admin/index.html:210 msgid "Quick Links" msgstr "ลิงก์ด่วน" -#: engine/core/templates/admin/index.html:110 +#: engine/core/templates/admin/index.html:217 msgid "No links available." msgstr "ไม่มีลิงก์ให้ใช้" -#: engine/core/templates/admin/index.html:119 +#: engine/core/templates/admin/index.html:225 +msgid "Daily sales (30d)" +msgstr "ยอดขายรายวัน (30 วัน)" + +#: engine/core/templates/admin/index.html:254 +msgid "Orders (FINISHED)" +msgstr "คำสั่งซื้อ (เสร็จสิ้น)" + +#: engine/core/templates/admin/index.html:264 +msgid "Gross revenue" +msgstr "รายได้รวม" + +#: engine/core/templates/admin/index.html:301 +msgid "Orders" +msgstr "คำสั่ง" + +#: engine/core/templates/admin/index.html:308 +msgid "Gross" +msgstr "กรอส" + +#: engine/core/templates/admin/index.html:334 msgid "Most wished product" msgstr "สินค้าที่ลูกค้าต้องการมากที่สุด" -#: engine/core/templates/admin/index.html:128 -#: engine/core/templates/admin/index.html:144 +#: engine/core/templates/admin/index.html:361 +#: engine/core/templates/admin/index.html:395 msgid "No data yet." msgstr "ยังไม่มีข้อมูล" -#: engine/core/templates/admin/index.html:135 +#: engine/core/templates/admin/index.html:368 msgid "Most popular product" msgstr "สินค้าที่ได้รับความนิยมมากที่สุด" @@ -2993,7 +3025,7 @@ msgstr "ต้องกำหนดค่าพารามิเตอร์ NO msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "ขนาดของภาพไม่ควรเกิน w{max_width} x h{max_height} พิกเซล!" -#: engine/core/views.py:77 +#: engine/core/views.py:86 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -3001,7 +3033,7 @@ msgstr "" "จัดการคำขอสำหรับดัชนีแผนผังเว็บไซต์และส่งคืนการตอบสนองในรูปแบบ XML " "โดยตรวจสอบให้แน่ใจว่าการตอบสนองมีหัวข้อประเภทเนื้อหาที่เหมาะสมสำหรับ XML" -#: engine/core/views.py:92 +#: engine/core/views.py:101 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -3011,16 +3043,16 @@ msgstr "" " ดึงการตอบสนองรายละเอียดแผนผังเว็บไซต์ที่เหมาะสม และตั้งค่าส่วนหัว Content-" "Type สำหรับ XML" -#: engine/core/views.py:127 +#: engine/core/views.py:136 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "ส่งคืนรายการของภาษาที่รองรับและข้อมูลที่เกี่ยวข้อง" -#: engine/core/views.py:159 +#: engine/core/views.py:168 msgid "Returns the parameters of the website as a JSON object." msgstr "ส่งคืนพารามิเตอร์ของเว็บไซต์ในรูปแบบอ็อบเจ็กต์ JSON" -#: engine/core/views.py:178 +#: engine/core/views.py:187 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3028,11 +3060,11 @@ msgstr "" "จัดการการดำเนินการแคช เช่น " "การอ่านและการตั้งค่าข้อมูลแคชด้วยคีย์ที่กำหนดและเวลาหมดอายุ" -#: engine/core/views.py:205 +#: engine/core/views.py:214 msgid "Handles `contact us` form submissions." msgstr "จัดการการส่งแบบฟอร์ม 'ติดต่อเรา'" -#: engine/core/views.py:226 +#: engine/core/views.py:235 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -3040,15 +3072,15 @@ msgstr "" "จัดการคำขอสำหรับการประมวลผลและตรวจสอบความถูกต้องของ URL จากคำขอ POST " "ที่เข้ามา" -#: engine/core/views.py:266 +#: engine/core/views.py:275 msgid "Handles global search queries." msgstr "จัดการคำค้นหาทั่วโลก" -#: engine/core/views.py:281 +#: engine/core/views.py:290 msgid "Handles the logic of buying as a business without registration." msgstr "จัดการตรรกะของการซื้อในฐานะธุรกิจโดยไม่ต้องจดทะเบียน" -#: engine/core/views.py:318 +#: engine/core/views.py:327 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3057,31 +3089,31 @@ msgstr "" "ฟังก์ชันนี้พยายามให้บริการไฟล์สินทรัพย์ดิจิทัลที่อยู่ในไดเรกทอรีจัดเก็บของโครงการ" " หากไม่พบไฟล์ จะเกิดข้อผิดพลาด HTTP 404 เพื่อระบุว่าทรัพยากรไม่พร้อมใช้งาน" -#: engine/core/views.py:329 +#: engine/core/views.py:338 msgid "order_product_uuid is required" msgstr "order_product_uuid เป็นข้อมูลที่จำเป็น" -#: engine/core/views.py:336 +#: engine/core/views.py:345 msgid "order product does not exist" msgstr "คำสั่งซื้อสินค้าไม่มีอยู่" -#: engine/core/views.py:339 +#: engine/core/views.py:348 msgid "you can only download the digital asset once" msgstr "คุณสามารถดาวน์โหลดสินทรัพย์ดิจิทัลได้เพียงครั้งเดียวเท่านั้น" -#: engine/core/views.py:342 +#: engine/core/views.py:351 msgid "the order must be paid before downloading the digital asset" msgstr "คำสั่งซื้อจะต้องชำระเงินก่อนดาวน์โหลดสินทรัพย์ดิจิทัล" -#: engine/core/views.py:348 +#: engine/core/views.py:357 msgid "the order product does not have a product" msgstr "สินค้าตามคำสั่งซื้อไม่มีสินค้า" -#: engine/core/views.py:385 +#: engine/core/views.py:394 msgid "favicon not found" msgstr "ไม่พบไอคอนเว็บไซต์" -#: engine/core/views.py:390 +#: engine/core/views.py:399 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3090,7 +3122,7 @@ msgstr "" "favicon ที่อยู่ในไดเรกทอรีแบบคงที่ของโปรเจกต์ หากไม่พบไฟล์ favicon " "จะเกิดข้อผิดพลาด HTTP 404 เพื่อแสดงว่าทรัพยากรไม่พร้อมใช้งาน" -#: engine/core/views.py:402 +#: engine/core/views.py:411 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3100,11 +3132,11 @@ msgstr "" "ที่เข้ามาและเปลี่ยนเส้นทางไปยังหน้าดัชนีของอินเทอร์เฟซผู้ดูแลระบบ Django " "โดยใช้ฟังก์ชัน `redirect` ของ Django สำหรับการเปลี่ยนเส้นทาง HTTP" -#: engine/core/views.py:415 +#: engine/core/views.py:424 msgid "Returns current version of the eVibes. " msgstr "ส่งคืนเวอร์ชันปัจจุบันของ eVibes" -#: engine/core/views.py:494 +#: engine/core/views.py:587 msgid "Returns custom variables for Dashboard. " msgstr "ส่งคืนตัวแปรที่กำหนดเองสำหรับแดชบอร์ด" diff --git a/engine/core/locale/tr_TR/LC_MESSAGES/django.mo b/engine/core/locale/tr_TR/LC_MESSAGES/django.mo index 3f2344469797f22b9866ee7b9b355cd0e849ec1e..a299e4e894c9dda738f2ceb8ba7055c18e593c1a 100644 GIT binary patch delta 14572 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 b1DjL2r}jx5WS^dYCYxu\n" "Language-Team: BRITISH ENGLISH \n" @@ -1134,7 +1134,7 @@ msgstr "Önbelleğe alınmış veriler" msgid "camelized JSON data from the requested URL" msgstr "İstenen URL'den kameleştirilmiş JSON verileri" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:252 msgid "only URLs starting with http(s):// are allowed" msgstr "Yalnızca http(s):// ile başlayan URL'lere izin verilir" @@ -2769,60 +2769,92 @@ msgstr "Hakkımızda" msgid "Django site admin" msgstr "Django site yöneticisi" -#: engine/core/templates/admin/index.html:19 +#: engine/core/templates/admin/index.html:20 msgid "Dashboard" msgstr "Gösterge Tablosu" -#: engine/core/templates/admin/index.html:25 +#: engine/core/templates/admin/index.html:27 msgid "Revenue (gross, 30d)" msgstr "Gelir (brüt, 30d)" -#: engine/core/templates/admin/index.html:34 +#: engine/core/templates/admin/index.html:36 msgid "Revenue (net, 30d)" msgstr "Gelir (net, 30d)" -#: engine/core/templates/admin/index.html:43 +#: engine/core/templates/admin/index.html:45 msgid "Returns (30d)" msgstr "İadeler (30d)" -#: engine/core/templates/admin/index.html:52 +#: engine/core/templates/admin/index.html:54 msgid "Processed orders (30d)" msgstr "İşlenmiş siparişler (30d)" -#: engine/core/templates/admin/index.html:65 -msgid "Sales vs Returns (30d)" -msgstr "Satışlar ve İadeler (30d)" +#: engine/core/templates/admin/index.html:67 +msgid "Income overview" +msgstr "Gelire genel bakış" -#: engine/core/templates/admin/index.html:82 -msgid "Gross" -msgstr "Brüt" +#: engine/core/templates/admin/index.html:99 +#: engine/core/templates/admin/index.html:139 +msgid "Net" +msgstr "Net gelir" -#: engine/core/templates/admin/index.html:87 +#: engine/core/templates/admin/index.html:107 +#: engine/core/templates/admin/index.html:140 +msgid "Taxes" +msgstr "Vergiler" + +#: engine/core/templates/admin/index.html:115 +#: engine/core/templates/admin/index.html:141 msgid "Returns" msgstr "Geri dönüşler" -#: engine/core/templates/admin/index.html:94 +#: engine/core/templates/admin/index.html:122 +msgid "Gross (pie total)" +msgstr "Brüt gelir" + +#: engine/core/templates/admin/index.html:201 +#: engine/core/templates/admin/index.html:326 msgid "Not enough data for chart yet." msgstr "Grafik için henüz yeterli veri yok." -#: engine/core/templates/admin/index.html:103 +#: engine/core/templates/admin/index.html:210 msgid "Quick Links" msgstr "Hızlı Bağlantılar" -#: engine/core/templates/admin/index.html:110 +#: engine/core/templates/admin/index.html:217 msgid "No links available." msgstr "Bağlantı mevcut değil." -#: engine/core/templates/admin/index.html:119 +#: engine/core/templates/admin/index.html:225 +msgid "Daily sales (30d)" +msgstr "Günlük satışlar (30d)" + +#: engine/core/templates/admin/index.html:254 +msgid "Orders (FINISHED)" +msgstr "Siparişler (BİTTİ)" + +#: engine/core/templates/admin/index.html:264 +msgid "Gross revenue" +msgstr "Brüt gelir" + +#: engine/core/templates/admin/index.html:301 +msgid "Orders" +msgstr "Siparişler" + +#: engine/core/templates/admin/index.html:308 +msgid "Gross" +msgstr "Brüt" + +#: engine/core/templates/admin/index.html:334 msgid "Most wished product" msgstr "En çok istenen ürün" -#: engine/core/templates/admin/index.html:128 -#: engine/core/templates/admin/index.html:144 +#: engine/core/templates/admin/index.html:361 +#: engine/core/templates/admin/index.html:395 msgid "No data yet." msgstr "No data yet." -#: engine/core/templates/admin/index.html:135 +#: engine/core/templates/admin/index.html:368 msgid "Most popular product" msgstr "En popüler ürün" @@ -3042,7 +3074,7 @@ msgstr "NOMINATIM_URL parametresi yapılandırılmalıdır!" msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "Resim boyutları w{max_width} x h{max_height} pikseli geçmemelidir!" -#: engine/core/views.py:77 +#: engine/core/views.py:86 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -3050,7 +3082,7 @@ msgstr "" "Site haritası dizini için isteği işler ve bir XML yanıtı döndürür. Yanıtın " "XML için uygun içerik türü başlığını içermesini sağlar." -#: engine/core/views.py:92 +#: engine/core/views.py:101 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -3060,18 +3092,18 @@ msgstr "" " işler, uygun site haritası ayrıntı yanıtını getirir ve XML için Content-" "Type başlığını ayarlar." -#: engine/core/views.py:127 +#: engine/core/views.py:136 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" "Desteklenen dillerin bir listesini ve bunlara karşılık gelen bilgileri " "döndürür." -#: engine/core/views.py:159 +#: engine/core/views.py:168 msgid "Returns the parameters of the website as a JSON object." msgstr "Web sitesinin parametrelerini bir JSON nesnesi olarak döndürür." -#: engine/core/views.py:178 +#: engine/core/views.py:187 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3079,11 +3111,11 @@ msgstr "" "Belirli bir anahtar ve zaman aşımı ile önbellek verilerini okuma ve ayarlama" " gibi önbellek işlemlerini gerçekleştirir." -#: engine/core/views.py:205 +#: engine/core/views.py:214 msgid "Handles `contact us` form submissions." msgstr "Bize ulaşın` form gönderimlerini işler." -#: engine/core/views.py:226 +#: engine/core/views.py:235 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." @@ -3091,15 +3123,15 @@ msgstr "" "Gelen POST isteklerinden gelen URL'leri işleme ve doğrulama isteklerini " "işler." -#: engine/core/views.py:266 +#: engine/core/views.py:275 msgid "Handles global search queries." msgstr "Küresel arama sorgularını işler." -#: engine/core/views.py:281 +#: engine/core/views.py:290 msgid "Handles the logic of buying as a business without registration." msgstr "Kayıt olmadan bir işletme olarak satın alma mantığını ele alır." -#: engine/core/views.py:318 +#: engine/core/views.py:327 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3107,31 +3139,31 @@ msgstr "" "Bir siparişle ilişkili bir dijital varlığın indirilmesini yönetir.\n" "Bu fonksiyon, projenin depolama dizininde bulunan dijital varlık dosyasını sunmaya çalışır. Dosya bulunamazsa, kaynağın kullanılamadığını belirtmek için bir HTTP 404 hatası verilir." -#: engine/core/views.py:329 +#: engine/core/views.py:338 msgid "order_product_uuid is required" msgstr "order_product_uuid gereklidir" -#: engine/core/views.py:336 +#: engine/core/views.py:345 msgid "order product does not exist" msgstr "sipariş ürünü mevcut değil" -#: engine/core/views.py:339 +#: engine/core/views.py:348 msgid "you can only download the digital asset once" msgstr "Dijital varlığı yalnızca bir kez indirebilirsiniz" -#: engine/core/views.py:342 +#: engine/core/views.py:351 msgid "the order must be paid before downloading the digital asset" msgstr "dijital varlık indirilmeden önce siparişin ödenmesi gerekir" -#: engine/core/views.py:348 +#: engine/core/views.py:357 msgid "the order product does not have a product" msgstr "Sipariş ürününün bir ürünü yok" -#: engine/core/views.py:385 +#: engine/core/views.py:394 msgid "favicon not found" msgstr "favicon bulunamadı" -#: engine/core/views.py:390 +#: engine/core/views.py:399 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3139,7 +3171,7 @@ msgstr "" "Bir web sitesinin favicon'u için istekleri işler.\n" "Bu fonksiyon, projenin statik dizininde bulunan favicon dosyasını sunmaya çalışır. Favicon dosyası bulunamazsa, kaynağın kullanılamadığını belirtmek için bir HTTP 404 hatası verilir." -#: engine/core/views.py:402 +#: engine/core/views.py:411 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3150,11 +3182,11 @@ msgstr "" "yönlendirir. HTTP yönlendirmesini işlemek için Django'nun `redirect` " "fonksiyonunu kullanır." -#: engine/core/views.py:415 +#: engine/core/views.py:424 msgid "Returns current version of the eVibes. " msgstr "eVibes'in geçerli sürümünü döndürür." -#: engine/core/views.py:494 +#: engine/core/views.py:587 msgid "Returns custom variables for Dashboard. " msgstr "Gösterge Tablosu için özel değişkenleri döndürür." diff --git a/engine/core/locale/vi_VN/LC_MESSAGES/django.mo b/engine/core/locale/vi_VN/LC_MESSAGES/django.mo index eb9a975907fd1b8f1a95bd9d6321dc33bd04384f..71bae1371fdb3d82d7e8bb019f3361962da0da26 100644 GIT binary patch delta 14618 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 diff --git a/engine/core/locale/vi_VN/LC_MESSAGES/django.po b/engine/core/locale/vi_VN/LC_MESSAGES/django.po index d1da1ab4..92ab881a 100644 --- a/engine/core/locale/vi_VN/LC_MESSAGES/django.po +++ b/engine/core/locale/vi_VN/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-16 15:38+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -1156,7 +1156,7 @@ msgid "camelized JSON data from the requested URL" msgstr "" "Dữ liệu JSON đã được chuyển đổi sang định dạng JSON từ URL được yêu cầu." -#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:252 msgid "only URLs starting with http(s):// are allowed" msgstr "Chỉ các URL bắt đầu bằng http(s):// mới được phép." @@ -2800,60 +2800,92 @@ msgstr "Giới thiệu về chúng tôi" msgid "Django site admin" msgstr "Quản trị viên trang web Django" -#: engine/core/templates/admin/index.html:19 +#: engine/core/templates/admin/index.html:20 msgid "Dashboard" msgstr "Bảng điều khiển" -#: engine/core/templates/admin/index.html:25 +#: engine/core/templates/admin/index.html:27 msgid "Revenue (gross, 30d)" msgstr "Doanh thu (tổng, 30 ngày)" -#: engine/core/templates/admin/index.html:34 +#: engine/core/templates/admin/index.html:36 msgid "Revenue (net, 30d)" msgstr "Doanh thu (ròng, 30 ngày)" -#: engine/core/templates/admin/index.html:43 +#: engine/core/templates/admin/index.html:45 msgid "Returns (30d)" msgstr "Hoàn trả (30 ngày)" -#: engine/core/templates/admin/index.html:52 +#: engine/core/templates/admin/index.html:54 msgid "Processed orders (30d)" msgstr "Đơn hàng đã xử lý (30 ngày)" -#: engine/core/templates/admin/index.html:65 -msgid "Sales vs Returns (30d)" -msgstr "Doanh số bán hàng so với hàng trả lại (30 ngày)" +#: engine/core/templates/admin/index.html:67 +msgid "Income overview" +msgstr "Tổng quan về thu nhập" -#: engine/core/templates/admin/index.html:82 -msgid "Gross" -msgstr "Gross" +#: engine/core/templates/admin/index.html:99 +#: engine/core/templates/admin/index.html:139 +msgid "Net" +msgstr "Doanh thu ròng" -#: engine/core/templates/admin/index.html:87 +#: engine/core/templates/admin/index.html:107 +#: engine/core/templates/admin/index.html:140 +msgid "Taxes" +msgstr "Thuế" + +#: engine/core/templates/admin/index.html:115 +#: engine/core/templates/admin/index.html:141 msgid "Returns" msgstr "Trả hàng" -#: engine/core/templates/admin/index.html:94 +#: engine/core/templates/admin/index.html:122 +msgid "Gross (pie total)" +msgstr "Doanh thu tổng" + +#: engine/core/templates/admin/index.html:201 +#: engine/core/templates/admin/index.html:326 msgid "Not enough data for chart yet." msgstr "Chưa có đủ dữ liệu để tạo biểu đồ." -#: engine/core/templates/admin/index.html:103 +#: engine/core/templates/admin/index.html:210 msgid "Quick Links" msgstr "Liên kết nhanh" -#: engine/core/templates/admin/index.html:110 +#: engine/core/templates/admin/index.html:217 msgid "No links available." msgstr "Không có liên kết nào có sẵn." -#: engine/core/templates/admin/index.html:119 +#: engine/core/templates/admin/index.html:225 +msgid "Daily sales (30d)" +msgstr "Doanh số hàng ngày (30 ngày)" + +#: engine/core/templates/admin/index.html:254 +msgid "Orders (FINISHED)" +msgstr "Đơn hàng (Đã hoàn thành)" + +#: engine/core/templates/admin/index.html:264 +msgid "Gross revenue" +msgstr "Doanh thu tổng" + +#: engine/core/templates/admin/index.html:301 +msgid "Orders" +msgstr "Đơn hàng" + +#: engine/core/templates/admin/index.html:308 +msgid "Gross" +msgstr "Gross" + +#: engine/core/templates/admin/index.html:334 msgid "Most wished product" msgstr "Sản phẩm được mong đợi nhất" -#: engine/core/templates/admin/index.html:128 -#: engine/core/templates/admin/index.html:144 +#: engine/core/templates/admin/index.html:361 +#: engine/core/templates/admin/index.html:395 msgid "No data yet." msgstr "Chưa có dữ liệu." -#: engine/core/templates/admin/index.html:135 +#: engine/core/templates/admin/index.html:368 msgid "Most popular product" msgstr "Sản phẩm phổ biến nhất" @@ -3072,7 +3104,7 @@ msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "" "Kích thước hình ảnh không được vượt quá w{max_width} x h{max_height} pixel!" -#: engine/core/views.py:77 +#: engine/core/views.py:86 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." @@ -3080,7 +3112,7 @@ msgstr "" "Xử lý yêu cầu về sơ đồ trang web (sitemap index) và trả về phản hồi XML. Nó " "đảm bảo rằng phản hồi bao gồm tiêu đề loại nội dung XML phù hợp." -#: engine/core/views.py:92 +#: engine/core/views.py:101 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " @@ -3090,17 +3122,17 @@ msgstr "" "lấy phản hồi chi tiết phù hợp của sơ đồ trang web và đặt tiêu đề Content-" "Type cho XML." -#: engine/core/views.py:127 +#: engine/core/views.py:136 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "" "Trả về danh sách các ngôn ngữ được hỗ trợ và thông tin tương ứng của chúng." -#: engine/core/views.py:159 +#: engine/core/views.py:168 msgid "Returns the parameters of the website as a JSON object." msgstr "Trả về các tham số của trang web dưới dạng đối tượng JSON." -#: engine/core/views.py:178 +#: engine/core/views.py:187 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." @@ -3108,27 +3140,27 @@ msgstr "" "Xử lý các thao tác bộ nhớ đệm như đọc và ghi dữ liệu bộ nhớ đệm với khóa và " "thời gian chờ được chỉ định." -#: engine/core/views.py:205 +#: engine/core/views.py:214 msgid "Handles `contact us` form submissions." msgstr "Xử lý các biểu mẫu liên hệ." -#: engine/core/views.py:226 +#: engine/core/views.py:235 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." msgstr "Xử lý các yêu cầu xử lý và xác thực URL từ các yêu cầu POST đến." -#: engine/core/views.py:266 +#: engine/core/views.py:275 msgid "Handles global search queries." msgstr "Xử lý các truy vấn tìm kiếm toàn cầu." -#: engine/core/views.py:281 +#: engine/core/views.py:290 msgid "Handles the logic of buying as a business without registration." msgstr "" "Xử lý logic của việc mua hàng như một hoạt động kinh doanh mà không cần đăng" " ký." -#: engine/core/views.py:318 +#: engine/core/views.py:327 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3138,32 +3170,32 @@ msgstr "" " lưu trữ của dự án. Nếu tệp không được tìm thấy, một lỗi HTTP 404 sẽ được " "trả về để thông báo rằng tài nguyên không khả dụng." -#: engine/core/views.py:329 +#: engine/core/views.py:338 msgid "order_product_uuid is required" msgstr "order_product_uuid là trường bắt buộc." -#: engine/core/views.py:336 +#: engine/core/views.py:345 msgid "order product does not exist" msgstr "Sản phẩm không tồn tại" -#: engine/core/views.py:339 +#: engine/core/views.py:348 msgid "you can only download the digital asset once" msgstr "Bạn chỉ có thể tải xuống tài sản kỹ thuật số một lần." -#: engine/core/views.py:342 +#: engine/core/views.py:351 msgid "the order must be paid before downloading the digital asset" msgstr "" "Đơn hàng phải được thanh toán trước khi tải xuống tài sản kỹ thuật số." -#: engine/core/views.py:348 +#: engine/core/views.py:357 msgid "the order product does not have a product" msgstr "Sản phẩm đặt hàng không có sản phẩm." -#: engine/core/views.py:385 +#: engine/core/views.py:394 msgid "favicon not found" msgstr "Biểu tượng trang web không tìm thấy" -#: engine/core/views.py:390 +#: engine/core/views.py:399 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -3173,7 +3205,7 @@ msgstr "" "không được tìm thấy, một lỗi HTTP 404 sẽ được trả về để thông báo rằng tài " "nguyên không khả dụng." -#: engine/core/views.py:402 +#: engine/core/views.py:411 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -3184,11 +3216,11 @@ msgstr "" "Django. Nó sử dụng hàm `redirect` của Django để xử lý việc chuyển hướng " "HTTP." -#: engine/core/views.py:415 +#: engine/core/views.py:424 msgid "Returns current version of the eVibes. " msgstr "Trả về phiên bản hiện tại của eVibes." -#: engine/core/views.py:494 +#: engine/core/views.py:587 msgid "Returns custom variables for Dashboard. " msgstr "Trả về các biến tùy chỉnh cho Bảng điều khiển." diff --git a/engine/core/locale/zh_Hans/LC_MESSAGES/django.mo b/engine/core/locale/zh_Hans/LC_MESSAGES/django.mo index e58afefc80773070799c337d4b65af78b6af17f3..b8426252a7ef2f741425ef5e69b83452d2ab96f8 100644 GIT binary patch delta 14553 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�XV%jo;( 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 delta 14292 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 diff --git a/engine/core/locale/zh_Hans/LC_MESSAGES/django.po b/engine/core/locale/zh_Hans/LC_MESSAGES/django.po index 4fba80fb..fef3ec73 100644 --- a/engine/core/locale/zh_Hans/LC_MESSAGES/django.po +++ b/engine/core/locale/zh_Hans/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-16 15:38+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -1059,7 +1059,7 @@ msgstr "缓存数据" msgid "camelized JSON data from the requested URL" msgstr "从请求的 URL 中获取驼峰化 JSON 数据" -#: engine/core/graphene/mutations.py:67 engine/core/views.py:243 +#: engine/core/graphene/mutations.py:67 engine/core/views.py:252 msgid "only URLs starting with http(s):// are allowed" msgstr "只允许使用以 http(s):// 开头的 URL" @@ -2569,60 +2569,92 @@ msgstr "关于我们" msgid "Django site admin" msgstr "Django 网站管理员" -#: engine/core/templates/admin/index.html:19 +#: engine/core/templates/admin/index.html:20 msgid "Dashboard" msgstr "仪表板" -#: engine/core/templates/admin/index.html:25 +#: engine/core/templates/admin/index.html:27 msgid "Revenue (gross, 30d)" msgstr "收入(毛额,30d)" -#: engine/core/templates/admin/index.html:34 +#: engine/core/templates/admin/index.html:36 msgid "Revenue (net, 30d)" msgstr "收入(净额,30d)" -#: engine/core/templates/admin/index.html:43 +#: engine/core/templates/admin/index.html:45 msgid "Returns (30d)" msgstr "返回 (30d)" -#: engine/core/templates/admin/index.html:52 +#: engine/core/templates/admin/index.html:54 msgid "Processed orders (30d)" msgstr "已处理订单 (30d)" -#: engine/core/templates/admin/index.html:65 -msgid "Sales vs Returns (30d)" -msgstr "销售与退货 (30d)" +#: engine/core/templates/admin/index.html:67 +msgid "Income overview" +msgstr "收入概览" -#: engine/core/templates/admin/index.html:82 -msgid "Gross" -msgstr "毛额" +#: engine/core/templates/admin/index.html:99 +#: engine/core/templates/admin/index.html:139 +msgid "Net" +msgstr "净收入" -#: engine/core/templates/admin/index.html:87 +#: engine/core/templates/admin/index.html:107 +#: engine/core/templates/admin/index.html:140 +msgid "Taxes" +msgstr "税收" + +#: engine/core/templates/admin/index.html:115 +#: engine/core/templates/admin/index.html:141 msgid "Returns" msgstr "返回" -#: engine/core/templates/admin/index.html:94 +#: engine/core/templates/admin/index.html:122 +msgid "Gross (pie total)" +msgstr "总收入" + +#: engine/core/templates/admin/index.html:201 +#: engine/core/templates/admin/index.html:326 msgid "Not enough data for chart yet." msgstr "图表数据尚不充足。" -#: engine/core/templates/admin/index.html:103 +#: engine/core/templates/admin/index.html:210 msgid "Quick Links" msgstr "快速链接" -#: engine/core/templates/admin/index.html:110 +#: engine/core/templates/admin/index.html:217 msgid "No links available." msgstr "没有链接。" -#: engine/core/templates/admin/index.html:119 +#: engine/core/templates/admin/index.html:225 +msgid "Daily sales (30d)" +msgstr "每日销售额 (30d)" + +#: engine/core/templates/admin/index.html:254 +msgid "Orders (FINISHED)" +msgstr "订单(已完成)" + +#: engine/core/templates/admin/index.html:264 +msgid "Gross revenue" +msgstr "总收入" + +#: engine/core/templates/admin/index.html:301 +msgid "Orders" +msgstr "订单" + +#: engine/core/templates/admin/index.html:308 +msgid "Gross" +msgstr "毛额" + +#: engine/core/templates/admin/index.html:334 msgid "Most wished product" msgstr "最希望的产品" -#: engine/core/templates/admin/index.html:128 -#: engine/core/templates/admin/index.html:144 +#: engine/core/templates/admin/index.html:361 +#: engine/core/templates/admin/index.html:395 msgid "No data yet." msgstr "尚无数据。" -#: engine/core/templates/admin/index.html:135 +#: engine/core/templates/admin/index.html:368 msgid "Most popular product" msgstr "最受欢迎的产品" @@ -2831,53 +2863,53 @@ msgstr "必须配置 NOMINATIM_URL 参数!" msgid "image dimensions should not exceed w{max_width} x h{max_height} pixels" msgstr "图像尺寸不应超过 w{max_width} x h{max_height} 像素!" -#: engine/core/views.py:77 +#: engine/core/views.py:86 msgid "" "Handles the request for the sitemap index and returns an XML response. It " "ensures the response includes the appropriate content type header for XML." msgstr "处理网站地图索引请求并返回 XML 响应。它确保响应包含适当的 XML 内容类型标头。" -#: engine/core/views.py:92 +#: engine/core/views.py:101 msgid "" "Handles the detailed view response for a sitemap. This function processes " "the request, fetches the appropriate sitemap detail response, and sets the " "Content-Type header for XML." msgstr "处理网站地图的详细视图响应。该函数处理请求,获取相应的网站地图详细响应,并将 Content-Type 标头设置为 XML。" -#: engine/core/views.py:127 +#: engine/core/views.py:136 msgid "" "Returns a list of supported languages and their corresponding information." msgstr "返回支持语言及其相应信息的列表。" -#: engine/core/views.py:159 +#: engine/core/views.py:168 msgid "Returns the parameters of the website as a JSON object." msgstr "以 JSON 对象形式返回网站参数。" -#: engine/core/views.py:178 +#: engine/core/views.py:187 msgid "" "Handles cache operations such as reading and setting cache data with a " "specified key and timeout." msgstr "处理缓存操作,如使用指定的键和超时读取和设置缓存数据。" -#: engine/core/views.py:205 +#: engine/core/views.py:214 msgid "Handles `contact us` form submissions." msgstr "处理 \"联系我们 \"表单提交。" -#: engine/core/views.py:226 +#: engine/core/views.py:235 msgid "" "Handles requests for processing and validating URLs from incoming POST " "requests." msgstr "处理来自传入 POST 请求的处理和验证 URL 的请求。" -#: engine/core/views.py:266 +#: engine/core/views.py:275 msgid "Handles global search queries." msgstr "处理全局搜索查询。" -#: engine/core/views.py:281 +#: engine/core/views.py:290 msgid "Handles the logic of buying as a business without registration." msgstr "处理未注册企业的购买逻辑。" -#: engine/core/views.py:318 +#: engine/core/views.py:327 msgid "" "Handles the downloading of a digital asset associated with an order.\n" "This function attempts to serve the digital asset file located in the storage directory of the project. If the file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -2885,31 +2917,31 @@ msgstr "" "处理与订单相关的数字资产的下载。\n" "此函数会尝试为位于项目存储目录中的数字资产文件提供服务。如果未找到文件,则会出现 HTTP 404 错误,表示资源不可用。" -#: engine/core/views.py:329 +#: engine/core/views.py:338 msgid "order_product_uuid is required" msgstr "order_product_uuid 为必填项" -#: engine/core/views.py:336 +#: engine/core/views.py:345 msgid "order product does not exist" msgstr "订单产品不存在" -#: engine/core/views.py:339 +#: engine/core/views.py:348 msgid "you can only download the digital asset once" msgstr "您只能下载一次数字资产" -#: engine/core/views.py:342 +#: engine/core/views.py:351 msgid "the order must be paid before downloading the digital asset" msgstr "在下载数字资产前必须支付订单费用" -#: engine/core/views.py:348 +#: engine/core/views.py:357 msgid "the order product does not have a product" msgstr "订单产品没有产品" -#: engine/core/views.py:385 +#: engine/core/views.py:394 msgid "favicon not found" msgstr "未找到 favicon" -#: engine/core/views.py:390 +#: engine/core/views.py:399 msgid "" "Handles requests for the favicon of a website.\n" "This function attempts to serve the favicon file located in the static directory of the project. If the favicon file is not found, an HTTP 404 error is raised to indicate the resource is unavailable." @@ -2917,7 +2949,7 @@ msgstr "" "处理网站的 favicon 请求。\n" "该函数会尝试为位于项目静态目录中的 favicon 文件提供服务。如果找不到 favicon 文件,就会出现 HTTP 404 错误,表示资源不可用。" -#: engine/core/views.py:402 +#: engine/core/views.py:411 msgid "" "Redirects the request to the admin index page. The function handles incoming" " HTTP requests and redirects them to the Django admin interface index page. " @@ -2926,11 +2958,11 @@ msgstr "" "将请求重定向到管理索引页面。该函数处理传入的 HTTP 请求并将其重定向到 Django 管理界面索引页面。它使用 Django 的 " "`redirect` 函数来处理 HTTP 重定向。" -#: engine/core/views.py:415 +#: engine/core/views.py:424 msgid "Returns current version of the eVibes. " msgstr "返回 eVibes 的当前版本。" -#: engine/core/views.py:494 +#: engine/core/views.py:587 msgid "Returns custom variables for Dashboard. " msgstr "返回 Dashboard 的自定义变量。" diff --git a/engine/core/templates/admin/index.html b/engine/core/templates/admin/index.html index 3527f3c9..a33a52d3 100644 --- a/engine/core/templates/admin/index.html +++ b/engine/core/templates/admin/index.html @@ -64,7 +64,7 @@ {% with total=gross|add:returns %} {% component "unfold/components/card.html" with class="xl:col-span-2" %} {% component "unfold/components/title.html" %} - {% trans "Sales vs Returns (30d)" %} + {% trans "Income overview" %} {% endcomponent %} {% if total and total > 0 %} {% with net=revenue_net_30|default:0 %} @@ -81,7 +81,6 @@ {% if net_for_pie < 0 %} {% with net_for_pie=0 %}{% endwith %} {% endif %} - {# Degrees per slice #} {% widthratio net_for_pie gross 360 as net_deg %} {% widthratio tax_amt_pos gross 360 as tax_deg %} {% widthratio returns_capped gross 360 as ret_deg %} @@ -89,15 +88,9 @@ {% with tax_end=net_end|add:tax_deg %} {% with ret_end=tax_end|add:ret_deg %}

-
-
-
+
+
@@ -132,6 +125,69 @@
+ + {% endwith %} {% endwith %} {% endwith %} diff --git a/engine/payments/locale/ar_AR/LC_MESSAGES/django.po b/engine/payments/locale/ar_AR/LC_MESSAGES/django.po index 006d9024..7a97f48e 100644 --- a/engine/payments/locale/ar_AR/LC_MESSAGES/django.po +++ b/engine/payments/locale/ar_AR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -200,18 +200,28 @@ msgstr "{settings.PROJECT_NAME} | إيداع الرصيد" #: engine/payments/views.py:23 msgid "" "This class provides an API endpoint to handle deposit transactions.\n" -"It supports the creation of a deposit transaction after validating the provided data. If the user is not authenticated, an appropriate response is returned. On successful validation and execution, a response with the transaction details is provided." +"It supports the creation of a deposit transaction after validating the " +"provided data. If the user is not authenticated, an appropriate response is " +"returned. On successful validation and execution, a response with the " +"transaction details is provided." msgstr "" "توفر هذه الفئة نقطة نهاية API للتعامل مع معاملات الإيداع.\n" -"وهي تدعم إنشاء معاملة إيداع بعد التحقق من صحة البيانات المقدمة. إذا لم تتم مصادقة المستخدم، يتم إرجاع استجابة مناسبة. عند التحقق والتنفيذ بنجاح، يتم توفير استجابة بتفاصيل المعاملة." +"وهي تدعم إنشاء معاملة إيداع بعد التحقق من صحة البيانات المقدمة. إذا لم تتم " +"مصادقة المستخدم، يتم إرجاع استجابة مناسبة. عند التحقق والتنفيذ بنجاح، يتم " +"توفير استجابة بتفاصيل المعاملة." #: engine/payments/views.py:49 msgid "" "Handles incoming callback requests to the API.\n" -"This class processes and routes incoming HTTP POST requests to the appropriate pgateway handler based on the provided gateway parameter. It is designed to handle callback events coming from external systems and provide an appropriate HTTP response indicating success or failure." +"This class processes and routes incoming HTTP POST requests to the " +"appropriate pgateway handler based on the provided gateway parameter. It is " +"designed to handle callback events coming from external systems and provide " +"an appropriate HTTP response indicating success or failure." msgstr "" "يعالج طلبات رد الاتصال الواردة إلى واجهة برمجة التطبيقات.\n" -"يقوم هذا الصنف بمعالجة طلبات HTTP POST الواردة وتوجيهها إلى معالج pgateway المناسب بناءً على معلمة البوابة المقدمة. وهو مصمم للتعامل مع أحداث رد الاتصال الواردة من أنظمة خارجية وتوفير استجابة HTTP مناسبة تشير إلى النجاح أو الفشل." +"يقوم هذا الصنف بمعالجة طلبات HTTP POST الواردة وتوجيهها إلى معالج pgateway " +"المناسب بناءً على معلمة البوابة المقدمة. وهو مصمم للتعامل مع أحداث رد الاتصال " +"الواردة من أنظمة خارجية وتوفير استجابة HTTP مناسبة تشير إلى النجاح أو الفشل." #: engine/payments/views.py:60 #, python-brace-format diff --git a/engine/payments/locale/cs_CZ/LC_MESSAGES/django.po b/engine/payments/locale/cs_CZ/LC_MESSAGES/django.po index 5fc9e729..e02bff03 100644 --- a/engine/payments/locale/cs_CZ/LC_MESSAGES/django.po +++ b/engine/payments/locale/cs_CZ/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -200,18 +200,29 @@ msgstr "{settings.PROJECT_NAME} | zůstatek vkladu" #: engine/payments/views.py:23 msgid "" "This class provides an API endpoint to handle deposit transactions.\n" -"It supports the creation of a deposit transaction after validating the provided data. If the user is not authenticated, an appropriate response is returned. On successful validation and execution, a response with the transaction details is provided." +"It supports the creation of a deposit transaction after validating the " +"provided data. If the user is not authenticated, an appropriate response is " +"returned. On successful validation and execution, a response with the " +"transaction details is provided." msgstr "" "Tato třída poskytuje koncový bod API pro zpracování vkladových transakcí.\n" -"Podporuje vytvoření vkladové transakce po ověření zadaných údajů. Pokud uživatel není ověřen, je vrácena odpovídající odpověď. Při úspěšném ověření a provedení je poskytnuta odpověď s údaji o transakci." +"Podporuje vytvoření vkladové transakce po ověření zadaných údajů. Pokud " +"uživatel není ověřen, je vrácena odpovídající odpověď. Při úspěšném ověření " +"a provedení je poskytnuta odpověď s údaji o transakci." #: engine/payments/views.py:49 msgid "" "Handles incoming callback requests to the API.\n" -"This class processes and routes incoming HTTP POST requests to the appropriate pgateway handler based on the provided gateway parameter. It is designed to handle callback events coming from external systems and provide an appropriate HTTP response indicating success or failure." +"This class processes and routes incoming HTTP POST requests to the " +"appropriate pgateway handler based on the provided gateway parameter. It is " +"designed to handle callback events coming from external systems and provide " +"an appropriate HTTP response indicating success or failure." msgstr "" "Zpracovává příchozí požadavky na zpětné volání rozhraní API.\n" -"Tato třída zpracovává a směruje příchozí požadavky HTTP POST na příslušnou obsluhu pgateway na základě zadaného parametru brány. Je navržena tak, aby zpracovávala události zpětného volání přicházející z externích systémů a poskytovala příslušnou odpověď HTTP označující úspěch nebo selhání." +"Tato třída zpracovává a směruje příchozí požadavky HTTP POST na příslušnou " +"obsluhu pgateway na základě zadaného parametru brány. Je navržena tak, aby " +"zpracovávala události zpětného volání přicházející z externích systémů a " +"poskytovala příslušnou odpověď HTTP označující úspěch nebo selhání." #: engine/payments/views.py:60 #, python-brace-format diff --git a/engine/payments/locale/da_DK/LC_MESSAGES/django.po b/engine/payments/locale/da_DK/LC_MESSAGES/django.po index 6066123f..eb88d6a4 100644 --- a/engine/payments/locale/da_DK/LC_MESSAGES/django.po +++ b/engine/payments/locale/da_DK/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -87,8 +87,7 @@ msgstr "Valutaer" #: engine/payments/models.py:100 msgid "comma separated list of currencies supported by this gateway, " -msgstr "" -"kommasepareret liste over valutaer, der understøttes af denne gateway," +msgstr "kommasepareret liste over valutaer, der understøttes af denne gateway," #: engine/payments/models.py:106 msgid "minimum transaction amount" @@ -201,18 +200,31 @@ msgstr "{settings.PROJECT_NAME} | Saldoindbetaling" #: engine/payments/views.py:23 msgid "" "This class provides an API endpoint to handle deposit transactions.\n" -"It supports the creation of a deposit transaction after validating the provided data. If the user is not authenticated, an appropriate response is returned. On successful validation and execution, a response with the transaction details is provided." +"It supports the creation of a deposit transaction after validating the " +"provided data. If the user is not authenticated, an appropriate response is " +"returned. On successful validation and execution, a response with the " +"transaction details is provided." msgstr "" -"Denne klasse indeholder et API-slutpunkt til håndtering af indbetalingstransaktioner.\n" -"Den understøtter oprettelsen af en indbetalingstransaktion efter validering af de angivne data. Hvis brugeren ikke er autentificeret, returneres et passende svar. Ved vellykket validering og udførelse leveres et svar med transaktionsoplysningerne." +"Denne klasse indeholder et API-slutpunkt til håndtering af " +"indbetalingstransaktioner.\n" +"Den understøtter oprettelsen af en indbetalingstransaktion efter validering " +"af de angivne data. Hvis brugeren ikke er autentificeret, returneres et " +"passende svar. Ved vellykket validering og udførelse leveres et svar med " +"transaktionsoplysningerne." #: engine/payments/views.py:49 msgid "" "Handles incoming callback requests to the API.\n" -"This class processes and routes incoming HTTP POST requests to the appropriate pgateway handler based on the provided gateway parameter. It is designed to handle callback events coming from external systems and provide an appropriate HTTP response indicating success or failure." +"This class processes and routes incoming HTTP POST requests to the " +"appropriate pgateway handler based on the provided gateway parameter. It is " +"designed to handle callback events coming from external systems and provide " +"an appropriate HTTP response indicating success or failure." msgstr "" "Håndterer indgående tilbagekaldsanmodninger til API'en.\n" -"Denne klasse behandler og dirigerer indgående HTTP POST-anmodninger til den relevante pgateway-handler baseret på den angivne gateway-parameter. Den er designet til at håndtere tilbagekaldshændelser, der kommer fra eksterne systemer, og give et passende HTTP-svar, der angiver succes eller fiasko." +"Denne klasse behandler og dirigerer indgående HTTP POST-anmodninger til den " +"relevante pgateway-handler baseret på den angivne gateway-parameter. Den er " +"designet til at håndtere tilbagekaldshændelser, der kommer fra eksterne " +"systemer, og give et passende HTTP-svar, der angiver succes eller fiasko." #: engine/payments/views.py:60 #, python-brace-format diff --git a/engine/payments/locale/de_DE/LC_MESSAGES/django.po b/engine/payments/locale/de_DE/LC_MESSAGES/django.po index 4faa82f3..1d47a8fc 100644 --- a/engine/payments/locale/de_DE/LC_MESSAGES/django.po +++ b/engine/payments/locale/de_DE/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -204,18 +204,32 @@ msgstr "{settings.PROJECT_NAME} | Saldoeinlage" #: engine/payments/views.py:23 msgid "" "This class provides an API endpoint to handle deposit transactions.\n" -"It supports the creation of a deposit transaction after validating the provided data. If the user is not authenticated, an appropriate response is returned. On successful validation and execution, a response with the transaction details is provided." +"It supports the creation of a deposit transaction after validating the " +"provided data. If the user is not authenticated, an appropriate response is " +"returned. On successful validation and execution, a response with the " +"transaction details is provided." msgstr "" -"Diese Klasse bietet einen API-Endpunkt zur Abwicklung von Einzahlungstransaktionen.\n" -"Sie unterstützt die Erstellung einer Einzahlungstransaktion nach Validierung der angegebenen Daten. Wenn der Benutzer nicht authentifiziert ist, wird eine entsprechende Antwort zurückgegeben. Bei erfolgreicher Validierung und Ausführung wird eine Antwort mit den Transaktionsdetails geliefert." +"Diese Klasse bietet einen API-Endpunkt zur Abwicklung von " +"Einzahlungstransaktionen.\n" +"Sie unterstützt die Erstellung einer Einzahlungstransaktion nach Validierung " +"der angegebenen Daten. Wenn der Benutzer nicht authentifiziert ist, wird " +"eine entsprechende Antwort zurückgegeben. Bei erfolgreicher Validierung und " +"Ausführung wird eine Antwort mit den Transaktionsdetails geliefert." #: engine/payments/views.py:49 msgid "" "Handles incoming callback requests to the API.\n" -"This class processes and routes incoming HTTP POST requests to the appropriate pgateway handler based on the provided gateway parameter. It is designed to handle callback events coming from external systems and provide an appropriate HTTP response indicating success or failure." +"This class processes and routes incoming HTTP POST requests to the " +"appropriate pgateway handler based on the provided gateway parameter. It is " +"designed to handle callback events coming from external systems and provide " +"an appropriate HTTP response indicating success or failure." msgstr "" "Verarbeitet eingehende Callback-Anforderungen an die API.\n" -"Diese Klasse verarbeitet und leitet eingehende HTTP-POST-Anfragen an den entsprechenden pgateway-Handler auf der Grundlage des angegebenen Gateway-Parameters weiter. Sie wurde entwickelt, um Callback-Ereignisse von externen Systemen zu verarbeiten und eine entsprechende HTTP-Antwort zu liefern, die Erfolg oder Misserfolg anzeigt." +"Diese Klasse verarbeitet und leitet eingehende HTTP-POST-Anfragen an den " +"entsprechenden pgateway-Handler auf der Grundlage des angegebenen Gateway-" +"Parameters weiter. Sie wurde entwickelt, um Callback-Ereignisse von externen " +"Systemen zu verarbeiten und eine entsprechende HTTP-Antwort zu liefern, die " +"Erfolg oder Misserfolg anzeigt." #: engine/payments/views.py:60 #, python-brace-format @@ -236,8 +250,8 @@ msgid "" "permissions, can access the transactions." msgstr "" "ViewSet für die Handhabung von Nur-Lese-Operationen auf dem " -"Transaktionsmodell. Diese Klasse bietet eine schreibgeschützte Schnittstelle" -" für die Interaktion mit Transaktionsdaten. Sie verwendet den " -"TransactionSerializer zur Serialisierung und Deserialisierung der Daten. Die" -" Klasse stellt sicher, dass nur autorisierte Benutzer, die bestimmte " +"Transaktionsmodell. Diese Klasse bietet eine schreibgeschützte Schnittstelle " +"für die Interaktion mit Transaktionsdaten. Sie verwendet den " +"TransactionSerializer zur Serialisierung und Deserialisierung der Daten. Die " +"Klasse stellt sicher, dass nur autorisierte Benutzer, die bestimmte " "Berechtigungen erfüllen, auf die Transaktionen zugreifen können." diff --git a/engine/payments/locale/en_GB/LC_MESSAGES/django.po b/engine/payments/locale/en_GB/LC_MESSAGES/django.po index f8f562c5..8567bfbd 100644 --- a/engine/payments/locale/en_GB/LC_MESSAGES/django.po +++ b/engine/payments/locale/en_GB/LC_MESSAGES/django.po @@ -2,12 +2,12 @@ # Copyright (C) 2025 Egor "fureunoir" Gorbunov # This file is distributed under the same license as the eVibes package. # EGOR GORBUNOV , 2025. -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -204,18 +204,30 @@ msgstr "{settings.PROJECT_NAME} | balance deposit" #: engine/payments/views.py:23 msgid "" "This class provides an API endpoint to handle deposit transactions.\n" -"It supports the creation of a deposit transaction after validating the provided data. If the user is not authenticated, an appropriate response is returned. On successful validation and execution, a response with the transaction details is provided." +"It supports the creation of a deposit transaction after validating the " +"provided data. If the user is not authenticated, an appropriate response is " +"returned. On successful validation and execution, a response with the " +"transaction details is provided." msgstr "" "This class provides an API endpoint to handle deposit transactions.\n" -"It supports the creation of a deposit transaction after validating the provided data. If the user is not authenticated, an appropriate response is returned. On successful validation and execution, a response with the transaction details is provided." +"It supports the creation of a deposit transaction after validating the " +"provided data. If the user is not authenticated, an appropriate response is " +"returned. On successful validation and execution, a response with the " +"transaction details is provided." #: engine/payments/views.py:49 msgid "" "Handles incoming callback requests to the API.\n" -"This class processes and routes incoming HTTP POST requests to the appropriate pgateway handler based on the provided gateway parameter. It is designed to handle callback events coming from external systems and provide an appropriate HTTP response indicating success or failure." +"This class processes and routes incoming HTTP POST requests to the " +"appropriate pgateway handler based on the provided gateway parameter. It is " +"designed to handle callback events coming from external systems and provide " +"an appropriate HTTP response indicating success or failure." msgstr "" "Handles incoming callback requests to the API.\n" -"This class processes and routes incoming HTTP POST requests to the appropriate pgateway handler based on the provided gateway parameter. It is designed to handle callback events coming from external systems and provide an appropriate HTTP response indicating success or failure." +"This class processes and routes incoming HTTP POST requests to the " +"appropriate pgateway handler based on the provided gateway parameter. It is " +"designed to handle callback events coming from external systems and provide " +"an appropriate HTTP response indicating success or failure." #: engine/payments/views.py:60 #, python-brace-format diff --git a/engine/payments/locale/en_US/LC_MESSAGES/django.po b/engine/payments/locale/en_US/LC_MESSAGES/django.po index 013c1150..daa950cc 100644 --- a/engine/payments/locale/en_US/LC_MESSAGES/django.po +++ b/engine/payments/locale/en_US/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -200,18 +200,30 @@ msgstr "{settings.PROJECT_NAME} | balance deposit" #: engine/payments/views.py:23 msgid "" "This class provides an API endpoint to handle deposit transactions.\n" -"It supports the creation of a deposit transaction after validating the provided data. If the user is not authenticated, an appropriate response is returned. On successful validation and execution, a response with the transaction details is provided." +"It supports the creation of a deposit transaction after validating the " +"provided data. If the user is not authenticated, an appropriate response is " +"returned. On successful validation and execution, a response with the " +"transaction details is provided." msgstr "" "This class provides an API endpoint to handle deposit transactions.\n" -"It supports the creation of a deposit transaction after validating the provided data. If the user is not authenticated, an appropriate response is returned. On successful validation and execution, a response with the transaction details is provided." +"It supports the creation of a deposit transaction after validating the " +"provided data. If the user is not authenticated, an appropriate response is " +"returned. On successful validation and execution, a response with the " +"transaction details is provided." #: engine/payments/views.py:49 msgid "" "Handles incoming callback requests to the API.\n" -"This class processes and routes incoming HTTP POST requests to the appropriate pgateway handler based on the provided gateway parameter. It is designed to handle callback events coming from external systems and provide an appropriate HTTP response indicating success or failure." +"This class processes and routes incoming HTTP POST requests to the " +"appropriate pgateway handler based on the provided gateway parameter. It is " +"designed to handle callback events coming from external systems and provide " +"an appropriate HTTP response indicating success or failure." msgstr "" "Handles incoming callback requests to the API.\n" -"This class processes and routes incoming HTTP POST requests to the appropriate pgateway handler based on the provided gateway parameter. It is designed to handle callback events coming from external systems and provide an appropriate HTTP response indicating success or failure." +"This class processes and routes incoming HTTP POST requests to the " +"appropriate pgateway handler based on the provided gateway parameter. It is " +"designed to handle callback events coming from external systems and provide " +"an appropriate HTTP response indicating success or failure." #: engine/payments/views.py:60 #, python-brace-format diff --git a/engine/payments/locale/es_ES/LC_MESSAGES/django.po b/engine/payments/locale/es_ES/LC_MESSAGES/django.po index c2816ea6..8aa9c550 100644 --- a/engine/payments/locale/es_ES/LC_MESSAGES/django.po +++ b/engine/payments/locale/es_ES/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -175,7 +175,8 @@ msgid "" "if you have any questions, feel free to contact our support at\n" " %(contact_email)s." msgstr "" -"Si tiene alguna pregunta, no dude en ponerse en contacto con nuestro servicio de asistencia en\n" +"Si tiene alguna pregunta, no dude en ponerse en contacto con nuestro " +"servicio de asistencia en\n" " %(contact_email)s." #: engine/payments/templates/balance_deposit_email.html:100 @@ -204,18 +205,32 @@ msgstr "{settings.PROJECT_NAME} | depósito de saldo" #: engine/payments/views.py:23 msgid "" "This class provides an API endpoint to handle deposit transactions.\n" -"It supports the creation of a deposit transaction after validating the provided data. If the user is not authenticated, an appropriate response is returned. On successful validation and execution, a response with the transaction details is provided." +"It supports the creation of a deposit transaction after validating the " +"provided data. If the user is not authenticated, an appropriate response is " +"returned. On successful validation and execution, a response with the " +"transaction details is provided." msgstr "" -"Esta clase proporciona un punto final de API para gestionar transacciones de depósito.\n" -"Admite la creación de una transacción de depósito tras validar los datos proporcionados. Si el usuario no está autenticado, se devuelve una respuesta apropiada. Si la validación y ejecución son correctas, se proporciona una respuesta con los detalles de la transacción." +"Esta clase proporciona un punto final de API para gestionar transacciones de " +"depósito.\n" +"Admite la creación de una transacción de depósito tras validar los datos " +"proporcionados. Si el usuario no está autenticado, se devuelve una respuesta " +"apropiada. Si la validación y ejecución son correctas, se proporciona una " +"respuesta con los detalles de la transacción." #: engine/payments/views.py:49 msgid "" "Handles incoming callback requests to the API.\n" -"This class processes and routes incoming HTTP POST requests to the appropriate pgateway handler based on the provided gateway parameter. It is designed to handle callback events coming from external systems and provide an appropriate HTTP response indicating success or failure." +"This class processes and routes incoming HTTP POST requests to the " +"appropriate pgateway handler based on the provided gateway parameter. It is " +"designed to handle callback events coming from external systems and provide " +"an appropriate HTTP response indicating success or failure." msgstr "" "Gestiona las solicitudes entrantes de devolución de llamada a la API.\n" -"Esta clase procesa y enruta las peticiones HTTP POST entrantes al manejador pgateway apropiado basado en el parámetro de puerta de enlace proporcionado. Está diseñada para gestionar eventos de devolución de llamada procedentes de sistemas externos y proporcionar una respuesta HTTP adecuada que indique el éxito o el fracaso." +"Esta clase procesa y enruta las peticiones HTTP POST entrantes al manejador " +"pgateway apropiado basado en el parámetro de puerta de enlace proporcionado. " +"Está diseñada para gestionar eventos de devolución de llamada procedentes de " +"sistemas externos y proporcionar una respuesta HTTP adecuada que indique el " +"éxito o el fracaso." #: engine/payments/views.py:60 #, python-brace-format @@ -236,8 +251,8 @@ msgid "" "permissions, can access the transactions." msgstr "" "ViewSet para manejar operaciones de sólo lectura en el modelo Transaction. " -"Esta clase proporciona una interfaz de sólo lectura para interactuar con los" -" datos de la transacción. Utiliza TransactionSerializer para serializar y " +"Esta clase proporciona una interfaz de sólo lectura para interactuar con los " +"datos de la transacción. Utiliza TransactionSerializer para serializar y " "deserializar los datos. La clase garantiza que sólo los usuarios " "autorizados, que cumplan determinados permisos, puedan acceder a las " "transacciones." diff --git a/engine/payments/locale/fa_IR/LC_MESSAGES/django.po b/engine/payments/locale/fa_IR/LC_MESSAGES/django.po index 9b166e23..6427db5d 100644 --- a/engine/payments/locale/fa_IR/LC_MESSAGES/django.po +++ b/engine/payments/locale/fa_IR/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/engine/payments/locale/fr_FR/LC_MESSAGES/django.po b/engine/payments/locale/fr_FR/LC_MESSAGES/django.po index aaf8196d..ed7eea81 100644 --- a/engine/payments/locale/fr_FR/LC_MESSAGES/django.po +++ b/engine/payments/locale/fr_FR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -106,8 +106,7 @@ msgstr "limite journalière" #: engine/payments/models.py:116 msgid "daily sum limit of transactions' amounts. 0 means no limit" msgstr "" -"la limite quotidienne des montants des transactions. 0 signifie aucune " -"limite" +"la limite quotidienne des montants des transactions. 0 signifie aucune limite" #: engine/payments/models.py:122 msgid "monthly limit" @@ -177,7 +176,8 @@ msgid "" "if you have any questions, feel free to contact our support at\n" " %(contact_email)s." msgstr "" -"Si vous avez des questions, n'hésitez pas à contacter notre service d'assistance à l'adresse suivante\n" +"Si vous avez des questions, n'hésitez pas à contacter notre service " +"d'assistance à l'adresse suivante\n" " %(contact_email)s." #: engine/payments/templates/balance_deposit_email.html:100 @@ -191,8 +191,7 @@ msgstr "Tous droits réservés" #: engine/payments/utils/__init__.py:8 msgid "a provider to get rates from is required" -msgstr "" -"Il est nécessaire de disposer d'un fournisseur pour obtenir des tarifs" +msgstr "Il est nécessaire de disposer d'un fournisseur pour obtenir des tarifs" #: engine/payments/utils/__init__.py:15 #, python-brace-format @@ -207,18 +206,32 @@ msgstr "{settings.PROJECT_NAME} | dépôt de solde" #: engine/payments/views.py:23 msgid "" "This class provides an API endpoint to handle deposit transactions.\n" -"It supports the creation of a deposit transaction after validating the provided data. If the user is not authenticated, an appropriate response is returned. On successful validation and execution, a response with the transaction details is provided." +"It supports the creation of a deposit transaction after validating the " +"provided data. If the user is not authenticated, an appropriate response is " +"returned. On successful validation and execution, a response with the " +"transaction details is provided." msgstr "" -"Cette classe fournit un point d'accès à l'API pour gérer les transactions de dépôt.\n" -"Elle prend en charge la création d'une transaction de dépôt après validation des données fournies. Si l'utilisateur n'est pas authentifié, une réponse appropriée est renvoyée. Si la validation et l'exécution sont réussies, une réponse contenant les détails de la transaction est fournie." +"Cette classe fournit un point d'accès à l'API pour gérer les transactions de " +"dépôt.\n" +"Elle prend en charge la création d'une transaction de dépôt après validation " +"des données fournies. Si l'utilisateur n'est pas authentifié, une réponse " +"appropriée est renvoyée. Si la validation et l'exécution sont réussies, une " +"réponse contenant les détails de la transaction est fournie." #: engine/payments/views.py:49 msgid "" "Handles incoming callback requests to the API.\n" -"This class processes and routes incoming HTTP POST requests to the appropriate pgateway handler based on the provided gateway parameter. It is designed to handle callback events coming from external systems and provide an appropriate HTTP response indicating success or failure." +"This class processes and routes incoming HTTP POST requests to the " +"appropriate pgateway handler based on the provided gateway parameter. It is " +"designed to handle callback events coming from external systems and provide " +"an appropriate HTTP response indicating success or failure." msgstr "" "Gère les demandes de rappel entrantes vers l'API.\n" -"Cette classe traite et achemine les demandes HTTP POST entrantes vers le gestionnaire pgateway approprié en fonction du paramètre de passerelle fourni. Elle est conçue pour gérer les événements de rappel provenant de systèmes externes et fournir une réponse HTTP appropriée indiquant le succès ou l'échec." +"Cette classe traite et achemine les demandes HTTP POST entrantes vers le " +"gestionnaire pgateway approprié en fonction du paramètre de passerelle " +"fourni. Elle est conçue pour gérer les événements de rappel provenant de " +"systèmes externes et fournir une réponse HTTP appropriée indiquant le succès " +"ou l'échec." #: engine/payments/views.py:60 #, python-brace-format diff --git a/engine/payments/locale/he_IL/LC_MESSAGES/django.po b/engine/payments/locale/he_IL/LC_MESSAGES/django.po index 32195fb9..eb410a0e 100644 --- a/engine/payments/locale/he_IL/LC_MESSAGES/django.po +++ b/engine/payments/locale/he_IL/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -197,7 +197,10 @@ msgstr "{settings.PROJECT_NAME} | הפקדת יתרה" #: engine/payments/views.py:23 msgid "" "This class provides an API endpoint to handle deposit transactions.\n" -"It supports the creation of a deposit transaction after validating the provided data. If the user is not authenticated, an appropriate response is returned. On successful validation and execution, a response with the transaction details is provided." +"It supports the creation of a deposit transaction after validating the " +"provided data. If the user is not authenticated, an appropriate response is " +"returned. On successful validation and execution, a response with the " +"transaction details is provided." msgstr "" "מחלקת זו מספקת נקודת קצה API לטיפול בעסקאות הפקדה. היא תומכת ביצירת עסקת " "הפקדה לאחר אימות הנתונים שנמסרו. אם המשתמש אינו מאומת, מתקבלת תגובה מתאימה. " @@ -206,11 +209,14 @@ msgstr "" #: engine/payments/views.py:49 msgid "" "Handles incoming callback requests to the API.\n" -"This class processes and routes incoming HTTP POST requests to the appropriate pgateway handler based on the provided gateway parameter. It is designed to handle callback events coming from external systems and provide an appropriate HTTP response indicating success or failure." +"This class processes and routes incoming HTTP POST requests to the " +"appropriate pgateway handler based on the provided gateway parameter. It is " +"designed to handle callback events coming from external systems and provide " +"an appropriate HTTP response indicating success or failure." msgstr "" -"מטפל בבקשות החזרה נכנסות ל-API. מחלקה זו מעבדת ומנתבת בקשות HTTP POST נכנסות" -" למטפל pgateway המתאים על סמך פרמטר השער שסופק. היא נועדה לטפל באירועי החזרה" -" ממערכות חיצוניות ולספק תגובת HTTP מתאימה המציינת הצלחה או כישלון." +"מטפל בבקשות החזרה נכנסות ל-API. מחלקה זו מעבדת ומנתבת בקשות HTTP POST נכנסות " +"למטפל pgateway המתאים על סמך פרמטר השער שסופק. היא נועדה לטפל באירועי החזרה " +"ממערכות חיצוניות ולספק תגובת HTTP מתאימה המציינת הצלחה או כישלון." #: engine/payments/views.py:60 #, python-brace-format @@ -232,5 +238,5 @@ msgid "" msgstr "" "ViewSet לטיפול בפעולות לקריאה בלבד במודל העסקה. מחלקה זו מספקת ממשק לקריאה " "בלבד לצורך אינטראקציה עם נתוני העסקה. היא משתמשת ב-TransactionSerializer " -"לצורך סידור סדרתי ופירוק סדרתי של הנתונים. המחלקה מבטיחה שרק משתמשים מורשים," -" העומדים בהרשאות ספציפיות, יוכלו לגשת לעסקאות." +"לצורך סידור סדרתי ופירוק סדרתי של הנתונים. המחלקה מבטיחה שרק משתמשים מורשים, " +"העומדים בהרשאות ספציפיות, יוכלו לגשת לעסקאות." diff --git a/engine/payments/locale/hi_IN/LC_MESSAGES/django.po b/engine/payments/locale/hi_IN/LC_MESSAGES/django.po index b273059e..4666a43d 100644 --- a/engine/payments/locale/hi_IN/LC_MESSAGES/django.po +++ b/engine/payments/locale/hi_IN/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/payments/locale/hr_HR/LC_MESSAGES/django.po b/engine/payments/locale/hr_HR/LC_MESSAGES/django.po index 9b166e23..6427db5d 100644 --- a/engine/payments/locale/hr_HR/LC_MESSAGES/django.po +++ b/engine/payments/locale/hr_HR/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/engine/payments/locale/id_ID/LC_MESSAGES/django.po b/engine/payments/locale/id_ID/LC_MESSAGES/django.po index 4cf14766..be984224 100644 --- a/engine/payments/locale/id_ID/LC_MESSAGES/django.po +++ b/engine/payments/locale/id_ID/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -163,7 +163,8 @@ msgid "" "we have successfully credited your account with %(amount)s. your current\n" " balance is %(balance)s." msgstr "" -"Kami telah berhasil mengkreditkan akun Anda dengan %(amount)s. Saldo Anda saat ini\n" +"Kami telah berhasil mengkreditkan akun Anda dengan %(amount)s. Saldo Anda " +"saat ini\n" " saldo Anda saat ini adalah %(balance)s." #: engine/payments/templates/balance_deposit_email.html:98 @@ -172,7 +173,8 @@ msgid "" "if you have any questions, feel free to contact our support at\n" " %(contact_email)s." msgstr "" -"Jika Anda memiliki pertanyaan, jangan ragu untuk menghubungi tim dukungan kami di\n" +"Jika Anda memiliki pertanyaan, jangan ragu untuk menghubungi tim dukungan " +"kami di\n" " %(contact_email)s." #: engine/payments/templates/balance_deposit_email.html:100 @@ -201,18 +203,31 @@ msgstr "{settings.PROJECT_NAME} | setoran saldo" #: engine/payments/views.py:23 msgid "" "This class provides an API endpoint to handle deposit transactions.\n" -"It supports the creation of a deposit transaction after validating the provided data. If the user is not authenticated, an appropriate response is returned. On successful validation and execution, a response with the transaction details is provided." +"It supports the creation of a deposit transaction after validating the " +"provided data. If the user is not authenticated, an appropriate response is " +"returned. On successful validation and execution, a response with the " +"transaction details is provided." msgstr "" "Kelas ini menyediakan endpoint API untuk menangani transaksi deposit.\n" -"Kelas ini mendukung pembuatan transaksi deposit setelah memvalidasi data yang disediakan. Jika pengguna tidak terautentikasi, respons yang sesuai akan dikembalikan. Pada validasi dan eksekusi yang berhasil, sebuah respons dengan detail transaksi disediakan." +"Kelas ini mendukung pembuatan transaksi deposit setelah memvalidasi data " +"yang disediakan. Jika pengguna tidak terautentikasi, respons yang sesuai " +"akan dikembalikan. Pada validasi dan eksekusi yang berhasil, sebuah respons " +"dengan detail transaksi disediakan." #: engine/payments/views.py:49 msgid "" "Handles incoming callback requests to the API.\n" -"This class processes and routes incoming HTTP POST requests to the appropriate pgateway handler based on the provided gateway parameter. It is designed to handle callback events coming from external systems and provide an appropriate HTTP response indicating success or failure." +"This class processes and routes incoming HTTP POST requests to the " +"appropriate pgateway handler based on the provided gateway parameter. It is " +"designed to handle callback events coming from external systems and provide " +"an appropriate HTTP response indicating success or failure." msgstr "" "Menangani permintaan panggilan balik yang masuk ke API.\n" -"Kelas ini memproses dan merutekan permintaan HTTP POST yang masuk ke penangan pgateway yang sesuai berdasarkan parameter gateway yang disediakan. Kelas ini dirancang untuk menangani peristiwa callback yang datang dari sistem eksternal dan memberikan respons HTTP yang sesuai yang mengindikasikan keberhasilan atau kegagalan." +"Kelas ini memproses dan merutekan permintaan HTTP POST yang masuk ke " +"penangan pgateway yang sesuai berdasarkan parameter gateway yang disediakan. " +"Kelas ini dirancang untuk menangani peristiwa callback yang datang dari " +"sistem eksternal dan memberikan respons HTTP yang sesuai yang " +"mengindikasikan keberhasilan atau kegagalan." #: engine/payments/views.py:60 #, python-brace-format diff --git a/engine/payments/locale/it_IT/LC_MESSAGES/django.po b/engine/payments/locale/it_IT/LC_MESSAGES/django.po index 4f083fba..7fe39a59 100644 --- a/engine/payments/locale/it_IT/LC_MESSAGES/django.po +++ b/engine/payments/locale/it_IT/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -175,7 +175,8 @@ msgid "" "if you have any questions, feel free to contact our support at\n" " %(contact_email)s." msgstr "" -"In caso di domande, non esitate a contattare il nostro supporto all'indirizzo\n" +"In caso di domande, non esitate a contattare il nostro supporto " +"all'indirizzo\n" " %(contact_email)s." #: engine/payments/templates/balance_deposit_email.html:100 @@ -204,18 +205,31 @@ msgstr "{settings.PROJECT_NAME} | deposito a saldo" #: engine/payments/views.py:23 msgid "" "This class provides an API endpoint to handle deposit transactions.\n" -"It supports the creation of a deposit transaction after validating the provided data. If the user is not authenticated, an appropriate response is returned. On successful validation and execution, a response with the transaction details is provided." +"It supports the creation of a deposit transaction after validating the " +"provided data. If the user is not authenticated, an appropriate response is " +"returned. On successful validation and execution, a response with the " +"transaction details is provided." msgstr "" -"Questa classe fornisce un endpoint API per gestire le transazioni di deposito.\n" -"Supporta la creazione di una transazione di deposito dopo la convalida dei dati forniti. Se l'utente non è autenticato, viene restituita una risposta appropriata. Se la convalida e l'esecuzione hanno esito positivo, viene fornita una risposta con i dettagli della transazione." +"Questa classe fornisce un endpoint API per gestire le transazioni di " +"deposito.\n" +"Supporta la creazione di una transazione di deposito dopo la convalida dei " +"dati forniti. Se l'utente non è autenticato, viene restituita una risposta " +"appropriata. Se la convalida e l'esecuzione hanno esito positivo, viene " +"fornita una risposta con i dettagli della transazione." #: engine/payments/views.py:49 msgid "" "Handles incoming callback requests to the API.\n" -"This class processes and routes incoming HTTP POST requests to the appropriate pgateway handler based on the provided gateway parameter. It is designed to handle callback events coming from external systems and provide an appropriate HTTP response indicating success or failure." +"This class processes and routes incoming HTTP POST requests to the " +"appropriate pgateway handler based on the provided gateway parameter. It is " +"designed to handle callback events coming from external systems and provide " +"an appropriate HTTP response indicating success or failure." msgstr "" "Gestisce le richieste di callback in arrivo all'API.\n" -"Questa classe elabora e instrada le richieste HTTP POST in arrivo al gestore pgateway appropriato, in base al parametro gateway fornito. È progettata per gestire gli eventi di callback provenienti da sistemi esterni e fornire una risposta HTTP appropriata che indichi il successo o il fallimento." +"Questa classe elabora e instrada le richieste HTTP POST in arrivo al gestore " +"pgateway appropriato, in base al parametro gateway fornito. È progettata per " +"gestire gli eventi di callback provenienti da sistemi esterni e fornire una " +"risposta HTTP appropriata che indichi il successo o il fallimento." #: engine/payments/views.py:60 #, python-brace-format @@ -239,5 +253,5 @@ msgstr "" "transazioni. Questa classe fornisce un'interfaccia di sola lettura per " "interagire con i dati delle transazioni. Utilizza TransactionSerializer per " "serializzare e deserializzare i dati. La classe garantisce che solo gli " -"utenti autorizzati, che soddisfano specifici permessi, possano accedere alle" -" transazioni." +"utenti autorizzati, che soddisfano specifici permessi, possano accedere alle " +"transazioni." diff --git a/engine/payments/locale/ja_JP/LC_MESSAGES/django.po b/engine/payments/locale/ja_JP/LC_MESSAGES/django.po index 48ae55ff..9965c0de 100644 --- a/engine/payments/locale/ja_JP/LC_MESSAGES/django.po +++ b/engine/payments/locale/ja_JP/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -200,18 +200,29 @@ msgstr "{settings.PROJECT_NAME}| 預金残高" #: engine/payments/views.py:23 msgid "" "This class provides an API endpoint to handle deposit transactions.\n" -"It supports the creation of a deposit transaction after validating the provided data. If the user is not authenticated, an appropriate response is returned. On successful validation and execution, a response with the transaction details is provided." +"It supports the creation of a deposit transaction after validating the " +"provided data. If the user is not authenticated, an appropriate response is " +"returned. On successful validation and execution, a response with the " +"transaction details is provided." msgstr "" "このクラスは、預金取引を処理するための API エンドポイントを提供します。\n" -"提供されたデータを検証した後、入金トランザクションの作成をサポートします。ユーザが認証されていない場合は、適切なレスポンスが返されます。検証および実行に成功すると、トランザクションの詳細を含むレスポンスが提供されます。" +"提供されたデータを検証した後、入金トランザクションの作成をサポートします。" +"ユーザが認証されていない場合は、適切なレスポンスが返されます。検証および実行" +"に成功すると、トランザクションの詳細を含むレスポンスが提供されます。" #: engine/payments/views.py:49 msgid "" "Handles incoming callback requests to the API.\n" -"This class processes and routes incoming HTTP POST requests to the appropriate pgateway handler based on the provided gateway parameter. It is designed to handle callback events coming from external systems and provide an appropriate HTTP response indicating success or failure." +"This class processes and routes incoming HTTP POST requests to the " +"appropriate pgateway handler based on the provided gateway parameter. It is " +"designed to handle callback events coming from external systems and provide " +"an appropriate HTTP response indicating success or failure." msgstr "" "APIへの着信コールバック・リクエストを処理します。\n" -"このクラスは、入力された HTTP POST リクエストを処理し、提供されたゲートウェイパラメータに基づいて適切な pgateway ハンドラにルーティングします。外部システムから来るコールバック・イベントを処理し、成功または失敗を示す適切なHTTP応答を提供するように設計されています。" +"このクラスは、入力された HTTP POST リクエストを処理し、提供されたゲートウェイ" +"パラメータに基づいて適切な pgateway ハンドラにルーティングします。外部システ" +"ムから来るコールバック・イベントを処理し、成功または失敗を示す適切なHTTP応答" +"を提供するように設計されています。" #: engine/payments/views.py:60 #, python-brace-format @@ -231,6 +242,8 @@ msgid "" "data. The class ensures that only authorized users, who meet specific " "permissions, can access the transactions." msgstr "" -"Transactionモデルの読み取り専用操作を扱うためのViewSet。このクラスは、トランザクション・データを操作するための読み取り専用インタフェースを提供します。データのシリアライズとデシリアライズには" -" TransactionSerializer " -"を使用します。このクラスは、特定のパーミッションを満たす許可されたユーザのみがトランザクションにアクセスできることを保証します。" +"Transactionモデルの読み取り専用操作を扱うためのViewSet。このクラスは、トラン" +"ザクション・データを操作するための読み取り専用インタフェースを提供します。" +"データのシリアライズとデシリアライズには TransactionSerializer を使用します。" +"このクラスは、特定のパーミッションを満たす許可されたユーザのみがトランザク" +"ションにアクセスできることを保証します。" diff --git a/engine/payments/locale/kk_KZ/LC_MESSAGES/django.po b/engine/payments/locale/kk_KZ/LC_MESSAGES/django.po index b273059e..4666a43d 100644 --- a/engine/payments/locale/kk_KZ/LC_MESSAGES/django.po +++ b/engine/payments/locale/kk_KZ/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/payments/locale/ko_KR/LC_MESSAGES/django.po b/engine/payments/locale/ko_KR/LC_MESSAGES/django.po index 6d09cd8b..5e8f1c4c 100644 --- a/engine/payments/locale/ko_KR/LC_MESSAGES/django.po +++ b/engine/payments/locale/ko_KR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -200,18 +200,29 @@ msgstr "{settings.PROJECT_NAME} | 잔액 입금" #: engine/payments/views.py:23 msgid "" "This class provides an API endpoint to handle deposit transactions.\n" -"It supports the creation of a deposit transaction after validating the provided data. If the user is not authenticated, an appropriate response is returned. On successful validation and execution, a response with the transaction details is provided." +"It supports the creation of a deposit transaction after validating the " +"provided data. If the user is not authenticated, an appropriate response is " +"returned. On successful validation and execution, a response with the " +"transaction details is provided." msgstr "" "이 클래스는 입금 트랜잭션을 처리하는 API 엔드포인트를 제공합니다.\n" -"제공된 데이터의 유효성을 검사한 후 입금 트랜잭션 생성을 지원합니다. 사용자가 인증되지 않은 경우 적절한 응답이 반환됩니다. 유효성 검사 및 실행에 성공하면 트랜잭션 세부 정보가 포함된 응답이 제공됩니다." +"제공된 데이터의 유효성을 검사한 후 입금 트랜잭션 생성을 지원합니다. 사용자가 " +"인증되지 않은 경우 적절한 응답이 반환됩니다. 유효성 검사 및 실행에 성공하면 " +"트랜잭션 세부 정보가 포함된 응답이 제공됩니다." #: engine/payments/views.py:49 msgid "" "Handles incoming callback requests to the API.\n" -"This class processes and routes incoming HTTP POST requests to the appropriate pgateway handler based on the provided gateway parameter. It is designed to handle callback events coming from external systems and provide an appropriate HTTP response indicating success or failure." +"This class processes and routes incoming HTTP POST requests to the " +"appropriate pgateway handler based on the provided gateway parameter. It is " +"designed to handle callback events coming from external systems and provide " +"an appropriate HTTP response indicating success or failure." msgstr "" "API로 들어오는 콜백 요청을 처리합니다.\n" -"이 클래스는 제공된 게이트웨이 파라미터에 따라 들어오는 HTTP POST 요청을 처리하고 적절한 pgateway 핸들러로 라우팅합니다. 외부 시스템에서 들어오는 콜백 이벤트를 처리하고 성공 또는 실패를 나타내는 적절한 HTTP 응답을 제공하도록 설계되었습니다." +"이 클래스는 제공된 게이트웨이 파라미터에 따라 들어오는 HTTP POST 요청을 처리" +"하고 적절한 pgateway 핸들러로 라우팅합니다. 외부 시스템에서 들어오는 콜백 이" +"벤트를 처리하고 성공 또는 실패를 나타내는 적절한 HTTP 응답을 제공하도록 설계" +"되었습니다." #: engine/payments/views.py:60 #, python-brace-format @@ -231,6 +242,8 @@ msgid "" "data. The class ensures that only authorized users, who meet specific " "permissions, can access the transactions." msgstr "" -"트랜잭션 모델에서 읽기 전용 작업을 처리하기 위한 뷰셋입니다. 이 클래스는 트랜잭션 데이터와 상호 작용하기 위한 읽기 전용 인터페이스를 " -"제공합니다. 데이터를 직렬화 및 역직렬화하기 위해 TransactionSerializer를 사용합니다. 이 클래스는 특정 권한을 충족하는" -" 권한이 있는 사용자만 트랜잭션에 액세스할 수 있도록 합니다." +"트랜잭션 모델에서 읽기 전용 작업을 처리하기 위한 뷰셋입니다. 이 클래스는 트랜" +"잭션 데이터와 상호 작용하기 위한 읽기 전용 인터페이스를 제공합니다. 데이터를 " +"직렬화 및 역직렬화하기 위해 TransactionSerializer를 사용합니다. 이 클래스는 " +"특정 권한을 충족하는 권한이 있는 사용자만 트랜잭션에 액세스할 수 있도록 합니" +"다." diff --git a/engine/payments/locale/nl_NL/LC_MESSAGES/django.po b/engine/payments/locale/nl_NL/LC_MESSAGES/django.po index ca5add8b..23025c96 100644 --- a/engine/payments/locale/nl_NL/LC_MESSAGES/django.po +++ b/engine/payments/locale/nl_NL/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -202,18 +202,31 @@ msgstr "{settings.PROJECT_NAME} | storting saldo" #: engine/payments/views.py:23 msgid "" "This class provides an API endpoint to handle deposit transactions.\n" -"It supports the creation of a deposit transaction after validating the provided data. If the user is not authenticated, an appropriate response is returned. On successful validation and execution, a response with the transaction details is provided." +"It supports the creation of a deposit transaction after validating the " +"provided data. If the user is not authenticated, an appropriate response is " +"returned. On successful validation and execution, a response with the " +"transaction details is provided." msgstr "" -"Deze klasse biedt een API eindpunt voor het afhandelen van stortingstransacties.\n" -"Het ondersteunt het aanmaken van een stortingstransactie na het valideren van de verstrekte gegevens. Als de gebruiker niet geauthenticeerd is, wordt een passend antwoord teruggestuurd. Bij succesvolle validatie en uitvoering wordt een antwoord met de transactiedetails gegeven." +"Deze klasse biedt een API eindpunt voor het afhandelen van " +"stortingstransacties.\n" +"Het ondersteunt het aanmaken van een stortingstransactie na het valideren " +"van de verstrekte gegevens. Als de gebruiker niet geauthenticeerd is, wordt " +"een passend antwoord teruggestuurd. Bij succesvolle validatie en uitvoering " +"wordt een antwoord met de transactiedetails gegeven." #: engine/payments/views.py:49 msgid "" "Handles incoming callback requests to the API.\n" -"This class processes and routes incoming HTTP POST requests to the appropriate pgateway handler based on the provided gateway parameter. It is designed to handle callback events coming from external systems and provide an appropriate HTTP response indicating success or failure." +"This class processes and routes incoming HTTP POST requests to the " +"appropriate pgateway handler based on the provided gateway parameter. It is " +"designed to handle callback events coming from external systems and provide " +"an appropriate HTTP response indicating success or failure." msgstr "" "Handelt inkomende callback verzoeken naar de API af.\n" -"Deze klasse verwerkt en routeert inkomende HTTP POST verzoeken naar de juiste pgateway handler op basis van de opgegeven gateway parameter. Het is ontworpen om callback events af te handelen die van externe systemen komen en een passend HTTP antwoord te geven dat succes of mislukking aangeeft." +"Deze klasse verwerkt en routeert inkomende HTTP POST verzoeken naar de " +"juiste pgateway handler op basis van de opgegeven gateway parameter. Het is " +"ontworpen om callback events af te handelen die van externe systemen komen " +"en een passend HTTP antwoord te geven dat succes of mislukking aangeeft." #: engine/payments/views.py:60 #, python-brace-format diff --git a/engine/payments/locale/no_NO/LC_MESSAGES/django.po b/engine/payments/locale/no_NO/LC_MESSAGES/django.po index 5364af12..04b56a25 100644 --- a/engine/payments/locale/no_NO/LC_MESSAGES/django.po +++ b/engine/payments/locale/no_NO/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -200,18 +200,32 @@ msgstr "{settings.PROJECT_NAME} | Saldo innskudd" #: engine/payments/views.py:23 msgid "" "This class provides an API endpoint to handle deposit transactions.\n" -"It supports the creation of a deposit transaction after validating the provided data. If the user is not authenticated, an appropriate response is returned. On successful validation and execution, a response with the transaction details is provided." +"It supports the creation of a deposit transaction after validating the " +"provided data. If the user is not authenticated, an appropriate response is " +"returned. On successful validation and execution, a response with the " +"transaction details is provided." msgstr "" -"Denne klassen tilbyr et API-sluttpunkt for å håndtere innskuddstransaksjoner.\n" -"Den støtter opprettelsen av en innskuddstransaksjon etter validering av de oppgitte dataene. Hvis brukeren ikke er autentisert, returneres et passende svar. Ved vellykket validering og utførelse leveres et svar med transaksjonsdetaljer." +"Denne klassen tilbyr et API-sluttpunkt for å håndtere " +"innskuddstransaksjoner.\n" +"Den støtter opprettelsen av en innskuddstransaksjon etter validering av de " +"oppgitte dataene. Hvis brukeren ikke er autentisert, returneres et passende " +"svar. Ved vellykket validering og utførelse leveres et svar med " +"transaksjonsdetaljer." #: engine/payments/views.py:49 msgid "" "Handles incoming callback requests to the API.\n" -"This class processes and routes incoming HTTP POST requests to the appropriate pgateway handler based on the provided gateway parameter. It is designed to handle callback events coming from external systems and provide an appropriate HTTP response indicating success or failure." +"This class processes and routes incoming HTTP POST requests to the " +"appropriate pgateway handler based on the provided gateway parameter. It is " +"designed to handle callback events coming from external systems and provide " +"an appropriate HTTP response indicating success or failure." msgstr "" "Håndterer innkommende tilbakekallingsforespørsler til API-et.\n" -"Denne klassen behandler og ruter innkommende HTTP POST-forespørsler til riktig pgateway-håndterer basert på den angitte gateway-parameteren. Den er utformet for å håndtere tilbakeringingshendelser som kommer fra eksterne systemer, og gir et passende HTTP-svar som angir om forespørselen er vellykket eller mislykket." +"Denne klassen behandler og ruter innkommende HTTP POST-forespørsler til " +"riktig pgateway-håndterer basert på den angitte gateway-parameteren. Den er " +"utformet for å håndtere tilbakeringingshendelser som kommer fra eksterne " +"systemer, og gir et passende HTTP-svar som angir om forespørselen er " +"vellykket eller mislykket." #: engine/payments/views.py:60 #, python-brace-format @@ -233,6 +247,6 @@ msgid "" msgstr "" "ViewSet for håndtering av skrivebeskyttede operasjoner på " "transaksjonsmodellen. Denne klassen tilbyr et skrivebeskyttet grensesnitt " -"for interaksjon med transaksjonsdata. Den bruker TransactionSerializer til å" -" serialisere og deserialisere dataene. Klassen sikrer at bare autoriserte " +"for interaksjon med transaksjonsdata. Den bruker TransactionSerializer til å " +"serialisere og deserialisere dataene. Klassen sikrer at bare autoriserte " "brukere med bestemte rettigheter får tilgang til transaksjonene." diff --git a/engine/payments/locale/pl_PL/LC_MESSAGES/django.po b/engine/payments/locale/pl_PL/LC_MESSAGES/django.po index b073aa03..0b96b77f 100644 --- a/engine/payments/locale/pl_PL/LC_MESSAGES/django.po +++ b/engine/payments/locale/pl_PL/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -171,7 +171,8 @@ msgid "" "if you have any questions, feel free to contact our support at\n" " %(contact_email)s." msgstr "" -"Jeśli masz jakiekolwiek pytania, skontaktuj się z naszym działem pomocy technicznej pod adresem\n" +"Jeśli masz jakiekolwiek pytania, skontaktuj się z naszym działem pomocy " +"technicznej pod adresem\n" " %(contact_email)s." #: engine/payments/templates/balance_deposit_email.html:100 @@ -200,18 +201,31 @@ msgstr "{settings.PROJECT_NAME} | depozyt salda" #: engine/payments/views.py:23 msgid "" "This class provides an API endpoint to handle deposit transactions.\n" -"It supports the creation of a deposit transaction after validating the provided data. If the user is not authenticated, an appropriate response is returned. On successful validation and execution, a response with the transaction details is provided." +"It supports the creation of a deposit transaction after validating the " +"provided data. If the user is not authenticated, an appropriate response is " +"returned. On successful validation and execution, a response with the " +"transaction details is provided." msgstr "" "Ta klasa zapewnia punkt końcowy API do obsługi transakcji depozytowych.\n" -"Obsługuje tworzenie transakcji depozytowej po sprawdzeniu poprawności dostarczonych danych. Jeśli użytkownik nie jest uwierzytelniony, zwracana jest odpowiednia odpowiedź. Po pomyślnej walidacji i wykonaniu dostarczana jest odpowiedź ze szczegółami transakcji." +"Obsługuje tworzenie transakcji depozytowej po sprawdzeniu poprawności " +"dostarczonych danych. Jeśli użytkownik nie jest uwierzytelniony, zwracana " +"jest odpowiednia odpowiedź. Po pomyślnej walidacji i wykonaniu dostarczana " +"jest odpowiedź ze szczegółami transakcji." #: engine/payments/views.py:49 msgid "" "Handles incoming callback requests to the API.\n" -"This class processes and routes incoming HTTP POST requests to the appropriate pgateway handler based on the provided gateway parameter. It is designed to handle callback events coming from external systems and provide an appropriate HTTP response indicating success or failure." +"This class processes and routes incoming HTTP POST requests to the " +"appropriate pgateway handler based on the provided gateway parameter. It is " +"designed to handle callback events coming from external systems and provide " +"an appropriate HTTP response indicating success or failure." msgstr "" "Obsługuje przychodzące żądania zwrotne do API.\n" -"Ta klasa przetwarza i kieruje przychodzące żądania HTTP POST do odpowiedniej obsługi pgateway w oparciu o dostarczony parametr bramy. Została zaprojektowana do obsługi zdarzeń wywołania zwrotnego pochodzących z systemów zewnętrznych i dostarczania odpowiedniej odpowiedzi HTTP wskazującej na sukces lub niepowodzenie." +"Ta klasa przetwarza i kieruje przychodzące żądania HTTP POST do odpowiedniej " +"obsługi pgateway w oparciu o dostarczony parametr bramy. Została " +"zaprojektowana do obsługi zdarzeń wywołania zwrotnego pochodzących z " +"systemów zewnętrznych i dostarczania odpowiedniej odpowiedzi HTTP " +"wskazującej na sukces lub niepowodzenie." #: engine/payments/views.py:60 #, python-brace-format @@ -232,7 +246,7 @@ msgid "" "permissions, can access the transactions." msgstr "" "ViewSet do obsługi operacji tylko do odczytu na modelu transakcji. Ta klasa " -"zapewnia interfejs tylko do odczytu do interakcji z danymi transakcji. Używa" -" TransactionSerializer do serializacji i deserializacji danych. Klasa " +"zapewnia interfejs tylko do odczytu do interakcji z danymi transakcji. Używa " +"TransactionSerializer do serializacji i deserializacji danych. Klasa " "zapewnia, że tylko autoryzowani użytkownicy, którzy spełniają określone " "uprawnienia, mogą uzyskać dostęp do transakcji." diff --git a/engine/payments/locale/pt_BR/LC_MESSAGES/django.po b/engine/payments/locale/pt_BR/LC_MESSAGES/django.po index 4d403a10..21c0136e 100644 --- a/engine/payments/locale/pt_BR/LC_MESSAGES/django.po +++ b/engine/payments/locale/pt_BR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -203,18 +203,32 @@ msgstr "{settings.PROJECT_NAME} | depósito de saldo" #: engine/payments/views.py:23 msgid "" "This class provides an API endpoint to handle deposit transactions.\n" -"It supports the creation of a deposit transaction after validating the provided data. If the user is not authenticated, an appropriate response is returned. On successful validation and execution, a response with the transaction details is provided." +"It supports the creation of a deposit transaction after validating the " +"provided data. If the user is not authenticated, an appropriate response is " +"returned. On successful validation and execution, a response with the " +"transaction details is provided." msgstr "" -"Essa classe fornece um ponto de extremidade da API para lidar com transações de depósito.\n" -"Ela oferece suporte à criação de uma transação de depósito após a validação dos dados fornecidos. Se o usuário não estiver autenticado, uma resposta apropriada será retornada. Em caso de validação e execução bem-sucedidas, é fornecida uma resposta com os detalhes da transação." +"Essa classe fornece um ponto de extremidade da API para lidar com transações " +"de depósito.\n" +"Ela oferece suporte à criação de uma transação de depósito após a validação " +"dos dados fornecidos. Se o usuário não estiver autenticado, uma resposta " +"apropriada será retornada. Em caso de validação e execução bem-sucedidas, é " +"fornecida uma resposta com os detalhes da transação." #: engine/payments/views.py:49 msgid "" "Handles incoming callback requests to the API.\n" -"This class processes and routes incoming HTTP POST requests to the appropriate pgateway handler based on the provided gateway parameter. It is designed to handle callback events coming from external systems and provide an appropriate HTTP response indicating success or failure." +"This class processes and routes incoming HTTP POST requests to the " +"appropriate pgateway handler based on the provided gateway parameter. It is " +"designed to handle callback events coming from external systems and provide " +"an appropriate HTTP response indicating success or failure." msgstr "" "Trata as solicitações de retorno de chamada recebidas para a API.\n" -"Essa classe processa e encaminha solicitações HTTP POST de entrada para o manipulador pgateway apropriado com base no parâmetro de gateway fornecido. Ela foi projetada para tratar eventos de retorno de chamada provenientes de sistemas externos e fornecer uma resposta HTTP apropriada indicando sucesso ou falha." +"Essa classe processa e encaminha solicitações HTTP POST de entrada para o " +"manipulador pgateway apropriado com base no parâmetro de gateway fornecido. " +"Ela foi projetada para tratar eventos de retorno de chamada provenientes de " +"sistemas externos e fornecer uma resposta HTTP apropriada indicando sucesso " +"ou falha." #: engine/payments/views.py:60 #, python-brace-format diff --git a/engine/payments/locale/ro_RO/LC_MESSAGES/django.po b/engine/payments/locale/ro_RO/LC_MESSAGES/django.po index d95900f1..93761584 100644 --- a/engine/payments/locale/ro_RO/LC_MESSAGES/django.po +++ b/engine/payments/locale/ro_RO/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -200,18 +200,32 @@ msgstr "{settings.PROJECT_NAME} | depozit sold" #: engine/payments/views.py:23 msgid "" "This class provides an API endpoint to handle deposit transactions.\n" -"It supports the creation of a deposit transaction after validating the provided data. If the user is not authenticated, an appropriate response is returned. On successful validation and execution, a response with the transaction details is provided." +"It supports the creation of a deposit transaction after validating the " +"provided data. If the user is not authenticated, an appropriate response is " +"returned. On successful validation and execution, a response with the " +"transaction details is provided." msgstr "" -"Această clasă oferă un punct final API pentru gestionarea tranzacțiilor de depozit.\n" -"Aceasta acceptă crearea unei tranzacții de depunere după validarea datelor furnizate. Dacă utilizatorul nu este autentificat, este returnat un răspuns corespunzător. La validarea și executarea cu succes, este furnizat un răspuns cu detaliile tranzacției." +"Această clasă oferă un punct final API pentru gestionarea tranzacțiilor de " +"depozit.\n" +"Aceasta acceptă crearea unei tranzacții de depunere după validarea datelor " +"furnizate. Dacă utilizatorul nu este autentificat, este returnat un răspuns " +"corespunzător. La validarea și executarea cu succes, este furnizat un " +"răspuns cu detaliile tranzacției." #: engine/payments/views.py:49 msgid "" "Handles incoming callback requests to the API.\n" -"This class processes and routes incoming HTTP POST requests to the appropriate pgateway handler based on the provided gateway parameter. It is designed to handle callback events coming from external systems and provide an appropriate HTTP response indicating success or failure." +"This class processes and routes incoming HTTP POST requests to the " +"appropriate pgateway handler based on the provided gateway parameter. It is " +"designed to handle callback events coming from external systems and provide " +"an appropriate HTTP response indicating success or failure." msgstr "" "Gestionează cererile de callback primite la API.\n" -"Această clasă procesează și direcționează solicitările HTTP POST primite către gestionarul pgateway corespunzător, pe baza parametrului gateway furnizat. Este concepută pentru a gestiona evenimentele de callback provenite de la sisteme externe și pentru a furniza un răspuns HTTP adecvat care să indice succesul sau eșecul." +"Această clasă procesează și direcționează solicitările HTTP POST primite " +"către gestionarul pgateway corespunzător, pe baza parametrului gateway " +"furnizat. Este concepută pentru a gestiona evenimentele de callback " +"provenite de la sisteme externe și pentru a furniza un răspuns HTTP adecvat " +"care să indice succesul sau eșecul." #: engine/payments/views.py:60 #, python-brace-format diff --git a/engine/payments/locale/ru_RU/LC_MESSAGES/django.po b/engine/payments/locale/ru_RU/LC_MESSAGES/django.po index f2f8fd55..03f89f41 100644 --- a/engine/payments/locale/ru_RU/LC_MESSAGES/django.po +++ b/engine/payments/locale/ru_RU/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -200,18 +200,32 @@ msgstr "{settings.PROJECT_NAME} | вклад в баланс" #: engine/payments/views.py:23 msgid "" "This class provides an API endpoint to handle deposit transactions.\n" -"It supports the creation of a deposit transaction after validating the provided data. If the user is not authenticated, an appropriate response is returned. On successful validation and execution, a response with the transaction details is provided." +"It supports the creation of a deposit transaction after validating the " +"provided data. If the user is not authenticated, an appropriate response is " +"returned. On successful validation and execution, a response with the " +"transaction details is provided." msgstr "" -"Этот класс предоставляет конечную точку API для работы с депозитными транзакциями.\n" -"Он поддерживает создание депозитной транзакции после проверки предоставленных данных. Если пользователь не прошел проверку подлинности, возвращается соответствующий ответ. При успешной проверке и выполнении транзакции выдается ответ с деталями транзакции." +"Этот класс предоставляет конечную точку API для работы с депозитными " +"транзакциями.\n" +"Он поддерживает создание депозитной транзакции после проверки " +"предоставленных данных. Если пользователь не прошел проверку подлинности, " +"возвращается соответствующий ответ. При успешной проверке и выполнении " +"транзакции выдается ответ с деталями транзакции." #: engine/payments/views.py:49 msgid "" "Handles incoming callback requests to the API.\n" -"This class processes and routes incoming HTTP POST requests to the appropriate pgateway handler based on the provided gateway parameter. It is designed to handle callback events coming from external systems and provide an appropriate HTTP response indicating success or failure." +"This class processes and routes incoming HTTP POST requests to the " +"appropriate pgateway handler based on the provided gateway parameter. It is " +"designed to handle callback events coming from external systems and provide " +"an appropriate HTTP response indicating success or failure." msgstr "" "Обрабатывает входящие запросы обратного вызова к API.\n" -"Этот класс обрабатывает и направляет входящие HTTP POST-запросы к соответствующему обработчику pgateway на основе предоставленного параметра шлюза. Он предназначен для обработки событий обратного вызова, поступающих от внешних систем, и предоставления соответствующего HTTP-ответа, указывающего на успех или неудачу." +"Этот класс обрабатывает и направляет входящие HTTP POST-запросы к " +"соответствующему обработчику pgateway на основе предоставленного параметра " +"шлюза. Он предназначен для обработки событий обратного вызова, поступающих " +"от внешних систем, и предоставления соответствующего HTTP-ответа, " +"указывающего на успех или неудачу." #: engine/payments/views.py:60 #, python-brace-format @@ -231,8 +245,8 @@ msgid "" "data. The class ensures that only authorized users, who meet specific " "permissions, can access the transactions." msgstr "" -"ViewSet для обработки операций с моделью Transaction только для чтения. Этот" -" класс предоставляет интерфейс только для чтения для взаимодействия с " -"данными транзакции. Он использует TransactionSerializer для сериализации и " +"ViewSet для обработки операций с моделью Transaction только для чтения. Этот " +"класс предоставляет интерфейс только для чтения для взаимодействия с данными " +"транзакции. Он использует TransactionSerializer для сериализации и " "десериализации данных. Класс гарантирует, что доступ к транзакциям могут " "получить только авторизованные пользователи с определенными правами." diff --git a/engine/payments/locale/sv_SE/LC_MESSAGES/django.po b/engine/payments/locale/sv_SE/LC_MESSAGES/django.po index 10baa705..b76efda2 100644 --- a/engine/payments/locale/sv_SE/LC_MESSAGES/django.po +++ b/engine/payments/locale/sv_SE/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -202,18 +202,32 @@ msgstr "{settings.PROJECT_NAME} | saldo insättning" #: engine/payments/views.py:23 msgid "" "This class provides an API endpoint to handle deposit transactions.\n" -"It supports the creation of a deposit transaction after validating the provided data. If the user is not authenticated, an appropriate response is returned. On successful validation and execution, a response with the transaction details is provided." +"It supports the creation of a deposit transaction after validating the " +"provided data. If the user is not authenticated, an appropriate response is " +"returned. On successful validation and execution, a response with the " +"transaction details is provided." msgstr "" -"Denna klass tillhandahåller en API-slutpunkt för att hantera insättningstransaktioner.\n" -"Den stöder skapandet av en insättningstransaktion efter validering av de tillhandahållna uppgifterna. Om användaren inte är autentiserad returneras ett lämpligt svar. Vid lyckad validering och utförande ges ett svar med transaktionsdetaljerna." +"Denna klass tillhandahåller en API-slutpunkt för att hantera " +"insättningstransaktioner.\n" +"Den stöder skapandet av en insättningstransaktion efter validering av de " +"tillhandahållna uppgifterna. Om användaren inte är autentiserad returneras " +"ett lämpligt svar. Vid lyckad validering och utförande ges ett svar med " +"transaktionsdetaljerna." #: engine/payments/views.py:49 msgid "" "Handles incoming callback requests to the API.\n" -"This class processes and routes incoming HTTP POST requests to the appropriate pgateway handler based on the provided gateway parameter. It is designed to handle callback events coming from external systems and provide an appropriate HTTP response indicating success or failure." +"This class processes and routes incoming HTTP POST requests to the " +"appropriate pgateway handler based on the provided gateway parameter. It is " +"designed to handle callback events coming from external systems and provide " +"an appropriate HTTP response indicating success or failure." msgstr "" "Hanterar inkommande callback-förfrågningar till API:et.\n" -"Den här klassen bearbetar och dirigerar inkommande HTTP POST-begäranden till lämplig pgateway-hanterare baserat på den angivna gateway-parametern. Den är utformad för att hantera återuppringningshändelser som kommer från externa system och tillhandahålla ett lämpligt HTTP-svar som indikerar framgång eller misslyckande." +"Den här klassen bearbetar och dirigerar inkommande HTTP POST-begäranden till " +"lämplig pgateway-hanterare baserat på den angivna gateway-parametern. Den är " +"utformad för att hantera återuppringningshändelser som kommer från externa " +"system och tillhandahålla ett lämpligt HTTP-svar som indikerar framgång " +"eller misslyckande." #: engine/payments/views.py:60 #, python-brace-format diff --git a/engine/payments/locale/th_TH/LC_MESSAGES/django.po b/engine/payments/locale/th_TH/LC_MESSAGES/django.po index 4e3a2fd1..ca5bffc4 100644 --- a/engine/payments/locale/th_TH/LC_MESSAGES/django.po +++ b/engine/payments/locale/th_TH/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -198,7 +198,10 @@ msgstr "{settings.PROJECT_NAME} | ยอดเงินฝาก" #: engine/payments/views.py:23 msgid "" "This class provides an API endpoint to handle deposit transactions.\n" -"It supports the creation of a deposit transaction after validating the provided data. If the user is not authenticated, an appropriate response is returned. On successful validation and execution, a response with the transaction details is provided." +"It supports the creation of a deposit transaction after validating the " +"provided data. If the user is not authenticated, an appropriate response is " +"returned. On successful validation and execution, a response with the " +"transaction details is provided." msgstr "" "คลาสนี้ให้บริการจุดเชื่อมต่อ API สำหรับจัดการธุรกรรมฝากเงิน " "โดยรองรับการสร้างธุรกรรมฝากเงินหลังจากตรวจสอบข้อมูลที่ส่งมาอย่างถูกต้อง " @@ -208,13 +211,15 @@ msgstr "" #: engine/payments/views.py:49 msgid "" "Handles incoming callback requests to the API.\n" -"This class processes and routes incoming HTTP POST requests to the appropriate pgateway handler based on the provided gateway parameter. It is designed to handle callback events coming from external systems and provide an appropriate HTTP response indicating success or failure." +"This class processes and routes incoming HTTP POST requests to the " +"appropriate pgateway handler based on the provided gateway parameter. It is " +"designed to handle callback events coming from external systems and provide " +"an appropriate HTTP response indicating success or failure." msgstr "" -"จัดการคำขอการโทรกลับที่เข้ามาไปยัง API คลาสนี้ประมวลผลและส่งต่อคำขอ HTTP " -"POST ที่เข้ามาไปยังตัวจัดการ pgateway ที่เหมาะสมตามพารามิเตอร์ gateway " -"ที่ให้มา " -"มันถูกออกแบบมาเพื่อจัดการเหตุการณ์การโทรกลับที่มาจากระบบภายนอกและให้คำตอบ " -"HTTP ที่เหมาะสมซึ่งบ่งบอกถึงความสำเร็จหรือความล้มเหลว" +"จัดการคำขอการโทรกลับที่เข้ามาไปยัง API คลาสนี้ประมวลผลและส่งต่อคำขอ HTTP POST " +"ที่เข้ามาไปยังตัวจัดการ pgateway ที่เหมาะสมตามพารามิเตอร์ gateway ที่ให้มา " +"มันถูกออกแบบมาเพื่อจัดการเหตุการณ์การโทรกลับที่มาจากระบบภายนอกและให้คำตอบ HTTP " +"ที่เหมาะสมซึ่งบ่งบอกถึงความสำเร็จหรือความล้มเหลว" #: engine/payments/views.py:60 #, python-brace-format @@ -235,7 +240,6 @@ msgid "" "permissions, can access the transactions." msgstr "" "ViewSet สำหรับการจัดการการดำเนินการแบบอ่านอย่างเดียวบนโมเดล Transaction " -"คลาสนี้ให้อินเทอร์เฟซแบบอ่านอย่างเดียวสำหรับการโต้ตอบกับข้อมูลธุรกรรม โดยใช้" -" TransactionSerializer สำหรับการแปลงข้อมูลเป็นลำดับและถอดลำดับข้อมูล " -"คลาสนี้รับรองว่ามีเพียงผู้ใช้ที่ได้รับอนุญาตเท่านั้น ซึ่งตรงตามสิทธิ์เฉพาะ " -"สามารถเข้าถึงธุรกรรมได้" +"คลาสนี้ให้อินเทอร์เฟซแบบอ่านอย่างเดียวสำหรับการโต้ตอบกับข้อมูลธุรกรรม โดยใช้ " +"TransactionSerializer สำหรับการแปลงข้อมูลเป็นลำดับและถอดลำดับข้อมูล " +"คลาสนี้รับรองว่ามีเพียงผู้ใช้ที่ได้รับอนุญาตเท่านั้น ซึ่งตรงตามสิทธิ์เฉพาะ สามารถเข้าถึงธุรกรรมได้" diff --git a/engine/payments/locale/tr_TR/LC_MESSAGES/django.po b/engine/payments/locale/tr_TR/LC_MESSAGES/django.po index ba77d87c..c205fcf1 100644 --- a/engine/payments/locale/tr_TR/LC_MESSAGES/django.po +++ b/engine/payments/locale/tr_TR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -173,7 +173,8 @@ msgid "" "if you have any questions, feel free to contact our support at\n" " %(contact_email)s." msgstr "" -"Herhangi bir sorunuz varsa, destek ekibimizle iletişime geçmekten çekinmeyin\n" +"Herhangi bir sorunuz varsa, destek ekibimizle iletişime geçmekten " +"çekinmeyin\n" " %(contact_email)s." #: engine/payments/templates/balance_deposit_email.html:100 @@ -202,18 +203,30 @@ msgstr "{settings.PROJECT_NAME} | bakiye depozitosu" #: engine/payments/views.py:23 msgid "" "This class provides an API endpoint to handle deposit transactions.\n" -"It supports the creation of a deposit transaction after validating the provided data. If the user is not authenticated, an appropriate response is returned. On successful validation and execution, a response with the transaction details is provided." +"It supports the creation of a deposit transaction after validating the " +"provided data. If the user is not authenticated, an appropriate response is " +"returned. On successful validation and execution, a response with the " +"transaction details is provided." msgstr "" "Bu sınıf, para yatırma işlemlerini işlemek için bir API uç noktası sağlar.\n" -"Sağlanan verileri doğruladıktan sonra bir para yatırma işleminin oluşturulmasını destekler. Kullanıcının kimliği doğrulanmamışsa, uygun bir yanıt döndürülür. Doğrulama ve yürütme başarılı olduğunda, işlem ayrıntılarını içeren bir yanıt sağlanır." +"Sağlanan verileri doğruladıktan sonra bir para yatırma işleminin " +"oluşturulmasını destekler. Kullanıcının kimliği doğrulanmamışsa, uygun bir " +"yanıt döndürülür. Doğrulama ve yürütme başarılı olduğunda, işlem " +"ayrıntılarını içeren bir yanıt sağlanır." #: engine/payments/views.py:49 msgid "" "Handles incoming callback requests to the API.\n" -"This class processes and routes incoming HTTP POST requests to the appropriate pgateway handler based on the provided gateway parameter. It is designed to handle callback events coming from external systems and provide an appropriate HTTP response indicating success or failure." +"This class processes and routes incoming HTTP POST requests to the " +"appropriate pgateway handler based on the provided gateway parameter. It is " +"designed to handle callback events coming from external systems and provide " +"an appropriate HTTP response indicating success or failure." msgstr "" "API'ye gelen geri arama isteklerini işler.\n" -"Bu sınıf, sağlanan ağ geçidi parametresine göre gelen HTTP POST isteklerini işler ve uygun pgateway işleyicisine yönlendirir. Harici sistemlerden gelen geri arama olaylarını işlemek ve başarı veya başarısızlığı gösteren uygun bir HTTP yanıtı sağlamak için tasarlanmıştır." +"Bu sınıf, sağlanan ağ geçidi parametresine göre gelen HTTP POST isteklerini " +"işler ve uygun pgateway işleyicisine yönlendirir. Harici sistemlerden gelen " +"geri arama olaylarını işlemek ve başarı veya başarısızlığı gösteren uygun " +"bir HTTP yanıtı sağlamak için tasarlanmıştır." #: engine/payments/views.py:60 #, python-brace-format diff --git a/engine/payments/locale/vi_VN/LC_MESSAGES/django.po b/engine/payments/locale/vi_VN/LC_MESSAGES/django.po index 5aa06514..82e8fc07 100644 --- a/engine/payments/locale/vi_VN/LC_MESSAGES/django.po +++ b/engine/payments/locale/vi_VN/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -175,8 +175,8 @@ msgid "" "if you have any questions, feel free to contact our support at\n" " %(contact_email)s." msgstr "" -"Nếu bạn có bất kỳ câu hỏi nào, vui lòng liên hệ với bộ phận hỗ trợ của chúng" -" tôi tại %(contact_email)s." +"Nếu bạn có bất kỳ câu hỏi nào, vui lòng liên hệ với bộ phận hỗ trợ của chúng " +"tôi tại %(contact_email)s." #: engine/payments/templates/balance_deposit_email.html:100 #, python-format @@ -204,18 +204,24 @@ msgstr "{settings.PROJECT_NAME} | Số dư tiền gửi" #: engine/payments/views.py:23 msgid "" "This class provides an API endpoint to handle deposit transactions.\n" -"It supports the creation of a deposit transaction after validating the provided data. If the user is not authenticated, an appropriate response is returned. On successful validation and execution, a response with the transaction details is provided." +"It supports the creation of a deposit transaction after validating the " +"provided data. If the user is not authenticated, an appropriate response is " +"returned. On successful validation and execution, a response with the " +"transaction details is provided." msgstr "" "Lớp này cung cấp một điểm cuối API để xử lý các giao dịch nạp tiền. Nó hỗ " -"trợ tạo giao dịch nạp tiền sau khi xác thực dữ liệu được cung cấp. Nếu người" -" dùng chưa được xác thực, một phản hồi phù hợp sẽ được trả về. Sau khi xác " +"trợ tạo giao dịch nạp tiền sau khi xác thực dữ liệu được cung cấp. Nếu người " +"dùng chưa được xác thực, một phản hồi phù hợp sẽ được trả về. Sau khi xác " "thực và thực thi thành công, một phản hồi chứa chi tiết giao dịch sẽ được " "cung cấp." #: engine/payments/views.py:49 msgid "" "Handles incoming callback requests to the API.\n" -"This class processes and routes incoming HTTP POST requests to the appropriate pgateway handler based on the provided gateway parameter. It is designed to handle callback events coming from external systems and provide an appropriate HTTP response indicating success or failure." +"This class processes and routes incoming HTTP POST requests to the " +"appropriate pgateway handler based on the provided gateway parameter. It is " +"designed to handle callback events coming from external systems and provide " +"an appropriate HTTP response indicating success or failure." msgstr "" "Xử lý các yêu cầu gọi lại (callback) đến API. Lớp này xử lý và định tuyến " "các yêu cầu HTTP POST đến trình xử lý pgateway phù hợp dựa trên tham số " diff --git a/engine/payments/locale/zh_Hans/LC_MESSAGES/django.po b/engine/payments/locale/zh_Hans/LC_MESSAGES/django.po index 2299c49a..01e36ce4 100644 --- a/engine/payments/locale/zh_Hans/LC_MESSAGES/django.po +++ b/engine/payments/locale/zh_Hans/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -200,18 +200,27 @@ msgstr "{settings.PROJECT_NAME}| 余额存款" #: engine/payments/views.py:23 msgid "" "This class provides an API endpoint to handle deposit transactions.\n" -"It supports the creation of a deposit transaction after validating the provided data. If the user is not authenticated, an appropriate response is returned. On successful validation and execution, a response with the transaction details is provided." +"It supports the creation of a deposit transaction after validating the " +"provided data. If the user is not authenticated, an appropriate response is " +"returned. On successful validation and execution, a response with the " +"transaction details is provided." msgstr "" "该类提供了处理存款交易的 API 端点。\n" -"它支持在验证所提供的数据后创建存款交易。如果用户未通过身份验证,则会返回相应的响应。如果验证和执行成功,则会提供包含交易详细信息的响应。" +"它支持在验证所提供的数据后创建存款交易。如果用户未通过身份验证,则会返回相应" +"的响应。如果验证和执行成功,则会提供包含交易详细信息的响应。" #: engine/payments/views.py:49 msgid "" "Handles incoming callback requests to the API.\n" -"This class processes and routes incoming HTTP POST requests to the appropriate pgateway handler based on the provided gateway parameter. It is designed to handle callback events coming from external systems and provide an appropriate HTTP response indicating success or failure." +"This class processes and routes incoming HTTP POST requests to the " +"appropriate pgateway handler based on the provided gateway parameter. It is " +"designed to handle callback events coming from external systems and provide " +"an appropriate HTTP response indicating success or failure." msgstr "" "处理传入的 API 回调请求。\n" -"该类根据提供的网关参数,将传入的 HTTP POST 请求处理并路由到相应的 pgateway 处理程序。该类旨在处理来自外部系统的回调事件,并提供适当的 HTTP 响应,说明成功或失败。" +"该类根据提供的网关参数,将传入的 HTTP POST 请求处理并路由到相应的 pgateway 处" +"理程序。该类旨在处理来自外部系统的回调事件,并提供适当的 HTTP 响应,说明成功" +"或失败。" #: engine/payments/views.py:60 #, python-brace-format @@ -231,5 +240,6 @@ msgid "" "data. The class ensures that only authorized users, who meet specific " "permissions, can access the transactions." msgstr "" -"ViewSet 用于处理对事务模型的只读操作。该类提供了与事务数据交互的只读接口。它使用 TransactionSerializer " -"对数据进行序列化和反序列化。该类确保只有符合特定权限的授权用户才能访问事务。" +"ViewSet 用于处理对事务模型的只读操作。该类提供了与事务数据交互的只读接口。它" +"使用 TransactionSerializer 对数据进行序列化和反序列化。该类确保只有符合特定权" +"限的授权用户才能访问事务。" diff --git a/engine/vibes_auth/locale/ar_AR/LC_MESSAGES/django.po b/engine/vibes_auth/locale/ar_AR/LC_MESSAGES/django.po index 2cc29678..a727d6a6 100644 --- a/engine/vibes_auth/locale/ar_AR/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/ar_AR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -161,8 +161,8 @@ msgstr "حذف مستخدم" #: engine/vibes_auth/docs/drf/viewsets.py:57 msgid "reset a user's password by sending a reset password email" msgstr "" -"إعادة تعيين كلمة مرور المستخدم عن طريق إرسال بريد إلكتروني لإعادة تعيين كلمة" -" المرور" +"إعادة تعيين كلمة مرور المستخدم عن طريق إرسال بريد إلكتروني لإعادة تعيين كلمة " +"المرور" #: engine/vibes_auth/docs/drf/viewsets.py:65 msgid "handle avatar upload for a user" @@ -233,15 +233,14 @@ msgstr "تم تفعيل الحساب بالفعل..." msgid "something went wrong: {e!s}" msgstr "حدث خطأ ما: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:324 -#: engine/vibes_auth/viewsets.py:95 +#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "الرمز غير صالح!" #: engine/vibes_auth/graphene/object_types.py:40 msgid "" -"the products this user has viewed most recently (max 48), in " -"reverse‐chronological order" +"the products this user has viewed most recently (max 48), in reverse‐" +"chronological order" msgstr "" "المنتجات التي شاهدها هذا المستخدم مؤخرًا (بحد أقصى 48)، بترتيب زمني عكسي." @@ -254,8 +253,7 @@ msgstr "المجموعات" msgid "wishlist" msgstr "قائمة الرغبات" -#: engine/vibes_auth/graphene/object_types.py:47 -#: engine/vibes_auth/models.py:68 +#: engine/vibes_auth/graphene/object_types.py:47 engine/vibes_auth/models.py:68 msgid "avatar" msgstr "الصورة الرمزية" @@ -266,8 +264,8 @@ msgstr "يمكن استخدام السمات لتخزين البيانات ال #: engine/vibes_auth/graphene/object_types.py:50 #, python-brace-format msgid "" -"language is one of the {settings.LANGUAGES} with default " -"{settings.LANGUAGE_CODE}" +"language is one of the {settings.LANGUAGES} with default {settings." +"LANGUAGE_CODE}" msgstr "اللغة هي واحدة من {settings.LANGUAGES} مع {settings.LANGUAGE_CODE}" #: engine/vibes_auth/graphene/object_types.py:52 @@ -303,8 +301,8 @@ msgstr "" "يمثل كيان مستخدم مع حقول وأساليب مخصصة لوظائف موسعة. توسع هذه الفئة نموذج " "AbstractUser وتدمج ميزات إضافية مثل تسجيل الدخول إلى البريد الإلكتروني " "المخصص، وطرق التحقق من الصحة، وحالة الاشتراك، والتحقق، وتخزين السمات. كما " -"يوفر أيضًا أدوات مساعدة لإدارة العناصر التي تم عرضها مؤخرًا والتفعيل المستند" -" إلى الرمز المميز للتحقق من الحسابات. تم تصميم نموذج المستخدم للتعامل مع " +"يوفر أيضًا أدوات مساعدة لإدارة العناصر التي تم عرضها مؤخرًا والتفعيل المستند " +"إلى الرمز المميز للتحقق من الحسابات. تم تصميم نموذج المستخدم للتعامل مع " "حالات استخدام محددة لإدارة المستخدم المحسنة." #: engine/vibes_auth/models.py:51 @@ -482,7 +480,8 @@ msgstr "مرحباً %(user_first_name)s," #: engine/vibes_auth/templates/user_reset_password_email.html:92 msgid "" -"we have received a request to reset your password. please reset your password\n" +"we have received a request to reset your password. please reset your " +"password\n" " by clicking the button below:" msgstr "" "لقد تلقينا طلباً لإعادة تعيين كلمة المرور الخاصة بك. يرجى إعادة تعيين كلمة " @@ -566,29 +565,29 @@ msgstr "" #: engine/vibes_auth/views.py:30 msgid "" -"Represents a view for getting a pair of access and refresh tokens and user's" -" data. This view manages the process of handling token-based authentication " +"Represents a view for getting a pair of access and refresh tokens and user's " +"data. This view manages the process of handling token-based authentication " "where clients can get a pair of JWT tokens (access and refresh) using " "provided credentials. It is built on top of a base token view and ensures " "proper rate limiting to protect against brute force attacks." msgstr "" -"يمثل طريقة عرض للحصول على زوج من رموز الوصول والتحديث وبيانات المستخدم. تدير" -" طريقة العرض هذه عملية التعامل مع المصادقة المستندة إلى الرمز المميز حيث " -"يمكن للعملاء الحصول على زوج من رموز JWT (الوصول والتحديث) باستخدام بيانات " +"يمثل طريقة عرض للحصول على زوج من رموز الوصول والتحديث وبيانات المستخدم. تدير " +"طريقة العرض هذه عملية التعامل مع المصادقة المستندة إلى الرمز المميز حيث يمكن " +"للعملاء الحصول على زوج من رموز JWT (الوصول والتحديث) باستخدام بيانات " "الاعتماد المقدمة. وهو مبني على طريقة عرض الرمز المميز الأساسي ويضمن تحديد " "المعدل المناسب للحماية من هجمات القوة الغاشمة." #: engine/vibes_auth/views.py:52 msgid "" -"Handles refreshing of tokens for authentication purposes. This class is used" -" to provide functionality for token refresh operations as part of an " -"authentication system. It ensures that clients can request a refreshed token" -" within defined rate limits. The view relies on the associated serializer to" -" validate token refresh inputs and produce appropriate outputs." +"Handles refreshing of tokens for authentication purposes. This class is used " +"to provide functionality for token refresh operations as part of an " +"authentication system. It ensures that clients can request a refreshed token " +"within defined rate limits. The view relies on the associated serializer to " +"validate token refresh inputs and produce appropriate outputs." msgstr "" "يعالج تحديث الرموز المميزة لأغراض المصادقة. يتم استخدام هذه الفئة لتوفير " -"وظيفة لعمليات تحديث الرموز كجزء من نظام المصادقة. وهي تضمن أن العملاء يمكنهم" -" طلب رمز محدث ضمن حدود المعدل المحدد. تعتمد طريقة العرض على أداة التسلسل " +"وظيفة لعمليات تحديث الرموز كجزء من نظام المصادقة. وهي تضمن أن العملاء يمكنهم " +"طلب رمز محدث ضمن حدود المعدل المحدد. تعتمد طريقة العرض على أداة التسلسل " "المرتبطة بها للتحقق من صحة مدخلات تحديث الرمز المميز وإنتاج مخرجات مناسبة." #: engine/vibes_auth/views.py:75 @@ -606,10 +605,17 @@ msgstr "الرمز المميز غير صالح" #: engine/vibes_auth/viewsets.py:45 msgid "" "User view set implementation.\n" -"Provides a set of actions that manage user-related data such as creation, retrieval, updates, deletion, and custom actions including password reset, avatar upload, account activation, and recently viewed items merging. This class extends the mixins and GenericViewSet for robust API handling." +"Provides a set of actions that manage user-related data such as creation, " +"retrieval, updates, deletion, and custom actions including password reset, " +"avatar upload, account activation, and recently viewed items merging. This " +"class extends the mixins and GenericViewSet for robust API handling." msgstr "" "تنفيذ مجموعة عرض المستخدم.\n" -"يوفر مجموعة من الإجراءات التي تدير البيانات المتعلقة بالمستخدم مثل الإنشاء والاسترجاع والتحديثات والحذف والإجراءات المخصصة بما في ذلك إعادة تعيين كلمة المرور وتحميل الصورة الرمزية وتفعيل الحساب ودمج العناصر التي تم عرضها مؤخرًا. تعمل هذه الفئة على توسيع mixins و GenericViewSet لمعالجة واجهة برمجة التطبيقات القوية." +"يوفر مجموعة من الإجراءات التي تدير البيانات المتعلقة بالمستخدم مثل الإنشاء " +"والاسترجاع والتحديثات والحذف والإجراءات المخصصة بما في ذلك إعادة تعيين كلمة " +"المرور وتحميل الصورة الرمزية وتفعيل الحساب ودمج العناصر التي تم عرضها مؤخرًا. " +"تعمل هذه الفئة على توسيع mixins و GenericViewSet لمعالجة واجهة برمجة " +"التطبيقات القوية." #: engine/vibes_auth/viewsets.py:99 msgid "password reset successfully" diff --git a/engine/vibes_auth/locale/cs_CZ/LC_MESSAGES/django.po b/engine/vibes_auth/locale/cs_CZ/LC_MESSAGES/django.po index 8a45f68e..e1833509 100644 --- a/engine/vibes_auth/locale/cs_CZ/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/cs_CZ/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -231,15 +231,14 @@ msgstr "Účet byl již aktivován..." msgid "something went wrong: {e!s}" msgstr "Něco se pokazilo: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:324 -#: engine/vibes_auth/viewsets.py:95 +#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "Token je neplatný!" #: engine/vibes_auth/graphene/object_types.py:40 msgid "" -"the products this user has viewed most recently (max 48), in " -"reverse‐chronological order" +"the products this user has viewed most recently (max 48), in reverse‐" +"chronological order" msgstr "" "Produkty, které si tento uživatel prohlížel naposledy (max. 48), seřazené v " "opačném pořadí." @@ -253,8 +252,7 @@ msgstr "Skupiny" msgid "wishlist" msgstr "Seznam přání" -#: engine/vibes_auth/graphene/object_types.py:47 -#: engine/vibes_auth/models.py:68 +#: engine/vibes_auth/graphene/object_types.py:47 engine/vibes_auth/models.py:68 msgid "avatar" msgstr "Avatar" @@ -265,8 +263,8 @@ msgstr "Atributy lze použít k uložení vlastních dat." #: engine/vibes_auth/graphene/object_types.py:50 #, python-brace-format msgid "" -"language is one of the {settings.LANGUAGES} with default " -"{settings.LANGUAGE_CODE}" +"language is one of the {settings.LANGUAGES} with default {settings." +"LANGUAGE_CODE}" msgstr "" "Jazyk je jeden z {settings.LANGUAGES} s výchozím {settings.LANGUAGE_CODE}" @@ -301,11 +299,11 @@ msgid "" "for enhanced user management." msgstr "" "Reprezentuje entitu User s upravenými poli a metodami pro rozšířenou " -"funkčnost. Tato třída rozšiřuje model AbstractUser a integruje další funkce," -" jako je vlastní přihlašování e-mailem, ověřovací metody, stav odběru, " +"funkčnost. Tato třída rozšiřuje model AbstractUser a integruje další funkce, " +"jako je vlastní přihlašování e-mailem, ověřovací metody, stav odběru, " "ověřování a ukládání atributů. Poskytuje také nástroje pro správu naposledy " -"zobrazených položek a aktivaci založenou na tokenu pro ověřování účtů. Model" -" User je navržen tak, aby zvládal specifické případy použití pro rozšířenou " +"zobrazených položek a aktivaci založenou na tokenu pro ověřování účtů. Model " +"User je navržen tak, aby zvládal specifické případy použití pro rozšířenou " "správu uživatelů." #: engine/vibes_auth/models.py:51 @@ -483,7 +481,8 @@ msgstr "Ahoj %(user_first_name)s," #: engine/vibes_auth/templates/user_reset_password_email.html:92 msgid "" -"we have received a request to reset your password. please reset your password\n" +"we have received a request to reset your password. please reset your " +"password\n" " by clicking the button below:" msgstr "" "Obdrželi jsme žádost o obnovení vašeho hesla. Kliknutím na níže uvedené " @@ -499,7 +498,8 @@ msgid "" "if the button above does not work, please copy and paste the following URL\n" " into your web browser:" msgstr "" -"Pokud výše uvedené tlačítko nefunguje, zkopírujte a vložte následující adresu URL\n" +"Pokud výše uvedené tlačítko nefunguje, zkopírujte a vložte následující " +"adresu URL\n" " do webového prohlížeče:" #: engine/vibes_auth/templates/user_reset_password_email.html:100 @@ -567,26 +567,26 @@ msgstr "" #: engine/vibes_auth/views.py:30 msgid "" -"Represents a view for getting a pair of access and refresh tokens and user's" -" data. This view manages the process of handling token-based authentication " +"Represents a view for getting a pair of access and refresh tokens and user's " +"data. This view manages the process of handling token-based authentication " "where clients can get a pair of JWT tokens (access and refresh) using " "provided credentials. It is built on top of a base token view and ensures " "proper rate limiting to protect against brute force attacks." msgstr "" -"Představuje zobrazení pro získání dvojice přístupových a obnovovacích tokenů" -" a dat uživatele. Toto zobrazení řídí proces zpracování ověřování na základě" -" tokenů, kdy klienti mohou získat dvojici tokenů JWT (přístupový a " +"Představuje zobrazení pro získání dvojice přístupových a obnovovacích tokenů " +"a dat uživatele. Toto zobrazení řídí proces zpracování ověřování na základě " +"tokenů, kdy klienti mohou získat dvojici tokenů JWT (přístupový a " "obnovovací) pomocí poskytnutých pověření. Je postaven nad základním " "zobrazením tokenu a zajišťuje správné omezení rychlosti pro ochranu před " "útoky hrubou silou." #: engine/vibes_auth/views.py:52 msgid "" -"Handles refreshing of tokens for authentication purposes. This class is used" -" to provide functionality for token refresh operations as part of an " -"authentication system. It ensures that clients can request a refreshed token" -" within defined rate limits. The view relies on the associated serializer to" -" validate token refresh inputs and produce appropriate outputs." +"Handles refreshing of tokens for authentication purposes. This class is used " +"to provide functionality for token refresh operations as part of an " +"authentication system. It ensures that clients can request a refreshed token " +"within defined rate limits. The view relies on the associated serializer to " +"validate token refresh inputs and produce appropriate outputs." msgstr "" "Zpracovává obnovování tokenů pro účely ověřování. Tato třída slouží k " "zajištění funkčnosti operací obnovení tokenů v rámci systému ověřování. " @@ -609,10 +609,17 @@ msgstr "Token je neplatný" #: engine/vibes_auth/viewsets.py:45 msgid "" "User view set implementation.\n" -"Provides a set of actions that manage user-related data such as creation, retrieval, updates, deletion, and custom actions including password reset, avatar upload, account activation, and recently viewed items merging. This class extends the mixins and GenericViewSet for robust API handling." +"Provides a set of actions that manage user-related data such as creation, " +"retrieval, updates, deletion, and custom actions including password reset, " +"avatar upload, account activation, and recently viewed items merging. This " +"class extends the mixins and GenericViewSet for robust API handling." msgstr "" "Implementace sady uživatelských zobrazení.\n" -"Poskytuje sadu akcí, které spravují data související s uživatelem, jako je vytváření, načítání, aktualizace, mazání a vlastní akce včetně obnovení hesla, nahrání avatara, aktivace účtu a sloučení naposledy zobrazených položek. Tato třída rozšiřuje mixiny a GenericViewSet pro robustní zpracování API." +"Poskytuje sadu akcí, které spravují data související s uživatelem, jako je " +"vytváření, načítání, aktualizace, mazání a vlastní akce včetně obnovení " +"hesla, nahrání avatara, aktivace účtu a sloučení naposledy zobrazených " +"položek. Tato třída rozšiřuje mixiny a GenericViewSet pro robustní " +"zpracování API." #: engine/vibes_auth/viewsets.py:99 msgid "password reset successfully" diff --git a/engine/vibes_auth/locale/da_DK/LC_MESSAGES/django.po b/engine/vibes_auth/locale/da_DK/LC_MESSAGES/django.po index a090b9ae..a970515f 100644 --- a/engine/vibes_auth/locale/da_DK/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/da_DK/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -233,15 +233,14 @@ msgstr "Kontoen er allerede aktiveret..." msgid "something went wrong: {e!s}" msgstr "Noget gik galt: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:324 -#: engine/vibes_auth/viewsets.py:95 +#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "Token er ugyldig!" #: engine/vibes_auth/graphene/object_types.py:40 msgid "" -"the products this user has viewed most recently (max 48), in " -"reverse‐chronological order" +"the products this user has viewed most recently (max 48), in reverse‐" +"chronological order" msgstr "" "De produkter, som denne bruger har set for nylig (maks. 48), i omvendt " "kronologisk rækkefølge." @@ -255,8 +254,7 @@ msgstr "Grupper" msgid "wishlist" msgstr "Ønskeliste" -#: engine/vibes_auth/graphene/object_types.py:47 -#: engine/vibes_auth/models.py:68 +#: engine/vibes_auth/graphene/object_types.py:47 engine/vibes_auth/models.py:68 msgid "avatar" msgstr "Avatar" @@ -267,8 +265,8 @@ msgstr "Attributter kan bruges til at gemme brugerdefinerede data" #: engine/vibes_auth/graphene/object_types.py:50 #, python-brace-format msgid "" -"language is one of the {settings.LANGUAGES} with default " -"{settings.LANGUAGE_CODE}" +"language is one of the {settings.LANGUAGES} with default {settings." +"LANGUAGE_CODE}" msgstr "" "Sprog er en af {settings.LANGUAGES} med standard {settings.LANGUAGE_CODE}." @@ -486,7 +484,8 @@ msgstr "Hej %(user_first_name)s," #: engine/vibes_auth/templates/user_reset_password_email.html:92 msgid "" -"we have received a request to reset your password. please reset your password\n" +"we have received a request to reset your password. please reset your " +"password\n" " by clicking the button below:" msgstr "" "Vi har modtaget en anmodning om at nulstille din adgangskode. Nulstil " @@ -502,7 +501,8 @@ msgid "" "if the button above does not work, please copy and paste the following URL\n" " into your web browser:" msgstr "" -"Hvis ovenstående knap ikke virker, bedes du kopiere og indsætte følgende URL\n" +"Hvis ovenstående knap ikke virker, bedes du kopiere og indsætte følgende " +"URL\n" " i din webbrowser:" #: engine/vibes_auth/templates/user_reset_password_email.html:100 @@ -569,8 +569,8 @@ msgstr "" #: engine/vibes_auth/views.py:30 msgid "" -"Represents a view for getting a pair of access and refresh tokens and user's" -" data. This view manages the process of handling token-based authentication " +"Represents a view for getting a pair of access and refresh tokens and user's " +"data. This view manages the process of handling token-based authentication " "where clients can get a pair of JWT tokens (access and refresh) using " "provided credentials. It is built on top of a base token view and ensures " "proper rate limiting to protect against brute force attacks." @@ -579,16 +579,16 @@ msgstr "" "brugerens data. Denne visning administrerer processen med at håndtere " "tokenbaseret godkendelse, hvor klienter kan få et par JWT-tokens (adgang og " "opdatering) ved hjælp af de angivne legitimationsoplysninger. Den er bygget " -"oven på en basis-tokenvisning og sikrer korrekt hastighedsbegrænsning for at" -" beskytte mod brute force-angreb." +"oven på en basis-tokenvisning og sikrer korrekt hastighedsbegrænsning for at " +"beskytte mod brute force-angreb." #: engine/vibes_auth/views.py:52 msgid "" -"Handles refreshing of tokens for authentication purposes. This class is used" -" to provide functionality for token refresh operations as part of an " -"authentication system. It ensures that clients can request a refreshed token" -" within defined rate limits. The view relies on the associated serializer to" -" validate token refresh inputs and produce appropriate outputs." +"Handles refreshing of tokens for authentication purposes. This class is used " +"to provide functionality for token refresh operations as part of an " +"authentication system. It ensures that clients can request a refreshed token " +"within defined rate limits. The view relies on the associated serializer to " +"validate token refresh inputs and produce appropriate outputs." msgstr "" "Håndterer opfriskning af tokens til autentificeringsformål. Denne klasse " "bruges til at levere funktionalitet til token-opdatering som en del af et " @@ -602,8 +602,8 @@ msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " msgstr "" -"Repræsenterer en visning til verificering af JSON Web Tokens (JWT) ved hjælp" -" af specifik serialiserings- og valideringslogik." +"Repræsenterer en visning til verificering af JSON Web Tokens (JWT) ved hjælp " +"af specifik serialiserings- og valideringslogik." #: engine/vibes_auth/views.py:92 msgid "the token is invalid" @@ -612,10 +612,17 @@ msgstr "Tokenet er ugyldigt" #: engine/vibes_auth/viewsets.py:45 msgid "" "User view set implementation.\n" -"Provides a set of actions that manage user-related data such as creation, retrieval, updates, deletion, and custom actions including password reset, avatar upload, account activation, and recently viewed items merging. This class extends the mixins and GenericViewSet for robust API handling." +"Provides a set of actions that manage user-related data such as creation, " +"retrieval, updates, deletion, and custom actions including password reset, " +"avatar upload, account activation, and recently viewed items merging. This " +"class extends the mixins and GenericViewSet for robust API handling." msgstr "" "Implementering af brugervisningssæt.\n" -"Indeholder et sæt handlinger, der håndterer brugerrelaterede data såsom oprettelse, hentning, opdateringer, sletning og brugerdefinerede handlinger, herunder nulstilling af adgangskode, upload af avatar, kontoaktivering og sammenlægning af nyligt viste elementer. Denne klasse udvider mixins og GenericViewSet til robust API-håndtering." +"Indeholder et sæt handlinger, der håndterer brugerrelaterede data såsom " +"oprettelse, hentning, opdateringer, sletning og brugerdefinerede handlinger, " +"herunder nulstilling af adgangskode, upload af avatar, kontoaktivering og " +"sammenlægning af nyligt viste elementer. Denne klasse udvider mixins og " +"GenericViewSet til robust API-håndtering." #: engine/vibes_auth/viewsets.py:99 msgid "password reset successfully" diff --git a/engine/vibes_auth/locale/de_DE/LC_MESSAGES/django.po b/engine/vibes_auth/locale/de_DE/LC_MESSAGES/django.po index ec66db18..1601fd87 100644 --- a/engine/vibes_auth/locale/de_DE/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/de_DE/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -196,8 +196,8 @@ msgstr "" #: engine/vibes_auth/graphene/mutations.py:43 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" -"Die b64-kodierte uuid des Benutzers, der den neuen Benutzer an uns verwiesen" -" hat." +"Die b64-kodierte uuid des Benutzers, der den neuen Benutzer an uns verwiesen " +"hat." #: engine/vibes_auth/graphene/mutations.py:63 msgid "password too weak" @@ -237,15 +237,14 @@ msgstr "Das Konto wurde bereits aktiviert..." msgid "something went wrong: {e!s}" msgstr "Etwas ist schief gelaufen: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:324 -#: engine/vibes_auth/viewsets.py:95 +#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "Token ist ungültig!" #: engine/vibes_auth/graphene/object_types.py:40 msgid "" -"the products this user has viewed most recently (max 48), in " -"reverse‐chronological order" +"the products this user has viewed most recently (max 48), in reverse‐" +"chronological order" msgstr "" "Die Produkte, die dieser Benutzer zuletzt angesehen hat (maximal 48), in " "umgekehrter chronologischer Reihenfolge." @@ -259,8 +258,7 @@ msgstr "Gruppen" msgid "wishlist" msgstr "Wunschzettel" -#: engine/vibes_auth/graphene/object_types.py:47 -#: engine/vibes_auth/models.py:68 +#: engine/vibes_auth/graphene/object_types.py:47 engine/vibes_auth/models.py:68 msgid "avatar" msgstr "Avatar" @@ -272,11 +270,11 @@ msgstr "" #: engine/vibes_auth/graphene/object_types.py:50 #, python-brace-format msgid "" -"language is one of the {settings.LANGUAGES} with default " -"{settings.LANGUAGE_CODE}" +"language is one of the {settings.LANGUAGES} with default {settings." +"LANGUAGE_CODE}" msgstr "" -"Sprache ist eine der {settings.LANGUAGES} mit Voreinstellung " -"{settings.LANGUAGE_CODE}" +"Sprache ist eine der {settings.LANGUAGES} mit Voreinstellung {settings." +"LANGUAGE_CODE}" #: engine/vibes_auth/graphene/object_types.py:52 msgid "address set" @@ -498,7 +496,8 @@ msgstr "Hallo %(user_first_name)s," #: engine/vibes_auth/templates/user_reset_password_email.html:92 msgid "" -"we have received a request to reset your password. please reset your password\n" +"we have received a request to reset your password. please reset your " +"password\n" " by clicking the button below:" msgstr "" "Wir haben eine Anfrage erhalten, Ihr Passwort zurückzusetzen. Bitte setzen " @@ -514,7 +513,8 @@ msgid "" "if the button above does not work, please copy and paste the following URL\n" " into your web browser:" msgstr "" -"Wenn die obige Schaltfläche nicht funktioniert, kopieren Sie bitte die folgende URL und fügen Sie sie in Ihren Browser ein\n" +"Wenn die obige Schaltfläche nicht funktioniert, kopieren Sie bitte die " +"folgende URL und fügen Sie sie in Ihren Browser ein\n" " in Ihren Webbrowser ein:" #: engine/vibes_auth/templates/user_reset_password_email.html:100 @@ -522,8 +522,8 @@ msgid "" "if you did not send this request, please ignore this\n" " email." msgstr "" -"Wenn Sie diese Anfrage nicht gesendet haben, ignorieren Sie bitte diese " -"E-Mail." +"Wenn Sie diese Anfrage nicht gesendet haben, ignorieren Sie bitte diese E-" +"Mail." #: engine/vibes_auth/templates/user_reset_password_email.html:102 #, python-format @@ -582,35 +582,35 @@ msgstr "" #: engine/vibes_auth/views.py:30 msgid "" -"Represents a view for getting a pair of access and refresh tokens and user's" -" data. This view manages the process of handling token-based authentication " +"Represents a view for getting a pair of access and refresh tokens and user's " +"data. This view manages the process of handling token-based authentication " "where clients can get a pair of JWT tokens (access and refresh) using " "provided credentials. It is built on top of a base token view and ensures " "proper rate limiting to protect against brute force attacks." msgstr "" -"Stellt eine Ansicht zum Abrufen eines Paars von Zugangs- und " -"Aktualisierungs-Tokens und der Benutzerdaten dar. Diese Ansicht verwaltet " -"den Prozess der Handhabung der Token-basierten Authentifizierung, bei der " -"Clients ein Paar JWT-Tokens (Zugriffs- und Aktualisierungs-Token) unter " -"Verwendung der bereitgestellten Anmeldeinformationen abrufen können. Sie " -"baut auf einer Basis-Token-Ansicht auf und gewährleistet eine angemessene " -"Ratenbegrenzung zum Schutz vor Brute-Force-Angriffen." +"Stellt eine Ansicht zum Abrufen eines Paars von Zugangs- und Aktualisierungs-" +"Tokens und der Benutzerdaten dar. Diese Ansicht verwaltet den Prozess der " +"Handhabung der Token-basierten Authentifizierung, bei der Clients ein Paar " +"JWT-Tokens (Zugriffs- und Aktualisierungs-Token) unter Verwendung der " +"bereitgestellten Anmeldeinformationen abrufen können. Sie baut auf einer " +"Basis-Token-Ansicht auf und gewährleistet eine angemessene Ratenbegrenzung " +"zum Schutz vor Brute-Force-Angriffen." #: engine/vibes_auth/views.py:52 msgid "" -"Handles refreshing of tokens for authentication purposes. This class is used" -" to provide functionality for token refresh operations as part of an " -"authentication system. It ensures that clients can request a refreshed token" -" within defined rate limits. The view relies on the associated serializer to" -" validate token refresh inputs and produce appropriate outputs." +"Handles refreshing of tokens for authentication purposes. This class is used " +"to provide functionality for token refresh operations as part of an " +"authentication system. It ensures that clients can request a refreshed token " +"within defined rate limits. The view relies on the associated serializer to " +"validate token refresh inputs and produce appropriate outputs." msgstr "" "Verwaltet die Auffrischung von Token für Authentifizierungszwecke. Diese " -"Klasse wird verwendet, um Funktionen für die Auffrischung von Token als Teil" -" eines Authentifizierungssystems bereitzustellen. Sie stellt sicher, dass " +"Klasse wird verwendet, um Funktionen für die Auffrischung von Token als Teil " +"eines Authentifizierungssystems bereitzustellen. Sie stellt sicher, dass " "Clients ein aktualisiertes Token innerhalb definierter Ratengrenzen " "anfordern können. Die Ansicht verlässt sich auf den zugehörigen Serializer, " -"um die Eingaben für die Token-Aktualisierung zu validieren und entsprechende" -" Ausgaben zu erzeugen." +"um die Eingaben für die Token-Aktualisierung zu validieren und entsprechende " +"Ausgaben zu erzeugen." #: engine/vibes_auth/views.py:75 msgid "" @@ -627,10 +627,17 @@ msgstr "Das Token ist ungültig" #: engine/vibes_auth/viewsets.py:45 msgid "" "User view set implementation.\n" -"Provides a set of actions that manage user-related data such as creation, retrieval, updates, deletion, and custom actions including password reset, avatar upload, account activation, and recently viewed items merging. This class extends the mixins and GenericViewSet for robust API handling." +"Provides a set of actions that manage user-related data such as creation, " +"retrieval, updates, deletion, and custom actions including password reset, " +"avatar upload, account activation, and recently viewed items merging. This " +"class extends the mixins and GenericViewSet for robust API handling." msgstr "" "Implementierung der Benutzeransicht.\n" -"Stellt eine Reihe von Aktionen zur Verfügung, die benutzerbezogene Daten wie Erstellung, Abruf, Aktualisierung, Löschung und benutzerdefinierte Aktionen wie Kennwortrücksetzung, Avatar-Upload, Kontoaktivierung und Zusammenführung kürzlich angesehener Elemente verwalten. Diese Klasse erweitert die Mixins und GenericViewSet für eine robuste API-Behandlung." +"Stellt eine Reihe von Aktionen zur Verfügung, die benutzerbezogene Daten wie " +"Erstellung, Abruf, Aktualisierung, Löschung und benutzerdefinierte Aktionen " +"wie Kennwortrücksetzung, Avatar-Upload, Kontoaktivierung und Zusammenführung " +"kürzlich angesehener Elemente verwalten. Diese Klasse erweitert die Mixins " +"und GenericViewSet für eine robuste API-Behandlung." #: engine/vibes_auth/viewsets.py:99 msgid "password reset successfully" diff --git a/engine/vibes_auth/locale/en_GB/LC_MESSAGES/django.po b/engine/vibes_auth/locale/en_GB/LC_MESSAGES/django.po index 65c64eb7..0fcacae8 100644 --- a/engine/vibes_auth/locale/en_GB/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/en_GB/LC_MESSAGES/django.po @@ -2,12 +2,12 @@ # Copyright (C) 2025 Egor "fureunoir" Gorbunov # This file is distributed under the same license as the eVibes package. # EGOR GORBUNOV , 2025. -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -235,15 +235,14 @@ msgstr "Account has been already activated..." msgid "something went wrong: {e!s}" msgstr "Something went wrong: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:324 -#: engine/vibes_auth/viewsets.py:95 +#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "Token is invalid!" #: engine/vibes_auth/graphene/object_types.py:40 msgid "" -"the products this user has viewed most recently (max 48), in " -"reverse‐chronological order" +"the products this user has viewed most recently (max 48), in reverse‐" +"chronological order" msgstr "" "The products this user has viewed most recently (max 48), in reverse-" "chronological order." @@ -257,8 +256,7 @@ msgstr "Groups" msgid "wishlist" msgstr "Wishlist" -#: engine/vibes_auth/graphene/object_types.py:47 -#: engine/vibes_auth/models.py:68 +#: engine/vibes_auth/graphene/object_types.py:47 engine/vibes_auth/models.py:68 msgid "avatar" msgstr "Avatar" @@ -269,11 +267,11 @@ msgstr "Attributes may be used to store custom data" #: engine/vibes_auth/graphene/object_types.py:50 #, python-brace-format msgid "" -"language is one of the {settings.LANGUAGES} with default " -"{settings.LANGUAGE_CODE}" +"language is one of the {settings.LANGUAGES} with default {settings." +"LANGUAGE_CODE}" msgstr "" -"Language is one of the {settings.LANGUAGES} with default " -"{settings.LANGUAGE_CODE}" +"Language is one of the {settings.LANGUAGES} with default {settings." +"LANGUAGE_CODE}" #: engine/vibes_auth/graphene/object_types.py:52 msgid "address set" @@ -488,7 +486,8 @@ msgstr "Hello %(user_first_name)s," #: engine/vibes_auth/templates/user_reset_password_email.html:92 msgid "" -"we have received a request to reset your password. please reset your password\n" +"we have received a request to reset your password. please reset your " +"password\n" " by clicking the button below:" msgstr "" "We have received a request to reset your password. Please reset your " @@ -572,31 +571,31 @@ msgstr "" #: engine/vibes_auth/views.py:30 msgid "" -"Represents a view for getting a pair of access and refresh tokens and user's" -" data. This view manages the process of handling token-based authentication " +"Represents a view for getting a pair of access and refresh tokens and user's " +"data. This view manages the process of handling token-based authentication " "where clients can get a pair of JWT tokens (access and refresh) using " "provided credentials. It is built on top of a base token view and ensures " "proper rate limiting to protect against brute force attacks." msgstr "" -"Represents a view for getting a pair of access and refresh tokens and user's" -" data. This view manages the process of handling token-based authentication " +"Represents a view for getting a pair of access and refresh tokens and user's " +"data. This view manages the process of handling token-based authentication " "where clients can get a pair of JWT tokens (access and refresh) using " "provided credentials. It is built on top of a base token view and ensures " "proper rate limiting to protect against brute force attacks." #: engine/vibes_auth/views.py:52 msgid "" -"Handles refreshing of tokens for authentication purposes. This class is used" -" to provide functionality for token refresh operations as part of an " -"authentication system. It ensures that clients can request a refreshed token" -" within defined rate limits. The view relies on the associated serializer to" -" validate token refresh inputs and produce appropriate outputs." +"Handles refreshing of tokens for authentication purposes. This class is used " +"to provide functionality for token refresh operations as part of an " +"authentication system. It ensures that clients can request a refreshed token " +"within defined rate limits. The view relies on the associated serializer to " +"validate token refresh inputs and produce appropriate outputs." msgstr "" -"Handles refreshing of tokens for authentication purposes. This class is used" -" to provide functionality for token refresh operations as part of an " -"authentication system. It ensures that clients can request a refreshed token" -" within defined rate limits. The view relies on the associated serializer to" -" validate token refresh inputs and produce appropriate outputs." +"Handles refreshing of tokens for authentication purposes. This class is used " +"to provide functionality for token refresh operations as part of an " +"authentication system. It ensures that clients can request a refreshed token " +"within defined rate limits. The view relies on the associated serializer to " +"validate token refresh inputs and produce appropriate outputs." #: engine/vibes_auth/views.py:75 msgid "" @@ -613,10 +612,16 @@ msgstr "The token is invalid" #: engine/vibes_auth/viewsets.py:45 msgid "" "User view set implementation.\n" -"Provides a set of actions that manage user-related data such as creation, retrieval, updates, deletion, and custom actions including password reset, avatar upload, account activation, and recently viewed items merging. This class extends the mixins and GenericViewSet for robust API handling." +"Provides a set of actions that manage user-related data such as creation, " +"retrieval, updates, deletion, and custom actions including password reset, " +"avatar upload, account activation, and recently viewed items merging. This " +"class extends the mixins and GenericViewSet for robust API handling." msgstr "" "User view set implementation.\n" -"Provides a set of actions that manage user-related data such as creation, retrieval, updates, deletion, and custom actions including password reset, avatar upload, account activation, and recently viewed items merging. This class extends the mixins and GenericViewSet for robust API handling." +"Provides a set of actions that manage user-related data such as creation, " +"retrieval, updates, deletion, and custom actions including password reset, " +"avatar upload, account activation, and recently viewed items merging. This " +"class extends the mixins and GenericViewSet for robust API handling." #: engine/vibes_auth/viewsets.py:99 msgid "password reset successfully" diff --git a/engine/vibes_auth/locale/en_US/LC_MESSAGES/django.po b/engine/vibes_auth/locale/en_US/LC_MESSAGES/django.po index b05477e8..0bf342a6 100644 --- a/engine/vibes_auth/locale/en_US/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/en_US/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -231,15 +231,14 @@ msgstr "Account has been already activated..." msgid "something went wrong: {e!s}" msgstr "Something went wrong: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:324 -#: engine/vibes_auth/viewsets.py:95 +#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "Token is invalid!" #: engine/vibes_auth/graphene/object_types.py:40 msgid "" -"the products this user has viewed most recently (max 48), in " -"reverse‐chronological order" +"the products this user has viewed most recently (max 48), in reverse‐" +"chronological order" msgstr "" "The products this user has viewed most recently (max 48), in reverse-" "chronological order." @@ -253,8 +252,7 @@ msgstr "Groups" msgid "wishlist" msgstr "Wishlist" -#: engine/vibes_auth/graphene/object_types.py:47 -#: engine/vibes_auth/models.py:68 +#: engine/vibes_auth/graphene/object_types.py:47 engine/vibes_auth/models.py:68 msgid "avatar" msgstr "Avatar" @@ -265,11 +263,11 @@ msgstr "Attributes may be used to store custom data" #: engine/vibes_auth/graphene/object_types.py:50 #, python-brace-format msgid "" -"language is one of the {settings.LANGUAGES} with default " -"{settings.LANGUAGE_CODE}" +"language is one of the {settings.LANGUAGES} with default {settings." +"LANGUAGE_CODE}" msgstr "" -"Language is one of the {settings.LANGUAGES} with default " -"{settings.LANGUAGE_CODE}" +"Language is one of the {settings.LANGUAGES} with default {settings." +"LANGUAGE_CODE}" #: engine/vibes_auth/graphene/object_types.py:52 msgid "address set" @@ -484,7 +482,8 @@ msgstr "Hello %(user_first_name)s," #: engine/vibes_auth/templates/user_reset_password_email.html:92 msgid "" -"we have received a request to reset your password. please reset your password\n" +"we have received a request to reset your password. please reset your " +"password\n" " by clicking the button below:" msgstr "" "We have received a request to reset your password. Please reset your " @@ -568,31 +567,31 @@ msgstr "" #: engine/vibes_auth/views.py:30 msgid "" -"Represents a view for getting a pair of access and refresh tokens and user's" -" data. This view manages the process of handling token-based authentication " +"Represents a view for getting a pair of access and refresh tokens and user's " +"data. This view manages the process of handling token-based authentication " "where clients can get a pair of JWT tokens (access and refresh) using " "provided credentials. It is built on top of a base token view and ensures " "proper rate limiting to protect against brute force attacks." msgstr "" -"Represents a view for getting a pair of access and refresh tokens and user's" -" data. This view manages the process of handling token-based authentication " +"Represents a view for getting a pair of access and refresh tokens and user's " +"data. This view manages the process of handling token-based authentication " "where clients can get a pair of JWT tokens (access and refresh) using " "provided credentials. It is built on top of a base token view and ensures " "proper rate limiting to protect against brute force attacks." #: engine/vibes_auth/views.py:52 msgid "" -"Handles refreshing of tokens for authentication purposes. This class is used" -" to provide functionality for token refresh operations as part of an " -"authentication system. It ensures that clients can request a refreshed token" -" within defined rate limits. The view relies on the associated serializer to" -" validate token refresh inputs and produce appropriate outputs." +"Handles refreshing of tokens for authentication purposes. This class is used " +"to provide functionality for token refresh operations as part of an " +"authentication system. It ensures that clients can request a refreshed token " +"within defined rate limits. The view relies on the associated serializer to " +"validate token refresh inputs and produce appropriate outputs." msgstr "" -"Handles refreshing of tokens for authentication purposes. This class is used" -" to provide functionality for token refresh operations as part of an " -"authentication system. It ensures that clients can request a refreshed token" -" within defined rate limits. The view relies on the associated serializer to" -" validate token refresh inputs and produce appropriate outputs." +"Handles refreshing of tokens for authentication purposes. This class is used " +"to provide functionality for token refresh operations as part of an " +"authentication system. It ensures that clients can request a refreshed token " +"within defined rate limits. The view relies on the associated serializer to " +"validate token refresh inputs and produce appropriate outputs." #: engine/vibes_auth/views.py:75 msgid "" @@ -609,10 +608,16 @@ msgstr "The token is invalid" #: engine/vibes_auth/viewsets.py:45 msgid "" "User view set implementation.\n" -"Provides a set of actions that manage user-related data such as creation, retrieval, updates, deletion, and custom actions including password reset, avatar upload, account activation, and recently viewed items merging. This class extends the mixins and GenericViewSet for robust API handling." +"Provides a set of actions that manage user-related data such as creation, " +"retrieval, updates, deletion, and custom actions including password reset, " +"avatar upload, account activation, and recently viewed items merging. This " +"class extends the mixins and GenericViewSet for robust API handling." msgstr "" "User view set implementation.\n" -"Provides a set of actions that manage user-related data such as creation, retrieval, updates, deletion, and custom actions including password reset, avatar upload, account activation, and recently viewed items merging. This class extends the mixins and GenericViewSet for robust API handling." +"Provides a set of actions that manage user-related data such as creation, " +"retrieval, updates, deletion, and custom actions including password reset, " +"avatar upload, account activation, and recently viewed items merging. This " +"class extends the mixins and GenericViewSet for robust API handling." #: engine/vibes_auth/viewsets.py:99 msgid "password reset successfully" diff --git a/engine/vibes_auth/locale/es_ES/LC_MESSAGES/django.po b/engine/vibes_auth/locale/es_ES/LC_MESSAGES/django.po index cc65d904..09556fc1 100644 --- a/engine/vibes_auth/locale/es_ES/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/es_ES/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -234,15 +234,14 @@ msgstr "La cuenta ya ha sido activada..." msgid "something went wrong: {e!s}" msgstr "Algo salió mal: {e!s}." -#: engine/vibes_auth/graphene/mutations.py:324 -#: engine/vibes_auth/viewsets.py:95 +#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "¡La ficha no es válida!" #: engine/vibes_auth/graphene/object_types.py:40 msgid "" -"the products this user has viewed most recently (max 48), in " -"reverse‐chronological order" +"the products this user has viewed most recently (max 48), in reverse‐" +"chronological order" msgstr "" "Los productos que este usuario ha visto más recientemente (máx. 48), en " "orden cronológico inverso." @@ -256,8 +255,7 @@ msgstr "Grupos" msgid "wishlist" msgstr "Lista de deseos" -#: engine/vibes_auth/graphene/object_types.py:47 -#: engine/vibes_auth/models.py:68 +#: engine/vibes_auth/graphene/object_types.py:47 engine/vibes_auth/models.py:68 msgid "avatar" msgstr "Avatar" @@ -268,8 +266,8 @@ msgstr "Los atributos pueden utilizarse para almacenar datos personalizados" #: engine/vibes_auth/graphene/object_types.py:50 #, python-brace-format msgid "" -"language is one of the {settings.LANGUAGES} with default " -"{settings.LANGUAGE_CODE}" +"language is one of the {settings.LANGUAGES} with default {settings." +"LANGUAGE_CODE}" msgstr "" "El idioma es uno de los {settings.LANGUAGES} con {settings.LANGUAGE_CODE} " "por defecto" @@ -435,8 +433,7 @@ msgstr "`attributes` debe ser un diccionario" #: engine/vibes_auth/serializers.py:93 msgid "business identificator is required when registering as a business" -msgstr "" -"El identificador de empresa es necesario para registrarse como empresa" +msgstr "El identificador de empresa es necesario para registrarse como empresa" #: engine/vibes_auth/serializers.py:113 #, python-brace-format @@ -489,7 +486,8 @@ msgstr "Hola %(user_first_name)s," #: engine/vibes_auth/templates/user_reset_password_email.html:92 msgid "" -"we have received a request to reset your password. please reset your password\n" +"we have received a request to reset your password. please reset your " +"password\n" " by clicking the button below:" msgstr "" "Hemos recibido una solicitud para restablecer su contraseña. Por favor, " @@ -573,14 +571,14 @@ msgstr "" #: engine/vibes_auth/views.py:30 msgid "" -"Represents a view for getting a pair of access and refresh tokens and user's" -" data. This view manages the process of handling token-based authentication " +"Represents a view for getting a pair of access and refresh tokens and user's " +"data. This view manages the process of handling token-based authentication " "where clients can get a pair of JWT tokens (access and refresh) using " "provided credentials. It is built on top of a base token view and ensures " "proper rate limiting to protect against brute force attacks." msgstr "" -"Representa una vista para obtener un par de tokens de acceso y actualización" -" y los datos del usuario. Esta vista gestiona el proceso de autenticación " +"Representa una vista para obtener un par de tokens de acceso y actualización " +"y los datos del usuario. Esta vista gestiona el proceso de autenticación " "basada en tokens donde los clientes pueden obtener un par de tokens JWT " "(acceso y actualización) utilizando las credenciales proporcionadas. Se " "construye sobre una vista de token base y asegura una limitación de tasa " @@ -588,18 +586,18 @@ msgstr "" #: engine/vibes_auth/views.py:52 msgid "" -"Handles refreshing of tokens for authentication purposes. This class is used" -" to provide functionality for token refresh operations as part of an " -"authentication system. It ensures that clients can request a refreshed token" -" within defined rate limits. The view relies on the associated serializer to" -" validate token refresh inputs and produce appropriate outputs." +"Handles refreshing of tokens for authentication purposes. This class is used " +"to provide functionality for token refresh operations as part of an " +"authentication system. It ensures that clients can request a refreshed token " +"within defined rate limits. The view relies on the associated serializer to " +"validate token refresh inputs and produce appropriate outputs." msgstr "" "Maneja la actualización de tokens con fines de autenticación. Esta clase se " "utiliza para proporcionar funcionalidad a las operaciones de actualización " "de tokens como parte de un sistema de autenticación. Garantiza que los " "clientes puedan solicitar un token actualizado dentro de los límites de " -"velocidad definidos. La vista depende del serializador asociado para validar" -" las entradas de actualización de tokens y producir las salidas apropiadas." +"velocidad definidos. La vista depende del serializador asociado para validar " +"las entradas de actualización de tokens y producir las salidas apropiadas." #: engine/vibes_auth/views.py:75 msgid "" @@ -616,10 +614,18 @@ msgstr "El token no es válido" #: engine/vibes_auth/viewsets.py:45 msgid "" "User view set implementation.\n" -"Provides a set of actions that manage user-related data such as creation, retrieval, updates, deletion, and custom actions including password reset, avatar upload, account activation, and recently viewed items merging. This class extends the mixins and GenericViewSet for robust API handling." +"Provides a set of actions that manage user-related data such as creation, " +"retrieval, updates, deletion, and custom actions including password reset, " +"avatar upload, account activation, and recently viewed items merging. This " +"class extends the mixins and GenericViewSet for robust API handling." msgstr "" "Implementación del conjunto de vistas de usuario.\n" -"Proporciona un conjunto de acciones que gestionan los datos relacionados con el usuario, como la creación, recuperación, actualización, eliminación y acciones personalizadas, incluyendo el restablecimiento de la contraseña, la carga de avatares, la activación de cuentas y la fusión de elementos vistos recientemente. Esta clase extiende los mixins y GenericViewSet para un manejo robusto de la API." +"Proporciona un conjunto de acciones que gestionan los datos relacionados con " +"el usuario, como la creación, recuperación, actualización, eliminación y " +"acciones personalizadas, incluyendo el restablecimiento de la contraseña, la " +"carga de avatares, la activación de cuentas y la fusión de elementos vistos " +"recientemente. Esta clase extiende los mixins y GenericViewSet para un " +"manejo robusto de la API." #: engine/vibes_auth/viewsets.py:99 msgid "password reset successfully" diff --git a/engine/vibes_auth/locale/fa_IR/LC_MESSAGES/django.po b/engine/vibes_auth/locale/fa_IR/LC_MESSAGES/django.po index 4cb8f73b..b0a8db27 100644 --- a/engine/vibes_auth/locale/fa_IR/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/fa_IR/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/engine/vibes_auth/locale/fr_FR/LC_MESSAGES/django.po b/engine/vibes_auth/locale/fr_FR/LC_MESSAGES/django.po index 25dcd7c6..6c7a1d57 100644 --- a/engine/vibes_auth/locale/fr_FR/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/fr_FR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -238,18 +238,17 @@ msgstr "Le compte a déjà été activé..." msgid "something went wrong: {e!s}" msgstr "Quelque chose a mal tourné : {e!s}" -#: engine/vibes_auth/graphene/mutations.py:324 -#: engine/vibes_auth/viewsets.py:95 +#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "Le jeton n'est pas valide !" #: engine/vibes_auth/graphene/object_types.py:40 msgid "" -"the products this user has viewed most recently (max 48), in " -"reverse‐chronological order" +"the products this user has viewed most recently (max 48), in reverse‐" +"chronological order" msgstr "" -"Les produits que cet utilisateur a consultés le plus récemment (max 48), par" -" ordre chronologique inverse." +"Les produits que cet utilisateur a consultés le plus récemment (max 48), par " +"ordre chronologique inverse." #: engine/vibes_auth/graphene/object_types.py:42 #: engine/vibes_auth/models.py:176 @@ -260,8 +259,7 @@ msgstr "Groupes" msgid "wishlist" msgstr "Liste de souhaits" -#: engine/vibes_auth/graphene/object_types.py:47 -#: engine/vibes_auth/models.py:68 +#: engine/vibes_auth/graphene/object_types.py:47 engine/vibes_auth/models.py:68 msgid "avatar" msgstr "Avatar" @@ -273,8 +271,8 @@ msgstr "" #: engine/vibes_auth/graphene/object_types.py:50 #, python-brace-format msgid "" -"language is one of the {settings.LANGUAGES} with default " -"{settings.LANGUAGE_CODE}" +"language is one of the {settings.LANGUAGES} with default {settings." +"LANGUAGE_CODE}" msgstr "" "La langue est l'une des {settings.LANGUAGES} avec la valeur par défaut " "{settings.LANGUAGE_CODE}." @@ -472,8 +470,7 @@ msgstr "Jeton non valide" #: engine/vibes_auth/serializers.py:243 msgid "no user uuid claim present in token" -msgstr "" -"Aucune revendication d'uuid d'utilisateur n'est présente dans le jeton" +msgstr "Aucune revendication d'uuid d'utilisateur n'est présente dans le jeton" #: engine/vibes_auth/serializers.py:245 msgid "user does not exist" @@ -500,7 +497,8 @@ msgstr "Bonjour %(user_first_name)s," #: engine/vibes_auth/templates/user_reset_password_email.html:92 msgid "" -"we have received a request to reset your password. please reset your password\n" +"we have received a request to reset your password. please reset your " +"password\n" " by clicking the button below:" msgstr "" "Nous avons reçu une demande de réinitialisation de votre mot de passe. " @@ -517,7 +515,8 @@ msgid "" "if the button above does not work, please copy and paste the following URL\n" " into your web browser:" msgstr "" -"Si le bouton ci-dessus ne fonctionne pas, veuillez copier et coller l'URL suivante\n" +"Si le bouton ci-dessus ne fonctionne pas, veuillez copier et coller l'URL " +"suivante\n" " suivante dans votre navigateur web :" #: engine/vibes_auth/templates/user_reset_password_email.html:100 @@ -549,8 +548,8 @@ msgid "" "thank you for signing up for %(project_name)s. please activate your account\n" " by clicking the button below:" msgstr "" -"Merci de vous être inscrit à %(project_name)s. Veuillez activer votre compte" -" en cliquant sur le bouton ci-dessous :" +"Merci de vous être inscrit à %(project_name)s. Veuillez activer votre compte " +"en cliquant sur le bouton ci-dessous :" #: engine/vibes_auth/templates/user_verification_email.html:96 msgid "" @@ -585,8 +584,8 @@ msgstr "" #: engine/vibes_auth/views.py:30 msgid "" -"Represents a view for getting a pair of access and refresh tokens and user's" -" data. This view manages the process of handling token-based authentication " +"Represents a view for getting a pair of access and refresh tokens and user's " +"data. This view manages the process of handling token-based authentication " "where clients can get a pair of JWT tokens (access and refresh) using " "provided credentials. It is built on top of a base token view and ensures " "proper rate limiting to protect against brute force attacks." @@ -601,11 +600,11 @@ msgstr "" #: engine/vibes_auth/views.py:52 msgid "" -"Handles refreshing of tokens for authentication purposes. This class is used" -" to provide functionality for token refresh operations as part of an " -"authentication system. It ensures that clients can request a refreshed token" -" within defined rate limits. The view relies on the associated serializer to" -" validate token refresh inputs and produce appropriate outputs." +"Handles refreshing of tokens for authentication purposes. This class is used " +"to provide functionality for token refresh operations as part of an " +"authentication system. It ensures that clients can request a refreshed token " +"within defined rate limits. The view relies on the associated serializer to " +"validate token refresh inputs and produce appropriate outputs." msgstr "" "Gère le rafraîchissement des jetons à des fins d'authentification. Cette " "classe est utilisée pour fournir une fonctionnalité pour les opérations de " @@ -620,8 +619,8 @@ msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " msgstr "" -"Représente une vue permettant de vérifier les jetons Web JSON (JWT) à l'aide" -" d'une logique de sérialisation et de validation spécifique." +"Représente une vue permettant de vérifier les jetons Web JSON (JWT) à l'aide " +"d'une logique de sérialisation et de validation spécifique." #: engine/vibes_auth/views.py:92 msgid "the token is invalid" @@ -630,10 +629,18 @@ msgstr "Le jeton n'est pas valide" #: engine/vibes_auth/viewsets.py:45 msgid "" "User view set implementation.\n" -"Provides a set of actions that manage user-related data such as creation, retrieval, updates, deletion, and custom actions including password reset, avatar upload, account activation, and recently viewed items merging. This class extends the mixins and GenericViewSet for robust API handling." +"Provides a set of actions that manage user-related data such as creation, " +"retrieval, updates, deletion, and custom actions including password reset, " +"avatar upload, account activation, and recently viewed items merging. This " +"class extends the mixins and GenericViewSet for robust API handling." msgstr "" "Mise en œuvre de l'ensemble des vues de l'utilisateur.\n" -"Fournit un ensemble d'actions qui gèrent les données liées à l'utilisateur, telles que la création, la récupération, les mises à jour, la suppression et les actions personnalisées, notamment la réinitialisation du mot de passe, le téléchargement de l'avatar, l'activation du compte et la fusion des éléments récemment consultés. Cette classe étend les mixins et GenericViewSet pour une gestion robuste de l'API." +"Fournit un ensemble d'actions qui gèrent les données liées à l'utilisateur, " +"telles que la création, la récupération, les mises à jour, la suppression et " +"les actions personnalisées, notamment la réinitialisation du mot de passe, " +"le téléchargement de l'avatar, l'activation du compte et la fusion des " +"éléments récemment consultés. Cette classe étend les mixins et " +"GenericViewSet pour une gestion robuste de l'API." #: engine/vibes_auth/viewsets.py:99 msgid "password reset successfully" diff --git a/engine/vibes_auth/locale/he_IL/LC_MESSAGES/django.po b/engine/vibes_auth/locale/he_IL/LC_MESSAGES/django.po index 21ef73bf..59d20db9 100644 --- a/engine/vibes_auth/locale/he_IL/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/he_IL/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -231,15 +231,14 @@ msgstr "החשבון כבר הופעל..." msgid "something went wrong: {e!s}" msgstr "משהו השתבש: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:324 -#: engine/vibes_auth/viewsets.py:95 +#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "האסימון אינו חוקי!" #: engine/vibes_auth/graphene/object_types.py:40 msgid "" -"the products this user has viewed most recently (max 48), in " -"reverse‐chronological order" +"the products this user has viewed most recently (max 48), in reverse‐" +"chronological order" msgstr "המוצרים שהמשתמש צפה בהם לאחרונה (מקסימום 48), בסדר כרונולוגי הפוך." #: engine/vibes_auth/graphene/object_types.py:42 @@ -251,8 +250,7 @@ msgstr "קבוצות" msgid "wishlist" msgstr "רשימת משאלות" -#: engine/vibes_auth/graphene/object_types.py:47 -#: engine/vibes_auth/models.py:68 +#: engine/vibes_auth/graphene/object_types.py:47 engine/vibes_auth/models.py:68 msgid "avatar" msgstr "אוואטר" @@ -263,8 +261,8 @@ msgstr "ניתן להשתמש בתכונות לאחסון נתונים מותא #: engine/vibes_auth/graphene/object_types.py:50 #, python-brace-format msgid "" -"language is one of the {settings.LANGUAGES} with default " -"{settings.LANGUAGE_CODE}" +"language is one of the {settings.LANGUAGES} with default {settings." +"LANGUAGE_CODE}" msgstr "" "השפה היא אחת ה-{settings.LANGUAGES} עם ברירת מחדל {settings.LANGUAGE_CODE}" @@ -298,10 +296,10 @@ msgid "" "verifying accounts. The User model is designed to handle specific use cases " "for enhanced user management." msgstr "" -"מייצג ישות משתמש עם שדות ושיטות מותאמים אישית לפונקציונליות מורחבת. מחלקה זו" -" מרחיבה את המודל AbstractUser ומשלבת תכונות נוספות כגון כניסה מותאמת אישית " -"באמצעות דוא\"ל, שיטות אימות, מצב מנוי, אימות ואחסון תכונות. היא מספקת גם כלי" -" עזר לניהול פריטים שנצפו לאחרונה והפעלה מבוססת אסימון לאימות חשבונות. המודל " +"מייצג ישות משתמש עם שדות ושיטות מותאמים אישית לפונקציונליות מורחבת. מחלקה זו " +"מרחיבה את המודל AbstractUser ומשלבת תכונות נוספות כגון כניסה מותאמת אישית " +"באמצעות דוא\"ל, שיטות אימות, מצב מנוי, אימות ואחסון תכונות. היא מספקת גם כלי " +"עזר לניהול פריטים שנצפו לאחרונה והפעלה מבוססת אסימון לאימות חשבונות. המודל " "User נועד לטפל במקרי שימוש ספציפיים לניהול משתמשים משופר." #: engine/vibes_auth/models.py:51 @@ -479,11 +477,12 @@ msgstr "שלום %(user_first_name)s," #: engine/vibes_auth/templates/user_reset_password_email.html:92 msgid "" -"we have received a request to reset your password. please reset your password\n" +"we have received a request to reset your password. please reset your " +"password\n" " by clicking the button below:" msgstr "" -"קיבלנו בקשה לאיפוס הסיסמה שלך. אנא איפס את הסיסמה שלך על ידי לחיצה על הכפתור" -" שלהלן:" +"קיבלנו בקשה לאיפוס הסיסמה שלך. אנא איפס את הסיסמה שלך על ידי לחיצה על הכפתור " +"שלהלן:" #: engine/vibes_auth/templates/user_reset_password_email.html:95 msgid "reset password" @@ -559,8 +558,8 @@ msgstr "" #: engine/vibes_auth/views.py:30 msgid "" -"Represents a view for getting a pair of access and refresh tokens and user's" -" data. This view manages the process of handling token-based authentication " +"Represents a view for getting a pair of access and refresh tokens and user's " +"data. This view manages the process of handling token-based authentication " "where clients can get a pair of JWT tokens (access and refresh) using " "provided credentials. It is built on top of a base token view and ensures " "proper rate limiting to protect against brute force attacks." @@ -572,11 +571,11 @@ msgstr "" #: engine/vibes_auth/views.py:52 msgid "" -"Handles refreshing of tokens for authentication purposes. This class is used" -" to provide functionality for token refresh operations as part of an " -"authentication system. It ensures that clients can request a refreshed token" -" within defined rate limits. The view relies on the associated serializer to" -" validate token refresh inputs and produce appropriate outputs." +"Handles refreshing of tokens for authentication purposes. This class is used " +"to provide functionality for token refresh operations as part of an " +"authentication system. It ensures that clients can request a refreshed token " +"within defined rate limits. The view relies on the associated serializer to " +"validate token refresh inputs and produce appropriate outputs." msgstr "" "מטפל ברענון אסימונים למטרות אימות. מחלקה זו משמשת לספק פונקציונליות עבור " "פעולות רענון אסימונים כחלק ממערכת אימות. היא מבטיחה שלקוחות יוכלו לבקש " @@ -598,7 +597,10 @@ msgstr "האסימון אינו חוקי" #: engine/vibes_auth/viewsets.py:45 msgid "" "User view set implementation.\n" -"Provides a set of actions that manage user-related data such as creation, retrieval, updates, deletion, and custom actions including password reset, avatar upload, account activation, and recently viewed items merging. This class extends the mixins and GenericViewSet for robust API handling." +"Provides a set of actions that manage user-related data such as creation, " +"retrieval, updates, deletion, and custom actions including password reset, " +"avatar upload, account activation, and recently viewed items merging. This " +"class extends the mixins and GenericViewSet for robust API handling." msgstr "" "יישום הגדרת תצוגת משתמש. מספק סט פעולות לניהול נתונים הקשורים למשתמש, כגון " "יצירה, אחזור, עדכונים, מחיקה ופעולות מותאמות אישית, כולל איפוס סיסמה, העלאת " diff --git a/engine/vibes_auth/locale/hi_IN/LC_MESSAGES/django.po b/engine/vibes_auth/locale/hi_IN/LC_MESSAGES/django.po index d8c12024..271caaaa 100644 --- a/engine/vibes_auth/locale/hi_IN/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/hi_IN/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/vibes_auth/locale/hr_HR/LC_MESSAGES/django.po b/engine/vibes_auth/locale/hr_HR/LC_MESSAGES/django.po index 4cb8f73b..b0a8db27 100644 --- a/engine/vibes_auth/locale/hr_HR/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/hr_HR/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" diff --git a/engine/vibes_auth/locale/id_ID/LC_MESSAGES/django.po b/engine/vibes_auth/locale/id_ID/LC_MESSAGES/django.po index 9fed26ab..741e26aa 100644 --- a/engine/vibes_auth/locale/id_ID/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/id_ID/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -234,15 +234,14 @@ msgstr "Akun sudah diaktifkan..." msgid "something went wrong: {e!s}" msgstr "Ada yang tidak beres: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:324 -#: engine/vibes_auth/viewsets.py:95 +#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "Token tidak valid!" #: engine/vibes_auth/graphene/object_types.py:40 msgid "" -"the products this user has viewed most recently (max 48), in " -"reverse‐chronological order" +"the products this user has viewed most recently (max 48), in reverse‐" +"chronological order" msgstr "" "Produk yang terakhir dilihat pengguna ini (maksimal 48), dalam urutan " "kronologis terbalik." @@ -256,8 +255,7 @@ msgstr "Grup" msgid "wishlist" msgstr "Daftar keinginan" -#: engine/vibes_auth/graphene/object_types.py:47 -#: engine/vibes_auth/models.py:68 +#: engine/vibes_auth/graphene/object_types.py:47 engine/vibes_auth/models.py:68 msgid "avatar" msgstr "Avatar" @@ -268,11 +266,11 @@ msgstr "Atribut dapat digunakan untuk menyimpan data khusus" #: engine/vibes_auth/graphene/object_types.py:50 #, python-brace-format msgid "" -"language is one of the {settings.LANGUAGES} with default " -"{settings.LANGUAGE_CODE}" +"language is one of the {settings.LANGUAGES} with default {settings." +"LANGUAGE_CODE}" msgstr "" -"Bahasa adalah salah satu dari {settings.LANGUAGES} dengan default " -"{settings.LANGUAGE_CODE}" +"Bahasa adalah salah satu dari {settings.LANGUAGES} dengan default {settings." +"LANGUAGE_CODE}" #: engine/vibes_auth/graphene/object_types.py:52 msgid "address set" @@ -488,11 +486,12 @@ msgstr "Halo %(user_first_name)s," #: engine/vibes_auth/templates/user_reset_password_email.html:92 msgid "" -"we have received a request to reset your password. please reset your password\n" +"we have received a request to reset your password. please reset your " +"password\n" " by clicking the button below:" msgstr "" -"Kami telah menerima permintaan untuk mengatur ulang kata sandi Anda. Silakan" -" atur ulang kata sandi Anda dengan mengeklik tombol di bawah ini:" +"Kami telah menerima permintaan untuk mengatur ulang kata sandi Anda. Silakan " +"atur ulang kata sandi Anda dengan mengeklik tombol di bawah ini:" #: engine/vibes_auth/templates/user_reset_password_email.html:95 msgid "reset password" @@ -504,7 +503,8 @@ msgid "" "if the button above does not work, please copy and paste the following URL\n" " into your web browser:" msgstr "" -"Jika tombol di atas tidak berfungsi, silakan salin dan tempelkan URL berikut\n" +"Jika tombol di atas tidak berfungsi, silakan salin dan tempelkan URL " +"berikut\n" " ke dalam peramban web Anda:" #: engine/vibes_auth/templates/user_reset_password_email.html:100 @@ -572,8 +572,8 @@ msgstr "" #: engine/vibes_auth/views.py:30 msgid "" -"Represents a view for getting a pair of access and refresh tokens and user's" -" data. This view manages the process of handling token-based authentication " +"Represents a view for getting a pair of access and refresh tokens and user's " +"data. This view manages the process of handling token-based authentication " "where clients can get a pair of JWT tokens (access and refresh) using " "provided credentials. It is built on top of a base token view and ensures " "proper rate limiting to protect against brute force attacks." @@ -587,11 +587,11 @@ msgstr "" #: engine/vibes_auth/views.py:52 msgid "" -"Handles refreshing of tokens for authentication purposes. This class is used" -" to provide functionality for token refresh operations as part of an " -"authentication system. It ensures that clients can request a refreshed token" -" within defined rate limits. The view relies on the associated serializer to" -" validate token refresh inputs and produce appropriate outputs." +"Handles refreshing of tokens for authentication purposes. This class is used " +"to provide functionality for token refresh operations as part of an " +"authentication system. It ensures that clients can request a refreshed token " +"within defined rate limits. The view relies on the associated serializer to " +"validate token refresh inputs and produce appropriate outputs." msgstr "" "Menangani penyegaran token untuk tujuan otentikasi. Kelas ini digunakan " "untuk menyediakan fungsionalitas untuk operasi penyegaran token sebagai " @@ -615,10 +615,17 @@ msgstr "Token tidak valid" #: engine/vibes_auth/viewsets.py:45 msgid "" "User view set implementation.\n" -"Provides a set of actions that manage user-related data such as creation, retrieval, updates, deletion, and custom actions including password reset, avatar upload, account activation, and recently viewed items merging. This class extends the mixins and GenericViewSet for robust API handling." +"Provides a set of actions that manage user-related data such as creation, " +"retrieval, updates, deletion, and custom actions including password reset, " +"avatar upload, account activation, and recently viewed items merging. This " +"class extends the mixins and GenericViewSet for robust API handling." msgstr "" "Implementasi set tampilan pengguna.\n" -"Menyediakan serangkaian tindakan yang mengelola data terkait pengguna seperti pembuatan, pengambilan, pembaruan, penghapusan, dan tindakan khusus termasuk pengaturan ulang kata sandi, unggahan avatar, aktivasi akun, dan penggabungan item yang baru dilihat. Kelas ini memperluas mixin dan GenericViewSet untuk penanganan API yang kuat." +"Menyediakan serangkaian tindakan yang mengelola data terkait pengguna " +"seperti pembuatan, pengambilan, pembaruan, penghapusan, dan tindakan khusus " +"termasuk pengaturan ulang kata sandi, unggahan avatar, aktivasi akun, dan " +"penggabungan item yang baru dilihat. Kelas ini memperluas mixin dan " +"GenericViewSet untuk penanganan API yang kuat." #: engine/vibes_auth/viewsets.py:99 msgid "password reset successfully" diff --git a/engine/vibes_auth/locale/it_IT/LC_MESSAGES/django.po b/engine/vibes_auth/locale/it_IT/LC_MESSAGES/django.po index 3f676830..32508f33 100644 --- a/engine/vibes_auth/locale/it_IT/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/it_IT/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -99,8 +99,8 @@ msgid "" "Staff-only actions: list_open, assign, reply, close, ping. Unified event " "payloads are emitted." msgstr "" -"Azioni solo per il personale: list_open, assign, reply, close, ping. Vengono" -" emessi payload di eventi unificati." +"Azioni solo per il personale: list_open, assign, reply, close, ping. Vengono " +"emessi payload di eventi unificati." #: engine/vibes_auth/docs/drf/messaging.py:39 msgid "Per-thread staff channel" @@ -109,8 +109,7 @@ msgstr "Canale del personale per thread" #: engine/vibes_auth/docs/drf/messaging.py:40 msgid "Reply, close, and ping within a specific thread." msgstr "" -"Rispondere, chiudere e inviare ping all'interno di una discussione " -"specifica." +"Rispondere, chiudere e inviare ping all'interno di una discussione specifica." #: engine/vibes_auth/docs/drf/views.py:18 msgid "obtain a token pair" @@ -236,15 +235,14 @@ msgstr "L'account è già stato attivato..." msgid "something went wrong: {e!s}" msgstr "Qualcosa è andato storto: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:324 -#: engine/vibes_auth/viewsets.py:95 +#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "Il gettone non è valido!" #: engine/vibes_auth/graphene/object_types.py:40 msgid "" -"the products this user has viewed most recently (max 48), in " -"reverse‐chronological order" +"the products this user has viewed most recently (max 48), in reverse‐" +"chronological order" msgstr "" "I prodotti che questo utente ha visualizzato più di recente (max 48), in " "ordine cronologico inverso." @@ -258,8 +256,7 @@ msgstr "Gruppi" msgid "wishlist" msgstr "Lista dei desideri" -#: engine/vibes_auth/graphene/object_types.py:47 -#: engine/vibes_auth/models.py:68 +#: engine/vibes_auth/graphene/object_types.py:47 engine/vibes_auth/models.py:68 msgid "avatar" msgstr "Avatar" @@ -271,8 +268,8 @@ msgstr "" #: engine/vibes_auth/graphene/object_types.py:50 #, python-brace-format msgid "" -"language is one of the {settings.LANGUAGES} with default " -"{settings.LANGUAGE_CODE}" +"language is one of the {settings.LANGUAGES} with default {settings." +"LANGUAGE_CODE}" msgstr "" "La lingua è una delle {settings.LANGUAGES} con il codice predefinito " "{settings.LANGUAGE_CODE}." @@ -308,13 +305,13 @@ msgid "" "for enhanced user management." msgstr "" "Rappresenta un'entità Utente con campi e metodi personalizzati per " -"funzionalità estese. Questa classe estende il modello AbstractUser e integra" -" funzionalità aggiuntive come il login via e-mail personalizzato, i metodi " -"di convalida, lo stato di iscrizione, la verifica e la memorizzazione degli " +"funzionalità estese. Questa classe estende il modello AbstractUser e integra " +"funzionalità aggiuntive come il login via e-mail personalizzato, i metodi di " +"convalida, lo stato di iscrizione, la verifica e la memorizzazione degli " "attributi. Fornisce inoltre utilità per la gestione degli elementi " "visualizzati di recente e l'attivazione basata su token per la verifica " -"degli account. Il modello User è progettato per gestire casi d'uso specifici" -" per una migliore gestione degli utenti." +"degli account. Il modello User è progettato per gestire casi d'uso specifici " +"per una migliore gestione degli utenti." #: engine/vibes_auth/models.py:51 msgid "email" @@ -493,7 +490,8 @@ msgstr "Hello %(user_first_name)s," #: engine/vibes_auth/templates/user_reset_password_email.html:92 msgid "" -"we have received a request to reset your password. please reset your password\n" +"we have received a request to reset your password. please reset your " +"password\n" " by clicking the button below:" msgstr "" "Abbiamo ricevuto una richiesta di reimpostazione della password. La " @@ -577,8 +575,8 @@ msgstr "" #: engine/vibes_auth/views.py:30 msgid "" -"Represents a view for getting a pair of access and refresh tokens and user's" -" data. This view manages the process of handling token-based authentication " +"Represents a view for getting a pair of access and refresh tokens and user's " +"data. This view manages the process of handling token-based authentication " "where clients can get a pair of JWT tokens (access and refresh) using " "provided credentials. It is built on top of a base token view and ensures " "proper rate limiting to protect against brute force attacks." @@ -593,17 +591,17 @@ msgstr "" #: engine/vibes_auth/views.py:52 msgid "" -"Handles refreshing of tokens for authentication purposes. This class is used" -" to provide functionality for token refresh operations as part of an " -"authentication system. It ensures that clients can request a refreshed token" -" within defined rate limits. The view relies on the associated serializer to" -" validate token refresh inputs and produce appropriate outputs." +"Handles refreshing of tokens for authentication purposes. This class is used " +"to provide functionality for token refresh operations as part of an " +"authentication system. It ensures that clients can request a refreshed token " +"within defined rate limits. The view relies on the associated serializer to " +"validate token refresh inputs and produce appropriate outputs." msgstr "" "Gestisce l'aggiornamento dei token per l'autenticazione. Questa classe è " "utilizzata per fornire funzionalità per le operazioni di aggiornamento dei " "token come parte di un sistema di autenticazione. Garantisce che i client " -"possano richiedere un token aggiornato entro limiti di velocità definiti. La" -" vista si affida al serializzatore associato per convalidare gli input di " +"possano richiedere un token aggiornato entro limiti di velocità definiti. La " +"vista si affida al serializzatore associato per convalidare gli input di " "aggiornamento dei token e produrre output appropriati." #: engine/vibes_auth/views.py:75 @@ -621,10 +619,18 @@ msgstr "Il token non è valido" #: engine/vibes_auth/viewsets.py:45 msgid "" "User view set implementation.\n" -"Provides a set of actions that manage user-related data such as creation, retrieval, updates, deletion, and custom actions including password reset, avatar upload, account activation, and recently viewed items merging. This class extends the mixins and GenericViewSet for robust API handling." +"Provides a set of actions that manage user-related data such as creation, " +"retrieval, updates, deletion, and custom actions including password reset, " +"avatar upload, account activation, and recently viewed items merging. This " +"class extends the mixins and GenericViewSet for robust API handling." msgstr "" "Implementazione del set di viste utente.\n" -"Fornisce un insieme di azioni che gestiscono i dati relativi all'utente, come la creazione, il recupero, gli aggiornamenti, la cancellazione e le azioni personalizzate, tra cui la reimpostazione della password, il caricamento dell'avatar, l'attivazione dell'account e l'unione degli elementi visti di recente. Questa classe estende i mixin e GenericViewSet per una gestione robusta delle API." +"Fornisce un insieme di azioni che gestiscono i dati relativi all'utente, " +"come la creazione, il recupero, gli aggiornamenti, la cancellazione e le " +"azioni personalizzate, tra cui la reimpostazione della password, il " +"caricamento dell'avatar, l'attivazione dell'account e l'unione degli " +"elementi visti di recente. Questa classe estende i mixin e GenericViewSet " +"per una gestione robusta delle API." #: engine/vibes_auth/viewsets.py:99 msgid "password reset successfully" diff --git a/engine/vibes_auth/locale/ja_JP/LC_MESSAGES/django.po b/engine/vibes_auth/locale/ja_JP/LC_MESSAGES/django.po index 83c62b42..f0a841b1 100644 --- a/engine/vibes_auth/locale/ja_JP/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/ja_JP/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -86,7 +86,9 @@ msgstr "ユーザーメッセージのエントリーポイント" msgid "" "Anonymous or authenticated non-staff users send messages. Also supports " "action=ping." -msgstr "匿名または認証されたスタッフ以外のユーザーがメッセージを送信。action=pingもサポートしています。" +msgstr "" +"匿名または認証されたスタッフ以外のユーザーがメッセージを送信。action=pingもサ" +"ポートしています。" #: engine/vibes_auth/docs/drf/messaging.py:28 msgid "Staff inbox control" @@ -97,7 +99,8 @@ msgid "" "Staff-only actions: list_open, assign, reply, close, ping. Unified event " "payloads are emitted." msgstr "" -"スタッフのみのアクション: list_open、assign、reply、close、ping。統一されたイベントペイロードが発行されます。" +"スタッフのみのアクション: list_open、assign、reply、close、ping。統一されたイ" +"ベントペイロードが発行されます。" #: engine/vibes_auth/docs/drf/messaging.py:39 msgid "Per-thread staff channel" @@ -180,7 +183,9 @@ msgstr "ユーザーアカウントの有効化" #: engine/vibes_auth/docs/drf/viewsets.py:99 msgid "activation link is invalid or account already activated" -msgstr "アクティベーションリンクが無効であるか、アカウントがすでにアクティベーションされています。" +msgstr "" +"アクティベーションリンクが無効であるか、アカウントがすでにアクティベーション" +"されています。" #: engine/vibes_auth/docs/drf/viewsets.py:107 msgid "merge client-stored recently viewed products" @@ -228,15 +233,14 @@ msgstr "アカウントはすでに有効になっています..." msgid "something went wrong: {e!s}" msgstr "何かが間違っていた:{e!s}" -#: engine/vibes_auth/graphene/mutations.py:324 -#: engine/vibes_auth/viewsets.py:95 +#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "トークンが無効です!" #: engine/vibes_auth/graphene/object_types.py:40 msgid "" -"the products this user has viewed most recently (max 48), in " -"reverse‐chronological order" +"the products this user has viewed most recently (max 48), in reverse‐" +"chronological order" msgstr "このユーザーが最近閲覧した商品(最大48件)を逆順に表示します。" #: engine/vibes_auth/graphene/object_types.py:42 @@ -248,8 +252,7 @@ msgstr "グループ" msgid "wishlist" msgstr "ウィッシュリスト" -#: engine/vibes_auth/graphene/object_types.py:47 -#: engine/vibes_auth/models.py:68 +#: engine/vibes_auth/graphene/object_types.py:47 engine/vibes_auth/models.py:68 msgid "avatar" msgstr "アバター" @@ -260,9 +263,11 @@ msgstr "属性は、カスタム・データを保存するために使用する #: engine/vibes_auth/graphene/object_types.py:50 #, python-brace-format msgid "" -"language is one of the {settings.LANGUAGES} with default " -"{settings.LANGUAGE_CODE}" -msgstr "言語は {settings.LANGUAGES} のいずれかで、デフォルトは {settings.LANGUAGE_CODE} です。" +"language is one of the {settings.LANGUAGES} with default {settings." +"LANGUAGE_CODE}" +msgstr "" +"言語は {settings.LANGUAGES} のいずれかで、デフォルトは {settings." +"LANGUAGE_CODE} です。" #: engine/vibes_auth/graphene/object_types.py:52 msgid "address set" @@ -294,8 +299,12 @@ msgid "" "verifying accounts. The User model is designed to handle specific use cases " "for enhanced user management." msgstr "" -"拡張機能のためにカスタマイズされたフィールドとメソッドを持つ User エンティティを表します。このクラスは AbstractUser " -"モデルを拡張し、カスタムメールログイン、検証メソッド、購読ステータス、検証、属性保存などの追加機能を統合しています。また、最近閲覧したアイテムを管理するユーティリティや、アカウントを検証するためのトークンベースのアクティベーションも提供します。Userモデルは、ユーザ管理を強化するための特定のユースケースを扱うように設計されています。" +"拡張機能のためにカスタマイズされたフィールドとメソッドを持つ User エンティ" +"ティを表します。このクラスは AbstractUser モデルを拡張し、カスタムメールログ" +"イン、検証メソッド、購読ステータス、検証、属性保存などの追加機能を統合してい" +"ます。また、最近閲覧したアイテムを管理するユーティリティや、アカウントを検証" +"するためのトークンベースのアクティベーションも提供します。Userモデルは、ユー" +"ザ管理を強化するための特定のユースケースを扱うように設計されています。" #: engine/vibes_auth/models.py:51 msgid "email" @@ -472,9 +481,12 @@ msgstr "こんにちは %(user_first_name)s," #: engine/vibes_auth/templates/user_reset_password_email.html:92 msgid "" -"we have received a request to reset your password. please reset your password\n" +"we have received a request to reset your password. please reset your " +"password\n" " by clicking the button below:" -msgstr "パスワードの再設定依頼が届いております。以下のボタンをクリックして、パスワードをリセットしてください:" +msgstr "" +"パスワードの再設定依頼が届いております。以下のボタンをクリックして、パスワー" +"ドをリセットしてください:" #: engine/vibes_auth/templates/user_reset_password_email.html:95 msgid "reset password" @@ -486,7 +498,8 @@ msgid "" "if the button above does not work, please copy and paste the following URL\n" " into your web browser:" msgstr "" -"上記のボタンが機能しない場合は、次のURLをコピーしてウェブブラウザに貼り付けてください。\n" +"上記のボタンが機能しない場合は、次のURLをコピーしてウェブブラウザに貼り付けて" +"ください。\n" " をウェブブラウザに貼り付けてください:" #: engine/vibes_auth/templates/user_reset_password_email.html:100 @@ -517,7 +530,9 @@ msgstr "アカウントの有効化" msgid "" "thank you for signing up for %(project_name)s. please activate your account\n" " by clicking the button below:" -msgstr "%(project_name)sにご登録いただきありがとうございます。下のボタンをクリックしてアカウントを有効にしてください:" +msgstr "" +"%(project_name)sにご登録いただきありがとうございます。下のボタンをクリックし" +"てアカウントを有効にしてください:" #: engine/vibes_auth/templates/user_verification_email.html:96 msgid "" @@ -546,36 +561,45 @@ msgstr "{settings.PROJECT_NAME}| パスワードのリセット" msgid "" "invalid phone number format. the number must be entered in the format: " "\"+999999999\". up to 15 digits allowed." -msgstr "電話番号の形式が無効です。電話番号は次の形式で入力してください:\"+999999999\".15桁まで入力可能です。" +msgstr "" +"電話番号の形式が無効です。電話番号は次の形式で入力してください:" +"\"+999999999\".15桁まで入力可能です。" #: engine/vibes_auth/views.py:30 msgid "" -"Represents a view for getting a pair of access and refresh tokens and user's" -" data. This view manages the process of handling token-based authentication " +"Represents a view for getting a pair of access and refresh tokens and user's " +"data. This view manages the process of handling token-based authentication " "where clients can get a pair of JWT tokens (access and refresh) using " "provided credentials. It is built on top of a base token view and ensures " "proper rate limiting to protect against brute force attacks." msgstr "" -"アクセストークンとリフレッシュトークンのペアとユーザーデータを取得するためのビューを表します。このビューは、クライアントが提供されたクレデンシャルを使用して" -" JWT " -"トークンのペア(アクセスとリフレッシュ)を取得できる、トークン・ベースの認証を処理するプロセスを管理します。ベースのトークンビューの上に構築され、ブルートフォース攻撃から保護するために適切なレート制限を保証します。" +"アクセストークンとリフレッシュトークンのペアとユーザーデータを取得するための" +"ビューを表します。このビューは、クライアントが提供されたクレデンシャルを使用" +"して JWT トークンのペア(アクセスとリフレッシュ)を取得できる、トークン・ベー" +"スの認証を処理するプロセスを管理します。ベースのトークンビューの上に構築さ" +"れ、ブルートフォース攻撃から保護するために適切なレート制限を保証します。" #: engine/vibes_auth/views.py:52 msgid "" -"Handles refreshing of tokens for authentication purposes. This class is used" -" to provide functionality for token refresh operations as part of an " -"authentication system. It ensures that clients can request a refreshed token" -" within defined rate limits. The view relies on the associated serializer to" -" validate token refresh inputs and produce appropriate outputs." +"Handles refreshing of tokens for authentication purposes. This class is used " +"to provide functionality for token refresh operations as part of an " +"authentication system. It ensures that clients can request a refreshed token " +"within defined rate limits. The view relies on the associated serializer to " +"validate token refresh inputs and produce appropriate outputs." msgstr "" -"認証目的のトークンのリフレッシュを処理します。このクラスは、認証システムの一部としてトークンのリフレッシュ操作の機能を提供するために使用されます。このクラスは、クライアントがリフレッシュされたトークンを定義されたレート制限内で要求できるようにします。ビューは、トークン更新の入力を検証して適切な出力を行うために、" -" 関連するシリアライザに依存します。" +"認証目的のトークンのリフレッシュを処理します。このクラスは、認証システムの一" +"部としてトークンのリフレッシュ操作の機能を提供するために使用されます。このク" +"ラスは、クライアントがリフレッシュされたトークンを定義されたレート制限内で要" +"求できるようにします。ビューは、トークン更新の入力を検証して適切な出力を行う" +"ために、 関連するシリアライザに依存します。" #: engine/vibes_auth/views.py:75 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " -msgstr "特定のシリアライズと検証ロジックを使用して JSON ウェブトークン (JWT) を検証するビューを表します。" +msgstr "" +"特定のシリアライズと検証ロジックを使用して JSON ウェブトークン (JWT) を検証す" +"るビューを表します。" #: engine/vibes_auth/views.py:92 msgid "the token is invalid" @@ -584,10 +608,16 @@ msgstr "トークンが無効" #: engine/vibes_auth/viewsets.py:45 msgid "" "User view set implementation.\n" -"Provides a set of actions that manage user-related data such as creation, retrieval, updates, deletion, and custom actions including password reset, avatar upload, account activation, and recently viewed items merging. This class extends the mixins and GenericViewSet for robust API handling." +"Provides a set of actions that manage user-related data such as creation, " +"retrieval, updates, deletion, and custom actions including password reset, " +"avatar upload, account activation, and recently viewed items merging. This " +"class extends the mixins and GenericViewSet for robust API handling." msgstr "" "ユーザービューセットの実装。\n" -"作成、取得、更新、削除、およびパスワードリセット、アバターアップロード、アカウントの有効化、最近見たアイテムのマージなどのカスタムアクションなど、ユーザ関連のデータを管理するアクションのセットを提供します。このクラスは、堅牢なAPIハンドリングのためにミキシンとGenericViewSetを拡張します。" +"作成、取得、更新、削除、およびパスワードリセット、アバターアップロード、アカ" +"ウントの有効化、最近見たアイテムのマージなどのカスタムアクションなど、ユーザ" +"関連のデータを管理するアクションのセットを提供します。このクラスは、堅牢なAPI" +"ハンドリングのためにミキシンとGenericViewSetを拡張します。" #: engine/vibes_auth/viewsets.py:99 msgid "password reset successfully" diff --git a/engine/vibes_auth/locale/kk_KZ/LC_MESSAGES/django.po b/engine/vibes_auth/locale/kk_KZ/LC_MESSAGES/django.po index d8c12024..271caaaa 100644 --- a/engine/vibes_auth/locale/kk_KZ/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/kk_KZ/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" diff --git a/engine/vibes_auth/locale/ko_KR/LC_MESSAGES/django.po b/engine/vibes_auth/locale/ko_KR/LC_MESSAGES/django.po index b19498eb..45aa3933 100644 --- a/engine/vibes_auth/locale/ko_KR/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/ko_KR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -86,7 +86,8 @@ msgstr "사용자 메시지 진입점" msgid "" "Anonymous or authenticated non-staff users send messages. Also supports " "action=ping." -msgstr "익명 또는 인증된 비직원 사용자가 메시지를 보냅니다. action=ping도 지원합니다." +msgstr "" +"익명 또는 인증된 비직원 사용자가 메시지를 보냅니다. action=ping도 지원합니다." #: engine/vibes_auth/docs/drf/messaging.py:28 msgid "Staff inbox control" @@ -96,7 +97,9 @@ msgstr "직원 받은 편지함 제어" msgid "" "Staff-only actions: list_open, assign, reply, close, ping. Unified event " "payloads are emitted." -msgstr "직원 전용 작업: 목록 열기, 할당하기, 답장하기, 닫기, 핑하기. 통합 이벤트 페이로드가 전송됩니다." +msgstr "" +"직원 전용 작업: 목록 열기, 할당하기, 답장하기, 닫기, 핑하기. 통합 이벤트 페이" +"로드가 전송됩니다." #: engine/vibes_auth/docs/drf/messaging.py:39 msgid "Per-thread staff channel" @@ -227,15 +230,14 @@ msgstr "계정이 이미 활성화되었습니다..." msgid "something went wrong: {e!s}" msgstr "문제가 발생했습니다: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:324 -#: engine/vibes_auth/viewsets.py:95 +#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "토큰이 유효하지 않습니다!" #: engine/vibes_auth/graphene/object_types.py:40 msgid "" -"the products this user has viewed most recently (max 48), in " -"reverse‐chronological order" +"the products this user has viewed most recently (max 48), in reverse‐" +"chronological order" msgstr "이 사용자가 가장 최근에 본 제품(최대 48개)을 시간 역순으로 표시합니다." #: engine/vibes_auth/graphene/object_types.py:42 @@ -247,8 +249,7 @@ msgstr "그룹" msgid "wishlist" msgstr "위시리스트" -#: engine/vibes_auth/graphene/object_types.py:47 -#: engine/vibes_auth/models.py:68 +#: engine/vibes_auth/graphene/object_types.py:47 engine/vibes_auth/models.py:68 msgid "avatar" msgstr "아바타" @@ -259,9 +260,11 @@ msgstr "속성을 사용하여 사용자 지정 데이터를 저장할 수 있 #: engine/vibes_auth/graphene/object_types.py:50 #, python-brace-format msgid "" -"language is one of the {settings.LANGUAGES} with default " -"{settings.LANGUAGE_CODE}" -msgstr "언어는 {settings.LANGUAGES} 중 하나이며 기본값은 {settings.LANGUAGE_CODE}입니다." +"language is one of the {settings.LANGUAGES} with default {settings." +"LANGUAGE_CODE}" +msgstr "" +"언어는 {settings.LANGUAGES} 중 하나이며 기본값은 {settings.LANGUAGE_CODE}입니" +"다." #: engine/vibes_auth/graphene/object_types.py:52 msgid "address set" @@ -293,10 +296,12 @@ msgid "" "verifying accounts. The User model is designed to handle specific use cases " "for enhanced user management." msgstr "" -"확장 기능을 위한 사용자 정의 필드 및 메서드가 있는 사용자 엔티티를 나타냅니다. 이 클래스는 AbstractUser 모델을 확장하여 " -"사용자 지정 이메일 로그인, 유효성 검사 방법, 가입 상태, 인증 및 속성 저장과 같은 추가 기능을 통합합니다. 또한 최근에 본 항목을 " -"관리하기 위한 유틸리티와 계정 인증을 위한 토큰 기반 활성화도 제공합니다. 사용자 모델은 향상된 사용자 관리를 위한 특정 사용 사례를 " -"처리하도록 설계되었습니다." +"확장 기능을 위한 사용자 정의 필드 및 메서드가 있는 사용자 엔티티를 나타냅니" +"다. 이 클래스는 AbstractUser 모델을 확장하여 사용자 지정 이메일 로그인, 유효" +"성 검사 방법, 가입 상태, 인증 및 속성 저장과 같은 추가 기능을 통합합니다. 또" +"한 최근에 본 항목을 관리하기 위한 유틸리티와 계정 인증을 위한 토큰 기반 활성" +"화도 제공합니다. 사용자 모델은 향상된 사용자 관리를 위한 특정 사용 사례를 처" +"리하도록 설계되었습니다." #: engine/vibes_auth/models.py:51 msgid "email" @@ -473,9 +478,12 @@ msgstr "안녕하세요 %(user_first_name)s," #: engine/vibes_auth/templates/user_reset_password_email.html:92 msgid "" -"we have received a request to reset your password. please reset your password\n" +"we have received a request to reset your password. please reset your " +"password\n" " by clicking the button below:" -msgstr "비밀번호 재설정 요청을 받았습니다. 아래 버튼을 클릭하여 비밀번호를 재설정하세요:" +msgstr "" +"비밀번호 재설정 요청을 받았습니다. 아래 버튼을 클릭하여 비밀번호를 재설정하세" +"요:" #: engine/vibes_auth/templates/user_reset_password_email.html:95 msgid "reset password" @@ -518,7 +526,9 @@ msgstr "계정 활성화" msgid "" "thank you for signing up for %(project_name)s. please activate your account\n" " by clicking the button below:" -msgstr "가입해 주셔서 감사합니다 %(project_name)s. 아래 버튼을 클릭하여 계정을 활성화하세요:" +msgstr "" +"가입해 주셔서 감사합니다 %(project_name)s. 아래 버튼을 클릭하여 계정을 활성화" +"하세요:" #: engine/vibes_auth/templates/user_verification_email.html:96 msgid "" @@ -548,38 +558,44 @@ msgid "" "invalid phone number format. the number must be entered in the format: " "\"+999999999\". up to 15 digits allowed." msgstr "" -"잘못된 전화번호 형식입니다. 번호는 다음과 같은 형식으로 입력해야 합니다: \"+999999999\". 최대 15자리까지 입력할 수 " -"있습니다." +"잘못된 전화번호 형식입니다. 번호는 다음과 같은 형식으로 입력해야 합니다: " +"\"+999999999\". 최대 15자리까지 입력할 수 있습니다." #: engine/vibes_auth/views.py:30 msgid "" -"Represents a view for getting a pair of access and refresh tokens and user's" -" data. This view manages the process of handling token-based authentication " +"Represents a view for getting a pair of access and refresh tokens and user's " +"data. This view manages the process of handling token-based authentication " "where clients can get a pair of JWT tokens (access and refresh) using " "provided credentials. It is built on top of a base token view and ensures " "proper rate limiting to protect against brute force attacks." msgstr "" -"액세스 및 새로 고침 토큰과 사용자 데이터 쌍을 가져오기 위한 보기를 나타냅니다. 이 보기는 클라이언트가 제공된 자격 증명을 사용하여 한" -" 쌍의 JWT 토큰(액세스 및 새로 고침)을 얻을 수 있는 토큰 기반 인증을 처리하는 프로세스를 관리합니다. 기본 토큰 보기 위에 " -"구축되며 무차별 암호 대입 공격으로부터 보호하기 위해 적절한 속도 제한을 보장합니다." +"액세스 및 새로 고침 토큰과 사용자 데이터 쌍을 가져오기 위한 보기를 나타냅니" +"다. 이 보기는 클라이언트가 제공된 자격 증명을 사용하여 한 쌍의 JWT 토큰(액세" +"스 및 새로 고침)을 얻을 수 있는 토큰 기반 인증을 처리하는 프로세스를 관리합니" +"다. 기본 토큰 보기 위에 구축되며 무차별 암호 대입 공격으로부터 보호하기 위해 " +"적절한 속도 제한을 보장합니다." #: engine/vibes_auth/views.py:52 msgid "" -"Handles refreshing of tokens for authentication purposes. This class is used" -" to provide functionality for token refresh operations as part of an " -"authentication system. It ensures that clients can request a refreshed token" -" within defined rate limits. The view relies on the associated serializer to" -" validate token refresh inputs and produce appropriate outputs." +"Handles refreshing of tokens for authentication purposes. This class is used " +"to provide functionality for token refresh operations as part of an " +"authentication system. It ensures that clients can request a refreshed token " +"within defined rate limits. The view relies on the associated serializer to " +"validate token refresh inputs and produce appropriate outputs." msgstr "" -"인증 목적으로 토큰을 새로 고치는 작업을 처리합니다. 이 클래스는 인증 시스템의 일부로 토큰 새로 고침 작업을 위한 기능을 제공하는 데 " -"사용됩니다. 클라이언트가 정의된 속도 제한 내에서 토큰 새로 고침을 요청할 수 있도록 합니다. 이 보기는 연결된 직렬화기에 의존하여 토큰" -" 새로 고침 입력의 유효성을 검사하고 적절한 출력을 생성합니다." +"인증 목적으로 토큰을 새로 고치는 작업을 처리합니다. 이 클래스는 인증 시스템" +"의 일부로 토큰 새로 고침 작업을 위한 기능을 제공하는 데 사용됩니다. 클라이언" +"트가 정의된 속도 제한 내에서 토큰 새로 고침을 요청할 수 있도록 합니다. 이 보" +"기는 연결된 직렬화기에 의존하여 토큰 새로 고침 입력의 유효성을 검사하고 적절" +"한 출력을 생성합니다." #: engine/vibes_auth/views.py:75 msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " -msgstr "특정 직렬화 및 유효성 검사 로직을 사용하여 JSON 웹 토큰(JWT)을 확인하기 위한 보기를 나타냅니다." +msgstr "" +"특정 직렬화 및 유효성 검사 로직을 사용하여 JSON 웹 토큰(JWT)을 확인하기 위한 " +"보기를 나타냅니다." #: engine/vibes_auth/views.py:92 msgid "the token is invalid" @@ -588,10 +604,16 @@ msgstr "토큰이 유효하지 않습니다." #: engine/vibes_auth/viewsets.py:45 msgid "" "User view set implementation.\n" -"Provides a set of actions that manage user-related data such as creation, retrieval, updates, deletion, and custom actions including password reset, avatar upload, account activation, and recently viewed items merging. This class extends the mixins and GenericViewSet for robust API handling." +"Provides a set of actions that manage user-related data such as creation, " +"retrieval, updates, deletion, and custom actions including password reset, " +"avatar upload, account activation, and recently viewed items merging. This " +"class extends the mixins and GenericViewSet for robust API handling." msgstr "" "사용자 보기 세트 구현.\n" -"생성, 검색, 업데이트, 삭제, 비밀번호 재설정, 아바타 업로드, 계정 활성화, 최근에 본 항목 병합 등의 사용자 관련 데이터와 사용자 지정 작업을 관리하는 일련의 작업을 제공합니다. 이 클래스는 강력한 API 처리를 위해 믹스인 및 GenericViewSet을 확장합니다." +"생성, 검색, 업데이트, 삭제, 비밀번호 재설정, 아바타 업로드, 계정 활성화, 최근" +"에 본 항목 병합 등의 사용자 관련 데이터와 사용자 지정 작업을 관리하는 일련의 " +"작업을 제공합니다. 이 클래스는 강력한 API 처리를 위해 믹스인 및 " +"GenericViewSet을 확장합니다." #: engine/vibes_auth/viewsets.py:99 msgid "password reset successfully" diff --git a/engine/vibes_auth/locale/nl_NL/LC_MESSAGES/django.po b/engine/vibes_auth/locale/nl_NL/LC_MESSAGES/django.po index 10048f8c..0d57b651 100644 --- a/engine/vibes_auth/locale/nl_NL/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/nl_NL/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -235,15 +235,14 @@ msgstr "Account is al geactiveerd..." msgid "something went wrong: {e!s}" msgstr "Er ging iets mis: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:324 -#: engine/vibes_auth/viewsets.py:95 +#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "Token is invalid!" #: engine/vibes_auth/graphene/object_types.py:40 msgid "" -"the products this user has viewed most recently (max 48), in " -"reverse‐chronological order" +"the products this user has viewed most recently (max 48), in reverse‐" +"chronological order" msgstr "" "De producten die deze gebruiker het laatst heeft bekeken (max 48), in " "omgekeerd-chronologische volgorde." @@ -257,8 +256,7 @@ msgstr "Groepen" msgid "wishlist" msgstr "Verlanglijst" -#: engine/vibes_auth/graphene/object_types.py:47 -#: engine/vibes_auth/models.py:68 +#: engine/vibes_auth/graphene/object_types.py:47 engine/vibes_auth/models.py:68 msgid "avatar" msgstr "Avatar" @@ -269,11 +267,11 @@ msgstr "Attributen kunnen worden gebruikt om aangepaste gegevens op te slaan" #: engine/vibes_auth/graphene/object_types.py:50 #, python-brace-format msgid "" -"language is one of the {settings.LANGUAGES} with default " -"{settings.LANGUAGE_CODE}" +"language is one of the {settings.LANGUAGES} with default {settings." +"LANGUAGE_CODE}" msgstr "" -"Taal is een van de {settings.LANGUAGES} met standaard " -"{settings.LANGUAGE_CODE}" +"Taal is een van de {settings.LANGUAGES} met standaard {settings." +"LANGUAGE_CODE}" #: engine/vibes_auth/graphene/object_types.py:52 msgid "address set" @@ -490,11 +488,12 @@ msgstr "Hallo %(user_first_name)s," #: engine/vibes_auth/templates/user_reset_password_email.html:92 msgid "" -"we have received a request to reset your password. please reset your password\n" +"we have received a request to reset your password. please reset your " +"password\n" " by clicking the button below:" msgstr "" -"We hebben een verzoek ontvangen om je wachtwoord opnieuw in te stellen. Klik" -" op de knop hieronder om je wachtwoord opnieuw in te stellen:" +"We hebben een verzoek ontvangen om je wachtwoord opnieuw in te stellen. Klik " +"op de knop hieronder om je wachtwoord opnieuw in te stellen:" #: engine/vibes_auth/templates/user_reset_password_email.html:95 msgid "reset password" @@ -538,8 +537,8 @@ msgid "" "thank you for signing up for %(project_name)s. please activate your account\n" " by clicking the button below:" msgstr "" -"Bedankt voor het aanmelden bij %(project_name)s. Activeer je account door op" -" de onderstaande knop te klikken:" +"Bedankt voor het aanmelden bij %(project_name)s. Activeer je account door op " +"de onderstaande knop te klikken:" #: engine/vibes_auth/templates/user_verification_email.html:96 msgid "" @@ -574,8 +573,8 @@ msgstr "" #: engine/vibes_auth/views.py:30 msgid "" -"Represents a view for getting a pair of access and refresh tokens and user's" -" data. This view manages the process of handling token-based authentication " +"Represents a view for getting a pair of access and refresh tokens and user's " +"data. This view manages the process of handling token-based authentication " "where clients can get a pair of JWT tokens (access and refresh) using " "provided credentials. It is built on top of a base token view and ensures " "proper rate limiting to protect against brute force attacks." @@ -584,16 +583,16 @@ msgstr "" "verversingstokens en gebruikersgegevens. Deze weergave beheert het proces " "van het afhandelen van authenticatie op basis van tokens, waarbij clients " "een paar JWT-tokens kunnen krijgen (toegang en verversen) met behulp van " -"verstrekte referenties. Het is gebouwd bovenop een basis token view en zorgt" -" voor een goede rate limiting om te beschermen tegen brute force aanvallen." +"verstrekte referenties. Het is gebouwd bovenop een basis token view en zorgt " +"voor een goede rate limiting om te beschermen tegen brute force aanvallen." #: engine/vibes_auth/views.py:52 msgid "" -"Handles refreshing of tokens for authentication purposes. This class is used" -" to provide functionality for token refresh operations as part of an " -"authentication system. It ensures that clients can request a refreshed token" -" within defined rate limits. The view relies on the associated serializer to" -" validate token refresh inputs and produce appropriate outputs." +"Handles refreshing of tokens for authentication purposes. This class is used " +"to provide functionality for token refresh operations as part of an " +"authentication system. It ensures that clients can request a refreshed token " +"within defined rate limits. The view relies on the associated serializer to " +"validate token refresh inputs and produce appropriate outputs." msgstr "" "Ververst tokens voor authenticatiedoeleinden. Deze klasse wordt gebruikt om " "functionaliteit te bieden voor het verversen van tokens als onderdeel van " @@ -617,10 +616,17 @@ msgstr "Het token is ongeldig" #: engine/vibes_auth/viewsets.py:45 msgid "" "User view set implementation.\n" -"Provides a set of actions that manage user-related data such as creation, retrieval, updates, deletion, and custom actions including password reset, avatar upload, account activation, and recently viewed items merging. This class extends the mixins and GenericViewSet for robust API handling." +"Provides a set of actions that manage user-related data such as creation, " +"retrieval, updates, deletion, and custom actions including password reset, " +"avatar upload, account activation, and recently viewed items merging. This " +"class extends the mixins and GenericViewSet for robust API handling." msgstr "" "Implementatie van gebruikersviewset.\n" -"Biedt een set acties voor het beheren van gebruikersgerelateerde gegevens zoals aanmaken, opvragen, bijwerken, verwijderen en aangepaste acties zoals wachtwoord opnieuw instellen, avatar uploaden, account activeren en onlangs bekeken items samenvoegen. Deze klasse breidt de mixins en GenericViewSet uit voor robuuste API afhandeling." +"Biedt een set acties voor het beheren van gebruikersgerelateerde gegevens " +"zoals aanmaken, opvragen, bijwerken, verwijderen en aangepaste acties zoals " +"wachtwoord opnieuw instellen, avatar uploaden, account activeren en onlangs " +"bekeken items samenvoegen. Deze klasse breidt de mixins en GenericViewSet " +"uit voor robuuste API afhandeling." #: engine/vibes_auth/viewsets.py:99 msgid "password reset successfully" diff --git a/engine/vibes_auth/locale/no_NO/LC_MESSAGES/django.po b/engine/vibes_auth/locale/no_NO/LC_MESSAGES/django.po index 4c616970..d615c160 100644 --- a/engine/vibes_auth/locale/no_NO/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/no_NO/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -87,8 +87,8 @@ msgid "" "Anonymous or authenticated non-staff users send messages. Also supports " "action=ping." msgstr "" -"Anonyme eller autentiserte ikke-ansatte brukere kan sende meldinger. Støtter" -" også action=ping." +"Anonyme eller autentiserte ikke-ansatte brukere kan sende meldinger. Støtter " +"også action=ping." #: engine/vibes_auth/docs/drf/messaging.py:28 msgid "Staff inbox control" @@ -99,8 +99,8 @@ msgid "" "Staff-only actions: list_open, assign, reply, close, ping. Unified event " "payloads are emitted." msgstr "" -"Kun personalhandlinger: list_open, assign, reply, close, ping. Unified event" -" payloads sendes ut." +"Kun personalhandlinger: list_open, assign, reply, close, ping. Unified event " +"payloads sendes ut." #: engine/vibes_auth/docs/drf/messaging.py:39 msgid "Per-thread staff channel" @@ -233,15 +233,14 @@ msgstr "Kontoen er allerede aktivert..." msgid "something went wrong: {e!s}" msgstr "Noe gikk galt: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:324 -#: engine/vibes_auth/viewsets.py:95 +#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "Tokenet er ugyldig!" #: engine/vibes_auth/graphene/object_types.py:40 msgid "" -"the products this user has viewed most recently (max 48), in " -"reverse‐chronological order" +"the products this user has viewed most recently (max 48), in reverse‐" +"chronological order" msgstr "" "Produktene som denne brukeren har sett på sist (maks. 48), i omvendt " "kronologisk rekkefølge." @@ -255,8 +254,7 @@ msgstr "Grupper" msgid "wishlist" msgstr "Ønskeliste" -#: engine/vibes_auth/graphene/object_types.py:47 -#: engine/vibes_auth/models.py:68 +#: engine/vibes_auth/graphene/object_types.py:47 engine/vibes_auth/models.py:68 msgid "avatar" msgstr "Avatar" @@ -267,8 +265,8 @@ msgstr "Attributter kan brukes til å lagre egendefinerte data" #: engine/vibes_auth/graphene/object_types.py:50 #, python-brace-format msgid "" -"language is one of the {settings.LANGUAGES} with default " -"{settings.LANGUAGE_CODE}" +"language is one of the {settings.LANGUAGES} with default {settings." +"LANGUAGE_CODE}" msgstr "" "Språket er en av {settings.LANGUAGES} med standard {settings.LANGUAGE_CODE}." @@ -486,7 +484,8 @@ msgstr "Hallo %(user_first_name)s," #: engine/vibes_auth/templates/user_reset_password_email.html:92 msgid "" -"we have received a request to reset your password. please reset your password\n" +"we have received a request to reset your password. please reset your " +"password\n" " by clicking the button below:" msgstr "" "Vi har mottatt en forespørsel om å tilbakestille passordet ditt. Vennligst " @@ -570,26 +569,26 @@ msgstr "" #: engine/vibes_auth/views.py:30 msgid "" -"Represents a view for getting a pair of access and refresh tokens and user's" -" data. This view manages the process of handling token-based authentication " +"Represents a view for getting a pair of access and refresh tokens and user's " +"data. This view manages the process of handling token-based authentication " "where clients can get a pair of JWT tokens (access and refresh) using " "provided credentials. It is built on top of a base token view and ensures " "proper rate limiting to protect against brute force attacks." msgstr "" -"Representerer en visning for å hente et par tilgangs- og oppdateringstokener" -" og brukerdata. Denne visningen administrerer prosessen med å håndtere " -"tokenbasert autentisering, der klienter kan hente et par JWT-tokens (tilgang" -" og oppdatering) ved hjelp av oppgitt legitimasjon. Den er bygget på toppen " -"av en grunnleggende token-visning og sørger for riktig hastighetsbegrensning" -" for å beskytte mot brute force-angrep." +"Representerer en visning for å hente et par tilgangs- og oppdateringstokener " +"og brukerdata. Denne visningen administrerer prosessen med å håndtere " +"tokenbasert autentisering, der klienter kan hente et par JWT-tokens (tilgang " +"og oppdatering) ved hjelp av oppgitt legitimasjon. Den er bygget på toppen " +"av en grunnleggende token-visning og sørger for riktig hastighetsbegrensning " +"for å beskytte mot brute force-angrep." #: engine/vibes_auth/views.py:52 msgid "" -"Handles refreshing of tokens for authentication purposes. This class is used" -" to provide functionality for token refresh operations as part of an " -"authentication system. It ensures that clients can request a refreshed token" -" within defined rate limits. The view relies on the associated serializer to" -" validate token refresh inputs and produce appropriate outputs." +"Handles refreshing of tokens for authentication purposes. This class is used " +"to provide functionality for token refresh operations as part of an " +"authentication system. It ensures that clients can request a refreshed token " +"within defined rate limits. The view relies on the associated serializer to " +"validate token refresh inputs and produce appropriate outputs." msgstr "" "Håndterer oppdatering av tokens for autentiseringsformål. Denne klassen " "brukes til å tilby funksjonalitet for tokenoppdatering som en del av et " @@ -603,8 +602,8 @@ msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " msgstr "" -"Representerer en visning for verifisering av JSON Web Tokens (JWT) ved hjelp" -" av spesifikk serialiserings- og valideringslogikk." +"Representerer en visning for verifisering av JSON Web Tokens (JWT) ved hjelp " +"av spesifikk serialiserings- og valideringslogikk." #: engine/vibes_auth/views.py:92 msgid "the token is invalid" @@ -613,10 +612,17 @@ msgstr "Tokenet er ugyldig" #: engine/vibes_auth/viewsets.py:45 msgid "" "User view set implementation.\n" -"Provides a set of actions that manage user-related data such as creation, retrieval, updates, deletion, and custom actions including password reset, avatar upload, account activation, and recently viewed items merging. This class extends the mixins and GenericViewSet for robust API handling." +"Provides a set of actions that manage user-related data such as creation, " +"retrieval, updates, deletion, and custom actions including password reset, " +"avatar upload, account activation, and recently viewed items merging. This " +"class extends the mixins and GenericViewSet for robust API handling." msgstr "" "Implementering av brukervisningssett.\n" -"Tilbyr et sett med handlinger som håndterer brukerrelaterte data som oppretting, henting, oppdateringer, sletting og egendefinerte handlinger, inkludert tilbakestilling av passord, opplasting av avatar, kontoaktivering og sammenslåing av nylig viste elementer. Denne klassen utvider mixins og GenericViewSet for robust API-håndtering." +"Tilbyr et sett med handlinger som håndterer brukerrelaterte data som " +"oppretting, henting, oppdateringer, sletting og egendefinerte handlinger, " +"inkludert tilbakestilling av passord, opplasting av avatar, kontoaktivering " +"og sammenslåing av nylig viste elementer. Denne klassen utvider mixins og " +"GenericViewSet for robust API-håndtering." #: engine/vibes_auth/viewsets.py:99 msgid "password reset successfully" diff --git a/engine/vibes_auth/locale/pl_PL/LC_MESSAGES/django.po b/engine/vibes_auth/locale/pl_PL/LC_MESSAGES/django.po index 3a693a82..c8d3c336 100644 --- a/engine/vibes_auth/locale/pl_PL/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/pl_PL/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -116,8 +116,7 @@ msgstr "Uzyskanie pary tokenów" #: engine/vibes_auth/docs/drf/views.py:19 msgid "obtain a token pair (refresh and access) for authentication." -msgstr "" -"Uzyskanie pary tokenów (odświeżenie i dostęp) w celu uwierzytelnienia." +msgstr "Uzyskanie pary tokenów (odświeżenie i dostęp) w celu uwierzytelnienia." #: engine/vibes_auth/docs/drf/views.py:41 msgid "refresh a token pair" @@ -236,15 +235,14 @@ msgstr "Konto zostało już aktywowane..." msgid "something went wrong: {e!s}" msgstr "Coś poszło nie tak: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:324 -#: engine/vibes_auth/viewsets.py:95 +#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "Token jest nieprawidłowy!" #: engine/vibes_auth/graphene/object_types.py:40 msgid "" -"the products this user has viewed most recently (max 48), in " -"reverse‐chronological order" +"the products this user has viewed most recently (max 48), in reverse‐" +"chronological order" msgstr "" "Produkty ostatnio przeglądane przez tego użytkownika (maks. 48), w " "kolejności odwrotnej do chronologicznej." @@ -258,8 +256,7 @@ msgstr "Grupy" msgid "wishlist" msgstr "Lista życzeń" -#: engine/vibes_auth/graphene/object_types.py:47 -#: engine/vibes_auth/models.py:68 +#: engine/vibes_auth/graphene/object_types.py:47 engine/vibes_auth/models.py:68 msgid "avatar" msgstr "Awatar" @@ -270,11 +267,11 @@ msgstr "Atrybuty mogą być używane do przechowywania niestandardowych danych" #: engine/vibes_auth/graphene/object_types.py:50 #, python-brace-format msgid "" -"language is one of the {settings.LANGUAGES} with default " -"{settings.LANGUAGE_CODE}" +"language is one of the {settings.LANGUAGES} with default {settings." +"LANGUAGE_CODE}" msgstr "" -"Język jest jednym z {settings.LANGUAGES} z domyślnym " -"{settings.LANGUAGE_CODE}." +"Język jest jednym z {settings.LANGUAGES} z domyślnym {settings." +"LANGUAGE_CODE}." #: engine/vibes_auth/graphene/object_types.py:52 msgid "address set" @@ -490,7 +487,8 @@ msgstr "Witaj %(user_first_name)s," #: engine/vibes_auth/templates/user_reset_password_email.html:92 msgid "" -"we have received a request to reset your password. please reset your password\n" +"we have received a request to reset your password. please reset your " +"password\n" " by clicking the button below:" msgstr "" "Otrzymaliśmy prośbę o zresetowanie hasła. Zresetuj hasło, klikając poniższy " @@ -569,19 +567,19 @@ msgid "" "invalid phone number format. the number must be entered in the format: " "\"+999999999\". up to 15 digits allowed." msgstr "" -"Nieprawidłowy format numeru telefonu. Numer musi być wprowadzony w formacie:" -" \"+999999999\". Dozwolone do 15 cyfr." +"Nieprawidłowy format numeru telefonu. Numer musi być wprowadzony w formacie: " +"\"+999999999\". Dozwolone do 15 cyfr." #: engine/vibes_auth/views.py:30 msgid "" -"Represents a view for getting a pair of access and refresh tokens and user's" -" data. This view manages the process of handling token-based authentication " +"Represents a view for getting a pair of access and refresh tokens and user's " +"data. This view manages the process of handling token-based authentication " "where clients can get a pair of JWT tokens (access and refresh) using " "provided credentials. It is built on top of a base token view and ensures " "proper rate limiting to protect against brute force attacks." msgstr "" -"Reprezentuje widok pobierania pary tokenów dostępu i odświeżania oraz danych" -" użytkownika. Ten widok zarządza procesem obsługi uwierzytelniania opartego " +"Reprezentuje widok pobierania pary tokenów dostępu i odświeżania oraz danych " +"użytkownika. Ten widok zarządza procesem obsługi uwierzytelniania opartego " "na tokenach, w którym klienci mogą uzyskać parę tokenów JWT (dostęp i " "odświeżanie) przy użyciu dostarczonych poświadczeń. Jest on zbudowany w " "oparciu o podstawowy widok tokenu i zapewnia odpowiednie ograniczenie " @@ -589,11 +587,11 @@ msgstr "" #: engine/vibes_auth/views.py:52 msgid "" -"Handles refreshing of tokens for authentication purposes. This class is used" -" to provide functionality for token refresh operations as part of an " -"authentication system. It ensures that clients can request a refreshed token" -" within defined rate limits. The view relies on the associated serializer to" -" validate token refresh inputs and produce appropriate outputs." +"Handles refreshing of tokens for authentication purposes. This class is used " +"to provide functionality for token refresh operations as part of an " +"authentication system. It ensures that clients can request a refreshed token " +"within defined rate limits. The view relies on the associated serializer to " +"validate token refresh inputs and produce appropriate outputs." msgstr "" "Obsługuje odświeżanie tokenów do celów uwierzytelniania. Klasa ta służy do " "zapewnienia funkcjonalności dla operacji odświeżania tokenów w ramach " @@ -617,10 +615,17 @@ msgstr "Token jest nieprawidłowy" #: engine/vibes_auth/viewsets.py:45 msgid "" "User view set implementation.\n" -"Provides a set of actions that manage user-related data such as creation, retrieval, updates, deletion, and custom actions including password reset, avatar upload, account activation, and recently viewed items merging. This class extends the mixins and GenericViewSet for robust API handling." +"Provides a set of actions that manage user-related data such as creation, " +"retrieval, updates, deletion, and custom actions including password reset, " +"avatar upload, account activation, and recently viewed items merging. This " +"class extends the mixins and GenericViewSet for robust API handling." msgstr "" "Implementacja zestawu widoków użytkownika.\n" -"Zapewnia zestaw akcji, które zarządzają danymi związanymi z użytkownikiem, takimi jak tworzenie, pobieranie, aktualizacje, usuwanie i niestandardowe akcje, w tym resetowanie hasła, przesyłanie awatara, aktywacja konta i scalanie ostatnio przeglądanych elementów. Ta klasa rozszerza mixiny i GenericViewSet dla solidnej obsługi API." +"Zapewnia zestaw akcji, które zarządzają danymi związanymi z użytkownikiem, " +"takimi jak tworzenie, pobieranie, aktualizacje, usuwanie i niestandardowe " +"akcje, w tym resetowanie hasła, przesyłanie awatara, aktywacja konta i " +"scalanie ostatnio przeglądanych elementów. Ta klasa rozszerza mixiny i " +"GenericViewSet dla solidnej obsługi API." #: engine/vibes_auth/viewsets.py:99 msgid "password reset successfully" diff --git a/engine/vibes_auth/locale/pt_BR/LC_MESSAGES/django.po b/engine/vibes_auth/locale/pt_BR/LC_MESSAGES/django.po index 274445b2..29855d5c 100644 --- a/engine/vibes_auth/locale/pt_BR/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/pt_BR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -232,18 +232,17 @@ msgstr "A conta já foi ativada..." msgid "something went wrong: {e!s}" msgstr "Algo deu errado: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:324 -#: engine/vibes_auth/viewsets.py:95 +#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "O token é inválido!" #: engine/vibes_auth/graphene/object_types.py:40 msgid "" -"the products this user has viewed most recently (max 48), in " -"reverse‐chronological order" +"the products this user has viewed most recently (max 48), in reverse‐" +"chronological order" msgstr "" -"Os produtos que esse usuário visualizou mais recentemente (máximo de 48), em" -" ordem cronológica inversa." +"Os produtos que esse usuário visualizou mais recentemente (máximo de 48), em " +"ordem cronológica inversa." #: engine/vibes_auth/graphene/object_types.py:42 #: engine/vibes_auth/models.py:176 @@ -254,8 +253,7 @@ msgstr "Grupos" msgid "wishlist" msgstr "Lista de desejos" -#: engine/vibes_auth/graphene/object_types.py:47 -#: engine/vibes_auth/models.py:68 +#: engine/vibes_auth/graphene/object_types.py:47 engine/vibes_auth/models.py:68 msgid "avatar" msgstr "Avatar" @@ -266,8 +264,8 @@ msgstr "Os atributos podem ser usados para armazenar dados personalizados" #: engine/vibes_auth/graphene/object_types.py:50 #, python-brace-format msgid "" -"language is one of the {settings.LANGUAGES} with default " -"{settings.LANGUAGE_CODE}" +"language is one of the {settings.LANGUAGES} with default {settings." +"LANGUAGE_CODE}" msgstr "" "O idioma é um dos {settings.LANGUAGES} com o padrão {settings.LANGUAGE_CODE}" @@ -486,7 +484,8 @@ msgstr "Olá %(user_first_name)s," #: engine/vibes_auth/templates/user_reset_password_email.html:92 msgid "" -"we have received a request to reset your password. please reset your password\n" +"we have received a request to reset your password. please reset your " +"password\n" " by clicking the button below:" msgstr "" "Recebemos uma solicitação para redefinir sua senha. Para redefinir sua " @@ -570,32 +569,32 @@ msgstr "" #: engine/vibes_auth/views.py:30 msgid "" -"Represents a view for getting a pair of access and refresh tokens and user's" -" data. This view manages the process of handling token-based authentication " +"Represents a view for getting a pair of access and refresh tokens and user's " +"data. This view manages the process of handling token-based authentication " "where clients can get a pair of JWT tokens (access and refresh) using " "provided credentials. It is built on top of a base token view and ensures " "proper rate limiting to protect against brute force attacks." msgstr "" "Representa uma visualização para obter um par de tokens de acesso e " "atualização e os dados do usuário. Essa visualização gerencia o processo de " -"manipulação da autenticação baseada em token, em que os clientes podem obter" -" um par de tokens JWT (acesso e atualização) usando as credenciais " +"manipulação da autenticação baseada em token, em que os clientes podem obter " +"um par de tokens JWT (acesso e atualização) usando as credenciais " "fornecidas. Ela é construída sobre uma visualização de token de base e " "garante a limitação de taxa adequada para proteger contra ataques de força " "bruta." #: engine/vibes_auth/views.py:52 msgid "" -"Handles refreshing of tokens for authentication purposes. This class is used" -" to provide functionality for token refresh operations as part of an " -"authentication system. It ensures that clients can request a refreshed token" -" within defined rate limits. The view relies on the associated serializer to" -" validate token refresh inputs and produce appropriate outputs." +"Handles refreshing of tokens for authentication purposes. This class is used " +"to provide functionality for token refresh operations as part of an " +"authentication system. It ensures that clients can request a refreshed token " +"within defined rate limits. The view relies on the associated serializer to " +"validate token refresh inputs and produce appropriate outputs." msgstr "" "Trata da atualização de tokens para fins de autenticação. Essa classe é " "usada para fornecer funcionalidade para operações de atualização de tokens " -"como parte de um sistema de autenticação. Ela garante que os clientes possam" -" solicitar um token atualizado dentro dos limites de taxa definidos. A " +"como parte de um sistema de autenticação. Ela garante que os clientes possam " +"solicitar um token atualizado dentro dos limites de taxa definidos. A " "exibição depende do serializador associado para validar as entradas de " "atualização de token e produzir saídas apropriadas." @@ -604,8 +603,8 @@ msgid "" "Represents a view for verifying JSON Web Tokens (JWT) using specific " "serialization and validation logic. " msgstr "" -"Representa uma visualização para verificação de JSON Web Tokens (JWT) usando" -" lógica específica de serialização e validação." +"Representa uma visualização para verificação de JSON Web Tokens (JWT) usando " +"lógica específica de serialização e validação." #: engine/vibes_auth/views.py:92 msgid "the token is invalid" @@ -614,10 +613,17 @@ msgstr "O token é inválido" #: engine/vibes_auth/viewsets.py:45 msgid "" "User view set implementation.\n" -"Provides a set of actions that manage user-related data such as creation, retrieval, updates, deletion, and custom actions including password reset, avatar upload, account activation, and recently viewed items merging. This class extends the mixins and GenericViewSet for robust API handling." +"Provides a set of actions that manage user-related data such as creation, " +"retrieval, updates, deletion, and custom actions including password reset, " +"avatar upload, account activation, and recently viewed items merging. This " +"class extends the mixins and GenericViewSet for robust API handling." msgstr "" "Implementação do conjunto de visualizações do usuário.\n" -"Fornece um conjunto de ações que gerenciam dados relacionados ao usuário, como criação, recuperação, atualizações, exclusão e ações personalizadas, incluindo redefinição de senha, upload de avatar, ativação de conta e mesclagem de itens visualizados recentemente. Essa classe estende os mixins e o GenericViewSet para um tratamento robusto da API." +"Fornece um conjunto de ações que gerenciam dados relacionados ao usuário, " +"como criação, recuperação, atualizações, exclusão e ações personalizadas, " +"incluindo redefinição de senha, upload de avatar, ativação de conta e " +"mesclagem de itens visualizados recentemente. Essa classe estende os mixins " +"e o GenericViewSet para um tratamento robusto da API." #: engine/vibes_auth/viewsets.py:99 msgid "password reset successfully" diff --git a/engine/vibes_auth/locale/ro_RO/LC_MESSAGES/django.po b/engine/vibes_auth/locale/ro_RO/LC_MESSAGES/django.po index 8826e695..7e8c3df9 100644 --- a/engine/vibes_auth/locale/ro_RO/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/ro_RO/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -109,8 +109,7 @@ msgstr "Canalul personalului pe fir" #: engine/vibes_auth/docs/drf/messaging.py:40 msgid "Reply, close, and ping within a specific thread." msgstr "" -"Răspundeți, închideți și trimiteți mesaje ping în cadrul unui anumit " -"subiect." +"Răspundeți, închideți și trimiteți mesaje ping în cadrul unui anumit subiect." #: engine/vibes_auth/docs/drf/views.py:18 msgid "obtain a token pair" @@ -237,15 +236,14 @@ msgstr "Contul a fost deja activat..." msgid "something went wrong: {e!s}" msgstr "Ceva nu a mers bine: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:324 -#: engine/vibes_auth/viewsets.py:95 +#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "Token-ul nu este valabil!" #: engine/vibes_auth/graphene/object_types.py:40 msgid "" -"the products this user has viewed most recently (max 48), in " -"reverse‐chronological order" +"the products this user has viewed most recently (max 48), in reverse‐" +"chronological order" msgstr "" "Produsele pe care acest utilizator le-a vizualizat cel mai recent (max 48), " "în ordine cronologică inversă." @@ -259,8 +257,7 @@ msgstr "Grupuri" msgid "wishlist" msgstr "Lista dorințelor" -#: engine/vibes_auth/graphene/object_types.py:47 -#: engine/vibes_auth/models.py:68 +#: engine/vibes_auth/graphene/object_types.py:47 engine/vibes_auth/models.py:68 msgid "avatar" msgstr "Avatar" @@ -271,11 +268,11 @@ msgstr "Atributele pot fi utilizate pentru a stoca date personalizate" #: engine/vibes_auth/graphene/object_types.py:50 #, python-brace-format msgid "" -"language is one of the {settings.LANGUAGES} with default " -"{settings.LANGUAGE_CODE}" +"language is one of the {settings.LANGUAGES} with default {settings." +"LANGUAGE_CODE}" msgstr "" -"Limba este una dintre {settings.LANGUAGES} cu implicit " -"{settings.LANGUAGE_CODE}" +"Limba este una dintre {settings.LANGUAGES} cu implicit {settings." +"LANGUAGE_CODE}" #: engine/vibes_auth/graphene/object_types.py:52 msgid "address set" @@ -309,8 +306,8 @@ msgid "" msgstr "" "Reprezintă o entitate utilizator cu câmpuri și metode personalizate pentru " "funcționalitate extinsă. Această clasă extinde modelul AbstractUser și " -"integrează caracteristici suplimentare, cum ar fi autentificarea prin e-mail" -" personalizat, metode de validare, starea abonamentului, verificarea și " +"integrează caracteristici suplimentare, cum ar fi autentificarea prin e-mail " +"personalizat, metode de validare, starea abonamentului, verificarea și " "stocarea atributelor. De asemenea, oferă utilitare pentru gestionarea " "elementelor vizualizate recent și activare pe bază de token pentru " "verificarea conturilor. Modelul User este conceput pentru a gestiona cazuri " @@ -493,7 +490,8 @@ msgstr "Bună ziua %(user_first_name)s," #: engine/vibes_auth/templates/user_reset_password_email.html:92 msgid "" -"we have received a request to reset your password. please reset your password\n" +"we have received a request to reset your password. please reset your " +"password\n" " by clicking the button below:" msgstr "" "Am primit o cerere de resetare a parolei dumneavoastră. Vă rugăm să vă " @@ -509,7 +507,8 @@ msgid "" "if the button above does not work, please copy and paste the following URL\n" " into your web browser:" msgstr "" -"Dacă butonul de mai sus nu funcționează, vă rugăm să copiați și să lipiți următoarea adresă URL\n" +"Dacă butonul de mai sus nu funcționează, vă rugăm să copiați și să lipiți " +"următoarea adresă URL\n" " în browserul dvs. web:" #: engine/vibes_auth/templates/user_reset_password_email.html:100 @@ -577,8 +576,8 @@ msgstr "" #: engine/vibes_auth/views.py:30 msgid "" -"Represents a view for getting a pair of access and refresh tokens and user's" -" data. This view manages the process of handling token-based authentication " +"Represents a view for getting a pair of access and refresh tokens and user's " +"data. This view manages the process of handling token-based authentication " "where clients can get a pair of JWT tokens (access and refresh) using " "provided credentials. It is built on top of a base token view and ensures " "proper rate limiting to protect against brute force attacks." @@ -593,11 +592,11 @@ msgstr "" #: engine/vibes_auth/views.py:52 msgid "" -"Handles refreshing of tokens for authentication purposes. This class is used" -" to provide functionality for token refresh operations as part of an " -"authentication system. It ensures that clients can request a refreshed token" -" within defined rate limits. The view relies on the associated serializer to" -" validate token refresh inputs and produce appropriate outputs." +"Handles refreshing of tokens for authentication purposes. This class is used " +"to provide functionality for token refresh operations as part of an " +"authentication system. It ensures that clients can request a refreshed token " +"within defined rate limits. The view relies on the associated serializer to " +"validate token refresh inputs and produce appropriate outputs." msgstr "" "Gestionează actualizarea jetoanelor în scopul autentificării. Această clasă " "este utilizată pentru a oferi funcționalitate pentru operațiunile de " @@ -622,10 +621,17 @@ msgstr "Jetonul nu este valabil" #: engine/vibes_auth/viewsets.py:45 msgid "" "User view set implementation.\n" -"Provides a set of actions that manage user-related data such as creation, retrieval, updates, deletion, and custom actions including password reset, avatar upload, account activation, and recently viewed items merging. This class extends the mixins and GenericViewSet for robust API handling." +"Provides a set of actions that manage user-related data such as creation, " +"retrieval, updates, deletion, and custom actions including password reset, " +"avatar upload, account activation, and recently viewed items merging. This " +"class extends the mixins and GenericViewSet for robust API handling." msgstr "" "Implementarea setului de vizualizări ale utilizatorului.\n" -"Oferă un set de acțiuni care gestionează datele legate de utilizator, cum ar fi crearea, recuperarea, actualizările, ștergerea și acțiunile personalizate, inclusiv resetarea parolei, încărcarea avatarului, activarea contului și îmbinarea elementelor vizualizate recent. Această clasă extinde mixinele și GenericViewSet pentru o gestionare robustă a API." +"Oferă un set de acțiuni care gestionează datele legate de utilizator, cum ar " +"fi crearea, recuperarea, actualizările, ștergerea și acțiunile " +"personalizate, inclusiv resetarea parolei, încărcarea avatarului, activarea " +"contului și îmbinarea elementelor vizualizate recent. Această clasă extinde " +"mixinele și GenericViewSet pentru o gestionare robustă a API." #: engine/vibes_auth/viewsets.py:99 msgid "password reset successfully" diff --git a/engine/vibes_auth/locale/ru_RU/LC_MESSAGES/django.po b/engine/vibes_auth/locale/ru_RU/LC_MESSAGES/django.po index cf479831..42875b0f 100644 --- a/engine/vibes_auth/locale/ru_RU/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/ru_RU/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -189,8 +189,7 @@ msgstr "Ссылка на активацию недействительна ил #: engine/vibes_auth/docs/drf/viewsets.py:107 msgid "merge client-stored recently viewed products" -msgstr "" -"Объедините недавно просмотренные продукты, хранящиеся в памяти клиента" +msgstr "Объедините недавно просмотренные продукты, хранящиеся в памяти клиента" #: engine/vibes_auth/graphene/mutations.py:43 msgid "the user's b64-encoded uuid who referred the new user to us." @@ -236,18 +235,17 @@ msgstr "Аккаунт уже активирован..." msgid "something went wrong: {e!s}" msgstr "Что-то пошло не так: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:324 -#: engine/vibes_auth/viewsets.py:95 +#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "Токен недействителен!" #: engine/vibes_auth/graphene/object_types.py:40 msgid "" -"the products this user has viewed most recently (max 48), in " -"reverse‐chronological order" +"the products this user has viewed most recently (max 48), in reverse‐" +"chronological order" msgstr "" -"Продукты, которые этот пользователь просматривал в последнее время (не более" -" 48), в обратном хронологическом порядке." +"Продукты, которые этот пользователь просматривал в последнее время (не более " +"48), в обратном хронологическом порядке." #: engine/vibes_auth/graphene/object_types.py:42 #: engine/vibes_auth/models.py:176 @@ -258,8 +256,7 @@ msgstr "Группы" msgid "wishlist" msgstr "Список желаний" -#: engine/vibes_auth/graphene/object_types.py:47 -#: engine/vibes_auth/models.py:68 +#: engine/vibes_auth/graphene/object_types.py:47 engine/vibes_auth/models.py:68 msgid "avatar" msgstr "Аватар" @@ -270,8 +267,8 @@ msgstr "Атрибуты могут использоваться для хран #: engine/vibes_auth/graphene/object_types.py:50 #, python-brace-format msgid "" -"language is one of the {settings.LANGUAGES} with default " -"{settings.LANGUAGE_CODE}" +"language is one of the {settings.LANGUAGES} with default {settings." +"LANGUAGE_CODE}" msgstr "" "Язык - один из {settings.LANGUAGES}, по умолчанию {settings.LANGUAGE_CODE}." @@ -305,14 +302,14 @@ msgid "" "verifying accounts. The User model is designed to handle specific use cases " "for enhanced user management." msgstr "" -"Представляет сущность User с настраиваемыми полями и методами для расширения" -" функциональности. Этот класс расширяет модель AbstractUser и включает в " -"себя дополнительные возможности, такие как пользовательский вход по " -"электронной почте, методы проверки, статус подписки, верификация и хранение " -"атрибутов. Он также предоставляет утилиты для управления недавно " -"просмотренными элементами и активации на основе токенов для проверки учетных" -" записей. Модель User предназначена для обработки конкретных случаев " -"использования для расширенного управления пользователями." +"Представляет сущность User с настраиваемыми полями и методами для расширения " +"функциональности. Этот класс расширяет модель AbstractUser и включает в себя " +"дополнительные возможности, такие как пользовательский вход по электронной " +"почте, методы проверки, статус подписки, верификация и хранение атрибутов. " +"Он также предоставляет утилиты для управления недавно просмотренными " +"элементами и активации на основе токенов для проверки учетных записей. " +"Модель User предназначена для обработки конкретных случаев использования для " +"расширенного управления пользователями." #: engine/vibes_auth/models.py:51 msgid "email" @@ -489,7 +486,8 @@ msgstr "Привет %(user_first_name)s," #: engine/vibes_auth/templates/user_reset_password_email.html:92 msgid "" -"we have received a request to reset your password. please reset your password\n" +"we have received a request to reset your password. please reset your " +"password\n" " by clicking the button below:" msgstr "" "Мы получили запрос на сброс вашего пароля. Пожалуйста, сбросьте пароль, " @@ -505,7 +503,8 @@ msgid "" "if the button above does not work, please copy and paste the following URL\n" " into your web browser:" msgstr "" -"Если кнопка выше не работает, пожалуйста, скопируйте и вставьте следующий URL-адрес\n" +"Если кнопка выше не работает, пожалуйста, скопируйте и вставьте следующий " +"URL-адрес\n" " в свой веб-браузер:" #: engine/vibes_auth/templates/user_reset_password_email.html:100 @@ -572,8 +571,8 @@ msgstr "" #: engine/vibes_auth/views.py:30 msgid "" -"Represents a view for getting a pair of access and refresh tokens and user's" -" data. This view manages the process of handling token-based authentication " +"Represents a view for getting a pair of access and refresh tokens and user's " +"data. This view manages the process of handling token-based authentication " "where clients can get a pair of JWT tokens (access and refresh) using " "provided credentials. It is built on top of a base token view and ensures " "proper rate limiting to protect against brute force attacks." @@ -581,23 +580,23 @@ msgstr "" "Представляет собой представление для получения пары токенов доступа и " "обновления и данных пользователя. Это представление управляет процессом " "аутентификации на основе токенов, когда клиенты могут получить пару JWT-" -"токенов (доступ и обновление), используя предоставленные учетные данные. Оно" -" построено поверх базового представления токенов и обеспечивает надлежащее " +"токенов (доступ и обновление), используя предоставленные учетные данные. Оно " +"построено поверх базового представления токенов и обеспечивает надлежащее " "ограничение скорости для защиты от атак грубой силы." #: engine/vibes_auth/views.py:52 msgid "" -"Handles refreshing of tokens for authentication purposes. This class is used" -" to provide functionality for token refresh operations as part of an " -"authentication system. It ensures that clients can request a refreshed token" -" within defined rate limits. The view relies on the associated serializer to" -" validate token refresh inputs and produce appropriate outputs." +"Handles refreshing of tokens for authentication purposes. This class is used " +"to provide functionality for token refresh operations as part of an " +"authentication system. It ensures that clients can request a refreshed token " +"within defined rate limits. The view relies on the associated serializer to " +"validate token refresh inputs and produce appropriate outputs." msgstr "" "Обрабатывает обновление токенов для целей аутентификации. Этот класс " "используется для обеспечения функциональности операций обновления токенов в " "рамках системы аутентификации. Он гарантирует, что клиенты могут запросить " -"обновленный токен в рамках установленных ограничений скорости. Представление" -" полагается на ассоциированный сериализатор для проверки входных данных " +"обновленный токен в рамках установленных ограничений скорости. Представление " +"полагается на ассоциированный сериализатор для проверки входных данных " "обновления маркера и создания соответствующих выходных данных." #: engine/vibes_auth/views.py:75 @@ -615,10 +614,17 @@ msgstr "Токен недействителен" #: engine/vibes_auth/viewsets.py:45 msgid "" "User view set implementation.\n" -"Provides a set of actions that manage user-related data such as creation, retrieval, updates, deletion, and custom actions including password reset, avatar upload, account activation, and recently viewed items merging. This class extends the mixins and GenericViewSet for robust API handling." +"Provides a set of actions that manage user-related data such as creation, " +"retrieval, updates, deletion, and custom actions including password reset, " +"avatar upload, account activation, and recently viewed items merging. This " +"class extends the mixins and GenericViewSet for robust API handling." msgstr "" "Реализация набора пользовательских представлений.\n" -"Предоставляет набор действий, которые управляют пользовательскими данными, такими как создание, получение, обновление, удаление, а также пользовательскими действиями, включая сброс пароля, загрузку аватара, активацию учетной записи и объединение недавно просмотренных элементов. Этот класс расширяет миксины и GenericViewSet для надежной работы с API." +"Предоставляет набор действий, которые управляют пользовательскими данными, " +"такими как создание, получение, обновление, удаление, а также " +"пользовательскими действиями, включая сброс пароля, загрузку аватара, " +"активацию учетной записи и объединение недавно просмотренных элементов. Этот " +"класс расширяет миксины и GenericViewSet для надежной работы с API." #: engine/vibes_auth/viewsets.py:99 msgid "password reset successfully" diff --git a/engine/vibes_auth/locale/sv_SE/LC_MESSAGES/django.po b/engine/vibes_auth/locale/sv_SE/LC_MESSAGES/django.po index 486bc31e..f19f0bcf 100644 --- a/engine/vibes_auth/locale/sv_SE/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/sv_SE/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -99,8 +99,8 @@ msgid "" "Staff-only actions: list_open, assign, reply, close, ping. Unified event " "payloads are emitted." msgstr "" -"Åtgärder endast för personal: list_open, assign, reply, close, ping. Unified" -" event payloads sänds ut." +"Åtgärder endast för personal: list_open, assign, reply, close, ping. Unified " +"event payloads sänds ut." #: engine/vibes_auth/docs/drf/messaging.py:39 msgid "Per-thread staff channel" @@ -234,15 +234,14 @@ msgstr "Kontot har redan aktiverats..." msgid "something went wrong: {e!s}" msgstr "Något gick fel: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:324 -#: engine/vibes_auth/viewsets.py:95 +#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "Token är ogiltig!" #: engine/vibes_auth/graphene/object_types.py:40 msgid "" -"the products this user has viewed most recently (max 48), in " -"reverse‐chronological order" +"the products this user has viewed most recently (max 48), in reverse‐" +"chronological order" msgstr "" "De produkter som den här användaren har tittat på senast (max 48), i omvänd " "kronologisk ordning." @@ -256,8 +255,7 @@ msgstr "Grupper" msgid "wishlist" msgstr "Önskelista" -#: engine/vibes_auth/graphene/object_types.py:47 -#: engine/vibes_auth/models.py:68 +#: engine/vibes_auth/graphene/object_types.py:47 engine/vibes_auth/models.py:68 msgid "avatar" msgstr "Avatar" @@ -268,8 +266,8 @@ msgstr "Attribut kan användas för att lagra anpassade data" #: engine/vibes_auth/graphene/object_types.py:50 #, python-brace-format msgid "" -"language is one of the {settings.LANGUAGES} with default " -"{settings.LANGUAGE_CODE}" +"language is one of the {settings.LANGUAGES} with default {settings." +"LANGUAGE_CODE}" msgstr "" "Språk är en av {settings.LANGUAGES} med standard {settings.LANGUAGE_CODE}." @@ -486,7 +484,8 @@ msgstr "Hej %(user_first_name)s," #: engine/vibes_auth/templates/user_reset_password_email.html:92 msgid "" -"we have received a request to reset your password. please reset your password\n" +"we have received a request to reset your password. please reset your " +"password\n" " by clicking the button below:" msgstr "" "Vi har fått en begäran om att återställa ditt lösenord. Vänligen återställ " @@ -534,8 +533,8 @@ msgid "" "thank you for signing up for %(project_name)s. please activate your account\n" " by clicking the button below:" msgstr "" -"Tack för att du registrerat dig för %(project_name)s. Vänligen aktivera ditt" -" konto genom att klicka på knappen nedan:" +"Tack för att du registrerat dig för %(project_name)s. Vänligen aktivera ditt " +"konto genom att klicka på knappen nedan:" #: engine/vibes_auth/templates/user_verification_email.html:96 msgid "" @@ -570,32 +569,32 @@ msgstr "" #: engine/vibes_auth/views.py:30 msgid "" -"Represents a view for getting a pair of access and refresh tokens and user's" -" data. This view manages the process of handling token-based authentication " +"Represents a view for getting a pair of access and refresh tokens and user's " +"data. This view manages the process of handling token-based authentication " "where clients can get a pair of JWT tokens (access and refresh) using " "provided credentials. It is built on top of a base token view and ensures " "proper rate limiting to protect against brute force attacks." msgstr "" "Representerar en vy för att hämta ett par access- och refresh-tokens och " "användardata. Den här vyn hanterar processen för hantering av tokenbaserad " -"autentisering där klienter kan hämta ett par JWT-tokens (access och refresh)" -" med hjälp av angivna referenser. Den är byggd ovanpå en bas-tokenvy och " +"autentisering där klienter kan hämta ett par JWT-tokens (access och refresh) " +"med hjälp av angivna referenser. Den är byggd ovanpå en bas-tokenvy och " "säkerställer korrekt hastighetsbegränsning för att skydda mot brute force-" "attacker." #: engine/vibes_auth/views.py:52 msgid "" -"Handles refreshing of tokens for authentication purposes. This class is used" -" to provide functionality for token refresh operations as part of an " -"authentication system. It ensures that clients can request a refreshed token" -" within defined rate limits. The view relies on the associated serializer to" -" validate token refresh inputs and produce appropriate outputs." +"Handles refreshing of tokens for authentication purposes. This class is used " +"to provide functionality for token refresh operations as part of an " +"authentication system. It ensures that clients can request a refreshed token " +"within defined rate limits. The view relies on the associated serializer to " +"validate token refresh inputs and produce appropriate outputs." msgstr "" "Hanterar uppdatering av tokens för autentiseringsändamål. Denna klass " "används för att tillhandahålla funktionalitet för uppdatering av token som " -"en del av ett autentiseringssystem. Den säkerställer att klienter kan begära" -" en uppfräschad token inom definierade hastighetsgränser. Vyn förlitar sig " -"på den associerade serialiseraren för att validera inmatningar för " +"en del av ett autentiseringssystem. Den säkerställer att klienter kan begära " +"en uppfräschad token inom definierade hastighetsgränser. Vyn förlitar sig på " +"den associerade serialiseraren för att validera inmatningar för " "tokenuppdatering och producera lämpliga utmatningar." #: engine/vibes_auth/views.py:75 @@ -613,10 +612,17 @@ msgstr "Token är ogiltig" #: engine/vibes_auth/viewsets.py:45 msgid "" "User view set implementation.\n" -"Provides a set of actions that manage user-related data such as creation, retrieval, updates, deletion, and custom actions including password reset, avatar upload, account activation, and recently viewed items merging. This class extends the mixins and GenericViewSet for robust API handling." +"Provides a set of actions that manage user-related data such as creation, " +"retrieval, updates, deletion, and custom actions including password reset, " +"avatar upload, account activation, and recently viewed items merging. This " +"class extends the mixins and GenericViewSet for robust API handling." msgstr "" "Implementering av användarvyuppsättning.\n" -"Tillhandahåller en uppsättning åtgärder som hanterar användarrelaterade data som skapande, hämtning, uppdateringar, borttagning och anpassade åtgärder inklusive återställning av lösenord, uppladdning av avatar, kontoaktivering och sammanslagning av nyligen visade objekt. Denna klass utökar mixins och GenericViewSet för robust API-hantering." +"Tillhandahåller en uppsättning åtgärder som hanterar användarrelaterade data " +"som skapande, hämtning, uppdateringar, borttagning och anpassade åtgärder " +"inklusive återställning av lösenord, uppladdning av avatar, kontoaktivering " +"och sammanslagning av nyligen visade objekt. Denna klass utökar mixins och " +"GenericViewSet för robust API-hantering." #: engine/vibes_auth/viewsets.py:99 msgid "password reset successfully" diff --git a/engine/vibes_auth/locale/th_TH/LC_MESSAGES/django.po b/engine/vibes_auth/locale/th_TH/LC_MESSAGES/django.po index 10ea7931..e3145873 100644 --- a/engine/vibes_auth/locale/th_TH/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/th_TH/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -87,8 +87,8 @@ msgid "" "Anonymous or authenticated non-staff users send messages. Also supports " "action=ping." msgstr "" -"ผู้ใช้ที่ไม่ระบุตัวตนหรือผู้ใช้ที่ผ่านการยืนยันตัวตนแต่ไม่ใช่บุคลากรสามารถส่งข้อความได้" -" นอกจากนี้ยังรองรับ action=ping" +"ผู้ใช้ที่ไม่ระบุตัวตนหรือผู้ใช้ที่ผ่านการยืนยันตัวตนแต่ไม่ใช่บุคลากรสามารถส่งข้อความได้ " +"นอกจากนี้ยังรองรับ action=ping" #: engine/vibes_auth/docs/drf/messaging.py:28 msgid "Staff inbox control" @@ -231,17 +231,15 @@ msgstr "บัญชีได้รับการเปิดใช้งาน msgid "something went wrong: {e!s}" msgstr "เกิดข้อผิดพลาด: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:324 -#: engine/vibes_auth/viewsets.py:95 +#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "โทเคนไม่ถูกต้อง!" #: engine/vibes_auth/graphene/object_types.py:40 msgid "" -"the products this user has viewed most recently (max 48), in " -"reverse‐chronological order" -msgstr "" -"สินค้าที่ผู้ใช้รายนี้ดูล่าสุด (สูงสุด 48 รายการ) เรียงตามลำดับเวลาล่าสุด" +"the products this user has viewed most recently (max 48), in reverse‐" +"chronological order" +msgstr "สินค้าที่ผู้ใช้รายนี้ดูล่าสุด (สูงสุด 48 รายการ) เรียงตามลำดับเวลาล่าสุด" #: engine/vibes_auth/graphene/object_types.py:42 #: engine/vibes_auth/models.py:176 @@ -252,8 +250,7 @@ msgstr "กลุ่ม" msgid "wishlist" msgstr "รายการสิ่งที่ต้องการ" -#: engine/vibes_auth/graphene/object_types.py:47 -#: engine/vibes_auth/models.py:68 +#: engine/vibes_auth/graphene/object_types.py:47 engine/vibes_auth/models.py:68 msgid "avatar" msgstr "อวตาร" @@ -264,11 +261,9 @@ msgstr "คุณลักษณะอาจใช้เพื่อเก็บ #: engine/vibes_auth/graphene/object_types.py:50 #, python-brace-format msgid "" -"language is one of the {settings.LANGUAGES} with default " -"{settings.LANGUAGE_CODE}" -msgstr "" -"ภาษาเป็นหนึ่งใน {settings.LANGUAGES} ที่มีค่าเริ่มต้น " -"{settings.LANGUAGE_CODE}" +"language is one of the {settings.LANGUAGES} with default {settings." +"LANGUAGE_CODE}" +msgstr "ภาษาเป็นหนึ่งใน {settings.LANGUAGES} ที่มีค่าเริ่มต้น {settings.LANGUAGE_CODE}" #: engine/vibes_auth/graphene/object_types.py:52 msgid "address set" @@ -300,12 +295,11 @@ msgid "" "verifying accounts. The User model is designed to handle specific use cases " "for enhanced user management." msgstr "" -"แทนที่เอนทิตีผู้ใช้ที่มีฟิลด์และเมธอดที่ปรับแต่งได้สำหรับฟังก์ชันการทำงานที่ขยายออกไป" -" คลาสนี้สืบทอดมาจากโมเดล AbstractUser และรวมคุณสมบัติเพิ่มเติม เช่น " -"การเข้าสู่ระบบด้วยอีเมลที่กำหนดเอง วิธีการตรวจสอบความถูกต้อง " -"สถานะการสมัครสมาชิก การยืนยัน และการจัดเก็บแอตทริบิวต์ " -"นอกจากนี้ยังมียูทิลิตี้สำหรับจัดการรายการที่ดูล่าสุดและการเปิดใช้งานแบบใช้โทเค็นเพื่อยืนยันบัญชี" -" " +"แทนที่เอนทิตีผู้ใช้ที่มีฟิลด์และเมธอดที่ปรับแต่งได้สำหรับฟังก์ชันการทำงานที่ขยายออกไป " +"คลาสนี้สืบทอดมาจากโมเดล AbstractUser และรวมคุณสมบัติเพิ่มเติม เช่น " +"การเข้าสู่ระบบด้วยอีเมลที่กำหนดเอง วิธีการตรวจสอบความถูกต้อง สถานะการสมัครสมาชิก การยืนยัน " +"และการจัดเก็บแอตทริบิวต์ " +"นอกจากนี้ยังมียูทิลิตี้สำหรับจัดการรายการที่ดูล่าสุดและการเปิดใช้งานแบบใช้โทเค็นเพื่อยืนยันบัญชี " "โมเดลผู้ใช้ได้รับการออกแบบมาเพื่อจัดการกรณีการใช้งานเฉพาะสำหรับการจัดการผู้ใช้ที่ดียิ่งขึ้น" #: engine/vibes_auth/models.py:51 @@ -483,11 +477,11 @@ msgstr "สวัสดีครับ/ค่ะ %(user_first_name)s," #: engine/vibes_auth/templates/user_reset_password_email.html:92 msgid "" -"we have received a request to reset your password. please reset your password\n" +"we have received a request to reset your password. please reset your " +"password\n" " by clicking the button below:" msgstr "" -"เราได้รับคำขอให้คุณรีเซ็ตรหัสผ่านของคุณ " -"กรุณาทำการรีเซ็ตรหัสผ่านของคุณโดยคลิกที่ปุ่มด้านล่าง:" +"เราได้รับคำขอให้คุณรีเซ็ตรหัสผ่านของคุณ กรุณาทำการรีเซ็ตรหัสผ่านของคุณโดยคลิกที่ปุ่มด้านล่าง:" #: engine/vibes_auth/templates/user_reset_password_email.html:95 msgid "reset password" @@ -498,9 +492,7 @@ msgstr "รีเซ็ตรหัสผ่าน" msgid "" "if the button above does not work, please copy and paste the following URL\n" " into your web browser:" -msgstr "" -"หากปุ่มด้านบนไม่ทำงาน โปรดคัดลอกและวาง URL " -"ต่อไปนี้ลงในเว็บเบราว์เซอร์ของคุณ:" +msgstr "หากปุ่มด้านบนไม่ทำงาน โปรดคัดลอกและวาง URL ต่อไปนี้ลงในเว็บเบราว์เซอร์ของคุณ:" #: engine/vibes_auth/templates/user_reset_password_email.html:100 msgid "" @@ -529,8 +521,7 @@ msgid "" "thank you for signing up for %(project_name)s. please activate your account\n" " by clicking the button below:" msgstr "" -"ขอบคุณที่ลงทะเบียนสำหรับ %(project_name)s " -"กรุณาเปิดใช้งานบัญชีของคุณโดยคลิกที่ปุ่มด้านล่าง:" +"ขอบคุณที่ลงทะเบียนสำหรับ %(project_name)s กรุณาเปิดใช้งานบัญชีของคุณโดยคลิกที่ปุ่มด้านล่าง:" #: engine/vibes_auth/templates/user_verification_email.html:96 msgid "" @@ -558,37 +549,34 @@ msgid "" "invalid phone number format. the number must be entered in the format: " "\"+999999999\". up to 15 digits allowed." msgstr "" -"รูปแบบหมายเลขโทรศัพท์ไม่ถูกต้อง. หมายเลขต้องถูกป้อนในรูปแบบ: \"+999999999\"." -" อนุญาตให้ใช้ได้ถึง 15 หลัก." +"รูปแบบหมายเลขโทรศัพท์ไม่ถูกต้อง. หมายเลขต้องถูกป้อนในรูปแบบ: \"+999999999\". " +"อนุญาตให้ใช้ได้ถึง 15 หลัก." #: engine/vibes_auth/views.py:30 msgid "" -"Represents a view for getting a pair of access and refresh tokens and user's" -" data. This view manages the process of handling token-based authentication " +"Represents a view for getting a pair of access and refresh tokens and user's " +"data. This view manages the process of handling token-based authentication " "where clients can get a pair of JWT tokens (access and refresh) using " "provided credentials. It is built on top of a base token view and ensures " "proper rate limiting to protect against brute force attacks." msgstr "" -"แสดงมุมมองสำหรับการรับคู่ของโทเค็นการเข้าถึงและโทเค็นการรีเฟรช " -"รวมถึงข้อมูลของผู้ใช้ มุมมองนี้จัดการกระบวนการตรวจสอบสิทธิ์ที่ใช้โทเค็น " -"โดยลูกค้าสามารถรับคู่ของโทเค็น JWT (โทเค็นการเข้าถึงและโทเค็นการรีเฟรช) " -"โดยใช้ข้อมูลประจำตัวที่ให้มา " -"มุมมองนี้สร้างขึ้นบนมุมมองโทเค็นพื้นฐานและรับประกันการจำกัดอัตราที่เหมาะสมเพื่อป้องกันการโจมตีแบบ" -" brute force" +"แสดงมุมมองสำหรับการรับคู่ของโทเค็นการเข้าถึงและโทเค็นการรีเฟรช รวมถึงข้อมูลของผู้ใช้ " +"มุมมองนี้จัดการกระบวนการตรวจสอบสิทธิ์ที่ใช้โทเค็น โดยลูกค้าสามารถรับคู่ของโทเค็น JWT " +"(โทเค็นการเข้าถึงและโทเค็นการรีเฟรช) โดยใช้ข้อมูลประจำตัวที่ให้มา " +"มุมมองนี้สร้างขึ้นบนมุมมองโทเค็นพื้นฐานและรับประกันการจำกัดอัตราที่เหมาะสมเพื่อป้องกันการโจมตีแบบ " +"brute force" #: engine/vibes_auth/views.py:52 msgid "" -"Handles refreshing of tokens for authentication purposes. This class is used" -" to provide functionality for token refresh operations as part of an " -"authentication system. It ensures that clients can request a refreshed token" -" within defined rate limits. The view relies on the associated serializer to" -" validate token refresh inputs and produce appropriate outputs." +"Handles refreshing of tokens for authentication purposes. This class is used " +"to provide functionality for token refresh operations as part of an " +"authentication system. It ensures that clients can request a refreshed token " +"within defined rate limits. The view relies on the associated serializer to " +"validate token refresh inputs and produce appropriate outputs." msgstr "" "จัดการการรีเฟรชโทเค็นเพื่อวัตถุประสงค์ในการยืนยันตัวตน " -"คลาสนี้ใช้เพื่อให้บริการฟังก์ชันสำหรับการรีเฟรชโทเค็นเป็นส่วนหนึ่งของระบบยืนยันตัวตน" -" " -"มันทำให้แน่ใจว่าลูกค้าสามารถขอโทเค็นที่รีเฟรชแล้วได้ภายในขีดจำกัดอัตราที่กำหนดไว้" -" " +"คลาสนี้ใช้เพื่อให้บริการฟังก์ชันสำหรับการรีเฟรชโทเค็นเป็นส่วนหนึ่งของระบบยืนยันตัวตน " +"มันทำให้แน่ใจว่าลูกค้าสามารถขอโทเค็นที่รีเฟรชแล้วได้ภายในขีดจำกัดอัตราที่กำหนดไว้ " "หน้าจอนี้พึ่งพาตัวจัดลำดับที่เกี่ยวข้องเพื่อตรวจสอบความถูกต้องของข้อมูลการรีเฟรชโทเค็นและสร้างผลลัพธ์ที่เหมาะสม" #: engine/vibes_auth/views.py:75 @@ -606,14 +594,15 @@ msgstr "โทเค็นไม่ถูกต้อง" #: engine/vibes_auth/viewsets.py:45 msgid "" "User view set implementation.\n" -"Provides a set of actions that manage user-related data such as creation, retrieval, updates, deletion, and custom actions including password reset, avatar upload, account activation, and recently viewed items merging. This class extends the mixins and GenericViewSet for robust API handling." +"Provides a set of actions that manage user-related data such as creation, " +"retrieval, updates, deletion, and custom actions including password reset, " +"avatar upload, account activation, and recently viewed items merging. This " +"class extends the mixins and GenericViewSet for robust API handling." msgstr "" -"การใช้งานชุดมุมมองผู้ใช้ " -"ให้ชุดของการดำเนินการที่จัดการข้อมูลที่เกี่ยวข้องกับผู้ใช้ เช่น การสร้าง " -"การดึงข้อมูล การอัปเดต การลบ และการดำเนินการที่กำหนดเอง " -"รวมถึงการรีเซ็ตรหัสผ่าน การอัปโหลดอวาตาร์ การเปิดใช้งานบัญชี " -"และการรวมรายการที่ดูล่าสุด คลาสนี้ขยายส่วนผสมและ GenericViewSet " -"เพื่อการจัดการ API ที่มีความแข็งแกร่ง" +"การใช้งานชุดมุมมองผู้ใช้ ให้ชุดของการดำเนินการที่จัดการข้อมูลที่เกี่ยวข้องกับผู้ใช้ เช่น การสร้าง " +"การดึงข้อมูล การอัปเดต การลบ และการดำเนินการที่กำหนดเอง รวมถึงการรีเซ็ตรหัสผ่าน " +"การอัปโหลดอวาตาร์ การเปิดใช้งานบัญชี และการรวมรายการที่ดูล่าสุด คลาสนี้ขยายส่วนผสมและ " +"GenericViewSet เพื่อการจัดการ API ที่มีความแข็งแกร่ง" #: engine/vibes_auth/viewsets.py:99 msgid "password reset successfully" diff --git a/engine/vibes_auth/locale/tr_TR/LC_MESSAGES/django.po b/engine/vibes_auth/locale/tr_TR/LC_MESSAGES/django.po index 9b9be129..5d64e564 100644 --- a/engine/vibes_auth/locale/tr_TR/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/tr_TR/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -232,15 +232,14 @@ msgstr "Hesap zaten etkinleştirildi..." msgid "something went wrong: {e!s}" msgstr "Bir şeyler ters gitti: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:324 -#: engine/vibes_auth/viewsets.py:95 +#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "Jeton geçersiz!" #: engine/vibes_auth/graphene/object_types.py:40 msgid "" -"the products this user has viewed most recently (max 48), in " -"reverse‐chronological order" +"the products this user has viewed most recently (max 48), in reverse‐" +"chronological order" msgstr "" "Bu kullanıcının en son görüntülediği ürünler (en fazla 48), ters kronolojik " "sırayla." @@ -254,8 +253,7 @@ msgstr "Gruplar" msgid "wishlist" msgstr "İstek Listesi" -#: engine/vibes_auth/graphene/object_types.py:47 -#: engine/vibes_auth/models.py:68 +#: engine/vibes_auth/graphene/object_types.py:47 engine/vibes_auth/models.py:68 msgid "avatar" msgstr "Avatar" @@ -266,11 +264,10 @@ msgstr "Öznitelikler özel verileri saklamak için kullanılabilir" #: engine/vibes_auth/graphene/object_types.py:50 #, python-brace-format msgid "" -"language is one of the {settings.LANGUAGES} with default " -"{settings.LANGUAGE_CODE}" +"language is one of the {settings.LANGUAGES} with default {settings." +"LANGUAGE_CODE}" msgstr "" -"Dil, varsayılan {settings.LANGUAGE_CODE} ile {settings.LANGUAGES}'dan " -"biridir" +"Dil, varsayılan {settings.LANGUAGE_CODE} ile {settings.LANGUAGES}'dan biridir" #: engine/vibes_auth/graphene/object_types.py:52 msgid "address set" @@ -305,8 +302,8 @@ msgstr "" "Genişletilmiş işlevsellik için özelleştirilmiş alanlara ve yöntemlere sahip " "bir Kullanıcı varlığını temsil eder. Bu sınıf AbstractUser modelini " "genişletir ve özel e-posta girişi, doğrulama yöntemleri, abonelik durumu, " -"doğrulama ve öznitelik depolama gibi ek özellikleri entegre eder. Ayrıca son" -" görüntülenen öğeleri yönetmek için yardımcı programlar ve hesapları " +"doğrulama ve öznitelik depolama gibi ek özellikleri entegre eder. Ayrıca son " +"görüntülenen öğeleri yönetmek için yardımcı programlar ve hesapları " "doğrulamak için token tabanlı aktivasyon sağlar. User modeli, gelişmiş " "kullanıcı yönetimi için belirli kullanım durumlarını ele almak üzere " "tasarlanmıştır." @@ -486,7 +483,8 @@ msgstr "Merhaba %(user_first_name)s," #: engine/vibes_auth/templates/user_reset_password_email.html:92 msgid "" -"we have received a request to reset your password. please reset your password\n" +"we have received a request to reset your password. please reset your " +"password\n" " by clicking the button below:" msgstr "" "Şifrenizi sıfırlamak için bir talep aldık. Lütfen aşağıdaki butona " @@ -570,8 +568,8 @@ msgstr "" #: engine/vibes_auth/views.py:30 msgid "" -"Represents a view for getting a pair of access and refresh tokens and user's" -" data. This view manages the process of handling token-based authentication " +"Represents a view for getting a pair of access and refresh tokens and user's " +"data. This view manages the process of handling token-based authentication " "where clients can get a pair of JWT tokens (access and refresh) using " "provided credentials. It is built on top of a base token view and ensures " "proper rate limiting to protect against brute force attacks." @@ -580,21 +578,21 @@ msgstr "" "bir görünümü temsil eder. Bu görünüm, istemcilerin sağlanan kimlik " "bilgilerini kullanarak bir çift JWT belirteci (erişim ve yenileme) " "alabildiği belirteç tabanlı kimlik doğrulama işlemini yönetir. Temel bir " -"token görünümünün üzerine inşa edilmiştir ve kaba kuvvet saldırılarına karşı" -" koruma sağlamak için uygun hız sınırlaması sağlar." +"token görünümünün üzerine inşa edilmiştir ve kaba kuvvet saldırılarına karşı " +"koruma sağlamak için uygun hız sınırlaması sağlar." #: engine/vibes_auth/views.py:52 msgid "" -"Handles refreshing of tokens for authentication purposes. This class is used" -" to provide functionality for token refresh operations as part of an " -"authentication system. It ensures that clients can request a refreshed token" -" within defined rate limits. The view relies on the associated serializer to" -" validate token refresh inputs and produce appropriate outputs." +"Handles refreshing of tokens for authentication purposes. This class is used " +"to provide functionality for token refresh operations as part of an " +"authentication system. It ensures that clients can request a refreshed token " +"within defined rate limits. The view relies on the associated serializer to " +"validate token refresh inputs and produce appropriate outputs." msgstr "" "Kimlik doğrulama amacıyla belirteçlerin yenilenmesini işler. Bu sınıf, bir " "kimlik doğrulama sisteminin parçası olarak belirteç yenileme işlemleri için " -"işlevsellik sağlamak üzere kullanılır. İstemcilerin tanımlanan hız sınırları" -" içinde yenilenmiş bir belirteç talep edebilmesini sağlar. Görünüm, token " +"işlevsellik sağlamak üzere kullanılır. İstemcilerin tanımlanan hız sınırları " +"içinde yenilenmiş bir belirteç talep edebilmesini sağlar. Görünüm, token " "yenileme girdilerini doğrulamak ve uygun çıktıları üretmek için ilişkili " "serileştiriciye dayanır." @@ -613,10 +611,16 @@ msgstr "Belirteç geçersiz" #: engine/vibes_auth/viewsets.py:45 msgid "" "User view set implementation.\n" -"Provides a set of actions that manage user-related data such as creation, retrieval, updates, deletion, and custom actions including password reset, avatar upload, account activation, and recently viewed items merging. This class extends the mixins and GenericViewSet for robust API handling." +"Provides a set of actions that manage user-related data such as creation, " +"retrieval, updates, deletion, and custom actions including password reset, " +"avatar upload, account activation, and recently viewed items merging. This " +"class extends the mixins and GenericViewSet for robust API handling." msgstr "" "Kullanıcı görünümü kümesi uygulaması.\n" -"Oluşturma, alma, güncelleme, silme gibi kullanıcıyla ilgili verileri ve parola sıfırlama, avatar yükleme, hesap etkinleştirme ve son görüntülenen öğeleri birleştirme gibi özel eylemleri yöneten bir dizi eylem sağlar. Bu sınıf, sağlam API kullanımı için mixin'leri ve GenericViewSet'i genişletir." +"Oluşturma, alma, güncelleme, silme gibi kullanıcıyla ilgili verileri ve " +"parola sıfırlama, avatar yükleme, hesap etkinleştirme ve son görüntülenen " +"öğeleri birleştirme gibi özel eylemleri yöneten bir dizi eylem sağlar. Bu " +"sınıf, sağlam API kullanımı için mixin'leri ve GenericViewSet'i genişletir." #: engine/vibes_auth/viewsets.py:99 msgid "password reset successfully" diff --git a/engine/vibes_auth/locale/vi_VN/LC_MESSAGES/django.po b/engine/vibes_auth/locale/vi_VN/LC_MESSAGES/django.po index 197230f8..9ff2e5e2 100644 --- a/engine/vibes_auth/locale/vi_VN/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/vi_VN/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -193,8 +193,8 @@ msgstr "" #: engine/vibes_auth/graphene/mutations.py:43 msgid "the user's b64-encoded uuid who referred the new user to us." msgstr "" -"Mã UUID được mã hóa bằng B64 của người dùng đã giới thiệu người dùng mới cho" -" chúng tôi." +"Mã UUID được mã hóa bằng B64 của người dùng đã giới thiệu người dùng mới cho " +"chúng tôi." #: engine/vibes_auth/graphene/mutations.py:63 msgid "password too weak" @@ -234,15 +234,14 @@ msgstr "Tài khoản đã được kích hoạt..." msgid "something went wrong: {e!s}" msgstr "Có sự cố xảy ra: {e!s}" -#: engine/vibes_auth/graphene/mutations.py:324 -#: engine/vibes_auth/viewsets.py:95 +#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "Token không hợp lệ!" #: engine/vibes_auth/graphene/object_types.py:40 msgid "" -"the products this user has viewed most recently (max 48), in " -"reverse‐chronological order" +"the products this user has viewed most recently (max 48), in reverse‐" +"chronological order" msgstr "" "Các sản phẩm mà người dùng này đã xem gần đây nhất (tối đa 48), theo thứ tự " "thời gian ngược." @@ -256,8 +255,7 @@ msgstr "Nhóm" msgid "wishlist" msgstr "Danh sách mong muốn" -#: engine/vibes_auth/graphene/object_types.py:47 -#: engine/vibes_auth/models.py:68 +#: engine/vibes_auth/graphene/object_types.py:47 engine/vibes_auth/models.py:68 msgid "avatar" msgstr "Avatar" @@ -268,11 +266,11 @@ msgstr "Các thuộc tính có thể được sử dụng để lưu trữ dữ #: engine/vibes_auth/graphene/object_types.py:50 #, python-brace-format msgid "" -"language is one of the {settings.LANGUAGES} with default " -"{settings.LANGUAGE_CODE}" +"language is one of the {settings.LANGUAGES} with default {settings." +"LANGUAGE_CODE}" msgstr "" -"Ngôn ngữ là một trong những {settings.LANGUAGES} với mặc định " -"{settings.LANGUAGE_CODE}" +"Ngôn ngữ là một trong những {settings.LANGUAGES} với mặc định {settings." +"LANGUAGE_CODE}" #: engine/vibes_auth/graphene/object_types.py:52 msgid "address set" @@ -310,9 +308,9 @@ msgstr "" "mở rộng chức năng. Lớp này kế thừa từ mô hình AbstractUser và tích hợp các " "tính năng bổ sung như đăng nhập bằng email tùy chỉnh, phương thức xác thực, " "trạng thái đăng ký, xác minh và lưu trữ thuộc tính. Nó cũng cung cấp các " -"công cụ để quản lý các mục đã xem gần đây và kích hoạt dựa trên token để xác" -" minh tài khoản. Mô hình Người dùng được thiết kế để xử lý các trường hợp sử" -" dụng cụ thể nhằm nâng cao quản lý người dùng." +"công cụ để quản lý các mục đã xem gần đây và kích hoạt dựa trên token để xác " +"minh tài khoản. Mô hình Người dùng được thiết kế để xử lý các trường hợp sử " +"dụng cụ thể nhằm nâng cao quản lý người dùng." #: engine/vibes_auth/models.py:51 msgid "email" @@ -490,7 +488,8 @@ msgstr "Xin chào %(user_first_name)s," #: engine/vibes_auth/templates/user_reset_password_email.html:92 msgid "" -"we have received a request to reset your password. please reset your password\n" +"we have received a request to reset your password. please reset your " +"password\n" " by clicking the button below:" msgstr "" "Chúng tôi đã nhận được yêu cầu đặt lại mật khẩu của bạn. Vui lòng đặt lại " @@ -536,8 +535,8 @@ msgid "" "thank you for signing up for %(project_name)s. please activate your account\n" " by clicking the button below:" msgstr "" -"Cảm ơn bạn đã đăng ký cho %(project_name)s. Vui lòng kích hoạt tài khoản của" -" bạn bằng cách nhấp vào nút bên dưới:" +"Cảm ơn bạn đã đăng ký cho %(project_name)s. Vui lòng kích hoạt tài khoản của " +"bạn bằng cách nhấp vào nút bên dưới:" #: engine/vibes_auth/templates/user_verification_email.html:96 msgid "" @@ -565,38 +564,38 @@ msgid "" "invalid phone number format. the number must be entered in the format: " "\"+999999999\". up to 15 digits allowed." msgstr "" -"Định dạng số điện thoại không hợp lệ. Số điện thoại phải được nhập theo định" -" dạng: \"+999999999\". Cho phép tối đa 15 chữ số." +"Định dạng số điện thoại không hợp lệ. Số điện thoại phải được nhập theo định " +"dạng: \"+999999999\". Cho phép tối đa 15 chữ số." #: engine/vibes_auth/views.py:30 msgid "" -"Represents a view for getting a pair of access and refresh tokens and user's" -" data. This view manages the process of handling token-based authentication " +"Represents a view for getting a pair of access and refresh tokens and user's " +"data. This view manages the process of handling token-based authentication " "where clients can get a pair of JWT tokens (access and refresh) using " "provided credentials. It is built on top of a base token view and ensures " "proper rate limiting to protect against brute force attacks." msgstr "" "Đại diện cho một giao diện để lấy cặp token truy cập và token làm mới cùng " "với dữ liệu người dùng. Giao diện này quản lý quá trình xác thực dựa trên " -"token, cho phép các client lấy cặp token JWT (truy cập và làm mới) bằng cách" -" sử dụng thông tin đăng nhập được cung cấp. Nó được xây dựng dựa trên một " +"token, cho phép các client lấy cặp token JWT (truy cập và làm mới) bằng cách " +"sử dụng thông tin đăng nhập được cung cấp. Nó được xây dựng dựa trên một " "giao diện token cơ sở và đảm bảo giới hạn tốc độ thích hợp để bảo vệ khỏi " "các cuộc tấn công dò mật khẩu." #: engine/vibes_auth/views.py:52 msgid "" -"Handles refreshing of tokens for authentication purposes. This class is used" -" to provide functionality for token refresh operations as part of an " -"authentication system. It ensures that clients can request a refreshed token" -" within defined rate limits. The view relies on the associated serializer to" -" validate token refresh inputs and produce appropriate outputs." +"Handles refreshing of tokens for authentication purposes. This class is used " +"to provide functionality for token refresh operations as part of an " +"authentication system. It ensures that clients can request a refreshed token " +"within defined rate limits. The view relies on the associated serializer to " +"validate token refresh inputs and produce appropriate outputs." msgstr "" -"Xử lý việc làm mới token cho mục đích xác thực. Lớp này được sử dụng để cung" -" cấp chức năng cho các hoạt động làm mới token như một phần của hệ thống xác" -" thực. Nó đảm bảo rằng các client có thể yêu cầu token đã được làm mới trong" -" giới hạn tỷ lệ được định nghĩa. Giao diện người dùng dựa vào trình " -"serializer liên quan để xác thực các đầu vào làm mới token và tạo ra các đầu" -" ra phù hợp." +"Xử lý việc làm mới token cho mục đích xác thực. Lớp này được sử dụng để cung " +"cấp chức năng cho các hoạt động làm mới token như một phần của hệ thống xác " +"thực. Nó đảm bảo rằng các client có thể yêu cầu token đã được làm mới trong " +"giới hạn tỷ lệ được định nghĩa. Giao diện người dùng dựa vào trình " +"serializer liên quan để xác thực các đầu vào làm mới token và tạo ra các đầu " +"ra phù hợp." #: engine/vibes_auth/views.py:75 msgid "" @@ -613,12 +612,15 @@ msgstr "Token không hợp lệ" #: engine/vibes_auth/viewsets.py:45 msgid "" "User view set implementation.\n" -"Provides a set of actions that manage user-related data such as creation, retrieval, updates, deletion, and custom actions including password reset, avatar upload, account activation, and recently viewed items merging. This class extends the mixins and GenericViewSet for robust API handling." +"Provides a set of actions that manage user-related data such as creation, " +"retrieval, updates, deletion, and custom actions including password reset, " +"avatar upload, account activation, and recently viewed items merging. This " +"class extends the mixins and GenericViewSet for robust API handling." msgstr "" "Thực hiện bộ xem người dùng. Cung cấp một tập hợp các hành động quản lý dữ " "liệu liên quan đến người dùng như tạo, truy xuất, cập nhật, xóa và các hành " -"động tùy chỉnh bao gồm đặt lại mật khẩu, tải lên avatar, kích hoạt tài khoản" -" và hợp nhất các mục đã xem gần đây. Lớp này mở rộng các mixin và " +"động tùy chỉnh bao gồm đặt lại mật khẩu, tải lên avatar, kích hoạt tài khoản " +"và hợp nhất các mục đã xem gần đây. Lớp này mở rộng các mixin và " "GenericViewSet để xử lý API một cách mạnh mẽ." #: engine/vibes_auth/viewsets.py:99 diff --git a/engine/vibes_auth/locale/zh_Hans/LC_MESSAGES/django.po b/engine/vibes_auth/locale/zh_Hans/LC_MESSAGES/django.po index c1ce07ed..c9d52e11 100644 --- a/engine/vibes_auth/locale/zh_Hans/LC_MESSAGES/django.po +++ b/engine/vibes_auth/locale/zh_Hans/LC_MESSAGES/django.po @@ -1,9 +1,9 @@ -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-15 16:53+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-01-30 03:27+0000\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: BRITISH ENGLISH \n" @@ -96,7 +96,9 @@ msgstr "员工收件箱控制" msgid "" "Staff-only actions: list_open, assign, reply, close, ping. Unified event " "payloads are emitted." -msgstr "工作人员专用操作:list_open、assign、reply、close、ping。发出统一的事件有效载荷。" +msgstr "" +"工作人员专用操作:list_open、assign、reply、close、ping。发出统一的事件有效载" +"荷。" #: engine/vibes_auth/docs/drf/messaging.py:39 msgid "Per-thread staff channel" @@ -227,15 +229,14 @@ msgstr "帐户已激活..." msgid "something went wrong: {e!s}" msgstr "出了问题:{e!s}" -#: engine/vibes_auth/graphene/mutations.py:324 -#: engine/vibes_auth/viewsets.py:95 +#: engine/vibes_auth/graphene/mutations.py:324 engine/vibes_auth/viewsets.py:95 msgid "token is invalid!" msgstr "令牌无效!" #: engine/vibes_auth/graphene/object_types.py:40 msgid "" -"the products this user has viewed most recently (max 48), in " -"reverse‐chronological order" +"the products this user has viewed most recently (max 48), in reverse‐" +"chronological order" msgstr "该用户最近查看过的产品(最多 48 个),按倒序排列。" #: engine/vibes_auth/graphene/object_types.py:42 @@ -247,8 +248,7 @@ msgstr "组别" msgid "wishlist" msgstr "愿望清单" -#: engine/vibes_auth/graphene/object_types.py:47 -#: engine/vibes_auth/models.py:68 +#: engine/vibes_auth/graphene/object_types.py:47 engine/vibes_auth/models.py:68 msgid "avatar" msgstr "阿凡达" @@ -259,8 +259,8 @@ msgstr "属性可用于存储自定义数据" #: engine/vibes_auth/graphene/object_types.py:50 #, python-brace-format msgid "" -"language is one of the {settings.LANGUAGES} with default " -"{settings.LANGUAGE_CODE}" +"language is one of the {settings.LANGUAGES} with default {settings." +"LANGUAGE_CODE}" msgstr "语言是{settings.LANGUAGES}之一,默认为{settings.LANGUAGE_CODE}。" #: engine/vibes_auth/graphene/object_types.py:52 @@ -293,8 +293,10 @@ msgid "" "verifying accounts. The User model is designed to handle specific use cases " "for enhanced user management." msgstr "" -"代表具有自定义字段和方法以扩展功能的用户实体。该类扩展了 AbstractUser " -"模型,并集成了其他功能,如自定义电子邮件登录、验证方法、订阅状态、验证和属性存储。它还为管理最近查看的项目和基于令牌的激活提供了实用工具,以便验证账户。用户模型旨在处理增强用户管理的特定用例。" +"代表具有自定义字段和方法以扩展功能的用户实体。该类扩展了 AbstractUser 模型," +"并集成了其他功能,如自定义电子邮件登录、验证方法、订阅状态、验证和属性存储。" +"它还为管理最近查看的项目和基于令牌的激活提供了实用工具,以便验证账户。用户模" +"型旨在处理增强用户管理的特定用例。" #: engine/vibes_auth/models.py:51 msgid "email" @@ -471,7 +473,8 @@ msgstr "你好%(user_first_name)s," #: engine/vibes_auth/templates/user_reset_password_email.html:92 msgid "" -"we have received a request to reset your password. please reset your password\n" +"we have received a request to reset your password. please reset your " +"password\n" " by clicking the button below:" msgstr "我们收到了重置密码的请求。请点击下面的按钮重置密码:" @@ -545,28 +548,32 @@ msgstr "{settings.PROJECT_NAME}| 重置密码" msgid "" "invalid phone number format. the number must be entered in the format: " "\"+999999999\". up to 15 digits allowed." -msgstr "电话号码格式无效。电话号码必须按格式输入:\"+999999999\".最多允许 15 位数字。" +msgstr "" +"电话号码格式无效。电话号码必须按格式输入:\"+999999999\".最多允许 15 位数字。" #: engine/vibes_auth/views.py:30 msgid "" -"Represents a view for getting a pair of access and refresh tokens and user's" -" data. This view manages the process of handling token-based authentication " +"Represents a view for getting a pair of access and refresh tokens and user's " +"data. This view manages the process of handling token-based authentication " "where clients can get a pair of JWT tokens (access and refresh) using " "provided credentials. It is built on top of a base token view and ensures " "proper rate limiting to protect against brute force attacks." msgstr "" -"代表用于获取一对访问和刷新令牌以及用户数据的视图。该视图管理处理基于令牌的身份验证的流程,客户端可使用提供的凭据获取一对 JWT " -"令牌(访问和刷新)。它建立在基本令牌视图之上,并确保适当的速率限制,以防止暴力攻击。" +"代表用于获取一对访问和刷新令牌以及用户数据的视图。该视图管理处理基于令牌的身" +"份验证的流程,客户端可使用提供的凭据获取一对 JWT 令牌(访问和刷新)。它建立在" +"基本令牌视图之上,并确保适当的速率限制,以防止暴力攻击。" #: engine/vibes_auth/views.py:52 msgid "" -"Handles refreshing of tokens for authentication purposes. This class is used" -" to provide functionality for token refresh operations as part of an " -"authentication system. It ensures that clients can request a refreshed token" -" within defined rate limits. The view relies on the associated serializer to" -" validate token refresh inputs and produce appropriate outputs." +"Handles refreshing of tokens for authentication purposes. This class is used " +"to provide functionality for token refresh operations as part of an " +"authentication system. It ensures that clients can request a refreshed token " +"within defined rate limits. The view relies on the associated serializer to " +"validate token refresh inputs and produce appropriate outputs." msgstr "" -"处理刷新令牌以进行身份验证。该类用于为作为身份验证系统一部分的令牌刷新操作提供功能。它能确保客户端在规定的速率限制内请求刷新令牌。视图依赖于相关的序列化器来验证令牌刷新输入并产生适当的输出。" +"处理刷新令牌以进行身份验证。该类用于为作为身份验证系统一部分的令牌刷新操作提" +"供功能。它能确保客户端在规定的速率限制内请求刷新令牌。视图依赖于相关的序列化" +"器来验证令牌刷新输入并产生适当的输出。" #: engine/vibes_auth/views.py:75 msgid "" @@ -581,10 +588,15 @@ msgstr "令牌无效" #: engine/vibes_auth/viewsets.py:45 msgid "" "User view set implementation.\n" -"Provides a set of actions that manage user-related data such as creation, retrieval, updates, deletion, and custom actions including password reset, avatar upload, account activation, and recently viewed items merging. This class extends the mixins and GenericViewSet for robust API handling." +"Provides a set of actions that manage user-related data such as creation, " +"retrieval, updates, deletion, and custom actions including password reset, " +"avatar upload, account activation, and recently viewed items merging. This " +"class extends the mixins and GenericViewSet for robust API handling." msgstr "" "用户视图集实施。\n" -"该类提供了一组操作,用于管理用户相关数据,如创建、检索、更新、删除以及自定义操作,包括密码重置、上传头像、激活账户和合并最近查看的项目。该类对 mixins 和 GenericViewSet 进行了扩展,以实现强大的 API 处理功能。" +"该类提供了一组操作,用于管理用户相关数据,如创建、检索、更新、删除以及自定义" +"操作,包括密码重置、上传头像、激活账户和合并最近查看的项目。该类对 mixins 和 " +"GenericViewSet 进行了扩展,以实现强大的 API 处理功能。" #: engine/vibes_auth/viewsets.py:99 msgid "password reset successfully" diff --git a/evibes/locale/ar_AR/LC_MESSAGES/django.mo b/evibes/locale/ar_AR/LC_MESSAGES/django.mo index 18857fd2b73f1b553389751986a70d246b30af66..6e1c0a3bd3843e6c8c27b0e610369ce394118a2b 100644 GIT binary patch delta 1058 zcmXZaO-NKx6u|MLWAb*CMDz=zRo1LLyOAv?wH^{~6zfH^2LR&$)9Gr(7?UOnNo_o zunsdhUz**43s}TJ5I0~9vvAn;K5Ay8s0U5C?U!!*HSVT=0UPlTuE!&!sq0SQc|3*M z|5)XG8K<%iXRwv)e}S`vT1eQ1^uJ}-wJWc~ zL$ps~6ZWD8^ak~u4`tlHKDys@Xa;%ZYmt`We%gmo1GtL%*m~UdUDTU-h%NXWH85|* zTA(*jGakTUe1Muz6)#n7z&t!#8UK=AoVG8X?J23IFZE!EMXLEUGc9}h^l&Y@NUyjm z-s)-0(YqsMeaES?Cpqn@&psCD=#E&yOIByVwmN;+?TFhjxu zD%Q1dhrg?>vm#`*A!ewm(No1I+tF62j@A!pFcnhDE^nS^CV%oI4cOu`v3Pc7(Y zblN1$s2S5aGfvDIr1Obo#&p!_GjmSA<@7m2mU(27W{$bj3_3$*F14NoY-PqJwb>-o QW5T*YGr=bDcjb%!0YR6?kpKVy delta 864 zcmXZaPe@cz6vy#1zH#!u&E%gX!*UvDGH2STxM()oN|1CR7$!)9ML6z)L}*$FLW_Z# z3dD`*LU7?m5Em{KqFGCeT&N{Ni3JL^s)c@ky?dGaKJVN+@7;6myWjhlA7l?A!S_Z> z(i`bB0kbszD&j)>=9vwbnH}O4;&heSWgNgde2fX4!dtkArC7ia?jVobu8WV{{0WB5 zvi66Y2L2GLHmk%NSc@stLibTG8brP5k&B;TJMkoT;S%ckJ=Ak27{q_5#5KrLR)b9# z#SrUTkDKVlYfL=E5`2#3_|o|rRoMsBLJKZlb@2w?Wc(9e!ecjohJ(a^-FQD`Ykmle zS>Hyv8DZPUah()DM$E1i=N?S=%zG3SXhNJcrM44xeI>56!J*Pzk+3C0Iah^;hh~-`Iz(F+ZUf zs6=K_XKg9Q{8}_#SF!dT|KHPzi3Lo-bey_fdsR#C@|^ zL;My4sATmi&GKblBw+dLUNm`!Fi2-@Yon_|wcB)^bTz$1Tiu$^cs=1Hca*4e{J$mE Rw!N;(wRHG%ZGJlb^8yziSJ40f diff --git a/evibes/locale/ar_AR/LC_MESSAGES/django.po b/evibes/locale/ar_AR/LC_MESSAGES/django.po index b8b0a79f..539fcc48 100644 --- a/evibes/locale/ar_AR/LC_MESSAGES/django.po +++ b/evibes/locale/ar_AR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-16 15:38+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -34,98 +34,102 @@ msgstr "" "الضرائب." #: evibes/settings/constance.py:28 +msgid "Shows if the taxes are already included in product's selling prices" +msgstr "يوضح ما إذا كانت الضرائب مشمولة بالفعل في أسعار بيع المنتج" + +#: evibes/settings/constance.py:29 msgid "Exchange rate API key" msgstr "مفتاح API لسعر الصرف" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "!!!DO NOT CHANGE!!!" msgstr "!!!، لا تتغير!!!" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP host" msgstr "مضيف SMTP" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "SMTP port" msgstr "منفذ SMTP" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use TLS" msgstr "استخدام TLS" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "Use SSL" msgstr "استخدام SSL" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP username" msgstr "اسم مستخدم SMTP" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "SMTP password" msgstr "كلمة مرور SMTP" -#: evibes/settings/constance.py:37 +#: evibes/settings/constance.py:38 msgid "Mail from option" msgstr "عنوان مرسل البريد الإلكتروني" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from anonymous users" msgstr "عدد الأيام التي نخزن فيها الرسائل من المستخدمين المجهولين" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "How many days we store messages from authenticated users" msgstr "عدد الأيام التي نخزن فيها الرسائل من المستخدمين الموثقين" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "Disable buy functionality" msgstr "تعطيل وظيفة الشراء" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenStreetMap Nominatim API URL" msgstr "عنوان URL لواجهة برمجة تطبيقات OpenStreetMap Nominatim" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "OpenAI API Key" msgstr "مفتاح واجهة برمجة تطبيقات OpenAI" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "Abstract API Key" msgstr "مفتاح واجهة برمجة التطبيقات المجردة" -#: evibes/settings/constance.py:45 +#: evibes/settings/constance.py:46 msgid "HTTP Proxy" msgstr "وكيل HTTP" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing advertisiment data" msgstr "كيان لتخزين بيانات الإعلانات" -#: evibes/settings/constance.py:48 +#: evibes/settings/constance.py:49 msgid "An entity for storing analytics data" msgstr "كيان لتخزين بيانات التحليلات" -#: evibes/settings/constance.py:50 +#: evibes/settings/constance.py:51 msgid "Save responses from vendors' APIs" msgstr "حفظ الاستجابات من واجهات برمجة تطبيقات البائعين" -#: evibes/settings/constance.py:56 +#: evibes/settings/constance.py:57 msgid "Legal Options" msgstr "الخيارات القانونية" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "خيارات البريد الإلكتروني" -#: evibes/settings/constance.py:73 +#: evibes/settings/constance.py:75 msgid "Features Options" msgstr "خيارات الميزات" -#: evibes/settings/constance.py:82 +#: evibes/settings/constance.py:84 msgid "SEO Options" msgstr "خيارات تحسين محركات البحث" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:88 msgid "Debugging Options" msgstr "خيارات التصحيح" @@ -227,62 +231,62 @@ msgstr "" "## الإصدار\n" "إصدار API الحالي: {EVIBES_VERSION}\n" -#: evibes/settings/unfold.py:53 +#: evibes/settings/unfold.py:57 msgid "Menu" msgstr "قائمة الطعام" -#: evibes/settings/unfold.py:58 +#: evibes/settings/unfold.py:62 msgid "Dashboard" msgstr "لوحة التحكم" -#: evibes/settings/unfold.py:63 +#: evibes/settings/unfold.py:67 msgid "Health" msgstr "الصحة" -#: evibes/settings/unfold.py:68 +#: evibes/settings/unfold.py:72 msgid "Config" msgstr "التكوين" -#: evibes/settings/unfold.py:73 +#: evibes/settings/unfold.py:77 msgid "Periodic Tasks" msgstr "المهام الدورية" -#: evibes/settings/unfold.py:98 +#: evibes/settings/unfold.py:102 msgid "Taskboard" msgstr "لوحة المهام" -#: evibes/settings/unfold.py:103 +#: evibes/settings/unfold.py:107 msgid "Support" msgstr "الدعم" -#: evibes/settings/unfold.py:110 +#: evibes/settings/unfold.py:114 msgid "Quick Links" msgstr "روابط سريعة" -#: evibes/settings/unfold.py:115 +#: evibes/settings/unfold.py:119 msgid "Users" msgstr "المستخدمون" -#: evibes/settings/unfold.py:120 +#: evibes/settings/unfold.py:124 msgid "Groups" msgstr "المجموعات" -#: evibes/settings/unfold.py:125 +#: evibes/settings/unfold.py:129 msgid "Orders" msgstr "الطلبات" -#: evibes/settings/unfold.py:130 +#: evibes/settings/unfold.py:134 msgid "Products" msgstr "المنتجات" -#: evibes/settings/unfold.py:135 +#: evibes/settings/unfold.py:139 msgid "Categories" msgstr "الفئات" -#: evibes/settings/unfold.py:140 +#: evibes/settings/unfold.py:144 msgid "Brands" msgstr "العلامات التجارية" -#: evibes/settings/unfold.py:145 +#: evibes/settings/unfold.py:149 msgid "Blogposts" msgstr "المدونات" diff --git a/evibes/locale/cs_CZ/LC_MESSAGES/django.mo b/evibes/locale/cs_CZ/LC_MESSAGES/django.mo index ce634bf7765ee545c2e1335e69b9701e139e84d3..cb96553ecdacfebdcb68a1b3ea7f019f8a484829 100644 GIT binary patch delta 1002 zcmXZaL1+^}6oBDr6RWmH)2dNXbeh&`V;iLPP_zo#O1&t8dWq(+&92SHuqnG)Ya%D+(Uc``>={K|2xXOMGRvTfh;_V z)Ku-b4STVH`szgRB88iIVdDzCf=zfMa1v!__fQHw2;#XQevPd>e~$zB7nfr{+mv~O zcnXi9Jf9Y+uVxr5!^fEB_@ClMDsN=jY(m}IT081#l$|`o4t$H9_#35wW?PatffDzi zY@i?4;Sp@XG;Y9AEK^HeWgy>v5+#0ulITqkzYF5exR>V(xDPvYE#WZAd>`fHZlWx7 z3MJnx%0geDENB5`A%8UIPcGHSxyi%?$~WpoIpRYoJ2{T>?NdQ)q1>4Q_TU5#;d7LQ zhvT(*tMCkQ3}we&;5C$m+>KYh)yM0)Dv?lIx7=d6Fx%Oaww+AgH!YKa9(4<* zpDFI}v}fh>wll&LJ7ZP9L@!5&QiWmHDET?7OP5ST=e&ZiO~ZLPrE~VHIbAZcuHzTS e_4%bVR?eBfpULWs<;>r~rPSw&ezG#sI`bdZeTicL delta 864 zcmXZaF-%iI9LMp0eYLeEU|SJGC{iexD%QbZLL@aN6iJwHXrciU0tt1gap|B$-@@eL z@S@2A2ajVDh_ z(^f)e1^jo3AD%y+*-YH*FJ2=qbeJXZDR$uk=I}KR;u^+q7bCcbOt+sdK5*klm^AaP z$xAnXh+H*m#|&P_d#Htqs6-`HqFEQ0afJ9Kj$$1({}*cB5r**$Rk%7?$~v(RvlwB0 z8+QX!*u%hcyn%O*7!5L%=$LZ z%N)nPgv+eBoid|ndwjEX#M7u9l<^iW<853+74!|2u;Jo;RN;r%iA^M>#n|=@Oe0I# z2>SZwPh7_$DpA$NZ(aNWAJSjLG5n57*pX@7nSRuXJwg>aiCSO=RcHlOPz^P&j-;?J z8O~o58+7Q~{6-z^F=}V$sBa$OToor#cclmK;{#N|FWmSmoF#sP+UXDH395kTfLRDN zrhH~W+)ITl==HMsVM1M)A=+J9mZnEL&`sB)<0O~e2`b)rGS8dty!NUmx4Gqwwr>`a Kej*4De7*qj;80Tl diff --git a/evibes/locale/cs_CZ/LC_MESSAGES/django.po b/evibes/locale/cs_CZ/LC_MESSAGES/django.po index 10b3b5e7..1cc7a88f 100644 --- a/evibes/locale/cs_CZ/LC_MESSAGES/django.po +++ b/evibes/locale/cs_CZ/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-16 15:38+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -34,98 +34,102 @@ msgstr "" "ponechte 0." #: evibes/settings/constance.py:28 +msgid "Shows if the taxes are already included in product's selling prices" +msgstr "Zobrazuje, zda jsou daně již zahrnuty v prodejních cenách produktu." + +#: evibes/settings/constance.py:29 msgid "Exchange rate API key" msgstr "Klíč API pro směnný kurz" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "!!!DO NOT CHANGE!!!" msgstr "!!!NEMĚŇTE!!!" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP host" msgstr "SMTP host" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "SMTP port" msgstr "Port SMTP" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use TLS" msgstr "Použití protokolu TLS" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "Use SSL" msgstr "Použití protokolu SSL" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP username" msgstr "Uživatelské jméno SMTP" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "SMTP password" msgstr "Heslo SMTP" -#: evibes/settings/constance.py:37 +#: evibes/settings/constance.py:38 msgid "Mail from option" msgstr "Adresa odesílatele e-mailů" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from anonymous users" msgstr "Kolik dní uchováváme zprávy od anonymních uživatelů" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "How many days we store messages from authenticated users" msgstr "Kolik dní uchováváme zprávy od ověřených uživatelů" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "Disable buy functionality" msgstr "Zakázat funkci nákupu" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenStreetMap Nominatim API URL" msgstr "URL rozhraní API OpenStreetMap Nominatim" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "OpenAI API Key" msgstr "Klíč API OpenAI" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "Abstract API Key" msgstr "Abstraktní klíč API" -#: evibes/settings/constance.py:45 +#: evibes/settings/constance.py:46 msgid "HTTP Proxy" msgstr "Proxy server HTTP" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing advertisiment data" msgstr "Subjekt pro ukládání dat inzerátů" -#: evibes/settings/constance.py:48 +#: evibes/settings/constance.py:49 msgid "An entity for storing analytics data" msgstr "Subjekt pro ukládání analytických dat" -#: evibes/settings/constance.py:50 +#: evibes/settings/constance.py:51 msgid "Save responses from vendors' APIs" msgstr "Ukládání odpovědí z rozhraní API dodavatelů" -#: evibes/settings/constance.py:56 +#: evibes/settings/constance.py:57 msgid "Legal Options" msgstr "Právní možnosti" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "Možnosti e-mailu" -#: evibes/settings/constance.py:73 +#: evibes/settings/constance.py:75 msgid "Features Options" msgstr "Možnosti funkcí" -#: evibes/settings/constance.py:82 +#: evibes/settings/constance.py:84 msgid "SEO Options" msgstr "Možnosti SEO" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:88 msgid "Debugging Options" msgstr "Možnosti ladění" @@ -229,62 +233,62 @@ msgstr "" "## Verze\n" "Aktuální verze API: {EVIBES_VERSION}\n" -#: evibes/settings/unfold.py:53 +#: evibes/settings/unfold.py:57 msgid "Menu" msgstr "Nabídka" -#: evibes/settings/unfold.py:58 +#: evibes/settings/unfold.py:62 msgid "Dashboard" msgstr "Přístrojová deska" -#: evibes/settings/unfold.py:63 +#: evibes/settings/unfold.py:67 msgid "Health" msgstr "Zdraví" -#: evibes/settings/unfold.py:68 +#: evibes/settings/unfold.py:72 msgid "Config" msgstr "Konfigurace" -#: evibes/settings/unfold.py:73 +#: evibes/settings/unfold.py:77 msgid "Periodic Tasks" msgstr "Pravidelné úkoly" -#: evibes/settings/unfold.py:98 +#: evibes/settings/unfold.py:102 msgid "Taskboard" msgstr "Taskboard" -#: evibes/settings/unfold.py:103 +#: evibes/settings/unfold.py:107 msgid "Support" msgstr "Podpora" -#: evibes/settings/unfold.py:110 +#: evibes/settings/unfold.py:114 msgid "Quick Links" msgstr "Rychlé odkazy" -#: evibes/settings/unfold.py:115 +#: evibes/settings/unfold.py:119 msgid "Users" msgstr "Uživatelé" -#: evibes/settings/unfold.py:120 +#: evibes/settings/unfold.py:124 msgid "Groups" msgstr "Skupiny" -#: evibes/settings/unfold.py:125 +#: evibes/settings/unfold.py:129 msgid "Orders" msgstr "Objednávky" -#: evibes/settings/unfold.py:130 +#: evibes/settings/unfold.py:134 msgid "Products" msgstr "Produkty" -#: evibes/settings/unfold.py:135 +#: evibes/settings/unfold.py:139 msgid "Categories" msgstr "Kategorie" -#: evibes/settings/unfold.py:140 +#: evibes/settings/unfold.py:144 msgid "Brands" msgstr "Značky" -#: evibes/settings/unfold.py:145 +#: evibes/settings/unfold.py:149 msgid "Blogposts" msgstr "Blogposty" diff --git a/evibes/locale/da_DK/LC_MESSAGES/django.mo b/evibes/locale/da_DK/LC_MESSAGES/django.mo index 27a26682443543fd5feabd58248d74da3ef9c3b3..5ac503015c4671c913b85859e00920e88c2169c4 100644 GIT binary patch delta 997 zcmXZaO=uHA6u|MG<}GT;7qJIBHr5t8h?@8iYNd{% zR_-+F0y4-DDMVhwayu^`@SsQV0yTbzn&<~=qCZjGK;3o|Cs9j&5ZB-(9X=*FngId}HsAn~bx`4B&l_;R@WEweMxq{tz8;9{3 z>can`9$kX-ID;wFBMl-iqW*5CtMaA3yRNs=9P8=RlIrR=(fjCHT5a3t`cK!UyJf6w zuZ+b;TKjoQ({+#9wpJg<2AYS)OH+Yyb0!?OCUnl*z&O4&j^|q^d%?KHj5nFJSsu(e zzm%QKgqs5sSkH5ddEU4gTm6*0+%kN^4Xod5N(JNO@@_7)eo?b{*0)(}tWSao&E(tA VxV2Ohp$*C9c=>=tK_zEy{Rg9}h5-No delta 864 zcmXZaKWI}?6vy#XUyQNZrit-SXlr6qA*M;EqFFM8WOA}Ypv4MJhh%DmLWdwUi-;)F zA?TDr+o=dHb;#gSs5&^gIRsHe`iD{!TL(qk?~mL|?)$uR?|b*&b6%ble&-vX!@j3R z%g~4D_j}B8xOajJ?Tcr2yVvY1o+Hlnn+@P3Ucfm_VjV|u1yAF9^y5e5b^GMvZ*G1U zLuL&-;3mog{-9YO#_>Fkqc$p{7Am0@nsIRzCx~m9#Z}b%9n^cf=)=FLgKLnjEP^pi zpr8G%;3jV3AQRIVz(qWROU_5A%$}h(dhX&^E^gx$#^2#7+;;OnutfaFjo%_|%}?P; z_P1GX?ojp$wn%X^+|8go+&%dMsv-|irEXyY-=YqEb6?0 zmxxQ)Q0Z%K;2~KiZ6Td-~`WHqpO&wLrJQtO^jGWynNG?`Ke)gElS$v6_ zZ=)*xAx8aG(k%v5(x0erbc8xUf4p0XDC)Ts@;Pk+N3e)Ga1~XFyEu#YP@k~l{Em8V zA1Sn5q-#C1X0I3SvF5Os$czyxi>vfBT_sk#M%O=GO\n" "Language-Team: LANGUAGE \n" @@ -34,98 +34,102 @@ msgstr "" " behandle skatter." #: evibes/settings/constance.py:28 +msgid "Shows if the taxes are already included in product's selling prices" +msgstr "Viser, om afgifterne allerede er inkluderet i produktets salgspris" + +#: evibes/settings/constance.py:29 msgid "Exchange rate API key" msgstr "API-nøgle til valutakurs" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "!!!DO NOT CHANGE!!!" msgstr "!!!SKIFT IKKE!!!" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP host" msgstr "SMTP-vært" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "SMTP port" msgstr "SMTP-port" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use TLS" msgstr "Brug TLS" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "Use SSL" msgstr "Brug SSL" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP username" msgstr "SMTP-brugernavn" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "SMTP password" msgstr "SMTP-adgangskode" -#: evibes/settings/constance.py:37 +#: evibes/settings/constance.py:38 msgid "Mail from option" msgstr "Adressen på e-mailens afsender" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from anonymous users" msgstr "Hvor mange dage vi gemmer beskeder fra anonyme brugere" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "How many days we store messages from authenticated users" msgstr "Hvor mange dage vi gemmer beskeder fra godkendte brugere" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "Disable buy functionality" msgstr "Deaktiver købsfunktionalitet" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenStreetMap Nominatim API URL" msgstr "OpenStreetMap Nominatim API URL" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "OpenAI API Key" msgstr "OpenAI API-nøgle" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "Abstract API Key" msgstr "Abstrakt API-nøgle" -#: evibes/settings/constance.py:45 +#: evibes/settings/constance.py:46 msgid "HTTP Proxy" msgstr "HTTP-proxy" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing advertisiment data" msgstr "En enhed til lagring af annonceringsdata" -#: evibes/settings/constance.py:48 +#: evibes/settings/constance.py:49 msgid "An entity for storing analytics data" msgstr "En enhed til lagring af analysedata" -#: evibes/settings/constance.py:50 +#: evibes/settings/constance.py:51 msgid "Save responses from vendors' APIs" msgstr "Gem svar fra leverandørers API'er" -#: evibes/settings/constance.py:56 +#: evibes/settings/constance.py:57 msgid "Legal Options" msgstr "Juridiske muligheder" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "Indstillinger for e-mail" -#: evibes/settings/constance.py:73 +#: evibes/settings/constance.py:75 msgid "Features Options" msgstr "Funktioner Indstillinger" -#: evibes/settings/constance.py:82 +#: evibes/settings/constance.py:84 msgid "SEO Options" msgstr "SEO-muligheder" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:88 msgid "Debugging Options" msgstr "Indstillinger for fejlfinding" @@ -229,62 +233,62 @@ msgstr "" "## Version\n" "Nuværende API-version: {EVIBES_VERSION}\n" -#: evibes/settings/unfold.py:53 +#: evibes/settings/unfold.py:57 msgid "Menu" msgstr "Menu" -#: evibes/settings/unfold.py:58 +#: evibes/settings/unfold.py:62 msgid "Dashboard" msgstr "Dashboard" -#: evibes/settings/unfold.py:63 +#: evibes/settings/unfold.py:67 msgid "Health" msgstr "Sundhed" -#: evibes/settings/unfold.py:68 +#: evibes/settings/unfold.py:72 msgid "Config" msgstr "Konfig" -#: evibes/settings/unfold.py:73 +#: evibes/settings/unfold.py:77 msgid "Periodic Tasks" msgstr "Periodiske opgaver" -#: evibes/settings/unfold.py:98 +#: evibes/settings/unfold.py:102 msgid "Taskboard" msgstr "Opgavetavle" -#: evibes/settings/unfold.py:103 +#: evibes/settings/unfold.py:107 msgid "Support" msgstr "Støtte" -#: evibes/settings/unfold.py:110 +#: evibes/settings/unfold.py:114 msgid "Quick Links" msgstr "Hurtige links" -#: evibes/settings/unfold.py:115 +#: evibes/settings/unfold.py:119 msgid "Users" msgstr "Brugere" -#: evibes/settings/unfold.py:120 +#: evibes/settings/unfold.py:124 msgid "Groups" msgstr "Grupper" -#: evibes/settings/unfold.py:125 +#: evibes/settings/unfold.py:129 msgid "Orders" msgstr "Bestillinger" -#: evibes/settings/unfold.py:130 +#: evibes/settings/unfold.py:134 msgid "Products" msgstr "Produkter" -#: evibes/settings/unfold.py:135 +#: evibes/settings/unfold.py:139 msgid "Categories" msgstr "Kategorier" -#: evibes/settings/unfold.py:140 +#: evibes/settings/unfold.py:144 msgid "Brands" msgstr "Mærker" -#: evibes/settings/unfold.py:145 +#: evibes/settings/unfold.py:149 msgid "Blogposts" msgstr "Blogindlæg" diff --git a/evibes/locale/de_DE/LC_MESSAGES/django.mo b/evibes/locale/de_DE/LC_MESSAGES/django.mo index 1292415d0c1af6c54c144ff5e7a73ed948646bf4..22aa1af4d237e7b2eef126f07d7eb4e2d4422c18 100644 GIT binary patch delta 1014 zcmXZaPe>F|9Ki9XyIHwy?OIBiOiCz4-1;$a;=$1%$P3YW>eoo&m`6Kq#1)QZh`7`t!;dvF#d!DEz4y+o8;BQC<6kUOCDlwM3wNSS7)06O1(by@MP5PqH%fRCt0)^>MfvtAjxPr}gz^cG zpp^V9l1p92O*o74@7&2y|6M%H(IF*&hce+~H1IRZ$(B$`z8uA>ZEd6VxS#$O%;9O2 z`43RW&*OD`i*lg;?3zO;`G&KV@3n0;-IZi4+tWdZ{4l$@q^ykj-#WR=Zl!JGVh^gT zG8P+1_wpp?mYPZ1TYVPmOCB#2X9Dd^=&)dPXk9gdwtS;4*Eg1ZO*>xRE!oEAK~MWd zyOa<21UfLT>v)s&IC)cDOf{x+qsEyGwdHl|;<&aQqjRAt8Q;_6#y3t#3Qya{)8~yp hWtAp^X?g=^pO}--{zqZYw92l>5wT^q*ELUS}PWjb|}?J(Lu8m6i1^S zgBUCwN;{<34qXI^g-%`6p%jCNQaae;WDxxR$T{%8pL_0k|Iht$W$AKxJLZ3FlmX%d zG2=5U;BE&G$~VvKX2`6Gho~32&3f?~Ch!hs@iCskw|EdgVGuWw;r7+lzq|GwjGC40 z4=+dQ5bQDQ!XzHX3#f&LP!o-yCK_|~NxVe;9_F!z8oz}aw}XCcp*F6MEM;*#jTsEG zz7<`=FdnDj1|Gl%7{;g07pRlXq857N>Wi+viYdM~uoHi|_TM-{{jd98;@E1xjse!U zab9kb_6gi)#gDP}j#o~#GqZum==TH9qqeW>%AqziiptPkREDOIsqCR^e~wIPFENSl zkfc}x%bNHzFB-6i+L@PZPZV}0Q2#^v8qOR^ID%JmxDJ?=;BA7${ zGlR%ktdt`EO7(p{Xuu=a@fqr5uTZJ3y7~fYqwnz|uA|1aQ2jz_vnO~2b&y$S6}8SB z`mm4C{AQJq7xP)=q?Z{`YW2gMC2~ZDP&r3v*D7&>wXDA~?G>ZC1f5@7Qpwgoc=@h+ LAsUNTYU$\n" "Language-Team: LANGUAGE \n" @@ -34,99 +34,105 @@ msgstr "" "stehen, wenn Sie keine Steuern verarbeiten wollen." #: evibes/settings/constance.py:28 +msgid "Shows if the taxes are already included in product's selling prices" +msgstr "" +"Zeigt an, ob die Steuern bereits in den Verkaufspreisen des Produkts " +"enthalten sind" + +#: evibes/settings/constance.py:29 msgid "Exchange rate API key" msgstr "Wechselkurs-API-Schlüssel" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "!!!DO NOT CHANGE!!!" msgstr "!!!NICHT ÄNDERN!!!" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP host" msgstr "SMTP-Host" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "SMTP port" msgstr "SMTP-Port" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use TLS" msgstr "Use TLS" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "Use SSL" msgstr "Use SSL" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP username" msgstr "SMTP-Benutzername" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "SMTP password" msgstr "SMTP-Kennwort" -#: evibes/settings/constance.py:37 +#: evibes/settings/constance.py:38 msgid "Mail from option" msgstr "Die Adresse des Absenders der E-Mail" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from anonymous users" msgstr "Wie viele Tage wir Nachrichten von anonymen Nutzern speichern" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "How many days we store messages from authenticated users" msgstr "" "Wie viele Tage wir Nachrichten von authentifizierten Benutzern speichern" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "Disable buy functionality" msgstr "Kauffunktionalität deaktivieren" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenStreetMap Nominatim API URL" msgstr "OpenStreetMap Nominatim API URL" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "OpenAI API Key" msgstr "OpenAI API Key" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "Abstract API Key" msgstr "Abstrakter API-Schlüssel" -#: evibes/settings/constance.py:45 +#: evibes/settings/constance.py:46 msgid "HTTP Proxy" msgstr "HTTP-Proxy" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing advertisiment data" msgstr "Eine Einheit zur Speicherung von Werbedaten" -#: evibes/settings/constance.py:48 +#: evibes/settings/constance.py:49 msgid "An entity for storing analytics data" msgstr "Eine Einheit zur Speicherung von Analysedaten" -#: evibes/settings/constance.py:50 +#: evibes/settings/constance.py:51 msgid "Save responses from vendors' APIs" msgstr "Speichern von Antworten aus den APIs von Anbietern" -#: evibes/settings/constance.py:56 +#: evibes/settings/constance.py:57 msgid "Legal Options" msgstr "Rechtliche Optionen" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "E-Mail-Optionen" -#: evibes/settings/constance.py:73 +#: evibes/settings/constance.py:75 msgid "Features Options" msgstr "Merkmale Optionen" -#: evibes/settings/constance.py:82 +#: evibes/settings/constance.py:84 msgid "SEO Options" msgstr "SEO-Optionen" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:88 msgid "Debugging Options" msgstr "Debugging-Optionen" @@ -230,62 +236,62 @@ msgstr "" "## Version\n" "Aktuelle API-Version: {EVIBES_VERSION}\n" -#: evibes/settings/unfold.py:53 +#: evibes/settings/unfold.py:57 msgid "Menu" msgstr "Menü" -#: evibes/settings/unfold.py:58 +#: evibes/settings/unfold.py:62 msgid "Dashboard" msgstr "Dashboard" -#: evibes/settings/unfold.py:63 +#: evibes/settings/unfold.py:67 msgid "Health" msgstr "Gesundheit" -#: evibes/settings/unfold.py:68 +#: evibes/settings/unfold.py:72 msgid "Config" msgstr "Konfigurieren Sie" -#: evibes/settings/unfold.py:73 +#: evibes/settings/unfold.py:77 msgid "Periodic Tasks" msgstr "Regelmäßige Aufgaben" -#: evibes/settings/unfold.py:98 +#: evibes/settings/unfold.py:102 msgid "Taskboard" msgstr "Aufgabentafel" -#: evibes/settings/unfold.py:103 +#: evibes/settings/unfold.py:107 msgid "Support" msgstr "Unterstützung" -#: evibes/settings/unfold.py:110 +#: evibes/settings/unfold.py:114 msgid "Quick Links" msgstr "Schnelle Links" -#: evibes/settings/unfold.py:115 +#: evibes/settings/unfold.py:119 msgid "Users" msgstr "Benutzer" -#: evibes/settings/unfold.py:120 +#: evibes/settings/unfold.py:124 msgid "Groups" msgstr "Gruppen" -#: evibes/settings/unfold.py:125 +#: evibes/settings/unfold.py:129 msgid "Orders" msgstr "Bestellungen" -#: evibes/settings/unfold.py:130 +#: evibes/settings/unfold.py:134 msgid "Products" msgstr "Produkte" -#: evibes/settings/unfold.py:135 +#: evibes/settings/unfold.py:139 msgid "Categories" msgstr "Kategorien" -#: evibes/settings/unfold.py:140 +#: evibes/settings/unfold.py:144 msgid "Brands" msgstr "Marken" -#: evibes/settings/unfold.py:145 +#: evibes/settings/unfold.py:149 msgid "Blogposts" msgstr "Blogposts" diff --git a/evibes/locale/en_GB/LC_MESSAGES/django.mo b/evibes/locale/en_GB/LC_MESSAGES/django.mo index b6239bb1a4b2528ecf8742cded626f3aebeb088b..78320c7cbc0d6da7efcaae5fe63cf1735c00c10f 100644 GIT binary patch delta 995 zcmbu+%}Z2K9LDjV&SaWQj#`G4dCG}iCMBrApdvA7Q$bV^iHpn3EpJ?$m>IDaIc;VU zL_t$6idIHM1ijeGMayW{t`X zZGgUpe!0PH5B_Q7i}pQXHnPlY0XwM=EjLSJfL&O`O?U}2_!L|44L0F>WV(I!^$-7k z5!=lwmTWWY<_BGv!fm(`_o6mBhFT~@Efo8D5_eEf;ULbS=6^-aTf`)`Qt04mWKYXr zFK)*s_P3+{#YtSviwK*simiCXdkb~5d#H^b`}(=BU*bB(U*jsO>Y{RVnJy^pT8g|67uR?zhyXKSO0;r0QZGIWKiwt41B zVlXu{R+ucg=#(pug{~Z&3rj92hAxPUVUR!XqVZfjkq`4cxUj-&C@ Tj6}I`dOqFu|EtvI(-;2%l}CiR delta 868 zcmXZZO-NKx7{>9}u1;!YW#?g@iXS(AB^BO^1AJMedO!M7&Du+ za|UJnAadU*Q{XeFtuYA6nYiqq1b2#7L zGUz4tA$-pjSL2y4uC2`6zS*sHo>qAGCr>=oc!X4X?L+eFxdv4pB*;p)L@8 zNdAhtoBh*V2)a$4y|N8nVD(VZL?+i2RDa>Jh014V2(6v7& z\n" "Language-Team: LANGUAGE \n" @@ -38,98 +38,102 @@ msgstr "" "process taxes." #: evibes/settings/constance.py:28 +msgid "Shows if the taxes are already included in product's selling prices" +msgstr "Shows if the taxes are already included in product's selling prices" + +#: evibes/settings/constance.py:29 msgid "Exchange rate API key" msgstr "Exchange rate API key" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "!!!DO NOT CHANGE!!!" msgstr "!!!DO NOT CHANGE!!!" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP host" msgstr "SMTP host" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "SMTP port" msgstr "SMTP port" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use TLS" msgstr "Use TLS" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "Use SSL" msgstr "Use SSL" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP username" msgstr "SMTP username" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "SMTP password" msgstr "SMTP password" -#: evibes/settings/constance.py:37 +#: evibes/settings/constance.py:38 msgid "Mail from option" msgstr "The address of the emails sender" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from anonymous users" msgstr "How many days we store messages from anonymous users" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "How many days we store messages from authenticated users" msgstr "How many days we store messages from authenticated users" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "Disable buy functionality" msgstr "Disable buy functionality" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenStreetMap Nominatim API URL" msgstr "OpenStreetMap Nominatim API URL" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "OpenAI API Key" msgstr "OpenAI API Key" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "Abstract API Key" msgstr "Abstract API Key" -#: evibes/settings/constance.py:45 +#: evibes/settings/constance.py:46 msgid "HTTP Proxy" msgstr "HTTP Proxy" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing advertisiment data" msgstr "An entity for storing advertisiment data" -#: evibes/settings/constance.py:48 +#: evibes/settings/constance.py:49 msgid "An entity for storing analytics data" msgstr "An entity for storing analytics data" -#: evibes/settings/constance.py:50 +#: evibes/settings/constance.py:51 msgid "Save responses from vendors' APIs" msgstr "Save responses from vendors' APIs" -#: evibes/settings/constance.py:56 +#: evibes/settings/constance.py:57 msgid "Legal Options" msgstr "Legal Options" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "Email Options" -#: evibes/settings/constance.py:73 +#: evibes/settings/constance.py:75 msgid "Features Options" msgstr "Features Options" -#: evibes/settings/constance.py:82 +#: evibes/settings/constance.py:84 msgid "SEO Options" msgstr "SEO Options" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:88 msgid "Debugging Options" msgstr "Debugging Options" @@ -233,62 +237,62 @@ msgstr "" "## Version\n" "Current API version: {EVIBES_VERSION}\n" -#: evibes/settings/unfold.py:53 +#: evibes/settings/unfold.py:57 msgid "Menu" msgstr "Menu" -#: evibes/settings/unfold.py:58 +#: evibes/settings/unfold.py:62 msgid "Dashboard" msgstr "Dashboard" -#: evibes/settings/unfold.py:63 +#: evibes/settings/unfold.py:67 msgid "Health" msgstr "Health" -#: evibes/settings/unfold.py:68 +#: evibes/settings/unfold.py:72 msgid "Config" msgstr "Config" -#: evibes/settings/unfold.py:73 +#: evibes/settings/unfold.py:77 msgid "Periodic Tasks" msgstr "Periodic Tasks" -#: evibes/settings/unfold.py:98 +#: evibes/settings/unfold.py:102 msgid "Taskboard" msgstr "Taskboard" -#: evibes/settings/unfold.py:103 +#: evibes/settings/unfold.py:107 msgid "Support" msgstr "Support" -#: evibes/settings/unfold.py:110 +#: evibes/settings/unfold.py:114 msgid "Quick Links" msgstr "Quick Links" -#: evibes/settings/unfold.py:115 +#: evibes/settings/unfold.py:119 msgid "Users" msgstr "Users" -#: evibes/settings/unfold.py:120 +#: evibes/settings/unfold.py:124 msgid "Groups" msgstr "Groups" -#: evibes/settings/unfold.py:125 +#: evibes/settings/unfold.py:129 msgid "Orders" msgstr "Orders" -#: evibes/settings/unfold.py:130 +#: evibes/settings/unfold.py:134 msgid "Products" msgstr "Products" -#: evibes/settings/unfold.py:135 +#: evibes/settings/unfold.py:139 msgid "Categories" msgstr "Categories" -#: evibes/settings/unfold.py:140 +#: evibes/settings/unfold.py:144 msgid "Brands" msgstr "Brands" -#: evibes/settings/unfold.py:145 +#: evibes/settings/unfold.py:149 msgid "Blogposts" msgstr "Blogposts" diff --git a/evibes/locale/en_US/LC_MESSAGES/django.mo b/evibes/locale/en_US/LC_MESSAGES/django.mo index ed21c9febb77d2cfb89529651cd98fd3fa9925f2..ca6ed7d8877f8a6344c1de36aee9e3eb2760a02d 100644 GIT binary patch delta 1000 zcmb`^y=zlZ9LDiqn^<3JYU4{#YR##wSYO%-I#jS?shcQ*c2PQ9l3RP>(n@Yh>ta-N z2#8Biq>BimOA$3r4xPnS&`ohleHknwXc6@Lkn<;a$jRsa&dqsy(m3&VwDMtd`mWIi z={xDSTg*oAPb*)v?2%ZQ0j9{QFhR znpG^l$!rHd$YBN#;Wj*u+UPuLp%ArD?CUu^LVXp7v5uPm4K;5S)7Va-gLfi(S|8@| zFt)M3o%1g)U>7eUT!*)?9q)J-P&a#w+US|Dmwf#idl-L*WB3c#;xVqNc_(ok&!EO1 zN%prz9@gMXoFM*J7;)9@99t*9(cQe!JyhgRP?0a8B5$BJ*tn~iR1TF?x3BwA?}w13 z?I3?lY%whI;4YVDinE3C-ozzg97ofa7>NpD Qt&zW0pUmFu_&-bi17_ofxBvhE delta 868 zcmXZZJ4l;R7{>88ewup0OH#FnmqemqZR2FYMbIi86hRR|t>R@+EYwY*g9gN@9bwVFW1)kAm(tsjWZY} z_9>j=|mK7pRSTydFeFJ%);U1+~FfjN=I^>i?*yL*%Qd%aD)N@uht`eZCu&^l*&) z74_TV8)cMSXyZ@{g}yp`yO^`M!8&eF$@ypFo1PM|AB^hWSA> zM3O-w`GiupsHZ=rC+KRA>55;il&*st)31Y$NRpBM2!*TGu)Q0!6sDKr3)`O~%S9U8 E15N-_`~Uy| diff --git a/evibes/locale/en_US/LC_MESSAGES/django.po b/evibes/locale/en_US/LC_MESSAGES/django.po index ac841f70..409b6492 100644 --- a/evibes/locale/en_US/LC_MESSAGES/django.po +++ b/evibes/locale/en_US/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-16 15:38+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -34,98 +34,102 @@ msgstr "" "process taxes." #: evibes/settings/constance.py:28 +msgid "Shows if the taxes are already included in product's selling prices" +msgstr "Shows if the taxes are already included in product's selling prices" + +#: evibes/settings/constance.py:29 msgid "Exchange rate API key" msgstr "Exchange rate API key" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "!!!DO NOT CHANGE!!!" msgstr "!!!DO NOT CHANGE!!!" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP host" msgstr "SMTP host" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "SMTP port" msgstr "SMTP port" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use TLS" msgstr "Use TLS" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "Use SSL" msgstr "Use SSL" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP username" msgstr "SMTP username" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "SMTP password" msgstr "SMTP password" -#: evibes/settings/constance.py:37 +#: evibes/settings/constance.py:38 msgid "Mail from option" msgstr "The address of the emails sender" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from anonymous users" msgstr "How many days we store messages from anonymous users" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "How many days we store messages from authenticated users" msgstr "How many days we store messages from authenticated users" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "Disable buy functionality" msgstr "Disable buy functionality" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenStreetMap Nominatim API URL" msgstr "OpenStreetMap Nominatim API URL" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "OpenAI API Key" msgstr "OpenAI API Key" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "Abstract API Key" msgstr "Abstract API Key" -#: evibes/settings/constance.py:45 +#: evibes/settings/constance.py:46 msgid "HTTP Proxy" msgstr "HTTP Proxy" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing advertisiment data" msgstr "An entity for storing advertisiment data" -#: evibes/settings/constance.py:48 +#: evibes/settings/constance.py:49 msgid "An entity for storing analytics data" msgstr "An entity for storing analytics data" -#: evibes/settings/constance.py:50 +#: evibes/settings/constance.py:51 msgid "Save responses from vendors' APIs" msgstr "Save responses from vendors' APIs" -#: evibes/settings/constance.py:56 +#: evibes/settings/constance.py:57 msgid "Legal Options" msgstr "Legal Options" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "Email Options" -#: evibes/settings/constance.py:73 +#: evibes/settings/constance.py:75 msgid "Features Options" msgstr "Features Options" -#: evibes/settings/constance.py:82 +#: evibes/settings/constance.py:84 msgid "SEO Options" msgstr "SEO Options" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:88 msgid "Debugging Options" msgstr "Debugging Options" @@ -229,62 +233,62 @@ msgstr "" "## Version\n" "Current API version: {EVIBES_VERSION}\n" -#: evibes/settings/unfold.py:53 +#: evibes/settings/unfold.py:57 msgid "Menu" msgstr "Menu" -#: evibes/settings/unfold.py:58 +#: evibes/settings/unfold.py:62 msgid "Dashboard" msgstr "Dashboard" -#: evibes/settings/unfold.py:63 +#: evibes/settings/unfold.py:67 msgid "Health" msgstr "Health" -#: evibes/settings/unfold.py:68 +#: evibes/settings/unfold.py:72 msgid "Config" msgstr "Config" -#: evibes/settings/unfold.py:73 +#: evibes/settings/unfold.py:77 msgid "Periodic Tasks" msgstr "Periodic Tasks" -#: evibes/settings/unfold.py:98 +#: evibes/settings/unfold.py:102 msgid "Taskboard" msgstr "Taskboard" -#: evibes/settings/unfold.py:103 +#: evibes/settings/unfold.py:107 msgid "Support" msgstr "Support" -#: evibes/settings/unfold.py:110 +#: evibes/settings/unfold.py:114 msgid "Quick Links" msgstr "Quick Links" -#: evibes/settings/unfold.py:115 +#: evibes/settings/unfold.py:119 msgid "Users" msgstr "Users" -#: evibes/settings/unfold.py:120 +#: evibes/settings/unfold.py:124 msgid "Groups" msgstr "Groups" -#: evibes/settings/unfold.py:125 +#: evibes/settings/unfold.py:129 msgid "Orders" msgstr "Orders" -#: evibes/settings/unfold.py:130 +#: evibes/settings/unfold.py:134 msgid "Products" msgstr "Products" -#: evibes/settings/unfold.py:135 +#: evibes/settings/unfold.py:139 msgid "Categories" msgstr "Categories" -#: evibes/settings/unfold.py:140 +#: evibes/settings/unfold.py:144 msgid "Brands" msgstr "Brands" -#: evibes/settings/unfold.py:145 +#: evibes/settings/unfold.py:149 msgid "Blogposts" msgstr "Blogposts" diff --git a/evibes/locale/es_ES/LC_MESSAGES/django.mo b/evibes/locale/es_ES/LC_MESSAGES/django.mo index cd452852d688e5a20bcf159c7feaba485c84f9fa..cd86aae6fd7f4df573c544e1996bab65a927cf79 100644 GIT binary patch delta 1012 zcmXxiOGs2v9LMpaqxLXsW=b;>I^)>e5up|q6^Pm`)<2pmxQtIT U>+E%xD|u9c|EuIHy`A^|0c2f@@&Et; delta 864 zcmXZbOGs2v9LMqhc%7S?kM5*Bu*c|C7%fKy!-1GZIEA#z#XzBg2)Ly6yo`Za z(SCDto(X=7SraC)4b!MVIn+XV)It-kJ%>ZI?_&m6QO|!xJy*tB{EK>VbrQ;2@iKPMz-?@2;2zfDLp+I(ozGC2y+8$8cI{WL{Te&ye}^Y<-;Ez(p7tNte}}X+ei!4! zw<&HW+4fmHCgR&fHG|Tn>YH!lIp+PsH2%Y@m?jOq&^T&`W>7CYkJ_n6NKAWzXK@je zxQ6`fBbTBwKIBH9pgvh$C`2vLi*dY$IuqA1hXvHan>c`\n" "Language-Team: LANGUAGE \n" @@ -34,98 +34,104 @@ msgstr "" "procesar los impuestos." #: evibes/settings/constance.py:28 +msgid "Shows if the taxes are already included in product's selling prices" +msgstr "" +"Muestra si los impuestos ya están incluidos en los precios de venta del " +"producto" + +#: evibes/settings/constance.py:29 msgid "Exchange rate API key" msgstr "Clave API de tipo de cambio" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "!!!DO NOT CHANGE!!!" msgstr "!!!NO CAMBIES!!!" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP host" msgstr "Host SMTP" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "SMTP port" msgstr "Puerto SMTP" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use TLS" msgstr "Utilizar TLS" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "Use SSL" msgstr "Utilizar SSL" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP username" msgstr "Nombre de usuario SMTP" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "SMTP password" msgstr "Contraseña SMTP" -#: evibes/settings/constance.py:37 +#: evibes/settings/constance.py:38 msgid "Mail from option" msgstr "Dirección del remitente del correo electrónico" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from anonymous users" msgstr "Cuántos días almacenamos los mensajes de usuarios anónimos" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "How many days we store messages from authenticated users" msgstr "Cuántos días almacenamos los mensajes de los usuarios autenticados" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "Disable buy functionality" msgstr "Desactivar la función de compra" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenStreetMap Nominatim API URL" msgstr "URL de la API Nominatim de OpenStreetMap" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "OpenAI API Key" msgstr "Clave API de OpenAI" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "Abstract API Key" msgstr "Clave API abstracta" -#: evibes/settings/constance.py:45 +#: evibes/settings/constance.py:46 msgid "HTTP Proxy" msgstr "Proxy HTTP" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing advertisiment data" msgstr "Una entidad para almacenar datos publicitarios" -#: evibes/settings/constance.py:48 +#: evibes/settings/constance.py:49 msgid "An entity for storing analytics data" msgstr "Una entidad para almacenar datos analíticos" -#: evibes/settings/constance.py:50 +#: evibes/settings/constance.py:51 msgid "Save responses from vendors' APIs" msgstr "Guardar las respuestas de las API de los proveedores" -#: evibes/settings/constance.py:56 +#: evibes/settings/constance.py:57 msgid "Legal Options" msgstr "Opciones legales" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "Opciones de correo electrónico" -#: evibes/settings/constance.py:73 +#: evibes/settings/constance.py:75 msgid "Features Options" msgstr "Características Opciones" -#: evibes/settings/constance.py:82 +#: evibes/settings/constance.py:84 msgid "SEO Options" msgstr "Opciones SEO" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:88 msgid "Debugging Options" msgstr "Opciones de depuración" @@ -229,62 +235,62 @@ msgstr "" "## Versión\n" "Versión actual de la API: {EVIBES_VERSION}\n" -#: evibes/settings/unfold.py:53 +#: evibes/settings/unfold.py:57 msgid "Menu" msgstr "Menú" -#: evibes/settings/unfold.py:58 +#: evibes/settings/unfold.py:62 msgid "Dashboard" msgstr "Cuadro de mandos" -#: evibes/settings/unfold.py:63 +#: evibes/settings/unfold.py:67 msgid "Health" msgstr "Salud" -#: evibes/settings/unfold.py:68 +#: evibes/settings/unfold.py:72 msgid "Config" msgstr "Configurar" -#: evibes/settings/unfold.py:73 +#: evibes/settings/unfold.py:77 msgid "Periodic Tasks" msgstr "Tareas periódicas" -#: evibes/settings/unfold.py:98 +#: evibes/settings/unfold.py:102 msgid "Taskboard" msgstr "Taskboard" -#: evibes/settings/unfold.py:103 +#: evibes/settings/unfold.py:107 msgid "Support" msgstr "Ayuda" -#: evibes/settings/unfold.py:110 +#: evibes/settings/unfold.py:114 msgid "Quick Links" msgstr "Enlaces rápidos" -#: evibes/settings/unfold.py:115 +#: evibes/settings/unfold.py:119 msgid "Users" msgstr "Usuarios" -#: evibes/settings/unfold.py:120 +#: evibes/settings/unfold.py:124 msgid "Groups" msgstr "Grupos" -#: evibes/settings/unfold.py:125 +#: evibes/settings/unfold.py:129 msgid "Orders" msgstr "Pedidos" -#: evibes/settings/unfold.py:130 +#: evibes/settings/unfold.py:134 msgid "Products" msgstr "Productos" -#: evibes/settings/unfold.py:135 +#: evibes/settings/unfold.py:139 msgid "Categories" msgstr "Categorías" -#: evibes/settings/unfold.py:140 +#: evibes/settings/unfold.py:144 msgid "Brands" msgstr "Marcas" -#: evibes/settings/unfold.py:145 +#: evibes/settings/unfold.py:149 msgid "Blogposts" msgstr "Blogposts" diff --git a/evibes/locale/fa_IR/LC_MESSAGES/django.po b/evibes/locale/fa_IR/LC_MESSAGES/django.po index 413ef38b..c26cbfbf 100644 --- a/evibes/locale/fa_IR/LC_MESSAGES/django.po +++ b/evibes/locale/fa_IR/LC_MESSAGES/django.po @@ -2,12 +2,12 @@ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. -# +# msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-16 15:38+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -35,98 +35,102 @@ msgid "" msgstr "" #: evibes/settings/constance.py:28 +msgid "Shows if the taxes are already included in product's selling prices" +msgstr "" + +#: evibes/settings/constance.py:29 msgid "Exchange rate API key" msgstr "" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "!!!DO NOT CHANGE!!!" msgstr "" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP host" msgstr "" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "SMTP port" msgstr "" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use TLS" msgstr "" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "Use SSL" msgstr "" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP username" msgstr "" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "SMTP password" msgstr "" -#: evibes/settings/constance.py:37 +#: evibes/settings/constance.py:38 msgid "Mail from option" msgstr "" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from anonymous users" msgstr "" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "How many days we store messages from authenticated users" msgstr "" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "Disable buy functionality" msgstr "" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenStreetMap Nominatim API URL" msgstr "" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "OpenAI API Key" msgstr "" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "Abstract API Key" msgstr "" -#: evibes/settings/constance.py:45 +#: evibes/settings/constance.py:46 msgid "HTTP Proxy" msgstr "" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing advertisiment data" msgstr "" -#: evibes/settings/constance.py:48 +#: evibes/settings/constance.py:49 msgid "An entity for storing analytics data" msgstr "" -#: evibes/settings/constance.py:50 +#: evibes/settings/constance.py:51 msgid "Save responses from vendors' APIs" msgstr "" -#: evibes/settings/constance.py:56 +#: evibes/settings/constance.py:57 msgid "Legal Options" msgstr "" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "" -#: evibes/settings/constance.py:73 +#: evibes/settings/constance.py:75 msgid "Features Options" msgstr "" -#: evibes/settings/constance.py:82 +#: evibes/settings/constance.py:84 msgid "SEO Options" msgstr "" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:88 msgid "Debugging Options" msgstr "" @@ -199,62 +203,62 @@ msgid "" "Current API version: {EVIBES_VERSION}\n" msgstr "" -#: evibes/settings/unfold.py:53 +#: evibes/settings/unfold.py:57 msgid "Menu" msgstr "" -#: evibes/settings/unfold.py:58 +#: evibes/settings/unfold.py:62 msgid "Dashboard" msgstr "" -#: evibes/settings/unfold.py:63 +#: evibes/settings/unfold.py:67 msgid "Health" msgstr "" -#: evibes/settings/unfold.py:68 +#: evibes/settings/unfold.py:72 msgid "Config" msgstr "" -#: evibes/settings/unfold.py:73 +#: evibes/settings/unfold.py:77 msgid "Periodic Tasks" msgstr "" -#: evibes/settings/unfold.py:98 +#: evibes/settings/unfold.py:102 msgid "Taskboard" msgstr "" -#: evibes/settings/unfold.py:103 +#: evibes/settings/unfold.py:107 msgid "Support" msgstr "" -#: evibes/settings/unfold.py:110 +#: evibes/settings/unfold.py:114 msgid "Quick Links" msgstr "" -#: evibes/settings/unfold.py:115 +#: evibes/settings/unfold.py:119 msgid "Users" msgstr "" -#: evibes/settings/unfold.py:120 +#: evibes/settings/unfold.py:124 msgid "Groups" msgstr "" -#: evibes/settings/unfold.py:125 +#: evibes/settings/unfold.py:129 msgid "Orders" msgstr "" -#: evibes/settings/unfold.py:130 +#: evibes/settings/unfold.py:134 msgid "Products" msgstr "" -#: evibes/settings/unfold.py:135 +#: evibes/settings/unfold.py:139 msgid "Categories" msgstr "" -#: evibes/settings/unfold.py:140 +#: evibes/settings/unfold.py:144 msgid "Brands" msgstr "" -#: evibes/settings/unfold.py:145 +#: evibes/settings/unfold.py:149 msgid "Blogposts" msgstr "" diff --git a/evibes/locale/fr_FR/LC_MESSAGES/django.mo b/evibes/locale/fr_FR/LC_MESSAGES/django.mo index 4dbb7c1c5d175a6df5dfdb4d01e430ffe26b8678..a450bcf597aea87e7f3cf4a03e89ca49715a01fb 100644 GIT binary patch delta 1006 zcmXZaPe>F|9Ki9P?za6g%iT)*BlvRdf4fw6u&6)`GPEMBi{fF~dF8|~+Rm)n#f6|l z5kV{+>Qoeg;K4E?I&_hslSey*MVAnXD1rzn>igTB2X8*}-pu>G-}}uhoch~c`k0E} z6IzzuOutHNM9LenytdVl@64 zJzvJ8NJ--BMYixlBi7>q+=M4kH@bit$f5@FqVX6WW;}r%ID@+WE9$ysjAI=GO}qiw zQ`)cv+cClZ(ic7G$89`taTVUcI=mD40QF=~Q8${7#&4qWJKWCvJa*x4T#3gxrmj1Q z7x66W{1cV^Wr~{>_yPwh|7)CDE3%oiwGwYhH-#Ut3BO@GCXC2IJc_!3hZ=YkHSr15 z%H2YWA$M^jKEj>&5=)x#0yo5zf2g0Lg-H!`1hwRysDXM>Ptb?`IEk8AytVo%novvL zi(2yYs3o_k|3-+K=zY{g9=B3|&EypmTJle*rCr3W_zN|GWV-URNHc1HEb7nKfrs!M z_TY8Y#OF{Gn8y)ZislE%g2GBZa-^-iRNGp!zg!CHqDwt z%f9kptSg!2PS3^nsbv>ugpHIMhbZ3 c#&^SPIg_6L51}!NdjJ3c delta 864 zcmXZaPe{{Y9LMqR{H>KMwaq{M71uUpsT-6bUUpi;5JEi+`eP6hbxQQ$p-a06ksfCq zJjFUHC3*?MgDfftBySNVMkO*5I&>Jxu=l4u4?Mru^L?J*?|Ht@cdK6cI+))I`=1ys zNk2=U@tLLZR~--9wr6%TX!Z@8iPMc{$8i+fa2yl(0OMH1dVGfg+(bUNPcHuM*2@?& z%iA9Yr+6XIWY&NYY{eAnpv$O@a;S~QTzn5N5l`R%K1Y531@&DS{kV@xT$3DSE!crE z3~;_>+`|Gx^vuOCT>J{pG5;11|O}f)A+7exgdfhuWxuy1@b7z#LyIv1QaxP(qcuf+}?tRq9Z*_MeEL z63wC#8Ac^?CrbTQ>NzG<(s?|MMN|T7NKx!PYJ<\n" "Language-Team: LANGUAGE \n" @@ -34,102 +34,107 @@ msgstr "" " ne souhaitez pas traiter les taxes." #: evibes/settings/constance.py:28 +msgid "Shows if the taxes are already included in product's selling prices" +msgstr "" +"Indique si les taxes sont déjà incluses dans le prix de vente du produit." + +#: evibes/settings/constance.py:29 msgid "Exchange rate API key" msgstr "Clé API pour le taux de change" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "!!!DO NOT CHANGE!!!" msgstr "!!!NE PAS CHANGER !!!" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP host" msgstr "Hôte SMTP" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "SMTP port" msgstr "SMTP port" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use TLS" msgstr "Utiliser TLS" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "Use SSL" msgstr "Use SSL" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP username" msgstr "Nom d'utilisateur SMTP" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "SMTP password" msgstr "Mot de passe SMTP" -#: evibes/settings/constance.py:37 +#: evibes/settings/constance.py:38 msgid "Mail from option" msgstr "L'adresse de l'expéditeur du courrier électronique" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from anonymous users" msgstr "" "Pendant combien de jours les messages des utilisateurs anonymes sont-ils " "conservés ?" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "How many days we store messages from authenticated users" msgstr "" "Pendant combien de jours les messages des utilisateurs authentifiés sont-ils" " conservés ?" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "Disable buy functionality" msgstr "Désactiver la fonctionnalité d'achat" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenStreetMap Nominatim API URL" msgstr "URL de l'API OpenStreetMap Nominatim" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "OpenAI API Key" msgstr "OpenAI API Key" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "Abstract API Key" msgstr "Clé API abstraite" -#: evibes/settings/constance.py:45 +#: evibes/settings/constance.py:46 msgid "HTTP Proxy" msgstr "HTTP Proxy" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing advertisiment data" msgstr "Une entité pour stocker des données publicitaires" -#: evibes/settings/constance.py:48 +#: evibes/settings/constance.py:49 msgid "An entity for storing analytics data" msgstr "Une entité pour stocker des données analytiques" -#: evibes/settings/constance.py:50 +#: evibes/settings/constance.py:51 msgid "Save responses from vendors' APIs" msgstr "Sauvegarder les réponses des API des fournisseurs" -#: evibes/settings/constance.py:56 +#: evibes/settings/constance.py:57 msgid "Legal Options" msgstr "Options juridiques" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "Options de courrier électronique" -#: evibes/settings/constance.py:73 +#: evibes/settings/constance.py:75 msgid "Features Options" msgstr "Caractéristiques Options" -#: evibes/settings/constance.py:82 +#: evibes/settings/constance.py:84 msgid "SEO Options" msgstr "Options de référencement" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:88 msgid "Debugging Options" msgstr "Options de débogage" @@ -233,62 +238,62 @@ msgstr "" "## Version\n" "Version actuelle de l'API : {EVIBES_VERSION}\n" -#: evibes/settings/unfold.py:53 +#: evibes/settings/unfold.py:57 msgid "Menu" msgstr "Menu" -#: evibes/settings/unfold.py:58 +#: evibes/settings/unfold.py:62 msgid "Dashboard" msgstr "Tableau de bord" -#: evibes/settings/unfold.py:63 +#: evibes/settings/unfold.py:67 msgid "Health" msgstr "Santé" -#: evibes/settings/unfold.py:68 +#: evibes/settings/unfold.py:72 msgid "Config" msgstr "Config" -#: evibes/settings/unfold.py:73 +#: evibes/settings/unfold.py:77 msgid "Periodic Tasks" msgstr "Tâches périodiques" -#: evibes/settings/unfold.py:98 +#: evibes/settings/unfold.py:102 msgid "Taskboard" msgstr "Tableau des tâches" -#: evibes/settings/unfold.py:103 +#: evibes/settings/unfold.py:107 msgid "Support" msgstr "Soutien" -#: evibes/settings/unfold.py:110 +#: evibes/settings/unfold.py:114 msgid "Quick Links" msgstr "Liens rapides" -#: evibes/settings/unfold.py:115 +#: evibes/settings/unfold.py:119 msgid "Users" msgstr "Utilisateurs" -#: evibes/settings/unfold.py:120 +#: evibes/settings/unfold.py:124 msgid "Groups" msgstr "Groupes" -#: evibes/settings/unfold.py:125 +#: evibes/settings/unfold.py:129 msgid "Orders" msgstr "Commandes" -#: evibes/settings/unfold.py:130 +#: evibes/settings/unfold.py:134 msgid "Products" msgstr "Produits" -#: evibes/settings/unfold.py:135 +#: evibes/settings/unfold.py:139 msgid "Categories" msgstr "Catégories" -#: evibes/settings/unfold.py:140 +#: evibes/settings/unfold.py:144 msgid "Brands" msgstr "Marques" -#: evibes/settings/unfold.py:145 +#: evibes/settings/unfold.py:149 msgid "Blogposts" msgstr "Blogposts" diff --git a/evibes/locale/he_IL/LC_MESSAGES/django.mo b/evibes/locale/he_IL/LC_MESSAGES/django.mo index 26901e1a0ae72717b69d54c6eacd2d76d20bbf33..c30a3549dd6e3df2bbc8d097a232413edb38f41a 100644 GIT binary patch delta 1015 zcmXZaO-NKx6u|MLGuekujhSX2(pASk{1}1?TvQZBi=q&kHpwg|=amnJF=ob0h=!mR zLR2~qkzWvm7_=yj7D25dqJmm=X%o39B3c+N3Te^*jQ7EPzkBX|_n!OCd#{cy9?ySX zA1n%2l(v<2qfF!g{wwFkwHOfTStIfbYlu&*6$xVk>o9{maTp^whpW+I1uh`V<-3c2 zyZI%o7RgI+oyaC0sKXHM##%gxnka_4k%zib%Eg1Ym-q^H;ymj5pQ!7WFo=}|dhjrk zQzEzx_h1G2<&>K^gIk#JaTQ+2O1$YDM}4yy)I^V5{KCbrv61nQ*oA*_CGO`nb=?s> zjVDpZ@2ljOhjdop6O2>-XLywi^&ER6I$!8ZKjtRkyE*NIiwjpUX%YQ@s1 z>xOVU-ohw8#r$SEU+L(#lO~Y{XhGem3ptB)yZ9`|i2Jb{U!s<>wwZF`KGcLhQhmu` zJzhgiIEA|JJJdX%nyG&aoj-1(fm7%wXvGb96t&bns2lpuAvZsa?Tk;Omi8^`0UFs< zzj-@e#zUwt^4$3z^ zs`Z`7SlSw7*Zku^XXtQW|6tbm=S;58Gr7biFKZGR&m>YAFOeKFe!4d`ko1yt%!N#U za-cW2BWto=D&?ooGvfDp^WVawHL+zz^-jGaD^6JH;q*s?zKc4&q}R#}@pK&v6Y)a0f%Uk1V%C7yohdXBali*fpIR zUI}J6sJnlS0aVp=m1fye zFA}h9y_ZO;v_T%7Oq+9t`}Trg{nOQyoTAvv>?f}`oTNvl`xIa;xlOOTB9{s;MYB!* F-W@NvP}%?h diff --git a/evibes/locale/he_IL/LC_MESSAGES/django.po b/evibes/locale/he_IL/LC_MESSAGES/django.po index 7d27509b..00dc5958 100644 --- a/evibes/locale/he_IL/LC_MESSAGES/django.po +++ b/evibes/locale/he_IL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-16 15:38+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -33,98 +33,102 @@ msgstr "" "שיעור המס בתחום השיפוט של החברה שלך. השאר 0 אם אינך מעוניין לעבד מסים." #: evibes/settings/constance.py:28 +msgid "Shows if the taxes are already included in product's selling prices" +msgstr "מציג אם המסים כבר כלולים במחיר המכירה של המוצר." + +#: evibes/settings/constance.py:29 msgid "Exchange rate API key" msgstr "מפתח API לשער החליפין" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "!!!DO NOT CHANGE!!!" msgstr "!!!אין לשנות!!!" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP host" msgstr "מארח SMTP" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "SMTP port" msgstr "יציאת SMTP" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use TLS" msgstr "השתמש ב-TLS" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "Use SSL" msgstr "השתמש ב-SSL" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP username" msgstr "שם משתמש SMTP" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "SMTP password" msgstr "סיסמת SMTP" -#: evibes/settings/constance.py:37 +#: evibes/settings/constance.py:38 msgid "Mail from option" msgstr "כתובת השולח של הודעות הדוא\"ל" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from anonymous users" msgstr "כמה ימים אנו שומרים הודעות ממשתמשים אנונימיים" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "How many days we store messages from authenticated users" msgstr "כמה ימים אנו שומרים הודעות ממשתמשים מאומתים" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "Disable buy functionality" msgstr "השבת פונקציונליות הרכישה" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenStreetMap Nominatim API URL" msgstr "כתובת ה-API של OpenStreetMap Nominatim" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "OpenAI API Key" msgstr "מפתח API של OpenAI" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "Abstract API Key" msgstr "מפתח API מופשט" -#: evibes/settings/constance.py:45 +#: evibes/settings/constance.py:46 msgid "HTTP Proxy" msgstr "פרוקסי HTTP" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing advertisiment data" msgstr "ישות לאחסון נתוני פרסום" -#: evibes/settings/constance.py:48 +#: evibes/settings/constance.py:49 msgid "An entity for storing analytics data" msgstr "ישות לאחסון נתוני ניתוח" -#: evibes/settings/constance.py:50 +#: evibes/settings/constance.py:51 msgid "Save responses from vendors' APIs" msgstr "שמור תגובות מ-API של ספקים" -#: evibes/settings/constance.py:56 +#: evibes/settings/constance.py:57 msgid "Legal Options" msgstr "אפשרויות משפטיות" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "אפשרויות דוא\"ל" -#: evibes/settings/constance.py:73 +#: evibes/settings/constance.py:75 msgid "Features Options" msgstr "אפשרויות תכונות" -#: evibes/settings/constance.py:82 +#: evibes/settings/constance.py:84 msgid "SEO Options" msgstr "אפשרויות SEO" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:88 msgid "Debugging Options" msgstr "אפשרויות ניפוי באגים" @@ -193,62 +197,62 @@ msgstr "" "- ניתן לאחזר את השפות הזמינות מנקודת הקצה `/app/languages/`. - כל התוכן המוצג למשתמש תומך במספר שפות באופן מובנה. ## פורמטים של תגובה ה-API תומך במספר פורמטים של תגובה: - **JSON** (ברירת מחדל, בפורמט camelCase) - **XML** (הוסף `?format=xml` או הגדר `Accept: application/xml`)\n" "- **YAML** (הוסף `?format=yaml` או הגדר `Accept: application/x-yaml`) ## תקינות וניטור - בדיקות תקינות: `/health/` - מדדי Prometheus (מוגנים באמצעות אימות בסיסי): `/prometheus/` ## גרסה גרסת ה-API הנוכחית: {EVIBES_VERSION}\n" -#: evibes/settings/unfold.py:53 +#: evibes/settings/unfold.py:57 msgid "Menu" msgstr "תפריט" -#: evibes/settings/unfold.py:58 +#: evibes/settings/unfold.py:62 msgid "Dashboard" msgstr "לוח מחוונים" -#: evibes/settings/unfold.py:63 +#: evibes/settings/unfold.py:67 msgid "Health" msgstr "בריאות" -#: evibes/settings/unfold.py:68 +#: evibes/settings/unfold.py:72 msgid "Config" msgstr "תצורה" -#: evibes/settings/unfold.py:73 +#: evibes/settings/unfold.py:77 msgid "Periodic Tasks" msgstr "משימות תקופתיות" -#: evibes/settings/unfold.py:98 +#: evibes/settings/unfold.py:102 msgid "Taskboard" msgstr "לוח משימות" -#: evibes/settings/unfold.py:103 +#: evibes/settings/unfold.py:107 msgid "Support" msgstr "תמיכה" -#: evibes/settings/unfold.py:110 +#: evibes/settings/unfold.py:114 msgid "Quick Links" msgstr "קישורים מהירים" -#: evibes/settings/unfold.py:115 +#: evibes/settings/unfold.py:119 msgid "Users" msgstr "משתמשים" -#: evibes/settings/unfold.py:120 +#: evibes/settings/unfold.py:124 msgid "Groups" msgstr "קבוצות" -#: evibes/settings/unfold.py:125 +#: evibes/settings/unfold.py:129 msgid "Orders" msgstr "הזמנות" -#: evibes/settings/unfold.py:130 +#: evibes/settings/unfold.py:134 msgid "Products" msgstr "מוצרים" -#: evibes/settings/unfold.py:135 +#: evibes/settings/unfold.py:139 msgid "Categories" msgstr "קטגוריות" -#: evibes/settings/unfold.py:140 +#: evibes/settings/unfold.py:144 msgid "Brands" msgstr "מותגים" -#: evibes/settings/unfold.py:145 +#: evibes/settings/unfold.py:149 msgid "Blogposts" msgstr "פוסטים בבלוג" diff --git a/evibes/locale/hi_IN/LC_MESSAGES/django.po b/evibes/locale/hi_IN/LC_MESSAGES/django.po index f2c03a59..a8e152cc 100644 --- a/evibes/locale/hi_IN/LC_MESSAGES/django.po +++ b/evibes/locale/hi_IN/LC_MESSAGES/django.po @@ -2,12 +2,12 @@ # Copyright (C) 2025 EGOR GORBUNOV # This file is distributed under the same license as the EVIBES package. # EGOR GORBUNOV , 2025. -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-16 15:38+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -35,98 +35,102 @@ msgid "" msgstr "" #: evibes/settings/constance.py:28 +msgid "Shows if the taxes are already included in product's selling prices" +msgstr "" + +#: evibes/settings/constance.py:29 msgid "Exchange rate API key" msgstr "" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "!!!DO NOT CHANGE!!!" msgstr "" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP host" msgstr "" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "SMTP port" msgstr "" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use TLS" msgstr "" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "Use SSL" msgstr "" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP username" msgstr "" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "SMTP password" msgstr "" -#: evibes/settings/constance.py:37 +#: evibes/settings/constance.py:38 msgid "Mail from option" msgstr "" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from anonymous users" msgstr "" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "How many days we store messages from authenticated users" msgstr "" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "Disable buy functionality" msgstr "" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenStreetMap Nominatim API URL" msgstr "" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "OpenAI API Key" msgstr "" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "Abstract API Key" msgstr "" -#: evibes/settings/constance.py:45 +#: evibes/settings/constance.py:46 msgid "HTTP Proxy" msgstr "" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing advertisiment data" msgstr "" -#: evibes/settings/constance.py:48 +#: evibes/settings/constance.py:49 msgid "An entity for storing analytics data" msgstr "" -#: evibes/settings/constance.py:50 +#: evibes/settings/constance.py:51 msgid "Save responses from vendors' APIs" msgstr "" -#: evibes/settings/constance.py:56 +#: evibes/settings/constance.py:57 msgid "Legal Options" msgstr "" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "" -#: evibes/settings/constance.py:73 +#: evibes/settings/constance.py:75 msgid "Features Options" msgstr "" -#: evibes/settings/constance.py:82 +#: evibes/settings/constance.py:84 msgid "SEO Options" msgstr "" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:88 msgid "Debugging Options" msgstr "" @@ -199,62 +203,62 @@ msgid "" "Current API version: {EVIBES_VERSION}\n" msgstr "" -#: evibes/settings/unfold.py:53 +#: evibes/settings/unfold.py:57 msgid "Menu" msgstr "" -#: evibes/settings/unfold.py:58 +#: evibes/settings/unfold.py:62 msgid "Dashboard" msgstr "" -#: evibes/settings/unfold.py:63 +#: evibes/settings/unfold.py:67 msgid "Health" msgstr "" -#: evibes/settings/unfold.py:68 +#: evibes/settings/unfold.py:72 msgid "Config" msgstr "" -#: evibes/settings/unfold.py:73 +#: evibes/settings/unfold.py:77 msgid "Periodic Tasks" msgstr "" -#: evibes/settings/unfold.py:98 +#: evibes/settings/unfold.py:102 msgid "Taskboard" msgstr "" -#: evibes/settings/unfold.py:103 +#: evibes/settings/unfold.py:107 msgid "Support" msgstr "" -#: evibes/settings/unfold.py:110 +#: evibes/settings/unfold.py:114 msgid "Quick Links" msgstr "" -#: evibes/settings/unfold.py:115 +#: evibes/settings/unfold.py:119 msgid "Users" msgstr "" -#: evibes/settings/unfold.py:120 +#: evibes/settings/unfold.py:124 msgid "Groups" msgstr "" -#: evibes/settings/unfold.py:125 +#: evibes/settings/unfold.py:129 msgid "Orders" msgstr "" -#: evibes/settings/unfold.py:130 +#: evibes/settings/unfold.py:134 msgid "Products" msgstr "" -#: evibes/settings/unfold.py:135 +#: evibes/settings/unfold.py:139 msgid "Categories" msgstr "" -#: evibes/settings/unfold.py:140 +#: evibes/settings/unfold.py:144 msgid "Brands" msgstr "" -#: evibes/settings/unfold.py:145 +#: evibes/settings/unfold.py:149 msgid "Blogposts" msgstr "" diff --git a/evibes/locale/hr_HR/LC_MESSAGES/django.po b/evibes/locale/hr_HR/LC_MESSAGES/django.po index 413ef38b..c26cbfbf 100644 --- a/evibes/locale/hr_HR/LC_MESSAGES/django.po +++ b/evibes/locale/hr_HR/LC_MESSAGES/django.po @@ -2,12 +2,12 @@ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. -# +# msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-16 15:38+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -35,98 +35,102 @@ msgid "" msgstr "" #: evibes/settings/constance.py:28 +msgid "Shows if the taxes are already included in product's selling prices" +msgstr "" + +#: evibes/settings/constance.py:29 msgid "Exchange rate API key" msgstr "" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "!!!DO NOT CHANGE!!!" msgstr "" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP host" msgstr "" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "SMTP port" msgstr "" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use TLS" msgstr "" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "Use SSL" msgstr "" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP username" msgstr "" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "SMTP password" msgstr "" -#: evibes/settings/constance.py:37 +#: evibes/settings/constance.py:38 msgid "Mail from option" msgstr "" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from anonymous users" msgstr "" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "How many days we store messages from authenticated users" msgstr "" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "Disable buy functionality" msgstr "" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenStreetMap Nominatim API URL" msgstr "" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "OpenAI API Key" msgstr "" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "Abstract API Key" msgstr "" -#: evibes/settings/constance.py:45 +#: evibes/settings/constance.py:46 msgid "HTTP Proxy" msgstr "" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing advertisiment data" msgstr "" -#: evibes/settings/constance.py:48 +#: evibes/settings/constance.py:49 msgid "An entity for storing analytics data" msgstr "" -#: evibes/settings/constance.py:50 +#: evibes/settings/constance.py:51 msgid "Save responses from vendors' APIs" msgstr "" -#: evibes/settings/constance.py:56 +#: evibes/settings/constance.py:57 msgid "Legal Options" msgstr "" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "" -#: evibes/settings/constance.py:73 +#: evibes/settings/constance.py:75 msgid "Features Options" msgstr "" -#: evibes/settings/constance.py:82 +#: evibes/settings/constance.py:84 msgid "SEO Options" msgstr "" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:88 msgid "Debugging Options" msgstr "" @@ -199,62 +203,62 @@ msgid "" "Current API version: {EVIBES_VERSION}\n" msgstr "" -#: evibes/settings/unfold.py:53 +#: evibes/settings/unfold.py:57 msgid "Menu" msgstr "" -#: evibes/settings/unfold.py:58 +#: evibes/settings/unfold.py:62 msgid "Dashboard" msgstr "" -#: evibes/settings/unfold.py:63 +#: evibes/settings/unfold.py:67 msgid "Health" msgstr "" -#: evibes/settings/unfold.py:68 +#: evibes/settings/unfold.py:72 msgid "Config" msgstr "" -#: evibes/settings/unfold.py:73 +#: evibes/settings/unfold.py:77 msgid "Periodic Tasks" msgstr "" -#: evibes/settings/unfold.py:98 +#: evibes/settings/unfold.py:102 msgid "Taskboard" msgstr "" -#: evibes/settings/unfold.py:103 +#: evibes/settings/unfold.py:107 msgid "Support" msgstr "" -#: evibes/settings/unfold.py:110 +#: evibes/settings/unfold.py:114 msgid "Quick Links" msgstr "" -#: evibes/settings/unfold.py:115 +#: evibes/settings/unfold.py:119 msgid "Users" msgstr "" -#: evibes/settings/unfold.py:120 +#: evibes/settings/unfold.py:124 msgid "Groups" msgstr "" -#: evibes/settings/unfold.py:125 +#: evibes/settings/unfold.py:129 msgid "Orders" msgstr "" -#: evibes/settings/unfold.py:130 +#: evibes/settings/unfold.py:134 msgid "Products" msgstr "" -#: evibes/settings/unfold.py:135 +#: evibes/settings/unfold.py:139 msgid "Categories" msgstr "" -#: evibes/settings/unfold.py:140 +#: evibes/settings/unfold.py:144 msgid "Brands" msgstr "" -#: evibes/settings/unfold.py:145 +#: evibes/settings/unfold.py:149 msgid "Blogposts" msgstr "" diff --git a/evibes/locale/id_ID/LC_MESSAGES/django.mo b/evibes/locale/id_ID/LC_MESSAGES/django.mo index 40b58cd9375280714be5a57f95a00264d23e2fa6..f220900c293042a05959b9e8d5215f9966120d6d 100644 GIT binary patch delta 994 zcmXZaUr19?9Ki9TTW0BWYKl?VQ8!Y{5oBTXM{M@Edaz!K6^GrM+wOI)yIrgvT0}kw z(aX|@f*^>9=pkFZ6!a9-V+7?}(2GbE6upEL^!@2Q?Cf)X=ic+@_uCeaKS@@;w1*cI zEkWN&zg4HyQT$ua7wuzSNh<^vq z*RV~giVC+XwVfBbFoOHA6OW-BbQ)zN8)YLmh-Yzx_!^F44Q2gzlyz$u#wG%}coaEP z#c&ty#|F+rtee0y zcoJp)p~(5_DT7V;0@IZL6*hBnH`kU*#Cz6Dr49$Cu#fo*7{?pfjE_xB9KVuWoNO66zlwU_x#mrw`L*V`)Ql`KL?UMrW}sbMkC|dnc0%gUDV~Qt;^=JUDC$0wQ)V$SXXqeka2y>wixK5H)Hvk z^6ru@*{+)_Ofi$o*tM1Dz1FdmUGNKe-*HSqo1$?{Ru@g)IJ)FpjLWt+ZA!kQE#sPL Toi*N+(Rtsv8@oEy>w57&Xdi-2 delta 864 zcmXZaJ4oA66vy!s{~DiB6CZ7{@f8(ckqQbf0c$!rSx~6>Kpk|l6vROggXrXFG}x`w zNe34@h)WT~&JG0;5nGXpI4IabUHty^UUKvKpL_rJaZa)sPjw|uL+PtVi_+iH7ky?i zyiVhbcIKH4Yxv(jrvd<4Z3&&+lW772d<;mpP<%VVLCpdF0Mh2vSO^j2>LnS;%=fF z%b4iLES$z%oO3RrGE1Qj`sU&-7w=#d;|G|Dmu~(B`-mUhcn@i7{u5?!zK!rOMA^qN zj}!MpFBLcpKbOe~qIN_K|Y-~yHLEw*rAGR*-7jS0q{6Kt8t1moh#^Rqijo#+wT2 zuN!7pzGPB}${>t7xDK`9I~R8%#j$RT;1KHldDMlMa2QiA{_pgWw%!Y%4`0!>zgaTJ z3;8S=_9D?HLS>=SHq&*0S_57GbhTnSdst&~(u)V9Jk`+o-JV\n" "Language-Team: LANGUAGE \n" @@ -34,98 +34,102 @@ msgstr "" "ingin memproses pajak." #: evibes/settings/constance.py:28 +msgid "Shows if the taxes are already included in product's selling prices" +msgstr "Menunjukkan apakah pajak sudah termasuk dalam harga jual produk" + +#: evibes/settings/constance.py:29 msgid "Exchange rate API key" msgstr "Kunci API nilai tukar" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "!!!DO NOT CHANGE!!!" msgstr "!!! JANGAN BERUBAH!!!" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP host" msgstr "Host SMTP" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "SMTP port" msgstr "Port SMTP" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use TLS" msgstr "Gunakan TLS" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "Use SSL" msgstr "Gunakan SSL" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP username" msgstr "Nama pengguna SMTP" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "SMTP password" msgstr "Kata sandi SMTP" -#: evibes/settings/constance.py:37 +#: evibes/settings/constance.py:38 msgid "Mail from option" msgstr "Alamat pengirim email" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from anonymous users" msgstr "Berapa hari kami menyimpan pesan dari pengguna anonim" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "How many days we store messages from authenticated users" msgstr "Berapa hari kami menyimpan pesan dari pengguna yang diautentikasi" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "Disable buy functionality" msgstr "Menonaktifkan fungsionalitas beli" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenStreetMap Nominatim API URL" msgstr "URL API OpenStreetMap Nominatim" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "OpenAI API Key" msgstr "Kunci API OpenAI" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "Abstract API Key" msgstr "Kunci API Abstrak" -#: evibes/settings/constance.py:45 +#: evibes/settings/constance.py:46 msgid "HTTP Proxy" msgstr "Proksi HTTP" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing advertisiment data" msgstr "Entitas untuk menyimpan data iklan" -#: evibes/settings/constance.py:48 +#: evibes/settings/constance.py:49 msgid "An entity for storing analytics data" msgstr "Entitas untuk menyimpan data analitik" -#: evibes/settings/constance.py:50 +#: evibes/settings/constance.py:51 msgid "Save responses from vendors' APIs" msgstr "Menyimpan tanggapan dari API vendor" -#: evibes/settings/constance.py:56 +#: evibes/settings/constance.py:57 msgid "Legal Options" msgstr "Opsi Hukum" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "Opsi Email" -#: evibes/settings/constance.py:73 +#: evibes/settings/constance.py:75 msgid "Features Options" msgstr "Opsi Fitur" -#: evibes/settings/constance.py:82 +#: evibes/settings/constance.py:84 msgid "SEO Options" msgstr "Opsi SEO" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:88 msgid "Debugging Options" msgstr "Opsi Debugging" @@ -229,62 +233,62 @@ msgstr "" "## Versi\n" "Versi API saat ini: {EVIBES_VERSION}\n" -#: evibes/settings/unfold.py:53 +#: evibes/settings/unfold.py:57 msgid "Menu" msgstr "Menu" -#: evibes/settings/unfold.py:58 +#: evibes/settings/unfold.py:62 msgid "Dashboard" msgstr "Dasbor" -#: evibes/settings/unfold.py:63 +#: evibes/settings/unfold.py:67 msgid "Health" msgstr "Kesehatan" -#: evibes/settings/unfold.py:68 +#: evibes/settings/unfold.py:72 msgid "Config" msgstr "Konfigurasi" -#: evibes/settings/unfold.py:73 +#: evibes/settings/unfold.py:77 msgid "Periodic Tasks" msgstr "Tugas Berkala" -#: evibes/settings/unfold.py:98 +#: evibes/settings/unfold.py:102 msgid "Taskboard" msgstr "Papan tugas" -#: evibes/settings/unfold.py:103 +#: evibes/settings/unfold.py:107 msgid "Support" msgstr "Dukungan" -#: evibes/settings/unfold.py:110 +#: evibes/settings/unfold.py:114 msgid "Quick Links" msgstr "Tautan Cepat" -#: evibes/settings/unfold.py:115 +#: evibes/settings/unfold.py:119 msgid "Users" msgstr "Pengguna" -#: evibes/settings/unfold.py:120 +#: evibes/settings/unfold.py:124 msgid "Groups" msgstr "Grup" -#: evibes/settings/unfold.py:125 +#: evibes/settings/unfold.py:129 msgid "Orders" msgstr "Pesanan" -#: evibes/settings/unfold.py:130 +#: evibes/settings/unfold.py:134 msgid "Products" msgstr "Produk" -#: evibes/settings/unfold.py:135 +#: evibes/settings/unfold.py:139 msgid "Categories" msgstr "Kategori" -#: evibes/settings/unfold.py:140 +#: evibes/settings/unfold.py:144 msgid "Brands" msgstr "Merek" -#: evibes/settings/unfold.py:145 +#: evibes/settings/unfold.py:149 msgid "Blogposts" msgstr "Posting blog" diff --git a/evibes/locale/it_IT/LC_MESSAGES/django.mo b/evibes/locale/it_IT/LC_MESSAGES/django.mo index 21ac35000ebdceb6f546872569ee19d159f5e4e3..e95ccdad55c6c97561ab69a256726d67bc39cb09 100644 GIT binary patch delta 1003 zcmXZaPe>F|9KiA4x|{uxO;>9xihAy9W#$qXA(Vk>;l(c5rSdTBOgb>k#LjG{hqgl< z0_)J?rBjEHf)2IYrGhSAx&tOkoRwCf~nx{#fOFdB(#ge2Ej3|1~ai@@~@B%-8ofY$t6k`9VB^gV>J|>H$wsD^-i*SEx5$ zjN=bTPVxoyll{bszK}H{oFUz~3rA2lx`JBrVjTOZ|BW&ZVI6h-AJlK3;`&ijtBzBBRotxoDs67qlnEqM)f;TzP_zel~poxn{tVx)pRo7rzO$syXk#&-q~nJ_|>v&+d=0{>8(yA zhcgA9^j>;LZ9VlD$$|9HR4^SH_o|7e91~eLoX}V$$5>v;vFsV+`bDp7J2nsIS}Cy0 z#pqCILdWx5f07Zm=+sx*5}DDlAdE^DGse?>LLS1v56q;y_^7c9BfjIY#+jWBjP081 Wj&Hk>W$ca7zz(7)C{$NE7ybjt0*D&` delta 864 zcmXZaOGwmF6vy#1{-;qVOlKO4vT_~@Rx@sjn9T$+*20xRLgEuaXO*oABAD4sB;rQ? z7_{m|i)InQY=R&#B-aLkL_`r$4kEK?AqL_1$Nyfqe(t%~`#9%6udXd$t$d4zSB;jV zpQ2YoW(C}7;ScS*XEq)+`+-M^3rEbl@H!sDSscK7*oV)t9XBw7o5*(Ca`8{M-oThy z#r`rl!9PSg%{nlN-8hK4Xb5%CDC(dI7nkrN@dD=Y1#16S)V>CW@gM5pn&c`=U@vAc z!u?is3&YsM!Wg#U9XyO>=MpNjN2rUQy7;w=-(rgSkJyTT+WH?GHn7uU`NzDJe%6JEk?ynsp4(1UKEDm3NdIaH>%U0g=)wnfyZdhFIe zV1=`6lfiLpq7G_H2Bq#q#V1j}i4W)D%NUO|2PC#Xzncpl%O_Wwqew22G2hk9Ts9e5Y@fCm^t zC9Ctz{HPZXnSa{L) Jclp)y%L6e^Q-}Zn diff --git a/evibes/locale/it_IT/LC_MESSAGES/django.po b/evibes/locale/it_IT/LC_MESSAGES/django.po index ea44896d..6d41f1d9 100644 --- a/evibes/locale/it_IT/LC_MESSAGES/django.po +++ b/evibes/locale/it_IT/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-16 15:38+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -34,98 +34,103 @@ msgstr "" " si desidera elaborare le imposte." #: evibes/settings/constance.py:28 +msgid "Shows if the taxes are already included in product's selling prices" +msgstr "" +"Mostra se le tasse sono già incluse nel prezzo di vendita del prodotto." + +#: evibes/settings/constance.py:29 msgid "Exchange rate API key" msgstr "Chiave API del tasso di cambio" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "!!!DO NOT CHANGE!!!" msgstr "!!! NON CAMBIARE!!!" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP host" msgstr "Host SMTP" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "SMTP port" msgstr "Porta SMTP" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use TLS" msgstr "Utilizzare TLS" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "Use SSL" msgstr "Utilizzare SSL" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP username" msgstr "Nome utente SMTP" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "SMTP password" msgstr "Password SMTP" -#: evibes/settings/constance.py:37 +#: evibes/settings/constance.py:38 msgid "Mail from option" msgstr "L'indirizzo del mittente dell'e-mail" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from anonymous users" msgstr "Per quanti giorni conserviamo i messaggi degli utenti anonimi" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "How many days we store messages from authenticated users" msgstr "Per quanti giorni conserviamo i messaggi degli utenti autenticati" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "Disable buy functionality" msgstr "Disattivare la funzionalità di acquisto" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenStreetMap Nominatim API URL" msgstr "URL dell'API OpenStreetMap Nominatim" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "OpenAI API Key" msgstr "Chiave API OpenAI" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "Abstract API Key" msgstr "Chiave API astratta" -#: evibes/settings/constance.py:45 +#: evibes/settings/constance.py:46 msgid "HTTP Proxy" msgstr "Proxy HTTP" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing advertisiment data" msgstr "Un'entità per la memorizzazione dei dati pubblicitari" -#: evibes/settings/constance.py:48 +#: evibes/settings/constance.py:49 msgid "An entity for storing analytics data" msgstr "Un'entità per la memorizzazione dei dati analitici" -#: evibes/settings/constance.py:50 +#: evibes/settings/constance.py:51 msgid "Save responses from vendors' APIs" msgstr "Salvare le risposte dalle API dei fornitori" -#: evibes/settings/constance.py:56 +#: evibes/settings/constance.py:57 msgid "Legal Options" msgstr "Opzioni legali" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "Opzioni e-mail" -#: evibes/settings/constance.py:73 +#: evibes/settings/constance.py:75 msgid "Features Options" msgstr "Caratteristiche Opzioni" -#: evibes/settings/constance.py:82 +#: evibes/settings/constance.py:84 msgid "SEO Options" msgstr "Opzioni SEO" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:88 msgid "Debugging Options" msgstr "Opzioni di debug" @@ -229,62 +234,62 @@ msgstr "" "## Versione\n" "Versione attuale dell'API: {EVIBES_VERSION}\n" -#: evibes/settings/unfold.py:53 +#: evibes/settings/unfold.py:57 msgid "Menu" msgstr "Menu" -#: evibes/settings/unfold.py:58 +#: evibes/settings/unfold.py:62 msgid "Dashboard" msgstr "Cruscotto" -#: evibes/settings/unfold.py:63 +#: evibes/settings/unfold.py:67 msgid "Health" msgstr "Salute" -#: evibes/settings/unfold.py:68 +#: evibes/settings/unfold.py:72 msgid "Config" msgstr "Configurazione" -#: evibes/settings/unfold.py:73 +#: evibes/settings/unfold.py:77 msgid "Periodic Tasks" msgstr "Compiti periodici" -#: evibes/settings/unfold.py:98 +#: evibes/settings/unfold.py:102 msgid "Taskboard" msgstr "Lavagna" -#: evibes/settings/unfold.py:103 +#: evibes/settings/unfold.py:107 msgid "Support" msgstr "Supporto" -#: evibes/settings/unfold.py:110 +#: evibes/settings/unfold.py:114 msgid "Quick Links" msgstr "Collegamenti rapidi" -#: evibes/settings/unfold.py:115 +#: evibes/settings/unfold.py:119 msgid "Users" msgstr "Utenti" -#: evibes/settings/unfold.py:120 +#: evibes/settings/unfold.py:124 msgid "Groups" msgstr "Gruppi" -#: evibes/settings/unfold.py:125 +#: evibes/settings/unfold.py:129 msgid "Orders" msgstr "Ordini" -#: evibes/settings/unfold.py:130 +#: evibes/settings/unfold.py:134 msgid "Products" msgstr "Prodotti" -#: evibes/settings/unfold.py:135 +#: evibes/settings/unfold.py:139 msgid "Categories" msgstr "Categorie" -#: evibes/settings/unfold.py:140 +#: evibes/settings/unfold.py:144 msgid "Brands" msgstr "Marche" -#: evibes/settings/unfold.py:145 +#: evibes/settings/unfold.py:149 msgid "Blogposts" msgstr "Blogposts" diff --git a/evibes/locale/ja_JP/LC_MESSAGES/django.mo b/evibes/locale/ja_JP/LC_MESSAGES/django.mo index 2c6bfbffdb7e1d14b1fef4f17c25aa2a3adf95dc..8d73b8bc6919d7879cc3bf108f6a7735ac8cde4b 100644 GIT binary patch delta 1015 zcmXZaUr19?9Ki9TTlUASxl)XzZrdXJqew+4RFDS!f%GARsC*dPEe98^O|f3oJIo42 zsv%|&Bn@#Gp_?yB40?&4daRca;x;vjD0>MD?EBMm*xBd&&bhyH?m74TJ(E1wJ?nK3 zDM}T!oH~%F)Cv5T&mZNdOR1}yl=_9+h%anW%7Z~H#VA(b0}NmqH{vHOz%NL;TF~)t zJ-&>^N_8vuR;70EKq(esHJ0E>l!cm5CNfbbvUJ>uM~SO@hO*G4jp*FKMj9X>8{BXVAq8WxTeWM7g09n^A{xGuB}>HfnoN#-~um-=f4Hw6iGl z{J>r4<}F1(cFWP%(I~@fC=Yg^Ow^BTLOntG1Szb=No>GHl;>-GYddd5$-9NJ<1Uo^ z`zS{~qQ_sO--*)StK;E7Vlm&BcPLTh@>j|&c2oCKE2-qJmIM6DO_#Er%BI!9M6;{DxQZ4t z$vs{z`!iFnnxa!JZJjYAa@}ZeF^%@%Z8K&BqoxtGqGm9B$B49std6i5reWNSwuL)F z?fYUz%(SdX>kWD$Au}`Q33;1xLw&h~?bxpt(y82w^w;d@-19e%JuyE%`0d^!#~#Q% uoN(-{6CZHwF~{z8;{A@zFXh;M(uhA^7#*Ka&N%k4JZ6tLJ@Ld@f95|#f~RQ! delta 864 zcmXZaKS&#K6u|M9UK&$vs)<%3t@Y1Uh%pfd!8l}!B6cWsNU1adkyh!TL!pBXX6aC} zhB`QiST{k$EUtl4ofN@Aut-&eA`(g|9h#-zm%JbMyU)GfyWjnO_wF_)D&x8HkoU9D z;`GP#j~sv0;1|^S-%;n?pcgBs8`nXWk{0Yl z7k#WRDN8)VMpO*iHY2tr2{({%m{42c6 z`ZCQ$ma@;H!;`;;Y85zOn`~ar@jjMu5G!V^tCr8A=I1S5GV`dFT*W82V;-Sayo|Xp z7k;*_H+G{wXc*b7jAFI)I6|Dk=eUA;|21+*g_F+f=&4mGiaLJ?*{h79=HH^udvAW~ zq5hg!vwz}Tzg|2TLEzCQqV4N%c=lO2c7AcmTM4*@qPKOG= G-QE9aom0X9 diff --git a/evibes/locale/ja_JP/LC_MESSAGES/django.po b/evibes/locale/ja_JP/LC_MESSAGES/django.po index 126bfc9b..ae1f88ed 100644 --- a/evibes/locale/ja_JP/LC_MESSAGES/django.po +++ b/evibes/locale/ja_JP/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-16 15:38+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -32,98 +32,102 @@ msgid "" msgstr "貴社管轄の税率。税務処理を行わない場合は「0」のままにしてください。" #: evibes/settings/constance.py:28 +msgid "Shows if the taxes are already included in product's selling prices" +msgstr "商品の販売価格に税金が含まれているかどうかを表示します。" + +#: evibes/settings/constance.py:29 msgid "Exchange rate API key" msgstr "為替レートAPIキー" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "!!!DO NOT CHANGE!!!" msgstr "変えないでくれ" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP host" msgstr "SMTPホスト" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "SMTP port" msgstr "SMTPポート" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use TLS" msgstr "TLSを使用する" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "Use SSL" msgstr "SSLの使用" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP username" msgstr "SMTPユーザー名" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "SMTP password" msgstr "SMTPパスワード" -#: evibes/settings/constance.py:37 +#: evibes/settings/constance.py:38 msgid "Mail from option" msgstr "メール送信者のアドレス" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from anonymous users" msgstr "匿名ユーザーからのメッセージの保存日数" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "How many days we store messages from authenticated users" msgstr "認証されたユーザーからのメッセージを何日間保存するか" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "Disable buy functionality" msgstr "購入機能を無効にする" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenStreetMap Nominatim API URL" msgstr "OpenStreetMap Nominatim API URL" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "OpenAI API Key" msgstr "OpenAI APIキー" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "Abstract API Key" msgstr "抽象APIキー" -#: evibes/settings/constance.py:45 +#: evibes/settings/constance.py:46 msgid "HTTP Proxy" msgstr "HTTPプロキシ" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing advertisiment data" msgstr "広告データを保存するエンティティ" -#: evibes/settings/constance.py:48 +#: evibes/settings/constance.py:49 msgid "An entity for storing analytics data" msgstr "分析データを保存するエンティティ" -#: evibes/settings/constance.py:50 +#: evibes/settings/constance.py:51 msgid "Save responses from vendors' APIs" msgstr "ベンダーのAPIからの応答を保存する" -#: evibes/settings/constance.py:56 +#: evibes/settings/constance.py:57 msgid "Legal Options" msgstr "法的オプション" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "Eメールオプション" -#: evibes/settings/constance.py:73 +#: evibes/settings/constance.py:75 msgid "Features Options" msgstr "機能オプション" -#: evibes/settings/constance.py:82 +#: evibes/settings/constance.py:84 msgid "SEO Options" msgstr "SEOオプション" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:88 msgid "Debugging Options" msgstr "デバッグ・オプション" @@ -227,62 +231,62 @@ msgstr "" "## バージョン\n" "現在のAPIバージョン:現在のAPIバージョン: {EVIBES_VERSION}\n" -#: evibes/settings/unfold.py:53 +#: evibes/settings/unfold.py:57 msgid "Menu" msgstr "メニュー" -#: evibes/settings/unfold.py:58 +#: evibes/settings/unfold.py:62 msgid "Dashboard" msgstr "ダッシュボード" -#: evibes/settings/unfold.py:63 +#: evibes/settings/unfold.py:67 msgid "Health" msgstr "健康" -#: evibes/settings/unfold.py:68 +#: evibes/settings/unfold.py:72 msgid "Config" msgstr "コンフィグ" -#: evibes/settings/unfold.py:73 +#: evibes/settings/unfold.py:77 msgid "Periodic Tasks" msgstr "定期的なタスク" -#: evibes/settings/unfold.py:98 +#: evibes/settings/unfold.py:102 msgid "Taskboard" msgstr "タスクボード" -#: evibes/settings/unfold.py:103 +#: evibes/settings/unfold.py:107 msgid "Support" msgstr "サポート" -#: evibes/settings/unfold.py:110 +#: evibes/settings/unfold.py:114 msgid "Quick Links" msgstr "クイックリンク" -#: evibes/settings/unfold.py:115 +#: evibes/settings/unfold.py:119 msgid "Users" msgstr "ユーザー" -#: evibes/settings/unfold.py:120 +#: evibes/settings/unfold.py:124 msgid "Groups" msgstr "グループ" -#: evibes/settings/unfold.py:125 +#: evibes/settings/unfold.py:129 msgid "Orders" msgstr "受注状況" -#: evibes/settings/unfold.py:130 +#: evibes/settings/unfold.py:134 msgid "Products" msgstr "製品紹介" -#: evibes/settings/unfold.py:135 +#: evibes/settings/unfold.py:139 msgid "Categories" msgstr "カテゴリー" -#: evibes/settings/unfold.py:140 +#: evibes/settings/unfold.py:144 msgid "Brands" msgstr "ブランド" -#: evibes/settings/unfold.py:145 +#: evibes/settings/unfold.py:149 msgid "Blogposts" msgstr "ブログ記事" diff --git a/evibes/locale/kk_KZ/LC_MESSAGES/django.po b/evibes/locale/kk_KZ/LC_MESSAGES/django.po index f2c03a59..a8e152cc 100644 --- a/evibes/locale/kk_KZ/LC_MESSAGES/django.po +++ b/evibes/locale/kk_KZ/LC_MESSAGES/django.po @@ -2,12 +2,12 @@ # Copyright (C) 2025 EGOR GORBUNOV # This file is distributed under the same license as the EVIBES package. # EGOR GORBUNOV , 2025. -# +# msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-16 15:38+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -35,98 +35,102 @@ msgid "" msgstr "" #: evibes/settings/constance.py:28 +msgid "Shows if the taxes are already included in product's selling prices" +msgstr "" + +#: evibes/settings/constance.py:29 msgid "Exchange rate API key" msgstr "" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "!!!DO NOT CHANGE!!!" msgstr "" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP host" msgstr "" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "SMTP port" msgstr "" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use TLS" msgstr "" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "Use SSL" msgstr "" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP username" msgstr "" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "SMTP password" msgstr "" -#: evibes/settings/constance.py:37 +#: evibes/settings/constance.py:38 msgid "Mail from option" msgstr "" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from anonymous users" msgstr "" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "How many days we store messages from authenticated users" msgstr "" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "Disable buy functionality" msgstr "" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenStreetMap Nominatim API URL" msgstr "" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "OpenAI API Key" msgstr "" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "Abstract API Key" msgstr "" -#: evibes/settings/constance.py:45 +#: evibes/settings/constance.py:46 msgid "HTTP Proxy" msgstr "" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing advertisiment data" msgstr "" -#: evibes/settings/constance.py:48 +#: evibes/settings/constance.py:49 msgid "An entity for storing analytics data" msgstr "" -#: evibes/settings/constance.py:50 +#: evibes/settings/constance.py:51 msgid "Save responses from vendors' APIs" msgstr "" -#: evibes/settings/constance.py:56 +#: evibes/settings/constance.py:57 msgid "Legal Options" msgstr "" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "" -#: evibes/settings/constance.py:73 +#: evibes/settings/constance.py:75 msgid "Features Options" msgstr "" -#: evibes/settings/constance.py:82 +#: evibes/settings/constance.py:84 msgid "SEO Options" msgstr "" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:88 msgid "Debugging Options" msgstr "" @@ -199,62 +203,62 @@ msgid "" "Current API version: {EVIBES_VERSION}\n" msgstr "" -#: evibes/settings/unfold.py:53 +#: evibes/settings/unfold.py:57 msgid "Menu" msgstr "" -#: evibes/settings/unfold.py:58 +#: evibes/settings/unfold.py:62 msgid "Dashboard" msgstr "" -#: evibes/settings/unfold.py:63 +#: evibes/settings/unfold.py:67 msgid "Health" msgstr "" -#: evibes/settings/unfold.py:68 +#: evibes/settings/unfold.py:72 msgid "Config" msgstr "" -#: evibes/settings/unfold.py:73 +#: evibes/settings/unfold.py:77 msgid "Periodic Tasks" msgstr "" -#: evibes/settings/unfold.py:98 +#: evibes/settings/unfold.py:102 msgid "Taskboard" msgstr "" -#: evibes/settings/unfold.py:103 +#: evibes/settings/unfold.py:107 msgid "Support" msgstr "" -#: evibes/settings/unfold.py:110 +#: evibes/settings/unfold.py:114 msgid "Quick Links" msgstr "" -#: evibes/settings/unfold.py:115 +#: evibes/settings/unfold.py:119 msgid "Users" msgstr "" -#: evibes/settings/unfold.py:120 +#: evibes/settings/unfold.py:124 msgid "Groups" msgstr "" -#: evibes/settings/unfold.py:125 +#: evibes/settings/unfold.py:129 msgid "Orders" msgstr "" -#: evibes/settings/unfold.py:130 +#: evibes/settings/unfold.py:134 msgid "Products" msgstr "" -#: evibes/settings/unfold.py:135 +#: evibes/settings/unfold.py:139 msgid "Categories" msgstr "" -#: evibes/settings/unfold.py:140 +#: evibes/settings/unfold.py:144 msgid "Brands" msgstr "" -#: evibes/settings/unfold.py:145 +#: evibes/settings/unfold.py:149 msgid "Blogposts" msgstr "" diff --git a/evibes/locale/ko_KR/LC_MESSAGES/django.mo b/evibes/locale/ko_KR/LC_MESSAGES/django.mo index 695d489a083107e4ad79016bd21c942a271b6dce..5f3dc7f69e8fcfe350ffc4fac567dd9a8fbd2c56 100644 GIT binary patch delta 1010 zcmXZaUr19?9KiA8wk)&NEED^G+ziXw2rBZS0-5yEKcT`XEY^0-!O++y7E}{5SSdAI zmV|~6k`08+`7nIwu|Gr*J>*M75k+iwP}DiBq_ai7+m~>sX1mEFYk}*&~!f(^mY_)jG&Del#*oq01 zJa19*%wq?BMag%_U9t`3q|Uk1d7Hazd)jIDc;yz$h1pE^(mix(vU9oV(yHm?Qrpt) zc7K(RC%N;oHECP3Pwh?4=FaZkm=1U7c&DM`fr~~=2cm`!M50C@bV-N1f{~t(5#m8# zh<1m1g7Jo!jv0|ixa&M4;h>TI<~rayIzC#wlhnn*RAF*L=coJfGa2)KN}K(;d@gB@ y&1!n#Nlq7UPZftB7g8hUJ;oj;3pekYlYP24G-?iv7Kby1fn;G|!k2EW8~YD(MxfyU delta 864 zcmXZaJxJR@7{~D^{?pXP*Tk3lZX}9Pn+hV-B_JeAi-QgUMFkOwlN|&R7c=M}A~*zH zT*MA;4vOF+D2R^YrXW)3QbfT)5LySnKXM0`&pmg!d+zRkkEx4f_Acz-FiM=-Kwb8k zCGfF;AIfjfY&2+gj}^p;QnPX#!fKqv7%pHd?%*f9zyMw$)9u>Df86*3hRm||LZg;H z1j@`xFoIS16_qH3S}2WLXw1da*h~Bq`|uZP{w-?W1N!klYUAo8l~rOhMlnEsOS*v{ zSkJ%+7UCQh;i7XDb+S!VqHP!Nx%dcM=s(Ag_}7g;W19G%>mTIU8Xv|FtQKgU#Dgygmwtiui$r!cE4Nz+h* zDb&PSRR4mDS5Q~Ij^FSM_5U|)#9$;pFNW&xM$J#4Havh@cOEsqh}!sCg!|XPHXRz+ zMSbH#)B-2SrPw9vQ{1E8#uK)q$9-#l7ixYFX0RW%&aQJGbwkJK!_QR3X1Smj_F1mc zi^jVM^h+ZzBtpsZ+*QlgJ00Rs Ap#T5? diff --git a/evibes/locale/ko_KR/LC_MESSAGES/django.po b/evibes/locale/ko_KR/LC_MESSAGES/django.po index 825c9451..b8b755b7 100644 --- a/evibes/locale/ko_KR/LC_MESSAGES/django.po +++ b/evibes/locale/ko_KR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-16 15:38+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -32,98 +32,102 @@ msgid "" msgstr "회사 관할 지역의 세율입니다. 세금을 처리하지 않으려면 0을 그대로 둡니다." #: evibes/settings/constance.py:28 +msgid "Shows if the taxes are already included in product's selling prices" +msgstr "제품 판매 가격에 세금이 이미 포함되어 있는지 표시합니다." + +#: evibes/settings/constance.py:29 msgid "Exchange rate API key" msgstr "환율 API 키" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "!!!DO NOT CHANGE!!!" msgstr "!!!변경하지 마세요!!!" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP host" msgstr "SMTP 호스트" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "SMTP port" msgstr "SMTP 포트" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use TLS" msgstr "TLS 사용" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "Use SSL" msgstr "SSL 사용" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP username" msgstr "SMTP 사용자 이름" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "SMTP password" msgstr "SMTP 비밀번호" -#: evibes/settings/constance.py:37 +#: evibes/settings/constance.py:38 msgid "Mail from option" msgstr "이메일 발신자의 주소" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from anonymous users" msgstr "익명 사용자의 메시지를 보관하는 일수" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "How many days we store messages from authenticated users" msgstr "인증된 사용자의 메시지를 보관하는 일수" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "Disable buy functionality" msgstr "구매 기능 비활성화" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenStreetMap Nominatim API URL" msgstr "오픈스트리트맵 노미나팀 API URL" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "OpenAI API Key" msgstr "OpenAI API 키" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "Abstract API Key" msgstr "추상 API 키" -#: evibes/settings/constance.py:45 +#: evibes/settings/constance.py:46 msgid "HTTP Proxy" msgstr "HTTP 프록시" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing advertisiment data" msgstr "광고 데이터를 저장하는 엔티티" -#: evibes/settings/constance.py:48 +#: evibes/settings/constance.py:49 msgid "An entity for storing analytics data" msgstr "분석 데이터를 저장하는 엔티티" -#: evibes/settings/constance.py:50 +#: evibes/settings/constance.py:51 msgid "Save responses from vendors' APIs" msgstr "공급업체 API의 응답 저장하기" -#: evibes/settings/constance.py:56 +#: evibes/settings/constance.py:57 msgid "Legal Options" msgstr "법적 옵션" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "이메일 옵션" -#: evibes/settings/constance.py:73 +#: evibes/settings/constance.py:75 msgid "Features Options" msgstr "기능 옵션" -#: evibes/settings/constance.py:82 +#: evibes/settings/constance.py:84 msgid "SEO Options" msgstr "SEO 옵션" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:88 msgid "Debugging Options" msgstr "디버깅 옵션" @@ -227,62 +231,62 @@ msgstr "" "## 버전\n" "현재 API 버전입니다: {EVIBES_VERSION}\n" -#: evibes/settings/unfold.py:53 +#: evibes/settings/unfold.py:57 msgid "Menu" msgstr "메뉴" -#: evibes/settings/unfold.py:58 +#: evibes/settings/unfold.py:62 msgid "Dashboard" msgstr "대시보드" -#: evibes/settings/unfold.py:63 +#: evibes/settings/unfold.py:67 msgid "Health" msgstr "건강" -#: evibes/settings/unfold.py:68 +#: evibes/settings/unfold.py:72 msgid "Config" msgstr "구성" -#: evibes/settings/unfold.py:73 +#: evibes/settings/unfold.py:77 msgid "Periodic Tasks" msgstr "정기 작업" -#: evibes/settings/unfold.py:98 +#: evibes/settings/unfold.py:102 msgid "Taskboard" msgstr "작업 보드" -#: evibes/settings/unfold.py:103 +#: evibes/settings/unfold.py:107 msgid "Support" msgstr "지원" -#: evibes/settings/unfold.py:110 +#: evibes/settings/unfold.py:114 msgid "Quick Links" msgstr "빠른 링크" -#: evibes/settings/unfold.py:115 +#: evibes/settings/unfold.py:119 msgid "Users" msgstr "사용자" -#: evibes/settings/unfold.py:120 +#: evibes/settings/unfold.py:124 msgid "Groups" msgstr "그룹" -#: evibes/settings/unfold.py:125 +#: evibes/settings/unfold.py:129 msgid "Orders" msgstr "주문" -#: evibes/settings/unfold.py:130 +#: evibes/settings/unfold.py:134 msgid "Products" msgstr "제품" -#: evibes/settings/unfold.py:135 +#: evibes/settings/unfold.py:139 msgid "Categories" msgstr "카테고리" -#: evibes/settings/unfold.py:140 +#: evibes/settings/unfold.py:144 msgid "Brands" msgstr "브랜드" -#: evibes/settings/unfold.py:145 +#: evibes/settings/unfold.py:149 msgid "Blogposts" msgstr "블로그 게시물" diff --git a/evibes/locale/nl_NL/LC_MESSAGES/django.mo b/evibes/locale/nl_NL/LC_MESSAGES/django.mo index 0e2c68404b2c1c1981256ae5341703f1a9c12f41..149913fb65bc5b3bac2e18fb8a104612591938ea 100644 GIT binary patch delta 1013 zcmXxiPi%`}9KiA4)^_N0>xP>6vqx7MW{ZrlH2#E5oF-CS$Re-yslHQf({?L6sEdOT zB#i@SSx6jAohFeukt}f>2P8zq76;-$hQ#-mz24;M=Y4+9pWpNR-p(DoHB^1y?!PTO zeYAD7>kT4%@lPW^Jl}jGr-CBiaRvS17LhPI7{MZL#;X{^$G8k%V-tQrmdh8f|HB(! zz&4Sp_*+HRFd>2=+>WboA8MlGs2f?-jj~?9f;;J7!U3$KuK$XJbE7*)TJny33Y!WrmBd`C=>%YW}#Ak63f8i3`!!>o?5T3vz zsPTI$`Q;%m0epfZlz$pOa@7uw-A?@X`o)U0Y*;jgyNSnf7ZyO$2dih9C+)RMrNChCMcsEH?0<5Q>ydx{#LLH(w)*n{(!zzFr%PvfF~ z!U|^avKOE8{E50xAX=Mmj5chmg?wGT`Y+bgZ=&_mx@h`rrRhIiAH5Z8rKdLH8*J<2 zEk@HC=(D9hZ8$)`=qnlm=*l*&x9IW{vB?kFP#dinE2*o`^k Zws7S&*O>N-YiwPFAGfAH5^@e(t$@-~01is>L7qN+;@HF-n@+ zOI`MvzHzrh6k@30GZ-S{so5&w1lV;o!Kckn3d z+kG07qR&+JK*hq#66&vPGg4E6mK zl4#SRHNROc=tX^2>+_OnO{h~`q7GA&RF%tA{nJ%+I_9vU+MHL2q-hOMl?#\n" "Language-Team: LANGUAGE \n" @@ -34,98 +34,104 @@ msgstr "" " belastingen wilt verwerken." #: evibes/settings/constance.py:28 +msgid "Shows if the taxes are already included in product's selling prices" +msgstr "" +"Geeft aan of de belastingen al zijn opgenomen in de verkoopprijzen van het " +"product" + +#: evibes/settings/constance.py:29 msgid "Exchange rate API key" msgstr "Wisselkoers API sleutel" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "!!!DO NOT CHANGE!!!" msgstr "NIET VERANDEREN!!!" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP host" msgstr "SMTP host" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "SMTP port" msgstr "SMTP poort" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use TLS" msgstr "TLS gebruiken" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "Use SSL" msgstr "SSL gebruiken" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP username" msgstr "SMTP gebruikersnaam" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "SMTP password" msgstr "SMTP wachtwoord" -#: evibes/settings/constance.py:37 +#: evibes/settings/constance.py:38 msgid "Mail from option" msgstr "Het adres van de afzender van de e-mail" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from anonymous users" msgstr "Hoeveel dagen we berichten van anonieme gebruikers bewaren" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "How many days we store messages from authenticated users" msgstr "Hoeveel dagen we berichten van geverifieerde gebruikers bewaren" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "Disable buy functionality" msgstr "Koopfunctie uitschakelen" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenStreetMap Nominatim API URL" msgstr "OpenStreetMap Nominatim API URL" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "OpenAI API Key" msgstr "OpenAI API sleutel" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "Abstract API Key" msgstr "Abstracte API-sleutel" -#: evibes/settings/constance.py:45 +#: evibes/settings/constance.py:46 msgid "HTTP Proxy" msgstr "HTTP-proxy" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing advertisiment data" msgstr "Een entiteit voor het opslaan van adverteerdersgegevens" -#: evibes/settings/constance.py:48 +#: evibes/settings/constance.py:49 msgid "An entity for storing analytics data" msgstr "Een entiteit voor het opslaan van analytische gegevens" -#: evibes/settings/constance.py:50 +#: evibes/settings/constance.py:51 msgid "Save responses from vendors' APIs" msgstr "Reacties opslaan van API's van leveranciers" -#: evibes/settings/constance.py:56 +#: evibes/settings/constance.py:57 msgid "Legal Options" msgstr "Juridische opties" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "E-mailopties" -#: evibes/settings/constance.py:73 +#: evibes/settings/constance.py:75 msgid "Features Options" msgstr "Functies Opties" -#: evibes/settings/constance.py:82 +#: evibes/settings/constance.py:84 msgid "SEO Options" msgstr "SEO Opties" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:88 msgid "Debugging Options" msgstr "Debugopties" @@ -229,62 +235,62 @@ msgstr "" "## Versie\n" "Huidige API versie: {EVIBES_VERSION}\n" -#: evibes/settings/unfold.py:53 +#: evibes/settings/unfold.py:57 msgid "Menu" msgstr "Menu" -#: evibes/settings/unfold.py:58 +#: evibes/settings/unfold.py:62 msgid "Dashboard" msgstr "Dashboard" -#: evibes/settings/unfold.py:63 +#: evibes/settings/unfold.py:67 msgid "Health" msgstr "Gezondheid" -#: evibes/settings/unfold.py:68 +#: evibes/settings/unfold.py:72 msgid "Config" msgstr "Config" -#: evibes/settings/unfold.py:73 +#: evibes/settings/unfold.py:77 msgid "Periodic Tasks" msgstr "Periodieke taken" -#: evibes/settings/unfold.py:98 +#: evibes/settings/unfold.py:102 msgid "Taskboard" msgstr "Taakbord" -#: evibes/settings/unfold.py:103 +#: evibes/settings/unfold.py:107 msgid "Support" msgstr "Ondersteuning" -#: evibes/settings/unfold.py:110 +#: evibes/settings/unfold.py:114 msgid "Quick Links" msgstr "Snelle links" -#: evibes/settings/unfold.py:115 +#: evibes/settings/unfold.py:119 msgid "Users" msgstr "Gebruikers" -#: evibes/settings/unfold.py:120 +#: evibes/settings/unfold.py:124 msgid "Groups" msgstr "Groepen" -#: evibes/settings/unfold.py:125 +#: evibes/settings/unfold.py:129 msgid "Orders" msgstr "Bestellingen" -#: evibes/settings/unfold.py:130 +#: evibes/settings/unfold.py:134 msgid "Products" msgstr "Producten" -#: evibes/settings/unfold.py:135 +#: evibes/settings/unfold.py:139 msgid "Categories" msgstr "Categorieën" -#: evibes/settings/unfold.py:140 +#: evibes/settings/unfold.py:144 msgid "Brands" msgstr "Merken" -#: evibes/settings/unfold.py:145 +#: evibes/settings/unfold.py:149 msgid "Blogposts" msgstr "Blogposts" diff --git a/evibes/locale/no_NO/LC_MESSAGES/django.mo b/evibes/locale/no_NO/LC_MESSAGES/django.mo index feae483b4792cf9effd645e5e2ff71ee51104ae9..1ce2e9d5d7d7f21fb1c43b9b17dc92320e39a64c 100644 GIT binary patch delta 994 zcmXZa&ubGw6u|MzIbj|J2UO+;RcoIyR% z9n@Dmi~Qsze^m{*$i;U2hFdUBeKf-^)PNb(1p81+-H-Z>lu^HdI%*>CP)q&=slF_s z#$Q2xk~Gak`%n)yXsExI{45h%A`f-p6jD8zL7l&kdcudOuj+$`Hn$Wpo1LOGCIG%5v;#K383*KbW7P&AJex*2B z2=@ghu%73ZOU$?h+xVPnBy$(s!1|_g**H@rcQmwRjp13}7OmliTOQXqerVigobk|x P1aiDmK$M{Nz})=@nInZ% delta 864 zcmXZbKTMNB7{~DkUnqjs+KT`B#}->-73)A8y1WZD4kRQpkW__)h=B=Mba1hWAq=i> zYQzb2VIbIqg@lC?0*<frZB@6vle@7=w3_uO-^Sy~yW?8n-xMk!E} z)VVe@A5YHkp#1dAo^_iY;3eAr1+$Adj92hE=J7S=@Dq07E{5`3`lm_o$5)U3=BF*RhxW9qh!W8~=qPwEwvN#~fSZW$a*o z8|P(=v`=E4BW}l95znWHmhq2BmwiE{dJD67jOQ_Oqm`MY^R}}ebr2tQwU3aWP4Liq zZ?O{RrOL}ytf3J|TB|u{H}*UbfIjQ>VB^y+_r_RPIo9S`}RfYuMdj+ABr%Kcg_Xx6_het9!-p Mnjfu2f\n" "Language-Team: LANGUAGE \n" @@ -34,98 +34,102 @@ msgstr "" " å behandle skatter." #: evibes/settings/constance.py:28 +msgid "Shows if the taxes are already included in product's selling prices" +msgstr "Viser om avgiftene allerede er inkludert i produktets salgspris" + +#: evibes/settings/constance.py:29 msgid "Exchange rate API key" msgstr "API-nøkkel for valutakurs" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "!!!DO NOT CHANGE!!!" msgstr "!!! IKKE ENDRE !!!!" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP host" msgstr "SMTP-vert" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "SMTP port" msgstr "SMTP-port" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use TLS" msgstr "Bruk TLS" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "Use SSL" msgstr "Bruk SSL" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP username" msgstr "SMTP-brukernavn" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "SMTP password" msgstr "SMTP-passord" -#: evibes/settings/constance.py:37 +#: evibes/settings/constance.py:38 msgid "Mail from option" msgstr "Adressen til avsenderen av e-posten" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from anonymous users" msgstr "Hvor mange dager vi lagrer meldinger fra anonyme brukere" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "How many days we store messages from authenticated users" msgstr "Hvor mange dager vi lagrer meldinger fra autentiserte brukere" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "Disable buy functionality" msgstr "Deaktiver kjøpsfunksjonalitet" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenStreetMap Nominatim API URL" msgstr "OpenStreetMap Nominatim API URL" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "OpenAI API Key" msgstr "OpenAI API-nøkkel" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "Abstract API Key" msgstr "Abstrakt API-nøkkel" -#: evibes/settings/constance.py:45 +#: evibes/settings/constance.py:46 msgid "HTTP Proxy" msgstr "HTTP-proxy" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing advertisiment data" msgstr "En enhet for lagring av annonseringsdata" -#: evibes/settings/constance.py:48 +#: evibes/settings/constance.py:49 msgid "An entity for storing analytics data" msgstr "En enhet for lagring av analysedata" -#: evibes/settings/constance.py:50 +#: evibes/settings/constance.py:51 msgid "Save responses from vendors' APIs" msgstr "Lagre svar fra leverandørers API-er" -#: evibes/settings/constance.py:56 +#: evibes/settings/constance.py:57 msgid "Legal Options" msgstr "Juridiske alternativer" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "E-postalternativer" -#: evibes/settings/constance.py:73 +#: evibes/settings/constance.py:75 msgid "Features Options" msgstr "Funksjoner Alternativer" -#: evibes/settings/constance.py:82 +#: evibes/settings/constance.py:84 msgid "SEO Options" msgstr "SEO-alternativer" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:88 msgid "Debugging Options" msgstr "Alternativer for feilsøking" @@ -229,62 +233,62 @@ msgstr "" "## Versjon\n" "Gjeldende API-versjon: {EVIBES_VERSION}\n" -#: evibes/settings/unfold.py:53 +#: evibes/settings/unfold.py:57 msgid "Menu" msgstr "Meny" -#: evibes/settings/unfold.py:58 +#: evibes/settings/unfold.py:62 msgid "Dashboard" msgstr "Dashbord" -#: evibes/settings/unfold.py:63 +#: evibes/settings/unfold.py:67 msgid "Health" msgstr "Helse" -#: evibes/settings/unfold.py:68 +#: evibes/settings/unfold.py:72 msgid "Config" msgstr "Konfigurer" -#: evibes/settings/unfold.py:73 +#: evibes/settings/unfold.py:77 msgid "Periodic Tasks" msgstr "Periodiske oppgaver" -#: evibes/settings/unfold.py:98 +#: evibes/settings/unfold.py:102 msgid "Taskboard" msgstr "Oppgavetavle" -#: evibes/settings/unfold.py:103 +#: evibes/settings/unfold.py:107 msgid "Support" msgstr "Støtte" -#: evibes/settings/unfold.py:110 +#: evibes/settings/unfold.py:114 msgid "Quick Links" msgstr "Hurtigkoblinger" -#: evibes/settings/unfold.py:115 +#: evibes/settings/unfold.py:119 msgid "Users" msgstr "Brukere" -#: evibes/settings/unfold.py:120 +#: evibes/settings/unfold.py:124 msgid "Groups" msgstr "Grupper" -#: evibes/settings/unfold.py:125 +#: evibes/settings/unfold.py:129 msgid "Orders" msgstr "Bestillinger" -#: evibes/settings/unfold.py:130 +#: evibes/settings/unfold.py:134 msgid "Products" msgstr "Produkter" -#: evibes/settings/unfold.py:135 +#: evibes/settings/unfold.py:139 msgid "Categories" msgstr "Kategorier" -#: evibes/settings/unfold.py:140 +#: evibes/settings/unfold.py:144 msgid "Brands" msgstr "Merkevarer" -#: evibes/settings/unfold.py:145 +#: evibes/settings/unfold.py:149 msgid "Blogposts" msgstr "Blogginnlegg" diff --git a/evibes/locale/pl_PL/LC_MESSAGES/django.mo b/evibes/locale/pl_PL/LC_MESSAGES/django.mo index 84e7e1b7b8b510851dfcdf744eb466d3c1ba9576..14db8b612d6708787735c33801e10462514b6a0b 100644 GIT binary patch delta 1004 zcmXZaO=uHA6u|M9rpAw&n$}t?icUY&s%3I#2K^ukDteUSL5ipm4-)iX3!a7QK@dcdT0B%l(Bi@WqdR2ww{JEx^XBco8(2P7{?uH5 zTWC@G4*GOJ|b)zSK{K}8tVmssSF@}F|Egs>RI&T0k z;1KHgjLQBp%gq{mj-!Lt_@1V}%M5$wa`s2gNZ*D3k&HQY#i z6Pxiava~!xmXaEl^$#Dp*@}y(Clj-}P$TMu7SxRQ;0cW4X-uQee}Vku4Hqr>SJcXV zM~Wc7Q4nv@54eDu_?M2#Qe8)&rxFf!_I5L%+3%+J(mUze_S5xC*QUv`ha9Mk z24hY767-wb8fn{CeH!c!pBzsYbH=-D^5fRzohvqHoUAoYGHV@o(s-$Ovfx^m8FFP*ZcXyP{IS(D3TOV)MfYs}Ea6Zt~4GSmL}KaJ(Q%z)G(uMDj-kaWj-nqB;&pEFL)4Nl(@3G*T(Q@QK{|&XSjY0g6y0`{8%Ff~i%wUM~ zt>h+d;V=_(coJ8z2UnfXQJK|I2fcD})5UM`BI7%F0)M&r1DqxP=f>}lw&u&&&G}a0 z;XY-5fGtk^6yuhRKS_2TAV-9JLTs!dddnpna2IEcw~C$Vd&icDhw zwTI3z^TS>&VE%b8leIYYT50NUZHQh L7;Q!TQo3;jl7vux diff --git a/evibes/locale/pl_PL/LC_MESSAGES/django.po b/evibes/locale/pl_PL/LC_MESSAGES/django.po index d02692a8..b60f70b0 100644 --- a/evibes/locale/pl_PL/LC_MESSAGES/django.po +++ b/evibes/locale/pl_PL/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-16 15:38+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -34,98 +34,102 @@ msgstr "" "przetwarzać podatków." #: evibes/settings/constance.py:28 +msgid "Shows if the taxes are already included in product's selling prices" +msgstr "Pokazuje, czy podatki są już uwzględnione w cenie sprzedaży produktu." + +#: evibes/settings/constance.py:29 msgid "Exchange rate API key" msgstr "Klucz API kursu wymiany" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "!!!DO NOT CHANGE!!!" msgstr "!!! NIE ZMIENIAJ !!!" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP host" msgstr "Host SMTP" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "SMTP port" msgstr "Port SMTP" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use TLS" msgstr "Używanie TLS" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "Use SSL" msgstr "Używanie protokołu SSL" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP username" msgstr "Nazwa użytkownika SMTP" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "SMTP password" msgstr "Hasło SMTP" -#: evibes/settings/constance.py:37 +#: evibes/settings/constance.py:38 msgid "Mail from option" msgstr "Adres nadawcy wiadomości e-mail" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from anonymous users" msgstr "Ile dni przechowujemy wiadomości od anonimowych użytkowników?" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "How many days we store messages from authenticated users" msgstr "Ile dni przechowujemy wiadomości od uwierzytelnionych użytkowników?" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "Disable buy functionality" msgstr "Wyłączenie funkcji kupowania" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenStreetMap Nominatim API URL" msgstr "Adres URL interfejsu API OpenStreetMap Nominatim" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "OpenAI API Key" msgstr "Klucz API OpenAI" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "Abstract API Key" msgstr "Abstrakcyjny klucz API" -#: evibes/settings/constance.py:45 +#: evibes/settings/constance.py:46 msgid "HTTP Proxy" msgstr "Serwer proxy HTTP" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing advertisiment data" msgstr "Jednostka do przechowywania danych reklamowych" -#: evibes/settings/constance.py:48 +#: evibes/settings/constance.py:49 msgid "An entity for storing analytics data" msgstr "Jednostka do przechowywania danych analitycznych" -#: evibes/settings/constance.py:50 +#: evibes/settings/constance.py:51 msgid "Save responses from vendors' APIs" msgstr "Zapisywanie odpowiedzi z interfejsów API dostawców" -#: evibes/settings/constance.py:56 +#: evibes/settings/constance.py:57 msgid "Legal Options" msgstr "Opcje prawne" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "Opcje e-mail" -#: evibes/settings/constance.py:73 +#: evibes/settings/constance.py:75 msgid "Features Options" msgstr "Opcje funkcji" -#: evibes/settings/constance.py:82 +#: evibes/settings/constance.py:84 msgid "SEO Options" msgstr "Opcje SEO" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:88 msgid "Debugging Options" msgstr "Opcje debugowania" @@ -229,62 +233,62 @@ msgstr "" "## Wersja\n" "Aktualna wersja API: {EVIBES_VERSION}\n" -#: evibes/settings/unfold.py:53 +#: evibes/settings/unfold.py:57 msgid "Menu" msgstr "Menu" -#: evibes/settings/unfold.py:58 +#: evibes/settings/unfold.py:62 msgid "Dashboard" msgstr "Pulpit nawigacyjny" -#: evibes/settings/unfold.py:63 +#: evibes/settings/unfold.py:67 msgid "Health" msgstr "Zdrowie" -#: evibes/settings/unfold.py:68 +#: evibes/settings/unfold.py:72 msgid "Config" msgstr "Konfiguracja" -#: evibes/settings/unfold.py:73 +#: evibes/settings/unfold.py:77 msgid "Periodic Tasks" msgstr "Zadania okresowe" -#: evibes/settings/unfold.py:98 +#: evibes/settings/unfold.py:102 msgid "Taskboard" msgstr "Tablica zadań" -#: evibes/settings/unfold.py:103 +#: evibes/settings/unfold.py:107 msgid "Support" msgstr "Wsparcie" -#: evibes/settings/unfold.py:110 +#: evibes/settings/unfold.py:114 msgid "Quick Links" msgstr "Szybkie łącza" -#: evibes/settings/unfold.py:115 +#: evibes/settings/unfold.py:119 msgid "Users" msgstr "Użytkownicy" -#: evibes/settings/unfold.py:120 +#: evibes/settings/unfold.py:124 msgid "Groups" msgstr "Grupy" -#: evibes/settings/unfold.py:125 +#: evibes/settings/unfold.py:129 msgid "Orders" msgstr "Zamówienia" -#: evibes/settings/unfold.py:130 +#: evibes/settings/unfold.py:134 msgid "Products" msgstr "Produkty" -#: evibes/settings/unfold.py:135 +#: evibes/settings/unfold.py:139 msgid "Categories" msgstr "Kategorie" -#: evibes/settings/unfold.py:140 +#: evibes/settings/unfold.py:144 msgid "Brands" msgstr "Marki" -#: evibes/settings/unfold.py:145 +#: evibes/settings/unfold.py:149 msgid "Blogposts" msgstr "Blogposts" diff --git a/evibes/locale/pt_BR/LC_MESSAGES/django.mo b/evibes/locale/pt_BR/LC_MESSAGES/django.mo index 1d5847f59d6b497f846250cec08e639864f4de5c..023b698d05e32f15f473968a09e0c45bcba9d749 100644 GIT binary patch delta 1006 zcmXZaOK1~O6oBE=B-TfpnpE5R_BN^5MpK2l2vS9fx+!tt14Jn}W=0!HGhrsRc4I*h zEQp&Zh%Q8wcBA-+C@8oIh~2qTR1icEDK30$q$v0wGXsI47~f(uenPg(*C75C ztj}XyWKtqaMON~KPK@GK?7*F9NV<( zKLqP@*hTyo^{47E^j|k_XTY4~Pz#KrCOVIrXex-Wp#C>*;4XZJdcaj&JAoPT&TdK)v}*)SqOgoBpq3@SF*4`Fqq8e@0F46SZ|Avg<)w1G`W=lE4&Za0v6L z1@0qFl&5$cXHoN~k_`t?^A0AfbD>1j=4v#YO!qROr`MBeTlvoaM+@jJ^wI8cCfQUS z4rk;2jI@zjN}s;k!*C|Ld&C|0P2r@ej5wxZoppR;d5*D)o@3b)rclZk$85)DV9K6r zkL4>Hed9aDVxe@3nL^&FeTntOhjOl8@hn!1OS;iAA%oNPTgLG#_1kVEQ~jRJY>Bt* YIrSN|9dpJh*_N^0MuCc3ZA)DH2RgfnApigX delta 864 zcmXZaPe@cz6vy#1zG*D~jWcP(km>wMaZGJvFq?sa=?~OK2|>|dm_@Uyor^%6jVZWk z@klojkr1>Q7j9-d7!z)SHc=2!6e5FAi#95V-yd@?-1m9s-uLdg_q^A*`|eKVM>P1- zXcP1S`f9)|hevH(Xg@u(g$}b{c$qlYW7dl^cm+#1iqG&mzQs%U5kvSHdELIc__v#H zV#KUs|GA0tKqze1jS1|>NmQcSsD)-x3oW|1j8nu%GDNsv3&T{0=V~F#npDp147%Q)tKI^fX;9L)U54R3&oSnE%8pMD!6\n" "Language-Team: LANGUAGE \n" @@ -34,98 +34,103 @@ msgstr "" "processar impostos." #: evibes/settings/constance.py:28 +msgid "Shows if the taxes are already included in product's selling prices" +msgstr "" +"Mostra se os impostos já estão incluídos nos preços de venda do produto" + +#: evibes/settings/constance.py:29 msgid "Exchange rate API key" msgstr "Chave da API de taxa de câmbio" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "!!!DO NOT CHANGE!!!" msgstr "!!!NÃO MUDE!!!" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP host" msgstr "Host SMTP" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "SMTP port" msgstr "Porta SMTP" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use TLS" msgstr "Usar TLS" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "Use SSL" msgstr "Usar SSL" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP username" msgstr "Nome de usuário SMTP" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "SMTP password" msgstr "Senha SMTP" -#: evibes/settings/constance.py:37 +#: evibes/settings/constance.py:38 msgid "Mail from option" msgstr "O endereço do remetente do e-mail" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from anonymous users" msgstr "Por quantos dias armazenamos mensagens de usuários anônimos" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "How many days we store messages from authenticated users" msgstr "Por quantos dias armazenamos mensagens de usuários autenticados" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "Disable buy functionality" msgstr "Desativar a funcionalidade de compra" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenStreetMap Nominatim API URL" msgstr "URL da API do OpenStreetMap Nominatim" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "OpenAI API Key" msgstr "Chave da API da OpenAI" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "Abstract API Key" msgstr "Chave abstrata da API" -#: evibes/settings/constance.py:45 +#: evibes/settings/constance.py:46 msgid "HTTP Proxy" msgstr "Proxy HTTP" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing advertisiment data" msgstr "Uma entidade para armazenar dados de propaganda" -#: evibes/settings/constance.py:48 +#: evibes/settings/constance.py:49 msgid "An entity for storing analytics data" msgstr "Uma entidade para armazenar dados analíticos" -#: evibes/settings/constance.py:50 +#: evibes/settings/constance.py:51 msgid "Save responses from vendors' APIs" msgstr "Salvar respostas das APIs dos fornecedores" -#: evibes/settings/constance.py:56 +#: evibes/settings/constance.py:57 msgid "Legal Options" msgstr "Opções legais" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "Opções de e-mail" -#: evibes/settings/constance.py:73 +#: evibes/settings/constance.py:75 msgid "Features Options" msgstr "Opções de recursos" -#: evibes/settings/constance.py:82 +#: evibes/settings/constance.py:84 msgid "SEO Options" msgstr "Opções de SEO" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:88 msgid "Debugging Options" msgstr "Opções de depuração" @@ -229,62 +234,62 @@ msgstr "" "## Versão\n" "Versão atual da API: {EVIBES_VERSION}\n" -#: evibes/settings/unfold.py:53 +#: evibes/settings/unfold.py:57 msgid "Menu" msgstr "Menu" -#: evibes/settings/unfold.py:58 +#: evibes/settings/unfold.py:62 msgid "Dashboard" msgstr "Painel de controle" -#: evibes/settings/unfold.py:63 +#: evibes/settings/unfold.py:67 msgid "Health" msgstr "Saúde" -#: evibes/settings/unfold.py:68 +#: evibes/settings/unfold.py:72 msgid "Config" msgstr "Configuração" -#: evibes/settings/unfold.py:73 +#: evibes/settings/unfold.py:77 msgid "Periodic Tasks" msgstr "Tarefas periódicas" -#: evibes/settings/unfold.py:98 +#: evibes/settings/unfold.py:102 msgid "Taskboard" msgstr "Quadro de tarefas" -#: evibes/settings/unfold.py:103 +#: evibes/settings/unfold.py:107 msgid "Support" msgstr "Suporte" -#: evibes/settings/unfold.py:110 +#: evibes/settings/unfold.py:114 msgid "Quick Links" msgstr "Links rápidos" -#: evibes/settings/unfold.py:115 +#: evibes/settings/unfold.py:119 msgid "Users" msgstr "Usuários" -#: evibes/settings/unfold.py:120 +#: evibes/settings/unfold.py:124 msgid "Groups" msgstr "Grupos" -#: evibes/settings/unfold.py:125 +#: evibes/settings/unfold.py:129 msgid "Orders" msgstr "Pedidos" -#: evibes/settings/unfold.py:130 +#: evibes/settings/unfold.py:134 msgid "Products" msgstr "Produtos" -#: evibes/settings/unfold.py:135 +#: evibes/settings/unfold.py:139 msgid "Categories" msgstr "Categorias" -#: evibes/settings/unfold.py:140 +#: evibes/settings/unfold.py:144 msgid "Brands" msgstr "Marcas" -#: evibes/settings/unfold.py:145 +#: evibes/settings/unfold.py:149 msgid "Blogposts" msgstr "Postagens em blogs" diff --git a/evibes/locale/ro_RO/LC_MESSAGES/django.mo b/evibes/locale/ro_RO/LC_MESSAGES/django.mo index ac629c22aa7ec1cdfea4886229af79f3efd99632..437a29e2c98102a759fc052c007077a7e789aeb7 100644 GIT binary patch delta 1010 zcmXZaPe>F|9Ki9P?q+|~TFtCzp|}1aE0tga4Kfg`Q|TeSw0M|yUO6(XHnWq}ArI0a zkS<#nI|LOSB%<2r5D|nyb}c9d>#l(;pg> zSB2J1Pt#|sMEdY=H4oZyLL|3N+bU$h0Ikh-~G9W~|3OxCsxSCK^T!WKje8@q7yRGQWVmSVrCd9d+LdCb5=@7M?RvI<2GJ+xCSp`EnbeDLp|AT)I|5<`O|p5h#A)3-~j%?)wrKy>b`?G zf`h2*w^Z`W9R{oLA&zqWkFl;!WD8|$E%K zZ{(0mkN`FQ3~GTlQTNSfxc^oLPgu}|A5kk^LM}jlqn<3;QZW^qMm4@HA?i zXQ&BY;v~LDjeCS-Y7RB-cx&lfbxT!esXo!#rGK&hFzxg%x)!Ew7hO-IO_NfS>@JNa z1{%5<=|8WjwCyb4PxRLJk4;R4#ye?>W7ZU%vovOKjCv+!iV?^{g_9#+o6kpyY)*9 znq};UFHiY_zuc@8pJ64wMqSj2Iw*xYXwbzUu#I>Ou?KQSi?d;7ULv7!q3hbRAt{#7cIJY)y3a2%=``(;UBmD7gNNyZoZeYwf+tZ zx!;EQGDO?oV@ZkGcIZCid_CE+evYc(7Td9m^j~2TmEZ)bLm5I&dMApIVyzx^ehVtW9@M@x zM(|^p{_Db7CY0$Hqyd&gRkr5*;oL=4a)7OPf!bf!cznO diff --git a/evibes/locale/ro_RO/LC_MESSAGES/django.po b/evibes/locale/ro_RO/LC_MESSAGES/django.po index e41747e7..536c250b 100644 --- a/evibes/locale/ro_RO/LC_MESSAGES/django.po +++ b/evibes/locale/ro_RO/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-16 15:38+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -34,98 +34,103 @@ msgstr "" "doriți să procesați taxele." #: evibes/settings/constance.py:28 +msgid "Shows if the taxes are already included in product's selling prices" +msgstr "" +"Arată dacă taxele sunt deja incluse în prețurile de vânzare ale produsului" + +#: evibes/settings/constance.py:29 msgid "Exchange rate API key" msgstr "Cheie API pentru rata de schimb" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "!!!DO NOT CHANGE!!!" msgstr "!!!NU SCHIMBAȚI!!!" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP host" msgstr "Gazdă SMTP" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "SMTP port" msgstr "Portul SMTP" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use TLS" msgstr "Utilizați TLS" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "Use SSL" msgstr "Utilizați SSL" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP username" msgstr "Nume utilizator SMTP" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "SMTP password" msgstr "Parola SMTP" -#: evibes/settings/constance.py:37 +#: evibes/settings/constance.py:38 msgid "Mail from option" msgstr "Adresa expeditorului e-mailurilor" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from anonymous users" msgstr "Câte zile păstrăm mesajele de la utilizatorii anonimi" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "How many days we store messages from authenticated users" msgstr "Câte zile stocăm mesajele de la utilizatorii autentificați" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "Disable buy functionality" msgstr "Dezactivați funcționalitatea de cumpărare" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenStreetMap Nominatim API URL" msgstr "OpenStreetMap Nominatim API URL" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "OpenAI API Key" msgstr "Cheie API OpenAI" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "Abstract API Key" msgstr "Cheie API abstractă" -#: evibes/settings/constance.py:45 +#: evibes/settings/constance.py:46 msgid "HTTP Proxy" msgstr "Proxy HTTP" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing advertisiment data" msgstr "O entitate pentru stocarea datelor privind publicitatea" -#: evibes/settings/constance.py:48 +#: evibes/settings/constance.py:49 msgid "An entity for storing analytics data" msgstr "O entitate pentru stocarea datelor analitice" -#: evibes/settings/constance.py:50 +#: evibes/settings/constance.py:51 msgid "Save responses from vendors' APIs" msgstr "Salvați răspunsurile de la API-urile furnizorilor" -#: evibes/settings/constance.py:56 +#: evibes/settings/constance.py:57 msgid "Legal Options" msgstr "Opțiuni juridice" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "Opțiuni de e-mail" -#: evibes/settings/constance.py:73 +#: evibes/settings/constance.py:75 msgid "Features Options" msgstr "Caracteristici Opțiuni" -#: evibes/settings/constance.py:82 +#: evibes/settings/constance.py:84 msgid "SEO Options" msgstr "Opțiuni SEO" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:88 msgid "Debugging Options" msgstr "Opțiuni de depanare" @@ -229,62 +234,62 @@ msgstr "" "## Versiune\n" "Versiunea curentă a API: {EVIBES_VERSION}\n" -#: evibes/settings/unfold.py:53 +#: evibes/settings/unfold.py:57 msgid "Menu" msgstr "Meniu" -#: evibes/settings/unfold.py:58 +#: evibes/settings/unfold.py:62 msgid "Dashboard" msgstr "Tablou de bord" -#: evibes/settings/unfold.py:63 +#: evibes/settings/unfold.py:67 msgid "Health" msgstr "Sănătate" -#: evibes/settings/unfold.py:68 +#: evibes/settings/unfold.py:72 msgid "Config" msgstr "Configurare" -#: evibes/settings/unfold.py:73 +#: evibes/settings/unfold.py:77 msgid "Periodic Tasks" msgstr "Sarcini periodice" -#: evibes/settings/unfold.py:98 +#: evibes/settings/unfold.py:102 msgid "Taskboard" msgstr "Tablou de sarcini" -#: evibes/settings/unfold.py:103 +#: evibes/settings/unfold.py:107 msgid "Support" msgstr "Sprijin" -#: evibes/settings/unfold.py:110 +#: evibes/settings/unfold.py:114 msgid "Quick Links" msgstr "Linkuri rapide" -#: evibes/settings/unfold.py:115 +#: evibes/settings/unfold.py:119 msgid "Users" msgstr "Utilizatori" -#: evibes/settings/unfold.py:120 +#: evibes/settings/unfold.py:124 msgid "Groups" msgstr "Grupuri" -#: evibes/settings/unfold.py:125 +#: evibes/settings/unfold.py:129 msgid "Orders" msgstr "Ordine" -#: evibes/settings/unfold.py:130 +#: evibes/settings/unfold.py:134 msgid "Products" msgstr "Produse" -#: evibes/settings/unfold.py:135 +#: evibes/settings/unfold.py:139 msgid "Categories" msgstr "Categorii" -#: evibes/settings/unfold.py:140 +#: evibes/settings/unfold.py:144 msgid "Brands" msgstr "Mărci" -#: evibes/settings/unfold.py:145 +#: evibes/settings/unfold.py:149 msgid "Blogposts" msgstr "Blogposturi" diff --git a/evibes/locale/ru_RU/LC_MESSAGES/django.mo b/evibes/locale/ru_RU/LC_MESSAGES/django.mo index 5758d9dcbfcc4da23f1dedd4c74dc44be9057a45..e4d81c5a118296414dec0a0d96a421152dd14a00 100644 GIT binary patch delta 1058 zcmXZaO-NKx6u|MLWAm>pe71A@em#%9>q3HqOM;?UAK+}SVW))_aJ*p zEmq@UEM$K<>kM4Py$l3#8{WnuoOGN)z1dULjS@~g@5BqZpZ>4diGOh`wsTEgcO1L$ zG;047mHp)fjV+kMZpxp*ccmf~99t{%`JhM*E~6gMb4cVQdhrYnqgLi4?!+(1a#_R* z{O$C+>oyNqg{}0rV^m9cokk-*awdF2O|*iXMK+MjNHITjKUQN5?_)ETHHe(R4%Etx zqgLVpYUxv``4>?0t|2M4Gb&!JXH*BeP;Ynz_2U{vE%h|&K^{AC8uerQfE~DmL2PW= zy!jMrzGwIxQ&@$U*-RZlt<01+{xknTo;U7x)iiUN+y_IIbGOox>qG9`VYI!QS8vu7 z?{;;Tw9wLH=+X3PNWOBlxjTCMhay(+sx{CXum*g?fr#Y`2P|JG9Ps%^tYBYHXwV<< z)39!Y`~8DG19cHA5(tHYeb?v-_5_kYJbx;q8Iv$?>@rIWupP8q8W|-X1gW?U;Rw*;$;l>^r#yF^m42%uLxalVMh(Ma)Bu`AakM QniUB#GbGHK_-f<7|7=UkBLDyZ delta 865 zcmXZaPe_zO7{~Evd)GD1f4i>cW|5+quB~`b5Ml!{5ERS~qN0I$u#Co?-5Hqu%ro=8GtWHxe(XQ(o%$K_FBmOG zze}I>nZ@zs20yf4p4mXI*>5Z+ju)5};d3m-VXVaoti~10!EYGA@5t+R;Nm}S{TPF0 zQ+B~1!UKUqvwW<;5^O*n^c1yG4{D=97r(+L;@8-MtEl%6QSTk2AOE8g*Ca<-81G{h z1~}i^+(HMIv(S$>aU5^qq;n2+vqjWFNf&Rp_!Cw#zl+&;iiXVqdWn53n1nYcdrX$2{U`Yv7QAho?;NvOXumJT@MNuVgMJ4jg#V=7G*%-FsThxvBQTzPGHN3<-n5@tE z1yzxKq|kPoo\n" "Language-Team: LANGUAGE \n" @@ -34,98 +34,102 @@ msgstr "" "обрабатывать налоги." #: evibes/settings/constance.py:28 +msgid "Shows if the taxes are already included in product's selling prices" +msgstr "Показывает, включены ли налоги в отпускную цену продукта." + +#: evibes/settings/constance.py:29 msgid "Exchange rate API key" msgstr "Ключ API обменного курса" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "!!!DO NOT CHANGE!!!" msgstr "!!!НЕ МЕНЯЙТЕ!!!" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP host" msgstr "SMTP-хост" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "SMTP port" msgstr "Порт SMTP" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use TLS" msgstr "Используйте TLS" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "Use SSL" msgstr "Используйте SSL" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP username" msgstr "Имя пользователя SMTP" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "SMTP password" msgstr "Пароль SMTP" -#: evibes/settings/constance.py:37 +#: evibes/settings/constance.py:38 msgid "Mail from option" msgstr "Адрес отправителя электронного письма" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from anonymous users" msgstr "Сколько дней мы храним сообщения от анонимных пользователей" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "How many days we store messages from authenticated users" msgstr "Сколько дней мы храним сообщения от аутентифицированных пользователей" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "Disable buy functionality" msgstr "Отключить функцию покупки" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenStreetMap Nominatim API URL" msgstr "URL-адрес API OpenStreetMap Nominatim" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "OpenAI API Key" msgstr "Ключ API OpenAI" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "Abstract API Key" msgstr "Абстрактный ключ API" -#: evibes/settings/constance.py:45 +#: evibes/settings/constance.py:46 msgid "HTTP Proxy" msgstr "HTTP-прокси" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing advertisiment data" msgstr "Устройство для хранения данных о рекламе" -#: evibes/settings/constance.py:48 +#: evibes/settings/constance.py:49 msgid "An entity for storing analytics data" msgstr "Сущность для хранения аналитических данных" -#: evibes/settings/constance.py:50 +#: evibes/settings/constance.py:51 msgid "Save responses from vendors' APIs" msgstr "Сохраняйте ответы от API поставщиков" -#: evibes/settings/constance.py:56 +#: evibes/settings/constance.py:57 msgid "Legal Options" msgstr "Юридические возможности" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "Параметры электронной почты" -#: evibes/settings/constance.py:73 +#: evibes/settings/constance.py:75 msgid "Features Options" msgstr "Особенности Опции" -#: evibes/settings/constance.py:82 +#: evibes/settings/constance.py:84 msgid "SEO Options" msgstr "Параметры SEO" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:88 msgid "Debugging Options" msgstr "Параметры отладки" @@ -229,62 +233,62 @@ msgstr "" "## Версия\n" "Текущая версия API: {EVIBES_VERSION}\n" -#: evibes/settings/unfold.py:53 +#: evibes/settings/unfold.py:57 msgid "Menu" msgstr "Меню" -#: evibes/settings/unfold.py:58 +#: evibes/settings/unfold.py:62 msgid "Dashboard" msgstr "Панель" -#: evibes/settings/unfold.py:63 +#: evibes/settings/unfold.py:67 msgid "Health" msgstr "Здоровье" -#: evibes/settings/unfold.py:68 +#: evibes/settings/unfold.py:72 msgid "Config" msgstr "Конфигурация" -#: evibes/settings/unfold.py:73 +#: evibes/settings/unfold.py:77 msgid "Periodic Tasks" msgstr "Периодические задачи" -#: evibes/settings/unfold.py:98 +#: evibes/settings/unfold.py:102 msgid "Taskboard" msgstr "Канбан" -#: evibes/settings/unfold.py:103 +#: evibes/settings/unfold.py:107 msgid "Support" msgstr "Поддержка" -#: evibes/settings/unfold.py:110 +#: evibes/settings/unfold.py:114 msgid "Quick Links" msgstr "Быстрые ссылки" -#: evibes/settings/unfold.py:115 +#: evibes/settings/unfold.py:119 msgid "Users" msgstr "Пользователи" -#: evibes/settings/unfold.py:120 +#: evibes/settings/unfold.py:124 msgid "Groups" msgstr "Группы" -#: evibes/settings/unfold.py:125 +#: evibes/settings/unfold.py:129 msgid "Orders" msgstr "Заказы" -#: evibes/settings/unfold.py:130 +#: evibes/settings/unfold.py:134 msgid "Products" msgstr "Товары" -#: evibes/settings/unfold.py:135 +#: evibes/settings/unfold.py:139 msgid "Categories" msgstr "Категории" -#: evibes/settings/unfold.py:140 +#: evibes/settings/unfold.py:144 msgid "Brands" msgstr "Бренды" -#: evibes/settings/unfold.py:145 +#: evibes/settings/unfold.py:149 msgid "Blogposts" msgstr "Посты" diff --git a/evibes/locale/sv_SE/LC_MESSAGES/django.mo b/evibes/locale/sv_SE/LC_MESSAGES/django.mo index d8a6c3dbef55254a996de280f4f9f857da122e82..a2fa557e99f7093e1513f61c47e72784f1736244 100644 GIT binary patch delta 1003 zcmXZaO=uHA6u|Lmlh%*Anp7?IdrYIX#uh;j6|}{+VlP(EDxwrzvQxWe-N^2iDu}^@ z2SKF}^dKHQL{AFZ6b~Ns5D+h3D|isRh>8cT9%>Ql|B)S-{PxZ6yqS5ErGbY-rBAKN zdy3XW-%P*VpwuD!*T@g;XF{oSE0y|%Yl)AoRw{)ywqby~@D^rq23Oz*Y{t*XboDik zf5-0^F|AZdCD$mmfe+fy!o9d2`%o4dMM-2(5_xevh5L!GV=q=w=KnyMw}?q>A&`xy zkTq2nx8Xi)W_@)sesLBz@xsOBcoSRjZtMe;lRZIM=y@E!j^lT@o$)yw#06Z22RWw9 z8^TjKf-+taSzkTnp$TVkjPk$2C63z8wp$r*-&#LG4khl#E zRUdK|bsYIb*(g_V17+T{rv9>%#|%h`YA7dpkMiM1lns1~<3A|hC8)Dh!or=XaTt%H zRB{^SitghmR#2|;Z){Vho;RH-e{ak*>?vD`j&AuE%O7S3y_+tjmA0EMRgxyVCWp$E z#}b3-9-gvvIis|$>Wf6Lb$FsU6>4`}M-xUz_7xLqJ22Yz0%JQ@wd?1-Nyj)m=*vOT znaoF>p$?7bx&8%4+`OrNNm;4k({5-7x_C*41v`pN;M+Pdj_vDOC17$vvIMqcv|G

RcV@!HEEtW~^=KIuZzh2?pD=RaRLiSYmc delta 864 zcmXZaKWI}?6vy!sUy^D}v`M4EYHLbriM8qEkij6BbPLcz^s7Z5Aa3X^USVA%s%4~ap8#BAeQks-oz|caU7rEA$*Hr+(o9_2N!>F;~k8f z)$BK&6Z{~2)GUT+JciS#jY_D6DyW4PTznhP6R%(%pQ7e}M9u495WA>@>m^%R5>I0W z!|ZQGH*gtGGBA$^@jf2L2hMd=W}B#u8ZLhB;+Hta`!_g%`)>RvR*3()_p_v}@v9hO ze_Nz;owDD;9x1jHW_+wY(m(loRQwIk;y=t_cGN72S5Ot2M^$Li#Y;%?wu(yZAu`pr zQCIg0Yr}Nj(NW2NpiUN~K3XV>S~!IlaTI6p1}5;2aKc54ySq=N;5~ z_b`Ad9<68QN4!M9{1GpcQzpvd49^sgO01@mt6XY2J!{yczw8y`IePlfD_6B_^R<_c NH4E{`p#OMm<3H\n" "Language-Team: LANGUAGE \n" @@ -34,98 +34,102 @@ msgstr "" "skatter." #: evibes/settings/constance.py:28 +msgid "Shows if the taxes are already included in product's selling prices" +msgstr "Visar om skatterna redan är inkluderade i produktens försäljningspris" + +#: evibes/settings/constance.py:29 msgid "Exchange rate API key" msgstr "API-nyckel för växelkurs" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "!!!DO NOT CHANGE!!!" msgstr "!!!ÄNDRA INTE!!!!" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP host" msgstr "SMTP-värd" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "SMTP port" msgstr "SMTP-port" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use TLS" msgstr "Använd TLS" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "Use SSL" msgstr "Använd SSL" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP username" msgstr "SMTP-användarnamn" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "SMTP password" msgstr "SMTP-lösenord" -#: evibes/settings/constance.py:37 +#: evibes/settings/constance.py:38 msgid "Mail from option" msgstr "Adressen till e-postmeddelandets avsändare" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from anonymous users" msgstr "Hur många dagar vi lagrar meddelanden från anonyma användare" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "How many days we store messages from authenticated users" msgstr "Hur många dagar vi lagrar meddelanden från autentiserade användare" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "Disable buy functionality" msgstr "Inaktivera köpfunktionalitet" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenStreetMap Nominatim API URL" msgstr "OpenStreetMap Nominatim API URL" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "OpenAI API Key" msgstr "OpenAI API-nyckel" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "Abstract API Key" msgstr "Abstrakt API-nyckel" -#: evibes/settings/constance.py:45 +#: evibes/settings/constance.py:46 msgid "HTTP Proxy" msgstr "HTTP-proxy" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing advertisiment data" msgstr "En enhet för lagring av annonseringsdata" -#: evibes/settings/constance.py:48 +#: evibes/settings/constance.py:49 msgid "An entity for storing analytics data" msgstr "En enhet för lagring av analysdata" -#: evibes/settings/constance.py:50 +#: evibes/settings/constance.py:51 msgid "Save responses from vendors' APIs" msgstr "Spara svar från leverantörers API:er" -#: evibes/settings/constance.py:56 +#: evibes/settings/constance.py:57 msgid "Legal Options" msgstr "Juridiska alternativ" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "Alternativ för e-post" -#: evibes/settings/constance.py:73 +#: evibes/settings/constance.py:75 msgid "Features Options" msgstr "Funktioner Alternativ" -#: evibes/settings/constance.py:82 +#: evibes/settings/constance.py:84 msgid "SEO Options" msgstr "SEO-alternativ" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:88 msgid "Debugging Options" msgstr "Alternativ för felsökning" @@ -229,62 +233,62 @@ msgstr "" "## Version\n" "Aktuell API-version: {EVIBES_VERSION}\n" -#: evibes/settings/unfold.py:53 +#: evibes/settings/unfold.py:57 msgid "Menu" msgstr "Meny" -#: evibes/settings/unfold.py:58 +#: evibes/settings/unfold.py:62 msgid "Dashboard" msgstr "Instrumentpanel" -#: evibes/settings/unfold.py:63 +#: evibes/settings/unfold.py:67 msgid "Health" msgstr "Hälsa" -#: evibes/settings/unfold.py:68 +#: evibes/settings/unfold.py:72 msgid "Config" msgstr "Konfig" -#: evibes/settings/unfold.py:73 +#: evibes/settings/unfold.py:77 msgid "Periodic Tasks" msgstr "Periodiska uppgifter" -#: evibes/settings/unfold.py:98 +#: evibes/settings/unfold.py:102 msgid "Taskboard" msgstr "Uppgiftstavla" -#: evibes/settings/unfold.py:103 +#: evibes/settings/unfold.py:107 msgid "Support" msgstr "Stöd" -#: evibes/settings/unfold.py:110 +#: evibes/settings/unfold.py:114 msgid "Quick Links" msgstr "Snabblänkar" -#: evibes/settings/unfold.py:115 +#: evibes/settings/unfold.py:119 msgid "Users" msgstr "Användare" -#: evibes/settings/unfold.py:120 +#: evibes/settings/unfold.py:124 msgid "Groups" msgstr "Grupper" -#: evibes/settings/unfold.py:125 +#: evibes/settings/unfold.py:129 msgid "Orders" msgstr "Beställningar" -#: evibes/settings/unfold.py:130 +#: evibes/settings/unfold.py:134 msgid "Products" msgstr "Produkter" -#: evibes/settings/unfold.py:135 +#: evibes/settings/unfold.py:139 msgid "Categories" msgstr "Kategorier" -#: evibes/settings/unfold.py:140 +#: evibes/settings/unfold.py:144 msgid "Brands" msgstr "Brands" -#: evibes/settings/unfold.py:145 +#: evibes/settings/unfold.py:149 msgid "Blogposts" msgstr "Blogginlägg" diff --git a/evibes/locale/th_TH/LC_MESSAGES/django.mo b/evibes/locale/th_TH/LC_MESSAGES/django.mo index 7399a0f22d86a1192602ea124caa04e107365f4d..8442174d26f0e5080b4372216ce9ce31062982ab 100644 GIT binary patch delta 1073 zcmXZa&r4KM6u|MLqn6o}TA5`(UTK*5BW;3Qq!G4glO!ckF^gg5r2~T#Gm5n+u@n=m z2y0;wW%k>Ia*W<%L)(zpQ z;oZPHlp)f9e>3^;{P2mKTqg1pR}mjtA(D?FEW!kC$3ZN^NzBEMn1gf3a{21Tzr67U zED-6Dtd%0`m{5d%ti?6hh??jq>P9x|Mlmn$#@)o{u^v;X>%XI}Tfi*LBhbS0k(^S7 zn=ybnh|FXF2`Bi zg!8BcWK(qomZKKff?8mtmh(SI;~X7&^fR7cP%q;@T#Y4lA{((5HEzaI4C8SeKrL(z zHDP?$;(pg~j(7t7c$I3^Td0MM2Zq08Zq29~_WMe!^%m=e*~VMVs|obs^xd1TZB4ET zDu;uH$PqNl9RcH8O0aYJG0t`43>fF3NnbL~q;c-J-^a#z zVVp7TcSemfVVt|hN$Z^SMdOUPLrm^-Ctq;COrXI`c4ONqcUqrG59+Aqy6?8xaNJ$) Sf2p(6Y%$8dsiC^V8UF#7@7x{$ delta 865 zcmXZaPe_zO7{~G7+pC*eo4)I+Wm(E5skQ#?;AQJzf_Shzh(-kwlpZon@X)2bGZ(2M_ z-V401JSl~{C-~vn^rd@6(iWByr_M+v*o)=(2m-%pcnK32 zA-_7@KsTOe;4T*67@oqH&ev!sdxMr}#>MYk{26QL|A{B@uN&XPKH>w{e}`k+_yFdU zUk_v^Va~+|m>@20;WJ?yTA~TG`R{QHS22o< zt;a5*ZD0jGq{!i?lrlwr%u}YyPb8^gcwuUh3WbRvJb~SGdu&sdupu+-cLbCpyz>Ft UQ\n" "Language-Team: LANGUAGE \n" @@ -34,98 +34,102 @@ msgstr "" "หากคุณไม่ต้องการดำเนินการภาษี." #: evibes/settings/constance.py:28 +msgid "Shows if the taxes are already included in product's selling prices" +msgstr "แสดงว่าภาษีรวมอยู่ในราคาขายของสินค้าแล้วหรือไม่" + +#: evibes/settings/constance.py:29 msgid "Exchange rate API key" msgstr "คีย์ API อัตราแลกเปลี่ยน" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "!!!DO NOT CHANGE!!!" msgstr "!!!ห้ามเปลี่ยนแปลง!!!" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP host" msgstr "โฮสต์ SMTP" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "SMTP port" msgstr "พอร์ต SMTP" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use TLS" msgstr "ใช้ TLS" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "Use SSL" msgstr "ใช้ SSL" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP username" msgstr "ชื่อผู้ใช้ SMTP" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "SMTP password" msgstr "รหัสผ่าน SMTP" -#: evibes/settings/constance.py:37 +#: evibes/settings/constance.py:38 msgid "Mail from option" msgstr "ที่อยู่ของผู้ส่งอีเมล" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from anonymous users" msgstr "เราเก็บข้อความจากผู้ใช้ที่ไม่ระบุตัวตนไว้กี่วัน" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "How many days we store messages from authenticated users" msgstr "เราเก็บข้อความจากผู้ใช้ที่ผ่านการยืนยันตัวตนไว้กี่วัน" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "Disable buy functionality" msgstr "ปิดการใช้งานฟังก์ชันการซื้อ" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenStreetMap Nominatim API URL" msgstr "URL ของ API OpenStreetMap Nominatim" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "OpenAI API Key" msgstr "คีย์ API ของ OpenAI" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "Abstract API Key" msgstr "คีย์ API แบบนามธรรม" -#: evibes/settings/constance.py:45 +#: evibes/settings/constance.py:46 msgid "HTTP Proxy" msgstr "HTTP พร็อกซี" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing advertisiment data" msgstr "หน่วยงานสำหรับเก็บข้อมูลโฆษณา" -#: evibes/settings/constance.py:48 +#: evibes/settings/constance.py:49 msgid "An entity for storing analytics data" msgstr "หน่วยงานสำหรับเก็บข้อมูลการวิเคราะห์" -#: evibes/settings/constance.py:50 +#: evibes/settings/constance.py:51 msgid "Save responses from vendors' APIs" msgstr "บันทึกการตอบกลับจาก API ของผู้ขาย" -#: evibes/settings/constance.py:56 +#: evibes/settings/constance.py:57 msgid "Legal Options" msgstr "ทางเลือกทางกฎหมาย" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "ตัวเลือกอีเมล" -#: evibes/settings/constance.py:73 +#: evibes/settings/constance.py:75 msgid "Features Options" msgstr "คุณสมบัติ ตัวเลือก" -#: evibes/settings/constance.py:82 +#: evibes/settings/constance.py:84 msgid "SEO Options" msgstr "ตัวเลือก SEO" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:88 msgid "Debugging Options" msgstr "ตัวเลือกการแก้ไขข้อผิดพลาด" @@ -194,62 +198,62 @@ msgstr "" "- ภาษาที่มีให้บริการสามารถดึงข้อมูลได้จากจุดสิ้นสุด `/app/languages/` - เนื้อหาที่แสดงต่อผู้ใช้ทั้งหมดรองรับหลายภาษาโดยอัตโนมัติ ## รูปแบบการตอบกลับ API รองรับรูปแบบการตอบกลับหลายรูปแบบ: - **JSON** (ค่าเริ่มต้น, รูปแบบ camelCase) - **XML** (เพิ่ม `?format=xml` หรือตั้งค่า `Accept: application/xml`)\n" "- **YAML** (เพิ่ม `?format=yaml` หรือตั้งค่า `Accept: application/x-yaml`) ## สุขภาพและการตรวจสอบ - การตรวจสอบสุขภาพ: `/health/` - เมตริก Prometheus (ป้องกันด้วย basic-auth): `/prometheus/` ## เวอร์ชัน เวอร์ชัน API ปัจจุบัน: {EVIBES_VERSION}\n" -#: evibes/settings/unfold.py:53 +#: evibes/settings/unfold.py:57 msgid "Menu" msgstr "เมนู" -#: evibes/settings/unfold.py:58 +#: evibes/settings/unfold.py:62 msgid "Dashboard" msgstr "แดชบอร์ด" -#: evibes/settings/unfold.py:63 +#: evibes/settings/unfold.py:67 msgid "Health" msgstr "สุขภาพ" -#: evibes/settings/unfold.py:68 +#: evibes/settings/unfold.py:72 msgid "Config" msgstr "การกำหนดค่า" -#: evibes/settings/unfold.py:73 +#: evibes/settings/unfold.py:77 msgid "Periodic Tasks" msgstr "งานประจำ" -#: evibes/settings/unfold.py:98 +#: evibes/settings/unfold.py:102 msgid "Taskboard" msgstr "กระดานงาน" -#: evibes/settings/unfold.py:103 +#: evibes/settings/unfold.py:107 msgid "Support" msgstr "การสนับสนุน" -#: evibes/settings/unfold.py:110 +#: evibes/settings/unfold.py:114 msgid "Quick Links" msgstr "ลิงก์ด่วน" -#: evibes/settings/unfold.py:115 +#: evibes/settings/unfold.py:119 msgid "Users" msgstr "ผู้ใช้" -#: evibes/settings/unfold.py:120 +#: evibes/settings/unfold.py:124 msgid "Groups" msgstr "กลุ่ม" -#: evibes/settings/unfold.py:125 +#: evibes/settings/unfold.py:129 msgid "Orders" msgstr "คำสั่ง" -#: evibes/settings/unfold.py:130 +#: evibes/settings/unfold.py:134 msgid "Products" msgstr "ผลิตภัณฑ์" -#: evibes/settings/unfold.py:135 +#: evibes/settings/unfold.py:139 msgid "Categories" msgstr "หมวดหมู่" -#: evibes/settings/unfold.py:140 +#: evibes/settings/unfold.py:144 msgid "Brands" msgstr "แบรนด์" -#: evibes/settings/unfold.py:145 +#: evibes/settings/unfold.py:149 msgid "Blogposts" msgstr "บทความบล็อก" diff --git a/evibes/locale/tr_TR/LC_MESSAGES/django.mo b/evibes/locale/tr_TR/LC_MESSAGES/django.mo index db70dae6d8cc159df78e20882bdc52cc01403be2..738d9f66ee17143e51e5e22ce0cc375afb77237d 100644 GIT binary patch delta 1006 zcmXZaO=uHA6u|Lm6YEEbO|-2QMW;#qwnZ>X4^@%2UV>KY2Usb%X1B?}nv~s?S`X$R z9tt92@Sg^P4w2JM-S`zUlvQr1)`7 z_?Dt|ac$(fR;Sbf{9Df-?Po}-v#XT)g=>kAu2w3F7Pg{?+i?;*a0XZ6J8Zzu$m8m3 z5dR78FJeroq6#-DwVnyB7{NW*f(KDHI*GE7gR+nt#N(JGzKq>iMtS}l%5#et#zq23 zJc{h8I&d@Y#Rm3QCxRP8xPco6SKw7_#Or~#Q7U_YveDxpei6j4u$}Qa?8OCKjy;qq z&-LLcJccrUUu1vvh|V&6g2NpDbNs~4ZKN$nys)WOK@(}Srb=KZCIinS#i|=9iQhv> z{2@xkPmv{66{WyAl;?kAv6+t6wO6nY*AWk(WSBuY@;u7Im+%l?!Q)s#S-6?9$x&@Z zDWo4|;}pvJLm0SX}&&Qx4RSxB|7CRmJenNmmCjsmfBAKW&=F=Er?)Msy+T=z?|8@wMeS+HyU|vM033rQI>x zvFYehFK>^f3)_6{JFaVT8AeRnDSwF$#8RgnFJoNCV_s#}tIX#3Y2PYTr(aI#5i=pZ ioTY6mYh3Nv#xc;94w-dvm^dFXJB~N;BrahZS8*I);ZgjALHvR&x34b#;pX=+ zYF4#<9!B{?@R(T`6LHUiHY%ewT5$0)UM7BsS$vIJ{|&Wn5B=Cj9bAK?vJpIw zDGZX|3T~o^aV9Ew1RvuNK6O4r-RuP_(MuPISxJ$+lu|a8@=LRQ#kF2#e>NRzo5w5}IEQdPqJnFz@)J^XpTiPSk#nw>k z*Kq_tV^yW^@^A|KsFMvR2BnUpHlD<5cnM3mg4%c!Ig4#$0RNy8AD|KhDMu3HsDoWa zy^130KzGKdze@Uq0lo7Y>ZT1BZ=g!Og{QIY#(Q{$_#f)qm?ew;m%|DcUEFlOMICGt zeW=SSuUS3h#e7yj>!mW&g!*76=ojfJy4n<7U%HxZMNYd=f8Z6ODyF`9)j}=Z+VZmD NRz5l(t?wio{{b6BQ`P_g diff --git a/evibes/locale/tr_TR/LC_MESSAGES/django.po b/evibes/locale/tr_TR/LC_MESSAGES/django.po index 19b70307..b4c078de 100644 --- a/evibes/locale/tr_TR/LC_MESSAGES/django.po +++ b/evibes/locale/tr_TR/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-16 15:38+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -34,99 +34,103 @@ msgstr "" "bırakın." #: evibes/settings/constance.py:28 +msgid "Shows if the taxes are already included in product's selling prices" +msgstr "Vergilerin ürünün satış fiyatına dahil edilip edilmediğini gösterir" + +#: evibes/settings/constance.py:29 msgid "Exchange rate API key" msgstr "Döviz kuru API anahtarı" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "!!!DO NOT CHANGE!!!" msgstr "!!! DEĞIŞTIRMEYIN!!!" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP host" msgstr "SMTP ana bilgisayarı" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "SMTP port" msgstr "SMTP bağlantı noktası" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use TLS" msgstr "TLS kullanın" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "Use SSL" msgstr "SSL kullanın" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP username" msgstr "SMTP kullanıcı adı" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "SMTP password" msgstr "SMTP şifresi" -#: evibes/settings/constance.py:37 +#: evibes/settings/constance.py:38 msgid "Mail from option" msgstr "E-posta göndericisinin adresi" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from anonymous users" msgstr "Anonim kullanıcılardan gelen mesajları kaç gün saklıyoruz" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "How many days we store messages from authenticated users" msgstr "" "Kimliği doğrulanmış kullanıcılardan gelen mesajları kaç gün saklıyoruz" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "Disable buy functionality" msgstr "Satın alma işlevini devre dışı bırakın" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenStreetMap Nominatim API URL" msgstr "OpenStreetMap Nominatim API URL'si" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "OpenAI API Key" msgstr "OpenAI API Anahtarı" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "Abstract API Key" msgstr "Soyut API Anahtarı" -#: evibes/settings/constance.py:45 +#: evibes/settings/constance.py:46 msgid "HTTP Proxy" msgstr "HTTP Proxy" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing advertisiment data" msgstr "Reklam verilerini depolamak için bir varlık" -#: evibes/settings/constance.py:48 +#: evibes/settings/constance.py:49 msgid "An entity for storing analytics data" msgstr "Analitik verileri depolamak için bir varlık" -#: evibes/settings/constance.py:50 +#: evibes/settings/constance.py:51 msgid "Save responses from vendors' APIs" msgstr "Satıcıların API'lerinden gelen yanıtları kaydedin" -#: evibes/settings/constance.py:56 +#: evibes/settings/constance.py:57 msgid "Legal Options" msgstr "Yasal Seçenekler" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "E-posta Seçenekleri" -#: evibes/settings/constance.py:73 +#: evibes/settings/constance.py:75 msgid "Features Options" msgstr "Özellikler Seçenekler" -#: evibes/settings/constance.py:82 +#: evibes/settings/constance.py:84 msgid "SEO Options" msgstr "SEO Seçenekleri" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:88 msgid "Debugging Options" msgstr "Hata Ayıklama Seçenekleri" @@ -230,62 +234,62 @@ msgstr "" "## Sürüm\n" "Geçerli API sürümü: {EVIBES_VERSION}\n" -#: evibes/settings/unfold.py:53 +#: evibes/settings/unfold.py:57 msgid "Menu" msgstr "Menü" -#: evibes/settings/unfold.py:58 +#: evibes/settings/unfold.py:62 msgid "Dashboard" msgstr "Gösterge Tablosu" -#: evibes/settings/unfold.py:63 +#: evibes/settings/unfold.py:67 msgid "Health" msgstr "Sağlık" -#: evibes/settings/unfold.py:68 +#: evibes/settings/unfold.py:72 msgid "Config" msgstr "Konfigürasyon" -#: evibes/settings/unfold.py:73 +#: evibes/settings/unfold.py:77 msgid "Periodic Tasks" msgstr "Periyodik Görevler" -#: evibes/settings/unfold.py:98 +#: evibes/settings/unfold.py:102 msgid "Taskboard" msgstr "Görev Panosu" -#: evibes/settings/unfold.py:103 +#: evibes/settings/unfold.py:107 msgid "Support" msgstr "Destek" -#: evibes/settings/unfold.py:110 +#: evibes/settings/unfold.py:114 msgid "Quick Links" msgstr "Hızlı Bağlantılar" -#: evibes/settings/unfold.py:115 +#: evibes/settings/unfold.py:119 msgid "Users" msgstr "Kullanıcılar" -#: evibes/settings/unfold.py:120 +#: evibes/settings/unfold.py:124 msgid "Groups" msgstr "Gruplar" -#: evibes/settings/unfold.py:125 +#: evibes/settings/unfold.py:129 msgid "Orders" msgstr "Siparişler" -#: evibes/settings/unfold.py:130 +#: evibes/settings/unfold.py:134 msgid "Products" msgstr "Ürünler" -#: evibes/settings/unfold.py:135 +#: evibes/settings/unfold.py:139 msgid "Categories" msgstr "Kategoriler" -#: evibes/settings/unfold.py:140 +#: evibes/settings/unfold.py:144 msgid "Brands" msgstr "Markalar" -#: evibes/settings/unfold.py:145 +#: evibes/settings/unfold.py:149 msgid "Blogposts" msgstr "Blog Yazıları" diff --git a/evibes/locale/vi_VN/LC_MESSAGES/django.mo b/evibes/locale/vi_VN/LC_MESSAGES/django.mo index 9636c3caacb3745df3766d7564486c48aa89ef85..a48eb0ba67ad552516d2c35cacbf6ac21d3502e9 100644 GIT binary patch delta 1018 zcmXZaOGs2v7{KvQXEMvIF&i<8I{C;fouUT_J-`eiA~zLEWp$moITyy6m`CcSA)-YO zgc#b?CNYX2!v?XKiR{O}Pfqv@sJT&gNIQQJc9>u*t3ZGDgGgcmLOTE&8P?1 zgF4@dy1o}TV;Zx>l6y1^PN2T<7B!(+)GMFE75E2xu(CnqES^Vwe;QlxBkFs;#>E>7 zAeSH;a3^j@O{gDrUA&R|r!6yqeuH|FFW&f1)D8UnX?imO+>5Q)i#BS) zQ>fqkHD19_sQa92UNnLFFJzl@v*itCZMkY+W4r#vejeteorhQpWh=E_pB7DuOOS23 zK3`W&h!#69qzuxUf9C6`?u;geQpUMp(ox%_tzkQ5tfXzMSkks4BgTn`W0{B@pva#j9~Paf>(2usujC;})jP%iE=Ks+mc*I370X y(nLIJE|u;l%z#rGGySEpxCy((N0v#sg>gbe-NNHR6SYQ6I65r$WcmDyGHknia delta 864 zcmXZaO-NKx7{>8;yyG~2j5XtDHsR!qso98#gb=e)ALloSIK_DgK&?clH$W?9pKYA{6?(e+k^F8OzTu<&v<}~7eXFN$t zl=9YRmcn0oym-z$v%w;>9F`HMO3iNKGpxi{*oYIDz(p*?eGK3cGTn|{{KNI1W7sTX z7gTOBAaKJhgfXnZ7Su-FsD=7a3k|tAjqSu^*nvx^`6sA(=jg}(sKnLCR#uL+7{>tn zTbJv2inr+)z#xueF-|#WQ74;6ZM5LxRTppJUE24s0DrpvKiEh7&$ah*Z1q3KeD=2y zD#Kj+Yph`9-H2H=?cYeV9RH#c3&zYkG2u+3KEVodNZWB9p%Txb`hTP5`^oMe#*nS- zF=ptq0V*0WiTOB>y6X2>g3H*CoA?q->aNF+VgvCEYTO#?X10;T+5xuVcT_^9@#}dt z$j=_exqnT3L8Oe*s1r}1PBiD*KcE&^N8QXeKEki4M8o{^^o^r9jjgEpADy33-~J2w zu!^EjX_hVWB0kIB@#4v5LO-RR@_@qHS5FgfU85c)$0gYP>>IBuoTSEzSE++FZtQp+ Op^a3ysVw^`ad-*u(^E(Q diff --git a/evibes/locale/vi_VN/LC_MESSAGES/django.po b/evibes/locale/vi_VN/LC_MESSAGES/django.po index 4dbc8c8e..ab145809 100644 --- a/evibes/locale/vi_VN/LC_MESSAGES/django.po +++ b/evibes/locale/vi_VN/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-16 15:38+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -34,100 +34,104 @@ msgstr "" " muốn xử lý thuế." #: evibes/settings/constance.py:28 +msgid "Shows if the taxes are already included in product's selling prices" +msgstr "Hiển thị xem thuế đã được tính vào giá bán của sản phẩm hay chưa." + +#: evibes/settings/constance.py:29 msgid "Exchange rate API key" msgstr "Khóa API tỷ giá hối đoái" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "!!!DO NOT CHANGE!!!" msgstr "!!!KHÔNG THAY ĐỔI!!!" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP host" msgstr "Máy chủ SMTP" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "SMTP port" msgstr "Cổng SMTP" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use TLS" msgstr "Sử dụng TLS" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "Use SSL" msgstr "Sử dụng SSL" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP username" msgstr "Tên người dùng SMTP" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "SMTP password" msgstr "Mật khẩu SMTP" -#: evibes/settings/constance.py:37 +#: evibes/settings/constance.py:38 msgid "Mail from option" msgstr "Địa chỉ email của người gửi" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from anonymous users" msgstr "" "Chúng tôi lưu trữ tin nhắn từ người dùng ẩn danh trong bao nhiêu ngày?" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "How many days we store messages from authenticated users" msgstr "" "Chúng tôi lưu trữ tin nhắn từ người dùng đã xác thực trong bao nhiêu ngày?" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "Disable buy functionality" msgstr "Vô hiệu hóa chức năng mua hàng" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenStreetMap Nominatim API URL" msgstr "Địa chỉ URL API Nominatim của OpenStreetMap" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "OpenAI API Key" msgstr "Khóa API OpenAI" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "Abstract API Key" msgstr "Tóm tắt Khóa API" -#: evibes/settings/constance.py:45 +#: evibes/settings/constance.py:46 msgid "HTTP Proxy" msgstr "Proxy HTTP" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing advertisiment data" msgstr "Một thực thể dùng để lưu trữ dữ liệu quảng cáo" -#: evibes/settings/constance.py:48 +#: evibes/settings/constance.py:49 msgid "An entity for storing analytics data" msgstr "Một thực thể dùng để lưu trữ dữ liệu phân tích." -#: evibes/settings/constance.py:50 +#: evibes/settings/constance.py:51 msgid "Save responses from vendors' APIs" msgstr "Lưu trữ phản hồi từ các API của nhà cung cấp" -#: evibes/settings/constance.py:56 +#: evibes/settings/constance.py:57 msgid "Legal Options" msgstr "Các lựa chọn pháp lý" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "Tùy chọn email" -#: evibes/settings/constance.py:73 +#: evibes/settings/constance.py:75 msgid "Features Options" msgstr "Tính năng và tùy chọn" -#: evibes/settings/constance.py:82 +#: evibes/settings/constance.py:84 msgid "SEO Options" msgstr "Các tùy chọn SEO" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:88 msgid "Debugging Options" msgstr "Các tùy chọn gỡ lỗi" @@ -196,62 +200,62 @@ msgstr "" "- Các ngôn ngữ có sẵn có thể được lấy từ điểm cuối `/app/languages/`. - Tất cả nội dung hiển thị cho người dùng đều hỗ trợ nhiều ngôn ngữ ngay từ đầu. ## Định dạng phản hồi API hỗ trợ nhiều định dạng phản hồi: - **JSON** (mặc định, định dạng camelCase) - **XML** (thêm `?format=xml` hoặc đặt `Accept: application/xml`)\n" "- **YAML** (thêm `?format=yaml` hoặc đặt `Accept: application/x-yaml`) ## Sức khỏe & Giám sát - Kiểm tra sức khỏe: `/health/` - Chỉ số Prometheus (bảo vệ bằng basic-auth): `/prometheus/` ## Phiên bản Phiên bản API hiện tại: {EVIBES_VERSION}\n" -#: evibes/settings/unfold.py:53 +#: evibes/settings/unfold.py:57 msgid "Menu" msgstr "Thực đơn" -#: evibes/settings/unfold.py:58 +#: evibes/settings/unfold.py:62 msgid "Dashboard" msgstr "Bảng điều khiển" -#: evibes/settings/unfold.py:63 +#: evibes/settings/unfold.py:67 msgid "Health" msgstr "Sức khỏe" -#: evibes/settings/unfold.py:68 +#: evibes/settings/unfold.py:72 msgid "Config" msgstr "Cấu hình" -#: evibes/settings/unfold.py:73 +#: evibes/settings/unfold.py:77 msgid "Periodic Tasks" msgstr "Các tác vụ định kỳ" -#: evibes/settings/unfold.py:98 +#: evibes/settings/unfold.py:102 msgid "Taskboard" msgstr "Bảng nhiệm vụ" -#: evibes/settings/unfold.py:103 +#: evibes/settings/unfold.py:107 msgid "Support" msgstr "Hỗ trợ" -#: evibes/settings/unfold.py:110 +#: evibes/settings/unfold.py:114 msgid "Quick Links" msgstr "Liên kết nhanh" -#: evibes/settings/unfold.py:115 +#: evibes/settings/unfold.py:119 msgid "Users" msgstr "Người dùng" -#: evibes/settings/unfold.py:120 +#: evibes/settings/unfold.py:124 msgid "Groups" msgstr "Nhóm" -#: evibes/settings/unfold.py:125 +#: evibes/settings/unfold.py:129 msgid "Orders" msgstr "Đơn hàng" -#: evibes/settings/unfold.py:130 +#: evibes/settings/unfold.py:134 msgid "Products" msgstr "Sản phẩm" -#: evibes/settings/unfold.py:135 +#: evibes/settings/unfold.py:139 msgid "Categories" msgstr "Các danh mục" -#: evibes/settings/unfold.py:140 +#: evibes/settings/unfold.py:144 msgid "Brands" msgstr "Thương hiệu" -#: evibes/settings/unfold.py:145 +#: evibes/settings/unfold.py:149 msgid "Blogposts" msgstr "Bài viết trên blog" diff --git a/evibes/locale/zh_Hans/LC_MESSAGES/django.mo b/evibes/locale/zh_Hans/LC_MESSAGES/django.mo index 41a136ab52f10dfebd4937d24b4a4279f746f2a7..eb76949e6d75866edb3ad7c529f18bb67612d4b6 100644 GIT binary patch delta 975 zcmXZaUr19?9Ki9ToA$?6bEWimyQ%$mA}FzknuI;|@5Op4GA`RKFAc5z!Ro;gu?In9 zv?7TfmkBK^CzuPQ#~^y?!JtSO?5ao)MIa#seSdTgoclSybMEkZBb$EGw;{pbWi`ao>lmQ!9om^QHO1}_FeHY5OXHbs3SGN!8 z_KctNmj&F{4NrAL0k=~>i*f~@vJHd>v0=3gzv*(|$nt zZ$6M)scx!j&3RnSL3zdUVD^z^ux7HP!(@5slH@exj*sLnySnS!D9M|bJxV%MeC-N( zPV@~7CJg(kk?gaKqF)cj=glUKGm>$#&z&a|mC`dOch`9^S$R8CdGjJy H_TTvjua%6> delta 864 zcmXZaPb^$f6vy$yW3cka1=-o5W0^zWq>e#eSdjM7Q1r+zFj zOX5W#56WR+_9krh2P=t_ciE@QdWhHn7|P0TiO#t zSV!U&KEU@_iu3LgYG?ag6xZ+lSe<@);~H|NyIdA`lI-wu#w!4e^;6v2-JTkT2xZybG&zctJMIE|P z6TQSLOnaO`-H!=;fy=1=o2Xy)6E*I{+s{$+{zV;im|ZB}jvCj4`jAuu=dZ+wCo)(= zJdO89?=HEksDGHl=lB&h{s^_xGaSMz)Llujx*SCH8$}M0}_EE^7D1(uBmiOy$) wx-c!&4r+p`(ni%ySJA2HAGc@U1?i~HM0Z|$RcT${4EiGL$>?n)JKgx<4s?-HKmY&$ diff --git a/evibes/locale/zh_Hans/LC_MESSAGES/django.po b/evibes/locale/zh_Hans/LC_MESSAGES/django.po index 26a4b480..6e6acf8d 100644 --- a/evibes/locale/zh_Hans/LC_MESSAGES/django.po +++ b/evibes/locale/zh_Hans/LC_MESSAGES/django.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: EVIBES 2025.4\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-11-16 15:38+0300\n" +"POT-Creation-Date: 2025-11-17 16:16+0300\n" "PO-Revision-Date: 2025-06-16 08:59+0100\n" "Last-Translator: EGOR GORBUNOV \n" "Language-Team: LANGUAGE \n" @@ -32,98 +32,102 @@ msgid "" msgstr "贵公司所在地区的税率。如果不想处理税款,请留下 0。" #: evibes/settings/constance.py:28 +msgid "Shows if the taxes are already included in product's selling prices" +msgstr "显示税费是否已包含在产品售价中" + +#: evibes/settings/constance.py:29 msgid "Exchange rate API key" msgstr "汇率 API 密钥" -#: evibes/settings/constance.py:30 +#: evibes/settings/constance.py:31 msgid "!!!DO NOT CHANGE!!!" msgstr "不要换" -#: evibes/settings/constance.py:31 +#: evibes/settings/constance.py:32 msgid "SMTP host" msgstr "SMTP 主机" -#: evibes/settings/constance.py:32 +#: evibes/settings/constance.py:33 msgid "SMTP port" msgstr "SMTP 端口" -#: evibes/settings/constance.py:33 +#: evibes/settings/constance.py:34 msgid "Use TLS" msgstr "使用 TLS" -#: evibes/settings/constance.py:34 +#: evibes/settings/constance.py:35 msgid "Use SSL" msgstr "使用 SSL" -#: evibes/settings/constance.py:35 +#: evibes/settings/constance.py:36 msgid "SMTP username" msgstr "SMTP 用户名" -#: evibes/settings/constance.py:36 +#: evibes/settings/constance.py:37 msgid "SMTP password" msgstr "SMTP 密码" -#: evibes/settings/constance.py:37 +#: evibes/settings/constance.py:38 msgid "Mail from option" msgstr "邮件发件人地址" -#: evibes/settings/constance.py:39 +#: evibes/settings/constance.py:40 msgid "How many days we store messages from anonymous users" msgstr "我们将匿名用户的信息保存多少天" -#: evibes/settings/constance.py:40 +#: evibes/settings/constance.py:41 msgid "How many days we store messages from authenticated users" msgstr "我们会将已验证用户的信息保存多少天" -#: evibes/settings/constance.py:41 +#: evibes/settings/constance.py:42 msgid "Disable buy functionality" msgstr "禁用购买功能" -#: evibes/settings/constance.py:42 +#: evibes/settings/constance.py:43 msgid "OpenStreetMap Nominatim API URL" msgstr "OpenStreetMap Nominatim API URL" -#: evibes/settings/constance.py:43 +#: evibes/settings/constance.py:44 msgid "OpenAI API Key" msgstr "OpenAI API 密钥" -#: evibes/settings/constance.py:44 +#: evibes/settings/constance.py:45 msgid "Abstract API Key" msgstr "抽象应用程序接口密钥" -#: evibes/settings/constance.py:45 +#: evibes/settings/constance.py:46 msgid "HTTP Proxy" msgstr "HTTP 代理服务器" -#: evibes/settings/constance.py:47 +#: evibes/settings/constance.py:48 msgid "An entity for storing advertisiment data" msgstr "存储广告数据的实体" -#: evibes/settings/constance.py:48 +#: evibes/settings/constance.py:49 msgid "An entity for storing analytics data" msgstr "存储分析数据的实体" -#: evibes/settings/constance.py:50 +#: evibes/settings/constance.py:51 msgid "Save responses from vendors' APIs" msgstr "保存来自供应商应用程序接口的响应" -#: evibes/settings/constance.py:56 +#: evibes/settings/constance.py:57 msgid "Legal Options" msgstr "法律选择" -#: evibes/settings/constance.py:63 +#: evibes/settings/constance.py:65 msgid "Email Options" msgstr "电子邮件选项" -#: evibes/settings/constance.py:73 +#: evibes/settings/constance.py:75 msgid "Features Options" msgstr "功能选项" -#: evibes/settings/constance.py:82 +#: evibes/settings/constance.py:84 msgid "SEO Options" msgstr "搜索引擎优化选项" -#: evibes/settings/constance.py:86 +#: evibes/settings/constance.py:88 msgid "Debugging Options" msgstr "调试选项" @@ -227,62 +231,62 @@ msgstr "" "## 版本\n" "当前 API 版本:{EVIBES_VERSION}\n" -#: evibes/settings/unfold.py:53 +#: evibes/settings/unfold.py:57 msgid "Menu" msgstr "菜单" -#: evibes/settings/unfold.py:58 +#: evibes/settings/unfold.py:62 msgid "Dashboard" msgstr "仪表板" -#: evibes/settings/unfold.py:63 +#: evibes/settings/unfold.py:67 msgid "Health" msgstr "健康" -#: evibes/settings/unfold.py:68 +#: evibes/settings/unfold.py:72 msgid "Config" msgstr "配置" -#: evibes/settings/unfold.py:73 +#: evibes/settings/unfold.py:77 msgid "Periodic Tasks" msgstr "定期任务" -#: evibes/settings/unfold.py:98 +#: evibes/settings/unfold.py:102 msgid "Taskboard" msgstr "任务板" -#: evibes/settings/unfold.py:103 +#: evibes/settings/unfold.py:107 msgid "Support" msgstr "支持" -#: evibes/settings/unfold.py:110 +#: evibes/settings/unfold.py:114 msgid "Quick Links" msgstr "快速链接" -#: evibes/settings/unfold.py:115 +#: evibes/settings/unfold.py:119 msgid "Users" msgstr "用户" -#: evibes/settings/unfold.py:120 +#: evibes/settings/unfold.py:124 msgid "Groups" msgstr "组别" -#: evibes/settings/unfold.py:125 +#: evibes/settings/unfold.py:129 msgid "Orders" msgstr "订单" -#: evibes/settings/unfold.py:130 +#: evibes/settings/unfold.py:134 msgid "Products" msgstr "产品" -#: evibes/settings/unfold.py:135 +#: evibes/settings/unfold.py:139 msgid "Categories" msgstr "类别" -#: evibes/settings/unfold.py:140 +#: evibes/settings/unfold.py:144 msgid "Brands" msgstr "品牌" -#: evibes/settings/unfold.py:145 +#: evibes/settings/unfold.py:149 msgid "Blogposts" msgstr "博客文章" From 8caeff538a2349d0de42f85fae2625a18e0d5e8d Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Mon, 17 Nov 2025 16:23:05 +0300 Subject: [PATCH 2/3] Extra: 1) Remove chart.js --- engine/core/static/js/chart.js | 14 -------------- engine/core/templates/admin/index.html | 4 ++-- 2 files changed, 2 insertions(+), 16 deletions(-) delete mode 100644 engine/core/static/js/chart.js diff --git a/engine/core/static/js/chart.js b/engine/core/static/js/chart.js deleted file mode 100644 index a6caf62a..00000000 --- a/engine/core/static/js/chart.js +++ /dev/null @@ -1,14 +0,0 @@ -/*! - * Chart.js v4.5.1 - * https://www.chartjs.org - * (c) 2025 Chart.js Contributors - * Released under the MIT License - */ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).Chart=e()}(this,(function(){"use strict";var t=Object.freeze({__proto__:null,get Colors(){return Jo},get Decimation(){return ta},get Filler(){return ba},get Legend(){return Ma},get SubTitle(){return Pa},get Title(){return ka},get Tooltip(){return Na}});function e(){}const i=(()=>{let t=0;return()=>t++})();function s(t){return null==t}function n(t){if(Array.isArray&&Array.isArray(t))return!0;const e=Object.prototype.toString.call(t);return"[object"===e.slice(0,7)&&"Array]"===e.slice(-6)}function o(t){return null!==t&&"[object Object]"===Object.prototype.toString.call(t)}function a(t){return("number"==typeof t||t instanceof Number)&&isFinite(+t)}function r(t,e){return a(t)?t:e}function l(t,e){return void 0===t?e:t}const h=(t,e)=>"string"==typeof t&&t.endsWith("%")?parseFloat(t)/100:+t/e,c=(t,e)=>"string"==typeof t&&t.endsWith("%")?parseFloat(t)/100*e:+t;function d(t,e,i){if(t&&"function"==typeof t.call)return t.apply(i,e)}function u(t,e,i,s){let a,r,l;if(n(t))if(r=t.length,s)for(a=r-1;a>=0;a--)e.call(i,t[a],a);else for(a=0;at,x:t=>t.x,y:t=>t.y};function v(t){const e=t.split("."),i=[];let s="";for(const t of e)s+=t,s.endsWith("\\")?s=s.slice(0,-1)+".":(i.push(s),s="");return i}function M(t,e){const i=y[e]||(y[e]=function(t){const e=v(t);return t=>{for(const i of e){if(""===i)break;t=t&&t[i]}return t}}(e));return i(t)}function w(t){return t.charAt(0).toUpperCase()+t.slice(1)}const k=t=>void 0!==t,S=t=>"function"==typeof t,P=(t,e)=>{if(t.size!==e.size)return!1;for(const i of t)if(!e.has(i))return!1;return!0};function D(t){return"mouseup"===t.type||"click"===t.type||"contextmenu"===t.type}const C=Math.PI,O=2*C,A=O+C,T=Number.POSITIVE_INFINITY,L=C/180,E=C/2,R=C/4,I=2*C/3,z=Math.log10,F=Math.sign;function V(t,e,i){return Math.abs(t-e)t-e)).pop(),e}function N(t){return!function(t){return"symbol"==typeof t||"object"==typeof t&&null!==t&&!(Symbol.toPrimitive in t||"toString"in t||"valueOf"in t)}(t)&&!isNaN(parseFloat(t))&&isFinite(t)}function H(t,e){const i=Math.round(t);return i-e<=t&&i+e>=t}function j(t,e,i){let s,n,o;for(s=0,n=t.length;sl&&h=Math.min(e,i)-s&&t<=Math.max(e,i)+s}function et(t,e,i){i=i||(i=>t[i]1;)s=o+n>>1,i(s)?o=s:n=s;return{lo:o,hi:n}}const it=(t,e,i,s)=>et(t,i,s?s=>{const n=t[s][e];return nt[s][e]et(t,i,(s=>t[s][e]>=i));function nt(t,e,i){let s=0,n=t.length;for(;ss&&t[n-1]>i;)n--;return s>0||n{const i="_onData"+w(e),s=t[e];Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value(...e){const n=s.apply(this,e);return t._chartjs.listeners.forEach((t=>{"function"==typeof t[i]&&t[i](...e)})),n}})})))}function rt(t,e){const i=t._chartjs;if(!i)return;const s=i.listeners,n=s.indexOf(e);-1!==n&&s.splice(n,1),s.length>0||(ot.forEach((e=>{delete t[e]})),delete t._chartjs)}function lt(t){const e=new Set(t);return e.size===t.length?t:Array.from(e)}const ht="undefined"==typeof window?function(t){return t()}:window.requestAnimationFrame;function ct(t,e){let i=[],s=!1;return function(...n){i=n,s||(s=!0,ht.call(window,(()=>{s=!1,t.apply(e,i)})))}}function dt(t,e){let i;return function(...s){return e?(clearTimeout(i),i=setTimeout(t,e,s)):t.apply(this,s),e}}const ut=t=>"start"===t?"left":"end"===t?"right":"center",ft=(t,e,i)=>"start"===t?e:"end"===t?i:(e+i)/2,gt=(t,e,i,s)=>t===(s?"left":"right")?i:"center"===t?(e+i)/2:e;function pt(t,e,i){const n=e.length;let o=0,a=n;if(t._sorted){const{iScale:r,vScale:l,_parsed:h}=t,c=t.dataset&&t.dataset.options?t.dataset.options.spanGaps:null,d=r.axis,{min:u,max:f,minDefined:g,maxDefined:p}=r.getUserBounds();if(g){if(o=Math.min(it(h,d,u).lo,i?n:it(e,d,r.getPixelForValue(u)).lo),c){const t=h.slice(0,o+1).reverse().findIndex((t=>!s(t[l.axis])));o-=Math.max(0,t)}o=Z(o,0,n-1)}if(p){let t=Math.max(it(h,r.axis,f,!0).hi+1,i?0:it(e,d,r.getPixelForValue(f),!0).hi+1);if(c){const e=h.slice(t-1).findIndex((t=>!s(t[l.axis])));t+=Math.max(0,e)}a=Z(t,o,n)-o}else a=n-o}return{start:o,count:a}}function mt(t){const{xScale:e,yScale:i,_scaleRanges:s}=t,n={xmin:e.min,xmax:e.max,ymin:i.min,ymax:i.max};if(!s)return t._scaleRanges=n,!0;const o=s.xmin!==e.min||s.xmax!==e.max||s.ymin!==i.min||s.ymax!==i.max;return Object.assign(s,n),o}class xt{constructor(){this._request=null,this._charts=new Map,this._running=!1,this._lastDate=void 0}_notify(t,e,i,s){const n=e.listeners[s],o=e.duration;n.forEach((s=>s({chart:t,initial:e.initial,numSteps:o,currentStep:Math.min(i-e.start,o)})))}_refresh(){this._request||(this._running=!0,this._request=ht.call(window,(()=>{this._update(),this._request=null,this._running&&this._refresh()})))}_update(t=Date.now()){let e=0;this._charts.forEach(((i,s)=>{if(!i.running||!i.items.length)return;const n=i.items;let o,a=n.length-1,r=!1;for(;a>=0;--a)o=n[a],o._active?(o._total>i.duration&&(i.duration=o._total),o.tick(t),r=!0):(n[a]=n[n.length-1],n.pop());r&&(s.draw(),this._notify(s,i,t,"progress")),n.length||(i.running=!1,this._notify(s,i,t,"complete"),i.initial=!1),e+=n.length})),this._lastDate=t,0===e&&(this._running=!1)}_getAnims(t){const e=this._charts;let i=e.get(t);return i||(i={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},e.set(t,i)),i}listen(t,e,i){this._getAnims(t).listeners[e].push(i)}add(t,e){e&&e.length&&this._getAnims(t).items.push(...e)}has(t){return this._getAnims(t).items.length>0}start(t){const e=this._charts.get(t);e&&(e.running=!0,e.start=Date.now(),e.duration=e.items.reduce(((t,e)=>Math.max(t,e._duration)),0),this._refresh())}running(t){if(!this._running)return!1;const e=this._charts.get(t);return!!(e&&e.running&&e.items.length)}stop(t){const e=this._charts.get(t);if(!e||!e.items.length)return;const i=e.items;let s=i.length-1;for(;s>=0;--s)i[s].cancel();e.items=[],this._notify(t,e,Date.now(),"complete")}remove(t){return this._charts.delete(t)}}var bt=new xt; -/*! - * @kurkle/color v0.3.2 - * https://github.com/kurkle/color#readme - * (c) 2023 Jukka Kurkela - * Released under the MIT License - */function _t(t){return t+.5|0}const yt=(t,e,i)=>Math.max(Math.min(t,i),e);function vt(t){return yt(_t(2.55*t),0,255)}function Mt(t){return yt(_t(255*t),0,255)}function wt(t){return yt(_t(t/2.55)/100,0,1)}function kt(t){return yt(_t(100*t),0,100)}const St={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},Pt=[..."0123456789ABCDEF"],Dt=t=>Pt[15&t],Ct=t=>Pt[(240&t)>>4]+Pt[15&t],Ot=t=>(240&t)>>4==(15&t);function At(t){var e=(t=>Ot(t.r)&&Ot(t.g)&&Ot(t.b)&&Ot(t.a))(t)?Dt:Ct;return t?"#"+e(t.r)+e(t.g)+e(t.b)+((t,e)=>t<255?e(t):"")(t.a,e):void 0}const Tt=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function Lt(t,e,i){const s=e*Math.min(i,1-i),n=(e,n=(e+t/30)%12)=>i-s*Math.max(Math.min(n-3,9-n,1),-1);return[n(0),n(8),n(4)]}function Et(t,e,i){const s=(s,n=(s+t/60)%6)=>i-i*e*Math.max(Math.min(n,4-n,1),0);return[s(5),s(3),s(1)]}function Rt(t,e,i){const s=Lt(t,1,.5);let n;for(e+i>1&&(n=1/(e+i),e*=n,i*=n),n=0;n<3;n++)s[n]*=1-e-i,s[n]+=e;return s}function It(t){const e=t.r/255,i=t.g/255,s=t.b/255,n=Math.max(e,i,s),o=Math.min(e,i,s),a=(n+o)/2;let r,l,h;return n!==o&&(h=n-o,l=a>.5?h/(2-n-o):h/(n+o),r=function(t,e,i,s,n){return t===n?(e-i)/s+(e>16&255,o>>8&255,255&o]}return t}(),Ht.transparent=[0,0,0,0]);const e=Ht[t.toLowerCase()];return e&&{r:e[0],g:e[1],b:e[2],a:4===e.length?e[3]:255}}const $t=/^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;const Yt=t=>t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055,Ut=t=>t<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4);function Xt(t,e,i){if(t){let s=It(t);s[e]=Math.max(0,Math.min(s[e]+s[e]*i,0===e?360:1)),s=Ft(s),t.r=s[0],t.g=s[1],t.b=s[2]}}function qt(t,e){return t?Object.assign(e||{},t):t}function Kt(t){var e={r:0,g:0,b:0,a:255};return Array.isArray(t)?t.length>=3&&(e={r:t[0],g:t[1],b:t[2],a:255},t.length>3&&(e.a=Mt(t[3]))):(e=qt(t,{r:0,g:0,b:0,a:1})).a=Mt(e.a),e}function Gt(t){return"r"===t.charAt(0)?function(t){const e=$t.exec(t);let i,s,n,o=255;if(e){if(e[7]!==i){const t=+e[7];o=e[8]?vt(t):yt(255*t,0,255)}return i=+e[1],s=+e[3],n=+e[5],i=255&(e[2]?vt(i):yt(i,0,255)),s=255&(e[4]?vt(s):yt(s,0,255)),n=255&(e[6]?vt(n):yt(n,0,255)),{r:i,g:s,b:n,a:o}}}(t):Bt(t)}class Jt{constructor(t){if(t instanceof Jt)return t;const e=typeof t;let i;var s,n,o;"object"===e?i=Kt(t):"string"===e&&(o=(s=t).length,"#"===s[0]&&(4===o||5===o?n={r:255&17*St[s[1]],g:255&17*St[s[2]],b:255&17*St[s[3]],a:5===o?17*St[s[4]]:255}:7!==o&&9!==o||(n={r:St[s[1]]<<4|St[s[2]],g:St[s[3]]<<4|St[s[4]],b:St[s[5]]<<4|St[s[6]],a:9===o?St[s[7]]<<4|St[s[8]]:255})),i=n||jt(t)||Gt(t)),this._rgb=i,this._valid=!!i}get valid(){return this._valid}get rgb(){var t=qt(this._rgb);return t&&(t.a=wt(t.a)),t}set rgb(t){this._rgb=Kt(t)}rgbString(){return this._valid?(t=this._rgb)&&(t.a<255?`rgba(${t.r}, ${t.g}, ${t.b}, ${wt(t.a)})`:`rgb(${t.r}, ${t.g}, ${t.b})`):void 0;var t}hexString(){return this._valid?At(this._rgb):void 0}hslString(){return this._valid?function(t){if(!t)return;const e=It(t),i=e[0],s=kt(e[1]),n=kt(e[2]);return t.a<255?`hsla(${i}, ${s}%, ${n}%, ${wt(t.a)})`:`hsl(${i}, ${s}%, ${n}%)`}(this._rgb):void 0}mix(t,e){if(t){const i=this.rgb,s=t.rgb;let n;const o=e===n?.5:e,a=2*o-1,r=i.a-s.a,l=((a*r==-1?a:(a+r)/(1+a*r))+1)/2;n=1-l,i.r=255&l*i.r+n*s.r+.5,i.g=255&l*i.g+n*s.g+.5,i.b=255&l*i.b+n*s.b+.5,i.a=o*i.a+(1-o)*s.a,this.rgb=i}return this}interpolate(t,e){return t&&(this._rgb=function(t,e,i){const s=Ut(wt(t.r)),n=Ut(wt(t.g)),o=Ut(wt(t.b));return{r:Mt(Yt(s+i*(Ut(wt(e.r))-s))),g:Mt(Yt(n+i*(Ut(wt(e.g))-n))),b:Mt(Yt(o+i*(Ut(wt(e.b))-o))),a:t.a+i*(e.a-t.a)}}(this._rgb,t._rgb,e)),this}clone(){return new Jt(this.rgb)}alpha(t){return this._rgb.a=Mt(t),this}clearer(t){return this._rgb.a*=1-t,this}greyscale(){const t=this._rgb,e=_t(.3*t.r+.59*t.g+.11*t.b);return t.r=t.g=t.b=e,this}opaquer(t){return this._rgb.a*=1+t,this}negate(){const t=this._rgb;return t.r=255-t.r,t.g=255-t.g,t.b=255-t.b,this}lighten(t){return Xt(this._rgb,2,t),this}darken(t){return Xt(this._rgb,2,-t),this}saturate(t){return Xt(this._rgb,1,t),this}desaturate(t){return Xt(this._rgb,1,-t),this}rotate(t){return function(t,e){var i=It(t);i[0]=Vt(i[0]+e),i=Ft(i),t.r=i[0],t.g=i[1],t.b=i[2]}(this._rgb,t),this}}function Zt(t){if(t&&"object"==typeof t){const e=t.toString();return"[object CanvasPattern]"===e||"[object CanvasGradient]"===e}return!1}function Qt(t){return Zt(t)?t:new Jt(t)}function te(t){return Zt(t)?t:new Jt(t).saturate(.5).darken(.1).hexString()}const ee=["x","y","borderWidth","radius","tension"],ie=["color","borderColor","backgroundColor"];const se=new Map;function ne(t,e,i){return function(t,e){e=e||{};const i=t+JSON.stringify(e);let s=se.get(i);return s||(s=new Intl.NumberFormat(t,e),se.set(i,s)),s}(e,i).format(t)}const oe={values:t=>n(t)?t:""+t,numeric(t,e,i){if(0===t)return"0";const s=this.chart.options.locale;let n,o=t;if(i.length>1){const e=Math.max(Math.abs(i[0].value),Math.abs(i[i.length-1].value));(e<1e-4||e>1e15)&&(n="scientific"),o=function(t,e){let i=e.length>3?e[2].value-e[1].value:e[1].value-e[0].value;Math.abs(i)>=1&&t!==Math.floor(t)&&(i=t-Math.floor(t));return i}(t,i)}const a=z(Math.abs(o)),r=isNaN(a)?1:Math.max(Math.min(-1*Math.floor(a),20),0),l={notation:n,minimumFractionDigits:r,maximumFractionDigits:r};return Object.assign(l,this.options.ticks.format),ne(t,s,l)},logarithmic(t,e,i){if(0===t)return"0";const s=i[e].significand||t/Math.pow(10,Math.floor(z(t)));return[1,2,3,5,10,15].includes(s)||e>.8*i.length?oe.numeric.call(this,t,e,i):""}};var ae={formatters:oe};const re=Object.create(null),le=Object.create(null);function he(t,e){if(!e)return t;const i=e.split(".");for(let e=0,s=i.length;et.chart.platform.getDevicePixelRatio(),this.elements={},this.events=["mousemove","mouseout","click","touchstart","touchmove"],this.font={family:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",size:12,style:"normal",lineHeight:1.2,weight:null},this.hover={},this.hoverBackgroundColor=(t,e)=>te(e.backgroundColor),this.hoverBorderColor=(t,e)=>te(e.borderColor),this.hoverColor=(t,e)=>te(e.color),this.indexAxis="x",this.interaction={mode:"nearest",intersect:!0,includeInvisible:!1},this.maintainAspectRatio=!0,this.onHover=null,this.onClick=null,this.parsing=!0,this.plugins={},this.responsive=!0,this.scale=void 0,this.scales={},this.showLine=!0,this.drawActiveElementsOnTop=!0,this.describe(t),this.apply(e)}set(t,e){return ce(this,t,e)}get(t){return he(this,t)}describe(t,e){return ce(le,t,e)}override(t,e){return ce(re,t,e)}route(t,e,i,s){const n=he(this,t),a=he(this,i),r="_"+e;Object.defineProperties(n,{[r]:{value:n[e],writable:!0},[e]:{enumerable:!0,get(){const t=this[r],e=a[s];return o(t)?Object.assign({},e,t):l(t,e)},set(t){this[r]=t}}})}apply(t){t.forEach((t=>t(this)))}}var ue=new de({_scriptable:t=>!t.startsWith("on"),_indexable:t=>"events"!==t,hover:{_fallback:"interaction"},interaction:{_scriptable:!1,_indexable:!1}},[function(t){t.set("animation",{delay:void 0,duration:1e3,easing:"easeOutQuart",fn:void 0,from:void 0,loop:void 0,to:void 0,type:void 0}),t.describe("animation",{_fallback:!1,_indexable:!1,_scriptable:t=>"onProgress"!==t&&"onComplete"!==t&&"fn"!==t}),t.set("animations",{colors:{type:"color",properties:ie},numbers:{type:"number",properties:ee}}),t.describe("animations",{_fallback:"animation"}),t.set("transitions",{active:{animation:{duration:400}},resize:{animation:{duration:0}},show:{animations:{colors:{from:"transparent"},visible:{type:"boolean",duration:0}}},hide:{animations:{colors:{to:"transparent"},visible:{type:"boolean",easing:"linear",fn:t=>0|t}}}})},function(t){t.set("layout",{autoPadding:!0,padding:{top:0,right:0,bottom:0,left:0}})},function(t){t.set("scale",{display:!0,offset:!1,reverse:!1,beginAtZero:!1,bounds:"ticks",clip:!0,grace:0,grid:{display:!0,lineWidth:1,drawOnChartArea:!0,drawTicks:!0,tickLength:8,tickWidth:(t,e)=>e.lineWidth,tickColor:(t,e)=>e.color,offset:!1},border:{display:!0,dash:[],dashOffset:0,width:1},title:{display:!1,text:"",padding:{top:4,bottom:4}},ticks:{minRotation:0,maxRotation:50,mirror:!1,textStrokeWidth:0,textStrokeColor:"",padding:3,display:!0,autoSkip:!0,autoSkipPadding:3,labelOffset:0,callback:ae.formatters.values,minor:{},major:{},align:"center",crossAlign:"near",showLabelBackdrop:!1,backdropColor:"rgba(255, 255, 255, 0.75)",backdropPadding:2}}),t.route("scale.ticks","color","","color"),t.route("scale.grid","color","","borderColor"),t.route("scale.border","color","","borderColor"),t.route("scale.title","color","","color"),t.describe("scale",{_fallback:!1,_scriptable:t=>!t.startsWith("before")&&!t.startsWith("after")&&"callback"!==t&&"parser"!==t,_indexable:t=>"borderDash"!==t&&"tickBorderDash"!==t&&"dash"!==t}),t.describe("scales",{_fallback:"scale"}),t.describe("scale.ticks",{_scriptable:t=>"backdropPadding"!==t&&"callback"!==t,_indexable:t=>"backdropPadding"!==t})}]);function fe(){return"undefined"!=typeof window&&"undefined"!=typeof document}function ge(t){let e=t.parentNode;return e&&"[object ShadowRoot]"===e.toString()&&(e=e.host),e}function pe(t,e,i){let s;return"string"==typeof t?(s=parseInt(t,10),-1!==t.indexOf("%")&&(s=s/100*e.parentNode[i])):s=t,s}const me=t=>t.ownerDocument.defaultView.getComputedStyle(t,null);function xe(t,e){return me(t).getPropertyValue(e)}const be=["top","right","bottom","left"];function _e(t,e,i){const s={};i=i?"-"+i:"";for(let n=0;n<4;n++){const o=be[n];s[o]=parseFloat(t[e+"-"+o+i])||0}return s.width=s.left+s.right,s.height=s.top+s.bottom,s}const ye=(t,e,i)=>(t>0||e>0)&&(!i||!i.shadowRoot);function ve(t,e){if("native"in t)return t;const{canvas:i,currentDevicePixelRatio:s}=e,n=me(i),o="border-box"===n.boxSizing,a=_e(n,"padding"),r=_e(n,"border","width"),{x:l,y:h,box:c}=function(t,e){const i=t.touches,s=i&&i.length?i[0]:t,{offsetX:n,offsetY:o}=s;let a,r,l=!1;if(ye(n,o,t.target))a=n,r=o;else{const t=e.getBoundingClientRect();a=s.clientX-t.left,r=s.clientY-t.top,l=!0}return{x:a,y:r,box:l}}(t,i),d=a.left+(c&&r.left),u=a.top+(c&&r.top);let{width:f,height:g}=e;return o&&(f-=a.width+r.width,g-=a.height+r.height),{x:Math.round((l-d)/f*i.width/s),y:Math.round((h-u)/g*i.height/s)}}const Me=t=>Math.round(10*t)/10;function we(t,e,i,s){const n=me(t),o=_e(n,"margin"),a=pe(n.maxWidth,t,"clientWidth")||T,r=pe(n.maxHeight,t,"clientHeight")||T,l=function(t,e,i){let s,n;if(void 0===e||void 0===i){const o=t&&ge(t);if(o){const t=o.getBoundingClientRect(),a=me(o),r=_e(a,"border","width"),l=_e(a,"padding");e=t.width-l.width-r.width,i=t.height-l.height-r.height,s=pe(a.maxWidth,o,"clientWidth"),n=pe(a.maxHeight,o,"clientHeight")}else e=t.clientWidth,i=t.clientHeight}return{width:e,height:i,maxWidth:s||T,maxHeight:n||T}}(t,e,i);let{width:h,height:c}=l;if("content-box"===n.boxSizing){const t=_e(n,"border","width"),e=_e(n,"padding");h-=e.width+t.width,c-=e.height+t.height}h=Math.max(0,h-o.width),c=Math.max(0,s?h/s:c-o.height),h=Me(Math.min(h,a,l.maxWidth)),c=Me(Math.min(c,r,l.maxHeight)),h&&!c&&(c=Me(h/2));return(void 0!==e||void 0!==i)&&s&&l.height&&c>l.height&&(c=l.height,h=Me(Math.floor(c*s))),{width:h,height:c}}function ke(t,e,i){const s=e||1,n=Me(t.height*s),o=Me(t.width*s);t.height=Me(t.height),t.width=Me(t.width);const a=t.canvas;return a.style&&(i||!a.style.height&&!a.style.width)&&(a.style.height=`${t.height}px`,a.style.width=`${t.width}px`),(t.currentDevicePixelRatio!==s||a.height!==n||a.width!==o)&&(t.currentDevicePixelRatio=s,a.height=n,a.width=o,t.ctx.setTransform(s,0,0,s,0,0),!0)}const Se=function(){let t=!1;try{const e={get passive(){return t=!0,!1}};fe()&&(window.addEventListener("test",null,e),window.removeEventListener("test",null,e))}catch(t){}return t}();function Pe(t,e){const i=xe(t,e),s=i&&i.match(/^(\d+)(\.\d+)?px$/);return s?+s[1]:void 0}function De(t){return!t||s(t.size)||s(t.family)?null:(t.style?t.style+" ":"")+(t.weight?t.weight+" ":"")+t.size+"px "+t.family}function Ce(t,e,i,s,n){let o=e[n];return o||(o=e[n]=t.measureText(n).width,i.push(n)),o>s&&(s=o),s}function Oe(t,e,i,s){let o=(s=s||{}).data=s.data||{},a=s.garbageCollect=s.garbageCollect||[];s.font!==e&&(o=s.data={},a=s.garbageCollect=[],s.font=e),t.save(),t.font=e;let r=0;const l=i.length;let h,c,d,u,f;for(h=0;hi.length){for(h=0;h0&&t.stroke()}}function Re(t,e,i){return i=i||.5,!e||t&&t.x>e.left-i&&t.xe.top-i&&t.y0&&""!==r.strokeColor;let c,d;for(t.save(),t.font=a.string,function(t,e){e.translation&&t.translate(e.translation[0],e.translation[1]),s(e.rotation)||t.rotate(e.rotation),e.color&&(t.fillStyle=e.color),e.textAlign&&(t.textAlign=e.textAlign),e.textBaseline&&(t.textBaseline=e.textBaseline)}(t,r),c=0;ct[0])){const o=i||t;void 0===s&&(s=ti("_fallback",t));const a={[Symbol.toStringTag]:"Object",_cacheable:!0,_scopes:t,_rootScopes:o,_fallback:s,_getTarget:n,override:i=>je([i,...t],e,o,s)};return new Proxy(a,{deleteProperty:(e,i)=>(delete e[i],delete e._keys,delete t[0][i],!0),get:(i,s)=>qe(i,s,(()=>function(t,e,i,s){let n;for(const o of e)if(n=ti(Ue(o,t),i),void 0!==n)return Xe(t,n)?Ze(i,s,t,n):n}(s,e,t,i))),getOwnPropertyDescriptor:(t,e)=>Reflect.getOwnPropertyDescriptor(t._scopes[0],e),getPrototypeOf:()=>Reflect.getPrototypeOf(t[0]),has:(t,e)=>ei(t).includes(e),ownKeys:t=>ei(t),set(t,e,i){const s=t._storage||(t._storage=n());return t[e]=s[e]=i,delete t._keys,!0}})}function $e(t,e,i,s){const a={_cacheable:!1,_proxy:t,_context:e,_subProxy:i,_stack:new Set,_descriptors:Ye(t,s),setContext:e=>$e(t,e,i,s),override:n=>$e(t.override(n),e,i,s)};return new Proxy(a,{deleteProperty:(e,i)=>(delete e[i],delete t[i],!0),get:(t,e,i)=>qe(t,e,(()=>function(t,e,i){const{_proxy:s,_context:a,_subProxy:r,_descriptors:l}=t;let h=s[e];S(h)&&l.isScriptable(e)&&(h=function(t,e,i,s){const{_proxy:n,_context:o,_subProxy:a,_stack:r}=i;if(r.has(t))throw new Error("Recursion detected: "+Array.from(r).join("->")+"->"+t);r.add(t);let l=e(o,a||s);r.delete(t),Xe(t,l)&&(l=Ze(n._scopes,n,t,l));return l}(e,h,t,i));n(h)&&h.length&&(h=function(t,e,i,s){const{_proxy:n,_context:a,_subProxy:r,_descriptors:l}=i;if(void 0!==a.index&&s(t))return e[a.index%e.length];if(o(e[0])){const i=e,s=n._scopes.filter((t=>t!==i));e=[];for(const o of i){const i=Ze(s,n,t,o);e.push($e(i,a,r&&r[t],l))}}return e}(e,h,t,l.isIndexable));Xe(e,h)&&(h=$e(h,a,r&&r[e],l));return h}(t,e,i))),getOwnPropertyDescriptor:(e,i)=>e._descriptors.allKeys?Reflect.has(t,i)?{enumerable:!0,configurable:!0}:void 0:Reflect.getOwnPropertyDescriptor(t,i),getPrototypeOf:()=>Reflect.getPrototypeOf(t),has:(e,i)=>Reflect.has(t,i),ownKeys:()=>Reflect.ownKeys(t),set:(e,i,s)=>(t[i]=s,delete e[i],!0)})}function Ye(t,e={scriptable:!0,indexable:!0}){const{_scriptable:i=e.scriptable,_indexable:s=e.indexable,_allKeys:n=e.allKeys}=t;return{allKeys:n,scriptable:i,indexable:s,isScriptable:S(i)?i:()=>i,isIndexable:S(s)?s:()=>s}}const Ue=(t,e)=>t?t+w(e):e,Xe=(t,e)=>o(e)&&"adapters"!==t&&(null===Object.getPrototypeOf(e)||e.constructor===Object);function qe(t,e,i){if(Object.prototype.hasOwnProperty.call(t,e)||"constructor"===e)return t[e];const s=i();return t[e]=s,s}function Ke(t,e,i){return S(t)?t(e,i):t}const Ge=(t,e)=>!0===t?e:"string"==typeof t?M(e,t):void 0;function Je(t,e,i,s,n){for(const o of e){const e=Ge(i,o);if(e){t.add(e);const o=Ke(e._fallback,i,n);if(void 0!==o&&o!==i&&o!==s)return o}else if(!1===e&&void 0!==s&&i!==s)return null}return!1}function Ze(t,e,i,s){const a=e._rootScopes,r=Ke(e._fallback,i,s),l=[...t,...a],h=new Set;h.add(s);let c=Qe(h,l,i,r||i,s);return null!==c&&((void 0===r||r===i||(c=Qe(h,l,r,c,s),null!==c))&&je(Array.from(h),[""],a,r,(()=>function(t,e,i){const s=t._getTarget();e in s||(s[e]={});const a=s[e];if(n(a)&&o(i))return i;return a||{}}(e,i,s))))}function Qe(t,e,i,s,n){for(;i;)i=Je(t,e,i,s,n);return i}function ti(t,e){for(const i of e){if(!i)continue;const e=i[t];if(void 0!==e)return e}}function ei(t){let e=t._keys;return e||(e=t._keys=function(t){const e=new Set;for(const i of t)for(const t of Object.keys(i).filter((t=>!t.startsWith("_"))))e.add(t);return Array.from(e)}(t._scopes)),e}function ii(t,e,i,s){const{iScale:n}=t,{key:o="r"}=this._parsing,a=new Array(s);let r,l,h,c;for(r=0,l=s;re"x"===t?"y":"x";function ai(t,e,i,s){const n=t.skip?e:t,o=e,a=i.skip?e:i,r=q(o,n),l=q(a,o);let h=r/(r+l),c=l/(r+l);h=isNaN(h)?0:h,c=isNaN(c)?0:c;const d=s*h,u=s*c;return{previous:{x:o.x-d*(a.x-n.x),y:o.y-d*(a.y-n.y)},next:{x:o.x+u*(a.x-n.x),y:o.y+u*(a.y-n.y)}}}function ri(t,e="x"){const i=oi(e),s=t.length,n=Array(s).fill(0),o=Array(s);let a,r,l,h=ni(t,0);for(a=0;a!t.skip))),"monotone"===e.cubicInterpolationMode)ri(t,n);else{let i=s?t[t.length-1]:t[0];for(o=0,a=t.length;o0===t||1===t,di=(t,e,i)=>-Math.pow(2,10*(t-=1))*Math.sin((t-e)*O/i),ui=(t,e,i)=>Math.pow(2,-10*t)*Math.sin((t-e)*O/i)+1,fi={linear:t=>t,easeInQuad:t=>t*t,easeOutQuad:t=>-t*(t-2),easeInOutQuad:t=>(t/=.5)<1?.5*t*t:-.5*(--t*(t-2)-1),easeInCubic:t=>t*t*t,easeOutCubic:t=>(t-=1)*t*t+1,easeInOutCubic:t=>(t/=.5)<1?.5*t*t*t:.5*((t-=2)*t*t+2),easeInQuart:t=>t*t*t*t,easeOutQuart:t=>-((t-=1)*t*t*t-1),easeInOutQuart:t=>(t/=.5)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2),easeInQuint:t=>t*t*t*t*t,easeOutQuint:t=>(t-=1)*t*t*t*t+1,easeInOutQuint:t=>(t/=.5)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2),easeInSine:t=>1-Math.cos(t*E),easeOutSine:t=>Math.sin(t*E),easeInOutSine:t=>-.5*(Math.cos(C*t)-1),easeInExpo:t=>0===t?0:Math.pow(2,10*(t-1)),easeOutExpo:t=>1===t?1:1-Math.pow(2,-10*t),easeInOutExpo:t=>ci(t)?t:t<.5?.5*Math.pow(2,10*(2*t-1)):.5*(2-Math.pow(2,-10*(2*t-1))),easeInCirc:t=>t>=1?t:-(Math.sqrt(1-t*t)-1),easeOutCirc:t=>Math.sqrt(1-(t-=1)*t),easeInOutCirc:t=>(t/=.5)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1),easeInElastic:t=>ci(t)?t:di(t,.075,.3),easeOutElastic:t=>ci(t)?t:ui(t,.075,.3),easeInOutElastic(t){const e=.1125;return ci(t)?t:t<.5?.5*di(2*t,e,.45):.5+.5*ui(2*t-1,e,.45)},easeInBack(t){const e=1.70158;return t*t*((e+1)*t-e)},easeOutBack(t){const e=1.70158;return(t-=1)*t*((e+1)*t+e)+1},easeInOutBack(t){let e=1.70158;return(t/=.5)<1?t*t*((1+(e*=1.525))*t-e)*.5:.5*((t-=2)*t*((1+(e*=1.525))*t+e)+2)},easeInBounce:t=>1-fi.easeOutBounce(1-t),easeOutBounce(t){const e=7.5625,i=2.75;return t<1/i?e*t*t:t<2/i?e*(t-=1.5/i)*t+.75:t<2.5/i?e*(t-=2.25/i)*t+.9375:e*(t-=2.625/i)*t+.984375},easeInOutBounce:t=>t<.5?.5*fi.easeInBounce(2*t):.5*fi.easeOutBounce(2*t-1)+.5};function gi(t,e,i,s){return{x:t.x+i*(e.x-t.x),y:t.y+i*(e.y-t.y)}}function pi(t,e,i,s){return{x:t.x+i*(e.x-t.x),y:"middle"===s?i<.5?t.y:e.y:"after"===s?i<1?t.y:e.y:i>0?e.y:t.y}}function mi(t,e,i,s){const n={x:t.cp2x,y:t.cp2y},o={x:e.cp1x,y:e.cp1y},a=gi(t,n,i),r=gi(n,o,i),l=gi(o,e,i),h=gi(a,r,i),c=gi(r,l,i);return gi(h,c,i)}const xi=/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/,bi=/^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;function _i(t,e){const i=(""+t).match(xi);if(!i||"normal"===i[1])return 1.2*e;switch(t=+i[2],i[3]){case"px":return t;case"%":t/=100}return e*t}const yi=t=>+t||0;function vi(t,e){const i={},s=o(e),n=s?Object.keys(e):e,a=o(t)?s?i=>l(t[i],t[e[i]]):e=>t[e]:()=>t;for(const t of n)i[t]=yi(a(t));return i}function Mi(t){return vi(t,{top:"y",right:"x",bottom:"y",left:"x"})}function wi(t){return vi(t,["topLeft","topRight","bottomLeft","bottomRight"])}function ki(t){const e=Mi(t);return e.width=e.left+e.right,e.height=e.top+e.bottom,e}function Si(t,e){t=t||{},e=e||ue.font;let i=l(t.size,e.size);"string"==typeof i&&(i=parseInt(i,10));let s=l(t.style,e.style);s&&!(""+s).match(bi)&&(console.warn('Invalid font style specified: "'+s+'"'),s=void 0);const n={family:l(t.family,e.family),lineHeight:_i(l(t.lineHeight,e.lineHeight),i),size:i,style:s,weight:l(t.weight,e.weight),string:""};return n.string=De(n),n}function Pi(t,e,i,s){let o,a,r,l=!0;for(o=0,a=t.length;oi&&0===t?0:t+e;return{min:a(s,-Math.abs(o)),max:a(n,o)}}function Ci(t,e){return Object.assign(Object.create(t),e)}function Oi(t,e,i){return t?function(t,e){return{x:i=>t+t+e-i,setWidth(t){e=t},textAlign:t=>"center"===t?t:"right"===t?"left":"right",xPlus:(t,e)=>t-e,leftForLtr:(t,e)=>t-e}}(e,i):{x:t=>t,setWidth(t){},textAlign:t=>t,xPlus:(t,e)=>t+e,leftForLtr:(t,e)=>t}}function Ai(t,e){let i,s;"ltr"!==e&&"rtl"!==e||(i=t.canvas.style,s=[i.getPropertyValue("direction"),i.getPropertyPriority("direction")],i.setProperty("direction",e,"important"),t.prevTextDirection=s)}function Ti(t,e){void 0!==e&&(delete t.prevTextDirection,t.canvas.style.setProperty("direction",e[0],e[1]))}function Li(t){return"angle"===t?{between:J,compare:K,normalize:G}:{between:tt,compare:(t,e)=>t-e,normalize:t=>t}}function Ei({start:t,end:e,count:i,loop:s,style:n}){return{start:t%i,end:e%i,loop:s&&(e-t+1)%i==0,style:n}}function Ri(t,e,i){if(!i)return[t];const{property:s,start:n,end:o}=i,a=e.length,{compare:r,between:l,normalize:h}=Li(s),{start:c,end:d,loop:u,style:f}=function(t,e,i){const{property:s,start:n,end:o}=i,{between:a,normalize:r}=Li(s),l=e.length;let h,c,{start:d,end:u,loop:f}=t;if(f){for(d+=l,u+=l,h=0,c=l;hb||l(n,x,p)&&0!==r(n,x),v=()=>!b||0===r(o,p)||l(o,x,p);for(let t=c,i=c;t<=d;++t)m=e[t%a],m.skip||(p=h(m[s]),p!==x&&(b=l(p,n,o),null===_&&y()&&(_=0===r(p,n)?t:i),null!==_&&v()&&(g.push(Ei({start:_,end:t,loop:u,count:a,style:f})),_=null),i=t,x=p));return null!==_&&g.push(Ei({start:_,end:d,loop:u,count:a,style:f})),g}function Ii(t,e){const i=[],s=t.segments;for(let n=0;nn&&t[o%e].skip;)o--;return o%=e,{start:n,end:o}}(i,n,o,s);if(!0===s)return Fi(t,[{start:a,end:r,loop:o}],i,e);return Fi(t,function(t,e,i,s){const n=t.length,o=[];let a,r=e,l=t[e];for(a=e+1;a<=i;++a){const i=t[a%n];i.skip||i.stop?l.skip||(s=!1,o.push({start:e%n,end:(a-1)%n,loop:s}),e=r=i.stop?a:null):(r=a,l.skip&&(e=a)),l=i}return null!==r&&o.push({start:e%n,end:r%n,loop:s}),o}(i,a,r!s(t[e.axis])));n.lo-=Math.max(0,a);const r=i.slice(n.hi).findIndex((t=>!s(t[e.axis])));n.hi+=Math.max(0,r)}return n}if(o._sharedOptions){const t=a[0],s="function"==typeof t.getRange&&t.getRange(e);if(s){const t=r(a,e,i-s),n=r(a,e,i+s);return{lo:t.lo,hi:n.hi}}}}return{lo:0,hi:a.length-1}}function $i(t,e,i,s,n){const o=t.getSortedVisibleDatasetMetas(),a=i[e];for(let t=0,i=o.length;t{t[a]&&t[a](e[i],n)&&(o.push({element:t,datasetIndex:s,index:l}),r=r||t.inRange(e.x,e.y,n))})),s&&!r?[]:o}var Ki={evaluateInteractionItems:$i,modes:{index(t,e,i,s){const n=ve(e,t),o=i.axis||"x",a=i.includeInvisible||!1,r=i.intersect?Yi(t,n,o,s,a):Xi(t,n,o,!1,s,a),l=[];return r.length?(t.getSortedVisibleDatasetMetas().forEach((t=>{const e=r[0].index,i=t.data[e];i&&!i.skip&&l.push({element:i,datasetIndex:t.index,index:e})})),l):[]},dataset(t,e,i,s){const n=ve(e,t),o=i.axis||"xy",a=i.includeInvisible||!1;let r=i.intersect?Yi(t,n,o,s,a):Xi(t,n,o,!1,s,a);if(r.length>0){const e=r[0].datasetIndex,i=t.getDatasetMeta(e).data;r=[];for(let t=0;tYi(t,ve(e,t),i.axis||"xy",s,i.includeInvisible||!1),nearest(t,e,i,s){const n=ve(e,t),o=i.axis||"xy",a=i.includeInvisible||!1;return Xi(t,n,o,i.intersect,s,a)},x:(t,e,i,s)=>qi(t,ve(e,t),"x",i.intersect,s),y:(t,e,i,s)=>qi(t,ve(e,t),"y",i.intersect,s)}};const Gi=["left","top","right","bottom"];function Ji(t,e){return t.filter((t=>t.pos===e))}function Zi(t,e){return t.filter((t=>-1===Gi.indexOf(t.pos)&&t.box.axis===e))}function Qi(t,e){return t.sort(((t,i)=>{const s=e?i:t,n=e?t:i;return s.weight===n.weight?s.index-n.index:s.weight-n.weight}))}function ts(t,e){const i=function(t){const e={};for(const i of t){const{stack:t,pos:s,stackWeight:n}=i;if(!t||!Gi.includes(s))continue;const o=e[t]||(e[t]={count:0,placed:0,weight:0,size:0});o.count++,o.weight+=n}return e}(t),{vBoxMaxWidth:s,hBoxMaxHeight:n}=e;let o,a,r;for(o=0,a=t.length;o{s[t]=Math.max(e[t],i[t])})),s}return s(t?["left","right"]:["top","bottom"])}function os(t,e,i,s){const n=[];let o,a,r,l,h,c;for(o=0,a=t.length,h=0;ot.box.fullSize)),!0),s=Qi(Ji(e,"left"),!0),n=Qi(Ji(e,"right")),o=Qi(Ji(e,"top"),!0),a=Qi(Ji(e,"bottom")),r=Zi(e,"x"),l=Zi(e,"y");return{fullSize:i,leftAndTop:s.concat(o),rightAndBottom:n.concat(l).concat(a).concat(r),chartArea:Ji(e,"chartArea"),vertical:s.concat(n).concat(l),horizontal:o.concat(a).concat(r)}}(t.boxes),l=r.vertical,h=r.horizontal;u(t.boxes,(t=>{"function"==typeof t.beforeLayout&&t.beforeLayout()}));const c=l.reduce(((t,e)=>e.box.options&&!1===e.box.options.display?t:t+1),0)||1,d=Object.freeze({outerWidth:e,outerHeight:i,padding:n,availableWidth:o,availableHeight:a,vBoxMaxWidth:o/2/c,hBoxMaxHeight:a/2}),f=Object.assign({},n);is(f,ki(s));const g=Object.assign({maxPadding:f,w:o,h:a,x:n.left,y:n.top},n),p=ts(l.concat(h),d);os(r.fullSize,g,d,p),os(l,g,d,p),os(h,g,d,p)&&os(l,g,d,p),function(t){const e=t.maxPadding;function i(i){const s=Math.max(e[i]-t[i],0);return t[i]+=s,s}t.y+=i("top"),t.x+=i("left"),i("right"),i("bottom")}(g),rs(r.leftAndTop,g,d,p),g.x+=g.w,g.y+=g.h,rs(r.rightAndBottom,g,d,p),t.chartArea={left:g.left,top:g.top,right:g.left+g.w,bottom:g.top+g.h,height:g.h,width:g.w},u(r.chartArea,(e=>{const i=e.box;Object.assign(i,t.chartArea),i.update(g.w,g.h,{left:0,top:0,right:0,bottom:0})}))}};class hs{acquireContext(t,e){}releaseContext(t){return!1}addEventListener(t,e,i){}removeEventListener(t,e,i){}getDevicePixelRatio(){return 1}getMaximumSize(t,e,i,s){return e=Math.max(0,e||t.width),i=i||t.height,{width:e,height:Math.max(0,s?Math.floor(e/s):i)}}isAttached(t){return!0}updateConfig(t){}}class cs extends hs{acquireContext(t){return t&&t.getContext&&t.getContext("2d")||null}updateConfig(t){t.options.animation=!1}}const ds="$chartjs",us={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"},fs=t=>null===t||""===t;const gs=!!Se&&{passive:!0};function ps(t,e,i){t&&t.canvas&&t.canvas.removeEventListener(e,i,gs)}function ms(t,e){for(const i of t)if(i===e||i.contains(e))return!0}function xs(t,e,i){const s=t.canvas,n=new MutationObserver((t=>{let e=!1;for(const i of t)e=e||ms(i.addedNodes,s),e=e&&!ms(i.removedNodes,s);e&&i()}));return n.observe(document,{childList:!0,subtree:!0}),n}function bs(t,e,i){const s=t.canvas,n=new MutationObserver((t=>{let e=!1;for(const i of t)e=e||ms(i.removedNodes,s),e=e&&!ms(i.addedNodes,s);e&&i()}));return n.observe(document,{childList:!0,subtree:!0}),n}const _s=new Map;let ys=0;function vs(){const t=window.devicePixelRatio;t!==ys&&(ys=t,_s.forEach(((e,i)=>{i.currentDevicePixelRatio!==t&&e()})))}function Ms(t,e,i){const s=t.canvas,n=s&&ge(s);if(!n)return;const o=ct(((t,e)=>{const s=n.clientWidth;i(t,e),s{const e=t[0],i=e.contentRect.width,s=e.contentRect.height;0===i&&0===s||o(i,s)}));return a.observe(n),function(t,e){_s.size||window.addEventListener("resize",vs),_s.set(t,e)}(t,o),a}function ws(t,e,i){i&&i.disconnect(),"resize"===e&&function(t){_s.delete(t),_s.size||window.removeEventListener("resize",vs)}(t)}function ks(t,e,i){const s=t.canvas,n=ct((e=>{null!==t.ctx&&i(function(t,e){const i=us[t.type]||t.type,{x:s,y:n}=ve(t,e);return{type:i,chart:e,native:t,x:void 0!==s?s:null,y:void 0!==n?n:null}}(e,t))}),t);return function(t,e,i){t&&t.addEventListener(e,i,gs)}(s,e,n),n}class Ss extends hs{acquireContext(t,e){const i=t&&t.getContext&&t.getContext("2d");return i&&i.canvas===t?(function(t,e){const i=t.style,s=t.getAttribute("height"),n=t.getAttribute("width");if(t[ds]={initial:{height:s,width:n,style:{display:i.display,height:i.height,width:i.width}}},i.display=i.display||"block",i.boxSizing=i.boxSizing||"border-box",fs(n)){const e=Pe(t,"width");void 0!==e&&(t.width=e)}if(fs(s))if(""===t.style.height)t.height=t.width/(e||2);else{const e=Pe(t,"height");void 0!==e&&(t.height=e)}}(t,e),i):null}releaseContext(t){const e=t.canvas;if(!e[ds])return!1;const i=e[ds].initial;["height","width"].forEach((t=>{const n=i[t];s(n)?e.removeAttribute(t):e.setAttribute(t,n)}));const n=i.style||{};return Object.keys(n).forEach((t=>{e.style[t]=n[t]})),e.width=e.width,delete e[ds],!0}addEventListener(t,e,i){this.removeEventListener(t,e);const s=t.$proxies||(t.$proxies={}),n={attach:xs,detach:bs,resize:Ms}[e]||ks;s[e]=n(t,e,i)}removeEventListener(t,e){const i=t.$proxies||(t.$proxies={}),s=i[e];if(!s)return;({attach:ws,detach:ws,resize:ws}[e]||ps)(t,e,s),i[e]=void 0}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(t,e,i,s){return we(t,e,i,s)}isAttached(t){const e=t&&ge(t);return!(!e||!e.isConnected)}}function Ps(t){return!fe()||"undefined"!=typeof OffscreenCanvas&&t instanceof OffscreenCanvas?cs:Ss}var Ds=Object.freeze({__proto__:null,BasePlatform:hs,BasicPlatform:cs,DomPlatform:Ss,_detectPlatform:Ps});const Cs="transparent",Os={boolean:(t,e,i)=>i>.5?e:t,color(t,e,i){const s=Qt(t||Cs),n=s.valid&&Qt(e||Cs);return n&&n.valid?n.mix(s,i).hexString():e},number:(t,e,i)=>t+(e-t)*i};class As{constructor(t,e,i,s){const n=e[i];s=Pi([t.to,s,n,t.from]);const o=Pi([t.from,n,s]);this._active=!0,this._fn=t.fn||Os[t.type||typeof o],this._easing=fi[t.easing]||fi.linear,this._start=Math.floor(Date.now()+(t.delay||0)),this._duration=this._total=Math.floor(t.duration),this._loop=!!t.loop,this._target=e,this._prop=i,this._from=o,this._to=s,this._promises=void 0}active(){return this._active}update(t,e,i){if(this._active){this._notify(!1);const s=this._target[this._prop],n=i-this._start,o=this._duration-n;this._start=i,this._duration=Math.floor(Math.max(o,t.duration)),this._total+=n,this._loop=!!t.loop,this._to=Pi([t.to,e,s,t.from]),this._from=Pi([t.from,s,e])}}cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._notify(!1))}tick(t){const e=t-this._start,i=this._duration,s=this._prop,n=this._from,o=this._loop,a=this._to;let r;if(this._active=n!==a&&(o||e1?2-r:r,r=this._easing(Math.min(1,Math.max(0,r))),this._target[s]=this._fn(n,a,r))}wait(){const t=this._promises||(this._promises=[]);return new Promise(((e,i)=>{t.push({res:e,rej:i})}))}_notify(t){const e=t?"res":"rej",i=this._promises||[];for(let t=0;t{const a=t[s];if(!o(a))return;const r={};for(const t of e)r[t]=a[t];(n(a.properties)&&a.properties||[s]).forEach((t=>{t!==s&&i.has(t)||i.set(t,r)}))}))}_animateOptions(t,e){const i=e.options,s=function(t,e){if(!e)return;let i=t.options;if(!i)return void(t.options=e);i.$shared&&(t.options=i=Object.assign({},i,{$shared:!1,$animations:{}}));return i}(t,i);if(!s)return[];const n=this._createAnimations(s,i);return i.$shared&&function(t,e){const i=[],s=Object.keys(e);for(let e=0;e{t.options=i}),(()=>{})),n}_createAnimations(t,e){const i=this._properties,s=[],n=t.$animations||(t.$animations={}),o=Object.keys(e),a=Date.now();let r;for(r=o.length-1;r>=0;--r){const l=o[r];if("$"===l.charAt(0))continue;if("options"===l){s.push(...this._animateOptions(t,e));continue}const h=e[l];let c=n[l];const d=i.get(l);if(c){if(d&&c.active()){c.update(d,h,a);continue}c.cancel()}d&&d.duration?(n[l]=c=new As(d,t,l,h),s.push(c)):t[l]=h}return s}update(t,e){if(0===this._properties.size)return void Object.assign(t,e);const i=this._createAnimations(t,e);return i.length?(bt.add(this._chart,i),!0):void 0}}function Ls(t,e){const i=t&&t.options||{},s=i.reverse,n=void 0===i.min?e:0,o=void 0===i.max?e:0;return{start:s?o:n,end:s?n:o}}function Es(t,e){const i=[],s=t._getSortedDatasetMetas(e);let n,o;for(n=0,o=s.length;n0||!i&&e<0)return n.index}return null}function Vs(t,e){const{chart:i,_cachedMeta:s}=t,n=i._stacks||(i._stacks={}),{iScale:o,vScale:a,index:r}=s,l=o.axis,h=a.axis,c=function(t,e,i){return`${t.id}.${e.id}.${i.stack||i.type}`}(o,a,s),d=e.length;let u;for(let t=0;ti[t].axis===e)).shift()}function Ws(t,e){const i=t.controller.index,s=t.vScale&&t.vScale.axis;if(s){e=e||t._parsed;for(const t of e){const e=t._stacks;if(!e||void 0===e[s]||void 0===e[s][i])return;delete e[s][i],void 0!==e[s]._visualValues&&void 0!==e[s]._visualValues[i]&&delete e[s]._visualValues[i]}}}const Ns=t=>"reset"===t||"none"===t,Hs=(t,e)=>e?t:Object.assign({},t);class js{static defaults={};static datasetElementType=null;static dataElementType=null;constructor(t,e){this.chart=t,this._ctx=t.ctx,this.index=e,this._cachedDataOpts={},this._cachedMeta=this.getMeta(),this._type=this._cachedMeta.type,this.options=void 0,this._parsing=!1,this._data=void 0,this._objectData=void 0,this._sharedOptions=void 0,this._drawStart=void 0,this._drawCount=void 0,this.enableOptionSharing=!1,this.supportsDecimation=!1,this.$context=void 0,this._syncList=[],this.datasetElementType=new.target.datasetElementType,this.dataElementType=new.target.dataElementType,this.initialize()}initialize(){const t=this._cachedMeta;this.configure(),this.linkScales(),t._stacked=Is(t.vScale,t),this.addElements(),this.options.fill&&!this.chart.isPluginEnabled("filler")&&console.warn("Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options")}updateIndex(t){this.index!==t&&Ws(this._cachedMeta),this.index=t}linkScales(){const t=this.chart,e=this._cachedMeta,i=this.getDataset(),s=(t,e,i,s)=>"x"===t?e:"r"===t?s:i,n=e.xAxisID=l(i.xAxisID,Bs(t,"x")),o=e.yAxisID=l(i.yAxisID,Bs(t,"y")),a=e.rAxisID=l(i.rAxisID,Bs(t,"r")),r=e.indexAxis,h=e.iAxisID=s(r,n,o,a),c=e.vAxisID=s(r,o,n,a);e.xScale=this.getScaleForId(n),e.yScale=this.getScaleForId(o),e.rScale=this.getScaleForId(a),e.iScale=this.getScaleForId(h),e.vScale=this.getScaleForId(c)}getDataset(){return this.chart.data.datasets[this.index]}getMeta(){return this.chart.getDatasetMeta(this.index)}getScaleForId(t){return this.chart.scales[t]}_getOtherScale(t){const e=this._cachedMeta;return t===e.iScale?e.vScale:e.iScale}reset(){this._update("reset")}_destroy(){const t=this._cachedMeta;this._data&&rt(this._data,this),t._stacked&&Ws(t)}_dataCheck(){const t=this.getDataset(),e=t.data||(t.data=[]),i=this._data;if(o(e)){const t=this._cachedMeta;this._data=function(t,e){const{iScale:i,vScale:s}=e,n="x"===i.axis?"x":"y",o="x"===s.axis?"x":"y",a=Object.keys(t),r=new Array(a.length);let l,h,c;for(l=0,h=a.length;l0&&i._parsed[t-1];if(!1===this._parsing)i._parsed=s,i._sorted=!0,d=s;else{d=n(s[t])?this.parseArrayData(i,s,t,e):o(s[t])?this.parseObjectData(i,s,t,e):this.parsePrimitiveData(i,s,t,e);const a=()=>null===c[l]||f&&c[l]t&&!e.hidden&&e._stacked&&{keys:Es(i,!0),values:null})(e,i,this.chart),h={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY},{min:c,max:d}=function(t){const{min:e,max:i,minDefined:s,maxDefined:n}=t.getUserBounds();return{min:s?e:Number.NEGATIVE_INFINITY,max:n?i:Number.POSITIVE_INFINITY}}(r);let u,f;function g(){f=s[u];const e=f[r.axis];return!a(f[t.axis])||c>e||d=0;--u)if(!g()){this.updateRangeFromParsed(h,t,f,l);break}return h}getAllParsedValues(t){const e=this._cachedMeta._parsed,i=[];let s,n,o;for(s=0,n=e.length;s=0&&tthis.getContext(i,s,e)),c);return f.$shared&&(f.$shared=r,n[o]=Object.freeze(Hs(f,r))),f}_resolveAnimations(t,e,i){const s=this.chart,n=this._cachedDataOpts,o=`animation-${e}`,a=n[o];if(a)return a;let r;if(!1!==s.options.animation){const s=this.chart.config,n=s.datasetAnimationScopeKeys(this._type,e),o=s.getOptionScopes(this.getDataset(),n);r=s.createResolver(o,this.getContext(t,i,e))}const l=new Ts(s,r&&r.animations);return r&&r._cacheable&&(n[o]=Object.freeze(l)),l}getSharedOptions(t){if(t.$shared)return this._sharedOptions||(this._sharedOptions=Object.assign({},t))}includeOptions(t,e){return!e||Ns(t)||this.chart._animationsDisabled}_getSharedOptions(t,e){const i=this.resolveDataElementOptions(t,e),s=this._sharedOptions,n=this.getSharedOptions(i),o=this.includeOptions(e,n)||n!==s;return this.updateSharedOptions(n,e,i),{sharedOptions:n,includeOptions:o}}updateElement(t,e,i,s){Ns(s)?Object.assign(t,i):this._resolveAnimations(e,s).update(t,i)}updateSharedOptions(t,e,i){t&&!Ns(e)&&this._resolveAnimations(void 0,e).update(t,i)}_setStyle(t,e,i,s){t.active=s;const n=this.getStyle(e,s);this._resolveAnimations(e,i,s).update(t,{options:!s&&this.getSharedOptions(n)||n})}removeHoverStyle(t,e,i){this._setStyle(t,i,"active",!1)}setHoverStyle(t,e,i){this._setStyle(t,i,"active",!0)}_removeDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!1)}_setDatasetHoverStyle(){const t=this._cachedMeta.dataset;t&&this._setStyle(t,void 0,"active",!0)}_resyncElements(t){const e=this._data,i=this._cachedMeta.data;for(const[t,e,i]of this._syncList)this[t](e,i);this._syncList=[];const s=i.length,n=e.length,o=Math.min(n,s);o&&this.parse(0,o),n>s?this._insertElements(s,n-s,t):n{for(t.length+=e,a=t.length-1;a>=o;a--)t[a]=t[a-e]};for(r(n),a=t;a{s[t]=i[t]&&i[t].active()?i[t]._to:this[t]})),s}}function Ys(t,e){const i=t.options.ticks,n=function(t){const e=t.options.offset,i=t._tickSize(),s=t._length/i+(e?0:1),n=t._maxLength/i;return Math.floor(Math.min(s,n))}(t),o=Math.min(i.maxTicksLimit||n,n),a=i.major.enabled?function(t){const e=[];let i,s;for(i=0,s=t.length;io)return function(t,e,i,s){let n,o=0,a=i[0];for(s=Math.ceil(s),n=0;nn)return e}return Math.max(n,1)}(a,e,o);if(r>0){let t,i;const n=r>1?Math.round((h-l)/(r-1)):null;for(Us(e,c,d,s(n)?0:l-n,l),t=0,i=r-1;t"top"===e||"left"===e?t[e]+i:t[e]-i,qs=(t,e)=>Math.min(e||t,t);function Ks(t,e){const i=[],s=t.length/e,n=t.length;let o=0;for(;oa+r)))return h}function Js(t){return t.drawTicks?t.tickLength:0}function Zs(t,e){if(!t.display)return 0;const i=Si(t.font,e),s=ki(t.padding);return(n(t.text)?t.text.length:1)*i.lineHeight+s.height}function Qs(t,e,i){let s=ut(t);return(i&&"right"!==e||!i&&"right"===e)&&(s=(t=>"left"===t?"right":"right"===t?"left":t)(s)),s}class tn extends $s{constructor(t){super(),this.id=t.id,this.type=t.type,this.options=void 0,this.ctx=t.ctx,this.chart=t.chart,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this._margins={left:0,right:0,top:0,bottom:0},this.maxWidth=void 0,this.maxHeight=void 0,this.paddingTop=void 0,this.paddingBottom=void 0,this.paddingLeft=void 0,this.paddingRight=void 0,this.axis=void 0,this.labelRotation=void 0,this.min=void 0,this.max=void 0,this._range=void 0,this.ticks=[],this._gridLineItems=null,this._labelItems=null,this._labelSizes=null,this._length=0,this._maxLength=0,this._longestTextCache={},this._startPixel=void 0,this._endPixel=void 0,this._reversePixels=!1,this._userMax=void 0,this._userMin=void 0,this._suggestedMax=void 0,this._suggestedMin=void 0,this._ticksLength=0,this._borderValue=0,this._cache={},this._dataLimitsCached=!1,this.$context=void 0}init(t){this.options=t.setContext(this.getContext()),this.axis=t.axis,this._userMin=this.parse(t.min),this._userMax=this.parse(t.max),this._suggestedMin=this.parse(t.suggestedMin),this._suggestedMax=this.parse(t.suggestedMax)}parse(t,e){return t}getUserBounds(){let{_userMin:t,_userMax:e,_suggestedMin:i,_suggestedMax:s}=this;return t=r(t,Number.POSITIVE_INFINITY),e=r(e,Number.NEGATIVE_INFINITY),i=r(i,Number.POSITIVE_INFINITY),s=r(s,Number.NEGATIVE_INFINITY),{min:r(t,i),max:r(e,s),minDefined:a(t),maxDefined:a(e)}}getMinMax(t){let e,{min:i,max:s,minDefined:n,maxDefined:o}=this.getUserBounds();if(n&&o)return{min:i,max:s};const a=this.getMatchingVisibleMetas();for(let r=0,l=a.length;rs?s:i,s=n&&i>s?i:s,{min:r(i,r(s,i)),max:r(s,r(i,s))}}getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){const t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels||[]}getLabelItems(t=this.chart.chartArea){return this._labelItems||(this._labelItems=this._computeLabelItems(t))}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){d(this.options.beforeUpdate,[this])}update(t,e,i){const{beginAtZero:s,grace:n,ticks:o}=this.options,a=o.sampleSize;this.beforeUpdate(),this.maxWidth=t,this.maxHeight=e,this._margins=i=Object.assign({left:0,right:0,top:0,bottom:0},i),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?this.width+i.left+i.right:this.height+i.top+i.bottom,this._dataLimitsCached||(this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=Di(this,n,s),this._dataLimitsCached=!0),this.beforeBuildTicks(),this.ticks=this.buildTicks()||[],this.afterBuildTicks();const r=a=n||i<=1||!this.isHorizontal())return void(this.labelRotation=s);const h=this._getLabelSizes(),c=h.widest.width,d=h.highest.height,u=Z(this.chart.width-c,0,this.maxWidth);o=t.offset?this.maxWidth/i:u/(i-1),c+6>o&&(o=u/(i-(t.offset?.5:1)),a=this.maxHeight-Js(t.grid)-e.padding-Zs(t.title,this.chart.options.font),r=Math.sqrt(c*c+d*d),l=Y(Math.min(Math.asin(Z((h.highest.height+6)/o,-1,1)),Math.asin(Z(a/r,-1,1))-Math.asin(Z(d/r,-1,1)))),l=Math.max(s,Math.min(n,l))),this.labelRotation=l}afterCalculateLabelRotation(){d(this.options.afterCalculateLabelRotation,[this])}afterAutoSkip(){}beforeFit(){d(this.options.beforeFit,[this])}fit(){const t={width:0,height:0},{chart:e,options:{ticks:i,title:s,grid:n}}=this,o=this._isVisible(),a=this.isHorizontal();if(o){const o=Zs(s,e.options.font);if(a?(t.width=this.maxWidth,t.height=Js(n)+o):(t.height=this.maxHeight,t.width=Js(n)+o),i.display&&this.ticks.length){const{first:e,last:s,widest:n,highest:o}=this._getLabelSizes(),r=2*i.padding,l=$(this.labelRotation),h=Math.cos(l),c=Math.sin(l);if(a){const e=i.mirror?0:c*n.width+h*o.height;t.height=Math.min(this.maxHeight,t.height+e+r)}else{const e=i.mirror?0:h*n.width+c*o.height;t.width=Math.min(this.maxWidth,t.width+e+r)}this._calculatePadding(e,s,c,h)}}this._handleMargins(),a?(this.width=this._length=e.width-this._margins.left-this._margins.right,this.height=t.height):(this.width=t.width,this.height=this._length=e.height-this._margins.top-this._margins.bottom)}_calculatePadding(t,e,i,s){const{ticks:{align:n,padding:o},position:a}=this.options,r=0!==this.labelRotation,l="top"!==a&&"x"===this.axis;if(this.isHorizontal()){const a=this.getPixelForTick(0)-this.left,h=this.right-this.getPixelForTick(this.ticks.length-1);let c=0,d=0;r?l?(c=s*t.width,d=i*e.height):(c=i*t.height,d=s*e.width):"start"===n?d=e.width:"end"===n?c=t.width:"inner"!==n&&(c=t.width/2,d=e.width/2),this.paddingLeft=Math.max((c-a+o)*this.width/(this.width-a),0),this.paddingRight=Math.max((d-h+o)*this.width/(this.width-h),0)}else{let i=e.height/2,s=t.height/2;"start"===n?(i=0,s=t.height):"end"===n&&(i=e.height,s=0),this.paddingTop=i+o,this.paddingBottom=s+o}}_handleMargins(){this._margins&&(this._margins.left=Math.max(this.paddingLeft,this._margins.left),this._margins.top=Math.max(this.paddingTop,this._margins.top),this._margins.right=Math.max(this.paddingRight,this._margins.right),this._margins.bottom=Math.max(this.paddingBottom,this._margins.bottom))}afterFit(){d(this.options.afterFit,[this])}isHorizontal(){const{axis:t,position:e}=this.options;return"top"===e||"bottom"===e||"x"===t}isFullSize(){return this.options.fullSize}_convertTicksToLabels(t){let e,i;for(this.beforeTickToLabelConversion(),this.generateTickLabels(t),e=0,i=t.length;e{const i=t.gc,s=i.length/2;let n;if(s>e){for(n=0;n({width:r[t]||0,height:l[t]||0});return{first:P(0),last:P(e-1),widest:P(k),highest:P(S),widths:r,heights:l}}getLabelForValue(t){return t}getPixelForValue(t,e){return NaN}getValueForPixel(t){}getPixelForTick(t){const e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getPixelForDecimal(t){this._reversePixels&&(t=1-t);const e=this._startPixel+t*this._length;return Q(this._alignToPixels?Ae(this.chart,e,0):e)}getDecimalForPixel(t){const e=(t-this._startPixel)/this._length;return this._reversePixels?1-e:e}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){const{min:t,max:e}=this;return t<0&&e<0?e:t>0&&e>0?t:0}getContext(t){const e=this.ticks||[];if(t>=0&&ta*s?a/i:r/s:r*s0}_computeGridLineItems(t){const e=this.axis,i=this.chart,s=this.options,{grid:n,position:a,border:r}=s,h=n.offset,c=this.isHorizontal(),d=this.ticks.length+(h?1:0),u=Js(n),f=[],g=r.setContext(this.getContext()),p=g.display?g.width:0,m=p/2,x=function(t){return Ae(i,t,p)};let b,_,y,v,M,w,k,S,P,D,C,O;if("top"===a)b=x(this.bottom),w=this.bottom-u,S=b-m,D=x(t.top)+m,O=t.bottom;else if("bottom"===a)b=x(this.top),D=t.top,O=x(t.bottom)-m,w=b+m,S=this.top+u;else if("left"===a)b=x(this.right),M=this.right-u,k=b-m,P=x(t.left)+m,C=t.right;else if("right"===a)b=x(this.left),P=t.left,C=x(t.right)-m,M=b+m,k=this.left+u;else if("x"===e){if("center"===a)b=x((t.top+t.bottom)/2+.5);else if(o(a)){const t=Object.keys(a)[0],e=a[t];b=x(this.chart.scales[t].getPixelForValue(e))}D=t.top,O=t.bottom,w=b+m,S=w+u}else if("y"===e){if("center"===a)b=x((t.left+t.right)/2);else if(o(a)){const t=Object.keys(a)[0],e=a[t];b=x(this.chart.scales[t].getPixelForValue(e))}M=b-m,k=M-u,P=t.left,C=t.right}const A=l(s.ticks.maxTicksLimit,d),T=Math.max(1,Math.ceil(d/A));for(_=0;_0&&(o-=s/2)}d={left:o,top:n,width:s+e.width,height:i+e.height,color:t.backdropColor}}x.push({label:v,font:P,textOffset:O,options:{rotation:m,color:i,strokeColor:o,strokeWidth:h,textAlign:f,textBaseline:A,translation:[M,w],backdrop:d}})}return x}_getXAxisLabelAlignment(){const{position:t,ticks:e}=this.options;if(-$(this.labelRotation))return"top"===t?"left":"right";let i="center";return"start"===e.align?i="left":"end"===e.align?i="right":"inner"===e.align&&(i="inner"),i}_getYAxisLabelAlignment(t){const{position:e,ticks:{crossAlign:i,mirror:s,padding:n}}=this.options,o=t+n,a=this._getLabelSizes().widest.width;let r,l;return"left"===e?s?(l=this.right+n,"near"===i?r="left":"center"===i?(r="center",l+=a/2):(r="right",l+=a)):(l=this.right-o,"near"===i?r="right":"center"===i?(r="center",l-=a/2):(r="left",l=this.left)):"right"===e?s?(l=this.left+n,"near"===i?r="right":"center"===i?(r="center",l-=a/2):(r="left",l-=a)):(l=this.left+o,"near"===i?r="left":"center"===i?(r="center",l+=a/2):(r="right",l=this.right)):r="right",{textAlign:r,x:l}}_computeLabelArea(){if(this.options.ticks.mirror)return;const t=this.chart,e=this.options.position;return"left"===e||"right"===e?{top:0,left:this.left,bottom:t.height,right:this.right}:"top"===e||"bottom"===e?{top:this.top,left:0,bottom:this.bottom,right:t.width}:void 0}drawBackground(){const{ctx:t,options:{backgroundColor:e},left:i,top:s,width:n,height:o}=this;e&&(t.save(),t.fillStyle=e,t.fillRect(i,s,n,o),t.restore())}getLineWidthForValue(t){const e=this.options.grid;if(!this._isVisible()||!e.display)return 0;const i=this.ticks.findIndex((e=>e.value===t));if(i>=0){return e.setContext(this.getContext(i)).lineWidth}return 0}drawGrid(t){const e=this.options.grid,i=this.ctx,s=this._gridLineItems||(this._gridLineItems=this._computeGridLineItems(t));let n,o;const a=(t,e,s)=>{s.width&&s.color&&(i.save(),i.lineWidth=s.width,i.strokeStyle=s.color,i.setLineDash(s.borderDash||[]),i.lineDashOffset=s.borderDashOffset,i.beginPath(),i.moveTo(t.x,t.y),i.lineTo(e.x,e.y),i.stroke(),i.restore())};if(e.display)for(n=0,o=s.length;n{this.drawBackground(),this.drawGrid(t),this.drawTitle()}},{z:s,draw:()=>{this.drawBorder()}},{z:e,draw:t=>{this.drawLabels(t)}}]:[{z:e,draw:t=>{this.draw(t)}}]}getMatchingVisibleMetas(t){const e=this.chart.getSortedVisibleDatasetMetas(),i=this.axis+"AxisID",s=[];let n,o;for(n=0,o=e.length;n{const s=i.split("."),n=s.pop(),o=[t].concat(s).join("."),a=e[i].split("."),r=a.pop(),l=a.join(".");ue.route(o,n,l,r)}))}(e,t.defaultRoutes);t.descriptors&&ue.describe(e,t.descriptors)}(t,o,i),this.override&&ue.override(t.id,t.overrides)),o}get(t){return this.items[t]}unregister(t){const e=this.items,i=t.id,s=this.scope;i in e&&delete e[i],s&&i in ue[s]&&(delete ue[s][i],this.override&&delete re[i])}}class sn{constructor(){this.controllers=new en(js,"datasets",!0),this.elements=new en($s,"elements"),this.plugins=new en(Object,"plugins"),this.scales=new en(tn,"scales"),this._typedRegistries=[this.controllers,this.scales,this.elements]}add(...t){this._each("register",t)}remove(...t){this._each("unregister",t)}addControllers(...t){this._each("register",t,this.controllers)}addElements(...t){this._each("register",t,this.elements)}addPlugins(...t){this._each("register",t,this.plugins)}addScales(...t){this._each("register",t,this.scales)}getController(t){return this._get(t,this.controllers,"controller")}getElement(t){return this._get(t,this.elements,"element")}getPlugin(t){return this._get(t,this.plugins,"plugin")}getScale(t){return this._get(t,this.scales,"scale")}removeControllers(...t){this._each("unregister",t,this.controllers)}removeElements(...t){this._each("unregister",t,this.elements)}removePlugins(...t){this._each("unregister",t,this.plugins)}removeScales(...t){this._each("unregister",t,this.scales)}_each(t,e,i){[...e].forEach((e=>{const s=i||this._getRegistryForType(e);i||s.isForType(e)||s===this.plugins&&e.id?this._exec(t,s,e):u(e,(e=>{const s=i||this._getRegistryForType(e);this._exec(t,s,e)}))}))}_exec(t,e,i){const s=w(t);d(i["before"+s],[],i),e[t](i),d(i["after"+s],[],i)}_getRegistryForType(t){for(let e=0;et.filter((t=>!e.some((e=>t.plugin.id===e.plugin.id))));this._notify(s(e,i),t,"stop"),this._notify(s(i,e),t,"start")}}function an(t,e){return e||!1!==t?!0===t?{}:t:null}function rn(t,{plugin:e,local:i},s,n){const o=t.pluginScopeKeys(e),a=t.getOptionScopes(s,o);return i&&e.defaults&&a.push(e.defaults),t.createResolver(a,n,[""],{scriptable:!1,indexable:!1,allKeys:!0})}function ln(t,e){const i=ue.datasets[t]||{};return((e.datasets||{})[t]||{}).indexAxis||e.indexAxis||i.indexAxis||"x"}function hn(t){if("x"===t||"y"===t||"r"===t)return t}function cn(t,...e){if(hn(t))return t;for(const s of e){const e=s.axis||("top"===(i=s.position)||"bottom"===i?"x":"left"===i||"right"===i?"y":void 0)||t.length>1&&hn(t[0].toLowerCase());if(e)return e}var i;throw new Error(`Cannot determine type of '${t}' axis. Please provide 'axis' or 'position' option.`)}function dn(t,e,i){if(i[e+"AxisID"]===t)return{axis:e}}function un(t,e){const i=re[t.type]||{scales:{}},s=e.scales||{},n=ln(t.type,e),a=Object.create(null);return Object.keys(s).forEach((e=>{const r=s[e];if(!o(r))return console.error(`Invalid scale configuration for scale: ${e}`);if(r._proxy)return console.warn(`Ignoring resolver passed as options for scale: ${e}`);const l=cn(e,r,function(t,e){if(e.data&&e.data.datasets){const i=e.data.datasets.filter((e=>e.xAxisID===t||e.yAxisID===t));if(i.length)return dn(t,"x",i[0])||dn(t,"y",i[0])}return{}}(e,t),ue.scales[r.type]),h=function(t,e){return t===e?"_index_":"_value_"}(l,n),c=i.scales||{};a[e]=b(Object.create(null),[{axis:l},r,c[l],c[h]])})),t.data.datasets.forEach((i=>{const n=i.type||t.type,o=i.indexAxis||ln(n,e),r=(re[n]||{}).scales||{};Object.keys(r).forEach((t=>{const e=function(t,e){let i=t;return"_index_"===t?i=e:"_value_"===t&&(i="x"===e?"y":"x"),i}(t,o),n=i[e+"AxisID"]||e;a[n]=a[n]||Object.create(null),b(a[n],[{axis:e},s[n],r[t]])}))})),Object.keys(a).forEach((t=>{const e=a[t];b(e,[ue.scales[e.type],ue.scale])})),a}function fn(t){const e=t.options||(t.options={});e.plugins=l(e.plugins,{}),e.scales=un(t,e)}function gn(t){return(t=t||{}).datasets=t.datasets||[],t.labels=t.labels||[],t}const pn=new Map,mn=new Set;function xn(t,e){let i=pn.get(t);return i||(i=e(),pn.set(t,i),mn.add(i)),i}const bn=(t,e,i)=>{const s=M(e,i);void 0!==s&&t.add(s)};class _n{constructor(t){this._config=function(t){return(t=t||{}).data=gn(t.data),fn(t),t}(t),this._scopeCache=new Map,this._resolverCache=new Map}get platform(){return this._config.platform}get type(){return this._config.type}set type(t){this._config.type=t}get data(){return this._config.data}set data(t){this._config.data=gn(t)}get options(){return this._config.options}set options(t){this._config.options=t}get plugins(){return this._config.plugins}update(){const t=this._config;this.clearCache(),fn(t)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(t){return xn(t,(()=>[[`datasets.${t}`,""]]))}datasetAnimationScopeKeys(t,e){return xn(`${t}.transition.${e}`,(()=>[[`datasets.${t}.transitions.${e}`,`transitions.${e}`],[`datasets.${t}`,""]]))}datasetElementScopeKeys(t,e){return xn(`${t}-${e}`,(()=>[[`datasets.${t}.elements.${e}`,`datasets.${t}`,`elements.${e}`,""]]))}pluginScopeKeys(t){const e=t.id;return xn(`${this.type}-plugin-${e}`,(()=>[[`plugins.${e}`,...t.additionalOptionScopes||[]]]))}_cachedScopes(t,e){const i=this._scopeCache;let s=i.get(t);return s&&!e||(s=new Map,i.set(t,s)),s}getOptionScopes(t,e,i){const{options:s,type:n}=this,o=this._cachedScopes(t,i),a=o.get(e);if(a)return a;const r=new Set;e.forEach((e=>{t&&(r.add(t),e.forEach((e=>bn(r,t,e)))),e.forEach((t=>bn(r,s,t))),e.forEach((t=>bn(r,re[n]||{},t))),e.forEach((t=>bn(r,ue,t))),e.forEach((t=>bn(r,le,t)))}));const l=Array.from(r);return 0===l.length&&l.push(Object.create(null)),mn.has(e)&&o.set(e,l),l}chartOptionScopes(){const{options:t,type:e}=this;return[t,re[e]||{},ue.datasets[e]||{},{type:e},ue,le]}resolveNamedOptions(t,e,i,s=[""]){const o={$shared:!0},{resolver:a,subPrefixes:r}=yn(this._resolverCache,t,s);let l=a;if(function(t,e){const{isScriptable:i,isIndexable:s}=Ye(t);for(const o of e){const e=i(o),a=s(o),r=(a||e)&&t[o];if(e&&(S(r)||vn(r))||a&&n(r))return!0}return!1}(a,e)){o.$shared=!1;l=$e(a,i=S(i)?i():i,this.createResolver(t,i,r))}for(const t of e)o[t]=l[t];return o}createResolver(t,e,i=[""],s){const{resolver:n}=yn(this._resolverCache,t,i);return o(e)?$e(n,e,void 0,s):n}}function yn(t,e,i){let s=t.get(e);s||(s=new Map,t.set(e,s));const n=i.join();let o=s.get(n);if(!o){o={resolver:je(e,i),subPrefixes:i.filter((t=>!t.toLowerCase().includes("hover")))},s.set(n,o)}return o}const vn=t=>o(t)&&Object.getOwnPropertyNames(t).some((e=>S(t[e])));const Mn=["top","bottom","left","right","chartArea"];function wn(t,e){return"top"===t||"bottom"===t||-1===Mn.indexOf(t)&&"x"===e}function kn(t,e){return function(i,s){return i[t]===s[t]?i[e]-s[e]:i[t]-s[t]}}function Sn(t){const e=t.chart,i=e.options.animation;e.notifyPlugins("afterRender"),d(i&&i.onComplete,[t],e)}function Pn(t){const e=t.chart,i=e.options.animation;d(i&&i.onProgress,[t],e)}function Dn(t){return fe()&&"string"==typeof t?t=document.getElementById(t):t&&t.length&&(t=t[0]),t&&t.canvas&&(t=t.canvas),t}const Cn={},On=t=>{const e=Dn(t);return Object.values(Cn).filter((t=>t.canvas===e)).pop()};function An(t,e,i){const s=Object.keys(t);for(const n of s){const s=+n;if(s>=e){const o=t[n];delete t[n],(i>0||s>e)&&(t[s+i]=o)}}}class Tn{static defaults=ue;static instances=Cn;static overrides=re;static registry=nn;static version="4.5.1";static getChart=On;static register(...t){nn.add(...t),Ln()}static unregister(...t){nn.remove(...t),Ln()}constructor(t,e){const s=this.config=new _n(e),n=Dn(t),o=On(n);if(o)throw new Error("Canvas is already in use. Chart with ID '"+o.id+"' must be destroyed before the canvas with ID '"+o.canvas.id+"' can be reused.");const a=s.createResolver(s.chartOptionScopes(),this.getContext());this.platform=new(s.platform||Ps(n)),this.platform.updateConfig(s);const r=this.platform.acquireContext(n,a.aspectRatio),l=r&&r.canvas,h=l&&l.height,c=l&&l.width;this.id=i(),this.ctx=r,this.canvas=l,this.width=c,this.height=h,this._options=a,this._aspectRatio=this.aspectRatio,this._layers=[],this._metasets=[],this._stacks=void 0,this.boxes=[],this.currentDevicePixelRatio=void 0,this.chartArea=void 0,this._active=[],this._lastEvent=void 0,this._listeners={},this._responsiveListeners=void 0,this._sortedMetasets=[],this.scales={},this._plugins=new on,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=dt((t=>this.update(t)),a.resizeDelay||0),this._dataChanges=[],Cn[this.id]=this,r&&l?(bt.listen(this,"complete",Sn),bt.listen(this,"progress",Pn),this._initialize(),this.attached&&this.update()):console.error("Failed to create chart: can't acquire context from the given item")}get aspectRatio(){const{options:{aspectRatio:t,maintainAspectRatio:e},width:i,height:n,_aspectRatio:o}=this;return s(t)?e&&o?o:n?i/n:null:t}get data(){return this.config.data}set data(t){this.config.data=t}get options(){return this._options}set options(t){this.config.options=t}get registry(){return nn}_initialize(){return this.notifyPlugins("beforeInit"),this.options.responsive?this.resize():ke(this,this.options.devicePixelRatio),this.bindEvents(),this.notifyPlugins("afterInit"),this}clear(){return Te(this.canvas,this.ctx),this}stop(){return bt.stop(this),this}resize(t,e){bt.running(this)?this._resizeBeforeDraw={width:t,height:e}:this._resize(t,e)}_resize(t,e){const i=this.options,s=this.canvas,n=i.maintainAspectRatio&&this.aspectRatio,o=this.platform.getMaximumSize(s,t,e,n),a=i.devicePixelRatio||this.platform.getDevicePixelRatio(),r=this.width?"resize":"attach";this.width=o.width,this.height=o.height,this._aspectRatio=this.aspectRatio,ke(this,a,!0)&&(this.notifyPlugins("resize",{size:o}),d(i.onResize,[this,o],this),this.attached&&this._doResize(r)&&this.render())}ensureScalesHaveIDs(){u(this.options.scales||{},((t,e)=>{t.id=e}))}buildOrUpdateScales(){const t=this.options,e=t.scales,i=this.scales,s=Object.keys(i).reduce(((t,e)=>(t[e]=!1,t)),{});let n=[];e&&(n=n.concat(Object.keys(e).map((t=>{const i=e[t],s=cn(t,i),n="r"===s,o="x"===s;return{options:i,dposition:n?"chartArea":o?"bottom":"left",dtype:n?"radialLinear":o?"category":"linear"}})))),u(n,(e=>{const n=e.options,o=n.id,a=cn(o,n),r=l(n.type,e.dtype);void 0!==n.position&&wn(n.position,a)===wn(e.dposition)||(n.position=e.dposition),s[o]=!0;let h=null;if(o in i&&i[o].type===r)h=i[o];else{h=new(nn.getScale(r))({id:o,type:r,ctx:this.ctx,chart:this}),i[h.id]=h}h.init(n,t)})),u(s,((t,e)=>{t||delete i[e]})),u(i,(t=>{ls.configure(this,t,t.options),ls.addBox(this,t)}))}_updateMetasets(){const t=this._metasets,e=this.data.datasets.length,i=t.length;if(t.sort(((t,e)=>t.index-e.index)),i>e){for(let t=e;te.length&&delete this._stacks,t.forEach(((t,i)=>{0===e.filter((e=>e===t._dataset)).length&&this._destroyDatasetMeta(i)}))}buildOrUpdateControllers(){const t=[],e=this.data.datasets;let i,s;for(this._removeUnreferencedMetasets(),i=0,s=e.length;i{this.getDatasetMeta(e).controller.reset()}),this)}reset(){this._resetElements(),this.notifyPlugins("reset")}update(t){const e=this.config;e.update();const i=this._options=e.createResolver(e.chartOptionScopes(),this.getContext()),s=this._animationsDisabled=!i.animation;if(this._updateScales(),this._checkEventBindings(),this._updateHiddenIndices(),this._plugins.invalidate(),!1===this.notifyPlugins("beforeUpdate",{mode:t,cancelable:!0}))return;const n=this.buildOrUpdateControllers();this.notifyPlugins("beforeElementsUpdate");let o=0;for(let t=0,e=this.data.datasets.length;t{t.reset()})),this._updateDatasets(t),this.notifyPlugins("afterUpdate",{mode:t}),this._layers.sort(kn("z","_idx"));const{_active:a,_lastEvent:r}=this;r?this._eventHandler(r,!0):a.length&&this._updateHoverStyles(a,a,!0),this.render()}_updateScales(){u(this.scales,(t=>{ls.removeBox(this,t)})),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){const t=this.options,e=new Set(Object.keys(this._listeners)),i=new Set(t.events);P(e,i)&&!!this._responsiveListeners===t.responsive||(this.unbindEvents(),this.bindEvents())}_updateHiddenIndices(){const{_hiddenIndices:t}=this,e=this._getUniformDataChanges()||[];for(const{method:i,start:s,count:n}of e){An(t,s,"_removeElements"===i?-n:n)}}_getUniformDataChanges(){const t=this._dataChanges;if(!t||!t.length)return;this._dataChanges=[];const e=this.data.datasets.length,i=e=>new Set(t.filter((t=>t[0]===e)).map(((t,e)=>e+","+t.splice(1).join(",")))),s=i(0);for(let t=1;tt.split(","))).map((t=>({method:t[1],start:+t[2],count:+t[3]})))}_updateLayout(t){if(!1===this.notifyPlugins("beforeLayout",{cancelable:!0}))return;ls.update(this,this.width,this.height,t);const e=this.chartArea,i=e.width<=0||e.height<=0;this._layers=[],u(this.boxes,(t=>{i&&"chartArea"===t.position||(t.configure&&t.configure(),this._layers.push(...t._layers()))}),this),this._layers.forEach(((t,e)=>{t._idx=e})),this.notifyPlugins("afterLayout")}_updateDatasets(t){if(!1!==this.notifyPlugins("beforeDatasetsUpdate",{mode:t,cancelable:!0})){for(let t=0,e=this.data.datasets.length;t=0;--e)this._drawDataset(t[e]);this.notifyPlugins("afterDatasetsDraw")}_drawDataset(t){const e=this.ctx,i={meta:t,index:t.index,cancelable:!0},s=Ni(this,t);!1!==this.notifyPlugins("beforeDatasetDraw",i)&&(s&&Ie(e,s),t.controller.draw(),s&&ze(e),i.cancelable=!1,this.notifyPlugins("afterDatasetDraw",i))}isPointInArea(t){return Re(t,this.chartArea,this._minPadding)}getElementsAtEventForMode(t,e,i,s){const n=Ki.modes[e];return"function"==typeof n?n(this,t,i,s):[]}getDatasetMeta(t){const e=this.data.datasets[t],i=this._metasets;let s=i.filter((t=>t&&t._dataset===e)).pop();return s||(s={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:e&&e.order||0,index:t,_dataset:e,_parsed:[],_sorted:!1},i.push(s)),s}getContext(){return this.$context||(this.$context=Ci(null,{chart:this,type:"chart"}))}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(t){const e=this.data.datasets[t];if(!e)return!1;const i=this.getDatasetMeta(t);return"boolean"==typeof i.hidden?!i.hidden:!e.hidden}setDatasetVisibility(t,e){this.getDatasetMeta(t).hidden=!e}toggleDataVisibility(t){this._hiddenIndices[t]=!this._hiddenIndices[t]}getDataVisibility(t){return!this._hiddenIndices[t]}_updateVisibility(t,e,i){const s=i?"show":"hide",n=this.getDatasetMeta(t),o=n.controller._resolveAnimations(void 0,s);k(e)?(n.data[e].hidden=!i,this.update()):(this.setDatasetVisibility(t,i),o.update(n,{visible:i}),this.update((e=>e.datasetIndex===t?s:void 0)))}hide(t,e){this._updateVisibility(t,e,!1)}show(t,e){this._updateVisibility(t,e,!0)}_destroyDatasetMeta(t){const e=this._metasets[t];e&&e.controller&&e.controller._destroy(),delete this._metasets[t]}_stop(){let t,e;for(this.stop(),bt.remove(this),t=0,e=this.data.datasets.length;t{e.addEventListener(this,i,s),t[i]=s},s=(t,e,i)=>{t.offsetX=e,t.offsetY=i,this._eventHandler(t)};u(this.options.events,(t=>i(t,s)))}bindResponsiveEvents(){this._responsiveListeners||(this._responsiveListeners={});const t=this._responsiveListeners,e=this.platform,i=(i,s)=>{e.addEventListener(this,i,s),t[i]=s},s=(i,s)=>{t[i]&&(e.removeEventListener(this,i,s),delete t[i])},n=(t,e)=>{this.canvas&&this.resize(t,e)};let o;const a=()=>{s("attach",a),this.attached=!0,this.resize(),i("resize",n),i("detach",o)};o=()=>{this.attached=!1,s("resize",n),this._stop(),this._resize(0,0),i("attach",a)},e.isAttached(this.canvas)?a():o()}unbindEvents(){u(this._listeners,((t,e)=>{this.platform.removeEventListener(this,e,t)})),this._listeners={},u(this._responsiveListeners,((t,e)=>{this.platform.removeEventListener(this,e,t)})),this._responsiveListeners=void 0}updateHoverStyle(t,e,i){const s=i?"set":"remove";let n,o,a,r;for("dataset"===e&&(n=this.getDatasetMeta(t[0].datasetIndex),n.controller["_"+s+"DatasetHoverStyle"]()),a=0,r=t.length;a{const i=this.getDatasetMeta(t);if(!i)throw new Error("No dataset found at index "+t);return{datasetIndex:t,element:i.data[e],index:e}}));!f(i,e)&&(this._active=i,this._lastEvent=null,this._updateHoverStyles(i,e))}notifyPlugins(t,e,i){return this._plugins.notify(this,t,e,i)}isPluginEnabled(t){return 1===this._plugins._cache.filter((e=>e.plugin.id===t)).length}_updateHoverStyles(t,e,i){const s=this.options.hover,n=(t,e)=>t.filter((t=>!e.some((e=>t.datasetIndex===e.datasetIndex&&t.index===e.index)))),o=n(e,t),a=i?t:n(t,e);o.length&&this.updateHoverStyle(o,s.mode,!1),a.length&&s.mode&&this.updateHoverStyle(a,s.mode,!0)}_eventHandler(t,e){const i={event:t,replay:e,cancelable:!0,inChartArea:this.isPointInArea(t)},s=e=>(e.options.events||this.options.events).includes(t.native.type);if(!1===this.notifyPlugins("beforeEvent",i,s))return;const n=this._handleEvent(t,e,i.inChartArea);return i.cancelable=!1,this.notifyPlugins("afterEvent",i,s),(n||i.changed)&&this.render(),this}_handleEvent(t,e,i){const{_active:s=[],options:n}=this,o=e,a=this._getActiveElements(t,s,i,o),r=D(t),l=function(t,e,i,s){return i&&"mouseout"!==t.type?s?e:t:null}(t,this._lastEvent,i,r);i&&(this._lastEvent=null,d(n.onHover,[t,a,this],this),r&&d(n.onClick,[t,a,this],this));const h=!f(a,s);return(h||e)&&(this._active=a,this._updateHoverStyles(a,s,e)),this._lastEvent=l,h}_getActiveElements(t,e,i,s){if("mouseout"===t.type)return[];if(!i)return e;const n=this.options.hover;return this.getElementsAtEventForMode(t,n.mode,n,s)}}function Ln(){return u(Tn.instances,(t=>t._plugins.invalidate()))}function En(){throw new Error("This method is not implemented: Check that a complete date adapter is provided.")}class Rn{static override(t){Object.assign(Rn.prototype,t)}options;constructor(t){this.options=t||{}}init(){}formats(){return En()}parse(){return En()}format(){return En()}add(){return En()}diff(){return En()}startOf(){return En()}endOf(){return En()}}var In={_date:Rn};function zn(t){const e=t.iScale,i=function(t,e){if(!t._cache.$bar){const i=t.getMatchingVisibleMetas(e);let s=[];for(let e=0,n=i.length;et-e)))}return t._cache.$bar}(e,t.type);let s,n,o,a,r=e._length;const l=()=>{32767!==o&&-32768!==o&&(k(a)&&(r=Math.min(r,Math.abs(o-a)||r)),a=o)};for(s=0,n=i.length;sMath.abs(r)&&(l=r,h=a),e[i.axis]=h,e._custom={barStart:l,barEnd:h,start:n,end:o,min:a,max:r}}(t,e,i,s):e[i.axis]=i.parse(t,s),e}function Vn(t,e,i,s){const n=t.iScale,o=t.vScale,a=n.getLabels(),r=n===o,l=[];let h,c,d,u;for(h=i,c=i+s;ht.x,i="left",s="right"):(e=t.base"spacing"!==t,_indexable:t=>"spacing"!==t&&!t.startsWith("borderDash")&&!t.startsWith("hoverBorderDash")};static overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(t){const e=t.data,{labels:{pointStyle:i,textAlign:s,color:n,useBorderRadius:o,borderRadius:a}}=t.legend.options;return e.labels.length&&e.datasets.length?e.labels.map(((e,r)=>{const l=t.getDatasetMeta(0).controller.getStyle(r);return{text:e,fillStyle:l.backgroundColor,fontColor:n,hidden:!t.getDataVisibility(r),lineDash:l.borderDash,lineDashOffset:l.borderDashOffset,lineJoin:l.borderJoinStyle,lineWidth:l.borderWidth,strokeStyle:l.borderColor,textAlign:s,pointStyle:i,borderRadius:o&&(a||l.borderRadius),index:r}})):[]}},onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}}}};constructor(t,e){super(t,e),this.enableOptionSharing=!0,this.innerRadius=void 0,this.outerRadius=void 0,this.offsetX=void 0,this.offsetY=void 0}linkScales(){}parse(t,e){const i=this.getDataset().data,s=this._cachedMeta;if(!1===this._parsing)s._parsed=i;else{let n,a,r=t=>+i[t];if(o(i[t])){const{key:t="value"}=this._parsing;r=e=>+M(i[e],t)}for(n=t,a=t+e;nJ(t,r,l,!0)?1:Math.max(e,e*i,s,s*i),g=(t,e,s)=>J(t,r,l,!0)?-1:Math.min(e,e*i,s,s*i),p=f(0,h,d),m=f(E,c,u),x=g(C,h,d),b=g(C+E,c,u);s=(p-x)/2,n=(m-b)/2,o=-(p+x)/2,a=-(m+b)/2}return{ratioX:s,ratioY:n,offsetX:o,offsetY:a}}(u,d,r),x=(i.width-o)/f,b=(i.height-o)/g,_=Math.max(Math.min(x,b)/2,0),y=c(this.options.radius,_),v=(y-Math.max(y*r,0))/this._getVisibleDatasetWeightTotal();this.offsetX=p*y,this.offsetY=m*y,s.total=this.calculateTotal(),this.outerRadius=y-v*this._getRingWeightOffset(this.index),this.innerRadius=Math.max(this.outerRadius-v*l,0),this.updateElements(n,0,n.length,t)}_circumference(t,e){const i=this.options,s=this._cachedMeta,n=this._getCircumference();return e&&i.animation.animateRotate||!this.chart.getDataVisibility(t)||null===s._parsed[t]||s.data[t].hidden?0:this.calculateCircumference(s._parsed[t]*n/O)}updateElements(t,e,i,s){const n="reset"===s,o=this.chart,a=o.chartArea,r=o.options.animation,l=(a.left+a.right)/2,h=(a.top+a.bottom)/2,c=n&&r.animateScale,d=c?0:this.innerRadius,u=c?0:this.outerRadius,{sharedOptions:f,includeOptions:g}=this._getSharedOptions(e,s);let p,m=this._getRotation();for(p=0;p0&&!isNaN(t)?O*(Math.abs(t)/e):0}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart,s=i.data.labels||[],n=ne(e._parsed[t],i.options.locale);return{label:s[t]||"",value:n}}getMaxBorderWidth(t){let e=0;const i=this.chart;let s,n,o,a,r;if(!t)for(s=0,n=i.data.datasets.length;s{const o=t.getDatasetMeta(0).controller.getStyle(n);return{text:e,fillStyle:o.backgroundColor,strokeStyle:o.borderColor,fontColor:s,lineWidth:o.borderWidth,pointStyle:i,hidden:!t.getDataVisibility(n),index:n}}))}return[]}},onClick(t,e,i){i.chart.toggleDataVisibility(e.index),i.chart.update()}}},scales:{r:{type:"radialLinear",angleLines:{display:!1},beginAtZero:!0,grid:{circular:!0},pointLabels:{display:!1},startAngle:0}}};constructor(t,e){super(t,e),this.innerRadius=void 0,this.outerRadius=void 0}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart,s=i.data.labels||[],n=ne(e._parsed[t].r,i.options.locale);return{label:s[t]||"",value:n}}parseObjectData(t,e,i,s){return ii.bind(this)(t,e,i,s)}update(t){const e=this._cachedMeta.data;this._updateRadius(),this.updateElements(e,0,e.length,t)}getMinMax(){const t=this._cachedMeta,e={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY};return t.data.forEach(((t,i)=>{const s=this.getParsed(i).r;!isNaN(s)&&this.chart.getDataVisibility(i)&&(se.max&&(e.max=s))})),e}_updateRadius(){const t=this.chart,e=t.chartArea,i=t.options,s=Math.min(e.right-e.left,e.bottom-e.top),n=Math.max(s/2,0),o=(n-Math.max(i.cutoutPercentage?n/100*i.cutoutPercentage:1,0))/t.getVisibleDatasetCount();this.outerRadius=n-o*this.index,this.innerRadius=this.outerRadius-o}updateElements(t,e,i,s){const n="reset"===s,o=this.chart,a=o.options.animation,r=this._cachedMeta.rScale,l=r.xCenter,h=r.yCenter,c=r.getIndexAngle(0)-.5*C;let d,u=c;const f=360/this.countVisibleElements();for(d=0;d{!isNaN(this.getParsed(i).r)&&this.chart.getDataVisibility(i)&&e++})),e}_computeAngle(t,e,i){return this.chart.getDataVisibility(t)?$(this.resolveDataElementOptions(t,e).angle||i):0}}var Un=Object.freeze({__proto__:null,BarController:class extends js{static id="bar";static defaults={datasetElementType:!1,dataElementType:"bar",categoryPercentage:.8,barPercentage:.9,grouped:!0,animations:{numbers:{type:"number",properties:["x","y","base","width","height"]}}};static overrides={scales:{_index_:{type:"category",offset:!0,grid:{offset:!0}},_value_:{type:"linear",beginAtZero:!0}}};parsePrimitiveData(t,e,i,s){return Vn(t,e,i,s)}parseArrayData(t,e,i,s){return Vn(t,e,i,s)}parseObjectData(t,e,i,s){const{iScale:n,vScale:o}=t,{xAxisKey:a="x",yAxisKey:r="y"}=this._parsing,l="x"===n.axis?a:r,h="x"===o.axis?a:r,c=[];let d,u,f,g;for(d=i,u=i+s;dt.controller.options.grouped)),o=i.options.stacked,a=[],r=this._cachedMeta.controller.getParsed(e),l=r&&r[i.axis],h=t=>{const e=t._parsed.find((t=>t[i.axis]===l)),n=e&&e[t.vScale.axis];if(s(n)||isNaN(n))return!0};for(const i of n)if((void 0===e||!h(i))&&((!1===o||-1===a.indexOf(i.stack)||void 0===o&&void 0===i.stack)&&a.push(i.stack),i.index===t))break;return a.length||a.push(void 0),a}_getStackCount(t){return this._getStacks(void 0,t).length}_getAxisCount(){return this._getAxis().length}getFirstScaleIdForIndexAxis(){const t=this.chart.scales,e=this.chart.options.indexAxis;return Object.keys(t).filter((i=>t[i].axis===e)).shift()}_getAxis(){const t={},e=this.getFirstScaleIdForIndexAxis();for(const i of this.chart.data.datasets)t[l("x"===this.chart.options.indexAxis?i.xAxisID:i.yAxisID,e)]=!0;return Object.keys(t)}_getStackIndex(t,e,i){const s=this._getStacks(t,i),n=void 0!==e?s.indexOf(e):-1;return-1===n?s.length-1:n}_getRuler(){const t=this.options,e=this._cachedMeta,i=e.iScale,s=[];let n,o;for(n=0,o=e.data.length;n=i?1:-1)}(u,e,r)*a,f===r&&(x-=u/2);const t=e.getPixelForDecimal(0),s=e.getPixelForDecimal(1),o=Math.min(t,s),h=Math.max(t,s);x=Math.max(Math.min(x,h),o),d=x+u,i&&!c&&(l._stacks[e.axis]._visualValues[n]=e.getValueForPixel(d)-e.getValueForPixel(x))}if(x===e.getPixelForValue(r)){const t=F(u)*e.getLineWidthForValue(r)/2;x+=t,u-=t}return{size:u,base:x,head:d,center:d+u/2}}_calculateBarIndexPixels(t,e){const i=e.scale,n=this.options,o=n.skipNull,a=l(n.maxBarThickness,1/0);let r,h;const c=this._getAxisCount();if(e.grouped){const i=o?this._getStackCount(t):e.stackCount,d="flex"===n.barThickness?function(t,e,i,s){const n=e.pixels,o=n[t];let a=t>0?n[t-1]:null,r=t=0;--i)e=Math.max(e,t[i].size(this.resolveDataElementOptions(i))/2);return e>0&&e}getLabelAndValue(t){const e=this._cachedMeta,i=this.chart.data.labels||[],{xScale:s,yScale:n}=e,o=this.getParsed(t),a=s.getLabelForValue(o.x),r=n.getLabelForValue(o.y),l=o._custom;return{label:i[t]||"",value:"("+a+", "+r+(l?", "+l:"")+")"}}update(t){const e=this._cachedMeta.data;this.updateElements(e,0,e.length,t)}updateElements(t,e,i,s){const n="reset"===s,{iScale:o,vScale:a}=this._cachedMeta,{sharedOptions:r,includeOptions:l}=this._getSharedOptions(e,s),h=o.axis,c=a.axis;for(let d=e;d0&&this.getParsed(e-1);for(let i=0;i<_;++i){const g=t[i],_=x?g:{};if(i=b){_.skip=!0;continue}const v=this.getParsed(i),M=s(v[f]),w=_[u]=a.getPixelForValue(v[u],i),k=_[f]=o||M?r.getBasePixel():r.getPixelForValue(l?this.applyStack(r,v,l):v[f],i);_.skip=isNaN(w)||isNaN(k)||M,_.stop=i>0&&Math.abs(v[u]-y[u])>m,p&&(_.parsed=v,_.raw=h.data[i]),d&&(_.options=c||this.resolveDataElementOptions(i,g.active?"active":n)),x||this.updateElement(g,i,_,n),y=v}}getMaxOverflow(){const t=this._cachedMeta,e=t.dataset,i=e.options&&e.options.borderWidth||0,s=t.data||[];if(!s.length)return i;const n=s[0].size(this.resolveDataElementOptions(0)),o=s[s.length-1].size(this.resolveDataElementOptions(s.length-1));return Math.max(i,n,o)/2}draw(){const t=this._cachedMeta;t.dataset.updateControlPoints(this.chart.chartArea,t.iScale.axis),super.draw()}},PieController:class extends $n{static id="pie";static defaults={cutout:0,rotation:0,circumference:360,radius:"100%"}},PolarAreaController:Yn,RadarController:class extends js{static id="radar";static defaults={datasetElementType:"line",dataElementType:"point",indexAxis:"r",showLine:!0,elements:{line:{fill:"start"}}};static overrides={aspectRatio:1,scales:{r:{type:"radialLinear"}}};getLabelAndValue(t){const e=this._cachedMeta.vScale,i=this.getParsed(t);return{label:e.getLabels()[t],value:""+e.getLabelForValue(i[e.axis])}}parseObjectData(t,e,i,s){return ii.bind(this)(t,e,i,s)}update(t){const e=this._cachedMeta,i=e.dataset,s=e.data||[],n=e.iScale.getLabels();if(i.points=s,"resize"!==t){const e=this.resolveDatasetElementOptions(t);this.options.showLine||(e.borderWidth=0);const o={_loop:!0,_fullLoop:n.length===s.length,options:e};this.updateElement(i,void 0,o,t)}this.updateElements(s,0,s.length,t)}updateElements(t,e,i,s){const n=this._cachedMeta.rScale,o="reset"===s;for(let a=e;a0&&this.getParsed(e-1);for(let c=e;c0&&Math.abs(i[f]-_[f])>x,m&&(p.parsed=i,p.raw=h.data[c]),u&&(p.options=d||this.resolveDataElementOptions(c,e.active?"active":n)),b||this.updateElement(e,c,p,n),_=i}this.updateSharedOptions(d,n,c)}getMaxOverflow(){const t=this._cachedMeta,e=t.data||[];if(!this.options.showLine){let t=0;for(let i=e.length-1;i>=0;--i)t=Math.max(t,e[i].size(this.resolveDataElementOptions(i))/2);return t>0&&t}const i=t.dataset,s=i.options&&i.options.borderWidth||0;if(!e.length)return s;const n=e[0].size(this.resolveDataElementOptions(0)),o=e[e.length-1].size(this.resolveDataElementOptions(e.length-1));return Math.max(s,n,o)/2}}});function Xn(t,e,i,s){const n=vi(t.options.borderRadius,["outerStart","outerEnd","innerStart","innerEnd"]);const o=(i-e)/2,a=Math.min(o,s*e/2),r=t=>{const e=(i-Math.min(o,t))*s/2;return Z(t,0,Math.min(o,e))};return{outerStart:r(n.outerStart),outerEnd:r(n.outerEnd),innerStart:Z(n.innerStart,0,a),innerEnd:Z(n.innerEnd,0,a)}}function qn(t,e,i,s){return{x:i+t*Math.cos(e),y:s+t*Math.sin(e)}}function Kn(t,e,i,s,n,o){const{x:a,y:r,startAngle:l,pixelMargin:h,innerRadius:c}=e,d=Math.max(e.outerRadius+s+i-h,0),u=c>0?c+s+i+h:0;let f=0;const g=n-l;if(s){const t=((c>0?c-s:0)+(d>0?d-s:0))/2;f=(g-(0!==t?g*t/(t+s):g))/2}const p=(g-Math.max(.001,g*d-i/C)/d)/2,m=l+p+f,x=n-p-f,{outerStart:b,outerEnd:_,innerStart:y,innerEnd:v}=Xn(e,u,d,x-m),M=d-b,w=d-_,k=m+b/M,S=x-_/w,P=u+y,D=u+v,O=m+y/P,A=x-v/D;if(t.beginPath(),o){const e=(k+S)/2;if(t.arc(a,r,d,k,e),t.arc(a,r,d,e,S),_>0){const e=qn(w,S,a,r);t.arc(e.x,e.y,_,S,x+E)}const i=qn(D,x,a,r);if(t.lineTo(i.x,i.y),v>0){const e=qn(D,A,a,r);t.arc(e.x,e.y,v,x+E,A+Math.PI)}const s=(x-v/u+(m+y/u))/2;if(t.arc(a,r,u,x-v/u,s,!0),t.arc(a,r,u,s,m+y/u,!0),y>0){const e=qn(P,O,a,r);t.arc(e.x,e.y,y,O+Math.PI,m-E)}const n=qn(M,m,a,r);if(t.lineTo(n.x,n.y),b>0){const e=qn(M,k,a,r);t.arc(e.x,e.y,b,m-E,k)}}else{t.moveTo(a,r);const e=Math.cos(k)*d+a,i=Math.sin(k)*d+r;t.lineTo(e,i);const s=Math.cos(S)*d+a,n=Math.sin(S)*d+r;t.lineTo(s,n)}t.closePath()}function Gn(t,e,i,s,n){const{fullCircles:o,startAngle:a,circumference:r,options:l}=e,{borderWidth:h,borderJoinStyle:c,borderDash:d,borderDashOffset:u,borderRadius:f}=l,g="inner"===l.borderAlign;if(!h)return;t.setLineDash(d||[]),t.lineDashOffset=u,g?(t.lineWidth=2*h,t.lineJoin=c||"round"):(t.lineWidth=h,t.lineJoin=c||"bevel");let p=e.endAngle;if(o){Kn(t,e,i,s,p,n);for(let e=0;en?(h=n/l,t.arc(o,a,l,i+h,s-h,!0)):t.arc(o,a,n,i+E,s-E),t.closePath(),t.clip()}(t,e,p),l.selfJoin&&p-a>=C&&0===f&&"miter"!==c&&function(t,e,i){const{startAngle:s,x:n,y:o,outerRadius:a,innerRadius:r,options:l}=e,{borderWidth:h,borderJoinStyle:c}=l,d=Math.min(h/a,G(s-i));if(t.beginPath(),t.arc(n,o,a-h/2,s+d/2,i-d/2),r>0){const e=Math.min(h/r,G(s-i));t.arc(n,o,r+h/2,i-e/2,s+e/2,!0)}else{const e=Math.min(h/2,a*G(s-i));if("round"===c)t.arc(n,o,e,i-C/2,s+C/2,!0);else if("bevel"===c){const a=2*e*e,r=-a*Math.cos(i+C/2)+n,l=-a*Math.sin(i+C/2)+o,h=a*Math.cos(s+C/2)+n,c=a*Math.sin(s+C/2)+o;t.lineTo(r,l),t.lineTo(h,c)}}t.closePath(),t.moveTo(0,0),t.rect(0,0,t.canvas.width,t.canvas.height),t.clip("evenodd")}(t,e,p),o||(Kn(t,e,i,s,p,n),t.stroke())}function Jn(t,e,i=e){t.lineCap=l(i.borderCapStyle,e.borderCapStyle),t.setLineDash(l(i.borderDash,e.borderDash)),t.lineDashOffset=l(i.borderDashOffset,e.borderDashOffset),t.lineJoin=l(i.borderJoinStyle,e.borderJoinStyle),t.lineWidth=l(i.borderWidth,e.borderWidth),t.strokeStyle=l(i.borderColor,e.borderColor)}function Zn(t,e,i){t.lineTo(i.x,i.y)}function Qn(t,e,i={}){const s=t.length,{start:n=0,end:o=s-1}=i,{start:a,end:r}=e,l=Math.max(n,a),h=Math.min(o,r),c=nr&&o>r;return{count:s,start:l,loop:e.loop,ilen:h(a+(h?r-t:t))%o,_=()=>{f!==g&&(t.lineTo(m,g),t.lineTo(m,f),t.lineTo(m,p))};for(l&&(d=n[b(0)],t.moveTo(d.x,d.y)),c=0;c<=r;++c){if(d=n[b(c)],d.skip)continue;const e=d.x,i=d.y,s=0|e;s===u?(ig&&(g=i),m=(x*m+e)/++x):(_(),t.lineTo(e,i),u=s,x=0,f=g=i),p=i}_()}function io(t){const e=t.options,i=e.borderDash&&e.borderDash.length;return!(t._decimated||t._loop||e.tension||"monotone"===e.cubicInterpolationMode||e.stepped||i)?eo:to}const so="function"==typeof Path2D;function no(t,e,i,s){so&&!e.options.segment?function(t,e,i,s){let n=e._path;n||(n=e._path=new Path2D,e.path(n,i,s)&&n.closePath()),Jn(t,e.options),t.stroke(n)}(t,e,i,s):function(t,e,i,s){const{segments:n,options:o}=e,a=io(e);for(const r of n)Jn(t,o,r.style),t.beginPath(),a(t,e,r,{start:i,end:i+s-1})&&t.closePath(),t.stroke()}(t,e,i,s)}class oo extends $s{static id="line";static defaults={borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",borderWidth:3,capBezierPoints:!0,cubicInterpolationMode:"default",fill:!1,spanGaps:!1,stepped:!1,tension:0};static defaultRoutes={backgroundColor:"backgroundColor",borderColor:"borderColor"};static descriptors={_scriptable:!0,_indexable:t=>"borderDash"!==t&&"fill"!==t};constructor(t){super(),this.animated=!0,this.options=void 0,this._chart=void 0,this._loop=void 0,this._fullLoop=void 0,this._path=void 0,this._points=void 0,this._segments=void 0,this._decimated=!1,this._pointsUpdated=!1,this._datasetIndex=void 0,t&&Object.assign(this,t)}updateControlPoints(t,e){const i=this.options;if((i.tension||"monotone"===i.cubicInterpolationMode)&&!i.stepped&&!this._pointsUpdated){const s=i.spanGaps?this._loop:this._fullLoop;hi(this._points,i,t,s,e),this._pointsUpdated=!0}}set points(t){this._points=t,delete this._segments,delete this._path,this._pointsUpdated=!1}get points(){return this._points}get segments(){return this._segments||(this._segments=zi(this,this.options.segment))}first(){const t=this.segments,e=this.points;return t.length&&e[t[0].start]}last(){const t=this.segments,e=this.points,i=t.length;return i&&e[t[i-1].end]}interpolate(t,e){const i=this.options,s=t[e],n=this.points,o=Ii(this,{property:e,start:s,end:s});if(!o.length)return;const a=[],r=function(t){return t.stepped?pi:t.tension||"monotone"===t.cubicInterpolationMode?mi:gi}(i);let l,h;for(l=0,h=o.length;l"borderDash"!==t};circumference;endAngle;fullCircles;innerRadius;outerRadius;pixelMargin;startAngle;constructor(t){super(),this.options=void 0,this.circumference=void 0,this.startAngle=void 0,this.endAngle=void 0,this.innerRadius=void 0,this.outerRadius=void 0,this.pixelMargin=0,this.fullCircles=0,t&&Object.assign(this,t)}inRange(t,e,i){const s=this.getProps(["x","y"],i),{angle:n,distance:o}=X(s,{x:t,y:e}),{startAngle:a,endAngle:r,innerRadius:h,outerRadius:c,circumference:d}=this.getProps(["startAngle","endAngle","innerRadius","outerRadius","circumference"],i),u=(this.options.spacing+this.options.borderWidth)/2,f=l(d,r-a),g=J(n,a,r)&&a!==r,p=f>=O||g,m=tt(o,h+u,c+u);return p&&m}getCenterPoint(t){const{x:e,y:i,startAngle:s,endAngle:n,innerRadius:o,outerRadius:a}=this.getProps(["x","y","startAngle","endAngle","innerRadius","outerRadius"],t),{offset:r,spacing:l}=this.options,h=(s+n)/2,c=(o+a+l+r)/2;return{x:e+Math.cos(h)*c,y:i+Math.sin(h)*c}}tooltipPosition(t){return this.getCenterPoint(t)}draw(t){const{options:e,circumference:i}=this,s=(e.offset||0)/4,n=(e.spacing||0)/2,o=e.circular;if(this.pixelMargin="inner"===e.borderAlign?.33:0,this.fullCircles=i>O?Math.floor(i/O):0,0===i||this.innerRadius<0||this.outerRadius<0)return;t.save();const a=(this.startAngle+this.endAngle)/2;t.translate(Math.cos(a)*s,Math.sin(a)*s);const r=s*(1-Math.sin(Math.min(C,i||0)));t.fillStyle=e.backgroundColor,t.strokeStyle=e.borderColor,function(t,e,i,s,n){const{fullCircles:o,startAngle:a,circumference:r}=e;let l=e.endAngle;if(o){Kn(t,e,i,s,l,n);for(let e=0;e("string"==typeof e?(i=t.push(e)-1,s.unshift({index:i,label:e})):isNaN(e)&&(i=null),i))(t,e,i,s);return n!==t.lastIndexOf(e)?i:n}function mo(t){const e=this.getLabels();return t>=0&&ts=e?s:t,a=t=>n=i?n:t;if(t){const t=F(s),e=F(n);t<0&&e<0?a(0):t>0&&e>0&&o(0)}if(s===n){let e=0===n?1:Math.abs(.05*n);a(n+e),t||o(s-e)}this.min=s,this.max=n}getTickLimit(){const t=this.options.ticks;let e,{maxTicksLimit:i,stepSize:s}=t;return s?(e=Math.ceil(this.max/s)-Math.floor(this.min/s)+1,e>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${s} would result generating up to ${e} ticks. Limiting to 1000.`),e=1e3)):(e=this.computeTickLimit(),i=i||11),i&&(e=Math.min(i,e)),e}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){const t=this.options,e=t.ticks;let i=this.getTickLimit();i=Math.max(2,i);const n=function(t,e){const i=[],{bounds:n,step:o,min:a,max:r,precision:l,count:h,maxTicks:c,maxDigits:d,includeBounds:u}=t,f=o||1,g=c-1,{min:p,max:m}=e,x=!s(a),b=!s(r),_=!s(h),y=(m-p)/(d+1);let v,M,w,k,S=B((m-p)/g/f)*f;if(S<1e-14&&!x&&!b)return[{value:p},{value:m}];k=Math.ceil(m/S)-Math.floor(p/S),k>g&&(S=B(k*S/g/f)*f),s(l)||(v=Math.pow(10,l),S=Math.ceil(S*v)/v),"ticks"===n?(M=Math.floor(p/S)*S,w=Math.ceil(m/S)*S):(M=p,w=m),x&&b&&o&&H((r-a)/o,S/1e3)?(k=Math.round(Math.min((r-a)/S,c)),S=(r-a)/k,M=a,w=r):_?(M=x?a:M,w=b?r:w,k=h-1,S=(w-M)/k):(k=(w-M)/S,k=V(k,Math.round(k),S/1e3)?Math.round(k):Math.ceil(k));const P=Math.max(U(S),U(M));v=Math.pow(10,s(l)?P:l),M=Math.round(M*v)/v,w=Math.round(w*v)/v;let D=0;for(x&&(u&&M!==a?(i.push({value:a}),Mr)break;i.push({value:t})}return b&&u&&w!==r?i.length&&V(i[i.length-1].value,r,xo(r,y,t))?i[i.length-1].value=r:i.push({value:r}):b&&w!==r||i.push({value:w}),i}({maxTicks:i,bounds:t.bounds,min:t.min,max:t.max,precision:e.precision,step:e.stepSize,count:e.count,maxDigits:this._maxDigits(),horizontal:this.isHorizontal(),minRotation:e.minRotation||0,includeBounds:!1!==e.includeBounds},this._range||this);return"ticks"===t.bounds&&j(n,this,"value"),t.reverse?(n.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),n}configure(){const t=this.ticks;let e=this.min,i=this.max;if(super.configure(),this.options.offset&&t.length){const s=(i-e)/Math.max(t.length-1,1)/2;e-=s,i+=s}this._startValue=e,this._endValue=i,this._valueRange=i-e}getLabelForValue(t){return ne(t,this.chart.options.locale,this.options.ticks.format)}}class _o extends bo{static id="linear";static defaults={ticks:{callback:ae.formatters.numeric}};determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=a(t)?t:0,this.max=a(e)?e:1,this.handleTickRangeOptions()}computeTickLimit(){const t=this.isHorizontal(),e=t?this.width:this.height,i=$(this.options.ticks.minRotation),s=(t?Math.sin(i):Math.cos(i))||.001,n=this._resolveTickFontOptions(0);return Math.ceil(e/Math.min(40,n.lineHeight/s))}getPixelForValue(t){return null===t?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getValueForPixel(t){return this._startValue+this.getDecimalForPixel(t)*this._valueRange}}const yo=t=>Math.floor(z(t)),vo=(t,e)=>Math.pow(10,yo(t)+e);function Mo(t){return 1===t/Math.pow(10,yo(t))}function wo(t,e,i){const s=Math.pow(10,i),n=Math.floor(t/s);return Math.ceil(e/s)-n}function ko(t,{min:e,max:i}){e=r(t.min,e);const s=[],n=yo(e);let o=function(t,e){let i=yo(e-t);for(;wo(t,e,i)>10;)i++;for(;wo(t,e,i)<10;)i--;return Math.min(i,yo(t))}(e,i),a=o<0?Math.pow(10,Math.abs(o)):1;const l=Math.pow(10,o),h=n>o?Math.pow(10,n):0,c=Math.round((e-h)*a)/a,d=Math.floor((e-h)/l/10)*l*10;let u=Math.floor((c-d)/Math.pow(10,o)),f=r(t.min,Math.round((h+d+u*Math.pow(10,o))*a)/a);for(;f=10?u=u<15?15:20:u++,u>=20&&(o++,u=2,a=o>=0?1:a),f=Math.round((h+d+u*Math.pow(10,o))*a)/a;const g=r(t.max,f);return s.push({value:g,major:Mo(g),significand:u}),s}class So extends tn{static id="logarithmic";static defaults={ticks:{callback:ae.formatters.logarithmic,major:{enabled:!0}}};constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._valueRange=0}parse(t,e){const i=bo.prototype.parse.apply(this,[t,e]);if(0!==i)return a(i)&&i>0?i:null;this._zero=!0}determineDataLimits(){const{min:t,max:e}=this.getMinMax(!0);this.min=a(t)?Math.max(0,t):null,this.max=a(e)?Math.max(0,e):null,this.options.beginAtZero&&(this._zero=!0),this._zero&&this.min!==this._suggestedMin&&!a(this._userMin)&&(this.min=t===vo(this.min,0)?vo(this.min,-1):vo(this.min,0)),this.handleTickRangeOptions()}handleTickRangeOptions(){const{minDefined:t,maxDefined:e}=this.getUserBounds();let i=this.min,s=this.max;const n=e=>i=t?i:e,o=t=>s=e?s:t;i===s&&(i<=0?(n(1),o(10)):(n(vo(i,-1)),o(vo(s,1)))),i<=0&&n(vo(s,-1)),s<=0&&o(vo(i,1)),this.min=i,this.max=s}buildTicks(){const t=this.options,e=ko({min:this._userMin,max:this._userMax},this);return"ticks"===t.bounds&&j(e,this,"value"),t.reverse?(e.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),e}getLabelForValue(t){return void 0===t?"0":ne(t,this.chart.options.locale,this.options.ticks.format)}configure(){const t=this.min;super.configure(),this._startValue=z(t),this._valueRange=z(this.max)-z(t)}getPixelForValue(t){return void 0!==t&&0!==t||(t=this.min),null===t||isNaN(t)?NaN:this.getPixelForDecimal(t===this.min?0:(z(t)-this._startValue)/this._valueRange)}getValueForPixel(t){const e=this.getDecimalForPixel(t);return Math.pow(10,this._startValue+e*this._valueRange)}}function Po(t){const e=t.ticks;if(e.display&&t.display){const t=ki(e.backdropPadding);return l(e.font&&e.font.size,ue.font.size)+t.height}return 0}function Do(t,e,i,s,n){return t===s||t===n?{start:e-i/2,end:e+i/2}:tn?{start:e-i,end:e}:{start:e,end:e+i}}function Co(t){const e={l:t.left+t._padding.left,r:t.right-t._padding.right,t:t.top+t._padding.top,b:t.bottom-t._padding.bottom},i=Object.assign({},e),s=[],o=[],a=t._pointLabels.length,r=t.options.pointLabels,l=r.centerPointLabels?C/a:0;for(let u=0;ue.r&&(r=(s.end-e.r)/o,t.r=Math.max(t.r,e.r+r)),n.starte.b&&(l=(n.end-e.b)/a,t.b=Math.max(t.b,e.b+l))}function Ao(t,e,i){const s=t.drawingArea,{extra:n,additionalAngle:o,padding:a,size:r}=i,l=t.getPointPosition(e,s+n+a,o),h=Math.round(Y(G(l.angle+E))),c=function(t,e,i){90===i||270===i?t-=e/2:(i>270||i<90)&&(t-=e);return t}(l.y,r.h,h),d=function(t){if(0===t||180===t)return"center";if(t<180)return"left";return"right"}(h),u=function(t,e,i){"right"===i?t-=e:"center"===i&&(t-=e/2);return t}(l.x,r.w,d);return{visible:!0,x:l.x,y:c,textAlign:d,left:u,top:c,right:u+r.w,bottom:c+r.h}}function To(t,e){if(!e)return!0;const{left:i,top:s,right:n,bottom:o}=t;return!(Re({x:i,y:s},e)||Re({x:i,y:o},e)||Re({x:n,y:s},e)||Re({x:n,y:o},e))}function Lo(t,e,i){const{left:n,top:o,right:a,bottom:r}=i,{backdropColor:l}=e;if(!s(l)){const i=wi(e.borderRadius),s=ki(e.backdropPadding);t.fillStyle=l;const h=n-s.left,c=o-s.top,d=a-n+s.width,u=r-o+s.height;Object.values(i).some((t=>0!==t))?(t.beginPath(),He(t,{x:h,y:c,w:d,h:u,radius:i}),t.fill()):t.fillRect(h,c,d,u)}}function Eo(t,e,i,s){const{ctx:n}=t;if(i)n.arc(t.xCenter,t.yCenter,e,0,O);else{let i=t.getPointPosition(0,e);n.moveTo(i.x,i.y);for(let o=1;ot,padding:5,centerPointLabels:!1}};static defaultRoutes={"angleLines.color":"borderColor","pointLabels.color":"color","ticks.color":"color"};static descriptors={angleLines:{_fallback:"grid"}};constructor(t){super(t),this.xCenter=void 0,this.yCenter=void 0,this.drawingArea=void 0,this._pointLabels=[],this._pointLabelItems=[]}setDimensions(){const t=this._padding=ki(Po(this.options)/2),e=this.width=this.maxWidth-t.width,i=this.height=this.maxHeight-t.height;this.xCenter=Math.floor(this.left+e/2+t.left),this.yCenter=Math.floor(this.top+i/2+t.top),this.drawingArea=Math.floor(Math.min(e,i)/2)}determineDataLimits(){const{min:t,max:e}=this.getMinMax(!1);this.min=a(t)&&!isNaN(t)?t:0,this.max=a(e)&&!isNaN(e)?e:0,this.handleTickRangeOptions()}computeTickLimit(){return Math.ceil(this.drawingArea/Po(this.options))}generateTickLabels(t){bo.prototype.generateTickLabels.call(this,t),this._pointLabels=this.getLabels().map(((t,e)=>{const i=d(this.options.pointLabels.callback,[t,e],this);return i||0===i?i:""})).filter(((t,e)=>this.chart.getDataVisibility(e)))}fit(){const t=this.options;t.display&&t.pointLabels.display?Co(this):this.setCenterPoint(0,0,0,0)}setCenterPoint(t,e,i,s){this.xCenter+=Math.floor((t-e)/2),this.yCenter+=Math.floor((i-s)/2),this.drawingArea-=Math.min(this.drawingArea/2,Math.max(t,e,i,s))}getIndexAngle(t){return G(t*(O/(this._pointLabels.length||1))+$(this.options.startAngle||0))}getDistanceFromCenterForValue(t){if(s(t))return NaN;const e=this.drawingArea/(this.max-this.min);return this.options.reverse?(this.max-t)*e:(t-this.min)*e}getValueForDistanceFromCenter(t){if(s(t))return NaN;const e=t/(this.drawingArea/(this.max-this.min));return this.options.reverse?this.max-e:this.min+e}getPointLabelContext(t){const e=this._pointLabels||[];if(t>=0&&t=0;n--){const e=t._pointLabelItems[n];if(!e.visible)continue;const o=s.setContext(t.getPointLabelContext(n));Lo(i,o,e);const a=Si(o.font),{x:r,y:l,textAlign:h}=e;Ne(i,t._pointLabels[n],r,l+a.lineHeight/2,a,{color:o.color,textAlign:h,textBaseline:"middle"})}}(this,o),s.display&&this.ticks.forEach(((t,e)=>{if(0!==e||0===e&&this.min<0){r=this.getDistanceFromCenterForValue(t.value);const i=this.getContext(e),a=s.setContext(i),l=n.setContext(i);!function(t,e,i,s,n){const o=t.ctx,a=e.circular,{color:r,lineWidth:l}=e;!a&&!s||!r||!l||i<0||(o.save(),o.strokeStyle=r,o.lineWidth=l,o.setLineDash(n.dash||[]),o.lineDashOffset=n.dashOffset,o.beginPath(),Eo(t,i,a,s),o.closePath(),o.stroke(),o.restore())}(this,a,r,o,l)}})),i.display){for(t.save(),a=o-1;a>=0;a--){const s=i.setContext(this.getPointLabelContext(a)),{color:n,lineWidth:o}=s;o&&n&&(t.lineWidth=o,t.strokeStyle=n,t.setLineDash(s.borderDash),t.lineDashOffset=s.borderDashOffset,r=this.getDistanceFromCenterForValue(e.reverse?this.min:this.max),l=this.getPointPosition(a,r),t.beginPath(),t.moveTo(this.xCenter,this.yCenter),t.lineTo(l.x,l.y),t.stroke())}t.restore()}}drawBorder(){}drawLabels(){const t=this.ctx,e=this.options,i=e.ticks;if(!i.display)return;const s=this.getIndexAngle(0);let n,o;t.save(),t.translate(this.xCenter,this.yCenter),t.rotate(s),t.textAlign="center",t.textBaseline="middle",this.ticks.forEach(((s,a)=>{if(0===a&&this.min>=0&&!e.reverse)return;const r=i.setContext(this.getContext(a)),l=Si(r.font);if(n=this.getDistanceFromCenterForValue(this.ticks[a].value),r.showLabelBackdrop){t.font=l.string,o=t.measureText(s.label).width,t.fillStyle=r.backdropColor;const e=ki(r.backdropPadding);t.fillRect(-o/2-e.left,-n-l.size/2-e.top,o+e.width,l.size+e.height)}Ne(t,s.label,0,-n,l,{color:r.color,strokeColor:r.textStrokeColor,strokeWidth:r.textStrokeWidth})})),t.restore()}drawTitle(){}}const Io={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},zo=Object.keys(Io);function Fo(t,e){return t-e}function Vo(t,e){if(s(e))return null;const i=t._adapter,{parser:n,round:o,isoWeekday:r}=t._parseOpts;let l=e;return"function"==typeof n&&(l=n(l)),a(l)||(l="string"==typeof n?i.parse(l,n):i.parse(l)),null===l?null:(o&&(l="week"!==o||!N(r)&&!0!==r?i.startOf(l,o):i.startOf(l,"isoWeek",r)),+l)}function Bo(t,e,i,s){const n=zo.length;for(let o=zo.indexOf(t);o=e?i[s]:i[n]]=!0}}else t[e]=!0}function No(t,e,i){const s=[],n={},o=e.length;let a,r;for(a=0;a=0&&(e[l].major=!0);return e}(t,s,n,i):s}class Ho extends tn{static id="time";static defaults={bounds:"data",adapters:{},time:{parser:!1,unit:!1,round:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{source:"auto",callback:!1,major:{enabled:!1}}};constructor(t){super(t),this._cache={data:[],labels:[],all:[]},this._unit="day",this._majorUnit=void 0,this._offsets={},this._normalized=!1,this._parseOpts=void 0}init(t,e={}){const i=t.time||(t.time={}),s=this._adapter=new In._date(t.adapters.date);s.init(e),b(i.displayFormats,s.formats()),this._parseOpts={parser:i.parser,round:i.round,isoWeekday:i.isoWeekday},super.init(t),this._normalized=e.normalized}parse(t,e){return void 0===t?null:Vo(this,t)}beforeLayout(){super.beforeLayout(),this._cache={data:[],labels:[],all:[]}}determineDataLimits(){const t=this.options,e=this._adapter,i=t.time.unit||"day";let{min:s,max:n,minDefined:o,maxDefined:r}=this.getUserBounds();function l(t){o||isNaN(t.min)||(s=Math.min(s,t.min)),r||isNaN(t.max)||(n=Math.max(n,t.max))}o&&r||(l(this._getLabelBounds()),"ticks"===t.bounds&&"labels"===t.ticks.source||l(this.getMinMax(!1))),s=a(s)&&!isNaN(s)?s:+e.startOf(Date.now(),i),n=a(n)&&!isNaN(n)?n:+e.endOf(Date.now(),i)+1,this.min=Math.min(s,n-1),this.max=Math.max(s+1,n)}_getLabelBounds(){const t=this.getLabelTimestamps();let e=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY;return t.length&&(e=t[0],i=t[t.length-1]),{min:e,max:i}}buildTicks(){const t=this.options,e=t.time,i=t.ticks,s="labels"===i.source?this.getLabelTimestamps():this._generate();"ticks"===t.bounds&&s.length&&(this.min=this._userMin||s[0],this.max=this._userMax||s[s.length-1]);const n=this.min,o=nt(s,n,this.max);return this._unit=e.unit||(i.autoSkip?Bo(e.minUnit,this.min,this.max,this._getLabelCapacity(n)):function(t,e,i,s,n){for(let o=zo.length-1;o>=zo.indexOf(i);o--){const i=zo[o];if(Io[i].common&&t._adapter.diff(n,s,i)>=e-1)return i}return zo[i?zo.indexOf(i):0]}(this,o.length,e.minUnit,this.min,this.max)),this._majorUnit=i.major.enabled&&"year"!==this._unit?function(t){for(let e=zo.indexOf(t)+1,i=zo.length;e+t.value)))}initOffsets(t=[]){let e,i,s=0,n=0;this.options.offset&&t.length&&(e=this.getDecimalForValue(t[0]),s=1===t.length?1-e:(this.getDecimalForValue(t[1])-e)/2,i=this.getDecimalForValue(t[t.length-1]),n=1===t.length?i:(i-this.getDecimalForValue(t[t.length-2]))/2);const o=t.length<3?.5:.25;s=Z(s,0,o),n=Z(n,0,o),this._offsets={start:s,end:n,factor:1/(s+1+n)}}_generate(){const t=this._adapter,e=this.min,i=this.max,s=this.options,n=s.time,o=n.unit||Bo(n.minUnit,e,i,this._getLabelCapacity(e)),a=l(s.ticks.stepSize,1),r="week"===o&&n.isoWeekday,h=N(r)||!0===r,c={};let d,u,f=e;if(h&&(f=+t.startOf(f,"isoWeek",r)),f=+t.startOf(f,h?"day":o),t.diff(i,e,o)>1e5*a)throw new Error(e+" and "+i+" are too far apart with stepSize of "+a+" "+o);const g="data"===s.ticks.source&&this.getDataTimestamps();for(d=f,u=0;d+t))}getLabelForValue(t){const e=this._adapter,i=this.options.time;return i.tooltipFormat?e.format(t,i.tooltipFormat):e.format(t,i.displayFormats.datetime)}format(t,e){const i=this.options.time.displayFormats,s=this._unit,n=e||i[s];return this._adapter.format(t,n)}_tickFormatFunction(t,e,i,s){const n=this.options,o=n.ticks.callback;if(o)return d(o,[t,e,i],this);const a=n.time.displayFormats,r=this._unit,l=this._majorUnit,h=r&&a[r],c=l&&a[l],u=i[e],f=l&&c&&u&&u.major;return this._adapter.format(t,s||(f?c:h))}generateTickLabels(t){let e,i,s;for(e=0,i=t.length;e0?a:1}getDataTimestamps(){let t,e,i=this._cache.data||[];if(i.length)return i;const s=this.getMatchingVisibleMetas();if(this._normalized&&s.length)return this._cache.data=s[0].controller.getAllParsedValues(this);for(t=0,e=s.length;t=t[r].pos&&e<=t[l].pos&&({lo:r,hi:l}=it(t,"pos",e)),({pos:s,time:o}=t[r]),({pos:n,time:a}=t[l])):(e>=t[r].time&&e<=t[l].time&&({lo:r,hi:l}=it(t,"time",e)),({time:s,pos:o}=t[r]),({time:n,pos:a}=t[l]));const h=n-s;return h?o+(a-o)*(e-s)/h:o}var $o=Object.freeze({__proto__:null,CategoryScale:class extends tn{static id="category";static defaults={ticks:{callback:mo}};constructor(t){super(t),this._startValue=void 0,this._valueRange=0,this._addedLabels=[]}init(t){const e=this._addedLabels;if(e.length){const t=this.getLabels();for(const{index:i,label:s}of e)t[i]===s&&t.splice(i,1);this._addedLabels=[]}super.init(t)}parse(t,e){if(s(t))return null;const i=this.getLabels();return((t,e)=>null===t?null:Z(Math.round(t),0,e))(e=isFinite(e)&&i[e]===t?e:po(i,t,l(e,t),this._addedLabels),i.length-1)}determineDataLimits(){const{minDefined:t,maxDefined:e}=this.getUserBounds();let{min:i,max:s}=this.getMinMax(!0);"ticks"===this.options.bounds&&(t||(i=0),e||(s=this.getLabels().length-1)),this.min=i,this.max=s}buildTicks(){const t=this.min,e=this.max,i=this.options.offset,s=[];let n=this.getLabels();n=0===t&&e===n.length-1?n:n.slice(t,e+1),this._valueRange=Math.max(n.length-(i?0:1),1),this._startValue=this.min-(i?.5:0);for(let i=t;i<=e;i++)s.push({value:i});return s}getLabelForValue(t){return mo.call(this,t)}configure(){super.configure(),this.isHorizontal()||(this._reversePixels=!this._reversePixels)}getPixelForValue(t){return"number"!=typeof t&&(t=this.parse(t)),null===t?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getPixelForTick(t){const e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getValueForPixel(t){return Math.round(this._startValue+this.getDecimalForPixel(t)*this._valueRange)}getBasePixel(){return this.bottom}},LinearScale:_o,LogarithmicScale:So,RadialLinearScale:Ro,TimeScale:Ho,TimeSeriesScale:class extends Ho{static id="timeseries";static defaults=Ho.defaults;constructor(t){super(t),this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){const t=this._getTimestampsForTable(),e=this._table=this.buildLookupTable(t);this._minPos=jo(e,this.min),this._tableRange=jo(e,this.max)-this._minPos,super.initOffsets(t)}buildLookupTable(t){const{min:e,max:i}=this,s=[],n=[];let o,a,r,l,h;for(o=0,a=t.length;o=e&&l<=i&&s.push(l);if(s.length<2)return[{time:e,pos:0},{time:i,pos:1}];for(o=0,a=s.length;ot-e))}_getTimestampsForTable(){let t=this._cache.all||[];if(t.length)return t;const e=this.getDataTimestamps(),i=this.getLabelTimestamps();return t=e.length&&i.length?this.normalize(e.concat(i)):e.length?e:i,t=this._cache.all=t,t}getDecimalForValue(t){return(jo(this._table,t)-this._minPos)/this._tableRange}getValueForPixel(t){const e=this._offsets,i=this.getDecimalForPixel(t)/e.factor-e.end;return jo(this._table,i*this._tableRange+this._minPos,!0)}}});const Yo=["rgb(54, 162, 235)","rgb(255, 99, 132)","rgb(255, 159, 64)","rgb(255, 205, 86)","rgb(75, 192, 192)","rgb(153, 102, 255)","rgb(201, 203, 207)"],Uo=Yo.map((t=>t.replace("rgb(","rgba(").replace(")",", 0.5)")));function Xo(t){return Yo[t%Yo.length]}function qo(t){return Uo[t%Uo.length]}function Ko(t){let e=0;return(i,s)=>{const n=t.getDatasetMeta(s).controller;n instanceof $n?e=function(t,e){return t.backgroundColor=t.data.map((()=>Xo(e++))),e}(i,e):n instanceof Yn?e=function(t,e){return t.backgroundColor=t.data.map((()=>qo(e++))),e}(i,e):n&&(e=function(t,e){return t.borderColor=Xo(e),t.backgroundColor=qo(e),++e}(i,e))}}function Go(t){let e;for(e in t)if(t[e].borderColor||t[e].backgroundColor)return!0;return!1}var Jo={id:"colors",defaults:{enabled:!0,forceOverride:!1},beforeLayout(t,e,i){if(!i.enabled)return;const{data:{datasets:s},options:n}=t.config,{elements:o}=n,a=Go(s)||(r=n)&&(r.borderColor||r.backgroundColor)||o&&Go(o)||"rgba(0,0,0,0.1)"!==ue.borderColor||"rgba(0,0,0,0.1)"!==ue.backgroundColor;var r;if(!i.forceOverride&&a)return;const l=Ko(t);s.forEach(l)}};function Zo(t){if(t._decimated){const e=t._data;delete t._decimated,delete t._data,Object.defineProperty(t,"data",{configurable:!0,enumerable:!0,writable:!0,value:e})}}function Qo(t){t.data.datasets.forEach((t=>{Zo(t)}))}var ta={id:"decimation",defaults:{algorithm:"min-max",enabled:!1},beforeElementsUpdate:(t,e,i)=>{if(!i.enabled)return void Qo(t);const n=t.width;t.data.datasets.forEach(((e,o)=>{const{_data:a,indexAxis:r}=e,l=t.getDatasetMeta(o),h=a||e.data;if("y"===Pi([r,t.options.indexAxis]))return;if(!l.controller.supportsDecimation)return;const c=t.scales[l.xAxisID];if("linear"!==c.type&&"time"!==c.type)return;if(t.options.parsing)return;let{start:d,count:u}=function(t,e){const i=e.length;let s,n=0;const{iScale:o}=t,{min:a,max:r,minDefined:l,maxDefined:h}=o.getUserBounds();return l&&(n=Z(it(e,o.axis,a).lo,0,i-1)),s=h?Z(it(e,o.axis,r).hi+1,n,i)-n:i-n,{start:n,count:s}}(l,h);if(u<=(i.threshold||4*n))return void Zo(e);let f;switch(s(a)&&(e._data=h,delete e.data,Object.defineProperty(e,"data",{configurable:!0,enumerable:!0,get:function(){return this._decimated},set:function(t){this._data=t}})),i.algorithm){case"lttb":f=function(t,e,i,s,n){const o=n.samples||s;if(o>=i)return t.slice(e,e+i);const a=[],r=(i-2)/(o-2);let l=0;const h=e+i-1;let c,d,u,f,g,p=e;for(a[l++]=t[p],c=0;cu&&(u=f,d=t[s],g=s);a[l++]=d,p=g}return a[l++]=t[h],a}(h,d,u,n,i);break;case"min-max":f=function(t,e,i,n){let o,a,r,l,h,c,d,u,f,g,p=0,m=0;const x=[],b=e+i-1,_=t[e].x,y=t[b].x-_;for(o=e;og&&(g=l,d=o),p=(m*p+a.x)/++m;else{const i=o-1;if(!s(c)&&!s(d)){const e=Math.min(c,d),s=Math.max(c,d);e!==u&&e!==i&&x.push({...t[e],x:p}),s!==u&&s!==i&&x.push({...t[s],x:p})}o>0&&i!==u&&x.push(t[i]),x.push(a),h=e,m=0,f=g=l,c=d=u=o}}return x}(h,d,u,n);break;default:throw new Error(`Unsupported decimation algorithm '${i.algorithm}'`)}e._decimated=f}))},destroy(t){Qo(t)}};function ea(t,e,i,s){if(s)return;let n=e[t],o=i[t];return"angle"===t&&(n=G(n),o=G(o)),{property:t,start:n,end:o}}function ia(t,e,i){for(;e>t;e--){const t=i[e];if(!isNaN(t.x)&&!isNaN(t.y))break}return e}function sa(t,e,i,s){return t&&e?s(t[i],e[i]):t?t[i]:e?e[i]:0}function na(t,e){let i=[],s=!1;return n(t)?(s=!0,i=t):i=function(t,e){const{x:i=null,y:s=null}=t||{},n=e.points,o=[];return e.segments.forEach((({start:t,end:e})=>{e=ia(t,e,n);const a=n[t],r=n[e];null!==s?(o.push({x:a.x,y:s}),o.push({x:r.x,y:s})):null!==i&&(o.push({x:i,y:a.y}),o.push({x:i,y:r.y}))})),o}(t,e),i.length?new oo({points:i,options:{tension:0},_loop:s,_fullLoop:s}):null}function oa(t){return t&&!1!==t.fill}function aa(t,e,i){let s=t[e].fill;const n=[e];let o;if(!i)return s;for(;!1!==s&&-1===n.indexOf(s);){if(!a(s))return s;if(o=t[s],!o)return!1;if(o.visible)return s;n.push(s),s=o.fill}return!1}function ra(t,e,i){const s=function(t){const e=t.options,i=e.fill;let s=l(i&&i.target,i);void 0===s&&(s=!!e.backgroundColor);if(!1===s||null===s)return!1;if(!0===s)return"origin";return s}(t);if(o(s))return!isNaN(s.value)&&s;let n=parseFloat(s);return a(n)&&Math.floor(n)===n?function(t,e,i,s){"-"!==t&&"+"!==t||(i=e+i);if(i===e||i<0||i>=s)return!1;return i}(s[0],e,n,i):["origin","start","end","stack","shape"].indexOf(s)>=0&&s}function la(t,e,i){const s=[];for(let n=0;n=0;--e){const i=n[e].$filler;i&&(i.line.updateControlPoints(o,i.axis),s&&i.fill&&ua(t.ctx,i,o))}},beforeDatasetsDraw(t,e,i){if("beforeDatasetsDraw"!==i.drawTime)return;const s=t.getSortedVisibleDatasetMetas();for(let e=s.length-1;e>=0;--e){const i=s[e].$filler;oa(i)&&ua(t.ctx,i,t.chartArea)}},beforeDatasetDraw(t,e,i){const s=e.meta.$filler;oa(s)&&"beforeDatasetDraw"===i.drawTime&&ua(t.ctx,s,t.chartArea)},defaults:{propagate:!0,drawTime:"beforeDatasetDraw"}};const _a=(t,e)=>{let{boxHeight:i=e,boxWidth:s=e}=t;return t.usePointStyle&&(i=Math.min(i,e),s=t.pointStyleWidth||Math.min(s,e)),{boxWidth:s,boxHeight:i,itemHeight:Math.max(e,i)}};class ya extends $s{constructor(t){super(),this._added=!1,this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1,this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this.legendItems=void 0,this.columnSizes=void 0,this.lineWidths=void 0,this.maxHeight=void 0,this.maxWidth=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.height=void 0,this.width=void 0,this._margins=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e,i){this.maxWidth=t,this.maxHeight=e,this._margins=i,this.setDimensions(),this.buildLabels(),this.fit()}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=this._margins.left,this.right=this.width):(this.height=this.maxHeight,this.top=this._margins.top,this.bottom=this.height)}buildLabels(){const t=this.options.labels||{};let e=d(t.generateLabels,[this.chart],this)||[];t.filter&&(e=e.filter((e=>t.filter(e,this.chart.data)))),t.sort&&(e=e.sort(((e,i)=>t.sort(e,i,this.chart.data)))),this.options.reverse&&e.reverse(),this.legendItems=e}fit(){const{options:t,ctx:e}=this;if(!t.display)return void(this.width=this.height=0);const i=t.labels,s=Si(i.font),n=s.size,o=this._computeTitleHeight(),{boxWidth:a,itemHeight:r}=_a(i,n);let l,h;e.font=s.string,this.isHorizontal()?(l=this.maxWidth,h=this._fitRows(o,n,a,r)+10):(h=this.maxHeight,l=this._fitCols(o,s,a,r)+10),this.width=Math.min(l,t.maxWidth||this.maxWidth),this.height=Math.min(h,t.maxHeight||this.maxHeight)}_fitRows(t,e,i,s){const{ctx:n,maxWidth:o,options:{labels:{padding:a}}}=this,r=this.legendHitBoxes=[],l=this.lineWidths=[0],h=s+a;let c=t;n.textAlign="left",n.textBaseline="middle";let d=-1,u=-h;return this.legendItems.forEach(((t,f)=>{const g=i+e/2+n.measureText(t.text).width;(0===f||l[l.length-1]+g+2*a>o)&&(c+=h,l[l.length-(f>0?0:1)]=0,u+=h,d++),r[f]={left:0,top:u,row:d,width:g,height:s},l[l.length-1]+=g+a})),c}_fitCols(t,e,i,s){const{ctx:n,maxHeight:o,options:{labels:{padding:a}}}=this,r=this.legendHitBoxes=[],l=this.columnSizes=[],h=o-t;let c=a,d=0,u=0,f=0,g=0;return this.legendItems.forEach(((t,o)=>{const{itemWidth:p,itemHeight:m}=function(t,e,i,s,n){const o=function(t,e,i,s){let n=t.text;n&&"string"!=typeof n&&(n=n.reduce(((t,e)=>t.length>e.length?t:e)));return e+i.size/2+s.measureText(n).width}(s,t,e,i),a=function(t,e,i){let s=t;"string"!=typeof e.text&&(s=va(e,i));return s}(n,s,e.lineHeight);return{itemWidth:o,itemHeight:a}}(i,e,n,t,s);o>0&&u+m+2*a>h&&(c+=d+a,l.push({width:d,height:u}),f+=d+a,g++,d=u=0),r[o]={left:f,top:u,col:g,width:p,height:m},d=Math.max(d,p),u+=m+a})),c+=d,l.push({width:d,height:u}),c}adjustHitBoxes(){if(!this.options.display)return;const t=this._computeTitleHeight(),{legendHitBoxes:e,options:{align:i,labels:{padding:s},rtl:n}}=this,o=Oi(n,this.left,this.width);if(this.isHorizontal()){let n=0,a=ft(i,this.left+s,this.right-this.lineWidths[n]);for(const r of e)n!==r.row&&(n=r.row,a=ft(i,this.left+s,this.right-this.lineWidths[n])),r.top+=this.top+t+s,r.left=o.leftForLtr(o.x(a),r.width),a+=r.width+s}else{let n=0,a=ft(i,this.top+t+s,this.bottom-this.columnSizes[n].height);for(const r of e)r.col!==n&&(n=r.col,a=ft(i,this.top+t+s,this.bottom-this.columnSizes[n].height)),r.top=a,r.left+=this.left+s,r.left=o.leftForLtr(o.x(r.left),r.width),a+=r.height+s}}isHorizontal(){return"top"===this.options.position||"bottom"===this.options.position}draw(){if(this.options.display){const t=this.ctx;Ie(t,this),this._draw(),ze(t)}}_draw(){const{options:t,columnSizes:e,lineWidths:i,ctx:s}=this,{align:n,labels:o}=t,a=ue.color,r=Oi(t.rtl,this.left,this.width),h=Si(o.font),{padding:c}=o,d=h.size,u=d/2;let f;this.drawTitle(),s.textAlign=r.textAlign("left"),s.textBaseline="middle",s.lineWidth=.5,s.font=h.string;const{boxWidth:g,boxHeight:p,itemHeight:m}=_a(o,d),x=this.isHorizontal(),b=this._computeTitleHeight();f=x?{x:ft(n,this.left+c,this.right-i[0]),y:this.top+c+b,line:0}:{x:this.left+c,y:ft(n,this.top+b+c,this.bottom-e[0].height),line:0},Ai(this.ctx,t.textDirection);const _=m+c;this.legendItems.forEach(((y,v)=>{s.strokeStyle=y.fontColor,s.fillStyle=y.fontColor;const M=s.measureText(y.text).width,w=r.textAlign(y.textAlign||(y.textAlign=o.textAlign)),k=g+u+M;let S=f.x,P=f.y;r.setWidth(this.width),x?v>0&&S+k+c>this.right&&(P=f.y+=_,f.line++,S=f.x=ft(n,this.left+c,this.right-i[f.line])):v>0&&P+_>this.bottom&&(S=f.x=S+e[f.line].width+c,f.line++,P=f.y=ft(n,this.top+b+c,this.bottom-e[f.line].height));if(function(t,e,i){if(isNaN(g)||g<=0||isNaN(p)||p<0)return;s.save();const n=l(i.lineWidth,1);if(s.fillStyle=l(i.fillStyle,a),s.lineCap=l(i.lineCap,"butt"),s.lineDashOffset=l(i.lineDashOffset,0),s.lineJoin=l(i.lineJoin,"miter"),s.lineWidth=n,s.strokeStyle=l(i.strokeStyle,a),s.setLineDash(l(i.lineDash,[])),o.usePointStyle){const a={radius:p*Math.SQRT2/2,pointStyle:i.pointStyle,rotation:i.rotation,borderWidth:n},l=r.xPlus(t,g/2);Ee(s,a,l,e+u,o.pointStyleWidth&&g)}else{const o=e+Math.max((d-p)/2,0),a=r.leftForLtr(t,g),l=wi(i.borderRadius);s.beginPath(),Object.values(l).some((t=>0!==t))?He(s,{x:a,y:o,w:g,h:p,radius:l}):s.rect(a,o,g,p),s.fill(),0!==n&&s.stroke()}s.restore()}(r.x(S),P,y),S=gt(w,S+g+u,x?S+k:this.right,t.rtl),function(t,e,i){Ne(s,i.text,t,e+m/2,h,{strikethrough:i.hidden,textAlign:r.textAlign(i.textAlign)})}(r.x(S),P,y),x)f.x+=k+c;else if("string"!=typeof y.text){const t=h.lineHeight;f.y+=va(y,t)+c}else f.y+=_})),Ti(this.ctx,t.textDirection)}drawTitle(){const t=this.options,e=t.title,i=Si(e.font),s=ki(e.padding);if(!e.display)return;const n=Oi(t.rtl,this.left,this.width),o=this.ctx,a=e.position,r=i.size/2,l=s.top+r;let h,c=this.left,d=this.width;if(this.isHorizontal())d=Math.max(...this.lineWidths),h=this.top+l,c=ft(t.align,c,this.right-d);else{const e=this.columnSizes.reduce(((t,e)=>Math.max(t,e.height)),0);h=l+ft(t.align,this.top,this.bottom-e-t.labels.padding-this._computeTitleHeight())}const u=ft(a,c,c+d);o.textAlign=n.textAlign(ut(a)),o.textBaseline="middle",o.strokeStyle=e.color,o.fillStyle=e.color,o.font=i.string,Ne(o,e.text,u,h,i)}_computeTitleHeight(){const t=this.options.title,e=Si(t.font),i=ki(t.padding);return t.display?e.lineHeight+i.height:0}_getLegendItemAt(t,e){let i,s,n;if(tt(t,this.left,this.right)&&tt(e,this.top,this.bottom))for(n=this.legendHitBoxes,i=0;it.chart.options.color,boxWidth:40,padding:10,generateLabels(t){const e=t.data.datasets,{labels:{usePointStyle:i,pointStyle:s,textAlign:n,color:o,useBorderRadius:a,borderRadius:r}}=t.legend.options;return t._getSortedDatasetMetas().map((t=>{const l=t.controller.getStyle(i?0:void 0),h=ki(l.borderWidth);return{text:e[t.index].label,fillStyle:l.backgroundColor,fontColor:o,hidden:!t.visible,lineCap:l.borderCapStyle,lineDash:l.borderDash,lineDashOffset:l.borderDashOffset,lineJoin:l.borderJoinStyle,lineWidth:(h.width+h.height)/4,strokeStyle:l.borderColor,pointStyle:s||l.pointStyle,rotation:l.rotation,textAlign:n||l.textAlign,borderRadius:a&&(r||l.borderRadius),datasetIndex:t.index}}),this)}},title:{color:t=>t.chart.options.color,display:!1,position:"center",text:""}},descriptors:{_scriptable:t=>!t.startsWith("on"),labels:{_scriptable:t=>!["generateLabels","filter","sort"].includes(t)}}};class wa extends $s{constructor(t){super(),this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this._padding=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e){const i=this.options;if(this.left=0,this.top=0,!i.display)return void(this.width=this.height=this.right=this.bottom=0);this.width=this.right=t,this.height=this.bottom=e;const s=n(i.text)?i.text.length:1;this._padding=ki(i.padding);const o=s*Si(i.font).lineHeight+this._padding.height;this.isHorizontal()?this.height=o:this.width=o}isHorizontal(){const t=this.options.position;return"top"===t||"bottom"===t}_drawArgs(t){const{top:e,left:i,bottom:s,right:n,options:o}=this,a=o.align;let r,l,h,c=0;return this.isHorizontal()?(l=ft(a,i,n),h=e+t,r=n-i):("left"===o.position?(l=i+t,h=ft(a,s,e),c=-.5*C):(l=n-t,h=ft(a,e,s),c=.5*C),r=s-e),{titleX:l,titleY:h,maxWidth:r,rotation:c}}draw(){const t=this.ctx,e=this.options;if(!e.display)return;const i=Si(e.font),s=i.lineHeight/2+this._padding.top,{titleX:n,titleY:o,maxWidth:a,rotation:r}=this._drawArgs(s);Ne(t,e.text,0,0,i,{color:e.color,maxWidth:a,rotation:r,textAlign:ut(e.align),textBaseline:"middle",translation:[n,o]})}}var ka={id:"title",_element:wa,start(t,e,i){!function(t,e){const i=new wa({ctx:t.ctx,options:e,chart:t});ls.configure(t,i,e),ls.addBox(t,i),t.titleBlock=i}(t,i)},stop(t){const e=t.titleBlock;ls.removeBox(t,e),delete t.titleBlock},beforeUpdate(t,e,i){const s=t.titleBlock;ls.configure(t,s,i),s.options=i},defaults:{align:"center",display:!1,font:{weight:"bold"},fullSize:!0,padding:10,position:"top",text:"",weight:2e3},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}};const Sa=new WeakMap;var Pa={id:"subtitle",start(t,e,i){const s=new wa({ctx:t.ctx,options:i,chart:t});ls.configure(t,s,i),ls.addBox(t,s),Sa.set(t,s)},stop(t){ls.removeBox(t,Sa.get(t)),Sa.delete(t)},beforeUpdate(t,e,i){const s=Sa.get(t);ls.configure(t,s,i),s.options=i},defaults:{align:"center",display:!1,font:{weight:"normal"},fullSize:!0,padding:0,position:"top",text:"",weight:1500},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}};const Da={average(t){if(!t.length)return!1;let e,i,s=new Set,n=0,o=0;for(e=0,i=t.length;et+e))/s.size,y:n/o}},nearest(t,e){if(!t.length)return!1;let i,s,n,o=e.x,a=e.y,r=Number.POSITIVE_INFINITY;for(i=0,s=t.length;i-1?t.split("\n"):t}function Aa(t,e){const{element:i,datasetIndex:s,index:n}=e,o=t.getDatasetMeta(s).controller,{label:a,value:r}=o.getLabelAndValue(n);return{chart:t,label:a,parsed:o.getParsed(n),raw:t.data.datasets[s].data[n],formattedValue:r,dataset:o.getDataset(),dataIndex:n,datasetIndex:s,element:i}}function Ta(t,e){const i=t.chart.ctx,{body:s,footer:n,title:o}=t,{boxWidth:a,boxHeight:r}=e,l=Si(e.bodyFont),h=Si(e.titleFont),c=Si(e.footerFont),d=o.length,f=n.length,g=s.length,p=ki(e.padding);let m=p.height,x=0,b=s.reduce(((t,e)=>t+e.before.length+e.lines.length+e.after.length),0);if(b+=t.beforeBody.length+t.afterBody.length,d&&(m+=d*h.lineHeight+(d-1)*e.titleSpacing+e.titleMarginBottom),b){m+=g*(e.displayColors?Math.max(r,l.lineHeight):l.lineHeight)+(b-g)*l.lineHeight+(b-1)*e.bodySpacing}f&&(m+=e.footerMarginTop+f*c.lineHeight+(f-1)*e.footerSpacing);let _=0;const y=function(t){x=Math.max(x,i.measureText(t).width+_)};return i.save(),i.font=h.string,u(t.title,y),i.font=l.string,u(t.beforeBody.concat(t.afterBody),y),_=e.displayColors?a+2+e.boxPadding:0,u(s,(t=>{u(t.before,y),u(t.lines,y),u(t.after,y)})),_=0,i.font=c.string,u(t.footer,y),i.restore(),x+=p.width,{width:x,height:m}}function La(t,e,i,s){const{x:n,width:o}=i,{width:a,chartArea:{left:r,right:l}}=t;let h="center";return"center"===s?h=n<=(r+l)/2?"left":"right":n<=o/2?h="left":n>=a-o/2&&(h="right"),function(t,e,i,s){const{x:n,width:o}=s,a=i.caretSize+i.caretPadding;return"left"===t&&n+o+a>e.width||"right"===t&&n-o-a<0||void 0}(h,t,e,i)&&(h="center"),h}function Ea(t,e,i){const s=i.yAlign||e.yAlign||function(t,e){const{y:i,height:s}=e;return it.height-s/2?"bottom":"center"}(t,i);return{xAlign:i.xAlign||e.xAlign||La(t,e,i,s),yAlign:s}}function Ra(t,e,i,s){const{caretSize:n,caretPadding:o,cornerRadius:a}=t,{xAlign:r,yAlign:l}=i,h=n+o,{topLeft:c,topRight:d,bottomLeft:u,bottomRight:f}=wi(a);let g=function(t,e){let{x:i,width:s}=t;return"right"===e?i-=s:"center"===e&&(i-=s/2),i}(e,r);const p=function(t,e,i){let{y:s,height:n}=t;return"top"===e?s+=i:s-="bottom"===e?n+i:n/2,s}(e,l,h);return"center"===l?"left"===r?g+=h:"right"===r&&(g-=h):"left"===r?g-=Math.max(c,u)+n:"right"===r&&(g+=Math.max(d,f)+n),{x:Z(g,0,s.width-e.width),y:Z(p,0,s.height-e.height)}}function Ia(t,e,i){const s=ki(i.padding);return"center"===e?t.x+t.width/2:"right"===e?t.x+t.width-s.right:t.x+s.left}function za(t){return Ca([],Oa(t))}function Fa(t,e){const i=e&&e.dataset&&e.dataset.tooltip&&e.dataset.tooltip.callbacks;return i?t.override(i):t}const Va={beforeTitle:e,title(t){if(t.length>0){const e=t[0],i=e.chart.data.labels,s=i?i.length:0;if(this&&this.options&&"dataset"===this.options.mode)return e.dataset.label||"";if(e.label)return e.label;if(s>0&&e.dataIndex{const e={before:[],lines:[],after:[]},n=Fa(i,t);Ca(e.before,Oa(Ba(n,"beforeLabel",this,t))),Ca(e.lines,Ba(n,"label",this,t)),Ca(e.after,Oa(Ba(n,"afterLabel",this,t))),s.push(e)})),s}getAfterBody(t,e){return za(Ba(e.callbacks,"afterBody",this,t))}getFooter(t,e){const{callbacks:i}=e,s=Ba(i,"beforeFooter",this,t),n=Ba(i,"footer",this,t),o=Ba(i,"afterFooter",this,t);let a=[];return a=Ca(a,Oa(s)),a=Ca(a,Oa(n)),a=Ca(a,Oa(o)),a}_createItems(t){const e=this._active,i=this.chart.data,s=[],n=[],o=[];let a,r,l=[];for(a=0,r=e.length;at.filter(e,s,n,i)))),t.itemSort&&(l=l.sort(((e,s)=>t.itemSort(e,s,i)))),u(l,(e=>{const i=Fa(t.callbacks,e);s.push(Ba(i,"labelColor",this,e)),n.push(Ba(i,"labelPointStyle",this,e)),o.push(Ba(i,"labelTextColor",this,e))})),this.labelColors=s,this.labelPointStyles=n,this.labelTextColors=o,this.dataPoints=l,l}update(t,e){const i=this.options.setContext(this.getContext()),s=this._active;let n,o=[];if(s.length){const t=Da[i.position].call(this,s,this._eventPosition);o=this._createItems(i),this.title=this.getTitle(o,i),this.beforeBody=this.getBeforeBody(o,i),this.body=this.getBody(o,i),this.afterBody=this.getAfterBody(o,i),this.footer=this.getFooter(o,i);const e=this._size=Ta(this,i),a=Object.assign({},t,e),r=Ea(this.chart,i,a),l=Ra(i,a,r,this.chart);this.xAlign=r.xAlign,this.yAlign=r.yAlign,n={opacity:1,x:l.x,y:l.y,width:e.width,height:e.height,caretX:t.x,caretY:t.y}}else 0!==this.opacity&&(n={opacity:0});this._tooltipItems=o,this.$context=void 0,n&&this._resolveAnimations().update(this,n),t&&i.external&&i.external.call(this,{chart:this.chart,tooltip:this,replay:e})}drawCaret(t,e,i,s){const n=this.getCaretPosition(t,i,s);e.lineTo(n.x1,n.y1),e.lineTo(n.x2,n.y2),e.lineTo(n.x3,n.y3)}getCaretPosition(t,e,i){const{xAlign:s,yAlign:n}=this,{caretSize:o,cornerRadius:a}=i,{topLeft:r,topRight:l,bottomLeft:h,bottomRight:c}=wi(a),{x:d,y:u}=t,{width:f,height:g}=e;let p,m,x,b,_,y;return"center"===n?(_=u+g/2,"left"===s?(p=d,m=p-o,b=_+o,y=_-o):(p=d+f,m=p+o,b=_-o,y=_+o),x=p):(m="left"===s?d+Math.max(r,h)+o:"right"===s?d+f-Math.max(l,c)-o:this.caretX,"top"===n?(b=u,_=b-o,p=m-o,x=m+o):(b=u+g,_=b+o,p=m+o,x=m-o),y=b),{x1:p,x2:m,x3:x,y1:b,y2:_,y3:y}}drawTitle(t,e,i){const s=this.title,n=s.length;let o,a,r;if(n){const l=Oi(i.rtl,this.x,this.width);for(t.x=Ia(this,i.titleAlign,i),e.textAlign=l.textAlign(i.titleAlign),e.textBaseline="middle",o=Si(i.titleFont),a=i.titleSpacing,e.fillStyle=i.titleColor,e.font=o.string,r=0;r0!==t))?(t.beginPath(),t.fillStyle=n.multiKeyBackground,He(t,{x:e,y:g,w:h,h:l,radius:r}),t.fill(),t.stroke(),t.fillStyle=a.backgroundColor,t.beginPath(),He(t,{x:i,y:g+1,w:h-2,h:l-2,radius:r}),t.fill()):(t.fillStyle=n.multiKeyBackground,t.fillRect(e,g,h,l),t.strokeRect(e,g,h,l),t.fillStyle=a.backgroundColor,t.fillRect(i,g+1,h-2,l-2))}t.fillStyle=this.labelTextColors[i]}drawBody(t,e,i){const{body:s}=this,{bodySpacing:n,bodyAlign:o,displayColors:a,boxHeight:r,boxWidth:l,boxPadding:h}=i,c=Si(i.bodyFont);let d=c.lineHeight,f=0;const g=Oi(i.rtl,this.x,this.width),p=function(i){e.fillText(i,g.x(t.x+f),t.y+d/2),t.y+=d+n},m=g.textAlign(o);let x,b,_,y,v,M,w;for(e.textAlign=o,e.textBaseline="middle",e.font=c.string,t.x=Ia(this,m,i),e.fillStyle=i.bodyColor,u(this.beforeBody,p),f=a&&"right"!==m?"center"===o?l/2+h:l+2+h:0,y=0,M=s.length;y0&&e.stroke()}_updateAnimationTarget(t){const e=this.chart,i=this.$animations,s=i&&i.x,n=i&&i.y;if(s||n){const i=Da[t.position].call(this,this._active,this._eventPosition);if(!i)return;const o=this._size=Ta(this,t),a=Object.assign({},i,this._size),r=Ea(e,t,a),l=Ra(t,a,r,e);s._to===l.x&&n._to===l.y||(this.xAlign=r.xAlign,this.yAlign=r.yAlign,this.width=o.width,this.height=o.height,this.caretX=i.x,this.caretY=i.y,this._resolveAnimations().update(this,l))}}_willRender(){return!!this.opacity}draw(t){const e=this.options.setContext(this.getContext());let i=this.opacity;if(!i)return;this._updateAnimationTarget(e);const s={width:this.width,height:this.height},n={x:this.x,y:this.y};i=Math.abs(i)<.001?0:i;const o=ki(e.padding),a=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;e.enabled&&a&&(t.save(),t.globalAlpha=i,this.drawBackground(n,t,s,e),Ai(t,e.textDirection),n.y+=o.top,this.drawTitle(n,t,e),this.drawBody(n,t,e),this.drawFooter(n,t,e),Ti(t,e.textDirection),t.restore())}getActiveElements(){return this._active||[]}setActiveElements(t,e){const i=this._active,s=t.map((({datasetIndex:t,index:e})=>{const i=this.chart.getDatasetMeta(t);if(!i)throw new Error("Cannot find a dataset at index "+t);return{datasetIndex:t,element:i.data[e],index:e}})),n=!f(i,s),o=this._positionChanged(s,e);(n||o)&&(this._active=s,this._eventPosition=e,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(t,e,i=!0){if(e&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;const s=this.options,n=this._active||[],o=this._getActiveElements(t,n,e,i),a=this._positionChanged(o,t),r=e||!f(o,n)||a;return r&&(this._active=o,(s.enabled||s.external)&&(this._eventPosition={x:t.x,y:t.y},this.update(!0,e))),r}_getActiveElements(t,e,i,s){const n=this.options;if("mouseout"===t.type)return[];if(!s)return e.filter((t=>this.chart.data.datasets[t.datasetIndex]&&void 0!==this.chart.getDatasetMeta(t.datasetIndex).controller.getParsed(t.index)));const o=this.chart.getElementsAtEventForMode(t,n.mode,n,i);return n.reverse&&o.reverse(),o}_positionChanged(t,e){const{caretX:i,caretY:s,options:n}=this,o=Da[n.position].call(this,t,e);return!1!==o&&(i!==o.x||s!==o.y)}}var Na={id:"tooltip",_element:Wa,positioners:Da,afterInit(t,e,i){i&&(t.tooltip=new Wa({chart:t,options:i}))},beforeUpdate(t,e,i){t.tooltip&&t.tooltip.initialize(i)},reset(t,e,i){t.tooltip&&t.tooltip.initialize(i)},afterDraw(t){const e=t.tooltip;if(e&&e._willRender()){const i={tooltip:e};if(!1===t.notifyPlugins("beforeTooltipDraw",{...i,cancelable:!0}))return;e.draw(t.ctx),t.notifyPlugins("afterTooltipDraw",i)}},afterEvent(t,e){if(t.tooltip){const i=e.replay;t.tooltip.handleEvent(e.event,i,e.inChartArea)&&(e.changed=!0)}},defaults:{enabled:!0,external:null,position:"average",backgroundColor:"rgba(0,0,0,0.8)",titleColor:"#fff",titleFont:{weight:"bold"},titleSpacing:2,titleMarginBottom:6,titleAlign:"left",bodyColor:"#fff",bodySpacing:2,bodyFont:{},bodyAlign:"left",footerColor:"#fff",footerSpacing:2,footerMarginTop:6,footerFont:{weight:"bold"},footerAlign:"left",padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(t,e)=>e.bodyFont.size,boxWidth:(t,e)=>e.bodyFont.size,multiKeyBackground:"#fff",displayColors:!0,boxPadding:0,borderColor:"rgba(0,0,0,0)",borderWidth:0,animation:{duration:400,easing:"easeOutQuart"},animations:{numbers:{type:"number",properties:["x","y","width","height","caretX","caretY"]},opacity:{easing:"linear",duration:200}},callbacks:Va},defaultRoutes:{bodyFont:"font",footerFont:"font",titleFont:"font"},descriptors:{_scriptable:t=>"filter"!==t&&"itemSort"!==t&&"external"!==t,_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:"animation"}},additionalOptionScopes:["interaction"]};return Tn.register(Un,$o,go,t),Tn.helpers={...Hi},Tn._adapters=In,Tn.Animation=As,Tn.Animations=Ts,Tn.animator=bt,Tn.controllers=nn.controllers.items,Tn.DatasetController=js,Tn.Element=$s,Tn.elements=go,Tn.Interaction=Ki,Tn.layouts=ls,Tn.platforms=Ds,Tn.Scale=tn,Tn.Ticks=ae,Object.assign(Tn,Un,$o,go,t,Ds),Tn.Chart=Tn,"undefined"!=typeof window&&(window.Chart=Tn),Tn})); -//# sourceMappingURL=chart.umd.min.js.map \ No newline at end of file diff --git a/engine/core/templates/admin/index.html b/engine/core/templates/admin/index.html index a33a52d3..45b74158 100644 --- a/engine/core/templates/admin/index.html +++ b/engine/core/templates/admin/index.html @@ -125,7 +125,7 @@

- + + {{ daily_labels|json_script:"daily-labels" }} {{ daily_orders|json_script:"daily-orders" }} {{ daily_gross|json_script:"daily-gross" }} From 68890017f6b2169b1436eb5ff18f28f4f9e9be46 Mon Sep 17 00:00:00 2001 From: Egor fureunoir Gorbunov Date: Mon, 17 Nov 2025 16:31:24 +0300 Subject: [PATCH 3/3] Features: 1) None; Fixes: 1) Replace direct user access with UUID-based lookup in token mutations; Extra: 1) Updated all three token mutation methods to use User.objects.get by UUID; 2) Added consistent formatting and indentation. --- engine/vibes_auth/graphene/mutations.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/engine/vibes_auth/graphene/mutations.py b/engine/vibes_auth/graphene/mutations.py index bcdb6c5f..4ec6a070 100644 --- a/engine/vibes_auth/graphene/mutations.py +++ b/engine/vibes_auth/graphene/mutations.py @@ -205,7 +205,7 @@ class ObtainJSONWebToken(BaseMutation): try: serializer.is_valid(raise_exception=True) return ObtainJSONWebToken( - user=serializer.validated_data["user"], + user=User.objects.get(serializer.validated_data["user"]["uuid"]), refresh_token=serializer.validated_data["refresh"], access_token=serializer.validated_data["access"], ) @@ -226,7 +226,7 @@ class RefreshJSONWebToken(BaseMutation): try: serializer.is_valid(raise_exception=True) return RefreshJSONWebToken( - user=serializer.validated_data["user"], + user=User.objects.get(serializer.validated_data["user"]["uuid"]), access_token=serializer.validated_data["access"], refresh_token=serializer.validated_data["refresh"], ) @@ -247,7 +247,9 @@ class VerifyJSONWebToken(BaseMutation): with suppress(Exception): serializer.is_valid(raise_exception=True) # noinspection PyTypeChecker - return VerifyJSONWebToken(token_is_valid=True, user=serializer.validated_data["user"]) + return VerifyJSONWebToken( + token_is_valid=True, user=User.objects.get(serializer.validated_data["user"]["uuid"]) + ) detail = traceback.format_exc() if settings.DEBUG else "" # noinspection PyTypeChecker return VerifyJSONWebToken(token_is_valid=False, user=None, detail=detail)